SandboxError codes

Error codes and how to fix them

Every failed call carries a code. Branch on the code, not on the message or an error class. This page shows where the code appears in each client, which errors to retry, and what every code means.

Read the code in your client

The SDK throws SandboxError.

import { SandboxError } from "@tangle-network/sandbox";
 
try {
  await box.exec("npm test");
} catch (error) {
  if (!(error instanceof SandboxError)) throw error;
  if (error.catalogCode === "INVALID_STATE") {
    await box.resume();
  } else {
    console.error(error.code, error.status, error.retryable, error.nextStep, error.requestId);
    throw error;
  }
}
FieldMeaning
codeThe code the server sent, such as CHILDREN_EXIST.
catalogCodeThe nearest code in the table below. Branch on this when code is not in the table.
statusThe HTTP status.
retryableWhether repeating the same request can succeed.
nextStepThe fix, in one sentence.
requestId, traceIdIds to quote when you contact support.
retryAfterMsHow long the server asked you to wait, when it did.

AuthError, NotFoundError, StateError, ValidationError and the other subclasses still work but are deprecated. Read code or catalogCode instead.

Retry the right errors

Retry only when the code’s Retry column says Yes, and wait for Retry-After when the response has one.

ClientWhat it retries for you
TypeScript SDKUp to 4 attempts for GET, HEAD, OPTIONS, PUT, DELETE and any request with an Idempotency-Key, on 502, 503, 504, and 429 with Retry-After. It never retries a code the table marks No. A request that provably never reached the server is retried whatever its method. Waits between attempts are at most 4 seconds.
Python SDKGET, HEAD, PUT, DELETE and OPTIONS on 429, 502, 503 and 504 when the code is retryable, waiting Retry-After or backing off from 1 second. Connection failures are retried for any method.
CLIUses the TypeScript SDK’s retries.

Both SDKs send an Idempotency-Key with every create and reuse it when they send the create again. When no host has room (CAPACITY_EXHAUSTED, HOST_PRESSURE, PLACEMENT_WARMING), they send the same create again for up to 150 seconds, within your request timeout. The second request joins the first, so you never get two sandboxes. In TypeScript, create({ retry: { capacity: false } }) returns CAPACITY_EXHAUSTED at once so you can decide when to try again.

If you send creates yourself, set your own Idempotency-Key header and reuse it for every retry of the same create:

curl -s https://sandbox.tangle.tools/v1/sandboxes \
  -H "Authorization: Bearer $TANGLE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: build-4821" \
  -d '{"name":"build-4821"}'

Errors you will see most

💡

INVALID_STATE (409) on a command or prompt. The sandbox is stopped. Call box.resume() and try again. The CLI resumes a stopped sandbox for you before exec, ssh, fs, git, process and agent prompt.

  • CAPACITY_EXHAUSTED, HOST_PRESSURE (503) on create. No host has room right now. The SDKs retry for you; see Retry the right errors.
  • QUOTA_EXCEEDED, CONCURRENT_LIMIT (429) on create. You reached your plan’s limit of running sandboxes. Stop or delete one, or raise your plan. See Limits and timeouts.
  • RESOURCES_EXCEED_LIMIT (400) on create. The CPU, memory or disk you named is above your account’s ceiling. The response names the field, the requested and the allowed value. Read your ceiling with client.shapes().
  • COMPLIANCE_NOT_ENTITLED (403). The create asked for compliance: { hipaa: true } and the key has no HIPAA entitlement.
  • COMPLIANCE_CAPACITY_UNAVAILABLE, COMPLIANCE_CELL_UNAVAILABLE (503). No HIPAA capacity can take the sandbox now, and it is never placed anywhere else. Retry the first after Retry-After; retry the second later, and contact support if it persists.
  • CHILDREN_EXIST (409) on delete. The sandbox has live branches. Delete them first, or delete the whole family with DELETE /v1/sandboxes/{id}?cascade=true or client.deleteMatching(filter, { cascade: true }).
  • IMAGE_BUILDS_DISABLED (403) on POST /v1/images. The hosted service does not build images. Start from an environment or a pushed image reference; see Templates and images.
  • GPU_PROVIDER_NOT_CONFIGURED (503). No GPU provider is set up for the service you called. Create the sandbox without a GPU.
  • PROFILE_INVALID (CLI exit 65). tangle agent profile validate or a command that loads an AgentProfile found it invalid. The message names the field.

