Skip to main content

Error-code reference

Every E* code emitted by the core runtime. When a CLI command exits non-zero or a session aborts, the enclosing audit record carries one of these values.

CodeMeaningCommon causeFirst action
EINVALInvalid input — config schema violation, malformed argument.agent.yaml Zod validation failed, or a CLI flag was malformed.Re-run with --help; compare against the agent.yaml schema.
EPERMPermission denied.Permission gate blocked a tool call, or an external API returned 401/403.Check the REPL's permission-mode dialog (--mode <default|plan|bypass|auto> on REPL launch); see CLI reference.
EEXTCONFLICTTwo extensions register the same id or the same channel name.A plugin + a bundled adapter both claim, e.g., Read.declaragent extensions — check the conflict report; remove one.
TENANT_BOUNDARYA message tried to cross tenant boundaries.Per-tenant bus strategy detected a leak — usually a mis-wired channel.See runbook → tenant-boundary-violation.
EQUOTADaily token budget or rate limit exceeded.dailyTokenUSD, maxActiveSessions, maxConcurrentToolCalls, or maxEventIngressPerSec on the tenant/agent tripped.Either bump the quota or wait for the UTC rollover.
ENOTOOLTool id not registered.Skill references a tool that isn't in tools.defaults / tools.allow.Add the tool id to agent.yaml or remove the reference.
ENOSESSIONSession id not found.CLI command referenced a session that expired / was pruned.declaragent events list to find an active session id.
EABORTOperation aborted.User hit Ctrl-C, or the permission gate rejected a prompt.None — expected on user abort. Inspect stderr if unexpected.
EAGENTRPC_TIMEOUTSync-mode RequestAgent call deadline elapsed.Peer didn't respond within timeoutMs.Bump timeoutMs; check peer health with declaragent fleet peers --verify.
EAGENTRPC_ABANDONEDPending RPC lost (daemon shutdown / connection loss).Producer daemon restarted while awaiting a response.Retry — the caller owns retry policy.
EAGENTRPC_BUSYPending-RPC registry at capacity.Producer is issuing RequestAgent faster than responses return.Back off, retry; if chronic, increase pending registry capacity or use mode: 'async'.
EAGENTRPC_NO_PEERTarget agent://<id> not in rpc-peers.yaml.Peer table missing or misspelled.declaragent fleet peers — add the peer.
EAGENTRPC_NO_TRANSPORTResolved transport kind has no plugin registered.Peer table's kind: is misspelled, or the kind isn't constructible by fleet run (kafka + nats today; the transports themselves ship inside @declaragent/plugin-agent-rpc, already a CLI dependency).Check the kind: spelling in rpc-peers.yaml; install the broker's peer dep (e.g. kafkajs).
EAGENTRPC_NO_CAPABILITYTarget capability not declared by the peer.capability: name doesn't match the peer's capabilities.yaml.declaragent fleet capabilities — check the declared names.
EAGENTRPC_INVALID_ENVELOPEEnvelope failed schema validation on receive.Version skew or a hand-built envelope with a typo'd field (strict mode fails closed).Inspect the DLQ entry; align sender + receiver versions.
EAGENTRPC_AUTH_FAILEDProducer-side auth attach failed.Token mint / signing failed before publish.Check the peer's auth: block config + secret refs.
EAGENTRPC_DEADLINE_EXCEEDEDEnvelope deadline passed before dispatch.Consumer backlog exceeded the producer's deadline.Raise the deadline or scale consumers.
EAGENTRPC_TENANT_MISMATCHEnvelope tenantId doesn't match the local bus scope.Cross-tenant call attempt.Audit the caller; see the tenant-boundary runbook.
EVERSION_SKEWPeer fleet version outside minFleetVersion.Mixed-version fleet during a rollout.Finish the rollout or relax rpc.minFleetVersion.
AUTH_REJECTEDReceiver rejected the envelope's auth (verify failed).Missing/expired/wrong-audience token under rpc.auth.enabled: true — the code the 0.8.0 zero-trust flip surfaces.declaragent fleet audit-rpc --suggest-enable; inspect dlq list --kind dispatch --reason auth-rejected.

How error codes surface

  • CLI exit code. Non-zero exit + stderr text naming the code.
  • Audit log. Each failure is written to the tenant's audit log with the code, timestamp, and a sanitized cause.
  • Metrics. Failure classes surface on the real counters — declaragent_provider_errors_total (LLM call failures), channel_outbound_failed{reason}, channel_inbound_failed, source_messages_failed — there is no per-error-code label today.
  • Alerts. The security.rules.yaml and daemon.rules.yaml rule files fire on the metrics corresponding to these failure classes (secret_access_denied_total, tenant_boundary_violation_total, …), not on the error-code strings themselves.