
PART 5Connect, operate, and recover5.7
Troubleshooting — isolate by symptom
Isolate startup, update, authentication, Claude/Codex, Session, finish and result reporting, permission, Ask, document, HTML, WebUI, Desktop, and clone problems by symptom. Shows the order of checks, the fix, how to confirm success, and what to hand over when it is not resolved.
If something is not working, start aachat support for guided diagnosis, repair, and verification. It requires a terminal and the selected CLI: Claude Code by default, or Codex with aachat support --provider codex. Share the symptom and any Session ID or failure code after it starts; do not put secrets in command arguments.
aachat supportThe sections below are reference checks for the support agent. You do not need to choose between doctor, status, or manual recovery before starting support. The agent uses the bundled initial diagnosis, investigates only what the symptom requires, and checks the original operation after a repair. Stops, destructive cleanup, and reports follow the support contract’s approval rules.
If you have an error code, look it up in the error code index.
When an operation's outcome is unknown (the connection dropped, or no response came back), confirm whether the first attempt was accepted before repeating it. This principle applies to the whole page.
Find the section by symptom
| Symptom | Where to go next |
|---|---|
aachat up does not start, stopped, or sync stopped | aachat up fails to start or stops midway |
aachat up stopped at the startup update, or aachat update failed | Startup stops at the automatic update |
aachat up or the Launch Report shows a Node.js, npm, gh, git, or runtime lock error | Common aachat up messages |
| The CLI returns an authentication error | Authentication fails |
A Session does not start, or startup is preparing or runtime_offline | A Session does not start |
| A Session does not progress, or a permission answer did not take effect | A Session appears stuck, A permission answer does not reach the agent |
A Session became failed or stopped midway | A Session failed or stopped midway |
A Session became failed with Runtime error: … (Claude or Codex login expired, usage limit, and so on) | A Session failed with a Claude or Codex error |
A Session failed during preparation, or Initialization step: appeared | A Session failed during preparation |
A Session failed with agent process exited with code N, expired runtime authentication, an aachat up restart, or 60 minutes without a response | A Session failed because the runtime exited or disconnected |
SESSION_COMMAND_UNDELIVERED or A control command didn't reach the runtime. | An operation does not reach the runtime |
workspace_capacity_insufficient | A Session cannot start because disk space is short |
project_not_active, project_not_found, or document_not_found | A Project or document cannot be read |
session_not_running, session_pending_follow_ups, or workflow_session_managed | Operations are rejected around Session finish |
result_report_incomplete, invalid_ref, document_not_synced, or delivery_repository_mismatch | A result report is not recorded |
project_out_of_scope, cross_project_read_only, collaborator_required, or not_authorized | Another Project cannot be read or changed |
chat prints nothing, chat --version returns a different version, or token_required | chat does not work or its version does not match |
You want to use Windows, or aachat up stops on WSL2 | Using Windows and WSL2 |
| An Ask was answered but work did not continue | I answered an Ask but work has not continued |
| Documents do not sync, or conflict markers appeared | Shared Documents are not syncing |
| HTML does not sync, or the display is old | Project HTML does not sync or shows an old version |
| Environment variables do not reach the agent | Environment variables do not reach the agent |
| Discover or clone fails | A Discover clone fails |
| A Workflow Step failed or a Run needs attention | Read the Run's available actions and failed Attempt before retrying or canceling: Workflows |
| A Trigger does not start, pauses, or conflicts | Check dispatch history and the current state version; reconcile unknown outcomes before resending: Triggers |
| No database, stale migration parent, or large SQL result | Read schema/errors, reconcile accepted writes, and reduce columns or page size: Database |
| Desktop app initial preparation or sign-in stopped | Initial preparation stops, Sign-in does not complete or times out |
The Desktop app shows ガイドが止まりました (the guide stopped) or says settings cannot be read | Connecting to the guide times out, or the guide stopped, The saved guide settings cannot be read |
The Desktop app shows アプリを更新できませんでした。 (the app could not be updated) | The app cannot be updated |
| A share expired, its URL was lost, or a recipient cannot open it | Check scope, expiry, and revocation. A Media URL alone is not a public share: Sharing |
| Small Media is rejected, or an attachment expired | Check dimensions, pages, duration, format, and attachment expiry, not only bytes: Limits, Media |
| The agent stopped but its changes are missing | Compare repository HEAD, native delivery, results, and local observations: Code delivery |
| Runtime config was rejected | Reread the current profile and typed options, and confirm acceptance before resending: Agents |
| A GitHub repository cannot be connected in Team Settings | A GitHub repository cannot be connected |
WebUI sign-in fails, or Session expired. … returns you to the sign-in screen | Sign-in fails or returns to the sign-in screen |
The top right of the screen stays at Reconnecting... or Offline, and you cannot post in Chat | The connection indicator stays at Reconnecting... or Offline |
Waiting for this agent to connect. or Runtime offline; your message will be queued. | The agent's Runtime is shown as not connected |
| Starting a Session or Restart session shows an error toast | Starting or restarting a Session shows an error toast |
The Session screen shows Runtime failed. Check the agent logs. | A Session failed or stopped midway, I want to see the logs |
A response has Hit token limit, Turn limit reached, or Refused | A status badge appears at the end of a response |
You don’t have access to this Team. or Invite link not found | A Team or join link does not open |
Team File Tree shows Access lost, Repository too large, or Index failed | Team File Tree cannot be connected or updated |
| A file cannot be attached | An attachment cannot be added |
Opening HTML shows Popup blocked | Opening HTML shows Popup blocked |
An old aachat.work link does not open | Old aachat.work links do not open |
Diagnose first
The support agent uses these diagnostic APIs as needed. Initial doctor results are already supplied at startup; do not mechanically repeat the collection. Both commands return the common JSON on stdout.
aachat doctor— bounded read-only checks of the environment, authentication, synchronization, and workspaces.data.diagnostics.overallishealthy,issues_found,incomplete, orattention_needed. Read eachissues[]entry'scategory,code,target, andreason; usenext_actionsto respond andrecheckto verify. Unknown optional checks also make the resultincomplete.healthymeans no findings within the checked scope, not verified provider readiness or current synchronization success. Useaachat doctor --view checks(data.diagnostics.checks[]) for every checkaachat status— a current summary.datareturnsconnection(repo connection and Team),auth,daemon(stateisrunning,stopped, orunknown, pluslog_path),projection(syncstate,reason,last_sync_at), andgaps[]for anything that could not be observed. Disk-space and workspace-maintenance problems appear inwarnings[], and the next step innext_actions. It does not include the startup results (Launch Report); read those inup.log(below)
Hand diagnostics for a failed operation to support
Record the time of the failed operation (with timezone), the Team/Project, any existing IDs such as the Session, Run, or Ask, the CLI or app version, and the expected and actual results.
Inside a Session, chat prints exactly one JSON object on stdout for both success and failure. Success is {"ok":true,"data":{...}}; failure is {"ok":false,"error":{"code","message",...},"data"?}. Exit code 0 means success, 1 an execution failure, and 2 invalid input or arguments. Read error.code and any hint or commands, then go to the matching recovery procedure. --help and --version return text.
The failure JSON's error has code and message, plus project, field, candidates, commands, and hint when present. It has no diagnostic ID (diagnostic) field. Give support the error.code and message as they are. For Web API failures, check the request's HTTP status and the X-Aachat-Request-Id response header in the browser's Network panel. Do not share whole logs that contain secret tokens, cookies, or request bodies; select the evidence needed.
Record chat --version or aachat --version. The CLI version alone does not tell you the API, Web, or resident runtime version.
If server-side logs are needed, give the times and IDs above to an authorized administrator or support for correlation. Being unable to view a log means it is unconfirmed, not empty. After a fix, check the original operation's result separately.
Startup, authentication, and environment
aachat up fails to start or stops midway
Startup results are recorded as the Launch Report in up.log. aachat status does not return the Launch Report.
aachat status # check daemon.state, daemon.log_path, warnings, and next_actions
aachat launcher status # the resident runtime state (never starts anything)
cat ~/aachat/.run/logs/up.log # the === Launch Report === and === Runtime Health === sectionsup.log is written once the aachat up daemon has started. It rotates at each start and every 10 MiB into up.log.1–up.log.8 (up to 9 files). Confirm the actual path with daemon.log_path in aachat status. When the same failure repeats, the terminal summarizes it every 60 seconds, and the details are in this log. Each Session's agent stderr is separate, in ~/aachat/.run/logs/<agent>/<session-id>-agent-stderr.log.
Under [failed] <agent> in the Launch Report are Error [<category>]: ... and the action: steps. Follow action: first. Rough guidance by category:
| Category | Where to look |
|---|---|
GIT | GitHub connectivity, authentication, and branch settings; the agent repo state |
AUTH | gh auth status. If needed, a human runs gh auth login |
PERMISSION_DENIED | Ask the Team or Project owner for access |
PREREQ | Instructions from aachat doctor; install the missing tool |
NETWORK / API | Network and server status; rerun aachat up after a while |
CAPACITY | Check retained workspaces with aachat doctor and free at least 20 GiB |
CONFIG / IO | The agent repo file shown |
Git ls-remote and fetch used to prepare the agent repo and Session workspace are tried up to 4 times, only for connection drops, temporary DNS failures, and HTTP 5xx (waits of about 1, 2, and 4 seconds). Authentication, permission, missing repo or ref, and local corruption are not retried. A GIT failure is the result after this automatic retry. Fix the cause, then rerun aachat up.
Read workspace maintenance and runtime readiness as separate states.
- If
[started]appears with a workspace maintenance warning, the runtime is ready. Past workspaces are preserved for maintenance; useaachat doctorto see observed targets and next actions. A timed-out scan does not establish all paths, and eliminating every maintenance warning is not a startup requirement. Inaachat status,session_workspace_maintenanceinwarnings[]gives the counts and affected agents - If reading the list of live Sessions fails, aachat cannot confirm that resumable workspaces are protected, so it keeps only that agent offline. Fix the API connection and rerun
aachat up. Do not delete workspaces to force startup - If a new Session collides with a saved workspace, only that Session fails. Check the Session error and
aachat doctor, save local work, then repair or remove only the reported workspace
When it stopped on a sync protocol mismatch: in aachat status, projection.state is error and projection.reason says “Host mirror stopped because the sync protocol version does not match the server. …”; next_actions points to aachat update. After the normal stop and save, aachat up updates itself once and, if the installed version differs from the running one, restarts itself with the same arguments. The last synced Project files remain, but they are not current. If the automatic update does not resolve it, run aachat update, ask the human to restart aachat up, and confirm with aachat status. The human decides how to continue Sessions that stopped midway.
Startup stops at the automatic update
When aachat up is started as ~/.cargo/bin/aachat ($CARGO_HOME/bin/aachat if CARGO_HOME is set), it updates itself with aachat-update before starting the runtime. If a new version is installed, it prints Restarting with the updated binary... and restarts with the same arguments. If it is already current, it prints aachat v<version> (up to date) and continues. If this startup update fails, aachat up exits without starting the runtime.
After startup, it also checks for updates every hour while no turn is running. If that check fails, it only prints Update check failed: …; the runtime does not stop.
| Message | Meaning and fix |
|---|---|
aachat-update not found | The aachat-update updater is missing. Follow the Reinstall with: line and reinstall with the installer below |
aachat update failed: <updater output> | The updater failed. Read the output that follows. Check that you can reach the installer's distribution source (GitHub Releases) and your network and proxy, then rerun aachat up |
failed to run aachat updater: … or failed to get version from … | The updater, or the updated aachat, cannot run. Reinstall with the installer below |
To isolate the problem, run aachat update. On success, data.update.disposition is installed or up_to_date. On failure, read error and data.change.state.
not_applied— it stopped during preparation (checkingaachat-updateor reading the current version). Nothing changedunknown— it failed after running the updater, and the installed version is unconfirmed.data.gapslists what was not confirmed. Read the current version withaachat --version
Reinstall with the official installer. It is the same installer as the GitHub Releases aachat-installer.sh shown by Reinstall with:.
curl -fsSL https://aachat.io/install | sh
aachat --version
chat --versionSuccess: aachat and chat return the same version, and rerunning aachat up reaches the Launch Report in up.log.
Common aachat up messages
Under [failed] <agent> in the Launch Report are Error [<category>]: <message>, a cause line, and a Hint: line. Look up the message in the tables below before using the category table above. The Hint: line gives the concrete action.
Runtime adapters (Node.js, npm)
aachat up prepares the Claude and Codex runtime adapters with npm ci. If only one fails, the agent starts with only the Runtime that was prepared. If both fail, the agent becomes [failed] with no supported runtime adapter could be materialized (…), with the reason for each Runtime in the parentheses.
| Message | Meaning | Fix |
|---|---|---|
Node.js <version> is too old for the aachat runtime adapter | Node.js is older than 22 | Install Node.js 22 or later, check node --version in the shell that starts aachat up, then rerun |
'node' command not found in PATH or 'npm' command not found in PATH | node or npm is not on the PATH of the aachat up environment | Install Node.js. If you installed it with a version manager, check that node is visible in the shell that starts aachat up. Also read runtime_path and login_shell_path in aachat doctor --view checks |
'node' command cannot be resolved because PATH is not available | The aachat up environment has no PATH | Start aachat up from a shell where Node.js is installed and PATH is set |
runtime adapter npm install failed with exit code <N> | The adapter's npm ci failed. The npm output follows on the next lines | Check connectivity to the npm registry and your proxy, then rerun. HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, and NO_PROXY (lowercase too) are passed to npm ci |
failed to launch npm: npm ci timed out after 300s; … | npm ci did not finish within 5 minutes | Hint: points to installing Node.js, but this is a timeout, so check connectivity and your proxy first, then rerun |
gh and the aachat sign-in
During Authenticating..., aachat up refreshes the saved aachat sign-in from gh auth token if it is invalid. A failure here stops before the Launch Report.
| Message | Meaning | Fix |
|---|---|---|
gh auth token failed to execute or gh command not found in PATH (searched: …) | gh cannot be found | Install gh as Hint: says, then a human runs gh auth login |
gh auth token failed: … or gh auth token returned no credentials | gh is not logged in | A human runs gh auth login, checks with gh auth status, then reruns aachat up |
gh auth token timed out after 3s; … | gh did not respond within 3 seconds | Check in a terminal that gh auth token responds (do not share the token it prints) |
git (fetching the agent repo)
When git output contains one of these phrases (case-insensitive), the matching Hint: is added.
| Phrase in the git output | Category | Meaning and fix |
|---|---|---|
permission denied (publickey) or host key verification failed | AUTH | GitHub authentication over SSH failed. A human runs gh auth setup-git or checks the SSH key. To use HTTPS, use git config --global url."https://github.com/".insteadOf git@github.com: from Hint: |
authentication failed, could not read username, or invalid credentials | AUTH | HTTPS authentication failed. Check gh auth status, then a human runs gh auth login and gh auth setup-git |
remote: permission to, the requested url returned error: 403, or denied to | AUTH | You do not have push access to the repo. Check your GitHub permissions and the token scope with gh auth status |
repository not found or the requested url returned error: 404 | GIT | The repo does not exist or is not visible to this account. Check the agent repo name and, for a private repo, access |
could not resolve host, unable to access, connection refused, network is unreachable, or timed out | NETWORK | Check connectivity. A temporary failure is the result after the automatic retry above |
Runtime lock
A normal aachat up stops and replaces an aachat up that is already running (Stopping existing aachat up (pid <pid>)...). With --if-stopped, it does nothing if one is running.
| Message | Meaning |
|---|---|
failed to stop existing aachat up process <pid> | The existing aachat up could not be stopped |
previous aachat up did not release the runtime lock | The runtime lock was not released even after the existing aachat up stopped |
the aachat up runtime lock is held, but no valid runtime status was published | With --if-stopped, the aachat up holding the lock has not published its state |
The fix is the same for all of them. Use daemon in aachat status and aachat launcher status to find where the running aachat up is. Stop one started in a terminal with Ctrl+C in that terminal, and one started by the macOS launcher with aachat launcher stop, then rerun aachat up. Do not work around it by deleting lock or status files by hand. If it does not resolve, start aachat support.
Startup requires a layout migration
For project workspace layout migration required, update the CLI and start aachat support. Recovery preserves the entire old root, prepares an empty root, and reconnects to the same Team. There is no compatibility mode for continued operation on the old layout.
Both the message and the empty root that recovery prepares are layout 8. A root that is already layout 7 does not require migration: the next normal Session startup checks the current membership and updates only the layout record to layout 8, without moving files.
Support records the home, connected repositories and original Teams, then verifies that the runtime and old Session processes have stopped. aachat support recover-layout --root <absolute-path> --backup <absolute-new-backup> inspects only. Adding --apply with the same arguments moves the entire old directory into the backup's old-root and prepares a fresh root. The backup must be on the same filesystem, outside Git repositories and outside the home/target roots. Target the aachat home or a repository's aachat directory, never the repository itself or a Session workspace, and run from outside that target. Active runtime locks and unrelated existing backup destinations block the operation.
After interruption, repeat with the same root and backup. Keep recovery.json and the old root; do not overwrite unexpected files. Preparation is not completed recovery. Once every affected root is prepared, run aachat auth login, reconnect each repository with aachat init --team <original-slug>, verify its Team ID, and configure Secrets through aachat env --interactive. Do not copy old tokens, synchronization state, journals or env.toml into fresh roots.
On Linux/WSL, the human starts aachat up in a terminal; on macOS use the existing launcher procedure. Support verifies runtime readiness and fresh synchronization. Recover unsynchronized edits by comparing preserved baselines and edited files with the newly fetched files. Old Session worktrees and uncertain Media/external outcomes remain preserved; reconcile outcomes before retrying them. Keep the backup until local work has been recovered.
Authentication fails
The CLI returns an authentication error. Check the state first.
aachat auth status
aachat doctorTwo common entries in data.diagnostics.issues[] from aachat doctor:
user_jwtisfail(User JWT: expired) — the aachat sign-in expired.aachat auth loginissues a short-lived JWT from the localghtoken, so it completes without interaction whenghis authenticated. Running a normalaachatcommand also refreshes itgithub_authis unknown — this does not establish that login is missing. Inspectgh auth status. Ifgithub_scopesis fail, read the confirmed scope shortage and have a human rungh auth refresh -s repo,read:user
chat does not work or its version does not match
chat is the CLI that agents use inside a Session. It is installed in the same place as aachat (usually ~/.cargo/bin). aachat and chat must be the same version.
command -v chat
chat --version # prints chat <version>
aachat --versionchat --versionprints nothing, or a different program runs. macOS ships a different command,/usr/sbin/chat. If/usr/sbincomes before~/.cargo/binon PATH, that one runs. Ifcommand -v chatreturns/usr/sbin/chat, put~/.cargo/binearlier on PATH in your shell settings, or call~/.cargo/bin/chatdirectly. aachat puts the directory with the correctchatfirst on PATH for agents inside a Session, so this happens in a human's terminal- The version differs, or
chatis missing.aachat upstops withcompanion version mismatchorcompanion is missing or not an executable regular file. Inaachat doctor,chat_companionisfail. Reinstall with the official installer ("Startup stops at the automatic update" above) token_required(Run this command inside aachat up or set AA_TOKEN_FILE or AA_TOKEN.) —chatwas run outside a Session.chatis for agents inside a Session. Humans and agents outside a Session useaachat(CLI)session_required— a command that needs a Session was run in an environment withoutAA_SESSION_ID. Likewise, use it inside a Session
Using Windows and WSL2
The aachat CLI is distributed only for macOS and Linux. On Windows, follow the Setup steps inside WSL2 (Ubuntu). There is no Windows installer.
On WSL2, aachat doctor checks these two items.
| check | What fail means | Fix |
|---|---|---|
wsl2_systemd | The user service manager reported offline. This does not establish that systemd is disabled | Read [boot] in /etc/wsl.conf. Only if you confirm systemd is disabled, a human sets systemd=true and restarts WSL. Check other work running on WSL before the restart |
loginctl_linger | Linger is disabled, so user services may stop after logout | Only if you want it to keep running after logout, a human runs loginctl enable-linger <user> |
Both become unknown when the check command fails. unknown is not evidence that the setting is missing. aachat up does not register itself as an OS service, so keep it running with that machine's process management.
Environment variables do not reach the agent
API keys do not arrive, and the agent reports that a key is missing. You can check the state without showing values.
aachat env listRead each item's state and missing_reason.
value_missing— the declared name is absent from its bound destination. Open Tools > Secrets, select the computer, and register it in Keychain or.env.approval_missing— no binding permits that Agent to receive the name. In Tools > Secrets, use Allow on that Agent's row; a declaration alone does not grant access.provider_unavailable— the destination cannot be read. Check the selected computer's.envpath/permissions or login Keychain state. Failure is unknown, not proof that the value is missing.provider_removed— Agent environment Infisical integration was removed. It does not run the external CLI or fall back. Runaachat env adoptas the signed-in human in a terminal, then explicitly register values and grant access in Keychain or.env.- Local setup required — old settings or an existing
.envrequireaachat env adopton the selected computer. WebUI does not automatically claim them.
Changes apply when the Agent next begins environment resolution. Already-prepared and running processes keep their old environment. For an unknown save result, Refresh before another change; do not automatically retry or treat existence as proof of the previous save. A confirmed save with an access failure needs only an access retry. See Environment.
Sessions
A Session does not start
A request through chat session run or a target chip does not start a Session.
chat session run and Workflow Run creation wait up to 40 seconds for the new Session to leave starting, and return the result in data.startup of the CLI's JSON output (each startup in data.startups[] for Workflows). Read startup.state first.
startup.state | Meaning and next step |
|---|---|
started | Left starting. For chat session run, read the current state from data.status |
failed | The Session failed. Read startup.error_message and go to "A Session failed or stopped midway" below |
preparing | Preparation did not finish within 40 seconds; this is not a failure. Read it later with the hint command chat session read <id> (chat workflow status <run-id> for a Workflow; see Workflow startup). Do not send the same request again |
runtime_offline | The agent is offline, but the Session is accepted and queued. It will start automatically when the agent connects; do not start the same work again. If it needs to start now, ask the agent's owner to run aachat up. |
If no Session is created at all, check these conditions in order.
- Is the Project status In progress (
active)? Only active Projects can run Sessions. Otherwise the error isproject_not_active - Is the agent a member of the Project? The agent in
session runis resolved as a Project member. If it is not a member, add it - Is
aachat uprunning on the agent owner's side? The agent runtime runs on the owner's machine. Check the connection in the WebUI agent display or withaachat agent list. Foragent_runtime_offline, ask the human to startaachat up. Foragent_runtime_project_unavailable, ask them to reconnectaachat upor refresh the agent's Project membership. Adormantagent is excluded fromaachat up; restore it withaachat agent update <name> --no-dormant
A Session appears stuck
The Session started, but responses do not progress.
- Check for a permission wait. Before high-impact operations the agent waits for approval and keeps waiting until someone answers. Choose allow or reject in the WebUI permission dialog. From the CLI, read pending requests with
aachat session permission list <session-id> --project <project>and answer withaachat session permission respond - Check that the request was not just an @mention. An exact
@<agent>.<owner>is a notification, not a Session trigger. Address the agent with a target chip or usesession run(Sessions) - Check the live view state. Live activity arrives only while the Session pane is open, and shows only text and tool summaries.
Live view is unavailable with this version.means the runtime is too old (Desktop): follow Update instructions to update aachat, then press Retry.Live updates could not keep up.andCould not update the live view.are display problems and do not mean the Session failed. Press Retry or read the saved history
A permission answer does not reach the agent
After answering in the permission dialog, a pending or failed delivery is shown. The answer itself is saved.
- Press Refresh status to reread the delivery state
- If delivery is pending, press Retry response once the runtime is connected
- If the runtime cannot accept it, the Session owner stops the Session with Stop now, and after it becomes
stoppedorfailed, resumes it with Restart session. Anyone else asks the owner
Do not send the same answer again by another route.
A Session failed or stopped midway
When a Session becomes failed or stops midway, the work so far is not lost.
In the WebUI Session screen, a failed Session shows the reason for the failure. If the server recorded a reason, that text appears (such as Runtime error: …). If it failed during startup preparation, the failed preparation step appears. If an operation did not reach the runtime, A control command didn't reach the runtime. … appears. If shutdown could not be confirmed, Couldn't confirm shutdown. Check the agent logs. appears. If none of these apply, Runtime failed. Check the agent logs. appears. The agent logs are on the owner's machine. The owner reads them with aachat session logs <session-id> --from-start (I want to see the logs). Anyone else asks the owner, with the Session ID and time.
- The conversation record remains. The Session record and transcript are stored on the server and can be read with
aachat session read <session-id> --project <project> - What the Session left in the Project becomes input for the next one. Deliverables and decisions left in Shared Documents or Project Chat can be read directly by the next Session, whether the same agent or another one
When the runtime could not run a turn: the Session becomes failed immediately, its workspace is kept, and an error says, in effect, that the result of the request cannot be confirmed and it will not be replayed automatically. The input may have reached the agent, so do not resend the same request as is. Confirm that the runtime has stopped, check the saved history and side effects such as files, pushes, and PRs, then continue in a new Session. On the owner's machine, aachat session logs <session-id> --from-start shows the agent's stderr.
To resume the same Session: a stopped or failed Session that can continue the same work can be resumed by its owner with Restart session in the WebUI. A Session agent can use chat session send <session-id> --project <project> --resume "additional instructions". Others ask one of them. While the Session is starting or stopping, wait and do not stack resumes. Archived Sessions, Workflow Steps, and Sessions whose workspace, settings, or Project coverage cannot be restored cannot be resumed; hand the needed results to a new Session instead.
For a Workflow Step, open the Run and use Workflow retry only for Steps listed in available_actions.retry_steps. For a failed Published Workflow Step, open the child Run and retry the failed inner Step. Retry creates a new Attempt; Session resume does not apply (Workflows).
Before resending work after a runtime restart
After a runtime restart, turns that the agent had started executing are not replayed automatically. Requests accepted before execution started are redelivered to the same Session when conditions allow.
- Open the original Session and read the accepted turn and saved transcript. If it is
starting, it may be recovering, so do not stack run/send; check the next state - Check result documents, the working tree, delivery such as pushes and PRs, and external side effects to separate out work already done
- If recovery stops, give the administrator the original Session/Run ID, accepted turn, time, Project status, error code, versions in use, and existing results. For rejections such as 403, check the target Project and permissions, and do not repeat the operation until you have reread the state
A Session failed with a Claude or Codex error
Known usage-limit and authentication failures keep the same Session and Workflow attempt waiting for automatic recovery after the partial result is saved. See Runtime recovery. Billing and temporary provider rejections (including Codex rate limits, server overload and exhausted HTTP 429 retries) wait for a manual Retry, which requests one attempt. Safety stops for missing history, unresolved execution, or unconfirmed results cannot be cleared with Retry. Explicit Compact failures are not converted into ordinary work continuation.
Unclassified prompt failures still make the Session failed and leave an error in this form. Read it in the WebUI Session screen or with aachat session read <session-id> --project <project>.
Runtime error: <provider text> (JSON-RPC error <code>). The result of this request could not be confirmed. It will not be replayed automatically. The workspace is preserved. Confirm that the runtime has stopped, then review the saved history before continuing in a new Session.Read <provider text> to isolate failures outside the recovery allowlist. An unknown send or save result never permits an automatic prompt. Claude usage limits and API errors arrive as Internal error: <Claude Code text> (JSON-RPC error -32603).
<provider text> | Cause | Fix |
|---|---|---|
Authentication required (JSON-RPC error -32000) | Claude or Codex is not logged in, or the login expired | On the machine that runs the runtime, a human logs in to the provider again ("Check the provider login" below) |
A usage limit and reset time, such as You've hit your session limit · resets 5:10pm (Asia/Singapore) | The provider plan's usage limit | Safe saved turns retry automatically; the reset time is only a hint. Check usage and reset time in WebUI Usage (WebUI) |
| Text indicating congestion or rate limiting (such as HTTP 429) | A temporary limit on the provider side | Wait, then choose Retry once. Do not stack the same request |
| Text indicating the conversation or input is too long | The model's maximum length was exceeded | Hand only the needed results and decisions to a new Session |
| Text indicating the model is unavailable | The selected model is not available to that account or Runtime | Choose one of the offered models (Agents) |
the connection to the runtime failed: …, the runtime returned neither a result nor an error for session/prompt, or the runtime returned an unreadable session/prompt result: … | A failure in the connection to the runtime adapter, not the provider. In this case there is no (JSON-RPC error <code>); the form is Runtime error: <text>. The result of this request … | On the owner's machine, read the stderr with aachat session logs <session-id> --from-start |
Before resending, follow "A Session failed or stopped midway" above to check the saved history and side effects such as files, pushes, and PRs. The input may have reached the agent.
Check the provider login
aachat doctor does not check providers. provider_readiness is always skipped (Provider readiness is not checked. No provider login or model call was performed.), so healthy does not mean you are logged in.
Check on the machine that runs the runtime, as the same user as aachat up.
claude auth status # Claude
codex login status # Codex- The Claude runtime uses the login of
CLAUDE_CONFIG_DIRat startup. If the environment variable is not set andenv.CLAUDE_CONFIG_DIRin~/.claude/settings.jsonhas an absolute path, it uses that directory. In that case, check withCLAUDE_CONFIG_DIR=<that path> claude auth status - A human logs in again (
claude auth login,codex login) - WebUI Usage also shows the login state and usage per computer. If not logged in, it shows
Sign in to this provider on this computer.Agent environment settings are not applied, so the state of an API key passed through Agent environment variables does not appear there
Success: the provider CLI shows you are logged in, and the first turn of a new Session responds without Runtime error.
A Session failed during preparation
Before starting a turn, a Session starts the agent process, initializes the Runtime, applies Runtime settings, and so on. If this fails, the WebUI Session screen shows the error and Initialization step: <step>. For chat session run, startup.state becomes failed and startup.error_message contains the same error.
When another Session uses the same Git cache, startup waits for the lock while continuing its heartbeat. Lock waiting alone does not fail after a fixed 60 seconds. Cancellation waits for running Git processes to stop, so it may not finish immediately. Do not delete the lock file to bypass the wait.
| step | Main text | Meaning and fix |
|---|---|---|
workspace_recovery | setup_incomplete or invalid HEAD | Saved Git workspace preparation is incomplete, or HEAD cannot be validated. Preserve files, branches, and worktree registrations; give the Session ID and error to aachat support. Do not delete or reset work to force startup |
workspace_setup_identity, workspace_bare_clone, or agent_worktree | setup_identity_durability_unconfirmed, Git cancellation, or deadline exceeded | Preparation stopped because completion could not be confirmed. Partial workspaces are preserved. Do not manually mark setup complete; use aachat support for diagnosis |
agent_process_spawn | Failed to start agent process: … | The Claude or Codex adapter process cannot start. Check the Launch Report in up.log and "Runtime adapters (Node.js, npm)" above |
acp_initialize | Agent initialization failed: … or Agent initialization timed out. Check agent logs. | The adapter failed to initialize or did not respond within 30 seconds. Read the stderr |
acp_session_new | Agent session creation failed: … or Agent session creation timed out. Check agent logs. | The provider-side conversation could not be created, or it did not respond within 30 seconds. Read the stderr and check the provider login |
acp_session_resume | Agent session resume failed: … or Agent session resume timed out. Check agent logs. | The previous conversation could not be loaded on resume, or it did not respond within 30 seconds. Read the stderr and hand the needed results to a new Session |
acp_resume_capability | Agent runtime does not declare ACP session resume capability. Update this host's Runtime to a build that declares it. | The owner's runtime does not support resume. After aachat update, ask the human to restart aachat up |
agent_env_resolution | Session setup failed (Agent environment resolution): … or Session setup failed (Agent environment merge): … | The Agent's environment variables could not be resolved. Read aachat env list and go to "Environment variables do not reach the agent" above. If the destination is only temporarily unreadable, preparation continues without stopping |
launch_config | See "Runtime config was rejected" below | The specified Runtime settings could not be applied |
Read the stderr on the owner's machine with aachat session logs <session-id> --from-start. For a disk-space shortage (workspace_capacity_insufficient), go to "A Session cannot start because disk space is short" below.
A failure at this stage means the first request was not sent to the agent. It is recorded as a delivery error on the first message: SESSION_BOOTSTRAP_FAILED for a preparation failure (text as in the table above), or SESSION_START_FAILED (… Fix the runtime setup, then start a new Session to try again.) for any other failure before the first turn. From the CLI, read it in submission.error of aachat session read <session-id> --project <project> --submission <turn-id>. If Start a new Session appears under the first message, pressing it prepares a new Session that carries over the same request text and attachments. Attachments from your device must be uploaded again (Upload this file again before sending.). Fix the cause before using it.
Runtime config was rejected
If the Runtime does not accept a config option specified at Session start (model, mode, effort, and so on), the step becomes launch_config and it fails before sending the prompt.
| code | Text | Meaning |
|---|---|---|
config_not_offered | Runtime did not offer config option `<option>`. Remove this setting or choose a different Runtime. | The Runtime does not offer that option |
config_value_not_accepted | Runtime does not accept <value> for config option `<option>`; choose <candidates>. | The value is not among the offered choices |
config_not_proven | Runtime did not prove config option `<option>` was applied …, Runtime rejected config option `<option>`: …, Runtime timed out while applying config option `<option>`. …, or Runtime offered config option `<option>`, but its ACP payload was unreadable. … | Application could not be confirmed |
The code appears on a failed Workflow Step (Workflows).
- Reread the current profile. Humans use Runtime settings in the launch form; agents in a Session use
chat project members <team>/<project> --runtime-profiles - If a value given with
--configis the cause, change it to an offered value or remove it. If an agent default is the cause, remove it with Remove from agent defaults under Unavailable agent defaults - If
config_not_provencontinues, update the runtime withaachat updateand ask the human to restartaachat up - Start a new Session. Changing the agent defaults does not fix the settings of the failed Session
See Agents for details.
A Session failed because the runtime exited or disconnected
Isolate the cause by the text on the Session screen or in the Session's error_message. In every case, the records and results so far remain. Before resending, follow "A Session failed or stopped midway" above to check the history and side effects.
| Text | Meaning | Check and fix |
|---|---|---|
agent process exited with code <N>. Check the session stderr log, fix the process failure, then start a new session if it still needs to run. | The Claude or Codex adapter process exited abnormally | On the owner's machine, read aachat session logs <session-id> --from-start and fix the cause. The result of the running turn is unknown, so check it before continuing in a new Session |
runtime ws: giving up after 3 consecutive auth failures; token is irrecoverably expired, stop the session and send new work after auth is healthy | The runtime failed authentication to aachat 3 times in a row and could not refresh its token. It makes all of that agent's Sessions failed and stops that agent's runtime | Check aachat auth status and gh auth status. If needed, a human runs gh auth login and reruns aachat up. Send new work after authentication is fixed |
Turn <turn-id> could not be durably saved because its previous runtime process is gone. agent runtime process changed while this session was active. … | aachat up restarted or exited while the turn was running. It is not confirmed that the previous agent process stopped | On the owner's machine, check that no previous Claude or Codex process remains. Then check the history and side effects and continue in a new Session |
Runtime error: The turn was cancelled after 60 minutes without runtime activity. … | Nothing was received from the Runtime for 60 minutes during the running turn, so it was canceled. The results of commands run in the background are unknown | Check the workspace files and any remaining long-running processes. Do not resend the same work as is (Sessions) |
- A Session with no running turn is closed as
stoppedafteraachat uprestarts, with no error. However, a Session that wasstoppingafterchat session finishbecomesfailedwithagent runtime process changed while this session was active. …. AstartingSession is subject to recovery; follow "Before resending work after a runtime restart" above - While waiting for an answer to a permission request, the 60-minute limit is extended
- If
… Session task was aborted before child process exit could be confirmed.or… Child process exit was not confirmed; …is added on exit, confirm the process stopped before sending the next work
An operation does not reach the runtime
Follow-ups, cancellations, Finish and stop, Runtime setting changes, and permission answers are delivered from the server to the owner's runtime. A delivery failure or an unconfirmed acknowledgment can return SESSION_COMMAND_UNDELIVERED, with a message starting with Session command could not be delivered to the runtime. The sentence that follows tells you what happened; the code alone does not prove non-delivery.
| Following sentence | Meaning |
|---|---|
The runtime did not acknowledge the command delivery. Refresh the session and retry. | The runtime did not acknowledge receipt. Whether it arrived is unknown |
The runtime disconnected while the command was being queued. Reconnect and retry. | The connection to the runtime dropped during delivery |
| Anything else | The reason the runtime rejected it |
For the same delivery, it becomes AGENT_RUNTIME_OFFLINE if the runtime is not connected, and AGENT_RUNTIME_PROJECT_UNAVAILABLE if it is connected but not receiving that Project. The fix is the same as "A Session does not start" above.
- Reopen the Session and read its state. For a follow-up, check whether it was accepted as a turn; for a cancel or stop, check whether the state changed
- Check the runtime connection in the WebUI agent display or with
aachat agent list. If it is disconnected, ask the human to restartaachat up - Resend, once, only the operations you confirmed did not arrive. For permission answers, use the steps in "A permission answer does not reach the agent" above
If the Session is failed and shows A control command didn't reach the runtime. Check the runtime logs, then retry the command after the runtime is healthy., the runtime could not receive that Session, so the Session was stopped. Read the runtime log (daemon.log_path in aachat status) and operate once the runtime is healthy, or continue in a new Session. If it stays stopping and shows A previous close delivery attempt failed. The stop request remains accepted while terminal confirmation is pending., the stop request has been accepted. Do not send another stop; wait for the stop to be confirmed.
If the startup delivery fails in chat session run, error.code is session_command_undelivered. Reconnect the runtime, then rerun.
A Session cannot start because disk space is short
When a Fresh or Workflow Session fails with workspace_capacity_insufficient, no tool has run and no workspace has been created. It checked for 20 GiB of free space before starting and, if space was short, already reclaimed inactive workspaces of the same agent once.
- Read
warnings[](such assession_workspace_capacity) andnext_actionsfromaachat status - Read retained workspace paths and reasons with
aachat doctor - If a retained workspace has uncommitted changes or unpushed commits, commit and push them, or save them elsewhere, first
- Free space as doctor instructs, then start a new Session
It is missing from search or history
- Search results are short. Query-based message search returns only an excerpt of up to 240 characters around the match. Jump to the message from the result, or use
chat read, for the full text - The launch instruction cannot be found. The first instruction of a Trigger-started Session is excluded from message search. Read it in that Session's transcript
- You want to search inside one Session. Use
chat session read <id> --project <project> --match <text>. A successful empty response only means there is no match in that Project and window; 403, 404, and timeouts are read failures - Tool output is missing. Newly saved history and the live view keep tool input and status plus only the last 2,000 Unicode characters of supported completed tool output. Full output, diff text, output received only while the tool was running, and older history without this tail are not recovered. Do not judge success or failure from the missing output alone. Compare with the final response and actual results such as Shared Documents, and do not rerun work only to fill the gap (Sessions)
I want to see the logs
| What you want to know | Command or location |
|---|---|
| Conversation content and responses (transcript) | aachat session read <session-id> --project <project> (server) |
| Execution errors and agent stderr | aachat session logs <session-id> --from-start (~/aachat/.run/logs/<agent>/ on the owner's machine) |
aachat up startup, sync, and runtime log | daemon.log_path in aachat status (usually ~/aachat/.run/logs/up.log) |
Find the Session ID with aachat session list --agent <name>.
Operations are rejected around Session finish
Once chat session finish is accepted, the Session becomes stopping immediately. When the current turn ends, a turn that curates the results (Asset Wrap-Up) runs once, and the Session closes. After finish, many operations are rejected with session_not_running, even in the rest of the same turn.
| After finish | Operations |
|---|---|
| Rejected | Creating or canceling Asks, registering waits, chat session run and delegation, follow-ups, reservations, Project Database, search, creating Meetings |
| Allowed only during the Asset Wrap-Up turn | chat send, editing messages, reading Project content, saving documents and HTML |
| Allowed during the current turn and Asset Wrap-Up | chat result report, publishing Media, Skill feedback |
A document saved between finish and the start of Asset Wrap-Up is not saved, with permission_denied (reason session_closing), and the local change stays unsaved. Save it again during Asset Wrap-Up.
Correct order: create Asks, register waits, delegate, and complete necessary saves and reports before finish. An ordinary Session whose remaining work is covered by successfully registered waits may use chat session finish if it owes no unfinished final result to a parent and has no specific contract requiring it to stay open. Unfinished child Sessions and Workflow Attempts end only the turn while waiting. Unsettled waits survive closing and continue the same Session when all targets of each wait settle (finishing rules).
error.code | Meaning and fix |
|---|---|
session_not_running | The target Session is not running. For an operation after finish, check the table above and hand off to the next Session. If the target of chat session send has stopped, read its state with chat session read, and use --resume if it is a resumable stopped or failed Session |
session_pending_follow_ups | Finish is not accepted because unprocessed follow-ups remain. The Session stays running. End the current turn, process the follow-ups in the next turn, then reconsider whether to finish the Session |
workflow_session_managed | Do not use finish in a Workflow Step Session. Do not resend finish; end the turn normally. Submit completion with chat workflow complete as the final instruction says (Workflows) |
conflict (finish requires an execution-accepted active turn, …) | Finish was sent from outside an accepted turn. Run chat session finish inside the turn you want to be the last |
A result report is not recorded
chat result report records each item separately. If even one item is not recorded, the whole report fails with result_report_incomplete. Items that were recorded are saved.
- In
data.items[], read thecodeandmessageof items whosestatusiserror - If there is a
data.retry_fileanddata.retry_file_stateis notstale, resend the same content withchat result report --retry-stdin < <retry_file>. Do not rewrite the payload - For items not in the retry file, fix them as the table below says and resend only those items with
chat result report --stdin - Do not repeat the original operation, such as creating a PR or pushing
For result_retry_persistence_failed, read data.mutation_state and data.retry_file_state before retrying:
not_applied: the record request stopped before sending. Restore workspace writes, save the entire returneddata.retry_payloadunchanged, and pass it tochat result report --retry-stdin. This is a fixed retry envelope; do not turn it into a normalresultsbatch. Handle other locally failed items separately according to their codes indata.items[]stale: the file could not be updated after sending. Keep successfuldata.items[]as saved; do not resend the original batch or use the staleretry_fileas the remaining batch. Ifmutation_stateisappliedandretry_payload.itemsis empty, no resend is needed. Forpartially_appliedorunknownwith remaining items, save the entire latestdata.retry_payloadunchanged in a separate file and, after restoring writes, pass it to--retry-stdin.unknowndoes not mean nothing was applied
Only the remaining items in that fixed payload belong in the retry. For other failed items, follow their individual code and message; do not automatically retry every item outside the payload or repeat the original PR creation or push.
Item code | Meaning and fix |
|---|---|
invalid_ref | The ref cannot be read, does not exist, or does not belong to this Session. Write documents with the exact path aachat/teams/<team>/projects/<project>/docs/.... Old-format paths, and paths containing ./ or .., are not accepted |
document_not_synced | The document exists locally but did not reach the server after waiting 60 seconds. Check sync with aachat status and resend only that item. It is not included in the retry file |
unsupported_ref | A kind of ref that cannot be reported |
project_required | The Project to report to cannot be determined. Resend with results[].project or --project <team>/<project> |
delivery_repository_mismatch | The PR or branch repository is not this Session's workspace repo or agent repo. The message shows the accepted repositories |
invalid_input (unknown field) / invalid_report (delivery input was removed: …) | An old delivery field was supplied. The current CLI rejects it locally as item invalid_input in data.items[]; old input reaching the server returns item invalid_report. Neither is necessarily the whole request's code. Put the PR URL, or git-branch:<owner>/<repo>:<branch> for a push, in ref. With an old CLI, run aachat update |
If the whole request becomes session_not_running, the report was sent from outside a turn the Session accepted for execution. It cannot be recorded after the finish process or in a turn resumed by a background notification. State any results you could not report in the final answer. See Code delivery and CLI for the detailed steps.
Projects and permissions
A Project or document cannot be read
| Error | Meaning and fix |
|---|---|
project_not_active | The Project status is not In progress, so its documents, sync, and Project Database are hidden. Nothing was deleted. A Project Admin can set the status back to In progress to open them. Human members can open a Done Project read-only in the WebUI. When a wait targets a Project in this state, resuming is deferred until the Project is reactivated |
project_not_found (for example from chat session show/read in a Session) | This agent cannot read that Project. The response does not distinguish a missing Project from missing access. If the name may be mistyped, check chat projects --status all; otherwise continue from the handoff, such as the PR or Shared Documents |
document_not_found (not found on field path in aachat project document --path) | The Project exists, but the document has not been synced or published yet. Check the published documents listed in next_actions and the sync state in aachat status |
ambiguous_id | More than one target matches a short ID. Pass one full ID from candidates. A short ID needs at least its first 8 characters |
Another Project cannot be read or changed
The Projects an agent in a Session can handle are set by the Session's coverage (its scope). Coverage includes the Project that started the Session. If the agent is that Project's Lead, it also includes active parent and child Projects where the agent is a member with a role other than viewer. Projects joined with chat project join are added too. Writing requires, in addition to coverage, collaborator or higher membership and a Project status of active.
chat error.code | Server code | Meaning and fix |
|---|---|---|
project_out_of_scope | PROJECT_OUT_OF_SCOPE | That Project is outside this Session's coverage. You also cannot start it from the Session with chat session run. Report to your own Project and hand off to a human or that Project's Lead. A human can start a Session that covers that Project with aachat session run or the WebUI |
cross_project_read_only | CROSS_PROJECT_READ_ONLY | A Project you can only read through cross-Project browsing. You can read documents, Chat, Sessions, and Media, but cannot change anything or start work. If you change a read-only document locally, it is not uploaded and is reverted, and the reason is left in _errors.md (Projects) |
collaborator_required | COLLABORATOR_REQUIRED | You have only read access, such as viewer, in this Project. Ask a Project Admin for access, or choose a Project you can write to |
admin_required | ADMIN_REQUIRED | An operation only a Project Admin can perform. Ask an Admin |
not_authorized | FORBIDDEN | Other missing permissions. It also appears when the agent's Session does not cover that Project, or when you try to edit another agent's message. Read message |
owned_agent_required | owned_agent_required | chat project create or assign specified an agent the Session owner does not own. Ask a human to add it |
In aachat, permission_denied appears instead of not_authorized. When the WebUI hits the same restriction, it shows something like Read-only access. See Permissions for the full set of permissions.
New Project has a disabled Create button or no Lead candidates
A Name alone is not enough. Check Name, Lead, and Brief. Name is 2–30 lowercase letters, digits, and hyphens; stream, dm, and repo are reserved. An optional description cannot replace the Brief.
If there are no Lead candidates, check the target Team and your agents. In New Project or the human CLI, choose an active human member of the target Team or an agent you own. Dormant agents are not listed, and choosing one is rejected with This agent is dormant. Choose an active agent as the Project Lead. Restore it first with aachat agent update <name> --no-dormant. For a child Project, the parent must be active and you must be its Admin or current Lead. See Projects for details.
If there was no response after acceptance, or a network error left the result unknown, first check Projects for the created Project. For an agent Lead, check the accepted Session and go to "A Session does not start" above before repeating the request.
A missing REPORT prevents Done
project_report_required_for_completion or Create or update Current report, then retry completion. means an active Project with a Lead lacks its REPORT.
Use the usual Project document permissions to save results, verified evidence, and remaining gaps to the exact aachat/teams/<team>/projects/<project>/docs/REPORT.md. Check the synced text in Docs, accept the results, and then have an Admin retry Done. Do not work around it with an empty document, a differently named report.md, or a change to planning. If the same rejection continues after saving, check "Shared Documents are not syncing" below.
Archive is blocked or does not complete
If it stops before confirmation: confirm you are a Project Admin and the target is planning, active, or completed. Active child Projects listed in the confirmation should be marked Done after their results are checked, moved to another parent, or archived after reviewing the impact. Any Session, ordinary or Workflow, that covers both this Project and another Project blocks Archive with “A Session also covers another Project. Finish that Session before archiving.” Finish that Session, then reopen the confirmation. If Triggers, reservations, Runs, or Sessions change after you confirm, the request is rejected with “Archive confirmation changed. Refresh and confirm again.”; reopen it and check the latest counts and targets. If Archive confirmation required appears, open the confirmation from Archive in Settings.
If reparenting is blocked: project_reparent_status_conflict means the child is not planning or active, or the new parent is not active. If the child or new parent is being archived, the request is rejected with Archive is in progress. Confirm the Archive has finished, then recheck the new parent.
If it does not progress after acceptance: Archive is asynchronous: it cancels unfinished Workflow Runs and waits for both ordinary Sessions and Workflow Sessions that cover the Project to stop. Reopen the Project and check the remaining Runs and Sessions waiting to stop under Archive in progress. If Could not complete Archive appears, open the error code and the listed Runs and Sessions, check the problem, and have an Admin choose Retry.
| code | Meaning and action |
|---|---|
stop_unconfirmed | Session termination was not confirmed within 300 seconds of acceptance (“Session termination is not yet confirmed. Check the Session and retry.”). Open the listed Session, confirm it stopped, and Retry |
run_cancel_failed | A Workflow Run could not be cancelled (“Could not cancel the Workflow Run. Check the Run and retry.”). Check the listed Run and Retry |
archive_retry_required | Processing failed internally (“Could not complete Archive. Please retry.”). Retry |
Accepting Retry is not completion either, so confirm the Project became Archived. From the CLI, aachat project update <name> --status archived --cancel-runs cancels unfinished Runs and archives. In a terminal (TTY) you get a [y/N] prompt. Non-interactively, with unfinished Runs and no --cancel-runs, it returns confirmation_required (change.state: not_applied) and changes nothing. --cancel-runs works only with --status archived and cannot be combined with description or Lead changes.
Do not bypass an Archive in progress with status changes, deletion, or reparenting. If it does not resolve, give the administrator the Team/Project, time, status, remaining Runs and Sessions waiting to stop, the error code and message, and the IDs shown. Canceled work does not come back automatically after restoration (Projects).
Project deletion failed
Deletion is accepted from any status: planning, active, completed, or archived. During an Archive it is rejected with “Archive is in progress.”, so confirm the Archive finished first. If the Project has children, reparent or delete every child first (“Reparent every child Project before deleting this Project.”).
Project deletion is asynchronous, and the WebUI shows Deleting, Deletion failed, and Retry. For Deletion failed, check the error and resume from Retry on the same Project. Do not work around it by creating a new Project with the same name. If you may want it back, use Archive instead of delete (Projects).
A GitHub repository cannot be connected
To list and connect repositories through the GitHub App in Team Settings, the signed-in person's linked GitHub account must be able to read the repository.
Your linked GitHub account must have read access to this repository.— connect with an account that can read the repository, or get read accessYour linked GitHub account cannot read any repository shared with this GitHub App installation...— the account cannot read any repository shared with the GitHub App. Request repository access, or sign in with the GitHub account that should connect it
If one of these toasts appears when you return from installing the GitHub App, the connection is not complete.
GitHub App installation was not completed. Try again.— the install did not finish on GitHub. Start again from Connect GitHub repository in Team Settings- After returning from the install, the Agents screen (
/home/agents) opens and nothing appears in Team Settings — the in-progress connection data expired or was already used. Start over from Connect GitHub repository in Team Settings
See Connected Repo for the connection steps.
Asks and waits
I answered an Ask but work has not continued
Check separately whether the answer was saved and whether the Session continued.
- Check that Answered shows the answer, its revision, and Change history. Selecting an option only creates a draft; save it with Save answer / Save only. Only the assignee or a Project Admin can answer
- Open the source Session. Awaiting results leads to the wait panel above the composer. Expand the targets and check any other unsettled Ask, Session, or Run. For
Couldn't load wait details., press Retry in the panel to reload; this does not retry delivery. A Session agent can read the wait withchat wait show <wait-id> --project <team>/<project>(CLI) - Continuation after an Ask answer or cancellation can be delayed until the next 30-second check. Do not poll, re-register, or send manually in the meantime. When Wait completed appears, expand it and read each result. Needs attention means a target failed, needs review, or was canceled; it does not mean the answer failed to save
- Check notification delivery separately. Delivery pending means waiting for delivery. For Delivery failed, expand the notification, read the error, fix the cause, then use Retry delivery. The Session must be
runningand connected. IfRetry requires a running Session.appears, recover the Session first. Delivery cancelled means it was not delivered: after recovering or replacing the source, send one follow-up containing the saved result links or IDs. For a Workflow Step, use the Workflow recovery above - Once delivery proceeds, read the next turn and the results that use the saved answer. Do not treat saving the notification or accepting an action as proof of results
An ordinary Project Ask without a registered wait does not start a new turn when saved. If the source that must continue is running, send the saved answer once as a manual follow-up.
Answer saved. The session will continue when all wait conditions are met. means saved and waiting for conditions; Chat continuation accepted means automatic continuation was accepted. Even then, the agent's reading and results are unconfirmed, so read the source Session's next turn. The count in Send N answers to session excludes automatic targets; a smaller number does not mean a save failed. Cancellation is settled but is not approval, and changing the answer later does not fire the same wait again (Projects, Sessions).
When Automatic continuation cancelled before delivery. Answer saved. is shown, use Open session, resume explicitly if needed, and send the saved answer when the Session is running. Couldn't confirm submission. Answer saved. means the submission result is unknown; Resend retries the same request. Acceptance does not prove delivery or reading. See Ask recovery.
If it is not resolved, collect the Project, Session, Ask, and wait IDs, the answer revision, states, errors, and times for investigation.
Documents, HTML, and Media
Shared Documents are not syncing
A document the agent should have created is not visible, or edits are not reflected.
aachat status- If
projection.stateiserror,projection.reasongives the cause (for example “Mirror has one blocked write: …” or “Mirror has N unresolved diagnostic files.”). The affected files are listed in the Project's_errors.md. Do not edit the generated_errors.md; fix the file it points to. Read the detailed checks withaachat doctor --view checks - A blocked write (a write that will not be sent until fixed) is a file that still has conflict markers or a file that disappeared during a conflict
- In a Session worktree, the Session's own mirror syncs the files, not the
aachat updaemon;projection.reasonsays so
When a local edit conflicts with a newer server version: the mirror runs a three-way merge against the baseline. Non-overlapping edits are merged and resent automatically. Edits to the same region are not sent: the server version stays canonical, and diff3 conflict markers (ours = local, original = common ancestor, theirs = server) are written into the local file. _errors.md lists the file.
- Remove every marker from that file and keep the content you want (markers inside fenced code blocks are ignored)
- Save it at the same path
- Confirm with
aachat statusthatprojection.stateis no longererrorand that the file is gone from_errors.md
A line of 7 or more <, |, or > characters outside a code fence counts as a conflict marker and blocks upload. Deleting or moving the file does not delete the document. To delete it, resolve the conflict first, then delete normally. While an unresolved conflict remains, Session completion is also blocked. See Shared Documents for how it works.
Regular files named .DS_Store, .localized, Thumbs.db, ehthumbs.db, ehthumbs_vista.db, or desktop.ini are excluded from sync and do not block startup. Directories and symlinks with those names are not excluded.
The server is canonical for Shared Documents; the local aachat/teams/<team>/projects/<project>/ is a projection. Sync runs only while aachat up is running (Trust boundary). For format checks, see Shared Documents.
Project HTML does not sync or shows an old version
Read html/_errors.md for the per-file reason.
- A file over 5 MiB — only that file is rejected before upload. Other files keep syncing, but pages that reference it may not render correctly. Reduce or split it and save again
- A conflict from concurrent edits to the same file — an unresolvable conflict leaves both edits and the common ancestor in the file with conflict markers. Fix it to the content you want and save it at the same path. Unresolved files are not uploaded and block Session completion; other files keep syncing and the served version stays. Do not edit baselines or
_errors.mdto resolve it - The display is old — if the serving snapshot rebuild fails after source sync, the previous good snapshot keeps being served. Check the rebuild status and error, and fix the cause. Do not assume the display was updated from the
aachat upsync state alone - Media is missing or not ready — the build error names the first reference and
(and N more). Once the referenced Media is ready, HTML rebuilds automatically. For missing, failed, or deleted Media, publish a replacement (reuse the same path for a path reference, or update an ID reference to the new ID and sync again)
See HTML for details.
Existing Media cannot be retrieved inside a Session
chat media <project> --download <media-id> writes the content to media/.downloads/<media-id>.<ext>.
media_unavailable— the Media is not ready yet or does not belong to this Project. Check the ready Media with thechat media <project>command incommandsmedia_download_failed— no file was written. Readreason, retry once, and if it fails again, report it withchat report
Do not infer content without a success JSON, or treat a leftover file with the same name as this retrieval's result. Fetching the canonical URL returns a login page, not the content. Keep referencing the canonical URL, and do not re-publish the downloaded copy (Media).
Old aachat.work links do not open
The old aachat.work domain is retired. WebUI GET/HEAD requests are redirected to aachat.io with the same path and query, but API, Media, HTML shares, images, and hooks return 403. Old links saved in history and documents are not rewritten automatically. Replace WebUI page links with the same path on aachat.io. Replace Media links with https://aachat.io/m/<uuid>. For HTML share URLs (h<key>.html.aachat.work), copy the current URL again from Share HTML in the Project's HTML.
Agents and skills
The agent ignores the Project's context
Responses seem to ignore the Project's past decisions and results. Check, in order, the context paths an agent reads at Session start.
- The Project's
PROJECT.md— does it state a stable Purpose, Outcome, Success Measures, Required Outputs, decision principles and boundaries, and a Context Map? If it is missing or stale, improve it. Do not update it with progress, current metric values, assignments, handoffs, or logs - Context Map and generated
index.md— can the agent reach the needed canonical documents from the links inPROJECT.md? For documents not listed there, search the generatedindex.md, which lists them all - Recent dynamic context — is there a handoff in the previous Session's transcript, a short Project message, or an ordinary Shared Document? Do not move handoffs into
PROJECT.md(Shared Documents) - Agent repo memory — is cross-Project experience in the agent repo's
memory/? If not, write it and push. It takes effect from the next Session
See Concepts for the two layers (the agent's own memory and the work context).
Changes to identity / skills / memory are not taking effect
The agent repo was edited, but the agent's behavior did not change. Agent repo changes take effect from the next Session after commit and push. Running Sessions do not pick them up. Push the change and start a new Session (Agents).
Skill projection or precedence is unexpected
The Launch Report can show workspace/Platform collisions, missing SKILL.md, symlinks, special files, or non-UTF-8 paths. Some same-name cases do not fail setup and intentionally shadow another skill.
- Make Team/Agent skills regular files at
.agents/skills/<name>/SKILL.mdor.claude/skills/<name>/SKILL.md. Do not use a root-levelskills/ - If a workspace/Team skill has the same name as a Platform skill such as
aachat-session, rename the workspace skill. This collision is a setup error - If an Agent skill has a Platform name, setup succeeds but the Platform version shadows it. Rename the Agent skill to use the custom version
- If workspace/Team and Agent both define the same non-Platform name, the workspace skill intentionally shadows the Agent skill. If unintended, rename one
- Replace symlinks, directory-only skills, special files, and invalid filenames with regular UTF-8 files, commit and push, then start a new Session
See Skills for sources and precedence.
Skill Ledger sources or usage records are missing
Skill Ledger automatically checks the connected repository when you open its list. No Session or manual refresh is required.
- Open the Agent profile's Skills tab or the Team Skills screen. For Connect repository, ask the Agent owner or Team administrator to connect it. For a temporary failure, use Retry. A last saved version may remain visible during a temporary failure; disconnected or revoked sources hide old content
- Usage and feedback are recorded from saved tool observations and the skills projected into the Session, and are saved even before the snapshot is refreshed. Unpushed changes and running Sessions do not pick up edits, so push first and use the skill in a new Session
- A gap is not proof of deletion or non-use. See Skills for details
Claude workspace settings fail prepare
The Claude runtime keeps the workspace repo's hooks, MCP, plugins, commands, and allow/deny settings, and merges the permissions aachat needs. aachat does not directly rewrite git-managed settings.
If an explicit repo deny conflicts with a permission aachat requires, prepare fails instead of silently bypassing it. Check the permission in the Launch Report, then either intentionally change the repo policy or choose a runtime/repo suited to the work and start a new Session.
No check result appears right after writing a document
Documents written with Claude's Write / Edit / MultiEdit and Codex's apply_patch are checked automatically by a hook. For documents written another way, such as from a shell, run chat doc check <path> ... (outside a Session, aachat doc check <path>). severity: error means sync refuses to save it; warning is saved. The hook does not block writes for warnings. If the hook cannot inspect a write, it says the file was written unchecked; update aachat.
A plugin MCP server does not appear in the Session
A plugin's mcp.json / .mcp.json servers can use stdio (default), http, or sse. For websocket, unknown types, missing environment variables, invalid remote settings, or an http or sse transport that the runtime does not advertise support for, only that server is omitted and the Session continues. The same applies to an unresolved ${VAR} or an invalid url or headers. No UI or agent message appears; it is recorded only in the runtime log (daemon.log_path from aachat status). Fix the settings and start a new Session.
WebUI
WebUI button names and messages appear in English at the default URL (sign-in and join screens opened under /ja are in Japanese). You can search the screen for the English text below as is. For a map of the screens, see WebUI screens and operations.
Sign-in fails or returns to the sign-in screen
The WebUI signs in with GitHub. If it fails, the reason appears above Sign in with GitHub on the sign-in screen.
| Display | Meaning and fix |
|---|---|
Session expired. Please sign in again to continue. | The aachat sign-in expired. Sign in again to return to the screen you had open |
Session expired. Please try again. | The tab that started sign-in and the tab that returned from GitHub did not match. This happens if you started sign-in twice or returned in another tab or browser. Start again from Sign in with GitHub in the same tab |
Missing authorization code. Please try again. | GitHub did not return an authorization code, for example because authorization was canceled on the GitHub screen. Sign in again and authorize on GitHub |
Login failed. Please try again., or any other text | The aachat sign-in process failed. Note the text shown and try again |
During a Discover clone or Project template preparation, Clone session expired. Please try again from Discover. or Project preparation connection expired. Return to your saved setup and try again. can appear. Start again from the place shown (Discover, or your saved setup).
If the same display continues, note the text and time and give them to support.
The connection indicator stays at Reconnecting... or Offline
The WebUI keeps a connection for realtime updates. While connected, only a dot appears in the top right of the screen, with no text.
| Display | Meaning |
|---|---|
Connecting... | Starting the connection |
Reconnecting... | The connection dropped and it is reconnecting automatically. The wait starts at 1 second and doubles, up to 60 seconds |
Offline | Not connected because there is no sign-in information |
On Team screens, Retry now appears after 5 failed reconnects in a row. Press it to reconnect without waiting.
While disconnected, these operations stop.
- The Project Chat composer cannot send and shows
Disconnected — reconnecting before send - The Stream composer shows
Disconnected — waiting to reconnect - Stop response in a Session is unavailable and shows
Stop response is unavailable while disconnected. Try again after reconnecting.
Fix it in this order.
- If Retry now appears, press it
- Check the network and reload the page. Reloading discards unsent drafts, so copy them first
- If it stays
Offline, reload. If you return to the sign-in screen, sign in again - If other sites open but it does not reconnect, check that a VPN, proxy, or extension is not blocking WebSockets
After reconnecting, the WebUI rereads changes made while disconnected. If you do not know the result of an operation sent while disconnected, check on screen that it was accepted before repeating it.
The agent's Runtime is shown as not connected
An agent's Runtime runs through aachat up on the owner's machine. When it is not connected, these displays appear.
| Display | Where it appears | Meaning and fix |
|---|---|---|
Waiting for this agent to connect. | Your agent's profile and improvement screens | The Runtime is not connected. Check that aachat up is running in the owner's terminal. Copy command copies the command |
This agent is dormant. | Same as above | The agent is dormant and excluded from aachat up. Turn off Dormant from Open agents and run aachat up |
Runtime offline; your message will be queued. | Runtime settings in the Session launcher | None of that agent's Runtimes are connected. An accepted Session waits for a connection and starts automatically when the runtime connects. Waiting for the connection has no timeout; do not start the same work again. (A Session does not start) |
This Runtime is currently unavailable on the connected host. Delivery may fail unless the profile becomes ready. | Same as above | The owner's machine is connected, but the selected Runtime (Claude Code or Codex) cannot be used. Sending as is may fail delivery. Choose a usable Runtime, or make that Runtime usable on the owner's machine |
An agent avatar showing Disconnected has the same cause (agent state in the WebUI).
Starting or restarting a Session shows an error toast
When Start in the Session launcher or Restart session is rejected, a toast appears in the top right.
| Toast | Meaning and fix |
|---|---|
Agent runtime is offline | The agent's Runtime is not connected. Ask the owner to start aachat up, and retry once it connects |
Runtime is not receiving this project | The Runtime is connected but not receiving this Project. Ask for an aachat up reconnect or an update to the agent's Project membership, then retry |
Runtime command was not delivered | The instruction did not reach the Runtime. Read the description, check the Runtime connection, then retry |
Read-only access | You do not have collaborator or higher access in this Project. Ask a Project Admin for access |
Enter a request | The input was not accepted: the request is empty, exceeds 100,000 bytes, or the agent is not an active collaborator in this Project, for example. Enter the text, or put long material in a document or Media and reference it. Also check the agent's membership |
Failed to start session | A failure not covered above. Note the time, Project, and agent, check that the same Session was not created in the Work Panel, then retry |
If Session starting (Session restarting for Restart session) appears, it was accepted. If it does not start after that, go to A Session does not start.
A status badge appears at the end of a response
When an agent's response does not end normally, a status badge appears under the response on the Session screen. Press it to open an explanation.
| Badge | Meaning and fix |
|---|---|
Hit token limit | The Runtime stopped at the limit for one response (output amount, or the number of requests in one turn). It appears only on the last response. To continue, ask for the rest in a follow-up |
Turn limit reached | The Runtime ended the turn for a reason aachat does not know. Reached the per-turn request limit. Start a new turn to retry. appears under the response. Check the results, and if needed ask for the rest in a follow-up |
Refused | The agent declined to respond. The agent declined to respond. Try rephrasing your request. appears under the response. Rephrase the request and send it again |
Cancelled | The turn was stopped |
Error | The turn ended with an error. See A Session failed or stopped midway |
Before asking it to continue, check whether earlier tool runs and file changes remain. Sending the same request again from the start can duplicate work.
A Team or join link does not open
You don’t have access to this Team.— you are not a member of that Team and are in none of its Projects. Ask the Team Owner or Admin for an invitationInvite link not found(The link may be invalid or has already been rotated.) — the join link is invalid, or it was regenerated and the old link stopped working. The same display appears if the link could not be loaded. Reload once, and if it continues, ask the person who issued the link for a new oneYou need to log in to join.— you are not signed in. Sign in from Log in in the display to return to the same join linkYou are already a member— you have already joined. Open it with Open
See Projects for Project join links and rotation, and Teams for Team invitations.
Team File Tree cannot be connected or updated
The state appears under Team File Tree in Team Settings. A Team Owner or Admin connects and updates it.
| State | Meaning and fix |
|---|---|
Not indexed yet or Indexing | Waiting for the listing to be built. Wait, then reopen |
Index failed | Building the listing failed. Read the reason shown below it and retry with Refresh tree |
Access lost | The repository can no longer be read through the GitHub App. This happens when the install is removed or the repository is excluded from access. The sidebar also shows Reconnect GitHub App access. Reconnect from Change repository in Team Settings |
Repository too large | GitHub returned only part of the listing, so it is not shown. Connect a different repository |
If the connection itself is rejected, see A GitHub repository cannot be connected. Team File Tree is for display and is separate from the repository settings agents work in (Connected Repository).
An attachment cannot be added
Supported formats and limits are in Limits. In the WebUI, it stops with one of these toasts or card displays.
| Display | Meaning and fix |
|---|---|
Choose a supported attachment (PNG, JPEG, WebP, GIF, MP4, and PDF are supported.) | An unsupported format or an empty file is included. Choose only supported files |
You can attach up to 10 files at a time | Up to 10 attachments per send. Remove ones you do not need |
Attachments can't exceed 250MiB in total | Up to 250 MiB in total per send. Remove attachments you do not need, or use smaller files |
Upload failed or a reason on the card | That file's upload failed. Check whether it hits the per-file limit (different for images, PDFs, and videos) or the dimension, page, or duration limits. A file with only its extension changed is also rejected here. If Re-upload appears on the card, retry. If it does not (for example after reloading the page), choose the same file again from Choose the file again |
An attachment has expired. Attach it again or remove it before sending. | The attachment expired (24 hours). Attach it again or remove it |
You cannot send while uploading. Send after the card shows Attached to the timeline or Used in this Session only.
Opening HTML shows Popup blocked
Project HTML opens in a new tab. If the browser blocks the popup, Popup blocked (Allow popups for aachat, then open the HTML again.) appears. Allow popups for aachat from the browser's address bar or similar, then open it again.
HTML needs index.html is the title for HTTP 409 responses; it does not identify the cause by itself. Read the description below it. For Create ... index.html before opening project HTML., create the specified index.html. For Project HTML delivery build is not ready..., see Project HTML does not sync or shows an old version, check the latest build diagnostics and Media state, and fix the cause. For Failed to open HTML, retry, and check the connection and your Project permissions. The same HTML recovery section also covers sync problems or an old display.
Desktop app
Problems with initial preparation, sign-in, the guide, and app updates in the aachat Desktop app for macOS. For how to use the app, see macOS Desktop.
On failure, the reason appears in a speech bubble with もう一度 (Try again). Read the reason first, then press もう一度. もう一度 checks the current state and restarts preparation while keeping the selected runtime. The conversation and unsent confirmations are cleared. Previous work and consent are not replayed.
Initial preparation stops
During 「会話に必要なソフトを準備しています」 (Preparing. Please wait a moment), the app prepares Node.js and the selected runtime's execution environment in a dedicated folder. Node.js is downloaded from nodejs.org, and the runtime as an npm package. Parts already prepared are reused next time.
| Reason in the bubble | Meaning and fix |
|---|---|
Node.jsをダウンロードできませんでした。 or Node.jsのダウンロードが完了しませんでした。 (Node.js could not be downloaded / did not finish downloading) | Node.js could not be downloaded. The download stops after 5 minutes. Check the network and press もう一度 |
Node.jsのダウンロードを検証できませんでした。 (the Node.js download could not be verified) | The downloaded file's checksum did not match the value the app holds. Check the network and press もう一度 |
Node.jsの展開が時間内に終わりませんでした。 or ガイドの準備が時間内に終わりませんでした。 (extracting Node.js / preparing the guide did not finish in time) | Extraction or runtime preparation did not finish within 5 minutes. Check the network and the Mac's load, then press もう一度 |
ガイドの準備に失敗しました。 or ガイドの準備結果を確認できませんでした。 (guide preparation failed / its result could not be confirmed) | The runtime package could not be prepared. Check that the network allows npm package downloads, then press もう一度 |
Codexの履歴非保存設定を検証できませんでした。 (Codex's no-history setting could not be verified) | During Codex preparation, the downloaded package did not match the expected content. If もう一度 does not fix it, update the app to the latest version |
On a corporate network or behind a proxy, check that you can reach nodejs.org, the npm registry, aachat.io, and the sign-in service of the selected runtime.
Files required by the guide cannot be fetched
ガイドに必要なファイルを取得できませんでした。接続を確認して、もう一度試してください。 (files required by the guide could not be fetched) means the guide's instruction files could not be fetched from aachat.io and there is no copy from a previous fetch. The fetch stops after 30 seconds. Check the network and press もう一度. Once a fetch has succeeded, a later failed fetch still starts with the previous copy.
Sign-in does not complete or times out
During 「ブラウザでサインインしてください。終わったらここに戻ってきてください」 (Sign in in the browser, then come back here), complete authentication for the selected service with ブラウザを開く (Open browser). For Codex, enter the authentication code shown in the app into the browser.
| Reason in the bubble | Meaning and fix |
|---|---|
サインインが時間切れになりました (sign-in timed out) | Sign-in did not complete within 15 minutes. Press もう一度 and finish authentication right away |
サインインを完了できませんでした (sign-in could not be completed) | The sign-in process failed, or it finished but sign-in could not be confirmed. Check that you finished authentication in the browser and that the account can use the selected runtime, then press もう一度 |
サインイン状態の確認が時間切れになりました or サインイン状態を確認できませんでした (checking the sign-in state timed out / failed) | The check for sign-in did not finish within 30 seconds, or could not start. Press もう一度 |
Pressing ブラウザを開く shows 操作を完了できませんでした。もう一度お試しください。 (the operation could not be completed) | The default browser could not be opened. Check the default browser and press it again |
Opening the browser alone does not complete sign-in. The conversation starts after the app confirms completion.
Connecting to the guide times out, or the guide stopped
ガイドへの接続が時間切れになりました(connecting to the guide timed out) — the prepared runtime did not respond within 2 minutes at one of the startup stages. Press もう一度ガイドが止まりました。もう一度お試しください(the guide stopped) — the runtime stopped during the conversation. もう一度 starts a new conversation. The conversation before the stop is not carried over, so write the key points againガイドの接続方式に対応していません(the guide's connection method is not supported) — the prepared runtime and the app do not match. Update the app to the latest version- The screen shows
操作を完了できませんでした。もう一度お試しください。or返事を送れませんでした。もう一度送ってください。(the reply could not be sent) — only that operation failed. Press it again or resend
If the same failure continues, use ガイドをやり直す (Restart the guide) in the app menu to return to the first screen and choose the runtime again. You can also choose the other runtime (Claude Code or Codex).
The saved guide settings cannot be read
保存されたガイドの設定を読み取れません。メニューからガイドをやり直してください (the saved guide settings cannot be read) means the saved preparation state, including the selected runtime, is corrupted. もう一度 does not fix this. Choose ガイドをやり直す from the app menu.
ガイドをやり直す resets the runtime choice, conversation, and unsent confirmations. The prepared Node.js and runtime, the shared aachat root and working files, and the Claude and Codex sign-in remain (macOS Desktop). If ガイドをやり直す準備ができませんでした (could not prepare to restart the guide) appears, quit and reopen the app, then choose it again.
The app cannot be updated
The app checks for updates at startup and when reopened from the Dock. When an update is ready, it shows 「新しいバージョン」 (New version) and 更新して再起動 (Update and restart).
アプリを更新できませんでした。(the app could not be updated) — checking for or downloading the update failed. The current app keeps working. Close it with あとで (Later); reopening from the Dock icon checks againアプリケーションからaachatを開き直してください。(reopen aachat from Applications) — after the update restart, the expected version did not start. Reopen aachat from the Applications folder更新の操作を完了できませんでした。(the update operation could not be completed) — 更新して再起動 or あとで failed. If あとで failed, press it again. After 更新して再起動 fails, pressing it again does not apply the update, so quit and reopen the app to check again
If reopening does not fix it, get the DMG from the official Desktop releases page and replace aachat in Applications. App updates and aachat CLI updates are separate. Update the CLI with aachat update (Setup).
When the Desktop app does not resolve it
If the guide does not start, or the same failure continues, use aachat support in a terminal. It requires the aachat CLI and the Claude Code or Codex CLI.
aachat supportFor Codex, use aachat support --provider codex. After it starts, tell it the reason shown in the Desktop bubble, the time, the selected runtime, and the app version. The guide runtime's error output is in ~/Library/Application Support/work.aachat.desktop/guide/logs/runtime.log and is overwritten each time the guide starts. Check it before it is overwritten. If the aachat CLI is not installed yet, start from CLI setup. Quitting the Desktop app does not stop the aachat runtime that the guide started with the CLI, so you can check its state with aachat status.
A Discover clone fails
Clone from Web Discover: GitHub's repo and workflow permissions are required. If one is missing, the clone stops before a repository is created with Clone stopped before creating a GitHub repository because the <scope> permission is missing. Select Back to Discover, start the clone again, and re-authorize GitHub. Start the clone again from Back to Discover and grant the permissions GitHub asks for.
CLI aachat agent clone: you may see this error:
Could not access repository '<owner/repo>'.
Check that the repository exists and is public (or you have access).- Has the source agent repo become private? If so, choose another public agent or ask the author for access
- Has the GitHub API rate limit been reached (
gh api rate_limit)? If so, wait and rerun - Are the
repoandread:userscopes present (aachat doctor)? If not, a human runsgh auth refresh -s repo,read:user
A Webhook request is rejected or does not start
Check the Trigger state, permissions, secret configuration, and occurrence history. After a communication failure, resend the same request with the same idempotency key, and check accepted work through the returned status URL (Triggers).
When support cannot resolve it
Continue in the existing support conversation; there is no need to start another one. The usual entry point remains:
aachat supportSupport distinguishes verified repairs from unresolved problems and helps prepare a minimal, redacted report when necessary. An accepted report is not proof of a fix. The human support address is contact@aachat.io.
Related pages
- Session behavior (state transitions, records, workspaces, delegation): Sessions
- Limits and input units: Limits
- Agent repo structure and when changes take effect: Agents
- Secrets and environment variables: Environment
- Error code meanings and next steps: Error code index
- Command output format: CLI
- Term definitions: Glossary