Every catalog code

The SDKs, the CLI and the API share this catalog. What to do matches the nextStep your client receives. Retry says whether repeating the same request can succeed.

StatusCodeRetryMeaningWhat to do
400BACKEND_HARNESS_CONFLICTNoRunning the turn would run a coding agent other than the one the caller named.Name one coding agent for the session and its turns.
400BASE_IMAGE_MISSING_BEFORE_CREATENoThe requested image does not exist; the host proved it before creating anything.Check the image name and tag, then create again.
400BASE_IMAGE_NOT_FOUNDNoThe requested image does not exist.Check the image name and tag, then create again.
400EXECUTION_TTL_EXCEEDS_LIMITNoThe requested execution time limit is above this deployment’s ceiling.Send a ttlMs at or below the ceiling the message names.
400HARNESS_MODEL_UNSUPPORTEDNoThe named coding agent cannot run the named model.Choose a model the coding agent supports, or another coding agent.
400interaction_kind_unsupportedNoThe turn asks for an interaction kind this coding agent cannot originate.Drop the interaction toggle or choose a coding agent that supports it.
400invalid_attachmentNoAn attachment has no url or path, or content the coding agent cannot take.Fix the attachment the message names, then send the turn again.
400INVALID_REQUESTNoThe request is malformed or a field is invalid.Fix the field the message names and send the request again.
400INVALID_TEXT_PARTNoA text part is missing its text or is not base64-encoded UTF-8.Base64-encode every text part, then send the request again.
400MODEL_CALL_LIMIT_REACHEDNoThe bounded turn needed more model calls than it allowed.Raise the turn’s model-call limit or split the task.
400MODEL_CALL_LIMIT_UNSUPPORTEDNoThis coding agent’s model calls cannot be counted, so a call limit cannot hold.Drop the limit or choose a coding agent that supports it.
400PUBLIC_PROFILE_PIN_REFUSEDNoThe runtime refused the pinned public profile revision this turn named.Send the turn with the revision and digest the profile has now.
400TOOL_DISABLED_TURN_UNSUPPORTEDNoThis coding agent cannot run a turn with its tools disabled.Allow tools, or choose a coding agent that supports tool-free turns.
400UNSUPPORTED_EGRESS_POLICYNoThis runtime cannot enforce the requested egress policy.Choose a policy the runtime supports, or another runtime.
400UNSUPPORTED_FOR_RUNTIMENoThe requested runtime cannot honour a create input.Remove the input the message names, or choose another runtime.
400VALIDATION_ERRORNoThe request is malformed or a field is invalid.Fix the field the message names and send the request again.
401UNAUTHORIZEDNoThe credential is missing, invalid or expired.Sign in again or send a valid API key.
402PAYMENT_REQUIREDNoThe account has no balance, credit or plan for this request.Add credit or a paid seat at https://id.tangle.tools/app/billing, then retry.
403COMPLIANCE_NOT_ENTITLEDNoThe account is not entitled to the requested compliance placement.Enable the compliance plan for the account, or create without it.
403EGRESS_DOMAIN_NOT_ALLOWEDNoThe sandbox egress allowlist does not include this host.Add the host to egressPolicy.allowDomains with box.egress.update.
403EGRESS_REQUEST_REFUSEDNoThe sandbox egress policy refused this request.Read box.egress.denials() for the rule that refused it.
403FEATURE_DISABLEDNoThis capability is switched off for this deployment or account.Ask the operator to enable it.
403FORBIDDENNoThe caller is authenticated but not allowed to do this.Use a credential with the role or scope the message names.
403model_credential_refusedNoThe account owner refused the model credential for this seat.Reconnect or replace that seat’s credential, or choose another seat.
403ROOT_USER_FORBIDDENNoThe sandbox may not run as root.Run the workload as a non-root user.
404NOT_FOUNDNoThe resource does not exist or this account cannot see it.Check the id and the account or team that owns it.
404NOT_MANAGEDNoThis host does not manage the named container.Check the sandbox id; the platform resolves its host again on retry.
404SIDECAR_NOT_FOUNDNoThe sandbox runtime does not exist or this account cannot see it.Check the sandbox id, or create the sandbox again.
404SNAPSHOT_NOT_FOUNDNoThe snapshot does not exist or this account cannot see it.List the sandbox snapshots and use an id from that list.
409BRANCH_NOT_MATERIALIZEDNoThe branch parent was removed before any child materialized.Branch a live sandbox with a new idempotency key.
409BRANCH_PARENT_NOT_RUNNINGNoThe branch parent is not running.Resume the parent sandbox, then branch again.
409CONFLICTNoThe request conflicts with an existing resource or an earlier request.Read the existing resource, or use a new name or idempotency key.
409CONTAINER_NETWORK_MISSINGNoThe stopped sandbox lost its network, so it cannot start in place; its files remain.Resume the sandbox so the platform recreates it.
409CONTAINER_RESERVATION_CONFLICTYesAnother lifecycle operation holds this sandbox.Wait for that operation to finish, then retry.
409EGRESS_DISABLEDNoEgress is not enabled on this host.Place the sandbox on a host with egress enabled.
409EGRESS_IN_PLACE_RELOAD_UNAVAILABLENoThe egress proxy cannot be re-keyed without a restart.Re-key once no agent turn is streaming, allowing a proxy restart.
409EGRESS_PROXY_RECOVERY_REQUIREDNoThe egress proxy lost the credentials it serves.Recreate the sandbox to rematerialize its egress credentials.
409EGRESS_PROXY_SECRETS_UNAVAILABLENoThe egress proxy rebuild found no value for secrets the box still references.Send the missing secrets the response names in one retry, or recreate the sandbox.
409IN_PROGRESSYesAnother operation holds this resource.Wait for that operation to finish, then retry.
409INVALID_STATENoThe resource is in the wrong state for this operation.Bring it to the state the message names, then retry.
409KV_KEY_LIMITNoThe workflow has reached its KV key cap.Delete keys the workflow no longer reads, then write again.
409KV_VERSION_CONFLICTNoAnother writer changed the KV key since it was read.Read the key again and retry the compare-and-swap against its current version.
409MESSAGE_ADMISSION_EXPIREDNoThe message’s admission deadline passed before the coding agent was invoked.Dispatch the message again with a new deadline.
409NATIVE_CAPTURE_UNAVAILABLENoThe host cannot prove the native capture image this create requires.Retry on another host, or create without native capture.
409NATIVE_CREDENTIAL_SEAT_SWITCH_UNSUPPORTEDNoThe sandbox was created with a different subscription seat; a live box cannot switch seats.Grant the seat the box was created with, or create a new sandbox naming the new seat.
409NETWORK_ISOLATION_REQUIREDNoThe create requires its own network, and the host did not place one.Retry on a host that supports network isolation.
409PROFILE_NOT_CACHEDNoThe turn names a profile by hash that this runtime does not hold.Send the full profile object instead of its hash.
409SESSION_CLAIM_MISMATCHNoThe request names a session other than the one bound to this container.Use the session id the container was created for.
409SESSION_CREDENTIAL_NOT_RETAINEDNoA restored session’s model credential is not kept in session storage.Send the model credential with the turn.
409session_rehydration_failedNoThe session’s stored transcript cannot be replayed into a new coding agent session.Start a new session; this one cannot resume.
409SNAPSHOT_NOT_SYNCEDYesThe snapshot has not finished uploading.Retry after the upload completes.
409STALE_STATENoThe caller’s view of the resource is stale.Read the resource again and repeat the request against its current state.
409WARM_CLAIM_REMOVEDNoAnother lifecycle operation removed the claimed warm sandbox.Create the sandbox again.
409WORKSPACE_STORAGE_MISSINGNoThe stopped sandbox storage is gone or replaced, so the host refused to start it.Restore the sandbox from a snapshot.
410EXPIREDNoThe token, decision or grant has expired.Request a new one.
410PROCESS_OUTPUT_GAPNoA process log reader fell behind the spool, so output was evicted before it was read.Read faster or redirect output to a file; missedBytes says how much.
412PRECONDITION_FAILEDNoThe stored version no longer matches the request’s precondition.Read the current version or etag and send it with the request.
413KV_VALUE_TOO_LARGENoA workflow KV value is over the per-value size cap.Store a smaller value, or put the data in an artifact and keep its id in KV.
413PAYLOAD_TOO_LARGENoThe body or artifact is over its size limit.Send a smaller body, or split it.
413RESTORE_QUOTA_EXCEEDEDNoThe snapshot is larger than the workspace quota.Create with a larger disk, or restore a smaller snapshot.
422GIT_CLONE_REFUSEDNoThe repository refused the clone credential, or the credential cannot see it.Fix the git credential or repository URL, then create again.
422PROFILE_UNSUPPORTEDNoThe profile asks for controls its coding agent cannot run, so the sandbox is not started.Remove the controls the message names, or choose a coding agent that runs them.
422UNPROCESSABLENoThe input has nothing usable for this operation.Record the history the message names, then ask again.
424NOT_CONNECTEDNoA required integration connection is missing.Connect the integration the message names, then retry.
429provider_quota_exhaustedNoThe coding agent subscription quota is spent until its resetAt.Wait until resetAt, or send the turn with another credential.
429QUOTA_EXCEEDEDNoA plan or concurrency quota is reached.Stop or delete resources, or raise the quota.
429rate_limit_errorYesThe model provider rate-limited this turn.Wait for the provider’s window, then send the turn again.
429RATE_LIMIT_EXCEEDEDYesToo many requests in the current window.Wait for the Retry-After interval, then retry.
429RATE_LIMITEDYesToo many requests in the current window.Wait for the Retry-After interval, then retry.
500AGENT_EXECUTION_FAILEDNoThe agent run failed inside the sandbox.Read the cause in the message; fix the prompt, model or credential it names.
500BACKEND_START_FAILEDNoThe agent backend cannot start, and a retry fails the same way.Fix the configuration, credential or session the cause names.
500BRANCH_FAILEDNoThe live branch of a running sandbox failed.Report the request id; branch from a snapshot instead.
500CONFIGURATION_ERRORNoThe deployment is missing configuration or has an invalid value.The operator sets the configuration key the message names.
500CONTAINER_START_FAILEDYesThe host started the sandbox and its runtime failed.Retry; if it repeats, recreate the sandbox from a snapshot.
500GIT_CLONE_FAILEDYesCloning the repository failed.Retry; if it repeats, check that the repository URL is reachable.
500GIT_CLONE_TIMEOUTYesCloning the repository exceeded its deadline.Retry, or clone a smaller repository.
500HOST_CLEANUP_UNCONFIRMEDYesThe host cannot prove it removed what a failed create made.Retry; the platform reconciles the earlier attempt first.
500HOST_RESERVATION_COMMIT_FAILEDYesThe host could not record the create after cleaning it up.Retry the create.
500INTERNAL_ERRORNoThe server failed for a reason it did not classify.Report the request id; the request itself did not cause it.
500MEMORY_LIMIT_KILLEDNoThe coding agent ran out of memory and was killed.Give the sandbox more memory or split the work, then send the turn again.
500MESSAGE_RETRIEVAL_FAILEDNoMessage storage cannot serve this read.Report the request id; the stored session needs repair.
500MISSING_SIDECAR_AUTH_TOKENNoThe sandbox has no runtime auth token, so its host cannot route to it.Recreate the sandbox.
500OPERATION_FAILEDNoA server-side operation failed.Report the request id with the operation the message names.
500SESSION_DIEDNoThe coding agent session process died during the turn; the message says why.Send the turn again in a new session.
500SNAPSHOT_RESTORE_FAILEDNoRestoring the snapshot into the sandbox failed; no empty workspace was served.Report the request id, or restore another snapshot.
500VM_START_FAILEDYesThe microVM failed to start.Retry; if it repeats, recreate the sandbox.
501UNSUPPORTEDNoThis operation is not supported for this runtime, coding agent or driver.Choose a runtime or option that supports it.
502empty_visible_outputYesThe turn ended without visible output from the model.Send the turn again; if it repeats, change the model or the prompt.
502native_api_errorNoThe coding agent’s model API refused the turn; the message carries its answer.Fix what the provider’s answer names, then send the turn again.
502SIDECAR_UPSTREAM_UNAVAILABLEYesThe host could not reach the sandbox runtime.Retry; the request may have reached the sandbox.
502UPSTREAM_ERRORYesAn upstream service failed or answered outside its contract.Retry with backoff; report the request id if it persists.
503BACKEND_UNAVAILABLEYesThe agent backend did not answer.Retry after the Retry-After interval.
503BRANCH_UFFD_UNAVAILABLEYesThe parent host cannot fork live memory now.Retry, or branch from a snapshot.
503CAPACITY_EXHAUSTEDYesNo host has room for this sandbox now.Retry after the Retry-After interval.
503COMPLIANCE_CAPACITY_UNAVAILABLEYesNo verified compliance-scope host can take this sandbox now.Retry after the Retry-After interval.
503COMPLIANCE_CELL_UNAVAILABLENoNo capacity for the requested compliance placement can take the create, and the sandbox is not placed anywhere else.Retry later; contact support if it persists, or create without compliance.
503EXECUTION_INTERRUPTEDYesThe sandbox runtime restarted during the run, before the run produced a terminal event; the run cannot resume.Run the turn again.
503FIRECRACKER_IMAGE_UNAVAILABLENoNo host carries the requested Firecracker image.Choose an image whose runtimes include firecracker in environments list, or set runtime: docker.
503GPU_PROVIDER_NOT_CONFIGUREDNoNo GPU provider is configured for this deployment.Create the sandbox without a GPU, or ask the operator to configure a provider.
503HARNESS_RUNTIME_UNAVAILABLEYesThe coding agent’s local daemon exited before it could serve the session.Retry after the Retry-After interval; the message carries the daemon’s reason.
503HOST_AGENT_RESTARTINGYesThe sandbox’s host agent is inside a planned restart and this request reached nothing; the sandbox and its files remain.Resend it, whatever its method, after the Retry-After interval until the body’s retryUntil.
503HOST_PRESSUREYesThe host was too busy to create the sandbox and created nothing.Retry after the Retry-After interval.
503HOST_UNAVAILABLEYesThe host did not answer; the sandbox and its files remain.Retry after the Retry-After interval.
503IN_BOX_DOCKER_UNAVAILABLEYesDocker inside the sandbox is not available.Retry, or create the sandbox with in-box Docker enabled.
503MESSAGE_RETRIEVAL_UNAVAILABLEYesMessage storage did not answer.Retry after the Retry-After interval.
503NETWORK_ERRORYesThe request did not reach the platform, or its answer was lost.Check connectivity, then retry; a keyed create joins its earlier attempt.
503NO_IPYesThe sandbox has no network address.Retry after the Retry-After interval.
503NOT_READYYesThe target is starting, restarting, recovering or draining.Retry after the Retry-After interval.
503PLACEMENT_WARMINGYesPlacement has just restarted and has not found a host.Retry after the Retry-After interval.
503ROUTE_LOOKUP_FAILEDYesThe host could not look up the sandbox route.Retry after the Retry-After interval.
503SNAPSHOT_STORAGE_UNAVAILABLEYesSnapshot storage did not answer.Retry after the Retry-After interval.
503STREAM_INTERRUPTEDYesThe execution’s stream ended without its terminal event; its outcome is unknown.Rejoin with its executionId and lastEventId, or read the session status.
503THIN_POOL_HEADROOMNoThe sandbox host cannot grow this workspace.Recreate the sandbox from a snapshot so it lands on another host.
503UNAVAILABLEYesA dependency or capacity is temporarily unavailable.Retry after the Retry-After interval.
503UPSTREAM_UNAVAILABLEYesThe sandbox service did not answer, or answered without a code the catalog knows.Retry after the Retry-After interval.
503WARM_RECONNECT_MISSYesThe warm restore path is unavailable.Retry; the platform restores through the cold path.
503WORKSPACE_IMAGE_BUILDER_BUSYYesThe workspace image builder is busy.Retry after the Retry-After interval.
503WORKSPACE_IMAGE_BUILDER_UNAVAILABLEYesThe workspace image builder is unavailable.Retry after the Retry-After interval.
504EXECUTION_TTL_EXPIREDNoThe execution ran past its time limit and was stopped.Raise ttlMs up to the deployment ceiling, or split the work.
504SIDECAR_HEALTH_TIMEOUTYesThe sandbox runtime did not become ready within its boot attempts.Retry; if it repeats, recreate the sandbox.
504TEMPLATE_PUBLICATION_WAIT_INTERRUPTEDYesThe SDK stopped waiting for a template publication; the job keeps running.Resume the wait with resumeJobId instead of publishing again.
504TIMEOUTYesThe operation exceeded its deadline.Retry; if it repeats, raise the timeout or split the work.

