Skip to content

Error codes

Every error answer carries a code. Some also carry a lower-case error key, which exists so a client can branch on the case without matching on prose:

{
"code": "TRIAL_CREDITS_EXHAUSTED",
"error": "trial_credits_exhausted",
"message": "Your trial credits are used up. Connect a runner to keep your AI team working."
}

code and error are stable. message is written for a person and may be reworded, so never match on it.

CodeHTTPMeansDo
UNAUTHORIZED401No valid sessionSign in again
FORBIDDEN403Signed in, missing a permission. The message names the keyHave an admin tick that permission
TENANCY403The record belongs to another workspaceCheck the id. Workspaces never share data
TENANT_SUSPENDED403The workspace is suspended, so new tasks and runs are refused. Work already running finishesGet in touch
TENANT_OFFBOARDED403The workspace has been closed. Its data was deleted and it cannot be reopened, so nothing new is acceptedGet in touch if you did not expect this
CodeHTTPMeansDo
VALIDATION400The request body is wrong. Field errors come back in errors[]Fix the named fields
NOT_FOUND404No such recordCheck the id
CONFLICT409The record changed under you, or the change collides. Details in conflicts[]Re-read and retry
DUPLICATE_EXPERIMENT409The hypothesis matches an experiment already proposed or running in the same project. The existing one comes back in existingExperimentIdOpen that experiment instead of starting a second one
DUPLICATE_SUGGESTION409The same policy suggestion is already live for this workspace. The daily sweep raises a finding once, not once a dayDecide the one already in the queue
APPROVAL_REQUIRED428The action needs an approval that has not been givenDecide it in the approvals queue
NOT_IMPLEMENTED501The capability is not wired in this install. Knowledge search without pgvector and an embeddings key answers thisTurn the capability on, or stop calling it. It never fakes an empty result
INTERNAL500Something failed that was not anticipated. No details are returnedRetry, then report it
CodeHTTPBranch keyMeans
TRIAL_CREDITS_EXHAUSTED402trial_credits_exhaustedThe trial grant is spent

Raised before the model call, so an exhausted workspace spends nothing. Recover by pairing a runner or connecting your own AI credential. Workspaces without a trial ledger are never metered and never see this.

CodeHTTPBranch keyMeansDo
PLAN_CEILING402The task’s verification profile is above what this workspace’s plan allows on a managed run. No run is created and nothing is spentRaise the plan, or run the task on your own runner
NO_RUNNER_AVAILABLE503no_runner_availableNo live runner advertises the agent the work needsStart a runner, or switch the AI runtime to Direct LLM
NO_RUNTIME_AVAILABLE503Every target in the agent’s runtime chain was tried and skipped. The message lists each one and whyFix one of the listed reasons
RUNNER_RUN_FAILED503runner_run_failedA run started and produced nothing usableRead the attempt on the Execution tab
RUNNER_DEREGISTERED410The runner acting has been revoked. Deregistration is permanentPair the machine again

Most of these are the one-time release working as designed. A runner fetches once when it prepares an attempt; a second fetch for the same attempt is refused.

CodeHTTPBranch keyMeans
NO_AGENT_CREDENTIAL409no_agent_credentialThe run’s coding agent has nothing to sign in with. See below for what to do
AGENT_CREDENTIAL_ALREADY_RELEASED409agent_credential_already_releasedThe credential for this attempt was already handed out
NO_RUN_ENV409no_run_envThe run’s project environment could not be fully resolved. It fails rather than starting half configured
RUN_ENV_ALREADY_RELEASED409run_env_already_releasedThe environment for this attempt was already handed out
AGENT_CREDENTIAL_UNREFRESHABLE401The login uploaded for managed runs could not be renewed, usually because it was revoked. Upload it again: open the runner with commandchain-runner and press c, or run commandchain-runner creds push
NO_MCP_CREDENTIAL409no_mcp_credentialA secret an MCP server registration points at could not be resolved. The attempt fails rather than running with a partial tool set
MCP_CREDS_ALREADY_RELEASED409mcp_creds_already_releasedThe MCP material for this attempt was already handed out. Refreshing an OAuth token stays available
NO_MCP_SERVERS404no_mcp_serversThe run carries no MCP servers, so there is nothing to release

A retry gets a fresh attempt, and each attempt gets its own single release, so “already released” never blocks a retry.

It means one of two things, depending on where the run was going to happen:

  • On a runner on your own machine, the runner is not signed in to the coding agent the run needs, or its sign-in expired and could not be renewed. Open the runner on that machine with commandchain-runner and follow its prompt, or run commandchain-runner signin --agent claude-code (or codex, gemini). See sign-in only or full setup.
  • On CommandChain’s managed servers, no login is uploaded for managed runs. On a machine where you are signed in to that agent, open the runner with commandchain-runner and press c, or run commandchain-runner creds push. See managed runner credentials.
CodeHTTPBranch keyMeansDo
REPO_CREATION_NEEDS_ORG422repo_creation_needs_orgCreating a repository was asked for on a workspace whose GitHub App is installed on a personal account. GitHub offers no way for an app to create one thereCreate it on GitHub and link it, or install the App on an organization

A name already attached to the project comes back as CONFLICT naming the repository, and creates nothing: link the existing one instead.

CodeHTTPMeans
TUNNEL_UNAVAILABLE503This install has no transport for sharing a live app
TUNNEL_SESSION_LIMIT409The huddle already holds the maximum number of live sessions. See limits
  • Common issues: the same failures, indexed by symptom rather than by code.
  • Limits: the ceilings behind the 402 and the 409.
  • Permissions: the key a 403 names.