Troubleshooting
On this page
Find the section that matches what failed, and keep the visible error message handy. If the recovery steps don't help, contact support with that message and the project or thread where it happened.
Desktop looks stuck or out of date
If the titlebar shows Offline or Reconnecting, check your computer's network connection. Threads and machine status will catch up when the connection returns. For a view that remains stale, press Cmd+R to reload the desktop app.
If the full window stays on Checking sign-in… or Loading workspace…, choose Reload when the button appears after 15 seconds. This will reload the desktop app, just like Cmd+R.
If a reload fails, the desktop app will retry automatically. If the window stays on Still reloading boxes.dev…, choose Reload to start loading the app again. If it shows Can’t reach boxes.dev, check your connection and choose Retry now.
If you closed the main window, choose File → Show Workbench. If you're stuck on a page and can't return to the workbench, sign out and sign back in.
Sign-in fails on a corporate network
If your company inspects HTTPS traffic, the desktop app and CLI can use its certificate authority when your operating system trusts it. boxes.dev will check system certificates after an untrusted-certificate error and retry the connection automatically.
If the error remains, ask your network administrator to check that the company certificate is installed and trusted for HTTPS on your computer. Fully quit and reopen the desktop app after certificate changes, then retry your CLI command. Expired, revoked, and wrong-host certificates still need correction; do not disable certificate verification.
On some Macs, checking system certificates can take several seconds. The desktop app does this once per launch when needed. Each CLI command that needs the company certificate can have the same delay.
If an older CLI cannot download its update, use the curl installer in Install and sign in on your own computer, or update on another network your company permits. An npm installation also depends on npm trusting the company certificate. Automatic certificate recovery does not configure a company proxy or change Codex and Claude's own networking.
A devbox or Template box stops responding
If the desktop app responds but the selected box doesn't, first confirm that you've selected the affected devbox or Template box. Then try these steps in order:
- Click the CPU or memory meter. If a process is using excessive resources, stop that process from the process view.
- If the machine still doesn't respond, choose Machine → Reset. This will stop shells, agent sessions, and background commands while keeping your files.
- If Reset fails, choose Machine → Reboot. Reboot will preserve files but stop every process, agent session, terminal, service, and connection on that machine.
Wait for a reboot to finish before starting another. If the result says the machine is sleeping, choose Wake. If the machine restarted but services aren't ready, wait briefly, then try Reset or contact support. See Sleep, wake, and recover for more recovery options.
A build or command was terminated
When a machine runs low on memory, boxes.dev may stop a large build, test
runner, or other workload to keep it responsive. If your command unexpectedly
reports Terminated or Killed, ask your agent to check
/run/boxes-memory-terminations.jsonl on that machine, or read it in Terminal:
cat /run/boxes-memory-terminations.jsonl
This file keeps the latest 20 signals sent by the boxes.dev memory watchdog,
oldest first. Compare the UTC timestamp (at), process name, and process ID
(pid, if you know it) with the failed command. Each record includes the
process's memory use when it was selected and the machine's memory figures
when the signal was sent;
command arguments are omitted. TERM asks the process to stop, and KILL
force-stops it if pressure continues after the grace period. These records
describe signals sent, not confirmed exit statuses.
Before retrying, reduce the number of parallel build or test jobs, or stop unnecessary workloads. Click the desktop CPU or memory meter to inspect current usage.
The file clears on reboot; a restored snapshot can include older records, so check the timestamps. Older machines may need a boxes.dev update before it is available. A missing or unmatched record doesn't rule out memory exhaustion: the operating system can also stop a process, and those kills aren't recorded here. If the cause is still unclear, keep the command output and approximate failure time when you contact support.
Setup scan, upload, or access failed
Return to your existing setup under Setups in progress in the desktop project menu. You can also choose Continue setup on its row in the setup wizard's Project step. If your local coding agent started the setup, choose View setup on its row instead, then see Set up a project with your local agent.
A scan missed something or stopped
Open the scan group with the missing items, describe what it should include, and choose Send feedback & rescan. Review the new findings before approving them. For a failed or stopped scan, use Retry scan.
If a scan is taking too long, choose Stop in its header. You can retry that scan later; stopping it will preserve other scans and completed reviews.
An upload or remote setup step failed
An interrupted upload will try to reconnect and resume automatically. If Retry upload appears, use it; confirmed uploaded parts will be kept.
For a temporary remote setup failure, use Retry setup when offered. If you stopped the setup agent yourself, choose Open setup thread and ask it to continue. Stopping the agent will leave setup paused until you continue the conversation.
If setup says boxes.dev ran into an unexpected error, retry setup. If it stops at the same step again, contact support with the project name and the step where setup stopped.
Git access failed
If setup couldn't verify Git access over SSH, the message names your Git host and says what setup found. It can report that SSH sign-in succeeded but the repository couldn't be read, that the Template box couldn't establish an SSH connection to the host, or that sign-in didn't complete even though the host's SSH server answered. If sign-in or the repository read failed, check the repository URL and the setup SSH key's access. Then choose Retry setup.
If the Template box couldn't connect, keep in mind that it runs in the cloud and
can't reach a Git host that accepts connections only from your company network
or approved IP addresses. If your Git host can allowlist an IP address, a
static egress IP
may help. Add the host and its SSH port, usually 22, as a destination, then
allowlist the static IP at the Git host and retry.
To change or skip Git access in a local-folder setup, choose Fix Git access when offered. This will remove the incomplete Template box and return you to Finalize Bundle while keeping your approved review and bundle choices. Restore the named GitHub account's repository access, or choose SSH and register the displayed public key with your Git host before verifying it. You can also skip Git access and configure it after setup.
For Create from GitHub, follow the error's access action: reconnect the original GitHub account, grant the boxes.dev GitHub App access to the named repositories, or restore your write permission. An organization owner may need to approve the access request. Retry after access is restored. If repository policy requires SSH, cancel and restart this setup with Use an SSH key for GitHub pull/push access instead.
Use Rebuild bundle when setup asks you to prepare the upload again. If it returns to Git access, verify the displayed key before continuing.
Setup asks you to start over
Use the setup's start-over action if it says the saved setup can no longer be used. Your original folder on your computer will remain; boxes.dev will rebuild the pending setup and upload bundle. For a payment block, resolve the issue in Billing before retrying.
Managed-project preparation needs attention
If a managed project shows GitHub access needs review, choose Review GitHub access. Reconnect the intended account or grant the boxes.dev GitHub App access to every named repository, then retry. This project type requires that access; it won't switch to SSH or an older Team Template version.
For a saved environment or setup failure, open View details, choose Copy details, and send them to a team admin. Your unsent draft and attachments will remain available to retry after the problem is fixed. Existing devboxes remain usable. A startup script warning has a different recovery path, described below.
An optional MCP connection can show a warning without blocking your first thread. Follow that warning's sign-in or retry action. Required GitHub access and sign-in for the selected coding agent must be ready before work can start. See Maintain a Team Template.
A new devbox warns about its startup script
If a new devbox's thread warns that its startup script failed or timed out, the devbox still started; the warning describes that script run's result. Review the script's outcome before relying on it, then dismiss the warning. Dismissing acknowledges that exact result, and a different failure will warn again. The script is the project's Startup script under Project settings → Devbox lifecycle.
In a managed project, the team script runs first with your connections and files available, followed by your project's script. Either failure will show a warning while the next script and agent continue; both results remain inspectable if both fail. For a team script, open or copy its details and contact a team admin. Admins can choose Review startup script to open its setting. Startup script failures won't pause other members' devbox creation.
A corrected script will apply to future devboxes. On this devbox, run the needed repair in Terminal or ask the agent; waking it or opening another thread won't rerun startup.
Codex, Claude, or an MCP needs sign-in
For a Codex or Claude sign-in error, use the thread's refresh action when offered. Otherwise, reconnect the affected account from Configure agents in the desktop app, or from the mobile app's Reconnect banner or Settings → Agent accounts. Check now will check the account without waking a machine. Needs re-auth means the provider rejected the saved login; an incomplete status check alone doesn't disconnect your account.
If Claude's browser sign-in page shows an error, retry on that page or cancel the attempt in boxes.dev and start again. You don't need to restart the desktop app.
To repair Codex sign-in from a terminal, run dvb setup --agents on your own
computer. Don't run codex login or codex logout inside a Template box or
devbox, or /login and /logout in Claude there; boxes.dev manages those
sign-ins. After reconnecting, return to the thread and reply to continue.
A Claude account connected with Log in with Claude needs a new sign-in about every four weeks, and boxes.dev will remind you three days ahead. If Claude on a devbox doesn't have the skills, plugins, or connectors you use on claude.ai, open Configure agents and check that the active Claude account says claude.ai login. If it says Setup token, choose Switch to claude.ai login from its ⋯ menu. For connectors, also make sure Allow claude.ai connectors is selected. Then start a new Claude thread.
An MCP connection needs attention
If a slow MCP reconnection delays a message to an existing Claude thread in the desktop app, boxes.dev will keep the message queued and send it when Claude is ready, even after a wait of more than a minute. You don't need to send it again. For a sign-in error, follow the steps below.
Open Integrations → MCPs, then select the Codex or Claude button on the affected connection. If sign-in shows Status unknown, choose Retry status check to check the same attempt, or Cancel to start over.
Without the desktop app, use MCPs on the boxes.dev website instead. If Finish sign-in says the address isn't from this sign-in, paste the full address from the tab you opened for that sign-in. If the sign-in expired or the provider declined it, start again from the agent's button. See Manage MCPs from the website.
For servers installed on the Template box, open Template-managed MCPs and choose Retry if the list won't load. This may wake the Template box. A dash in the server count means the list is unavailable; it doesn't mean no servers are installed. Managed projects don't have this Template box inventory.
To sign in from a terminal instead (on Linux, Windows, or over SSH), run
dvb mcp authorize <name> --agent codex or --agent claude on your own
computer, not inside a Template box or devbox. If your browser is on
another computer, it will end on a page that doesn't load after you approve
access. Paste that page's full address into the terminal to finish. See
Manage MCP servers.
An agent stopped before finishing
If a large Codex thread asks you to reload or update boxes.dev, press Cmd+R in the desktop app. Reloading won't stop the agent on the devbox. On mobile, open Settings → About → Release details and choose Check for update. If the message persists and no compatible update is available, install the latest app version or contact support.
If Retry says the thread is too large, send a new message to continue. The failed turn stays in your history.
If the message says an older thread is too large to reopen, start a new thread to continue. Updating the app does not remove this limitation for older threads.
Use the failure message to choose the next action:
- Model capacity: boxes.dev continues a Codex thread automatically after a short wait. If the message asks you to reply, wait briefly before continuing, or choose another available model.
- Temporary rate limit: wait briefly before continuing.
- Credits: add credits or wait for them to renew in your agent account.
- Sign-in: reconnect the affected agent account.
- Machine networking: continue after the machine can reach the agent provider.
- Internal, rejected-request, or execution errors: read the error details before continuing, and include them if you contact support.
After a Codex response fails, reply in the same thread to continue. Codex retains the message and attachments it received; you do not need to send them again. If it may already have changed files, ask it to inspect the current files before continuing. Retry for a message that has not been delivered is a separate recovery action.
For Claude, Resend is available only when boxes.dev can confirm that Claude never received the message. If delivery is uncertain, read the conversation before sending the request again. See Recover from a failed start or message.
A devbox will not start or wake
Read the failure message before retrying:
- If you've reached the awake devbox limit, sleep an idle devbox to make room. Sleeping won't delete it.
- If billing blocks compute, open Billing. A team admin may need to update payment, assign a paid seat, or add usage credits.
- If a snapshot or saved Team Template version is unavailable, follow the message's recovery action. Contact support if it offers no way to continue.
Waking can take many seconds or a few minutes. Wait for the attempt to finish. If it fails, the machine returns to Sleeping; use its wake control to retry. With auto-wake enabled, selecting the machine again after 15 minutes can also trigger one new attempt.
If repeated attempts fail and no billing or capacity block is shown, contact support with the project, devbox, and approximate time.
If moving a thread from the Template box failed, its menu may offer Move back to Template box. If a recovery notice says the machine was restored after an unexpected stop, inspect its files and Git status before continuing: changes made after the restored snapshot may be missing.
Billing or a plan limit blocks work
If you're not a team admin, send the billing message to an admin. Depending on the block, they may need to add a payment method, renew or change the plan, assign a paid seat, buy usage credits, or configure automatic credit reload. For a project limit, you'll need room for another project or a plan that allows more projects. For the available options, see Plans, seats, and box-hours.
Ports, files, or Git are missing
Select the devbox or Template box that contains the work and wake it if needed. Each devbox has separate files and services, so selecting another machine can show a different repository state or an empty ports menu. For a commit that shows the wrong name or email, go to A commit has the wrong author.
A port is missing or won't open
Wait for the selected box to report its ports, then check that your development server is running on that machine. If an ordinary forwarded port can't open because your computer already uses that port, choose Use next available, or stop the local process using it. A stable Local URL keeps its exact port instead of offering another one: boxes.dev reports the conflict, and you can free the local port or turn off Local URLs for that devbox to return to ordinary forwarding.
A row shows privileged port when the app can't open a local port below 1024, such as 80 or 443. On macOS, add a forwarding rule for that single port, such as 443, to use the same local port. Linux normally reserves these ports for root on localhost, so that rule won't work there. On either system, you can choose Use next available to forward the port 8000 ports higher, such as 8080 for 80, or add a forwarding rule that maps it to a higher local port.
A public link or Project URL timed out
If a public link shows Application timed out, or a Project URL says the local application took too long to respond, your app didn't send its response in time. An unavailable-application error after about 2 minutes can also mean your app sent its headers but no other data. The work the request started may still be running, so check your app's own record of it before retrying. To keep slow requests from timing out, stream progress or run the work as a job, as described in handling long requests.
GitHub rejects a fetch, pull, or push
For a GitHub API rate-limit error, wait for the time shown before retrying the command. If no wait time is available, try again later.
For an account or repository access error, follow the recovery action to reconnect the original GitHub account, restore your write permission, or grant the boxes.dev GitHub App access to the repository.
If only pushes changing .github/workflows fail, choose Update GitHub
access for each affected installation, then return to boxes.dev to check
again. You can also use SSH. Ordinary Git operations can keep working while
that additional permission is pending.
A commit has the wrong author
Open Account settings and inspect Git identity. Unless you saved an override, it uses your connected GitHub account's name and private no-reply email. Then run these commands in the affected repository to see which configuration file supplies the name and email:
git config --show-origin --get user.name
git config --show-origin --get user.email
Repository settings take precedence over machine-wide settings, which take
precedence over the Account identity. Change the setting at the scope you
intend: Account for your shared default, git config --global for this
machine, or git config --local for this repository.
If Account reports a failed update for a saved override, choose Retry. GitHub defaults retry automatically. Active machines will update; sleeping machines will catch up when they next wake. If Git reports an invalid configuration file, repair the named file; changing the Account identity won't fix it.
GitHub CLI authentication failed
If managed gh says GitHub's API rate limit was reached, wait for the time
shown before retrying your command. If no wait time is available, try again
later.
Wake the affected machine, then open Integrations → GitHub. If you want
gh to use your connected boxes.dev GitHub account, turn on GitHub CLI in
devboxes. GitHub can be connected while this setting is off — desktop setup
offers the choice separately — so check the switch even when pull and push
already work. Complete any reconnect or machine update the page requests.
Without personal access, use Manage repository access to check that your
GitHub account and the boxes.dev GitHub App can reach every known repository
in the project. To use your personal permissions, run gh auth login or connect
optional personal access
in Integrations. Approve with the GitHub account connected to boxes.dev.
Managed gh will prefer personal access; GitHub will enforce your permissions
on each command.
Manage disconnects through boxes.dev. When the setting is off or GitHub isn't
connected, gh uses credentials configured on the machine, including native
gh auth login behavior.
The GitHub CLI access setting is separate from automatic Git fetch, pull, and push access.
A GitHub CLI command is denied
If a gh command fails with HTTP 403: Resource not accessible by integration,
it ran with the boxes.dev GitHub App's access, and the App doesn't have the
permission that command needs.
For supported commands that need a newly requested permission, managed gh
will show a link to the affected account's permission review before the command
runs. If GitHub denies the command, send that link to an installation owner, ask
them to accept the update, then retry your command. If the command succeeds
after gh shows the link, it didn't need the update, so don't run it again.
Email access needs your own Update connection approval instead; gh will
link to Account settings for that step. If no link appears, use the steps below.
For an Actions command, ask the repository's installation owner to approve
Actions read and write in GitHub Settings → GitHub Apps → boxes.dev, then retry.
Existing installations keep read-only Actions access until their owner approves
the increase. Approved App access can start, rerun, and cancel workflows and
manage their runs, logs, and artifacts. Actions writes, including gh workflow run, gh run rerun, and gh run cancel, will show the relevant approval link
before running when an update is needed. GitHub will still show its original
error if the command is denied.
For issue changes or publishing check results, ask the installation owner to approve Issues and Checks read and write, then retry. The App also requests read-only access to deployments. Reading your account's email addresses requires your own approval of the updated GitHub authorization; choose Update connection in Account or Integrations → GitHub to review and approve it.
If personal access is connected, gh prefers it. Personal access has different
permissions: the scopes requested by boxes.dev do not include account email
access, and personal access cannot publish check runs. Choose Disconnect
personal access to use the App for those commands after approving its required
permissions. For other commands beyond the App's access, optional personal
access may provide the permission you need.
To let gh use your own GitHub permissions, connect
optional personal access:
- Open Integrations → GitHub or Account settings.
- Choose Connect personal access under GitHub CLI access in Integrations, or under Personal GitHub CLI access (optional) in Account.
- Copy the one-time code, then approve the official GitHub CLI on GitHub with the GitHub account connected to boxes.dev.
You can also run gh auth login in a Template box or devbox, or ask your agent
to run it. The command will show a one-time code and approval URL, then wait
for your approval.
After you approve, gh will use your personal access on all of your Template
boxes and devboxes. Retry the command that failed.
Personal access can't do more than your GitHub account is allowed to do in that repository. If Integrations warns that personal access can't reach a repository, choose GitHub permissions to authorize the official GitHub CLI for that organization, then choose Check again.
Automations, Slack, or Linear did not start work
For a saved automation, open it and inspect its recent runs. If a run hit the awake devbox limit, sleep an idle devbox or reduce the number of simultaneous runs. For a billing block, resolve the issue in Billing. After fixing the cause, retry through the original trigger, or choose Run now if it is available. For work that should have started from Slack or Linear, start with that integration's section below.
Separate Slack requests and Linear assignments can start work at the same time, so a burst of requests can exhaust available devbox capacity.
Slack
Open Team settings → Slack to check the workspace connection. If it's missing, revoked, or lacks required permissions, ask a team admin to connect or reinstall the integration.
If Slack says your account isn't linked, send connect to the @boxes.dev
app in Slack. For a missing channel, add the app to that channel, then choose
Recheck in Team settings. Confirm that the automation is active and permits
that channel and user.
For missing attachments, check that the file is still available in Slack and the bot can access its channel. Slack file import also has size and sender restrictions; see Slack.
Linear
Open Team settings → Linear and choose Check. If access was revoked, permissions changed, or the connection remains invalid, a team admin needs to reconnect Linear. For the full setup steps, see Linear.
If new assignments don't start work, link your Linear identity in Account settings and confirm that your default assignment automation is active. Existing issues can continue their threads, but new assignments require both a working workspace connection and your linked identity.