Other codes the API sends

These codes come from specific routes. The SDKs map each to the nearest catalog code in catalogCode.

StatusCodeMeaningWhat to do
400ACCELERATOR_LIMIT_EXCEEDEDThe create asks for more GPU devices than your plan allows per sandbox.Ask for fewer devices or change plan.
400BACKEND_MODEL_REQUIREDOpenCode on your own credential needs a model name.Set backend.model.model to a model your provider serves.
400HARNESS_REQUIRES_CALLER_CREDENTIALThis coding agent calls its vendor’s service and cannot run on the Tangle Router.Send your own credential in backend.model.apiKey, apiKeyEnv or cliAuth.
400HARNESS_UNAVAILABLEThe coding agent you named is not available on this service.Pick another backend.type from GET /v1/backends.
400MANAGED_MODEL_UNAVAILABLEThe Tangle Router cannot serve the model you named.Pick a model from GET /v1/router-models, or send your own key.
400NATIVE_AUTH_INVALIDThe subscription credential for Claude Code or Codex could not be read.Check the stored secret named in cliAuth.
400RESOURCES_EXCEED_LIMITThe size you named is above your account’s ceiling.Ask for less, or omit resources to get the clamped default.
400SECRET_NOT_FOUNDThe create names a stored secret that does not exist. missingSecrets lists them.Create the secret, or remove it from secrets.
402ACCELERATOR_REQUIRES_PAID_PLANGPU sandboxes need a paid plan with usage billing.Change plan at id.tangle.tools.
402INSUFFICIENT_BALANCEThe account owes money or has no balance.Add credit at id.tangle.tools.
402SUBSCRIPTION_INACTIVEThe account has no active subscription.Choose a plan at id.tangle.tools.
403IMAGE_BUILDS_DISABLEDThe hosted service does not build images through the API.Use an environment or a pushed image reference.
403TIER_REQUIREDA startup script with runAsRoot needs a Pro or Enterprise plan.Remove runAsRoot or change plan.
404PUBLIC_TEMPLATE_NOT_FOUNDThe public template does not exist.Check the id or slug with GET /v1/public-templates.
404TEMPLATE_NOT_FOUNDThe template does not exist or belongs to another account.Check the id with GET /v1/templates.
409CHILDREN_EXISTThe sandbox has live branches. children lists them.Delete the branches first, or pass cascade=true.
409FINAL_SUSPEND_UNCONFIRMEDThe delete needs a confirmed final save of the sandbox, and there is none.Retry the delete. Contact support with the request id if it repeats.
409IDEMPOTENCY_KEY_REUSEDThe Idempotency-Key already names a different delete of this sandbox.Use a new key for a different request.
409IDEMPOTENT_CREATE_CONFLICTAn earlier create with this key still holds the sandbox.Inspect that sandbox, or create with a new Idempotency-Key.
409RETENTION_HOLDA retention hold blocks this delete. The response names the hold and its expiresAt, when it has one.Delete after the hold expires, or contact support.
429CONCURRENT_LIMITYour plan’s limit of running sandboxes is reached.Stop or delete sandboxes, or raise your plan.
429PLATFORM_RATE_LIMITEDAccount checks for this create were rate-limited.Retry after Retry-After.
502SANDBOX_CREATE_READINESS_FAILEDTypeScript SDK: the sandbox was created but did not reach running in time. The error carries the sandbox id.Read or delete that sandbox, or create again with the same idempotencyKey.
502router_catalog_unavailableThe Tangle Router refused or failed the model list.Retry later.
503IDEMPOTENT_CREATE_IN_PROGRESSAn earlier create with this key is still running.Retry after Retry-After; you get the same sandbox.
503SANDBOX_BILLING_STATE_UNAVAILABLEThe sandbox’s billing state could not be read.Retry the request.
503SPARE_CAPACITY_UNAVAILABLEA create limited to spare capacity found none free. It is not placed elsewhere.Retry later.

CLI exit codes

Exit codeMeaning
0Success.
1The command failed. fleet and batch exit 1 when any member failed.
2tangle agent connect was given an unknown framework.
64Usage error: an unknown command or option, or a missing parameter.
65An invalid definition, such as an AgentProfile (PROFILE_INVALID), a graph, a workflow input file or a request that failed validation.
69Something the command needs is unavailable: a coding agent that is not installed, an unreachable MCP server or no network.
75Temporary: a rate limit or a seat limit. Retry later.
77Sign in again: the credential expired, was refused (any HTTP 401) or belongs to another service.
78Configuration: a subscription is required, the model was not found or does not match its provider.
130Stopped with Ctrl-C.
143An interactive agent session ended with SIGTERM.
Remote exit codetangle exec, tangle run, tangle sandbox gpu run and tangle process spawn --blocking exit with the remote command’s code. tangle ssh exits with ssh’s code.

Next steps