Internal engineering docs

Oxagen Architecture Atlas

What the monorepo is made of and how a request, a run, a governed action and a record move through it. Every figure is either generated from a manifest or cites the source it depicts.

Overview

Oxagen governs agents; it does not run them. Every client surface calls one capability kernel through invoke(), and the kernel is the normal path to the stores.

System context

System context: every client surface calls the capability kernel through invoke().GOVERN · GROUND · EXPLAIN · METER · RATEHTTPSREST, ox_ keystreamable HTTP/v1/tacho ·/v1/telemetryinvoke() in processinvoke()invoke()governed turnwithTenantDbscopedSessionaudit · usage ·tool calls/webhooks/stripebackground jobsexportsBrowseroxagen CLI203 commandsMCP clientClaude Desktop · any MCP clientExternal agentsClaude Code · Codex · Cursor · Stellaapps/appapp.oxagen.shapps/apiapi.oxagen.sh · 624 routesapps/mcpmcp.oxagen.sh · 606 toolscapability kernel693 contracts · one invoke()Inngest141 functionsPostgres236 tables · 28 schemas · RLSNeo4j6 labels · vectorClickHouse15 tables · append-onlyBlobavatars · evidence · generated assetsstella-servemodel engine, loopbackStripewebhooks in · nothing re-billed
Client surfaces reach the stores through the capability kernel. The exceptions are inbound webhooks (Stripe, GitHub, connectors), usage telemetry intake, CLI token exchange and the app's pre-tenant lookups. stella-serve, Stripe and Inngest sit outside the kernel.
  • The web app and the MCP server each bootstrap the kernel and call invoke() in their own process. Only the CLI, wrapped agents and HTTP clients reach it through apps/api.
  • Counts on this page are read from the tree at build time (package manifests, the storage manifest, the capability manifest, route and function sources). If a number here disagrees with the code, the atlas is stale: run pnpm docs:architecture.

Workspace

A pnpm + Turborepo monorepo: 10 apps, 42 packages and 1 tool workspaces, one version for all of them.

Dependency graph

Workspace dependency graph, apps on top, leaf packages at the bottom, edges implied by a longer path omitted.apiappmcpappmetrics-fleetweb-v2appappappdesktopappdocsapprelayappsandbox-hostappmockupappcliapphandlersuikitauthrelay-brokerinngest-functionssandbox-modalworksteering-bundlebrandfunctionsgitlabgithubsandbox-providersteering-checkingestionpolicyagentglobmcp-studiostella-engine-clientpluginsrulesontologysteering-assembleraiiammcp-configbillingrun-ledgernotificationsstoragedatabasecryptooxagentelemetrycodegraphcompliancerecorderrun-evidencetenancyconfig
Apps sit on top and depend downward; an edge is drawn only when no longer path implies it, so what remains is the load-bearing structure. Hover or focus a node to trace its edges.
  • Most depended-on: config (48), oxagen (24), tenancy (17), database (16), recorder (16), telemetry (15), billing (12), crypto (11).
  • Deprecated and tool workspaces are listed in the table but left out of the drawing.

Workspaces

53
PackageDirectoryKindWorkspace depsExternal depsDescription
@oxagen/agentpackages/agentpackage197—
@oxagen/aipackages/aipackage68—
@oxagen/apiapps/apiapp238—
@oxagen/appapps/appapp1812—
@oxagen/authpackages/authpackage77—
@oxagen/billingpackages/billingpackage84—
@oxagen/brandpackages/brandpackage00—
@oxagen/cliapps/cliapp95Oxagen governance CLI: spend, source tracking, grounding, credentials, and audit (agentic coding lives in the stella CLI)
@oxagen/codegraphpackages/codegraphpackage12—
@oxagen/compliancepackages/compliancepackage10—
@oxagen/configpackages/configpackage02—
@oxagen/cryptopackages/cryptopackage11—
@oxagen/databasepackages/databasepackage63—
@oxagen/desktopapps/desktopapp36The Oxagen desktop app: installs the CLI and the recorder for Claude Code and Codex, signs a machine in to an org, and lets the operator pick or change the workspace the host reports to. Spec: docs/specs/oxagen-desktop/spec.md.
@oxagen/docsapps/docsapp210—
@oxagen/functionspackages/functionspackage10—
@oxagen/githubpackages/githubpackage31—
@oxagen/gitlabpackages/gitlabpackage10—
@oxagen/globpackages/globpackage10—
@oxagen/handlerspackages/handlerspackage3416—
@oxagen/iampackages/iampackage62—
@oxagen/ingestionpackages/ingestionpackage63—
@oxagen/inngest-functionspackages/inngest-functionspackage217—
@oxagen/mcpapps/mcpapp1615—
@oxagen/mcp-configpackages/mcp-configpackage11—
@oxagen/mcp-studiopackages/mcp-studiopackage48MCP Studio's storage contract, operation model, and the compile, lint, and execute modules a server folder is built and run with (mcp-studio-spec).
@oxagen/metrics-fleetpackages/metrics-fleetpackage10—
@oxagen/mockupapps/mockupapp48—
@oxagen/notificationspackages/notificationspackage54—
@oxagen/ontologypackages/ontologypackage31—
@oxagen/oxagenpackages/oxagenpackage54—
@oxagen/pluginspackages/pluginspackage710—
@oxagen/policypackages/policypackage22Decides every tool call from the Cedar policies in the steering repo, and compiles and tests those policies (lane S12, #4445).
@oxagen/recorderpackages/tachopackage14The Oxagen recorder: records, gates, and evidences the agents Oxagen does not run. The oxagen CLI runs it. Leaf package: no @oxagen/* runtime dependency.
@oxagen/relayapps/relayapp32—
@oxagen/relay-brokerpackages/relay-brokerpackage52Oxagen's side of the relay for servers and APIs in a private network: the broker, signed calls, tokens, and the relay protocol (mcp-studio-spec, Network paths).
@oxagen/rulespackages/rulespackage64—
@oxagen/run-evidencepackages/run-evidencepackage13—
@oxagen/run-ledgerpackages/run-ledgerpackage63The run frame shape and the transcript, context and body reads every run reader shares (ADR-5969).
@oxagen/sandbox-hostapps/sandbox-hostapp22—
@oxagen/sandbox-modalpackages/sandbox-modalpackage21—
@oxagen/sandbox-providerpackages/sandbox-providerpackage21—
@oxagen/scriptstools/scriptstool146—
@oxagen/steering-assemblerpackages/steering-assemblerpackage21—
@oxagen/steering-bundlepackages/steering-bundlepackage71Publishes a merged steering repo as a version (bundle/v1) and renders the steering one model request receives.
@oxagen/steering-checkpackages/steering-checkpackage41The checks a steering pull request runs, as one pure package the server and the CLI share. It does no I/O.
@oxagen/stella-engine-clientpackages/stella-engine-clientpackage10—
@oxagen/storagepackages/storagepackage23—
@oxagen/telemetrypackages/telemetrypackage49—
@oxagen/tenancypackages/tenancypackage10—
@oxagen/uikitpackages/uikitpackage240—
@oxagen/web-v2apps/webapp10Oxagen public website with a React home page and an MDX research library.
@oxagen/workpackages/workpackage42The work collector, source, triage, and work-dod schemas, the Phase 1 work records, the triage that drafts and corrects a suggestion, and the work order metrics fold.

Request path

Identity → tenant scope → capability → row-level security. Nothing reaches a tenant table without the scope GUCs set, except through withSystemDb, which assumes the oxagen_system role, and nothing reaches a handler without passing the kernel's gates.

One org-scoped API request

Every org+workspace route passes auth, org and workspace resolution before a handler runs, and every tenant read happens inside a transaction that has set the RLS GUCs.ClientCLI · SDK · HTTP clientsapps/apiHono middleware chain@oxagen/authresolverskernel.invoke@oxagen/oxagenwithTenantDb@oxagen/databasePostgresAurora / local :54331HTTPS request/v1/:org_slug/:workspace_slug/…2Authorization: Bearer … ?resolveApiKey (ox_ prefix) → orgId pre-bound from the key, and workspaceId too for a workspace key; a refused key is a 401 (403 for sso_required or host_revoked), never a cookie fallback3else session cookieparseSessionCookie → resolveSession (Better Auth)4orgMiddleware · workspaceMiddlewareresolveOrgScope / resolveWorkspaceScope by slug, each skipped when the key pre-bound that id; an organisation key resolves the workspace slug inside its own org5capabilityContext(c) → invoke(name, input, ctx, { surface: 'api' })apps/api/src/lib/context.ts6gates run in ordersee “Gate order inside invoke()” below7IAM, billing, rules and the handler run inside runInTenantScope@oxagen/tenancy AsyncLocalStorage8resolveDataPlane, then BEGIN; select set_config(…, true) ×3app.current_org_id · app.current_workspace_id · app.org_wide = 'off', plus statement, lock and idle-in-transaction timeouts9handler queriestenant_isolation policy filters every FORCE RLS table10responseoutput validated against the contract
Every org+workspace route passes auth, org and workspace resolution before a handler runs, and every tenant read happens inside a transaction that has set the RLS GUCs.
  • A Bearer header wins outright: the session cookie is never consulted, and the key's org scope, and its workspace when it is a workspace key, is copied onto the request. The org slug middleware returns early, and the org slug in the URL is not checked against the key. A workspace key also skips the workspace slug. An organisation key resolves it inside its own org.
  • The browser app and the MCP server do not pass through this chain. apps/app and apps/mcp each bootstrap the kernel and call invoke() in their own process.
  • The three GUCs are set with set_config(name, value, true), which is transaction-local. No policy reads app.rls_bypass any more (ADR-5879), so no setting turns RLS off. app.org_wide is 'off' here and 'on' only in withOrgDb, or in a savepoint of an open tenant transaction through withTransactionOrgWideRead. Either unlocks the SELECT-only tenant_org_wide_read policies.
  • withSystemDb is the deliberate RLS bypass: it runs SET LOCAL ROLE oxagen_system, a NOLOGIN role every RLS table admits through its system_access policy, and always runs on the shared plane. The app role may switch to oxagen_system but does not inherit it, so a tenant transaction never matches that policy. withOrgPlaneSystemDb is the plane-aware variant for system writes to tenant-plane tables. A call made with no active tenant scope increments an in-process counter, written to a debug log line as db.query.unscoped.
Source refs (11, verified at build)
  • apps/api/src/middleware/auth.ts#authMiddleware
  • apps/api/src/middleware/org.ts#orgMiddleware
  • apps/api/src/middleware/workspace.ts#workspaceMiddleware
  • apps/api/src/lib/context.ts#capabilityContext
  • packages/auth/src/resolvers/api-key.ts#resolveApiKey
  • packages/auth/src/resolvers/session.ts#resolveSession
  • packages/tenancy/src/scope.ts#runInTenantScope
  • packages/database/src/tenant.ts#withTenantDb
  • packages/database/src/tenant.ts#withOrgPlaneSystemDb
  • packages/database/src/unscoped-meter.ts#recordIfUnscoped
  • packages/database/atlas/migrations/20260917120000_org_wide_read_mode.sql

Tenant data planes (ADR-042)

Every store switches at the organisation. A request resolves the org's binding per store kind and is routed to the shared pool or a dedicated one. Degraded and disabled bindings, and a dedicated binding with no config, fail closed.ONE BINDING PER (ORG, KIND) · STATUS: ACTIVE | DEGRADED | DISABLEDresolve(orgId,kind)read bindingmode=sharedmode=sharedmode=sharedmode=dedicatedmode=dedicatedmode=dedicatedtenant scopeorgId · workspaceIdresolveDataPlanecached 5 s per (org, kind)org.data_planeskind · mode · status · KMS envelopeshared Postgresprocess singletondedicated Postgrespool per (org, digest), LRU cap 16shared Neo4jpooled db or org-<ns> db (ADR-098)dedicated Neo4jdriver per (org, digest), LRU cap 16shared ClickHousededicated ClickHouseclient per (org, digest), LRU cap 16
Every store switches at the organisation. A request resolves the org's binding per store kind and is routed to the shared pool or a dedicated one. Degraded and disabled bindings, and a dedicated binding with no config, fail closed.
  • The decrypted plane config never leaves the resolver except inside a binding handed to a store client; it is never logged, serialised into an error, or returned by a read capability.
  • The resolver reads org.data_planes through withSystemDb on the shared plane, so withSystemDb itself cannot be plane-aware without a cycle. withOrgPlaneSystemDb resolves the plane first, for system writes to tenant-plane tables.
Source refs (5, verified at build)
  • packages/tenancy/src/data-plane.ts#resolveDataPlane
  • packages/database/src/data-plane-resolver.ts#DATA_PLANE_CACHE_TTL_MS
  • packages/database/src/data-plane-pool.ts#MAX_DEDICATED_POOLS
  • packages/ontology/src/data-plane-driver.ts#MAX_DEDICATED_DRIVERS
  • packages/telemetry/src/data-plane-client.ts#MAX_DEDICATED_CLICKHOUSE_CLIENTS

Auth tiers in apps/api

Middleware registered per sub-router in apps/api/src/app.ts, in the order Hono runs it.

TierMiddleware chain
public* → requestLogger
* → corsMiddleware
* → requestAdmission
user* → authMiddleware
stella telemetry* → authMiddleware
* → requireDeviceSignature
recorder host* → authMiddleware
/bundle → tachoControlLimiter
/commands → tachoControlLimiter
org+workspace/chat/* → chatRateLimiter
/assistant/ask → chatRateLimiter
/assistant/draft → chatRateLimiter
/assistant/rewrite → chatRateLimiter
/conversation/chat → chatRateLimiter
/status/summary → chatRateLimiter
/spend/export → chatRateLimiter
/assistant/attachments/* → assistantAttachmentRateLimiter
/work/attachments/* → workAttachmentRateLimiter
org* → authMiddleware, orgMiddleware, keyOrgScopeMatchesPath
TierRoutesPrefixes
org9/v1/:org_slug/audit · /v1/:org_slug/connections · /v1/:org_slug/join-requests · /v1/:org_slug/onboarding · /v1/:org_slug/workspaces
org+workspace562/v1/:org_slug/:workspace_slug
public33/health · /health/ready · /internal/codegraph/ci-runs · /internal/codegraph/gitlab · /v1/auth/cli · /v1/auth/clirequestId
user20/v1/assets/:publicId · /v1/assetsapiKeyId · /v1/assetsapiKeyScope · /v1/assetsrequestId · /v1/assetssessionAuthMethod · /v1/assetsuserId

API routes

Each route file declares a relative path; the prefix comes from where app.ts mounts it. The capability column is the contract the route hands to invoke(), and a dash marks a route that invokes none.

624
MethodPathTierCapabilityRoute file
POST/v1/:org_slug/audit/events/exportorgexport_audit_eventsv1/audit.events.export.ts
POST/v1/:org_slug/connections/steering/gitlaborg—v1/gitlab-oauth.ts
GET/v1/:org_slug/connections/steeringorgIdorg—v1/gitlab-oauth.ts
GET/v1/:org_slug/connections/steeringrequestIdorg—v1/gitlab-oauth.ts
GET/v1/:org_slug/connections/steeringuserIdorg—v1/gitlab-oauth.ts
POST/v1/:org_slug/join-requestsorgrequest_to_join_workspacev1/workspace.join_request.create.ts
GET/v1/:org_slug/join-requests/mineorgget_my_join_requestv1/workspace.join_request.mine.ts
POST/v1/:org_slug/onboarding/stateorgget_onboarding_statev1/onboarding.state.get.ts
POST/v1/:org_slug/workspacesorgcreate_workspacev1/workspace.create.ts
POST/v1/:org_slug/:workspace_slug/agent/approvals/listorg+workspacelist_approvalsv1/agent.approval.list.ts
POST/v1/:org_slug/:workspace_slug/agent/approvals/resolveorg+workspaceresolve_approvalv1/agent.approval.resolve.ts
POST/v1/:org_slug/:workspace_slug/agent/approvals/resolvedorg+workspacelist_resolved_approvalsv1/agent.approval.list_resolved.ts
POST/v1/:org_slug/:workspace_slug/agent/attention/listorg+workspacelist_attentionv1/agent.attention.list.ts
POST/v1/:org_slug/:workspace_slug/agent/fleet/listorg+workspacelist_fleetv1/agent.fleet.list.ts
POST/v1/:org_slug/:workspace_slug/agent/interjections/answerorg+workspaceanswer_interjectionv1/agent.interjection.answer.ts
POST/v1/:org_slug/:workspace_slug/agent/interjections/draftorg+workspacedraft_interjection_answerv1/agent.interjection.draft.ts
POST/v1/:org_slug/:workspace_slug/agent/interjections/listorg+workspacelist_interjectionsv1/agent.interjection.list.ts
POST/v1/:org_slug/:workspace_slug/agent/interjections/reopenorg+workspacereopen_interjectionv1/agent.interjection.reopen.ts
POST/v1/:org_slug/:workspace_slug/agent/mcp-consentsorg+workspacelist_mcp_consentsv1/agent.mcp_consent.list.ts
POST/v1/:org_slug/:workspace_slug/agent/mcp-consents/resolveorg+workspaceresolve_mcp_consentv1/agent.mcp_consent.resolve.ts
GET/v1/:org_slug/:workspace_slug/agent/mcp-registryorg+workspacesearch_mcp_registryv1/agent.mcp.registry.search.ts
GET/v1/:org_slug/:workspace_slug/agent/mcp-serversorg+workspacelist_mcp_serversv1/agent.mcp.list.ts
POST/v1/:org_slug/:workspace_slug/agent/mcp-serversorg+workspaceregister_mcp_serverv1/agent.mcp.register.ts
POST/v1/:org_slug/:workspace_slug/agent/mcp-servers/deleteorg+workspacedelete_mcp_serverv1/agent.mcp.delete.ts
POST/v1/:org_slug/:workspace_slug/agent/mcp-servers/set-enabledorg+workspaceset_mcp_enabledv1/agent.mcp.set_enabled.ts
GET/v1/:org_slug/:workspace_slug/agent/rolesorg+workspacelist_agent_rolesv1/agent.role.list.ts
POST/v1/:org_slug/:workspace_slug/agent/roles/assignorg+workspaceassign_agent_rolev1/agent.role.assign.ts
GET/v1/:org_slug/:workspace_slug/agent/roles/getorg+workspaceget_agent_rolev1/agent.role.get.ts
POST/v1/:org_slug/:workspace_slug/agent/roles/revokeorg+workspacerevoke_agent_rolev1/agent.role.revoke.ts
POST/v1/:org_slug/:workspace_slug/agent/toolsorg+workspacelist_agent_toolsv1/agent.tool.list.ts
POST/v1/:org_slug/:workspace_slug/agentsorg+workspacelist_agentsv1/agent.list.ts
GET/v1/:org_slug/:workspace_slug/agents/:agentId/run-accountsorg+workspacelist_run_accountsv1/run-accounts.list.ts
POST/v1/:org_slug/:workspace_slug/agents/account-source/setorg+workspaceset_agent_account_sourcev1/agent.account_source.set.ts
POST/v1/:org_slug/:workspace_slug/agents/budget/setorg+workspaceset_agent_budgetv1/agent.budget.set.ts
POST/v1/:org_slug/:workspace_slug/agents/cache-keep-alive/setorg+workspaceset_agent_cache_keep_alivev1/agent.cache_keep_alive.set.ts
POST/v1/:org_slug/:workspace_slug/agents/credential/rotateorg+workspacerotate_agent_credentialv1/agent.credential.rotate.ts
POST/v1/:org_slug/:workspace_slug/agents/display-name/setorg+workspaceset_agent_display_namev1/agent.display_name.set.ts
POST/v1/:org_slug/:workspace_slug/agents/draft/cancelorg+workspacecancel_agent_draftv1/agent.draft.cancel.ts
POST/v1/:org_slug/:workspace_slug/agents/draft/finishorg+workspacefinish_agent_draftv1/agent.draft.finish.ts
POST/v1/:org_slug/:workspace_slug/agents/draft/getorg+workspaceget_agent_draftv1/agent.draft.get.ts
POST/v1/:org_slug/:workspace_slug/agents/draft/saveorg+workspacesave_agent_draftv1/agent.draft.save.ts
POST/v1/:org_slug/:workspace_slug/agents/getorg+workspaceget_agentv1/agent.get.ts
POST/v1/:org_slug/:workspace_slug/agents/moveorg+workspacemove_agentv1/agent.move.ts
POST/v1/:org_slug/:workspace_slug/agents/registerorg+workspaceregister_agentv1/agent.register.ts
POST/v1/:org_slug/:workspace_slug/agents/retireorg+workspaceretire_agentv1/agent.retire.ts
POST/v1/:org_slug/:workspace_slug/agents/suspendorg+workspacesuspend_agentv1/agent.suspend.ts
POST/v1/:org_slug/:workspace_slug/agents/toolbeltorg+workspaceget_agent_toolbeltv1/agent.toolbelt.get.ts
POST/v1/:org_slug/:workspace_slug/agents/toolbelt/assignorg+workspaceassign_agent_toolbeltv1/agent.toolbelt.assign.ts
GET/v1/:org_slug/:workspace_slug/api-keysorg+workspacelist_api_keysv1/api.key.list.ts
POST/v1/:org_slug/:workspace_slug/api-keysorg+workspacecreate_api_keyv1/api.key.create.ts
DELETE/v1/:org_slug/:workspace_slug/api-keys/revokeorg+workspacerevoke_api_keyv1/api.key.revoke.ts
POST/v1/:org_slug/:workspace_slug/api-keys/rotateorg+workspacerotate_api_keyv1/api.key.rotate.ts
POST/v1/:org_slug/:workspace_slug/api-keys/rotate/acknowledgeorg+workspaceacknowledge_api_key_rotationv1/api.key.rotation.acknowledge.ts
POST/v1/:org_slug/:workspace_slug/approval-rules/deleteorg+workspacedelete_approval_rulev1/approval_rule.delete.ts
POST/v1/:org_slug/:workspace_slug/approval-rules/enabled/setorg+workspaceset_approval_rule_enabledv1/approval_rule.enabled.set.ts
POST/v1/:org_slug/:workspace_slug/approval-rules/listorg+workspacelist_approval_rulesv1/approval_rule.list.ts
POST/v1/:org_slug/:workspace_slug/approval-rules/setorg+workspaceset_approval_rulesv1/approval_rule.set.ts
POST/v1/:org_slug/:workspace_slug/approvals/auto-eligibilityorg+workspaceget_auto_eligibilityv1/approval.auto_eligibility.get.ts
POST/v1/:org_slug/:workspace_slug/asset/uploadorg+workspaceupload_assetv1/asset.upload.ts
POST/v1/:org_slug/:workspace_slug/assistant/askorg+workspaceask_assistantv1/assistant.ask.ts
GET/v1/:org_slug/:workspace_slug/assistant/attachments/:publicIdorg+workspace—v1/assistant.attachment.get.ts
GET/v1/:org_slug/:workspace_slug/assistant/attachmentsapiKeyIdorg+workspace—v1/assistant.attachment.get.ts
GET/v1/:org_slug/:workspace_slug/assistant/attachmentsapiKeyScopeorg+workspace—v1/assistant.attachment.get.ts
GET/v1/:org_slug/:workspace_slug/assistant/attachmentsrequestIdorg+workspace—v1/assistant.attachment.get.ts
POST/v1/:org_slug/:workspace_slug/assistant/briefingorg+workspaceget_briefingv1/assistant.briefing.get.ts
POST/v1/:org_slug/:workspace_slug/assistant/cards/resolveorg+workspaceresolve_assistant_cardv1/assistant.card.resolve.ts
POST/v1/:org_slug/:workspace_slug/assistant/draftorg+workspacedraft_recordv1/assistant.record.draft.ts
GET/v1/:org_slug/:workspace_slug/assistant/engineorg+workspaceget_assistant_enginev1/assistant.engine.get.ts
POST/v1/:org_slug/:workspace_slug/assistant/feedbackorg+workspacerecord_reply_feedbackv1/assistant.reply_feedback.record.ts
POST/v1/:org_slug/:workspace_slug/assistant/question/answerorg+workspaceanswer_assistant_questionv1/assistant.question.answer.ts
POST/v1/:org_slug/:workspace_slug/assistant/replyorg+workspaceget_assistant_replyv1/assistant.reply.get.ts
POST/v1/:org_slug/:workspace_slug/assistant/rewriteorg+workspacerewrite_fieldv1/assistant.field.rewrite.ts
POST/v1/:org_slug/:workspace_slug/assistant/turn/cancelorg+workspacecancel_assistant_turnv1/assistant.turn.cancel.ts
POST/v1/:org_slug/:workspace_slug/audit/events/exportorg+workspaceexport_audit_eventsv1/audit.events.export.ts
POST/v1/:org_slug/:workspace_slug/audit/log/queryorg+workspacequery_audit_logv1/audit.log.query.ts
GET/v1/:org_slug/:workspace_slug/billing/actions/estimateorg+workspacepreview_action_costv1/billing.action_estimate.ts
GET/v1/:org_slug/:workspace_slug/billing/actions/rate-cardorg+workspaceget_rate_cardv1/billing.action_rate_card.ts
GET/v1/:org_slug/:workspace_slug/billing/budgetorg+workspaceget_spend_budgetv1/billing.budget.get.ts
PUT/v1/:org_slug/:workspace_slug/billing/budgetorg+workspaceset_spend_budgetv1/billing.budget.set.ts
GET/v1/:org_slug/:workspace_slug/billing/contract-rateorg+workspaceget_contract_ratev1/billing.contract_rate.get.ts
POST/v1/:org_slug/:workspace_slug/billing/credits/purchaseorg+workspacepurchase_creditsv1/billing.credits.purchase.ts
POST/v1/:org_slug/:workspace_slug/billing/credits/refundorg+workspacerefund_creditsv1/billing.credits.refund.ts
GET/v1/:org_slug/:workspace_slug/billing/evidence/retentionorg+workspaceget_evidence_retentionv1/billing.evidence_retention.ts
GET/v1/:org_slug/:workspace_slug/billing/gau-bucketorg+workspaceget_gau_bucketv1/billing.gau_bucket.get.ts
POST/v1/:org_slug/:workspace_slug/billing/gau-bucket/purchaseorg+workspacepurchase_gau_bucketv1/billing.gau_bucket.purchase.ts
POST/v1/:org_slug/:workspace_slug/billing/invoicesorg+workspacelist_invoicesv1/billing.invoice.list.ts
POST/v1/:org_slug/:workspace_slug/billing/portalorg+workspaceopen_billing_portalv1/billing.portal_session.create.ts
POST/v1/:org_slug/:workspace_slug/billing/prepaid-ordersorg+workspacelist_prepaid_ordersv1/billing.prepaid_order.list.ts
POST/v1/:org_slug/:workspace_slug/billing/sandbox-slotsorg+workspaceset_sandbox_slotsv1/billing.sandbox_slots.set.ts
POST/v1/:org_slug/:workspace_slug/billing/statementorg+workspaceget_billing_statementv1/billing.statement.get.ts
POST/v1/:org_slug/:workspace_slug/billing/statement/exportorg+workspaceexport_billing_statementv1/billing.statement.export.ts
GET/v1/:org_slug/:workspace_slug/billing/subscriptionorg+workspaceget_subscriptionv1/billing.subscription.read.ts
GET/v1/:org_slug/:workspace_slug/billing/usage/breakdownorg+workspaceget_usage_breakdownv1/billing.usage.breakdown.ts
GET/v1/:org_slug/:workspace_slug/capability/registry/getorg+workspaceget_capability_registryv1/capability.registry.get.ts
GET/v1/:org_slug/:workspace_slug/capability/registry/listorg+workspacelist_capability_registryv1/capability.registry.list.ts
POST/v1/:org_slug/:workspace_slug/chat/messagesorg+workspacesend_messagev1/chat.message.send.ts
POST/v1/:org_slug/:workspace_slug/chat/streamorg+workspace—v1/chat.stream.ts
GET/v1/:org_slug/:workspace_slug/chat/streamrequestIdorg+workspaceask_assistantv1/chat.stream.ts
POST/v1/:org_slug/:workspace_slug/codegraph/check_changeorg+workspacecheck_changev1/codegraph.check_change.ts
POST/v1/:org_slug/:workspace_slug/codegraph/create_work_itemsorg+workspacecreate_work_itemsv1/codegraph.create_work_items.ts
POST/v1/:org_slug/:workspace_slug/codegraph/find_definitionorg+workspacefind_definitionv1/codegraph.find_definition.ts
POST/v1/:org_slug/:workspace_slug/codegraph/find_referencesorg+workspacefind_referencesv1/codegraph.find_references.ts
POST/v1/:org_slug/:workspace_slug/codegraph/get_api_docsorg+workspaceget_api_docsv1/codegraph.get_api_docs.ts
POST/v1/:org_slug/:workspace_slug/codegraph/get_blast_radiusorg+workspaceget_blast_radiusv1/codegraph.get_blast_radius.ts
POST/v1/:org_slug/:workspace_slug/codegraph/get_domain_brieforg+workspaceget_domain_briefv1/codegraph.get_domain_brief.ts
POST/v1/:org_slug/:workspace_slug/codegraph/get_env_varsorg+workspaceget_env_varsv1/codegraph.get_env_vars.ts
POST/v1/:org_slug/:workspace_slug/codegraph/get_infraorg+workspaceget_infrav1/codegraph.get_infra.ts
POST/v1/:org_slug/:workspace_slug/codegraph/get_repo_maporg+workspaceget_repo_mapv1/codegraph.get_repo_map.ts
POST/v1/:org_slug/:workspace_slug/codegraph/label_linkorg+workspacelabel_linkv1/codegraph.label_link.ts
POST/v1/:org_slug/:workspace_slug/codegraph/list_ci_jobsorg+workspacelist_ci_jobsv1/codegraph.list_ci_jobs.ts
POST/v1/:org_slug/:workspace_slug/codegraph/list_co_changesorg+workspacelist_co_changesv1/codegraph.list_co_changes.ts
POST/v1/:org_slug/:workspace_slug/codegraph/list_link_labelsorg+workspacelist_link_labelsv1/codegraph.list_link_labels.ts
POST/v1/:org_slug/:workspace_slug/codegraph/list_link_reviewsorg+workspacelist_link_reviewsv1/codegraph.list_link_reviews.ts
POST/v1/:org_slug/:workspace_slug/codegraph/list_neighborsorg+workspacelist_neighborsv1/codegraph.list_neighbors.ts
POST/v1/:org_slug/:workspace_slug/codegraph/list_scriptsorg+workspacelist_scriptsv1/codegraph.list_scripts.ts
POST/v1/:org_slug/:workspace_slug/codegraph/list_symbol_docsorg+workspacelist_symbol_docsv1/codegraph.list_symbol_docs.ts
POST/v1/:org_slug/:workspace_slug/codegraph/list_unit_testsorg+workspacelist_unit_testsv1/codegraph.list_unit_tests.ts
POST/v1/:org_slug/:workspace_slug/codegraph/localize_faultorg+workspacelocalize_faultv1/codegraph.localize_fault.ts
POST/v1/:org_slug/:workspace_slug/codegraph/propose_edgeorg+workspacepropose_edgev1/codegraph.propose_edge.ts
POST/v1/:org_slug/:workspace_slug/codegraph/rank_symbolsorg+workspacerank_symbolsv1/codegraph.rank_symbols.ts
POST/v1/:org_slug/:workspace_slug/codegraph/review_domainorg+workspacereview_domainv1/codegraph.review_domain.ts
POST/v1/:org_slug/:workspace_slug/codegraph/review_linkorg+workspacereview_linkv1/codegraph.review_link.ts
POST/v1/:org_slug/:workspace_slug/codegraph/search_code_graphorg+workspacesearch_code_graphv1/codegraph.search_code_graph.ts
POST/v1/:org_slug/:workspace_slug/codegraph/trace_specorg+workspacetrace_specv1/codegraph.trace_spec.ts
POST/v1/:org_slug/:workspace_slug/command/menu/searchorg+workspacesearch_command_menuv1/command.menu.search.ts
POST/v1/:org_slug/:workspace_slug/command/menu/suggestorg+workspacesuggest_commandsv1/command.menu.suggest.ts
POST/v1/:org_slug/:workspace_slug/commandsorg+workspacedispatch_commandv1/tacho.command.dispatch.ts
POST/v1/:org_slug/:workspace_slug/commands/listorg+workspacelist_commandsv1/tacho.command.list.ts
POST/v1/:org_slug/:workspace_slug/commands/pause-workspaceorg+workspacepause_workspace_runsv1/tacho.workspace_runs.pause.ts
POST/v1/:org_slug/:workspace_slug/commits/difforg+workspaceget_commit_diffv1/forge.commit.diff.get.ts
POST/v1/:org_slug/:workspace_slug/configurations/cloneorg+workspaceget_clone_draftv1/configuration.clone.get.ts
GET/v1/:org_slug/:workspace_slug/connectionsorg+workspacelist_connectionsv1/connection.ts
POST/v1/:org_slug/:workspace_slug/connectionsorg+workspacecreate_connectionv1/connection.ts
DELETE/v1/:org_slug/:workspace_slug/connections/:idorg+workspacedelete_connectionv1/connection.ts
GET/v1/:org_slug/:workspace_slug/connections/:idorg+workspaceget_connectionv1/connection.ts
PATCH/v1/:org_slug/:workspace_slug/connections/:idorg+workspaceupdate_connectionv1/connection.ts
GET/v1/:org_slug/:workspace_slug/connections/:id/mappingsorg+workspaceget_connection_mappingsv1/connection.ts
PUT/v1/:org_slug/:workspace_slug/connections/:id/mappingsorg+workspaceset_connection_mappingsv1/connection.ts
POST/v1/:org_slug/:workspace_slug/connections/:id/pauseorg+workspacepause_connectionv1/connection.ts
GET/v1/:org_slug/:workspace_slug/connections/:id/previeworg+workspacepreview_connectionv1/connection.ts
POST/v1/:org_slug/:workspace_slug/connections/:id/resyncorg+workspacesync_integrationv1/connection.ts
POST/v1/:org_slug/:workspace_slug/connections/:id/suggest-mappingsorg+workspacesuggest_connection_mappingsv1/connection.ts
POST/v1/:org_slug/:workspace_slug/connections/trackers/authorization/completeorg+workspaceauthorize_connectionv1/connection.authorization.ts
POST/v1/:org_slug/:workspace_slug/connections/trackers/authorization/startorg+workspacestart_connection_authorizationv1/connection.authorization.ts
POST/v1/:org_slug/:workspace_slug/connections/trackers/tokenorg+workspaceadd_token_connectionv1/connection.authorization.ts
POST/v1/:org_slug/:workspace_slug/context/governance-modeorg+workspaceset_governance_modev1/context.governance_mode.set.ts
POST/v1/:org_slug/:workspace_slug/context/steering/deliveriesorg+workspaceget_steering_deliveriesv1/context.steering.deliveries.ts
GET/v1/:org_slug/:workspace_slug/context/steering/indexorg+workspaceget_steering_indexv1/context.steering.index.get.ts
POST/v1/:org_slug/:workspace_slug/context/steering/layoutorg+workspaceget_steering_layoutv1/context.steering.layout.ts
POST/v1/:org_slug/:workspace_slug/context/steering/memories/getorg+workspaceget_workspace_memoryv1/steering.memories.get.ts
POST/v1/:org_slug/:workspace_slug/context/steering/memories/listorg+workspacelist_workspace_memoriesv1/steering.memories.list.ts
GET/v1/:org_slug/:workspace_slug/context/steering/repoorg+workspaceget_steering_repov1/steering_repo.get.ts
POST/v1/:org_slug/:workspace_slug/context/steering/repo/importorg+workspaceimport_workspace_steeringv1/steering_repo.import.ts
POST/v1/:org_slug/:workspace_slug/context/steering/repo/repairorg+workspacerepair_steering_repov1/steering_repo.repair.ts
POST/v1/:org_slug/:workspace_slug/context/steering/sync-stateorg+workspaceget_steering_sync_statev1/context.steering.sync_state.ts
POST/v1/:org_slug/:workspace_slug/conversation/chatorg+workspacepost_conversation_messagev1/conversation.chat.ts
GET/v1/:org_slug/:workspace_slug/conversationsorg+workspacelist_conversationsv1/conversation.list.ts
GET/v1/:org_slug/:workspace_slug/conversations/:conversationIdorg+workspaceget_conversationv1/conversation.get.ts
GET/v1/:org_slug/:workspace_slug/conversations/:conversationId/exportorg+workspaceexport_conversationv1/conversation.export.ts
GET/v1/:org_slug/:workspace_slug/conversations/:conversationId/filesorg+workspacelist_conversation_filesv1/conversation.files.list.ts
POST/v1/:org_slug/:workspace_slug/conversations/archiveorg+workspacearchive_conversationv1/conversation.archive.ts
POST/v1/:org_slug/:workspace_slug/conversations/attachmentsorg+workspaceadd_conversation_attachmentv1/conversation.attachment.add.ts
POST/v1/:org_slug/:workspace_slug/conversations/clearorg+workspaceclear_conversationv1/conversation.clear.ts
POST/v1/:org_slug/:workspace_slug/conversations/deleteorg+workspacedelete_conversationv1/conversation.delete.ts
POST/v1/:org_slug/:workspace_slug/conversations/forkorg+workspacefork_conversationv1/conversation.fork.ts
POST/v1/:org_slug/:workspace_slug/conversations/purgeorg+workspacepurge_conversationsv1/conversation.purge.ts
PATCH/v1/:org_slug/:workspace_slug/conversations/renameorg+workspacerename_conversationv1/conversation.rename.ts
POST/v1/:org_slug/:workspace_slug/cost/price-entriesorg+workspacelist_price_entriesv1/cost.price_entry.list.ts
POST/v1/:org_slug/:workspace_slug/cost/price-entries/removeorg+workspaceremove_price_entryv1/cost.price_entry.remove.ts
POST/v1/:org_slug/:workspace_slug/cost/price-entries/setorg+workspaceset_price_entryv1/cost.price_entry.set.ts
POST/v1/:org_slug/:workspace_slug/cost/unpriced-modelsorg+workspacelist_unpriced_modelsv1/cost.unpriced_model.list.ts
POST/v1/:org_slug/:workspace_slug/credential-grantsorg+workspacelist_credential_grantsv1/credential.grant.list.ts
POST/v1/:org_slug/:workspace_slug/enrollment-requestsorg+workspaceget_enrollment_requestv1/enrollment.request.get.ts
POST/v1/:org_slug/:workspace_slug/environment/createorg+workspacecreate_environmentv1/environment.create.ts
POST/v1/:org_slug/:workspace_slug/environment/deleteorg+workspacedelete_environmentv1/environment.delete.ts
POST/v1/:org_slug/:workspace_slug/environment/getorg+workspaceget_environmentv1/environment.get.ts
POST/v1/:org_slug/:workspace_slug/environment/listorg+workspacelist_environmentsv1/environment.list.ts
POST/v1/:org_slug/:workspace_slug/environment/set-defaultorg+workspaceset_default_environmentv1/environment.set_default.ts
POST/v1/:org_slug/:workspace_slug/environment/updateorg+workspaceupdate_environmentv1/environment.update.ts
POST/v1/:org_slug/:workspace_slug/forge/change-effortorg+workspaceget_change_effortv1/forge.change_effort.get.ts
POST/v1/:org_slug/:workspace_slug/forge/ci-runsorg+workspacelist_ci_runsv1/forge.ci_runs.list.ts
POST/v1/:org_slug/:workspace_slug/forge/defect-originorg+workspaceset_defect_originv1/forge.defect_origin.set.ts
POST/v1/:org_slug/:workspace_slug/forge/defectsorg+workspacelist_defectsv1/forge.defects.list.ts
POST/v1/:org_slug/:workspace_slug/forge/pull-requestsorg+workspacelist_forge_pull_requestsv1/forge.pull_requests.list.ts
POST/v1/:org_slug/:workspace_slug/forge/review-findingsorg+workspacelist_review_findingsv1/forge.review_findings.list.ts
GET/v1/:org_slug/:workspace_slug/graph/node/get/:nodeIdorg+workspaceget_nodev1/graph.node.get.ts
POST/v1/:org_slug/:workspace_slug/graph/node/searchorg+workspacesearch_nodesv1/graph.node.search.ts
GET/v1/:org_slug/:workspace_slug/graph/nodesorg+workspacelist_nodesv1/graph.node.list.ts
POST/v1/:org_slug/:workspace_slug/graph/rule/authororg+workspaceauthor_graph_rulev1/graph.rule.author.ts
POST/v1/:org_slug/:workspace_slug/graph/searchorg+workspacesearch_graphv1/graph.search.ts
GET/v1/:org_slug/:workspace_slug/graph/statsorg+workspaceget_graph_statsv1/graph.stats.ts
POST/v1/:org_slug/:workspace_slug/iam/rolesorg+workspacecreate_rolev1/iam.role.create.ts
POST/v1/:org_slug/:workspace_slug/iam/roles/assignorg+workspaceassign_member_rolev1/iam.role.member.assign.ts
POST/v1/:org_slug/:workspace_slug/iam/roles/deleteorg+workspacedelete_rolev1/iam.role.delete.ts
POST/v1/:org_slug/:workspace_slug/iam/roles/grantsorg+workspaceset_role_grantsv1/iam.role.grants.set.ts
GET/v1/:org_slug/:workspace_slug/iam/roles/listorg+workspacelist_iam_rolesv1/iam.role.list.ts
POST/v1/:org_slug/:workspace_slug/iam/roles/unassignorg+workspaceunassign_member_rolev1/iam.role.member.unassign.ts
GET/v1/:org_slug/:workspace_slug/integrationsorg+workspacelist_integrationsv1/integration.ts
POST/v1/:org_slug/:workspace_slug/integrationsorg+workspaceinstall_integrationv1/integration.ts
DELETE/v1/:org_slug/:workspace_slug/integrations/:idorg+workspacedelete_integrationv1/integration.ts
GET/v1/:org_slug/:workspace_slug/integrations/:idorg+workspaceget_integrationv1/integration.ts
PATCH/v1/:org_slug/:workspace_slug/integrations/:id/configureorg+workspaceconfigure_integrationv1/integration.ts
GET/v1/:org_slug/:workspace_slug/integrations/:id/metricsorg+workspaceget_integration_metricsv1/integration.ts
POST/v1/:org_slug/:workspace_slug/integrations/:id/syncorg+workspacesync_integrationv1/integration.ts
PUT/v1/:org_slug/:workspace_slug/kill-switchesorg+workspaceset_kill_switchv1/kill_switch.set.ts
POST/v1/:org_slug/:workspace_slug/kill-switches/listorg+workspacelist_kill_switchesv1/kill_switch.list.ts
POST/v1/:org_slug/:workspace_slug/kinds/archiveorg+workspacearchive_kindv1/kind.archive.ts
POST/v1/:org_slug/:workspace_slug/kinds/deleteorg+workspacedelete_kindv1/kind.delete.ts
POST/v1/:org_slug/:workspace_slug/kinds/draftorg+workspacedraft_kindv1/kind.draft.ts
POST/v1/:org_slug/:workspace_slug/kinds/listorg+workspacelist_kindsv1/kinds.list.ts
POST/v1/:org_slug/:workspace_slug/kinds/restoreorg+workspacerestore_kindv1/kind.restore.ts
POST/v1/:org_slug/:workspace_slug/kinds/saveorg+workspacesave_kindv1/kind.save.ts
POST/v1/:org_slug/:workspace_slug/machines/registerorg+workspaceregister_machinev1/machine.register.ts
POST/v1/:org_slug/:workspace_slug/mandates/getorg+workspaceget_mandatev1/mandate.get.ts
POST/v1/:org_slug/:workspace_slug/mandates/grantorg+workspacegrant_mandatev1/mandate.grant.ts
POST/v1/:org_slug/:workspace_slug/mandates/limits/updateorg+workspaceupdate_mandate_limitsv1/mandate.limits.update.ts
POST/v1/:org_slug/:workspace_slug/mandates/listorg+workspacelist_mandatesv1/mandate.list.ts
POST/v1/:org_slug/:workspace_slug/mandates/requestorg+workspacerequest_mandatev1/mandate.request.ts
POST/v1/:org_slug/:workspace_slug/mandates/revokeorg+workspacerevoke_mandatev1/mandate.revoke.ts
POST/v1/:org_slug/:workspace_slug/modal-accountorg+workspaceget_modal_accountv1/modal-account.get.ts
POST/v1/:org_slug/:workspace_slug/modal-account/connectorg+workspaceconnect_modal_accountv1/modal-account.connect.ts
POST/v1/:org_slug/:workspace_slug/modal-account/disconnectorg+workspacedisconnect_modal_accountv1/modal-account.disconnect.ts
POST/v1/:org_slug/:workspace_slug/model-tiersorg+workspacelist_model_tiersv1/model_tier.list.ts
POST/v1/:org_slug/:workspace_slug/model-tiers/archiveorg+workspacearchive_model_tierv1/model_tier.archive.ts
POST/v1/:org_slug/:workspace_slug/model-tiers/createorg+workspacecreate_model_tierv1/model_tier.create.ts
POST/v1/:org_slug/:workspace_slug/model-tiers/models/setorg+workspaceset_model_tier_modelv1/model_tier.model.set.ts
POST/v1/:org_slug/:workspace_slug/model-tiers/updateorg+workspaceupdate_model_tierv1/model_tier.update.ts
GET/v1/:org_slug/:workspace_slug/model/capabilitiesorg+workspacelist_model_capabilitiesv1/model.capability.list.ts
GET/v1/:org_slug/:workspace_slug/notificationsorg+workspacelist_notificationsv1/notification.list.ts
POST/v1/:org_slug/:workspace_slug/notifications/markorg+workspacemark_notificationv1/notification.mark.ts
POST/v1/:org_slug/:workspace_slug/notifications/mark-allorg+workspacemark_notifications_readv1/notification.mark_all.ts
POST/v1/:org_slug/:workspace_slug/onboarding/advanceorg+workspaceadvance_onboardingv1/onboarding.advance.ts
POST/v1/:org_slug/:workspace_slug/onboarding/first-frameorg+workspaceget_first_framev1/onboarding.first_frame.get.ts
POST/v1/:org_slug/:workspace_slug/ontology/neighborsorg+workspaceget_ontology_neighborsv1/ontology.neighbors.ts
POST/v1/:org_slug/:workspace_slug/ontology/queryorg+workspacequery_ontologyv1/ontology.query.ts
POST/v1/:org_slug/:workspace_slug/operator/statusorg+workspaceget_operator_statusv1/operator.status.get.ts
GET/v1/:org_slug/:workspace_slug/org/data-planeorg+workspaceget_data_planev1/org.data_plane.ts
PUT/v1/:org_slug/:workspace_slug/org/data-planeorg+workspaceset_data_planev1/org.data_plane.ts
POST/v1/:org_slug/:workspace_slug/org/invitations/acceptorg+workspaceaccept_member_invitev1/org.member_invite.accept.ts
POST/v1/:org_slug/:workspace_slug/org/invitations/declineorg+workspacedecline_member_invitev1/org.member_invite.decline.ts
POST/v1/:org_slug/:workspace_slug/org/invitations/resendorg+workspaceresend_member_invitev1/org.member_invite.resend.ts
POST/v1/:org_slug/:workspace_slug/org/invitations/revokeorg+workspacerevoke_member_invitev1/org.member_invite.revoke.ts
POST/v1/:org_slug/:workspace_slug/org/membersorg+workspaceadd_org_memberv1/org.member.add.ts
DELETE/v1/:org_slug/:workspace_slug/org/members/removeorg+workspaceremove_org_memberv1/org.member.remove.ts
PATCH/v1/:org_slug/:workspace_slug/org/members/roleorg+workspacechange_member_rolev1/org.member_role.change.ts
DELETE/v1/:org_slug/:workspace_slug/org/model-credentialorg+workspacedelete_model_credentialv1/org.model_credential.ts
GET/v1/:org_slug/:workspace_slug/org/model-credentialorg+workspaceget_model_credentialv1/org.model_credential.ts
PUT/v1/:org_slug/:workspace_slug/org/model-credentialorg+workspaceset_model_credentialv1/org.model_credential.ts
POST/v1/:org_slug/:workspace_slug/org/model-credential/verifyorg+workspaceverify_model_credentialv1/org.model_credential.ts
GET/v1/:org_slug/:workspace_slug/org/settingsorg+workspaceget_org_settingsv1/org.settings.read.ts
PATCH/v1/:org_slug/:workspace_slug/org/settingsorg+workspaceupdate_org_settingsv1/org.settings.write.ts
GET/v1/:org_slug/:workspace_slug/org/ssoorg+workspacelist_sso_providersv1/org.sso.ts
PUT/v1/:org_slug/:workspace_slug/org/sso/policyorg+workspaceset_sso_policyv1/org.sso.ts
POST/v1/:org_slug/:workspace_slug/org/sso/providersorg+workspacecreate_sso_providerv1/org.sso.ts
DELETE/v1/:org_slug/:workspace_slug/org/sso/providers/:providerIdorg+workspacedelete_sso_providerv1/org.sso.ts
PATCH/v1/:org_slug/:workspace_slug/org/sso/providers/:providerIdorg+workspaceupdate_sso_providerv1/org.sso.ts
PUT/v1/:org_slug/:workspace_slug/org/sso/providers/:providerId/group-rolesorg+workspaceset_sso_group_rolesv1/org.sso.ts
POST/v1/:org_slug/:workspace_slug/org/sso/providers/:providerId/verify-domainorg+workspaceverify_sso_domainv1/org.sso.ts
DELETE/v1/:org_slug/:workspace_slug/org/sso/scim-tokenorg+workspacerevoke_scim_tokenv1/org.sso.ts
POST/v1/:org_slug/:workspace_slug/org/sso/scim-tokenorg+workspacecreate_scim_tokenv1/org.sso.ts
POST/v1/:org_slug/:workspace_slug/org/sso/scim-token/rotateorg+workspacerotate_scim_tokenv1/org.sso.ts
GET/v1/:org_slug/:workspace_slug/org/teamsorg+workspacelist_teamsv1/org.team.list.ts
POST/v1/:org_slug/:workspace_slug/org/teamsorg+workspacecreate_teamv1/org.team.create.ts
POST/v1/:org_slug/:workspace_slug/org/teams/deleteorg+workspacedelete_teamv1/org.team.delete.ts
POST/v1/:org_slug/:workspace_slug/org/teams/membersorg+workspaceset_team_membersv1/org.team.members.set.ts
POST/v1/:org_slug/:workspace_slug/plugin/catalog/browseorg+workspacebrowse_plugin_catalogv1/plugin.catalog.browse.ts
POST/v1/:org_slug/:workspace_slug/plugin/catalog/getorg+workspaceget_catalog_pluginv1/plugin.catalog.get.ts
POST/v1/:org_slug/:workspace_slug/plugin/catalog/syncorg+workspacesync_plugin_catalogv1/plugin.catalog.sync.ts
POST/v1/:org_slug/:workspace_slug/plugin/credential/reauthorg+workspacereauth_plugin_credentialv1/plugin.credential.reauth.ts
POST/v1/:org_slug/:workspace_slug/plugin/credential/revokeorg+workspacerevoke_plugin_credentialv1/plugin.credential.revoke.ts
POST/v1/:org_slug/:workspace_slug/plugin/org/installorg+workspaceinstall_pluginv1/plugin.org.install.ts
POST/v1/:org_slug/:workspace_slug/plugin/org/install-bulkorg+workspaceinstall_plugins_bulkv1/plugin.org.install_bulk.ts
POST/v1/:org_slug/:workspace_slug/plugin/org/listorg+workspacelist_pluginsv1/plugin.org.list.ts
POST/v1/:org_slug/:workspace_slug/plugin/org/uninstallorg+workspaceuninstall_pluginv1/plugin.org.uninstall.ts
POST/v1/:org_slug/:workspace_slug/plugin/registriesorg+workspacelist_plugin_registriesv1/plugin.registry.list.ts
POST/v1/:org_slug/:workspace_slug/plugin/registries/addorg+workspaceadd_plugin_registryv1/plugin.registry.add.ts
POST/v1/:org_slug/:workspace_slug/plugin/registries/removeorg+workspaceremove_plugin_registryv1/plugin.registry.remove.ts
POST/v1/:org_slug/:workspace_slug/plugin/set-enabledorg+workspaceset_plugin_enabledv1/plugin.set_enabled.ts
POST/v1/:org_slug/:workspace_slug/privacy/eraseorg+workspaceerase_datav1/privacy.data.erase.ts
POST/v1/:org_slug/:workspace_slug/privacy/exportorg+workspaceexport_datav1/privacy.data.export.ts
GET/v1/:org_slug/:workspace_slug/privacy/export/:exportIdorg+workspaceget_export_statusv1/privacy.data.export.ts
GET/v1/:org_slug/:workspace_slug/privacy/export/:exportId/downloadorg+workspaceget_export_statusv1/privacy.data.export.ts
POST/v1/:org_slug/:workspace_slug/pull-requests/changesorg+workspaceget_change_setv1/forge.changes.get.ts
POST/v1/:org_slug/:workspace_slug/pull-requests/revisions/difforg+workspaceget_revision_diffv1/forge.revision.diff.get.ts
POST/v1/:org_slug/:workspace_slug/reference/searchorg+workspacesearch_referencesv1/reference.search.ts
PATCH/v1/:org_slug/:workspace_slug/repos/:id/configureorg+workspaceconfigure_repov1/repo.ts
GET/v1/:org_slug/:workspace_slug/repos/:id/metricsorg+workspaceget_repo_metricsv1/repo.ts
POST/v1/:org_slug/:workspace_slug/repos/:id/pauseorg+workspacepause_repov1/repo.ts
POST/v1/:org_slug/:workspace_slug/repos/:id/resumeorg+workspaceresume_repov1/repo.ts
POST/v1/:org_slug/:workspace_slug/repos/:id/syncorg+workspacesync_repov1/repo.ts
GET/v1/:org_slug/:workspace_slug/repos/branchesorg+workspacelist_branchesv1/repo.ts
GET/v1/:org_slug/:workspace_slug/repos/ci/statusorg+workspaceget_ci_statusv1/repo.ts
GET/v1/:org_slug/:workspace_slug/repos/pulls/:numberorg+workspaceget_prv1/repo.ts
GET/v1/:org_slug/:workspace_slug/repos/pulls/:number/difforg+workspaceget_pr_diffv1/repo.ts
GET/v1/:org_slug/:workspace_slug/repositoriesorg+workspacelist_repositoriesv1/repository.list.ts
PUT/v1/:org_slug/:workspace_slug/repositories/setorg+workspaceset_workspace_repositoriesv1/workspace.repositories.set.ts
POST/v1/:org_slug/:workspace_slug/repository/config/importorg+workspaceimport_repository_configv1/repository.config.import.ts
POST/v1/:org_slug/:workspace_slug/repository/config/parseorg+workspaceparse_repository_configv1/repository.config.parse.ts
POST/v1/:org_slug/:workspace_slug/repository/config/scanorg+workspacescan_repository_configv1/repository.config.scan.ts
GET/v1/:org_slug/:workspace_slug/repository/findingsorg+workspacelist_code_repository_findingsv1/repository.findings.list.ts
POST/v1/:org_slug/:workspace_slug/repository/findings/promoteorg+workspacepromote_instruction_to_steeringv1/repository.instruction.promote.ts
POST/v1/:org_slug/:workspace_slug/repository/gitlab/attachorg+workspaceattach_gitlab_projectv1/repository.gitlab.attach.ts
POST/v1/:org_slug/:workspace_slug/repository/init-prorg+workspaceopen_init_prv1/repository.init_pr.open.ts
POST/v1/:org_slug/:workspace_slug/repository/linkorg+workspacelink_repositoryv1/repository.link.ts
GET/v1/:org_slug/:workspace_slug/repository/mainorg+workspaceget_main_repositoryv1/repository.main.get.ts
POST/v1/:org_slug/:workspace_slug/repository/treeorg+workspaceget_repository_treev1/repository.tree.get.ts
POST/v1/:org_slug/:workspace_slug/repository/unlinkorg+workspaceunlink_repositoryv1/repository.unlink.ts
GET/v1/:org_slug/:workspace_slug/router/policyorg+workspaceget_routing_policyv1/router.policy.get.ts
POST/v1/:org_slug/:workspace_slug/router/policy/setorg+workspaceset_routing_policyv1/router.policy.set.ts
POST/v1/:org_slug/:workspace_slug/router/previeworg+workspacepreview_routing_decisionv1/router.decision.preview.ts
POST/v1/:org_slug/:workspace_slug/run-outcomes/settings/authorization/beginorg+workspacestart_issue_authorizationv1/run.outcomes.settings.ts
POST/v1/:org_slug/:workspace_slug/run-outcomes/settings/authorization/completeorg+workspaceauthorize_issue_providerv1/run.outcomes.settings.ts
GET/v1/:org_slug/:workspace_slug/run-outcomes/settings/providersorg+workspaceget_run_issue_providersv1/run.outcomes.settings.ts
POST/v1/:org_slug/:workspace_slug/runsorg+workspacelist_runsv1/run.list.ts
GET/v1/:org_slug/:workspace_slug/runs/:run_id/streamorg+workspaceget_runv1/run.stream.ts
POST/v1/:org_slug/:workspace_slug/runs/chainorg+workspaceget_run_chainv1/run.chain.get.ts
POST/v1/:org_slug/:workspace_slug/runs/checkpoints/postorg+workspacepost_run_checkpointv1/run.checkpoint.post.ts
POST/v1/:org_slug/:workspace_slug/runs/classificationorg+workspaceset_run_classificationv1/run.classification.set.ts
POST/v1/:org_slug/:workspace_slug/runs/commitsorg+workspacelist_run_commitsv1/forge.run.commits.list.ts
POST/v1/:org_slug/:workspace_slug/runs/contextorg+workspaceget_run_contextv1/run.context.get.ts
POST/v1/:org_slug/:workspace_slug/runs/costorg+workspaceget_run_costv1/run.cost.ts
POST/v1/:org_slug/:workspace_slug/runs/editorg+workspaceedit_runv1/run.edit.ts
POST/v1/:org_slug/:workspace_slug/runs/exportorg+workspaceexport_runv1/run.export.ts
POST/v1/:org_slug/:workspace_slug/runs/export-statusorg+workspaceget_run_exportv1/run.export.get.ts
POST/v1/:org_slug/:workspace_slug/runs/frame-bodyorg+workspaceget_run_frame_bodyv1/run.frame_body.get.ts
POST/v1/:org_slug/:workspace_slug/runs/getorg+workspaceget_runv1/run.get.ts
POST/v1/:org_slug/:workspace_slug/runs/issuesorg+workspaceget_run_issuesv1/run.issues.get.ts
POST/v1/:org_slug/:workspace_slug/runs/outputsorg+workspaceget_run_outputsv1/run.outputs.get.ts
POST/v1/:org_slug/:workspace_slug/runs/recentorg+workspacelist_recent_runsv1/run.recent.list.ts
POST/v1/:org_slug/:workspace_slug/runs/reportorg+workspaceget_run_reportv1/run.report.get.ts
POST/v1/:org_slug/:workspace_slug/runs/sealorg+workspaceseal_runv1/run.seal.ts
POST/v1/:org_slug/:workspace_slug/runs/sensitive-detectionsorg+workspacelist_sensitive_detectionsv1/run.sensitive_detections.ts
POST/v1/:org_slug/:workspace_slug/runs/summarizeorg+workspacesummarize_runv1/run.summarize.ts
POST/v1/:org_slug/:workspace_slug/runs/tasksorg+workspaceget_run_tasksv1/run.tasks.get.ts
POST/v1/:org_slug/:workspace_slug/runs/transcriptorg+workspaceget_run_transcriptv1/run.transcript.get.ts
POST/v1/:org_slug/:workspace_slug/runs/turnsorg+workspaceget_run_turnsv1/run.turns.get.ts
POST/v1/:org_slug/:workspace_slug/runs/workorg+workspaceget_run_workv1/run.work.get.ts
POST/v1/:org_slug/:workspace_slug/runtimesorg+workspacelist_runtimesv1/runtime.list.ts
POST/v1/:org_slug/:workspace_slug/runtimes/createorg+workspacecreate_runtimev1/runtime.create.ts
POST/v1/:org_slug/:workspace_slug/runtimes/deleteorg+workspacedelete_runtimev1/runtime.delete.ts
POST/v1/:org_slug/:workspace_slug/runtimes/updateorg+workspaceupdate_runtimev1/runtime.update.ts
POST/v1/:org_slug/:workspace_slug/sandbox-runs/getorg+workspaceget_sandbox_runv1/sandbox-run.get.ts
POST/v1/:org_slug/:workspace_slug/sandbox-runs/launchorg+workspacelaunch_sandbox_runv1/sandbox-run.launch.ts
POST/v1/:org_slug/:workspace_slug/sandbox-runs/listorg+workspacelist_sandbox_runsv1/sandbox-run.list.ts
POST/v1/:org_slug/:workspace_slug/sandbox-runs/revieworg+workspacestart_sandbox_reviewv1/sandbox-run.review.ts
POST/v1/:org_slug/:workspace_slug/sandbox-runs/stoporg+workspacestop_sandbox_runv1/sandbox-run.stop.ts
POST/v1/:org_slug/:workspace_slug/sandbox-runs/terminal/openorg+workspaceopen_run_terminalv1/sandbox-run.terminal.open.ts
POST/v1/:org_slug/:workspace_slug/sandbox-runtimesorg+workspacelist_sandbox_runtimesv1/sandbox-runtime.list.ts
POST/v1/:org_slug/:workspace_slug/sandbox-runtimes/createorg+workspacecreate_sandbox_runtimev1/sandbox-runtime.create.ts
POST/v1/:org_slug/:workspace_slug/sandbox-runtimes/setuporg+workspacesetup_sandbox_runtimev1/sandbox-runtime.setup.ts
POST/v1/:org_slug/:workspace_slug/sandbox-runtimes/updateorg+workspaceupdate_sandbox_runtimev1/sandbox-runtime.update.ts
POST/v1/:org_slug/:workspace_slug/sandbox-templates/generateorg+workspacegenerate_sandbox_templatev1/sandbox-template.generate.ts
POST/v1/:org_slug/:workspace_slug/sandbox-templates/testorg+workspacecheck_sandbox_templatev1/sandbox-template.test-build.ts
GET/v1/:org_slug/:workspace_slug/schemaorg+workspacelist_schemasv1/schema.ts
DELETE/v1/:org_slug/:workspace_slug/schema/:schemaName/labels/:labelNameorg+workspacedelete_schema_labelv1/schema.ts
PUT/v1/:org_slug/:workspace_slug/schema/:schemaName/labels/:labelNameorg+workspaceupsert_schema_labelv1/schema.ts
DELETE/v1/:org_slug/:workspace_slug/schema/:schemaName/properties/:ownerKind/:ownerName/:keyorg+workspacedelete_schema_propertyv1/schema.ts
PUT/v1/:org_slug/:workspace_slug/schema/:schemaName/properties/:ownerKind/:ownerName/:keyorg+workspaceupsert_schema_propertyv1/schema.ts
DELETE/v1/:org_slug/:workspace_slug/schema/:schemaName/relationships/:relationshipNameorg+workspacedelete_schema_relationshipv1/schema.ts
PUT/v1/:org_slug/:workspace_slug/schema/:schemaName/relationships/:relationshipNameorg+workspaceupsert_schema_relationshipv1/schema.ts
POST/v1/:org_slug/:workspace_slug/schema/:schemaName/toggleorg+workspacetoggle_schemav1/schema.ts
POST/v1/:org_slug/:workspace_slug/schema/chatorg+workspacerun_schema_chatv1/schema.ts
GET/v1/:org_slug/:workspace_slug/schema/exportorg+workspaceexport_schemav1/schema.ts
GET/v1/:org_slug/:workspace_slug/schema/recommendorg+workspacerecommend_schemav1/schema.ts
POST/v1/:org_slug/:workspace_slug/schema/reconcile/dispatchorg+workspacedispatch_schema_reconcilev1/schema.ts
GET/v1/:org_slug/:workspace_slug/schema/reconcile/statusorg+workspaceget_reconcile_statusv1/schema.ts
GET/v1/:org_slug/:workspace_slug/schema/registryorg+workspaceget_schema_registryv1/schema.ts
PUT/v1/:org_slug/:workspace_slug/schema/registry/configorg+workspaceget_registry_configv1/schema.ts
POST/v1/:org_slug/:workspace_slug/schema/setuporg+workspacesetup_schemav1/schema.ts
POST/v1/:org_slug/:workspace_slug/schema/validate/nodeorg+workspacevalidate_schema_nodev1/schema.ts
POST/v1/:org_slug/:workspace_slug/schema/validate/relationshiporg+workspacevalidate_schema_relationshipv1/schema.ts
GET/v1/:org_slug/:workspace_slug/schema/versionsorg+workspacelist_schema_versionsv1/schema.ts
POST/v1/:org_slug/:workspace_slug/schema/versionsorg+workspacecreate_schema_versionv1/schema.ts
POST/v1/:org_slug/:workspace_slug/schema/versions/:versionId/pinorg+workspacepin_schema_versionv1/schema.ts
GET/v1/:org_slug/:workspace_slug/schema/versions/difforg+workspacediff_schema_versionsv1/schema.ts
POST/v1/:org_slug/:workspace_slug/secret/exportorg+workspaceexport_secretsv1/secret.export.ts
POST/v1/:org_slug/:workspace_slug/secret/import-envorg+workspaceimport_env_secretsv1/secret.import_env.ts
POST/v1/:org_slug/:workspace_slug/secret/key/deleteorg+workspacedelete_secret_keyv1/secret.key.delete.ts
POST/v1/:org_slug/:workspace_slug/secret/key/listorg+workspacelist_secret_keysv1/secret.key.list.ts
POST/v1/:org_slug/:workspace_slug/secret/key/upsertorg+workspaceupsert_secret_keyv1/secret.key.upsert.ts
POST/v1/:org_slug/:workspace_slug/secret/revealorg+workspacereveal_secretv1/secret.reveal.ts
POST/v1/:org_slug/:workspace_slug/secret/value/setorg+workspaceset_secret_valuev1/secret.value.set.ts
POST/v1/:org_slug/:workspace_slug/secret/value/unsetorg+workspaceunset_secret_valuev1/secret.value.unset.ts
GET/v1/:org_slug/:workspace_slug/shell/nav-countsorg+workspaceget_nav_countsv1/shell.nav_counts.get.ts
POST/v1/:org_slug/:workspace_slug/skillsorg+workspacelist_skillsv1/skill.list.ts
POST/v1/:org_slug/:workspace_slug/skills/configorg+workspaceget_skill_configv1/skill.config.get.ts
POST/v1/:org_slug/:workspace_slug/skills/config/updateorg+workspaceupdate_skill_configv1/skill.config.update.ts
POST/v1/:org_slug/:workspace_slug/skills/impactorg+workspacelist_skill_impactv1/skill.impact.list.ts
POST/v1/:org_slug/:workspace_slug/skills/proposeorg+workspacepropose_skillv1/skill.propose.ts
POST/v1/:org_slug/:workspace_slug/skills/registryorg+workspaceget_skill_registryv1/skill.registry.get.ts
POST/v1/:org_slug/:workspace_slug/skills/registry/readorg+workspaceread_registry_skillv1/skill.registry.read.ts
POST/v1/:org_slug/:workspace_slug/skills/registry/searchorg+workspacesearch_skill_registryv1/skill.registry.search.ts
POST/v1/:org_slug/:workspace_slug/skills/registry/updateorg+workspaceset_skill_registryv1/skill.registry.set.ts
POST/v1/:org_slug/:workspace_slug/skills/search/previeworg+workspacepreview_skill_searchv1/skill.search.preview.ts
POST/v1/:org_slug/:workspace_slug/spendorg+workspaceget_spendv1/spend.get.ts
POST/v1/:org_slug/:workspace_slug/spend/attributionorg+workspaceget_spend_attributionv1/spend.attribution.ts
POST/v1/:org_slug/:workspace_slug/spend/code-shareorg+workspaceget_code_sharev1/spend.code_share.ts
POST/v1/:org_slug/:workspace_slug/spend/context-qualityorg+workspaceget_context_qualityv1/spend.context_quality.ts
POST/v1/:org_slug/:workspace_slug/spend/cost-centersorg+workspacelist_cost_centersv1/cost_center.list.ts
POST/v1/:org_slug/:workspace_slug/spend/cost-centers/createorg+workspacecreate_cost_centerv1/cost_center.create.ts
POST/v1/:org_slug/:workspace_slug/spend/cost-centers/deleteorg+workspacedelete_cost_centerv1/cost_center.delete.ts
POST/v1/:org_slug/:workspace_slug/spend/cost-centers/setorg+workspaceset_cost_centerv1/cost_center.set.ts
POST/v1/:org_slug/:workspace_slug/spend/drillorg+workspaceget_spend_drillv1/spend.drill.ts
POST/v1/:org_slug/:workspace_slug/spend/exportorg+workspaceexport_spendv1/spend.export.ts
POST/v1/:org_slug/:workspace_slug/spend/findingsorg+workspacelist_findingsv1/finding.list.ts
POST/v1/:org_slug/:workspace_slug/spend/findings/callsorg+workspacelist_finding_callsv1/finding.calls.list.ts
POST/v1/:org_slug/:workspace_slug/spend/findings/dismissorg+workspacedismiss_findingv1/finding.dismiss.ts
POST/v1/:org_slug/:workspace_slug/spend/findings/drafted-fixorg+workspaceget_finding_fixv1/finding.fix.get.ts
POST/v1/:org_slug/:workspace_slug/spend/findings/drafted-fix/answerorg+workspaceanswer_finding_fixv1/finding.fix.answer.ts
POST/v1/:org_slug/:workspace_slug/spend/findings/evidenceorg+workspaceget_finding_evidencev1/finding.evidence.get.ts
POST/v1/:org_slug/:workspace_slug/spend/findings/fixorg+workspacerecord_finding_fixv1/finding.fix.record.ts
POST/v1/:org_slug/:workspace_slug/spend/findings/replayorg+workspaceget_model_class_replayv1/finding.model_class_replay.get.ts
POST/v1/:org_slug/:workspace_slug/spend/model-fitorg+workspaceget_spend_model_fitv1/spend.model_fit.ts
POST/v1/:org_slug/:workspace_slug/spend/no-progress-limitorg+workspaceget_no_progress_limitv1/spend.no_progress_limit.get.ts
PUT/v1/:org_slug/:workspace_slug/spend/no-progress-limitorg+workspaceset_no_progress_limitv1/spend.no_progress_limit.set.ts
POST/v1/:org_slug/:workspace_slug/spend/operator-scorecardorg+workspaceget_operator_scorecardv1/spend.operator_scorecard.ts
POST/v1/:org_slug/:workspace_slug/spend/operatorsorg+workspaceget_operator_rankingv1/spend.operator_ranking.ts
POST/v1/:org_slug/:workspace_slug/spend/per-merged-prorg+workspaceget_spend_per_merged_prv1/spend.per_merged_pr.ts
POST/v1/:org_slug/:workspace_slug/spend/run-factsorg+workspacelist_run_factsv1/spend.run_facts.ts
POST/v1/:org_slug/:workspace_slug/spend/run-rolluporg+workspaceget_run_rollupv1/spend.run_rollup.ts
POST/v1/:org_slug/:workspace_slug/spend/sandboxesorg+workspaceget_sandbox_spendv1/spend.sandbox.get.ts
POST/v1/:org_slug/:workspace_slug/spend/statement/exportorg+workspaceexport_statementv1/spend.statement.export.ts
POST/v1/:org_slug/:workspace_slug/spend/unproductiveorg+workspaceget_unproductive_spendv1/spend.unproductive.ts
POST/v1/:org_slug/:workspace_slug/spend/wasteorg+workspacelist_wastev1/spend.waste.ts
POST/v1/:org_slug/:workspace_slug/spend/work-order-metricsorg+workspaceget_work_order_metricsv1/spend.work_order_metrics.ts
POST/v1/:org_slug/:workspace_slug/status/summaryorg+workspaceget_status_summaryv1/status.summary.ts
POST/v1/:org_slug/:workspace_slug/steering/proposalsorg+workspacelist_proposalsv1/steering.proposal.list.ts
POST/v1/:org_slug/:workspace_slug/steering/proposals/createorg+workspacepropose_recordv1/steering.proposal.create.ts
POST/v1/:org_slug/:workspace_slug/steering/proposals/dismissorg+workspacedismiss_proposalv1/steering.proposal.dismiss.ts
POST/v1/:org_slug/:workspace_slug/steering/prs/approveorg+workspaceapprove_steering_prv1/steering.pr.approve.ts
POST/v1/:org_slug/:workspace_slug/steering/prs/difforg+workspaceget_steering_pr_diffv1/steering.pr.diff.get.ts
POST/v1/:org_slug/:workspace_slug/steering/prs/getorg+workspaceget_steering_prv1/steering.pr.get.ts
POST/v1/:org_slug/:workspace_slug/steering/prs/mergeorg+workspacemerge_steering_prv1/steering.pr.merge.ts
POST/v1/:org_slug/:workspace_slug/steering/prs/openorg+workspaceopen_steering_prv1/steering.pr.open.ts
POST/v1/:org_slug/:workspace_slug/steering/prs/refreshorg+workspacerefresh_steering_prv1/steering.pr.refresh.ts
POST/v1/:org_slug/:workspace_slug/steering/prs/revertorg+workspacerevert_steering_prv1/steering.pr.revert.ts
GET/v1/:org_slug/:workspace_slug/steering/record/listorg+workspacelist_steering_recordsv1/steering.record.list.ts
POST/v1/:org_slug/:workspace_slug/steering/record/promoteorg+workspacepromote_steering_recordv1/steering.record.promote.ts
POST/v1/:org_slug/:workspace_slug/steering/record/reviseorg+workspacerevise_steering_recordv1/steering.record.revise.ts
POST/v1/:org_slug/:workspace_slug/steering/records/appendorg+workspaceappend_recordv1/steering.records.append.ts
GET/v1/:org_slug/:workspace_slug/steering/settingsorg+workspaceget_steering_settingsv1/workspace.steering_settings.ts
PUT/v1/:org_slug/:workspace_slug/steering/settingsorg+workspaceset_steering_settingsv1/workspace.steering_settings.ts
POST/v1/:org_slug/:workspace_slug/stella/permissionsorg+workspaceget_stella_permissionsv1/stella.permissions.get.ts
POST/v1/:org_slug/:workspace_slug/stella/permissions/setorg+workspaceset_stella_permissionsv1/stella.permissions.set.ts
POST/v1/:org_slug/:workspace_slug/system/install-instructionsorg+workspaceget_install_instructionsv1/system.install.instructions.ts
POST/v1/:org_slug/:workspace_slug/tacho/enrollment-tokensorg+workspacecreate_enrollment_tokenv1/tacho.enrollment_token.create.ts
POST/v1/:org_slug/:workspace_slug/tacho/enrollmentsorg+workspacecreate_tacho_enrollmentv1/tacho.enrollment.create.ts
POST/v1/:org_slug/:workspace_slug/tacho/enrollments/revokeorg+workspacerevoke_tacho_enrollmentv1/tacho.enrollment.revoke.ts
POST/v1/:org_slug/:workspace_slug/tacho/hostsorg+workspacelist_tacho_hostsv1/tacho.host.list.ts
POST/v1/:org_slug/:workspace_slug/tacho/incidentsorg+workspacelist_incidentsv1/tacho.incident.list.ts
GET/v1/:org_slug/:workspace_slug/tacho/session-policyorg+workspaceget_tacho_session_policyv1/tacho.session_policy.read.ts
PATCH/v1/:org_slug/:workspace_slug/tacho/session-policyorg+workspaceupdate_tacho_session_policyv1/tacho.session_policy.write.ts
POST/v1/:org_slug/:workspace_slug/tacho/sessionsorg+workspacelist_tacho_sessionsv1/tacho.session.list.ts
POST/v1/:org_slug/:workspace_slug/tacho/sessions/getorg+workspaceget_tacho_sessionv1/tacho.session.get.ts
GET/v1/:org_slug/:workspace_slug/telemetry/error/clusterorg+workspacelist_error_clustersv1/telemetry.error.cluster.ts
POST/v1/:org_slug/:workspace_slug/telemetry/stella/enrollmentsorg+workspacecreate_stella_enrollmentv1/telemetry.stella.enroll.ts
GET/v1/:org_slug/:workspace_slug/tool/declaration/listorg+workspacelist_tool_declarationsv1/tool.declaration.list.ts
POST/v1/:org_slug/:workspace_slug/tool/declaration/publishorg+workspacepublish_tool_declarationv1/tool.declaration.publish.ts
POST/v1/:org_slug/:workspace_slug/toolbeltsorg+workspacelist_toolbeltsv1/toolbelt.list.ts
POST/v1/:org_slug/:workspace_slug/toolbelts/cloneorg+workspaceclone_toolbeltv1/toolbelt.clone.ts
POST/v1/:org_slug/:workspace_slug/toolbelts/deleteorg+workspacedelete_toolbeltv1/toolbelt.delete.ts
POST/v1/:org_slug/:workspace_slug/toolbelts/getorg+workspaceget_toolbeltv1/toolbelt.get.ts
POST/v1/:org_slug/:workspace_slug/toolbelts/updateorg+workspaceupdate_toolbeltv1/toolbelt.update.ts
POST/v1/:org_slug/:workspace_slug/tools/importorg+workspaceimport_toolsv1/tool.import.ts
POST/v1/:org_slug/:workspace_slug/tools/loadorg+workspaceload_toolsv1/tools.load.ts
POST/v1/:org_slug/:workspace_slug/tools/relaysorg+workspacecreate_relayv1/tool.relay.create.ts
POST/v1/:org_slug/:workspace_slug/tools/relays/revokeorg+workspacerevoke_relayv1/tool.relay.revoke.ts
POST/v1/:org_slug/:workspace_slug/tools/searchorg+workspacesearch_toolsv1/tools.search.ts
POST/v1/:org_slug/:workspace_slug/tools/stateorg+workspaceset_tool_statev1/tool.state.set.ts
POST/v1/:org_slug/:workspace_slug/tools/steering/migrateorg+workspacemigrate_tools_to_steeringv1/tool.steering.migrate.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/credentialorg+workspaceset_mcp_credentialv1/tool.studio.credential.set.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/descriptionorg+workspacedraft_studio_descriptionv1/tool.studio.description.draft.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/discovery/getorg+workspaceget_studio_discoveryv1/tool.studio.discovery.get.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/discovery/startorg+workspacestart_studio_discoveryv1/tool.studio.discovery.start.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/draftorg+workspacesave_studio_draftv1/tool.studio.draft.save.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/draft/getorg+workspaceget_studio_draftv1/tool.studio.draft.get.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/findingsorg+workspacelist_studio_findingsv1/tool.studio.findings.list.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/listing/getorg+workspaceget_studio_listingv1/tool.studio.listing.get.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/listing/startorg+workspacestart_studio_listingv1/tool.studio.listing.start.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/revieworg+workspaceopen_studio_reviewv1/tool.studio.review.open.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/selectionorg+workspacerun_studio_selectionv1/tool.studio.selection.run.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/server/getorg+workspaceget_studio_serverv1/tool.studio.server.get.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/tools/listorg+workspacelist_studio_toolsv1/tool.studio.tools.list.ts
POST/v1/:org_slug/:workspace_slug/tools/studio/tryorg+workspacetry_studio_toolv1/tool.studio.try.ts
POST/v1/:org_slug/:workspace_slug/tools/versionsorg+workspacelist_tool_versionsv1/tool.version.list.ts
PUT/v1/:org_slug/:workspace_slug/tools/versions/classificationorg+workspaceset_tool_classificationv1/tool.classification.set.ts
POST/v1/:org_slug/:workspace_slug/work/attachments/removeorg+workspaceremove_work_item_attachmentv1/work.item.attachment.remove.ts
POST/v1/:org_slug/:workspace_slug/work/attachments/uploadorg+workspace—v1/work.item.attachment.upload.ts
GET/v1/:org_slug/:workspace_slug/work/attachments/uploadapiKeyIdorg+workspaceupload_work_item_attachmentv1/work.item.attachment.upload.ts
POST/v1/:org_slug/:workspace_slug/work/autonomy/getorg+workspaceget_work_autonomyv1/work.autonomy.get.ts
POST/v1/:org_slug/:workspace_slug/work/batches/draftorg+workspacedraft_work_batchv1/work.batch.draft.ts
POST/v1/:org_slug/:workspace_slug/work/batches/sendorg+workspacesend_work_batchv1/work.batch.send.ts
POST/v1/:org_slug/:workspace_slug/work/collectors/listorg+workspacelist_work_collectorsv1/work.collectors.list.ts
POST/v1/:org_slug/:workspace_slug/work/collectors/setorg+workspaceset_work_collectorv1/work.collector.set.ts
POST/v1/:org_slug/:workspace_slug/work/collectors/syncorg+workspacesync_work_collectorv1/work.collector.sync.ts
POST/v1/:org_slug/:workspace_slug/work/cost/forecastorg+workspaceforecast_work_costv1/work.cost.forecast.ts
POST/v1/:org_slug/:workspace_slug/work/fields/getorg+workspaceget_work_fieldsv1/work.fields.get.ts
POST/v1/:org_slug/:workspace_slug/work/fields/setorg+workspaceset_work_field_mappingv1/work.field_mapping.set.ts
POST/v1/:org_slug/:workspace_slug/work/items/addorg+workspaceadd_work_itemsv1/work.items.add.ts
POST/v1/:org_slug/:workspace_slug/work/items/closeorg+workspaceclose_work_itemv1/work.item.close.ts
POST/v1/:org_slug/:workspace_slug/work/items/createorg+workspacecreate_work_itemv1/work.item.create.ts
POST/v1/:org_slug/:workspace_slug/work/items/deleteorg+workspacedelete_work_itemsv1/work.items.delete.ts
POST/v1/:org_slug/:workspace_slug/work/items/dod/approveorg+workspaceapprove_definition_of_donev1/work.dod.approve.ts
POST/v1/:org_slug/:workspace_slug/work/items/dod/itemorg+workspaceset_dod_item_donev1/work.dod.item.done.set.ts
POST/v1/:org_slug/:workspace_slug/work/items/dod/saveorg+workspacesave_definition_of_donev1/work.dod.save.ts
POST/v1/:org_slug/:workspace_slug/work/items/getorg+workspaceget_work_itemv1/work.item.get.ts
POST/v1/:org_slug/:workspace_slug/work/items/listorg+workspacelist_work_itemsv1/work.items.list.ts
POST/v1/:org_slug/:workspace_slug/work/items/reopenorg+workspacereopen_work_itemv1/work.item.reopen.ts
POST/v1/:org_slug/:workspace_slug/work/items/searchorg+workspacesearch_work_itemsv1/work.items.search.ts
POST/v1/:org_slug/:workspace_slug/work/items/source-commentorg+workspacecomment_on_source_issuev1/work.item.source_comment.ts
POST/v1/:org_slug/:workspace_slug/work/items/source/refreshorg+workspacerefresh_work_item_sourcev1/work.item.source.refresh.ts
POST/v1/:org_slug/:workspace_slug/work/items/start/declineorg+workspacedecline_work_item_startv1/work.item.start.decline.ts
POST/v1/:org_slug/:workspace_slug/work/items/statusorg+workspaceset_work_item_statusv1/work.item.status.set.ts
POST/v1/:org_slug/:workspace_slug/work/items/text-write/retryorg+workspaceretry_work_item_text_writev1/work.item.text_write.retry.ts
POST/v1/:org_slug/:workspace_slug/work/items/updateorg+workspaceupdate_work_itemv1/work.item.update.ts
POST/v1/:org_slug/:workspace_slug/work/items/update-manyorg+workspaceupdate_work_itemsv1/work.items.update.ts
POST/v1/:org_slug/:workspace_slug/work/items/workstreamorg+workspaceset_work_item_workstreamv1/work.item.workstream.set.ts
POST/v1/:org_slug/:workspace_slug/work/labels/archiveorg+workspacearchive_work_labelv1/work.label.archive.ts
POST/v1/:org_slug/:workspace_slug/work/labels/deleteorg+workspacedelete_work_labelv1/work.label.delete.ts
POST/v1/:org_slug/:workspace_slug/work/labels/draftorg+workspacedraft_work_labelv1/work.label.draft.ts
POST/v1/:org_slug/:workspace_slug/work/labels/listorg+workspacelist_work_labelsv1/work.labels.list.ts
POST/v1/:org_slug/:workspace_slug/work/labels/map-collector-labelorg+workspacemap_work_collector_labelv1/work.collector_label.map.ts
POST/v1/:org_slug/:workspace_slug/work/labels/saveorg+workspacesave_work_labelv1/work.label.save.ts
POST/v1/:org_slug/:workspace_slug/work/orders/acceptorg+workspaceaccept_work_orderv1/work.order.accept.ts
POST/v1/:org_slug/:workspace_slug/work/orders/cancelorg+workspacecancel_work_orderv1/work.order.cancel.ts
POST/v1/:org_slug/:workspace_slug/work/orders/checks/refreshorg+workspacerefresh_work_order_checksv1/work.order.checks.refresh.ts
POST/v1/:org_slug/:workspace_slug/work/orders/criteria/claimorg+workspaceclaim_work_criterionv1/work.criterion.claim.ts
POST/v1/:org_slug/:workspace_slug/work/orders/draftorg+workspacedraft_work_orderv1/work.order.draft.ts
POST/v1/:org_slug/:workspace_slug/work/orders/returnorg+workspacereturn_work_orderv1/work.order.return.ts
POST/v1/:org_slug/:workspace_slug/work/orders/sendorg+workspacesend_work_orderv1/work.order.send.ts
POST/v1/:org_slug/:workspace_slug/work/orders/stoporg+workspacestop_work_orderv1/work.order.stop.ts
POST/v1/:org_slug/:workspace_slug/work/outcomes/getorg+workspaceget_work_outcomesv1/work.outcomes.get.ts
POST/v1/:org_slug/:workspace_slug/work/priorities/getorg+workspaceget_work_prioritiesv1/work.priorities.get.ts
POST/v1/:org_slug/:workspace_slug/work/ready/listorg+workspacelist_ready_workv1/work.ready.list.ts
POST/v1/:org_slug/:workspace_slug/work/run-links/listorg+workspacelist_run_link_suggestionsv1/run.link_suggestions.list.ts
POST/v1/:org_slug/:workspace_slug/work/run-links/revieworg+workspacereview_run_linkv1/run.link.review.ts
POST/v1/:org_slug/:workspace_slug/work/sandbox-batches/getorg+workspaceget_work_batchv1/work.orders.get.ts
POST/v1/:org_slug/:workspace_slug/work/sandbox-batches/items/resendorg+workspaceresend_work_batch_itemv1/work.orders.resend.ts
POST/v1/:org_slug/:workspace_slug/work/sandbox-batches/sendorg+workspacesend_work_ordersv1/work.orders.send.ts
POST/v1/:org_slug/:workspace_slug/work/sandbox-batches/stoporg+workspacestop_work_ordersv1/work.orders.stop.ts
POST/v1/:org_slug/:workspace_slug/work/sources/listorg+workspacelist_work_sourcesv1/work.sources.list.ts
POST/v1/:org_slug/:workspace_slug/work/staffing/recommendorg+workspacerecommend_staffingv1/work.staffing.recommend.ts
POST/v1/:org_slug/:workspace_slug/work/statuses/deleteorg+workspacedelete_work_statusv1/work.status.delete.ts
POST/v1/:org_slug/:workspace_slug/work/statuses/draftorg+workspacedraft_work_statusv1/work.status.draft.ts
POST/v1/:org_slug/:workspace_slug/work/statuses/listorg+workspacelist_work_statusesv1/work.statuses.list.ts
POST/v1/:org_slug/:workspace_slug/work/statuses/saveorg+workspacesave_work_statusv1/work.status.save.ts
POST/v1/:org_slug/:workspace_slug/work/targets/listorg+workspacelist_work_targetsv1/work.targets.list.ts
POST/v1/:org_slug/:workspace_slug/work/task/classifyorg+workspaceclassify_taskv1/work.task.classify.ts
POST/v1/:org_slug/:workspace_slug/work/triage/retriage-openorg+workspaceretriage_open_workv1/work.triage.retriage-open.ts
POST/v1/:org_slug/:workspace_slug/work/triage/retryorg+workspaceretry_work_triagev1/work.triage.retry.ts
POST/v1/:org_slug/:workspace_slug/work/triage/reviseorg+workspacerevise_work_triagev1/work.triage.revise.ts
POST/v1/:org_slug/:workspace_slug/work/workstreams/listorg+workspacelist_workstreamsv1/work.workstreams.list.ts
GET/v1/:org_slug/:workspace_slug/working-copiesorg+workspacelist_working_copiesv1/repository.working_copy.list.ts
POST/v1/:org_slug/:workspace_slug/working-copiesorg+workspacerecord_working_copyv1/repository.working_copy.record.ts
POST/v1/:org_slug/:workspace_slug/workspace/connectorg+workspaceconnect_workspacev1/workspace.connect.ts
GET/v1/:org_slug/:workspace_slug/workspace/gateway-settingsorg+workspaceget_gateway_settingsv1/workspace.gateway_settings.ts
PATCH/v1/:org_slug/:workspace_slug/workspace/gateway-settingsorg+workspaceupdate_gateway_settingsv1/workspace.gateway_settings.ts
POST/v1/:org_slug/:workspace_slug/workspace/invite/sendorg+workspacesend_workspace_invitev1/workspace.invite.send.ts
GET/v1/:org_slug/:workspace_slug/workspace/join-requestsorg+workspacelist_join_requestsv1/workspace.join_request.list.ts
GET/v1/:org_slug/:workspace_slug/workspace/member/listorg+workspacelist_membersv1/workspace.member.list.ts
POST/v1/:org_slug/:workspace_slug/workspace/members/addorg+workspaceadd_workspace_memberv1/workspace.member.add.ts
POST/v1/:org_slug/:workspace_slug/workspace/members/removeorg+workspaceremove_workspace_memberv1/workspace.member.remove.ts
PUT/v1/:org_slug/:workspace_slug/workspace/members/roleorg+workspaceset_workspace_member_rolev1/workspace.member_role.set.ts
GET/v1/:org_slug/:workspace_slug/workspace/model-settingsorg+workspaceget_model_settingsv1/workspace.model_settings.read.ts
PATCH/v1/:org_slug/:workspace_slug/workspace/model-settingsorg+workspaceupdate_model_settingsv1/workspace.model_settings.write.ts
GET/v1/:org_slug/:workspace_slug/workspace/prompt-settingsorg+workspaceget_prompt_settingsv1/prompt.settings.read.ts
PATCH/v1/:org_slug/:workspace_slug/workspace/prompt-settingsorg+workspaceupdate_prompt_settingsv1/prompt.settings.write.ts
GET/v1/:org_slug/:workspace_slug/workspace/settingsorg+workspaceget_workspace_settingsv1/workspace.settings.read.ts
PATCH/v1/:org_slug/:workspace_slug/workspace/settingsorg+workspaceupdate_workspace_settingsv1/workspace.settings.write.ts
POST/v1/:org_slug/:workspace_slug/workspacesorg+workspacecreate_workspacev1/workspace.create.ts
POST/v1/:org_slug/:workspace_slug/workspaces/archiveorg+workspacearchive_workspacev1/workspace.archive.ts
GET/healthpublic—health.ts
GET/health/readypublic—health.ts
POST/internal/codegraph/ci-runspublic—codegraph/ci-runs.ts
POST/internal/codegraph/gitlab/tokenpublic—codegraph/gitlab-token.ts
POST/v1/auth/cli/tokenpublic—v1/auth.cli.token.ts
GET/v1/auth/clirequestIdpublic—v1/auth.cli.token.ts
POST/v1/cms/book/redeempublic—v1/cms.ts
POST/v1/cms/book/resendpublic—v1/cms.ts
POST/v1/cms/leadspublic—v1/cms.ts
GET/v1/cmsrequestIdpublic—v1/cms.ts
GET/v1/enrollment/keyspublicget_enrollment_keysv1/enrollment.keys.get.ts
POST/v1/enrollment/requestpublicpreview_enrollment_requestv1/enrollment.request.ts
POST/v1/enrollment/request/rejectpublicreject_enrollment_requestv1/enrollment.request.ts
POST/v1/gateway/run/continuationpublic—v1/gateway/model.ts
GET/v1/gatewaycontent-lengthpublic—v1/gateway/model.ts
GET/v1/notifications/unsubscribepublic—v1/notification.unsubscribe.ts
POST/v1/notifications/unsubscribepublic—v1/notification.unsubscribe.ts
GET/v1/run-exports/downloadpublic—v1/run.export.download.ts
POST/v1/sandbox/enrollpublicenroll_sandbox_daemonv1/sandbox-daemon.enroll.ts
POST/v1/tacho/enrollpublicenroll_hostv1/tacho.host.enroll.ts
POST/v1/telemetry/usagepublic—v1/telemetry.usage.ts
POST/webhooks/:connectorId/:connectionIdpublic—v1/webhook.ts
GET/webhooks/collectors/:provider/:subscriptionpublic—v1/collector-webhook.ts
POST/webhooks/collectors/:provider/:subscriptionpublic—v1/collector-webhook.ts
POST/webhooks/github/apppublic—v1/github-webhook.ts
GET/webhooks/github/apprequestIdpublic—v1/github-webhook.ts
POST/webhooks/gitlab/:connectionIdpublic—v1/gitlab-webhook.ts
POST/webhooks/gitlab/steering/:scopeKind/:scopeIdpublic—v1/gitlab-webhook.ts
GET/webhooks/gitlabrequestIdpublic—v1/gitlab-webhook.ts
POST/webhooks/linearpublic—v1/linear-webhook.ts
POST/webhooks/stripepublic—stripe.ts
GET/webhooks/striperequestIdpublic—stripe.ts
GET/webhooksrequestIdpublic—v1/webhook.ts
GET/v1/assets/:publicIduser—v1/asset.get.ts
GET/v1/assetsapiKeyIduser—v1/asset.get.ts
GET/v1/assetsapiKeyScopeuser—v1/asset.get.ts
GET/v1/assetsrequestIduser—v1/asset.get.ts
GET/v1/assetssessionAuthMethoduser—v1/asset.get.ts
GET/v1/assetsuserIduser—v1/asset.get.ts
DELETE/v1/auth/cli/sessionuser—v1/auth.cli.session.ts
GET/v1/auth/cli/sessionapiKeyIduserrevoke_api_keyv1/auth.cli.session.ts
GET/v1/auth/whoamiuser—v1/auth.whoami.ts
GET/v1/auth/whoamiapiKeyIduser—v1/auth.whoami.ts
GET/v1/auth/whoamiorgIduser—v1/auth.whoami.ts
GET/v1/auth/whoamiuserIduser—v1/auth.whoami.ts
GET/v1/auth/whoamiworkspaceIduser—v1/auth.whoami.ts
POST/v1/onboarding/stateuserget_onboarding_statev1/onboarding.state.get.ts
POST/v1/organizationsusercreate_orgv1/org.create.ts
POST/v1/user/organizationsuserlist_orgsv1/org.list.ts
PATCH/v1/user/preferencesuserset_preferencesv1/user.preferences.set.ts
GET/v1/user/preferences/readuserget_user_preferencesv1/user.preferences.read.ts
PATCH/v1/user/profileuserupdate_profilev1/user.profile.update.ts
POST/v1/user/workspacesuserlist_workspacesv1/workspace.list.ts

Capability kernel

693 typed contracts, one registry, one invoke(). A contract's dotless snake_case name is its identity (ADR-025); the dotted filename is only where it lives.

How a surface reaches a handler

Contract to handler bindingimports contractimports contractimports contractregistry MapresolveHandler(name)lazy import()apps/api routeinvoke(cap.name, …, { surface: 'api' })apps/mcp toolmetadata.name = cap.namematerialised toolsurface: 'agent'registerCapabilitypackages/oxagen/src/contracts/<stem>.tsinvoke()exact-name lookupbindpackages/handlers/src/bindings/<stem>Handlerpackages/handlers/src/<stem>.ts
Every surface imports the same contract object and hands its name to invoke(); the handler is bound by name in one flat register file and imported lazily.
  • 684 of 693 contracts bind a handler in @oxagen/handlers; the rest register from @oxagen/agent/register or run inline.
  • The registry lives on globalThis under a symbol so a bundler's double evaluation cannot register twice; a duplicate with a different signature keeps the first registration, with a warning outside production, instead of throwing.

Gate order inside invoke()

A refused call never reaches a handler, and every refusal except the replay-input check leaves a security event. Only a top-level, billable invoke() accrues a governed action.LookupgetCapability(name)unknown_capabilityForged binding?caller-supplied authzauthz_deniedPlatform only?cap.platformOnlyauthz_deniedSurface allowed?cap.surfacessurface_deniedInput valid?cap.input.safeParseinvalid_inputReplay input?opts.assertValidatedInputEnter tenant scoperunInTenantScopeIAMkey scope → checkIAMauthz_denied · pending_approvalBilling admissionassertGauAvailablegau_exhausted · billing_suspendedBudget admissionassertWithinSpendBudgetbudget_exceededEntitlementplugin-claimed contracts onlycapability_not_installedDecision rules_decisionRulesGatedecision_rule_* · decision_rules_unavailableHandlerrunWithPrincipalno_handlerOutput valid?cap.output.safeParseinvalid_outputSettle and auditemitSecurityEventAccrue actionusageRecorder
A refused call never reaches a handler, and every refusal except the replay-input check leaves a security event. Only a top-level, billable invoke() accrues a governed action.
  • The surface check runs only when the caller passes opts.surface. The kernel enters the tenant scope when the contract is scoped or both tenant ids are uuids. A machine key whose scope does not cover the capability is refused before checkIAM. A pending_approval result also creates an access_requests row. A nested invoke skips the billing gate but not the budget gate. Stella's calls and the assistant's own contracts skip the budget and decision-rules gates (ADR-235). The decision-rules gate may reserve a settlement, which the audit step settles and the catch block releases. The replay-input check runs only on the approval-resume path.
  • The billing, budget and usage slots are empty until bootstrapBillingRuntime() fills them, once per process. A surface that does not bootstrap runs those gates open. apps/api, apps/mcp and apps/app also bootstrap IAM, decision rules and entitlement at startup.
  • IAM enforcement is always on: bootstrapIAMRuntime registers the check with enforcement set to true, and no setting turns it off (ADR-6171). An IAM throw fails closed. An agent-run invocation also fails closed when its IAM check returns no persisted authorization decision.
  • Every failure exits before the accrual step. Lookup, binding, platform-only, surface, input and replay-input refusals throw before the tenant scope opens. IAM, billing, budget, entitlement, rules and handler failures leave through the catch block, which releases any reserved settlement. An invalid output throws after that. This is how ADR-052's rule that denials are free is enforced by structure, not by policy.
Source refs (11, verified at build)
  • packages/oxagen/src/kernel.ts#_invokeCoreInner
  • packages/oxagen/src/kernel.ts#setBillingAdmissionGate
  • packages/oxagen/src/kernel.ts#setUsageRecorder
  • packages/oxagen/src/kernel.ts#cap.platformOnly
  • packages/oxagen/src/kernel.ts#assertValidatedInput
  • packages/iam/src/bootstrap.ts#machineKeyDenial
  • packages/iam/src/check-iam.ts#checkIAM
  • packages/billing/src/gau-bucket.ts#assertGauAvailable
  • packages/billing/src/spend-budget-gate.ts#assertWithinSpendBudget
  • packages/billing/src/bootstrap.ts#bootstrapBillingRuntime
  • packages/rules/src/gate.ts#decision_rule_denied

checkIAM decision order

Agent principals are checked against their pinned ceiling at every plan tier. Below Enterprise, a person's call is resolved against built-in roles only, and a call with no person is allowed by the tier gate. When the tier cannot be established, the full resolver runs.Machine key scopemachineKeyDenialdeny, no audit rowPrincipal kindarg → ctx.agentRun → 'human'Agent branchpinned ceiling ∩ live authority, deny-winsiam.authorization_decisions rowTier gateestablished && !canAccessACL(tier)no person or unscoped → allow, rule tier_gateBuilt-in rolescheckBuiltInRoles: system roles + contract defaultRolesallow · denyfetchAuthzrole grants (withOrgDb)resolve()pure evaluator, @oxagen/oxagen/iamemitAuditClickHouse audit_events, one chain per org
Agent principals are checked against their pinned ceiling at every plan tier. Below Enterprise, a person's call is resolved against built-in roles only, and a call with no person is allowed by the tier gate. When the tier cannot be established, the full resolver runs.
  • The audit row stores payload_hash, a sha256 of the serialised validated input, never the input itself. Each row takes the next chain_seq of its organization's chain under a per-org Postgres advisory lock (iam.audit_chain_heads), and chain_hash = sha256(prev_hash | chain_seq, event_id, capability, payload_hash, outcome and every other column), where prev_hash is the hash of the row one seq before. verifyAuditChain reports an edited row, a missing seq, a replaced row, a fork, and rows cut from the end against the head (#2973).
  • The audit write is fire-and-forget until too many writes are in flight, when the caller waits for it. It makes up to three attempts. A failed emission is captured to the error_events table.
  • A machine key whose scope does not cover the capability is refused before checkIAM runs, so that refusal writes no audit_events row and no decision.
Source refs (10, verified at build)
  • packages/iam/src/bootstrap.ts#machineKeyDenial
  • packages/iam/src/check-iam.ts#checkIAM
  • packages/iam/src/check-iam.ts#checkBuiltInRoles
  • packages/iam/src/check-iam.ts#MAX_PENDING_AUDIT_WRITES
  • packages/iam/src/fetch-authz.ts#withOrgDb
  • packages/iam/src/emit-audit.ts#AuditEventRow
  • packages/iam/src/audit-chain-head.ts#appendAuditChainLinks
  • packages/iam/src/audit-chain-verify.ts#verifyAuditChain
  • packages/oxagen/src/iam/index.ts
  • packages/run-evidence/src/digest.ts#digestJcs

Domains × surfaces

How many contracts in each domain are exposed on each surface. Read from packages/oxagen/capabilities.manifest.json.

DomainContractsagentapiclimcpHandlers
agent442141154243
api_key656·56
approval_rule555·55
asset1·1·11
assistant1651441011
audit212122
auth1····1
billing23162042023
capability222·22
chat1·1·11
codegraph484548·4548
command222··2
configuration222·22
connection13813·1013
context382330173838
control636336
conversation121012·1212
cost444344
credential111·11
environment6·6·66
graph766366
iam666·66
integration777677
kill_switch222·22
mandate666·66
model111·11
notification333·33
onboarding333·23
ontology222222
org53224653953
plugin19·19·1919
privacy333·33
reference111·11
repo989499
repository302430102730
router323333
run29262972929
runtime21421182021
schema231022212123
secret858·88
shell111·11
skill11910·911
spend35293562935
system111·11
tacho315285931
telemetry313·13
tool2452422224
toolbelt555·55
tools222·20
user545·35
work73266917173
workspace33243023033

Capability catalog

693
NameDomainModeSurfacesLayersHandler
answer_interjectionagentsyncapi cli mcpschema · api · mcp · cli · unit · docs · appagent.interjection.answer.ts
assign_agent_roleagentsyncagent api mcpapi · mcp · unit · docs · appagent.role.assign.ts
assign_agent_toolbeltagentsyncagent api mcpschema · api · mcp · unit · docs · appagent.toolbelt.assign.ts
authorize_mcp_serveragentsyncapi mcpschema · api · mcp · unit · docs · appagent.mcp.authorize.complete.ts
cancel_agent_draftagentsyncapi cli mcpschema · api · mcp · cli · docs · appagent.draft.cancel.ts
delete_mcp_serveragentsyncagent api mcpschema · api · mcp · unit · docs · appagent.mcp.delete.ts
draft_interjection_answeragentsyncapi cli mcpschema · api · mcp · cli · unit · docs · appagent.interjection.draft.ts
finish_agent_draftagentsyncapi cli mcpschema · api · mcp · cli · docs · appagent.draft.finish.ts
get_agentagentsyncagent api cli mcpschema · api · mcp · unit · docs · appagent.get.ts
get_agent_draftagentsyncapi cli mcpschema · api · mcp · cli · docs · appagent.draft.get.ts
get_agent_roleagentsyncagent api mcpapi · mcp · unit · docsagent.role.get.ts
get_agent_toolbeltagentsyncagent api mcpschema · api · mcp · unit · docs · appagent.toolbelt.get.ts
list_agent_rolesagentsyncagent api mcpapi · mcp · unit · docs · appagent.role.list.ts
list_agent_toolsagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
list_agentsagentsyncagent api mcpschema · api · mcp · unit · docs · appagent.list.ts
list_approvalsagentsyncagent api mcpschema · api · mcp · unit · docs · appagent.approval.list.ts
list_attentionagentsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appagent.attention.list.ts
list_fleetagentsyncagent api cli mcpschema · api · mcp · cli · unit · docsagent.fleet.list.ts
list_interjectionsagentsyncagent api mcpschema · api · mcp · unit · docs · appagent.interjection.list.ts
list_mcp_consentsagentsyncagent api mcpschema · api · mcp · unit · docsagent.mcp_consent.list.ts
list_mcp_serversagentsyncagent api mcpschema · api · mcp · unit · docs · appagent.mcp.list.ts
list_resolved_approvalsagentsyncagent api cli mcpschema · api · mcp · unit · docs · appagent.approval.list_resolved.ts
list_run_accountsagentsyncapi mcpschema · api · mcp · unit · docs · apprun-accounts.list.ts
move_agentagentsyncagent api mcpschema · api · mcp · unit · docs · appagent.move.ts
record_reflectionagentsyncmcpschema · mcp · unit · docsagent.memory.reflection.record.ts
register_agentagentsyncapi cli mcpschema · api · unit · docs · app · mcpagent.register.ts
register_mcp_serveragentsyncapi mcpschema · api · mcp · unit · docs · appagent.mcp.register.ts
remember_lessonagentsyncmcpschema · mcp · unit · docsagent.memory.lesson.remember.ts
reopen_interjectionagentsyncapi cli mcpschema · api · mcp · cli · unit · docs · appagent.interjection.reopen.ts
resolve_approvalagentsyncapi mcpschema · api · mcp · unit · docs · appagent.approval.resolve.ts
resolve_mcp_consentagentsyncapi mcpschema · api · mcp · unit · docs · appagent.mcp_consent.resolve.ts
resolve_mcp_serversagentsyncschema · unitagent.mcp.resolve.ts
retire_agentagentsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appagent.retire.ts
revoke_agent_roleagentsyncagent api mcpapi · mcp · unit · docs · appagent.role.revoke.ts
rotate_agent_credentialagentsyncapischema · api · unit · docs · appagent.credential.rotate.ts
save_agent_draftagentsyncapi cli mcpschema · api · mcp · cli · docs · appagent.draft.save.ts
search_mcp_registryagentsyncagent api mcpschema · api · mcp · unit · docs · appagent.mcp.registry.search.ts
set_agent_account_sourceagentsyncapi mcpschema · api · mcp · unit · docs · appagent.account_source.set.ts
set_agent_budgetagentsyncapi mcpschema · api · mcp · unit · docs · appagent.budget.set.ts
set_agent_cache_keep_aliveagentsyncapi mcpschema · api · mcp · unit · docs · appagent.cache_keep_alive.set.ts
set_agent_display_nameagentsyncapi cli mcpschema · api · mcp · cli · docs · appagent.display_name.set.ts
set_mcp_enabledagentsyncapi mcpschema · api · mcp · unit · docsagent.mcp.set_enabled.ts
start_mcp_authorizationagentsyncapi mcpschema · api · mcp · unit · docs · appagent.mcp.authorize.start.ts
suspend_agentagentsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appagent.suspend.ts
acknowledge_api_key_rotationapi_keysyncagent api mcpapi · docs · mcp · unit · appapi.key.rotation.acknowledge.ts
create_api_keyapi_keysyncagent api mcpapi · docs · mcp · unit · appapi.key.create.ts
list_api_keysapi_keysyncagent api mcpapi · docs · mcp · unit · appapi.key.list.ts
list_decision_capabilitiesapi_keysyncapischema · api · unit · docs · appapi.key.decision_capabilities.list.ts
revoke_api_keyapi_keysyncagent api mcpapi · docs · mcp · unit · appapi.key.revoke.ts
rotate_api_keyapi_keysyncagent api mcpapi · docs · mcp · unit · appapi.key.rotate.ts
delete_approval_ruleapproval_rulesyncagent api mcpschema · api · mcp · unit · docs · appapproval_rule.delete.ts
get_auto_eligibilityapproval_rulesyncagent api mcpschema · api · mcp · unit · docs · appapproval.auto_eligibility.get.ts
list_approval_rulesapproval_rulesyncagent api mcpschema · api · mcp · unit · docs · appapproval_rule.list.ts
set_approval_rule_enabledapproval_rulesyncagent api mcpschema · api · mcp · unit · docs · appapproval_rule.enabled.set.ts
set_approval_rulesapproval_rulesyncagent api mcpschema · api · mcp · unit · docs · appapproval_rule.set.ts
upload_assetassetsyncapi mcpschema · api · mcp · unit · docsasset.upload.ts
answer_assistant_questionassistantsyncapischema · api · unit · docs · app@oxagen/agent or inline
ask_assistantassistantasyncapi mcpschema · api · mcp · unit · docs · app@oxagen/agent or inline
cancel_assistant_turnassistantsyncapischema · api · unit · docs · app@oxagen/agent or inline
draft_recordassistantsyncagent api cli mcpschema · api · mcp · unit · docs · app · clistella/draft-record.ts
get_assistant_engineassistantsyncapi mcpschema · api · mcp · unit · docs · app@oxagen/agent or inline
get_assistant_replyassistantsyncapischema · api · unit · docs · app@oxagen/agent or inline
get_briefingassistantsyncagent api cli mcpschema · api · mcp · cli · unit · docsstella/briefing.ts
get_operator_statusassistantsyncagent api mcpschema · api · mcp · unit · docs · appoperator.status.get.ts
get_stella_permissionsassistantsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appstella/permissions.get.ts
record_reply_feedbackassistantsyncapi mcpschema · api · mcp · unit · docs · appassistant.reply_feedback.record.ts
render_chartassistantsyncagentschema · unit · docs · appassistant.chart.render.ts
resolve_assistant_cardassistantsyncapischema · api · unit · docs · appassistant.card.resolve.ts
rewrite_fieldassistantsyncapi mcpschema · api · mcp · unit · docs · appstella/rewrite-field.ts
set_assistant_switchassistantsyncschema · unit · docsassistant.switch.set.ts
set_stella_permissionsassistantsyncapi cli mcpschema · api · mcp · cli · unit · docs · appstella/permissions.set.ts
upload_assistant_attachmentassistantsyncapi mcpschema · api · mcp · unit · docs · appassistant.attachment.upload.ts
export_audit_eventsauditsyncapi mcpschema · api · mcp · unit · docs · appaudit.events.export.ts
query_audit_logauditsyncagent api cli mcpschema · api · mcp · unit · docs · appaudit.log.query.ts
authorize_cliauthsyncschema · unit · docs · appauth.cli.authorize.ts
create_prepaid_invoicebillingsyncschema · unit · docsbilling.prepaid_invoice.create.ts
export_billing_statementbillingsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appbilling.statement.export.ts
get_billing_statementbillingsyncapi cli mcpschema · api · mcp · cli · unit · docsbilling.statement.get.ts
get_contract_ratebillingsyncagent api mcpschema · api · mcp · unit · docs · appbilling.contract_rate.get.ts
get_evidence_retentionbillingsyncagent api mcpschema · api · mcp · unit · docs · appbilling.evidence_retention.ts
get_gau_bucketbillingsyncagent api mcpschema · api · mcp · unit · docs · appbilling.gau_bucket.get.ts
get_rate_cardbillingsyncagent api mcpschema · api · mcp · unit · docsbilling.action_rate_card.ts
get_spend_budgetbillingsyncagent api cli mcpschema · api · docs · mcp · unit · appbilling.budget.get.ts
get_subscriptionbillingsyncagent api mcpschema · api · mcp · unit · docs · appbilling.subscription.read.ts
get_usage_breakdownbillingsyncagent api mcpschema · api · mcp · unit · docsbilling.usage.breakdown.ts
list_invoicesbillingsyncagent api mcpschema · api · mcp · unit · docs · appbilling.invoice.list.ts
list_prepaid_ordersbillingsyncapi mcpschema · api · mcp · unit · docsbilling.prepaid_order.list.ts
open_billing_portalbillingsyncapi mcpschema · api · mcp · unit · docsbilling.portal_session.create.ts
preview_action_costbillingsyncagent api mcpschema · api · mcp · unit · docsbilling.action_estimate.ts
purchase_creditsbillingsyncagent api mcpschema · api · mcp · unit · docs · appbilling.credits.purchase.ts
purchase_gau_bucketbillingsyncagent api mcpschema · api · mcp · unit · docs · appbilling.gau_bucket.purchase.ts
refund_creditsbillingsyncapi mcpschema · api · mcp · unit · docsbilling.credits.refund.ts
set_contract_termsbillingsyncschema · unit · docsbilling.contract_terms.set.ts
set_org_billing_termsbillingsyncschema · unit · docsbilling.org_terms.set.ts
set_sandbox_slotsbillingsyncagent api mcpschema · api · mcp · unit · docsbilling.sandbox_slots.set.ts
set_spend_budgetbillingsyncagent api cli mcpschema · api · docs · mcp · unit · appbilling.budget.set.ts
set_subscription_seatsbillingsyncagent api mcpschema · api · mcp · unit · docs · appbilling.subscription_seats.set.ts
start_subscription_upgradebillingsyncagent api mcpschema · api · mcp · unit · docs · appbilling.subscription_upgrade.start.ts
get_capability_registrycapabilitysyncagent api mcpapi · mcp · unit · docscapability.registry.get.ts
list_capability_registrycapabilitysyncagent api mcpapi · mcp · unit · docscapability.registry.list.ts
send_messagechatasyncapi mcpschema · api · mcp · unit · docschat.message.send.ts
check_changecodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.check_change.ts
create_work_itemscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.create_work_items.ts
embed_code_graph_cardscodegraphsyncapischema · api · unit · docscodegraph.embed_code_graph_cards.ts
export_openapi_draftcodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.export_openapi_draft.ts
find_definitioncodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.find_definition.ts
find_implementationscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.find_implementations.ts
find_referencescodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.find_references.ts
get_api_docscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_api_docs.ts
get_blast_radiuscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_blast_radius.ts
get_code_graph_basecodegraphsyncapischema · api · unit · docscodegraph.get_code_graph_base.ts
get_code_graph_embedding_keycodegraphsyncapischema · api · unit · docscodegraph.get_code_graph_embedding_key.ts
get_code_graph_settingscodegraphsyncagent api mcpschema · api · mcp · unit · docs · appcodegraph.get_code_graph_settings.ts
get_code_graph_spendcodegraphsyncagent api mcpschema · api · mcp · unit · docs · appcodegraph.get_code_graph_spend.ts
get_dataflow_slicecodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_dataflow_slice.ts
get_domain_briefcodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_domain_brief.ts
get_env_varscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_env_vars.ts
get_execution_flowcodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_execution_flow.ts
get_infracodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_infra.ts
get_intended_behaviorcodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_intended_behavior.ts
get_module_couplingcodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_module_coupling.ts
get_repair_contextcodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_repair_context.ts
get_repo_mapcodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_repo_map.ts
get_symbol_historycodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.get_symbol_history.ts
label_linkcodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.label_link.ts
list_change_set_symbolscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_change_set_symbols.ts
list_ci_jobscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_ci_jobs.ts
list_co_changescodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_co_changes.ts
list_code_graph_releasescodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_code_graph_releases.ts
list_domain_reviewscodegraphsyncagent api mcpschema · api · mcp · unit · docs · appcodegraph.list_domain_reviews.ts
list_governing_decisionscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_governing_decisions.ts
list_held_decisionscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_held_decisions.ts
list_link_labelscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_link_labels.ts
list_link_reviewscodegraphsyncagent api mcpschema · api · mcp · unit · docs · appcodegraph.list_link_reviews.ts
list_neighborscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_neighbors.ts
list_scriptscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_scripts.ts
list_similar_symbolscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_similar_symbols.ts
list_symbol_authorshipcodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_symbol_authorship.ts
list_symbol_docscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_symbol_docs.ts
list_unit_testscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.list_unit_tests.ts
localize_faultcodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.localize_fault.ts
post_intent_questioncodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.post_intent_question.ts
propose_code_graph_settingscodegraphsyncagent api mcpschema · api · mcp · unit · docs · appcodegraph.propose_code_graph_settings.ts
propose_edgecodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.propose_edge.ts
rank_symbolscodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.rank_symbols.ts
review_domaincodegraphsyncagent api mcpschema · api · mcp · unit · docs · appcodegraph.review_domain.ts
review_linkcodegraphsyncagent api mcpschema · api · mcp · unit · docs · appcodegraph.review_link.ts
search_code_graphcodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.search_code_graph.ts
trace_speccodegraphsyncagent api mcpschema · api · mcp · unit · docscodegraph.trace_spec.ts
search_command_menucommandsyncagent apischema · api · unit · docscommand.menu.search.ts
suggest_commandscommandsyncagent apischema · api · unit · docscommand.menu.suggest.ts
get_clone_draftconfigurationsyncagent api mcpschema · api · mcp · docs · appconfiguration.clone.get.ts
propose_configuration_cloneconfigurationsyncagent api mcpschema · api · mcp · docs · appconfiguration.clone.propose.ts
add_token_connectionconnectionsyncapischema · api · docsconnection.token.add.ts
authorize_connectionconnectionsyncapischema · api · docsconnection.authorization.complete.ts
create_connectionconnectionsyncagent api mcpschema · api · mcp · unit · docs · appconnection.create.ts
delete_connectionconnectionasyncagent api mcpschema · api · mcp · unit · docsconnection.delete.ts
get_connectionconnectionsyncapi mcpschema · api · mcp · unit · docs · appconnection.get.ts
get_connection_mappingsconnectionsyncapi mcpschema · api · mcp · unit · docsconnection.mappings.get.ts
list_connectionsconnectionsyncagent api mcpschema · api · mcp · unit · docs · appconnection.list.ts
pause_connectionconnectionsyncagent api mcpschema · api · mcp · unit · docsconnection.pause.ts
preview_connectionconnectionsyncagent api mcpschema · api · mcp · unit · docsconnection.preview.ts
set_connection_mappingsconnectionsyncagent api mcpschema · api · mcp · unit · docsconnection.mappings.set.ts
start_connection_authorizationconnectionsyncapischema · api · docsconnection.authorization.start.ts
suggest_connection_mappingsconnectionsyncagent api mcpschema · api · mcp · unit · docsconnection.mappings.suggest.ts
update_connectionconnectionsyncagent api mcpschema · api · mcp · unit · docsconnection.update.ts
append_recordcontextsyncagent api mcpschema · api · mcp · unit · docssteering.records.append.ts
approve_steering_prcontextsyncapi mcpschema · api · unit · docs · app · mcpsteering.pr.approve.ts
commit_markdown_importcontextsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appmarkdown-import/index.ts
dismiss_memoriescontextsyncapi cli mcpschema · api · mcp · cli · unit · docs · appsteering.memories.dismiss.ts
dismiss_proposalcontextsyncagent api cli mcpschema · api · unit · docs · app · mcp · clisteering.proposal.dismiss.ts
drop_memory_recordcontextsyncapi cli mcpschema · api · mcp · cli · unit · docs · appsteering.memory_pr_records.drop.ts
get_published_steeringcontextsyncmcpschema · mcp · unit · docscontext.steering.published.get.ts
get_recordcontextsyncagent mcpschema · mcp · unit · docs · appsteering.records.get.ts
get_steering_deliveriescontextsyncagent api mcpschema · api · mcp · docs · appcontext.steering.deliveries.ts
get_steering_indexcontextsyncapi cli mcpschema · api · cli · unit · docs · mcpcontext.steering.index.get.ts
get_steering_layoutcontextsyncagent api mcpschema · api · mcp · docs · appcontext.steering.layout.ts
get_steering_prcontextsyncagent api cli mcpschema · api · mcp · unit · docs · app · clisteering.pr.get.ts
get_steering_pr_diffcontextsyncagent api mcpschema · api · mcp · unit · docs · appsteering.pr.diff.get.ts
get_steering_skillcontextsyncagent mcpschema · unit · docs · app · mcpsteering.skill.get.ts
get_steering_sync_statecontextsyncagent api mcpschema · api · mcp · appcontext.steering.sync_state.ts
get_workspace_memorycontextsyncapi cli mcpschema · api · mcp · cli · unit · docs · appsteering.memories.get.ts
list_memory_pr_recordscontextsyncapi mcpschema · api · mcp · unit · docs · appsteering.memory_pr_records.list.ts
list_proposalscontextsyncagent api cli mcpschema · api · mcp · unit · docs · app · clisteering.proposal.list.ts
list_recordscontextsyncagent mcpschema · mcp · unit · docs · appsteering.records.list.ts
list_steering_record_deliveriescontextsyncagent api mcpschema · api · mcp · unit · docs · appcontext.steering.record_deliveries.ts
list_steering_recordscontextsyncagent api mcpschema · api · docs · mcp · unitsteering.record.list.ts
list_steering_skillscontextsyncmcpschema · mcp · unit · docs · appsteering.skills.list.ts
list_workspace_memoriescontextsyncapi cli mcpschema · api · mcp · cli · unit · docs · appsteering.memories.list.ts
merge_pr_without_reviewcontextsyncagent api mcpschema · api · unit · docs · app · mcpsteering.pr.merge_without_review.ts
merge_steering_prcontextsyncagent api cli mcpschema · api · unit · docs · app · mcp · clisteering.pr.merge.ts
open_steering_prcontextsyncagent api cli mcpschema · api · unit · docs · app · mcp · clisteering.pr.open.ts
parse_markdown_importcontextsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appmarkdown-import/index.ts
promote_memoriescontextsyncapi cli mcpschema · api · mcp · cli · unit · docs · appsteering.memories.promote.ts
promote_steering_recordcontextsyncapi mcpschema · api · docs · unit · mcpsteering.record.promote.ts
propose_recordcontextsyncagent api cli mcpschema · api · mcp · unit · docs · app · clisteering.proposal.create.ts
propose_steeringcontextsyncmcpschema · mcp · unit · docssteering.propose.ts
read_steeringcontextsyncmcpschema · mcp · unit · docssteering.read.ts
refresh_steering_prcontextsyncagent api mcpschema · api · unit · docs · app · mcpsteering.pr.refresh.ts
restore_managed_blockcontextsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appsteering.pr.restore_managed_block.ts
revert_steering_prcontextsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appsteering.pr.revert.ts
revise_steering_recordcontextsyncagent api mcpschema · api · unit · docs · app · mcpsteering.record.revise.ts
search_steeringcontextsyncmcpschema · mcp · unit · docssteering.search.ts
suggest_memory_draftscontextsyncapi cli mcpschema · api · mcp · cli · unit · docs · appsteering.memories.suggest.ts
dispatch_commandcontrolsyncagent api cli mcpschema · api · mcp · cli · unit · docs · apptacho.command.dispatch.ts
fetch_commandscontrolsyncapischema · api · unit · docstacho.command.fetch.ts
list_commandscontrolsyncagent api cli mcpschema · api · mcp · cli · unit · docs · apptacho.command.list.ts
pause_workspace_runscontrolsyncagent api cli mcpschema · api · mcp · cli · unit · docs · apptacho.workspace_runs.pause.ts
redeem_workspace_connectioncontrolsyncapischema · api · docsworkspace.connect.redeem.ts
set_host_connectioncontrolsyncapischema · api · unit · docshost.connection.set.ts
add_conversation_attachmentconversationsyncagent api mcpschema · api · mcp · unit · docsconversation.attachment.add.ts
archive_conversationconversationsyncagent api mcpschema · api · mcp · unit · docs · appconversation.archive.ts
clear_conversationconversationsyncapi mcpschema · api · mcp · docs · appconversation.clear.ts
delete_conversationconversationsyncagent api mcpschema · api · mcp · unit · docs · appconversation.delete.ts
export_conversationconversationsyncagent api mcpschema · api · mcp · unit · docs · appconversation.export.ts
fork_conversationconversationsyncagent api mcpschema · api · mcp · unit · docs · appconversation.fork.ts
get_conversationconversationsyncagent api mcpschema · api · mcp · unit · docs · appconversation.get.ts
list_conversation_filesconversationsyncagent api mcpschema · api · mcp · unit · docsconversation.files.list.ts
list_conversationsconversationsyncagent api mcpschema · api · mcp · unit · docs · appconversation.list.ts
post_conversation_messageconversationsyncapi mcpschema · api · docs · mcpconversation.chat.ts
purge_conversationsconversationsyncagent api mcpschema · api · docs · mcp · unitconversation.purge.ts
rename_conversationconversationsyncagent api mcpschema · api · docs · mcp · unitconversation.rename.ts
list_price_entriescostsyncagent api cli mcpschema · api · mcp · app · unit · docscost.price_entry.list.ts
list_unpriced_modelscostsyncagent api mcpschema · api · mcp · app · unit · docscost.unpriced_model.list.ts
remove_price_entrycostsyncagent api cli mcpschema · api · mcp · cli · app · unit · docscost.price_entry.remove.ts
set_price_entrycostsyncagent api cli mcpschema · api · mcp · cli · app · unit · docscost.price_entry.set.ts
list_credential_grantscredentialsyncagent api mcpschema · api · mcp · unit · docs · appcredential.grant.list.ts
create_environmentenvironmentsyncapi mcpapi · mcp · unit · docsenvironment.create.ts
delete_environmentenvironmentsyncapi mcpapi · mcp · unit · docsenvironment.delete.ts
get_environmentenvironmentsyncapi mcpapi · mcp · unit · docsenvironment.get.ts
list_environmentsenvironmentsyncapi mcpapi · mcp · unit · docsenvironment.list.ts
set_default_environmentenvironmentsyncapi mcpapi · mcp · unit · docsenvironment.set_default.ts
update_environmentenvironmentsyncapi mcpapi · mcp · unit · docsenvironment.update.ts
author_graph_rulegraphsyncapi mcpschema · api · mcp · unit · docs@oxagen/agent or inline
get_graph_statsgraphsyncagent api mcpschema · api · mcp · unit · docsgraph.stats.ts
get_nodegraphsyncagent api cli mcpschema · api · mcp · unit · docsgraph.node.get.ts
get_node_labelsgraphsyncagentschema · unit · docsgraph.node_label.get.ts
list_nodesgraphsyncagent api mcpschema · api · mcp · unit · docsgraph.node.list.ts
search_graphgraphsyncagent api cli mcpschema · api · mcp · unit · docsgraph.search.ts
search_nodesgraphsyncagent api cli mcpschema · api · mcp · unit · docsgraph.node.search.ts
assign_member_roleiamsyncagent api mcpschema · api · mcp · unit · docs · appiam.role.member.assign.ts
create_roleiamsyncagent api mcpschema · api · mcp · unit · docs · appiam.role.create.ts
delete_roleiamsyncagent api mcpschema · api · mcp · unit · docs · appiam.role.delete.ts
list_iam_rolesiamsyncagent api mcpschema · api · mcp · unit · docs · appiam.role.list.ts
set_role_grantsiamsyncagent api mcpschema · api · mcp · unit · docs · appiam.role.grants.set.ts
unassign_member_roleiamsyncagent api mcpschema · api · mcp · unit · docs · appiam.role.member.unassign.ts
configure_integrationintegrationsyncagent api cli mcpschema · api · mcp · unit · docsintegration.configure.ts
delete_integrationintegrationasyncagent api cli mcpschema · api · mcp · unit · docsintegration.delete.ts
get_integrationintegrationsyncagent api cli mcpschema · api · mcp · unit · docsintegration.get.ts
get_integration_metricsintegrationsyncagent api mcpschema · api · mcp · unit · docsintegration.metrics.ts
install_integrationintegrationasyncagent api cli mcpschema · api · mcp · unit · docsintegration.install.ts
list_integrationsintegrationsyncagent api cli mcpschema · api · mcp · unit · docsintegration.list.ts
sync_integrationintegrationasyncagent api cli mcpschema · api · mcp · unit · docsintegration.sync.ts
list_kill_switcheskill_switchsyncagent api mcpschema · api · mcp · unit · docs · appkill_switch.list.ts
set_kill_switchkill_switchsyncagent api mcpschema · api · mcp · unit · docs · appkill_switch.set.ts
get_mandatemandatesyncagent api mcpschema · api · mcp · unit · docs · appmandate.get.ts
grant_mandatemandatesyncagent api mcpschema · api · mcp · unit · docs · appmandate.grant.ts
list_mandatesmandatesyncagent api mcpschema · api · mcp · unit · docs · appmandate.list.ts
request_mandatemandatesyncagent api mcpschema · api · mcp · unit · docs · appmandate.request.ts
revoke_mandatemandatesyncagent api mcpschema · api · mcp · unit · docs · appmandate.revoke.ts
update_mandate_limitsmandatesyncagent api mcpschema · api · mcp · unit · docs · appmandate.limits.update.ts
list_model_capabilitiesmodelsyncagent api mcpapi · mcp · unit · docsmodel.capability.list.ts
list_notificationsnotificationsyncagent api mcpapi · docs · mcp · unit · appnotification.list.ts
mark_notificationnotificationsyncagent api mcpapi · app · docs · mcp · unitnotification.mark.ts
mark_notifications_readnotificationsyncagent api mcpapi · docs · mcp · unit · appnotification.mark_all.ts
advance_onboardingonboardingsyncagent apischema · api · unit · docs · apponboarding.advance.ts
get_first_frameonboardingsyncagent api mcpschema · api · mcp · unit · docs · apponboarding.first_frame.get.ts
get_onboarding_stateonboardingsyncagent api mcpschema · api · mcp · unit · docs · apponboarding.state.get.ts
get_ontology_neighborsontologysyncagent api cli mcpschema · api · mcp · unit · docsontology.neighbors.ts
query_ontologyontologysyncagent api cli mcpschema · api · mcp · unit · docsontology.query.ts
accept_member_inviteorgsyncagent api mcpschema · api · mcp · unit · docs · apporg.member_invite.accept.ts
add_model_credentialorgsyncapischema · api · unit · docs · appmodel-credential.add.ts
add_org_memberorgsyncagent api mcpschema · api · mcp · unit · docsorg.member.add.ts
answer_credential_reauthorgsyncapischema · api · unit · docs · appmodel-credential.reauth.answer.ts
archive_model_tierorgsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appmodel_tier.archive.ts
authorize_slack_connectionorgsyncschema · app · unit · docsorg.slack_connection.authorize.ts
change_member_roleorgsyncagent api mcpapi · docs · mcp · unit · apporg.member_role.change.ts
check_model_credentialorgsyncapi mcpschema · api · mcp · unit · docs · appmodel-credential.check.ts
create_model_tierorgsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appmodel_tier.create.ts
create_orgorgsyncagent api mcpschema · api · mcp · unit · docs · apporg.create.ts
create_scim_tokenorgsyncapischema · api · unit · docs · apporg.scim_token.create.ts
create_sso_providerorgsyncapi mcpschema · api · mcp · unit · docs · apporg.sso.create.ts
create_teamorgsyncagent api mcpschema · api · mcp · unit · docsorg.team.create.ts
decline_member_inviteorgsyncagent api mcpschema · api · mcp · unit · docs · apporg.member_invite.decline.ts
delete_model_credentialorgsyncapi mcpschema · api · mcp · unit · docs · apporg.model_credential.delete.ts
delete_slack_connectionorgsyncschema · app · unit · docsorg.slack_connection.delete.ts
delete_sso_providerorgsyncapi mcpschema · api · mcp · unit · docs · apporg.sso.delete.ts
delete_teamorgsyncagent api mcpschema · api · mcp · unit · docsorg.team.delete.ts
execute_scim_requestorgsyncschema · unit · docsscim.request.ts
get_credential_reauthorgsyncapischema · api · unit · docs · appmodel-credential.reauth.get.ts
get_data_planeorgsyncagent api mcpschema · api · mcp · unit · docs · apporg.data_plane.get.ts
get_model_credentialorgsyncagent api mcpschema · api · mcp · unit · docs · apporg.model_credential.get.ts
get_org_settingsorgsyncapi mcpschema · api · mcp · unit · docsorg.settings.read.ts
get_slack_connectionorgsyncschema · app · unit · docsorg.slack_connection.get.ts
list_membersorgsyncagent api mcpschema · api · mcp · unit · docs · appworkspace.member.list.ts
list_model_credentialsorgsyncapi mcpschema · api · mcp · unit · docs · appmodel-credential.list.ts
list_model_tiersorgsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appmodel_tier.list.ts
list_orgsorgsyncagent api mcpschema · api · mcp · unit · docs · apporg.list.ts
list_slack_channelsorgsyncschema · app · unit · docsorg.slack_channels.list.ts
list_sso_providersorgsyncapi mcpschema · api · mcp · unit · docs · apporg.sso.list.ts
list_teamsorgsyncagent api mcpschema · api · mcp · unit · docsorg.team.list.ts
remove_model_credentialorgsyncapi mcpschema · api · mcp · unit · docs · appmodel-credential.remove.ts
remove_org_memberorgsyncagent api mcpapi · docs · mcp · unit · apporg.member.remove.ts
resend_member_inviteorgsyncagent api mcpschema · api · mcp · docs · apporg.member_invite.resend.ts
revoke_member_inviteorgsyncagent api mcpschema · api · mcp · docs · apporg.member_invite.revoke.ts
revoke_scim_tokenorgsyncapi mcpschema · api · mcp · unit · docs · apporg.scim_token.revoke.ts
rotate_model_credentialorgsyncapischema · api · unit · docs · appmodel-credential.rotate.ts
rotate_scim_tokenorgsyncapischema · api · unit · docs · apporg.scim_token.rotate.ts
set_data_planeorgsyncapi mcpschema · api · mcp · unit · docsorg.data_plane.set.ts
set_model_credentialorgsyncapi mcpschema · api · mcp · unit · docs · apporg.model_credential.set.ts
set_model_tier_modelorgsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appmodel_tier.model.set.ts
set_slack_channelorgsyncschema · app · unit · docsorg.slack_channel.set.ts
set_sso_group_rolesorgsyncapi mcpschema · api · mcp · unit · docs · apporg.sso.group_roles.set.ts
set_sso_policyorgsyncapi mcpschema · api · mcp · unit · docs · apporg.sso.policy.set.ts
set_team_membersorgsyncagent api mcpschema · api · mcp · unit · docsorg.team.members.set.ts
start_credential_reauthorgsyncapischema · api · unit · docs · appmodel-credential.reauth.start.ts
start_slack_connectionorgsyncschema · app · unit · docsorg.slack_connection.start.ts
update_model_credentialorgsyncapi mcpschema · api · mcp · unit · docs · appmodel-credential.update.ts
update_model_tierorgsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appmodel_tier.update.ts
update_org_settingsorgsyncagent api mcpschema · api · mcp · unit · docs · apporg.settings.write.ts
update_sso_providerorgsyncapi mcpschema · api · mcp · unit · docs · apporg.sso.update.ts
verify_model_credentialorgsyncapi mcpschema · api · mcp · unit · docs · apporg.model_credential.verify.ts
verify_sso_domainorgsyncapi mcpschema · api · mcp · unit · docs · apporg.sso.verify_domain.ts
add_plugin_registrypluginsyncapi mcpapi · docs · mcp · unitplugin.registry.add.ts
browse_plugin_catalogpluginsyncapi mcpapi · docs · mcp · unitplugin.catalog.browse.ts
get_auth_alertspluginsyncapi mcpapi · docs · mcp · unitplugin.settings.get_auth_alerts.ts
get_catalog_pluginpluginsyncapi mcpapi · docs · mcp · unitplugin.catalog.get.ts
get_plugin_schemapluginsyncapi mcpschema · api · mcp · unit · docsplugin.schema.get.ts
install_pluginpluginsyncapi mcpapi · docs · mcp · unitplugin.org.install.ts
install_plugins_bulkpluginsyncapi mcpapi · docs · mcp · unitplugin.org.install_bulk.ts
list_plugin_registriespluginsyncapi mcpapi · docs · mcp · unitplugin.registry.list.ts
list_plugin_versionspluginsyncapi mcpschema · api · mcp · unit · docsplugin.version.list.ts
list_pluginspluginsyncapi mcpapi · docs · mcp · unitplugin.org.list.ts
reauth_plugin_credentialpluginsyncapi mcpapi · docs · mcp · unitplugin.credential.reauth.ts
remove_plugin_registrypluginsyncapi mcpapi · docs · mcp · unitplugin.registry.remove.ts
revoke_plugin_credentialpluginsyncapi mcpapi · docs · mcp · unitplugin.credential.revoke.ts
set_auth_alertspluginsyncapi mcpapi · docs · mcp · unitplugin.settings.set_auth_alerts.ts
set_plugin_enabledpluginsyncapi mcpapi · docs · mcp · unitplugin.set_enabled.ts
set_plugin_secretpluginsyncapi mcpapi · docs · mcp · unitplugin.credential.set_secret.ts
sync_plugin_catalogpluginsyncapi mcpapi · mcp · unit · docsplugin.catalog.sync.handler.ts
uninstall_pluginpluginsyncapi mcpapi · docs · mcp · unitplugin.org.uninstall.ts
validate_plugin_schemapluginsyncapi mcpschema · api · mcp · unit · docsplugin.schema.validate.ts
erase_dataprivacyasyncagent api mcpschema · api · mcp · unit · docsprivacy.data.erase.ts
export_dataprivacyasyncagent api mcpschema · api · mcp · unit · docs · appprivacy.data.export.ts
get_export_statusprivacysyncagent api mcpschema · api · mcp · unit · docs · appprivacy.data.export.status.ts
search_referencesreferencesyncagent api mcpschema · api · mcp · docsreference.search.ts
configure_reporeposyncagent api cli mcpschema · api · mcp · unit · docsrepo.configure.ts
get_ci_statusreposyncagent api mcpapi · mcp · docsrepo.ci.status.ts
get_prreposyncagent api mcpapi · mcp · docsrepo.pr.get.ts
get_pr_diffreposyncagent api mcpapi · mcp · docsrepo.pr.diff.ts
get_repo_metricsreposyncagent api mcpschema · api · mcp · unit · docsrepo.metrics.ts
list_branchesreposyncapi mcpapi · mcp · unitrepo.branch.list.ts
pause_reporeposyncagent api cli mcpschema · api · mcp · unit · docsrepo.pause.ts
resume_reporeposyncagent api cli mcpschema · api · mcp · unit · docsrepo.resume.ts
sync_reporepoasyncagent api cli mcpschema · api · mcp · unit · docsrepo.sync.ts
attach_github_installationrepositorysyncapischema · api · unit · docs · apprepository.installation.attach.ts
attach_gitlab_projectrepositorysyncapischema · api · unit · docsrepository.gitlab.attach.ts
get_main_repositoryrepositorysyncagent api mcpschema · api · mcp · unit · docs · apprepository.main.get.ts
get_repository_treerepositorysyncagent api cli mcpschema · api · mcp · docs · apprepository.tree.get.ts
get_steering_reporepositorysyncagent api mcpschema · api · mcp · unit · docs · appsteering_repo.read.ts
import_repository_configrepositorysyncapi mcpschema · api · mcp · docs · apprepository.config.import.ts
import_workspace_steeringrepositorysyncapi mcpschema · api · mcp · unit · docs · appsteering_repo.import.ts
link_repositoryrepositorysyncagent api cli mcpschema · api · mcp · unit · docs · apprepository.link.ts
list_ci_runsrepositorysyncagent api mcpschema · api · mcp · unit · docs · appforge.ci_runs.list.ts
list_code_repository_findingsrepositorysyncagent api cli mcpschema · api · mcp · cli · unit · docs · appcode-repo-check/handlers.ts
list_defectsrepositorysyncagent api mcpschema · api · mcp · unit · docsforge.defects.list.ts
list_forge_pull_requestsrepositorysyncagent api mcpschema · api · mcp · unit · docs · appforge.pull_requests.list.ts
list_github_installationsrepositorysyncagent api mcpschema · api · mcp · unit · docs · apprepository.installation.candidates.ts
list_installation_repositoriesrepositorysyncagent api mcpschema · api · mcp · unit · docs · apprepository.installation.list.ts
list_org_installation_repositoriesrepositorysyncagent api mcpschema · api · mcp · unit · docs · apprepository.org_installation.list.ts
list_repositoriesrepositorysyncagent api cli mcpschema · api · mcp · docs · apprepository.list.ts
list_review_findingsrepositorysyncagent api mcpschema · api · mcp · unit · docsforge.review_findings.list.ts
list_steering_repo_destinationsrepositorysyncagent api mcpschema · api · mcp · unit · docs · appsteering_repo.destinations.list.ts
list_working_copiesrepositorysyncagent api mcpschema · api · mcp · unit · docs · apprepository.working_copy.list.ts
open_init_prrepositorysyncagent api cli mcpschema · api · mcp · docsrepository.init_pr.open.ts
parse_repository_configrepositorysyncapi mcpschema · api · mcp · unit · docs · apprepository.config.parse.ts
promote_instruction_to_steeringrepositorysyncagent api cli mcpschema · api · mcp · cli · unit · docs · appcode-repo-check/handlers.ts
record_working_copyrepositorysyncapi cli mcpschema · api · cli · unit · docs · mcprepository.working_copy.record.ts
repair_steering_reporepositorysyncagent api mcpschema · api · mcp · unit · docs · appsteering_repo.repair.ts
retry_steering_repo_provisionrepositorysyncagent apischema · api · unit · docs · appsteering_repo.provision.retry.ts
scan_repository_configrepositorysyncagent api cli mcpschema · api · mcp · cli · unit · docsrepository.config.scan.ts
set_defect_originrepositorysyncagent api mcpschema · api · mcp · unit · docsforge.defect_origin.set.ts
set_production_branchrepositorysyncagent api cli mcpschema · api · mcp · docs · apprepository.production_branch.set.ts
set_workspace_repositoriesrepositorysyncagent api mcpschema · api · mcp · unit · docs · appworkspace.repositories.set.ts
unlink_repositoryrepositorysyncagent api cli mcpschema · api · mcp · docs · apprepository.unlink.ts
get_routing_policyroutersyncagent api cli mcpschema · api · mcp · docsrouter.policy.get.ts
preview_routing_decisionroutersyncapi cli mcpschema · api · mcp · docsrouter.decision.preview.ts
set_routing_policyroutersyncagent api cli mcpschema · api · mcp · docsrouter.policy.set.ts
authorize_issue_providerrunsyncapi mcpschema · api · docs · mcprun.issue.authorization.complete.ts
edit_runrunsyncagent api mcpschema · api · mcp · unit · docs · apprun.edit.ts
export_runrunasyncagent api mcpschema · api · unit · docs · app · mcprun.export.ts
get_change_setrunsyncagent api mcpschema · api · mcp · unit · docs · appforge.changes.get.ts
get_commit_diffrunsyncagent api mcpschema · api · mcp · unit · docs · appforge.commit.diff.get.ts
get_revision_diffrunsyncagent api mcpschema · api · mcp · unit · docs · appforge.revision.diff.get.ts
get_runrunsyncagent api cli mcpschema · api · mcp · cli · unit · docs · apprun.get.ts
get_run_chainrunsyncagent api cli mcpschema · api · mcp · cli · unit · docs · apprun.chain.get.ts
get_run_contextrunsyncagent api cli mcpschema · api · mcp · cli · unit · docs · apprun.context.get.ts
get_run_costrunsyncagent api mcpschema · api · mcp · unit · docs · apprun.cost.ts
get_run_exportrunsyncagent api cli mcpschema · api · mcp · cli · unit · docs · apprun.export.get.ts
get_run_frame_bodyrunsyncagent api mcpschema · api · mcp · unit · docs · apprun.frame_body.get.ts
get_run_issue_providersrunsyncagent api mcpschema · api · docs · mcprun.issue.providers.get.ts
get_run_issuesrunsyncagent api mcpschema · api · mcp · app · unit · docsrun.issues.get.ts
get_run_outputsrunsyncagent api mcpschema · api · unit · docs · mcprun.outputs.get.ts
get_run_reportrunsyncagent api mcpschema · api · mcp · unit · docsrun.report.get.ts
get_run_tasksrunsyncagent api mcpschema · api · mcp · unit · docs · apprun.tasks.get.ts
get_run_transcriptrunsyncagent api cli mcpschema · api · mcp · cli · unit · docs · apprun.transcript.get.ts
get_run_turnsrunsyncagent api cli mcpschema · api · mcp · cli · unit · docsrun.turns.get.ts
get_run_workrunsyncagent api mcpschema · api · app · docs · mcprun.work.get.ts
list_recent_runsrunsyncagent api mcpschema · api · mcp · unit · docsrun.recent.list.ts
list_run_commitsrunsyncagent api mcpschema · api · mcp · unit · docsforge.run.commits.list.ts
list_runsrunsyncagent api cli mcpschema · api · mcp · cli · unit · docs · apprun.list.ts
list_sensitive_detectionsrunsyncagent api mcpschema · api · mcp · unit · docsrun.sensitive_detections.ts
post_run_checkpointrunsyncapi mcpschema · api · mcp · docsrun.checkpoint.post.ts
seal_runrunsyncagent api mcpschema · api · mcp · unit · docs · apprun.seal.ts
set_run_classificationrunsyncagent api mcpschema · api · mcp · unit · docs · apprun.classification.set.ts
start_issue_authorizationrunsyncapi mcpschema · api · docs · mcprun.issue.authorization.begin.ts
summarize_runrunasyncagent api mcpschema · api · unit · docs · app · mcprun.summarize.ts
check_sandbox_templateruntimesyncapi cli mcpschema · api · mcp · cli · unit · docs · appsandbox-template.test-build.ts
connect_modal_accountruntimesyncapi mcpschema · api · mcp · unit · docs · appmodal-account.connect.ts
create_runtimeruntimesyncagent api cli mcpschema · api · mcp · cli · unit · docs · appruntime.create.ts
create_sandbox_runtimeruntimesyncapi cli mcpschema · api · mcp · cli · unit · docs · appsandbox-runtime.create.ts
delete_runtimeruntimesyncagent api cli mcpschema · api · mcp · cli · unit · docs · appruntime.delete.ts
disconnect_modal_accountruntimesyncapi mcpschema · api · mcp · docs · appmodal-account.disconnect.ts
generate_sandbox_templateruntimesyncapi cli mcpschema · api · mcp · cli · unit · docs · appsandbox-template.generate.ts
get_modal_accountruntimesyncapi mcpschema · api · mcp · docs · appmodal-account.get.ts
get_sandbox_runruntimesyncapi cli mcpschema · api · mcp · cli · unit · docs · appsandbox-run.get.ts
get_sandbox_template_build_logruntimesyncapi cli mcpschema · api · mcp · cli · docs · appsandbox-template.build-log.get.ts
get_sandbox_template_testruntimesyncapi cli mcpschema · api · mcp · cli · unit · docs · appsandbox-template.test-build.get.ts
launch_sandbox_runruntimesyncapi cli mcpschema · api · mcp · cli · unit · docs · appsandbox-run.launch.ts
list_runtimesruntimesyncagent api cli mcpschema · api · mcp · cli · unit · docs · appruntime.list.ts
list_sandbox_runsruntimesyncapi cli mcpschema · api · mcp · cli · unit · docs · appsandbox-run.list.ts
list_sandbox_runtimesruntimesyncapi cli mcpschema · api · mcp · cli · unit · docs · appsandbox-runtime.list.ts
open_run_terminalruntimesyncapi clischema · api · cli · unit · docs · apprun-terminal.open.ts
setup_sandbox_runtimeruntimesyncapi cli mcpschema · api · mcp · cli · unit · docssandbox-runtime.setup.ts
start_sandbox_reviewruntimesyncapi cli mcpschema · api · mcp · cli · docssandbox-run.review.ts
stop_sandbox_runruntimesyncapi cli mcpschema · api · mcp · cli · unit · docs · appsandbox-run.stop.ts
update_runtimeruntimesyncagent api cli mcpschema · api · mcp · cli · unit · docs · appruntime.update.ts
update_sandbox_runtimeruntimesyncapi cli mcpschema · api · mcp · cli · unit · docs · appsandbox-runtime.update.ts
create_schema_versionschemasyncapi cli mcpschema · api · mcp · docsschema.version.create.ts
delete_schemaschemasyncagentschema · docsschema.delete.ts
delete_schema_labelschemasyncapi cli mcpschema · api · mcp · docsschema.label.delete.ts
delete_schema_propertyschemasyncapi cli mcpschema · api · mcp · docsschema.property.delete.ts
delete_schema_relationshipschemasyncapi cli mcpschema · api · mcp · docsschema.relationship.delete.ts
diff_schema_versionsschemasyncapi cli mcpschema · api · mcp · docsschema.version.diff.ts
dispatch_schema_reconcileschemaasyncapi cli mcpschema · api · mcp · docsschema.reconcile.dispatch.ts
export_schemaschemasyncapi cli mcpschema · api · mcp · docsschema.export.ts
get_reconcile_statusschemasyncapi cli mcpschema · api · mcp · docsschema.reconcile.status.ts
get_registry_configschemasyncapi cli mcpschema · api · mcp · docsschema.registry.config.ts
get_schema_registryschemasyncapi cli mcpschema · api · mcp · docsschema.registry.get.ts
list_schema_versionsschemasyncapi cli mcpschema · api · mcp · docsschema.version.list.ts
list_schemasschemasyncagent api cli mcpschema · api · mcp · docsschema.list.ts
pin_schema_versionschemasyncapi cli mcpschema · api · mcp · docsschema.version.pin.ts
recommend_schemaschemasyncagent api cli mcpschema · api · mcp · docsschema.recommend.ts
run_schema_chatschemasyncagent apischema · api · docsschema.chat.ts
setup_schemaschemasyncagent api cli mcpschema · api · mcp · docsschema.setup.ts
toggle_schemaschemasyncapi cli mcpschema · api · mcp · docsschema.toggle.ts
upsert_schema_labelschemasyncagent api cli mcpschema · api · mcp · docsschema.label.upsert.ts
upsert_schema_propertyschemasyncagent api cli mcpschema · api · mcp · docsschema.property.upsert.ts
upsert_schema_relationshipschemasyncagent api cli mcpschema · api · mcp · docsschema.relationship.upsert.ts
validate_schema_nodeschemasyncagent api cli mcpschema · api · mcp · docsschema.validate.node.ts
validate_schema_relationshipschemasyncagent api cli mcpschema · api · mcp · docsschema.validate.relationship.ts
delete_secret_keysecretsyncagent api mcpapi · mcp · unit · docssecret.key.delete.ts
export_secretssecretsyncapi mcpapi · mcp · unit · docssecret.export.ts
import_env_secretssecretsyncapi mcpapi · mcp · unit · docssecret.import_env.ts
list_secret_keyssecretsyncagent api mcpapi · mcp · unit · docssecret.key.list.ts
reveal_secretsecretsyncapi mcpapi · mcp · unit · docssecret.reveal.ts
set_secret_valuesecretsyncagent api mcpapi · mcp · unit · docssecret.value.set.ts
unset_secret_valuesecretsyncagent api mcpapi · mcp · unit · docssecret.value.unset.ts
upsert_secret_keysecretsyncagent api mcpapi · mcp · unit · docssecret.key.upsert.ts
get_nav_countsshellsyncagent api mcpschema · api · mcp · unit · docs · appshell.nav_counts.get.ts
get_skill_configskillsyncagent api mcpschema · api · mcp · docsskill.config.get.ts
get_skill_registryskillsyncagent api mcpschema · api · mcp · unit · docs · appskill.registry.get.ts
list_skill_impactskillsyncagent api mcpschema · api · mcp · unit · docs · appskill.impact.list.ts
list_skillsskillsyncagent api mcpschema · api · mcp · unit · docsskill.list.ts
preview_skill_searchskillsyncapischema · api · docsskill.search.preview.ts
propose_skillskillsyncagent apischema · api · unit · docs · appskill.propose.ts
read_registry_skillskillsyncagent api mcpschema · api · mcp · unit · docs · appskill.registry.read.ts
search_skill_registryskillsyncagent api mcpschema · api · mcp · unit · docs · appskill.registry.search.ts
set_skill_registryskillsyncagent api mcpschema · api · mcp · unit · docs · appskill.registry.set.ts
summarize_skill_searchskillsyncmcpschema · mcp · docsskill.search.summarize.ts
update_skill_configskillsyncagent api mcpschema · api · mcp · unit · docsskill.config.update.ts
answer_finding_fixspendsyncapi mcpschema · api · mcp · unit · docs · appfinding.fix.answer.ts
create_cost_centerspendsyncagent api mcpschema · api · mcp · unit · docs · appcost_center.create.ts
delete_cost_centerspendsyncagent api mcpschema · api · mcp · unit · docs · appcost_center.delete.ts
dismiss_findingspendsyncapi mcpschema · api · mcp · unit · docs · appfinding.dismiss.ts
export_cost_center_statementspendsyncagent api mcpschema · api · mcp · unit · docs · appspend.cost_center_statement.export.ts
export_spendspendsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appspend.export.ts
export_statementspendsyncagent api mcpschema · api · mcp · unit · docs · appspend.statement.export.ts
get_change_effortspendsyncagent api mcpschema · api · mcp · unit · docsforge.change_effort.get.ts
get_code_sharespendsyncagent api mcpschema · api · mcp · unit · docs · appspend.code_share.ts
get_context_qualityspendsyncagent apischema · api · unit · docs · appspend.context_quality.ts
get_finding_evidencespendsyncagent api mcpschema · api · mcp · unit · docs · appfinding.evidence.get.ts
get_finding_fixspendsyncapi mcpschema · api · mcp · unit · docs · appfinding.fix.get.ts
get_model_class_replayspendsyncagent api mcpschema · api · mcp · unit · docs · appfinding.model_class_replay.get.ts
get_no_progress_limitspendsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appspend.no_progress_limit.get.ts
get_operator_rankingspendsyncagent apischema · api · unit · docs · appspend.operator_ranking.ts
get_operator_scorecardspendsyncagent api mcpschema · api · mcp · unit · docsspend.operator_scorecard.ts
get_run_rollupspendsyncagent api mcpschema · api · mcp · unit · docs · appspend.run_rollup.ts
get_sandbox_spendspendsyncapi mcpschema · api · mcp · unit · docsspend.sandbox.get.ts
get_spendspendsyncagent api mcpschema · api · mcp · unit · docs · appspend.get.ts
get_spend_attributionspendsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appspend.attribution.ts
get_spend_drillspendsyncagent api mcpschema · api · mcp · unit · docs · appspend.drill.ts
get_spend_model_fitspendsyncagent apischema · api · unit · docs · appspend.model_fit.ts
get_spend_per_merged_prspendsyncagent apischema · api · unit · docs · appspend.per_merged_pr.ts
get_status_summaryspendsyncagent api cli mcpschema · api · mcp · cli · docs · appstatus.summary.ts
get_unproductive_spendspendsyncagent apischema · api · unit · docs · appspend.unproductive.ts
get_work_order_metricsspendsyncagent apischema · api · unit · docsspend.work_order_metrics.ts
list_cost_centersspendsyncagent api mcpschema · api · mcp · unit · docs · appcost_center.list.ts
list_finding_callsspendsyncapi mcpschema · api · mcp · unit · docs · appfinding.calls.list.ts
list_findingsspendsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appfinding.list.ts
list_run_factsspendsyncagent api mcpschema · api · mcp · unit · docsspend.run_facts.ts
list_wastespendsyncagent api mcpschema · api · mcp · unit · docs · appspend.waste.ts
record_finding_fixspendsyncagent api mcpschema · api · mcp · unit · docsfinding.fix.record.ts
request_model_class_replayspendsyncapi mcpschema · api · mcp · unit · docs · appfinding.model_class_replay.request.ts
set_cost_centerspendsyncagent api mcpschema · api · mcp · unit · docs · appcost_center.set.ts
set_no_progress_limitspendsyncagent api cli mcpschema · api · mcp · cli · unit · docs · appspend.no_progress_limit.set.ts
get_install_instructionssystemsyncagent api mcpschema · api · mcp · unit · docs · appsystem.install.instructions.ts
add_group_machinetachosyncschema · unit · docsmcp-studio/local-calls/machine-group.add.ts
create_enrollment_tokentachosyncapi cli mcpschema · api · cli · unit · docs · app · mcptacho.enrollment_token.create.ts
create_github_tokentachosyncapischema · api · unit · docstacho.github_token.issue.ts
create_tacho_enrollmenttachosyncapischema · api · unit · docstacho.enrollment.create.ts
enroll_hosttachosyncapi cli mcpschema · api · unit · docs · mcptacho.host.enroll.ts
enroll_sandbox_daemontachosyncapischema · api · docssandbox-daemon.enroll.ts
get_enrollment_keystachosyncapischema · api · docsenrollment.keys.get.ts
get_enrollment_requesttachosyncapi mcpschema · api · unit · docs · mcpenrollment.request.get.ts
get_tacho_bundletachosyncapischema · api · unit · docstacho.bundle.get.ts
get_tacho_sessiontachosyncapischema · api · unit · docstacho.session.get.ts
get_tacho_session_policytachosyncagent api mcpschema · api · docs · mcp · unit · apptacho.session_policy.read.ts
ingest_tacho_eventstachosyncapischema · api · unit · docstacho.events.ingest.ts
ingest_tacho_memoriestachosyncapischema · api · unit · docstacho.memories.ingest.ts
list_host_model_credentialstachosyncapischema · api · unit · docstacho.host_model_credential.list.ts
list_incidentstachosyncagent api mcpschema · api · mcp · unit · docs · apptacho.incident.list.ts
list_machine_groupstachosyncschema · unit · docsmcp-studio/local-calls/machine-group.list.ts
list_tacho_hoststachosyncagent api cli mcpschema · api · mcp · cli · unit · docs · apptacho.host.list.ts
list_tacho_session_headstachosyncapischema · api · unit · docstacho.session_heads.list.ts
list_tacho_sessionstachosyncapischema · api · unit · docstacho.session.list.ts
preview_enrollment_requesttachosyncapischema · api · unit · docsenrollment.request.preview.ts
recall_tacho_memoriestachosyncapischema · api · unit · docstacho.memories.recall.ts
record_host_model_credential_statetachosyncapischema · api · unit · docstacho.host_model_credential.report.ts
record_tacho_memory_usestachosyncapischema · api · unit · docstacho.memories.uses.record.ts
register_contained_launchtachosyncapischema · api · unit · docstacho.contained_launch.register.ts
register_machinetachosyncapi cli mcpschema · api · mcp · cli · unit · docsmachine.register.ts
reject_enrollment_requesttachosyncapischema · api · unit · docsenrollment.request.reject.ts
remove_group_machinetachosyncschema · unit · docsmcp-studio/local-calls/machine-group.remove.ts
render_tacho_steeringtachosyncapischema · api · unit · docstacho.steering.render.ts
renew_enrollment_certificatetachosyncapischema · api · docsenrollment.certificate.renew.ts
revoke_tacho_enrollmenttachosyncagent api cli mcpschema · api · mcp · cli · unit · docs · apptacho.enrollment.revoke.ts
update_tacho_session_policytachosyncagent api mcpschema · api · docs · mcp · unit · apptacho.session_policy.write.ts
create_stella_enrollmenttelemetrysyncapischema · apitelemetry.stella.enroll.ts
ingest_stella_operational_telemetrytelemetrysyncapischema · api · unit · docstelemetry.stella.ingest.ts
list_error_clusterstelemetrysyncagent api mcpschema · api · mcp · unit · docstelemetry.error.cluster.ts
approve_observed_schematoolsyncapi cli mcpschema · api · mcp · cli · unit · docs · apptool.observed_schema.approve.ts
create_relaytoolsyncapischema · api · unit · docsmcp-studio/relays/create.ts
draft_studio_descriptiontoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/import/description.draft.ts
get_studio_discoverytoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/discovery/discovery.get.ts
get_studio_drafttoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/import/draft.get.ts
get_studio_listingtoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/listing/listing.get.ts
get_studio_servertoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/discovery/server.get.ts
import_toolstoolsyncagent api mcpschema · api · mcp · unit · docs · apptool.import.ts
list_studio_findingstoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/import/findings.list.ts
list_studio_toolstoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/discovery/tools.list.ts
list_tool_declarationstoolsyncagent api mcpschema · api · docs · mcp · unittool.declaration.list.ts
list_tool_versionstoolsyncagent api mcpschema · api · mcp · unit · docs · apptool.version.list.ts
migrate_tools_to_steeringtoolsyncapi cli mcpschema · api · mcp · cli · unit · docstool.steering.migrate.ts
open_studio_reviewtoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/import/review.open.ts
publish_tool_declarationtoolsyncapischema · api · docs · unittool.declaration.publish.ts
revoke_relaytoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/relays/revoke.ts
run_studio_selectiontoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/selection/run.ts
save_studio_drafttoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/import/draft.save.ts
set_mcp_credentialtoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/credentials/set.ts
set_tool_classificationtoolsyncagent api mcpschema · api · mcp · unit · docs · apptool.classification.set.ts
set_tool_statetoolsyncagent api mcpschema · api · mcp · unit · docs · apptool.state.set.ts
start_studio_discoverytoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/discovery/discovery.start.ts
start_studio_listingtoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/listing/listing.start.ts
try_studio_tooltoolsyncapi mcpschema · api · mcp · unit · docsmcp-studio/import/tool.try.ports.ts
clone_toolbelttoolbeltsyncagent api mcpschema · api · mcp · unit · docs · apptoolbelt.clone.ts
delete_toolbelttoolbeltsyncagent api mcpschema · api · mcp · unit · docs · apptoolbelt.delete.ts
get_toolbelttoolbeltsyncagent api mcpschema · api · mcp · unit · docs · apptoolbelt.get.ts
list_toolbeltstoolbeltsyncagent api mcpschema · api · mcp · unit · docs · apptoolbelt.list.ts
update_toolbelttoolbeltsyncagent api mcpschema · api · mcp · unit · docs · apptoolbelt.update.ts
load_toolstoolssyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
search_toolstoolssyncagent api mcpschema · api · mcp · unit · docs · app@oxagen/agent or inline
get_user_preferencesusersyncagent api mcpschema · api · docs · mcp · unit · appuser.preferences.read.ts
get_workspace_user_preferencesusersyncagent api mcpschema · api · docs · mcp · unituser.workspace_preferences.read.ts
set_preferencesusersyncagent api mcpschema · api · mcp · unit · docs · appuser.preferences.set.ts
update_profileusersyncagent apischema · api · unit · docs · appuser.profile.update.ts
update_workspace_user_preferencesusersyncapischema · api · docs · unituser.workspace_preferences.write.ts
accept_work_orderworksyncapi mcpschema · api · unit · docs · app · mcpwork.order.accept.ts
add_work_itemsworksyncagent api mcpschema · api · mcp · unit · docswork.items.add.ts
approve_definition_of_doneworksyncapi mcpschema · api · unit · docs · app · mcpwork.dod.approve.ts
archive_work_labelworksyncapi mcpschema · api · docs · app · mcpwork.label.change.ts
cancel_work_orderworksyncapi mcpschema · api · unit · docs · app · mcpwork.order.cancel.ts
claim_work_criterionworksyncapi mcpschema · api · mcp · unit · docswork.criterion.claim.ts
claim_work_orderworksyncapischema · api · unit · docswork.order.claim.ts
classify_taskworksyncagent api mcpschema · api · mcp · unit · docswork.task.classify.ts
close_work_itemworksyncagent api mcpschema · api · unit · docs · app · mcpwork.item.close.ts
comment_on_source_issueworksyncagent api mcpschema · api · docs · mcpwork.item.source_comment.ts
create_work_itemworksyncagent api mcpschema · api · mcp · unit · docs · appwork.item.create.ts
decline_work_item_startworksyncagent api mcpschema · api · unit · docs · app · mcpwork.item.start.decline.ts
delete_work_itemsworksyncagent api mcpschema · api · mcp · unit · docswork.items.delete.ts
delete_work_labelworksyncapi mcpschema · api · docs · app · mcpwork.label.change.ts
delete_work_statusworksyncapi mcpschema · api · unit · docs · app · mcpwork.status.delete.ts
draft_work_batchworksyncagent api mcpschema · api · mcp · unit · docswork.batch.draft.ts
draft_work_labelworksyncapi mcpschema · api · unit · docs · app · mcpstella/draft-work-label.ts
draft_work_orderworksyncagent api mcpschema · api · mcp · unit · docswork.order.draft.ts
draft_work_statusworksyncapi mcpschema · api · unit · docs · app · mcpstella/draft-work-status.ts
draft_work_triage_answersworksyncmcpschema · mcp · unit · docs · appwork.triage.draft_answers.ts
forecast_work_costworksyncagent api mcpschema · api · mcp · unit · docs · appwork.cost.forecast.ts
get_my_work_statsworksyncmcpschema · mcp · unit · docs · appwork.stats.mine.ts
get_work_arrivalsworksyncmcpschema · mcp · unit · docs · appwork.arrivals.get.ts
get_work_autonomyworksyncapi mcpschema · api · mcp · unit · docs · appwork.autonomy.get.ts
get_work_batchworksyncapi mcpschema · api · unit · docs · app · mcpwork.orders.get.ts
get_work_fieldsworksyncapi mcpschema · api · mcp · unit · docs · appwork.fields.get.ts
get_work_itemworksyncagent api mcpschema · api · mcp · unit · docs · appwork.item.get.ts
get_work_outcomesworksyncapi mcpschema · api · unit · docs · app · mcpwork.outcomes.get.ts
get_work_prioritiesworksyncapi mcpschema · api · mcp · unit · docs · appwork.priorities.get.ts
link_run_work_itemsworksyncagent mcpschema · mcp · unit · docsrun.work_items.link.ts
list_collector_scope_optionsworksyncapi mcpschema · api · docs · mcpwork.collector.scope_options.list.ts
list_ready_workworksyncagent api mcpschema · api · mcp · unit · docs · appwork.ready.list.ts
list_run_link_suggestionsworksyncagent api mcpschema · api · mcp · docsrun.link_suggestions.list.ts
list_work_collectorsworksyncapi mcpschema · api · mcp · unit · docs · appwork.collectors.list.ts
list_work_itemsworksyncagent api mcpschema · api · mcp · unit · docs · appwork.items.list.ts
list_work_labelsworksyncapi mcpschema · api · mcp · unit · docs · appwork.labels.list.ts
list_work_sourcesworksyncapi mcpschema · api · unit · docs · app · mcpwork.sources.list.ts
list_work_statusesworksyncapi mcpschema · api · mcp · unit · docs · appwork.statuses.list.ts
list_work_targetsworksyncagent api mcpschema · api · unit · docs · app · mcpwork.targets.list.ts
list_workstreamsworksyncagent api mcpschema · api · docs · mcpwork.workstreams.list.ts
map_work_collector_labelworksyncapi mcpschema · api · docs · app · mcpwork.label.change.ts
recommend_staffingworksyncagent api cli mcpschema · api · mcp · cli · unit · docs · appwork.staffing.recommend.ts
refresh_work_item_sourceworksyncapi mcpschema · api · unit · docs · app · mcpwork.item.source.refresh.ts
refresh_work_order_checksworksyncapi mcpschema · api · unit · docs · app · mcpwork.order.checks.refresh.ts
reject_work_orderworksyncapischema · api · unit · docswork.order.reject.ts
remove_work_item_attachmentworksyncapi mcpschema · api · unit · docs · app · mcpwork.item.attachment.remove.ts
reopen_work_itemworksyncagent api mcpschema · api · unit · docs · app · mcpwork.item.reopen.ts
resend_work_batch_itemworksyncapi mcpschema · api · docs · app · mcpwork.orders.resend.ts
retriage_open_workworksyncapi mcpschema · api · unit · docs · app · mcpwork.triage.retriage-open.ts
retry_work_item_text_writeworksyncapi mcpschema · api · unit · docs · app · mcpwork.item.text_write.retry.ts
retry_work_item_tracker_createworksyncapi mcpschema · api · unit · docs · app · mcpwork.item.tracker_create.retry.ts
retry_work_triageworksyncagent api mcpschema · api · unit · docs · app · mcpwork.triage.retry.ts
return_work_orderworksyncapi mcpschema · api · unit · docs · app · mcpwork.order.return.ts
review_run_linkworksyncagent api mcpschema · api · mcp · unit · docs · apprun.link.review.ts
revise_work_triageworksyncapi mcpschema · api · mcp · unit · docs · appwork.triage.revise.ts
save_definition_of_doneworksyncapi mcpschema · api · unit · docs · app · mcpwork.dod.save.ts
save_work_labelworksyncapi mcpschema · api · docs · app · mcpwork.label.save.ts
save_work_statusworksyncapi mcpschema · api · unit · docs · app · mcpwork.status.save.ts
search_work_itemsworksyncagent api mcpschema · api · mcp · unit · docs · appwork.items.search.ts
send_work_batchworksyncapi mcpschema · api · unit · docs · app · mcpwork.batch.send.ts
send_work_orderworksyncagent api mcpschema · api · unit · docs · app · mcpwork.order.send.ts
send_work_ordersworksyncapi mcpschema · api · unit · docs · app · mcpwork.orders.send.ts
set_dod_item_doneworksyncapi mcpschema · api · unit · docs · app · mcpwork.dod.item.done.set.ts
set_work_collectorworksyncapi mcpschema · api · unit · docs · app · mcpwork.collector.set.ts
set_work_field_mappingworksyncapi mcpschema · api · unit · docs · app · mcpwork.field_mapping.set.ts
set_work_item_statusworksyncapi mcpschema · api · unit · docs · app · mcpwork.item.status.set.ts
set_work_item_workstreamworksyncagent api mcpschema · api · unit · docs · mcpwork.item.workstream.set.ts
stop_work_orderworksyncapi mcpschema · api · unit · docs · app · mcpwork.order.stop.ts
stop_work_ordersworksyncapi mcpschema · api · unit · docs · app · mcpwork.orders.stop.ts
sync_work_collectorworksyncapi mcpschema · api · unit · docs · app · mcpwork.collector.sync.ts
update_work_itemworksyncagent api mcpschema · api · mcp · unit · docs · appwork.item.update.ts
update_work_itemsworksyncagent api mcpschema · api · mcp · unit · docswork.items.update.ts
upload_work_item_attachmentworksyncapi mcpschema · api · unit · docs · app · mcpwork.item.attachment.upload.ts
add_workspace_memberworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.member.add.ts
answer_join_requestworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.join_request.answer.ts
archive_kindworkspacesyncagent api mcpschema · api · mcp · unit · docs · appkind.change.ts
archive_workspaceworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.archive.ts
connect_workspaceworkspacesyncapi cli mcpschema · api · mcp · cli · docsworkspace.connect.ts
create_workspaceworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.create.ts
delete_kindworkspacesyncagent api mcpschema · api · mcp · unit · docs · appkind.change.ts
draft_kindworkspacesyncagent api mcpschema · api · mcp · unit · docs · appstella/draft-kind.ts
get_gateway_settingsworkspacesyncapi mcpschema · api · mcp · unit · docs · appworkspace.gateway_settings.read.ts
get_model_settingsworkspacesyncagent api mcpschema · api · docs · mcp · unitworkspace.model_settings.read.ts
get_my_join_requestworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.join_request.mine.ts
get_prompt_settingsworkspacesyncapi mcpschema · api · docs · mcp · unitprompt.settings.read.ts
get_steering_settingsworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.steering_settings.get.ts
get_workspace_notificationsworkspacesyncschema · unit · docsworkspace.notifications.read.ts
get_workspace_settingsworkspacesyncapi mcpschema · api · mcp · unit · docs · appworkspace.settings.read.ts
list_join_requestsworkspacesyncagent api mcpschema · api · mcp · unit · docsworkspace.join_request.list.ts
list_kindsworkspacesyncagent api mcpschema · api · mcp · unit · docs · appkinds.list.ts
list_workspace_slack_channelsworkspacesyncschema · unit · docsworkspace.notifications.channels.ts
list_workspacesworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.list.ts
remove_workspace_memberworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.member.remove.ts
request_to_join_workspaceworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.join_request.create.ts
restore_kindworkspacesyncagent api mcpschema · api · mcp · unit · docs · appkind.change.ts
save_kindworkspacesyncagent api mcpschema · api · mcp · unit · docs · appkind.change.ts
send_workspace_inviteworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.invite.send.ts
set_governance_modeworkspacesyncagent api cli mcpschema · api · mcp · cli · unit · docs · appcontext.governance_mode.set.ts
set_steering_settingsworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.steering_settings.set.ts
set_workspace_member_roleworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.member_role.set.ts
set_workspace_notificationsworkspacesyncschema · unit · docsworkspace.notifications.write.ts
update_gateway_settingsworkspacesyncapi mcpschema · api · mcp · unit · docs · appworkspace.gateway_settings.write.ts
update_model_settingsworkspacesyncagent api mcpschema · api · docs · mcp · unitworkspace.model_settings.write.ts
update_prompt_settingsworkspacesyncapi mcpschema · api · docs · mcp · unitprompt.settings.write.ts
update_workspace_settingsworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.settings.write.ts
withdraw_join_requestworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.join_request.withdraw.ts

The governed turn

The repo's one agent loop is runGovernedTurn on stella-serve. Its main caller is the in-app assistant, a governed, metered Q&A turn over the fleet record and the knowledge graph. Run enrichment also calls it for a one-step, tool-less account of a recorded run. Every completion and tool call comes back to Oxagen to answer.

The governed turn (in-app assistant)

Funding is decided before the credit gate, the turn is a recorded session before the engine is asked, the loop runs on stella-serve over loopback with no fallback, and every completion and tool call comes back to Oxagen to answer.ClientSSE consumerchat.streamapps/api SSE adapterkernel.invokeask_assistantassistant-turn.ts · @oxagen/agentrunGovernedTurn@oxagen/agentstella-serveloopback :4300@oxagen/aiprovider portPostgresAurora / local :5433ClickHousetelemetry1POST /v1/:org/:ws/chat/stream2invoke('ask_assistant', { conversationId, content, pageContext })surface 'api' · IAM and audit · no workspace rules (inAppAssistant) · noBillingGate3prepareAssistantTurnresolveActingUserId → assertOrgRole → kill switch; an API key asks as its creator4resolveModelFundingSource(orgId)BYOK credential or platform key, decided first (ADR-053 §2)5evaluateTurnCreditGate({ fundedBy })402 before the stream opens: insufficient_credits · billing_suspended · workspace_budget_spent6open conversation · read last 50 messages · insert user message7materializeTools (park) → createToolBeltthe materialised set becomes the run's tool allowlist8openAssistantRun: genesis agent_start frame → tacho_eventsresolves qa-chat as oxagen.assistant and pins an authorization snapshot first9one tacho.sessions row (ADR-5969)the session is recorded before the engine is asked; 503 assistant_run_not_recorded otherwise10runGovernedTurn11assertToolListFitsProvider → assertEngineReady → driveTurnEngineUnavailableError, no fallback (ADR-053 §4)12onProviderRequest → streamAgentReply (1 step)no per-turn budget guard (ADR-235)13token usage + charge staged in usage_outboxpriced in full, charged only when platform-funded14billing.usage-delivery → durable_token_usageInngest cron, every five minutes15onToolRequest → tool.execute → invoke(capability, …, { surface: 'agent' })the call carries the assistant binding, so no workspace rule judges it · approvals park as cards · mutating tools serialised16SSE: run · parts · approval-required · usage · donecreateApiStreamTranslator owns the part shapes17insert assistant message · set conversation leafskipped when the stream errored
Funding is decided before the credit gate, the turn is a recorded session before the engine is asked, the loop runs on stella-serve over loopback with no fallback, and every completion and tool call comes back to Oxagen to answer.
  • The same turn runs behind three adapters: the SSE route drawn here, which the app's shell flyout also reads through the /api/v1/* rewrite; POST /assistant/ask; and the MCP tool. The last two return the whole reply rather than a stream.
  • stella-serve holds no key and runs no tool. Every completion comes back as a provider request answered through streamAgentReply, and every tool call comes back as a tool request. Each request is written ahead as a frame on the turn's session, and the session is sealed when the engine reports its outcome (ADR-5969).
  • A write that needs approval is parked as a card in the reply, not awaited. Only the person who asked can answer it (ADR-235).
  • There is no Inngest hop for messages: assistant-turn.ts writes them inline inside withTenantDb. Token usage alone goes through the usage outbox. The chat.persist-stream function named in older codemaps has no sender and no file.
  • Role routing inside the provider port: verdict and judge calls run on the cheapest tier whose model is not the worker's: fast for a balanced worker, balanced for a fast or precise worker, and precise only when every cheaper tier maps to the worker's model. Summarisation, reflection and domain inference use fast. Everything else runs on the turn's worker model.
  • The workspace does not govern or monitor this turn (ADR-235): no decision rule, steering record, workspace instruction, recalled memory, turn budget or spend ceiling reaches it. The one customer-set limit that does is the workspace's daily Stella budget (#5426), which the credit gate checks before the turn. The one volatile user message is the page context.
Source refs (19, verified at build)
  • apps/api/src/routes/v1/chat.stream.ts#chatStreamRoute
  • apps/api/src/routes/v1/chat-stream-translator.ts#createApiStreamTranslator
  • packages/agent/src/handlers/assistant.ask.ts#assistantAskHandler
  • packages/agent/src/runtime/assistant-stream.ts#streamAssistantTurn
  • packages/agent/src/runtime/assistant-turn.ts#prepareAssistantTurn
  • packages/agent/src/runtime/assistant-turn.ts#HISTORY_LIMIT = 50
  • packages/agent/src/runtime/assistant-session.ts#ASSISTANT_SESSION_RUNTIME
  • apps/app/src/features/shell/assistant-stream-client.ts
  • packages/agent/src/runtime/assistant-run.ts#openAssistantRun
  • packages/ai/src/funding-source.ts#resolveModelFundingSource
  • packages/billing/src/usage-outbox.ts#finalizeUsage
  • packages/billing/src/turn-credit-gate.ts#evaluateTurnCreditGate
  • packages/agent/src/runtime/governed-turn.ts#runGovernedTurn
  • packages/agent/src/runtime/materialize-tools.ts#materializeTools
  • packages/agent/src/runtime/tool-budget.ts#assertToolListFitsProvider
  • packages/agent/src/runtime/engine/provider.ts#createProviderPort
  • packages/agent/src/runtime/engine/tools.ts#executeToolRequest
  • packages/ai/src/stream.ts#streamAgentReply
  • packages/inngest-functions/src/functions/billing.usage-delivery.ts#billing.usage-delivery

Run evidence

Every run is one row in tacho.sessions (ADR-5969). Wrapped agents send hash-chained frames from their host's collector, and the in-app assistant records its turns as sessions in process. The control plane checks each chain, then seals and grades the session. It never runs or re-runs an agent (ADR-043).

Wrapping: evidencing an agent Oxagen does not run

The hook is answered only after the event is chained and appended to the host's write-ahead log. The control plane recomputes every hash on ingest and records a broken chain rather than rejecting the batch.agent harnessClaude Code · Codex · Cursor · Stella · customrecorder daemonper-host collector/v1/tacho/*apps/api, API-key tieringest_tacho_events@oxagen/handlersPostgresAurora / local :5433ClickHousetelemetry1hook eventPreToolUse (fail-closed) · PostToolUse · SessionEnd …2normalize → tacho/1.0 · dense seq · hash chain · WAL appendanswered only after the WAL append3allow | deny | askfrom the cached ed25519-signed policy bundle; a defer refreshes the bundle, then fails closed in enforce mode4model call via the loopback model proxy/anthropic · /backend-api/codex · /stella/anthropic, sealed as an llm_call frame5POST /v1/tacho/events (tacho.batch.v1, ≤200 events, ≤4 MiB)per minute: pre-auth 6000 per IP, 450 per credential; 120 per host for events6invoke(ingest_tacho_events)tenant from the key's tacho_host_v1 scope, never the body7recompute every hash · check chain against stored headbreak → chain_verified=false, recorded, never rejected8write tacho.sessions · session_models · session_files · session_commandsplus host liveness, gateway chains, control commands, the enforcement tier, proof verdicts, and one billed action per allowed tool call (ADR-165)9tacho_events rows, after the Postgres commitReplacingMergeTree(received_at) on (org, ws, session_uuid, seq)10response: accepted · chain_breaks · body_rejections · control { host_status · deny_generation · bundle_etag · commands }pause · resume · cancel · steer · message · revoke · refresh_bundle · kill · work_order (only to hosts that advertise work_orders) · reauth (only to hosts that advertise credential_reauth) · connect_workspace (only to hosts that advertise workspace_connect)11agent_stop (SessionEnd) → session sealed and gradedreplay_grade and completeness_gaps on tacho.sessions; a root session emits cost/run.sealed
The hook is answered only after the event is chained and appended to the host's write-ahead log. The control plane recomputes every hash on ingest and records a broken chain rather than rejecting the batch.
  • Four enforcement tiers. observe means the host only records. harness means the hook enforces inside a process Oxagen does not own. gateway needs a verified chain that routed a model or MCP call through the host's loopback model proxy or local MCP gateway. contained also needs a registered contained launch whose genesis hash matches. The tier is set at ingest, only rises while the session is live, and is final once sealed.
  • The ClickHouse DDL for tacho_events is generated from the envelope schema. A test fails when the SQL and the schema disagree.
  • The session is sealed on tacho.sessions, the one run table (ADR-5969). The ledger tables and their outside ingest (create_run_token, ingest_run_frames) are gone. The in-app assistant records its turns as sessions in process, with the same chain and seal code, not through this HTTP path.
Source refs (17, verified at build)
  • packages/tacho/src/envelope.ts#TACHO_ENVELOPE_VERSION
  • packages/tacho/src/wire.ts#TACHO_BATCH_SCHEMA
  • packages/tacho/src/wire.ts#TACHO_MAX_BATCH
  • packages/tacho/src/wire.ts#TACHO_MAX_REQUEST_BYTES
  • packages/tacho/src/wire.ts#WRAPPED_HARNESSES
  • packages/tacho/src/wire.ts#MODEL_HARNESS_ROUTES
  • packages/tacho/src/collector/hook-handler.ts#bundle_stale
  • packages/tacho/src/collector/model-proxy.ts
  • packages/database/src/schema/tacho.ts#TACHO_ENFORCEMENT_TIERS
  • packages/database/src/schema/tacho.ts#TACHO_COMMANDS
  • packages/handlers/src/tacho.events.ingest.ts#sealTachoSession
  • packages/handlers/src/tacho.events.ingest.ts#enforcementTierOf
  • apps/api/src/routes/v1/tacho.events.ingest.ts
  • apps/api/src/app.ts#TACHO_INGEST_PER_MIN
  • apps/api/src/middleware/distributed-rate-limit.ts#distributedRateLimiter
  • packages/telemetry/src/tacho-events-ddl.ts
  • packages/agent/src/runtime/assistant-session.ts

Metering and billing

The governed action is the billable unit. Tokens are reported at full price and billed at zero, except when the platform key funds them, at list price plus 20%.

From governed action to GAU bucket debit (ADR-052, ADR-055)

The billable unit is the governed action: the outermost invoke(), plus each tool call that the recorder's ingest and the agent runtime record. Tokens are reported, and charged only when the platform key paid for them. The debit commits in its own transaction before any claim or provider call, so a failed interim invoice leaves the action counted and the request intact.kernel.invoketop-level, admitted, executedusage recorder@oxagen/billing bootstraprecordGovernedActionaction-metering.tsdebitWithLedgergau-ledger.tsPostgresAurora / local :5433Stripecharges · webhooks1after output validationskipped when the contract is noBillingGate, the invoke is nested, or the call carries no orgId2recordGovernedAction({ orgId, actions, capability, runId, entry, now })the recorder resolves terms itself; a caller cannot claim cheaper ones3resolveGauEntitlement · readOrgBillingSettingscontracted terms, invoice approval, bucketBasis → subscription period, grant window, or calendar month4debitWithLedger({ period, terms, entries })5ensureCurrentBucket (zero deltas) · INSERT gau_ledger … ON CONFLICT (org_id, idempotency_key) DO NOTHING · UPDATE used_gau += units insertedone transaction: lazy create and row lock, then the debit; a retried tool call or re-sent batch debits nothing6remainingGau = included + purchased + carried − usednegative when overdrawn7claimInterimInvoice (invoice-billed or subscribed · uninvoiced overage ≥ invoice_gau_max)a pending interim settlement; neither an invoice-billed org nor a subscriber is capped8settleGauInvoicecreates, finalizes and pays the invoice; a failure leaves the row pending for billing.gau-close9invoice.paid → settleGauPaidmarks the settlement paid once; interim and month-end invoices grant nothing, and a block purchase grants purchased_gau on checkout.session.completed
The billable unit is the governed action: the outermost invoke(), plus each tool call that the recorder's ingest and the agent runtime record. Tokens are reported, and charged only when the platform key paid for them. The debit commits in its own transaction before any claim or provider call, so a failed interim invoice leaves the action counted and the request intact.
  • Stripe idempotency is three-phase: insert into stripe_events with ON CONFLICT DO NOTHING; treat as duplicate only if a processing row has processed_at; dispatch, then record the outcome. A prior failed attempt re-dispatches, so a provider retry self-heals. It is not exactly-once.
  • Three billing crons run. billing.dunning-sweep (02:00 UTC) moves orgs from grace to suspended once grace ends, then pages through active orgs for credit low-balance notifications. billing.gau-close (hourly at :10) closes ended months, invoices month-end overage, and resumes settlements still pending. billing.usage-delivery (every five minutes, concurrency 1) drains billing.usage_outbox into ClickHouse.
  • invoice.paid syncs the subscription and the invoice through grantPlanCreditsForInvoicePaid and writes no credits: a seat's monthly credits are the bucket's credits_granted, which model calls on Oxagen's key spend before the wallet.
  • The stripe.sync-* events named in older inventories have no sender; the webhook route handles those events inline.
Source refs (19, verified at build)
  • packages/oxagen/src/kernel.ts#_usageRecorder
  • packages/billing/src/bootstrap.ts#setUsageRecorder
  • packages/billing/src/action-metering.ts#recordGovernedAction
  • packages/billing/src/contract-terms.ts#resolveGauEntitlement
  • packages/billing/src/billing-settings.ts#readOrgBillingSettings
  • packages/billing/src/gau-bucket.ts#bucketBasis
  • packages/billing/src/gau-bucket.ts#ensureCurrentBucket
  • packages/billing/src/gau-ledger.ts#debitWithLedger
  • packages/handlers/src/tacho.events.ingest.ts#recordGovernedActions
  • packages/billing/src/gau-bucket.ts#remainingGau
  • packages/billing/src/gau-settlements.ts#claimInterimInvoice
  • packages/billing/src/gau-settlements.ts#settleGauInvoice
  • packages/billing/src/gau-settlements.ts#settleGauPaid
  • packages/billing/src/gau-settlements.ts#grantGauPurchaseForCheckout
  • packages/billing/src/webhooks.ts#processStripeEvent
  • apps/api/src/routes/stripe.ts
  • packages/inngest-functions/src/functions/billing.dunning-sweep.ts
  • packages/inngest-functions/src/functions/billing.gau-close.ts
  • packages/inngest-functions/src/functions/billing.usage-delivery.ts

assertGauAvailable (governed-action admission)

The kernel's billing admission gate reads only: it never inserts and never calls Stripe, so a Stripe outage cannot make it fail open.Suspended?dunning stateBillingSuspendedErrorInvoice billing?admitSubscribed?admitGrant left?readBucket → admitRefusebucket exhaustedGauExhaustedError
The kernel's billing admission gate reads only: it never inserts and never calls Stripe, so a Stripe outage cannot make it fail open.
  • An org with no subscription is refused once its signup grant is spent (signup_grant_used), past an expiring grant (signup_grant_expired), or with no grant (no_signup_grant). Each person gets one grant, so a second organisation they create starts with none. With the subscription rule cleared, monthly_allowance_used applies instead. Past the grant, or with none, the gate refuses without reading the bucket. A saved card alone unlocks nothing.
  • The spend-budget gate runs right after it in kernel.invoke(). It also runs for nested invokes, and it skips Stella's calls and the in-app assistant's contracts (ADR-235). It checks the org and workspace ceilings in billing.spend_budgets against billing.spend_counters. A breach throws budget_exceeded, and a database error fails open.
Source refs (3, verified at build)
  • packages/billing/src/gau-bucket.ts#assertGauAvailable
  • packages/billing/src/gau-bucket.ts#GauExhaustedError
  • packages/billing/src/spend-budget-gate.ts#assertWithinSpendBudget

assertCanStartTurn (platform-funded assistant turns)

The read-only gate in front of a platform-funded assistant turn. Its auto-reload may charge the card, a failed reload falls through to the wallet read, and on Oxagen's key any error other than a billing refusal fails closed. Each model call is then charged before it runs, in chargeModelCall.Workspace lane budgetwhen lane and workspace are givenWorkspaceBudgetSpentErrorSuspended?dunningState === 'suspended'BillingSuspendedErrorOrg key?fundedBy === 'org' → admitAuto-reloadmay charge the cardSeat paymentdunningState === 'active'SeatPaymentFailedErrorOne Light call?allowance credits or wallet ≥ 1InsufficientCreditsError
The read-only gate in front of a platform-funded assistant turn. Its auto-reload may charge the card, a failed reload falls through to the wallet read, and on Oxagen's key any error other than a billing refusal fails closed. Each model call is then charged before it runs, in chargeModelCall.
  • Auto-reload runs when it is enabled, the balance is below the threshold, and no reload completed in the last hour. It charges the saved card off-session, and a failure is logged.
  • evaluateTurnCreditGate calls it for the in-app assistant, run enrichment and conversation titles. A refusal becomes AssistantTurnRefusedError, which the API maps to 402.
Source refs (7, verified at build)
  • packages/billing/src/metering.ts#assertCanStartTurn
  • packages/billing/src/charge-model-call.ts#readModelCallRoom
  • packages/billing/src/charge-model-call.ts#chargeModelCall
  • packages/billing/src/turn-credit-gate.ts#evaluateTurnCreditGate
  • packages/billing/src/autoreload.ts#maybeAutoReload
  • packages/billing/src/turn-credit-gate.ts#WorkspaceBudgetSpentError
  • packages/billing/src/metering.ts#assertUnderWorkspaceLaneBudget

Knowledge graph

Connectors dual-write: Postgres holds the cursor and health, Neo4j holds entities, embeddings and relationships, ClickHouse observes. The ontology is tenant data in the schema registry.

ingestion/entity.received → EntityNode

Six steps, each retried up to three times. The poller advances the Postgres cursor once the fan-out is sent, not after the graph write, so a node write that exhausts its retries is not replayed. Embedding failures never fail the run, so the node still lands.normalize-and-mapentity_type_mappings × delivery_configskipped · filtereddedup-pass-aexact naturalKey MATCHdedup-pass-bvector match → ALIAS_OFsimilarityDeferredupsert-nodeMERGE :<Type>:EntityNode via scopedSessionembed1024-d Voyage vectorrecorded, not fatalschedule-change-evententity.created | updated
Six steps, each retried up to three times. The poller advances the Postgres cursor once the fan-out is sent, not after the graph write, so a node write that exhausts its retries is not replayed. Embedding failures never fail the run, so the node still lands.
  • Concurrency is capped at 5 per organisation (concurrency: { key: event.data.orgId }).
  • Pass B queries entity_node_embedding_index and writes an ALIAS_OF edge on a match. When the embedding backend is down, the entity becomes its own principal flagged similarityDeferred. The embed step runs only when semantic inference is on for the record type.
  • A node with no vector is the backfill set: MATCH (n:EntityNode) WHERE n.embedding IS NULL.
  • A node written without Pass B carries similarityDeferredAt. Once the backfill gives it a vector, similarity/reconcile runs Pass B for it, links it to a match with ALIAS_OF, and clears the mark.
  • Every tenant node also carries the anchor label GraphNode; it exists to back indexes because Neo4j cannot parameterise labels. Relationship types are tenant data in schema_registry.relationship_types, not a static enum.
Source refs (10, verified at build)
  • packages/inngest-functions/src/functions/ingestion.pipeline.ts#schedule-change-event
  • packages/inngest-functions/src/functions/ingestion.connection-poll.ts
  • packages/ingestion/src/dedup/resolve.ts#entity_node_embedding_index
  • packages/ingestion/src/dedup/resolve.ts#similarityDeferred
  • packages/ingestion/src/dedup/reconcile.ts#reconcileDeferredNode
  • packages/inngest-functions/src/functions/similarity.reconcile.ts#similarity/reconcile
  • packages/ingestion/src/mutations/upsert-entity.ts
  • packages/ingestion/src/stages.ts
  • packages/ontology/src/tenant.ts#scopedSession
  • packages/ontology/src/schema.cypher

Neo4j labels

From packages/ontology/src/schema.cypher via the storage manifest. Relationship types are not static: each workspace declares them in a versioned schema in schema_registry.relationship_types. RELATED_TO is the fallback when a supplied type cannot be sanitised, and ingestion writes ALIAS_OF for deduplicated entities.

6
LabelDomainKey propertiesConstraints / indexesOrg-scoped
ContextManifestagentorgId, publicIdcontext_manifest_public_idyes
EntityNodeingestionconnectionId, embedding, entityType, naturalKey, workspaceIdentity_node_connection,entity_node_natural_key,entity_node_workspaceyes
ExecutionagentorgId, publicIdexecution_public_idyes
GraphNodegraphembedding, label, orgId, publicId, workspaceIdgraph_node_public_idyes
SourceConnectioningestionid, orgIdsource_connection_idyes
ToolagentorgId, publicIdtool_public_idyes

Vector indexes

All 1024-dimensional cosine, sized to voyage-4-large. graph_node_embedding_index is the universal one because every tenant node also carries the GraphNode anchor label.

IndexLabelProperty
entity_node_embedding_indexEntityNodeembedding
graph_node_embedding_indexGraphNodeembedding

Datastores

Four stores, one storage manifest (ADR-031) that the gate keeps byte-stable. Postgres is transactional truth under forced row-level security; ClickHouse is append-only telemetry; Neo4j is the graph; Blob holds bytes the Postgres row points at.

StoreTablesPurposeDomains
postgres236Transactional state: users, orgs, permissions, billing, configs, durable application state.agent ai auth billing chat cms codegraph content cost crm environments evidence forge iam ingestion mcp notification org plugin privacy ratelimit schema_registry security skills tacho tools work workspace
clickhouse16Append-only runtime events: execution events, logs, metrics, traces, token analytics, telemetry.billing chat codegraph iam mcp schema_registry tacho telemetry
neo4j6Graph data: ontology/entity relationships, where workflow data came from, agent memory, semantic retrieval.agent graph ingestion
blob4Binary assets: avatars, generated media, uploads; the Postgres row (URL + metadata) is source of truth.content

Domains across stores

Rows are the platform's storage domains; a cell counts the tables (or labels) that domain owns in each store.

Domainpostgresclickhouseneo4jblob
agent30·3·
ai1···
auth10···
billing222··
chat21··
cms2···
codegraph221··
content1··4
cost14···
crm2···
environments4···
evidence2···
forge13···
graph··1·
iam111··
ingestion12·2·
mcp111··
notification3···
org15···
plugin1···
privacy2···
ratelimit1···
schema_registry72··
security3···
skills1···
tacho121··
telemetry·7··
tools4···
work20···
workspace8···

Postgres schemas

Postgres schemas and the number of cross-schema references between them111133218121151141112111111241311ai1 tablesbilling22 tablesiam11 tablessecurity3 tablesskills1 tablesagent30 tablescost14 tablesnotification3 tablescms2 tablescodegraph22 tablescrm2 tablesevidence2 tablesforge13 tablesplugin1 tablesprivacy2 tablesratelimit1 tablesschema_registry7 tableschat2 tablesingestion12 tablesmcp11 tablesenvironments4 tableswork20 tablestools4 tablesauth10 tablescontent1 tablestacho12 tablesorg15 tablesworkspace8 tables
28 pgSchema namespaces; an arrow's number is how many declared or logical references cross from one schema into another.
  • Tenancy columns come from mixins (orgScopeMixin, auditMixin, softDeleteMixin), so they are not literal in the table bodies but are present in every drawn card.
  • Tables without org_id are isolated transitively through a policied parent or are shared catalogs; the RLS badge on each card names its policy class from tenant-policy.manifest.ts.

Entity relationships by schema

◆ marks a primary key, → a referencing column, ? a nullable column. Composite primary keys are not visible to the manifest and show no ◆.

agent (30 tables)

Tables in the agent schema with their referencesruntimes◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?nametextslugcitextcontainment_requiredbooleankindtexthost_operatortext?host_credential_iduuid?modal_environmenttext?gputext?regiontext?active_template_iduuid?→ environment_iduuid?egress_allowjsonb?vcpusmallint?memory_mibinteger?disk_gibsmallint?idle_pause_secondsinteger?max_run_secondsinteger?paused_retention_secondsinteger?harnessestext[]?environment_id ↗ environments.environmentsRLS standardsteering_record_versions◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidversion_numberintegeris_latestboolean→ parent_version_iduuid?published_attimestamptz?→ record_iduuidbodytextchecksumtextprovenancejsonbkindtext?forcetext?constraint_effecttext?statementtext?RLS standardsteering_records◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuid→ workspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?slugcitexttitletextlabeltext?statustextvalid_untiltimestamptz?→ active_version_iduuid?activated_by_user_iduuid?activated_attimestamptz?kindtextforcetextconstraint_effecttext?sharing_scopetextrepostext[]?loadtextapplies_totext[]?statementtext?commit_shatext?pathtext?published_attimestamptz?operator_iduuid?workspace_id ↗ workspace.workspacesRLS standardagents◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuid→ workspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?slugcitextnametextdescriptiontext?agent_typetextactive_version_iduuid?statustextdeployment_statustextvalid_untiltimestamptz?avatar_urltext?summarytext?summary_checksumtext?principal_iduuid?harnesstextregistered_viatextcost_centertext?→ runtime_iduuid?toolbelt_iduuid?cache_keep_alivebooleanbudget_centsinteger?operator_user_iduuidaccount_sourcetextworkspace_id ↗ workspace.workspacesRLS standardtool_versions◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidversion_numberintegeris_latestboolean→ parent_version_iduuid?published_attimestamptz?→ tool_iduuidinput_schemajsonbread_onlybooleanrisk_gradetextpolicy_grouptext?manifestjsonbchecksumtextschema_origintextobserved_output_schemajsonb?observed_attimestamptz?observed_approved_by_user_iduuid?observed_approved_attimestamptz?categorytext?classificationjsonb?classified_risk_gradetext?classified_by_user_iduuid?classified_attimestamptz?classification_reasontext?impactstext[]measuresjsonbeffect_id_pathtext?RLS standardmemories◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidagent_lineagetext?run_public_idcitext?capturetextstatementtextstatement_hashtextkindtextreposjsonb?applies_tojsonb?toolsjsonb?evidencejsonbsourcetext?dedupe_keytext→ reflection_iduuid?→ memory_pr_iduuid?statetextlabeltext?summarytext?memory_typetext?use_countintegerlast_used_attimestamptz?retired_attimestamptz?retired_reasontext?promoted_lineagetext?dismissed_attimestamptz?dismissed_byuuid?dismissed_reasontext?author_user_iduuid?host_iduuid?storetext?personalbooleancreated_attimestamptzRLS standardmemory_prs◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidprovidertextrepositorytextbranchtextnumberintegerurltextstatustextrecordsjsonbopened_attimestamptzsettled_attimestamptz?RLS standardmemory_reflections◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidrun_public_idcitextagent_lineagetext?sourcetextoutcometextsummarytextgradesjsonblessonsjsonbtool_feedbackjsonbcreated_attimestamptzRLS standardsandbox_hosts◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuid?→ runtime_iduuid?operatortextregiontextinstance_typetextcapacity_mibintegerallocated_mibintegerhost_agent_versiontexthost_token_digesttext?statetextlast_heartbeat_attimestamptz?RLS org_onlysandbox_instances◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuid→ runtime_iduuid?→ template_iduuid?→ host_iduuid?provider_sandbox_idtext?snapshot_image_idtext?segment_started_attimestamptz?continuationsintegershared_checkoutbooleanlease_generationintegerlease_session_uuiduuid?lease_idle_untiltimestamptz?→ shared_work_item_iduuid?end_snapshot_image_idtext?end_snapshot_expires_attimestamptz?→ agent_iduuidoperator_user_iduuid→ work_order_iduuid?launched_viatextinteractivebooleanaccount_sourcetextharnesstextharness_versiontextrepository_full_nametextrepository_providertextrepository_hosttextbranchtextvcpusmallintmemory_mibintegerstatetextstarted_attimestamptz?ended_attimestamptz?end_reasontext?refusal_codetext?refusal_messagetext?running_secondsintegerestimated_cost_microsbigint?included_repositoriesjsonb?account_waittext?account_wait_untiltimestamptz?account_wait_sincetimestamptz?account_roundssmallintaccount_refusedtext[]account_wait_ontext[]account_resume_attemptintegershared_work_item_id ↗ work.itemswork_order_id ↗ work.ordersRLS standardsandbox_templates◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuid→ runtime_iduuidsource_kindtextsource_reftextservicesjsonbsetup_commandtext?setup_working_directorytext?base_layer_versiontextbase_layer_digesttext?hook_config_digesttext?statustextrootfs_sha256text?provider_image_idtext?rootfs_bytesbigint?build_log_keytext?built_attimestamptz?failure_reasontext?RLS standardsteering_proposals◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?org_iduuidworkspace_iduuidlineage_idcitextkindtextforcetextconstraint_effecttext?sharing_scopetexttitletext?labeltext?statementtextrationaletextsourcetextsupport_runstext[]support_agentstext[]supporting_record_idstext[]evidence_linkstext[]statustextgovernance_modetext?providertext?repositorytext?base_reftext?branchtext?pathtext?pr_numberinteger?pr_urltext?head_shatext?stamped_record_idtext?record_hashtext?checksjsonbcheck_findingsjsonbmerge_claimed_attimestamptz?merged_committext?merged_attimestamptz?merged_by_user_iduuid?published_record_iduuid?promotion_event_iduuid?dismissed_attimestamptz?dismissed_reasontext?cleanup_pr_requestedboolean?operator_iduuid?contributor_idsuuid[]RLS standardtools◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuid→ workspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?nametextslugcitextdescriptiontext?sourcecitextenabledbooleandefault_activeboolean→ active_version_iduuid?mcp_server_iduuid?activated_by_user_iduuid?activated_attimestamptz?workspace_id ↗ workspace.workspacesRLS standardagent_versions◆ iduuid→ agent_iduuidversionintegeris_publishedbooleanchecksumtext?configjsonbcreated_by_iduuidcreated_attimestamptz→ runtime_iduuid?toolbelt_iduuid?change_kindtextapproval_requests◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidexecution_step_iduuid?tool_call_iduuid?→ message_iduuid?run_public_idcitext?resume_payloadjsonb?resume_keytext?resume_statustext?resume_started_attimestamptz?resume_finished_attimestamptz?resume_run_public_idtext?resume_errortext?capability_nametextinput_previewjsonbrisk_leveltextkindtext→ mandate_iduuid?rule_idstext[]input_digesttext?token_used_attimestamptz?auto_rule_idtext?resolved_reasonstext[]resolutiontext?resolved_attimestamptz?→ resolved_by_user_iduuid?resolved_by_policytext?notetext?expires_attimestamptzmandate_id ↗ tools.mandatesmessage_id ↗ chat.messagesresolved_by_user_id ↗ auth.usersRLS standardcode_repository_findings◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidprovidertextprovider_repository_idtextrepositorytextpull_request_numberintegerpull_request_urltextpull_request_statetexthead_shatextpathtextlineintegerstatementtextproposal_public_idtext?checked_attimestamptzcreated_attimestamptzRLS standardcontext_appends◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuidkindtextlineage_idcitextstatementtextsharing_scopetextrecord_hashtextsource_refstext[]evidence_linkstext[]proposal_iduuid?RLS standardcontext_sync_state◆ iduuidorg_iduuidworkspace_iduuidprovidertext?repositorytext?branchtext?head_shatext?rules_shatext?sources_shatext?statustextfindingsjsonberrortext?notified_failuretext?requested_attimestamptz?synced_attimestamptz?created_attimestamptzupdated_attimestamptzRLS standardinterjections◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidrun_public_idtextagent_keytext?questiontextraised_attimestamptzexpires_attimestamptz?answered_attimestamptz?answertext?answered_by_user_iduuid?kindtextraised_seqbigint?bodyjsonb?repositorytext?pathtext?receipt_idtext?answering_tokentext?answering_untiltimestamptz?answered_from_rulejsonb?answered_alonejsonb?RLS standardmemory_recalls◆ iduuidorg_iduuidworkspace_iduuidlineagetextrecall_countintegerlast_recalled_attimestamptzreviewed_attimestamptzRLS standardmemory_rejections◆ iduuidorg_iduuidworkspace_iduuidstatement_hashtextmemory_pr_iduuid?rejected_attimestamptzRLS standardmemory_uses◆ iduuidorg_iduuidworkspace_iduuid→ memory_iduuidrun_public_idcitext?signaltextcountintegerused_attimestamptzRLS standardrepository_config_files◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidprovidertexthosttextprovider_repository_idtextrepositorytextpathtextharnesstextfile_kindtextblob_shatextimported_blob_shatext?statetextproposal_public_idtext?cleanup_printeger?lineagestext[]batchinteger?pendingjsonb?import_attempttext?imported_partsjsonb?first_seen_attimestamptzlast_scanned_attimestamptzupdated_attimestamptzRLS standardsandbox_attachments◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuid→ sandbox_instance_iduuiduser_iduuidmodetextsurfacetextstarted_attimestamptzended_attimestamptz?control_untiltimestamptz?RLS standardsteering_pr_approvals◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuid→ proposal_iduuiduser_iduuidapi_key_iduuid?commit_shatextcreated_attimestamptzRLS standardsteering_promotions◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuid→ record_iduuid→ version_iduuid?seqintegeractiontextapprover_user_iduuid?policy_versiontextprev_chain_digesttext?chain_digesttextRLS standardsteering_publications◆ iduuidorg_iduuidworkspace_iduuidrepositorytextpublished_versioninteger?published_committext?ledgerjsonb?lease_tokenuuid?lease_untiltimestamptz?updated_attimestamptzRLS standardsteering_record_mentions◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?→ record_iduuid→ version_iduuid?sourcestext[]labeltextpositioninteger→ order_iduuid?order_id ↗ work.ordersRLS standardsteering_repo_health◆ iduuidorg_iduuidworkspace_iduuid?providertextrepository_idbigintrepositorytexthealthtextdifferencesjsonbreasontext?published_shatext?published_versioninteger?revert_pr_numberinteger?notified_healthtextposted_digesttext?checked_attimestamptzchanged_attimestamptzcreated_attimestamptzupdated_attimestamptzRLS workspace_nullablesteering_versions◆ iduuidorg_iduuidworkspace_iduuidrepositorytextversionintegercommit_shatextbundlejsonbpublished_attimestamptz?records_gateinteger?left_outjsonb?projected_attimestamptz?created_attimestamptzRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 10 references leave the schema and are drawn as stubs.

ai (1 tables)

Tables in the ai schema with their referencesresponse_cache◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?cache_keytextprompt_hashtextshape_hashtext?modeltextsurfacetextresponse_kindtextresponsejsonbusagejsonbembeddingjsonb?hit_countintegerlast_hit_attimestamptz?expires_attimestamptzRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

auth (10 tables)

Tables in the auth schema with their referencesusers◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?emailcitextdisplay_nametext?avatar_urltext?statustextemail_verifiedbooleantwo_factor_enabledbooleanapi_keys◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?org_iduuidworkspace_iduuid?scope_kindtextrole_keytextrole_iduuid?key_prefixtextkey_hashtextnametextscopejsonbstella_telemetry_enrollment_idtext?stella_telemetry_enrolled_attimestamptz?decision_delegated_attimestamptz?expires_attimestamptz?last_used_attimestamptz?superseded_attimestamptz?→ superseded_by_iduuid?RLS workspace_nullableaccounts◆ idtext→ user_iduuidaccount_idtextprovider_idtextaccess_tokentext?refresh_tokentext?id_tokentext?access_token_encbytea?refresh_token_encbytea?id_token_encbytea?token_kms_key_idtext?access_token_expires_attimestamptz?refresh_token_expires_attimestamptz?scopetext?passwordtext?created_attimestamptzupdated_attimestamptzrate_limit◆ idtextkeytextcountintegerlastRequestbigintsessions◆ idtext→ user_iduuidtokentextexpires_attimestamptzip_addresstext?user_agenttext?auth_methodtext?created_attimestamptzupdated_attimestamptzsso_providers◆ idtextissuertextoidc_configtext?saml_configtext?user_iduuid?provider_idtext→ organization_iduuiddomaintextdomain_verifiedbooleanprotocoltextdisplay_nametextgroups_claimtextdomain_verification_tokentextcreated_attimestamptzupdated_attimestamptzorganization_id ↗ org.organizationstwo_factor◆ idtextuser_iduuidsecrettextbackup_codestextverifiedbooleanuser_preferences◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?→ user_iduuidfont_sizefont_sizedensitydensityenter_to_submitbooleanpending_prompt_behaviorpending_prompt_behaviortranscript_styletextdefault_text_modeltext?themetextlanguagetexttimezonetextnotification_settingsjsonbverifications◆ idtextidentifiertextvaluetextexpires_attimestamptzcreated_attimestamptzupdated_attimestamptzworkspace_user_preferences◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?→ user_iduuiddefault_repo_connection_idtext?default_repo_slugtext?default_agent_idtext?repo_default_prompted_attimestamptz?stella_visited_attimestamptz?stella_answer_from_rulestextstella_relaunch_failed_worktextstella_create_issuestextstella_update_source_issuestextstella_steer_agentstext→ default_text_tier_iduuid?default_text_tier_id ↗ org.model_tiersRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 2 references leave the schema and are drawn as stubs.

billing (22 tables)

Tables in the billing schema with their referencesgau_buckets◆ iduuid→ org_iduuidperiod_starttimestamptzperiod_endtimestamptzincluded_gaubigintpurchased_gaubigintcarried_gaubigintused_gaubigintcredits_grantedbigintcredits_usedbigintoverage_invoiced_gaubigintinterim_seqintegertopup_seqintegeropen_topup_settlement_iduuid?closed_attimestamptz?created_attimestamptzupdated_attimestamptzorg_id ↗ org.organizationsRLS org_onlyplans◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?nametextslugcitexttiertextstripe_product_idtextstripe_price_id_monthlytext?stripe_price_id_annualtext?monthly_centsintegerannual_centsinteger?included_credit_centsintegerincluded_seatsintegercurrencytextrate_per_gau_microsbigintblock_size_gauintegerincluded_gau_per_monthintegersignup_grant_gauintegersignup_grant_daysinteger?signup_grant_creditsintegersignup_grant_credit_daysinteger?subscription_required_after_grantbooleanagent_actions_per_seatintegercredits_per_seatintegermin_seatsintegerfeaturesjsonbis_publicbooleangau_reversals◆ iduuid→ org_iduuid→ settlement_iduuid?→ bucket_iduuid?stripe_payment_intent_idtextkindtextprovider_event_idtextrequested_gaubigintreversed_gaubigintunrecovered_gaubigintamount_centsbigintcurrencytextcreated_attimestamptzorg_id ↗ org.organizationsRLS org_onlygau_settlements◆ iduuid→ org_iduuid→ bucket_iduuidkindtextseqinteger?quantity_gaubigintrate_per_gau_microsbigintcurrencytextstatustextstripe_checkout_session_idtext?stripe_invoice_idtext?stripe_payment_intent_idtext?charged_centsbigint?created_attimestamptzsettled_attimestamptz?org_id ↗ org.organizationsRLS org_onlystripe_event_processing◆ iduuid→ stripe_event_iduuidprocessed_attimestamptz?processing_errortext?stripe_events◆ iduuidstripe_event_idtextevent_typetextapi_versiontext?payloadjsonbreceived_attimestamptzsubscriptions◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuid→ plan_iduuidstripe_subscription_idtextstripe_price_idtext?→ pending_upgrade_from_plan_iduuid?statustextbilling_intervaltextcurrent_period_starttimestamptzcurrent_period_endtimestamptzcancel_at_period_endbooleancanceled_attimestamptz?trial_endtimestamptz?seat_countintegerorg_id ↗ org.organizationsRLS org_onlybilling_disputes◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidstripe_dispute_idtextstripe_charge_idtext?payment_intent_idtext?amount_centsintegercurrencytextreasontext?statustextclawed_back_centsbigintresolved_attimestamptz?org_id ↗ org.organizationsRLS org_onlycontract_terms◆ iduuid→ org_iduuidagreement_reftextcurrencytextrate_per_gau_microsbigintblock_size_gauintegerincluded_gau_per_monthintegereffective_fromtimestamptzeffective_totimestamptz?created_attimestamptzupdated_attimestamptzorg_id ↗ org.organizationsRLS org_onlycredit_ledger◆ iduuid→ org_iduuiddelta_centsbigintreasontextreference_typetext?reference_iduuid?created_by_iduuid?created_attimestamptzkindtext?expires_attimestamptz?idempotency_keytextstripe_payment_idtext?agent_action_idtext?adjustment_reasontext?org_id ↗ org.organizationsRLS org_onlycredit_lots◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidsourcetextoriginal_centsbigintremaining_centsbigintgranted_attimestamptzexpires_attimestamptz?org_id ↗ org.organizationsRLS org_onlyfeature_entitlements◆ iduuidfeaturetexttiertext?plan_slugtext?→ org_iduuid?workspace_iduuid?enabledbooleanquantityinteger?notetext?created_attimestamptzupdated_attimestamptzorg_id ↗ org.organizationsRLS org_or_globalgau_ledger◆ iduuid→ org_iduuid→ bucket_iduuididempotency_keytextsourcetextcapabilitytext?tool_nametext?mcp_servertext?surfacetext?harnesstext?attributed_workspace_iduuid?agent_idtext?principal_idtext?principal_kindtext?operator_user_idtext?run_idcitext?session_idtext?tool_call_idtext?request_idtext?unitsintegercreditsinteger?funded_fromtext?model_sizetext?occurred_attimestamptzbilled_attimestamptzorg_id ↗ org.organizationsRLS org_onlygau_reversal_debits◆ iduuid→ org_iduuid→ reversal_iduuid→ bucket_iduuidreversed_gaubigintcreated_attimestamptzorg_id ↗ org.organizationsRLS org_onlygau_signup_grants◆ iduuid→ org_iduuiduser_iduuid?granted_gauintegergranted_attimestamptzexpires_attimestamptz?created_attimestamptzorg_id ↗ org.organizationsRLS org_onlyinvoices◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuid→ subscription_iduuid?stripe_invoice_idtextnumbertext?statustextamount_due_centsintegeramount_paid_centsintegeramount_remaining_centsintegercurrencytextperiod_starttimestamptzperiod_endtimestamptzdue_attimestamptz?paid_attimestamptz?hosted_invoice_urltext?invoice_pdf_urltext?org_id ↗ org.organizationsRLS org_onlyorg_billing_settings◆ iduuid→ org_iduuidauto_reload_enabledbooleanauto_reload_threshold_centsbigintauto_reload_amount_centsbigintauto_reload_payment_method_idtext?last_auto_reload_attimestamptz?auto_reload_episode_keytext?auto_reload_episode_started_attimestamptz?auto_reload_next_retry_attimestamptz?meter_carry_micro_credits_by_reasonjsonblow_balance_threshold_centsbigintassistant_spend_cap_centsbigint?extended_evidence_retention_enabledbooleanbilling_providertextbilling_customer_idtext?billing_customer_creationjsonb?approved_for_invoice_billingbooleaninvoice_gau_maxintegerdunning_statetextdelinquent_sincetimestamptz?grace_ends_attimestamptz?suspended_attimestamptz?last_dunning_notified_attimestamptz?created_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_id ↗ org.organizationsRLS org_onlypayment_methods◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?→ org_iduuidstripe_payment_method_idtexttypetextbrandtext?last4text?exp_monthinteger?exp_yearinteger?is_defaultbooleanorg_id ↗ org.organizationsRLS org_onlyprepaid_orders◆ iduuid→ org_iduuidagreement_reftext?po_numbertext?currencytextlicence_centsbigintlicence_period_starttimestamptz?licence_period_endtimestamptz?gau_quantitybigintrate_per_gau_microsbigintcredit_centsbigintgrant_ontextstatustextdays_until_dueintegermemotext?stripe_invoice_idtext?→ granted_bucket_iduuid?units_granted_attimestamptz?credits_granted_attimestamptz?issued_by_request_idtext?created_attimestamptzupdated_attimestamptzpaid_attimestamptz?org_id ↗ org.organizationsRLS org_onlyspend_budgets◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuid?enabledbooleanperiodtextwindow_daysinteger?limit_microsbigintnotified_thresholdintegernotified_period_starttimestamptz?RLS workspace_nullablespend_counters◆ iduuid→ org_iduuidworkspace_iduuid?daydatelanetextspent_microsbigintupdated_attimestamptzorg_id ↗ org.organizationsRLS workspace_nullableusage_outbox◆ iduuid→ org_iduuidworkspace_iduuidusage_completebooleanpayloadjsonb?chargejsonb?admitted_attimestamptzfinalized_attimestamptz?delivered_attimestamptz?attemptsintegernext_attempt_attimestamptzorg_id ↗ org.organizationsRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 18 references leave the schema and are drawn as stubs.

chat (2 tables)

Tables in the chat schema with their referencesmessages◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuid→ conversation_iduuid→ parent_message_iduuid?roletextcontenttextcontent_blocksjsonbbranch_reasontext?metadatajsonbRLS standardconversations◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuid→ user_iduuidtitletext?title_sourcetext?→ active_leaf_message_iduuid?archived_attimestamptz?archived_by_user_iduuid?code_bindingjsonb?history_summaryjsonb?history_cleared_attimestamptz?deleted_attimestamptz?user_id ↗ auth.usersRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 1 reference leave the schema and are drawn as stubs.

cms (2 tables)

Tables in the cms schema with their referencesbook_access_codes◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?codecitext?code_hashtextlead_iduuidbook_slugtextstatustextissue_reasontextparent_code_iduuid?last_edition_slugtext?consumed_attimestamptz?expires_attimestamptz?iptext?user_agenttext?book_editions◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?slugcitextbook_slugtextformattexttitletexthtmltextpublishedboolean
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

codegraph (22 tables)

Tables in the codegraph schema with their referencesblob_keys◆ org_iduuid◆ key_iduuid◆ key_versionintegeralgorithmtextsecret_reftextcreated_attimestamptzRLS org_onlyai_requests◆ iduuidorg_iduuid◆ workspace_iduuidrepo_iduuidsnapshot_iduuid?request_idtextslottextpasstextstatetextoutcometext?modeltext?bodiesjsonbresultsjsonb?pausejsonb?errortext?created_attimestamptzupdated_attimestamptzcompleted_attimestamptz?RLS standardbuilds◆ iduuidorg_iduuid◆ workspace_iduuidrepo_iduuidconnection_generationbigintkindtextreftextcommit_shatextpredecessor_shatext?pr_numberinteger?tagtext?requested_attimestamptzRLS standarddomains◆ iduuidorg_iduuid◆ workspace_iduuiddomain_keytextnametextparent_keytext?brieftext?sourcetextpropertiesjsonbcreated_attimestamptzupdated_attimestamptzRLS standardedges◆ iduuidorg_iduuid◆ workspace_iduuidrepo_iduuidkindtextsource_node_idtexttarget_node_idtexttarget_repo_iduuid?source_snapshot_iduuid?target_snapshot_iduuid?pathtext?provenancetextconfidencerealsharereal?weightreal?evidencejsonbpropertiesjsonbvalid_frombigint?valid_tobigint?overlay_snapshot_iduuid?tombstonebooleancreated_attimestamptzRLS standardembeddings◆ org_iduuid◆ spacetext◆ card_hashtextdimensionsintegercard_versionintegerembeddinghalfvec?claim_iduuid?claim_expires_attimestamptz?created_attimestamptzlast_used_attimestamptzRLS org_onlyinbox◆ iduuidorg_iduuid◆ workspace_iduuidkindtextsubject_reftextdestinationtext?sourcesjsonbtext_sha256text?statetextworkspace_numberinteger?failuresjsonbcitesjsonbpayloadjsonbpull_request_urltext?created_attimestamptzupdated_attimestamptzresolved_attimestamptz?RLS standardlink_labels◆ iduuidorg_iduuid◆ workspace_iduuidproposal_iduuidstratumtextrelationtextlanguagetext?source_repo_iduuid?target_repo_iduuid?labeltext?notetext?labeled_byuuid?labeled_attimestamptz?drawn_attimestamptzRLS standardlink_proposals◆ iduuidorg_iduuid◆ workspace_iduuidjob_iduuid?source_repo_iduuid?source_node_idtextsource_snapshot_iduuid?target_repo_iduuid?target_node_idtexttarget_snapshot_iduuid?relationtextedge_kindtextevidencejsonbconfidencerealscorerealmodeltext?model_roletextprompt_versiontext?request_idtext?roundinteger?cross_repobooleanlanguagetext?statetextfailuresjsonbproposed_byuuid?reviewed_byuuid?reviewed_attimestamptz?created_attimestamptzupdated_attimestamptzRLS standardlinker_jobs◆ iduuidorg_iduuid◆ workspace_iduuidrepo_iduuidsnapshot_iduuidnode_idtextjob_keytexttriggertexttext_hashtextcandidates_hashtextworkspace_revisiontextbuildjsonbcontextjsonbstarts_strongbooleanstatetextroundsintegeroutcomejsonb?created_attimestamptzupdated_attimestamptzcompleted_attimestamptz?RLS standardmoved_fromorg_iduuid◆ workspace_iduuid◆ repo_iduuid◆ old_node_idtext◆ new_node_idtextsnapshot_iduuidmethodtextsimilarityreal?created_attimestamptzRLS standardnodes◆ iduuidorg_iduuid◆ workspace_iduuidrepo_iduuidnode_idtextpublic_idtext?kindtextnametextqualified_nametext?pathtext?languagetext?start_lineinteger?end_lineinteger?content_hashtext?card_hashtext?domain_idstext[]propertiesjsonbsearch_termstextsearchtsvector?valid_frombigint?valid_tobigint?overlay_snapshot_iduuid?tombstonebooleancreated_attimestamptzRLS standardobservations◆ iduuidorg_iduuid◆ workspace_iduuidrepo_iduuid?kindtextenvironmenttext?sourcetextwindow_starttimestamptz?window_endtimestamptz?object_keytext?digesttext?payloadbytea?propertiesjsonbreceived_attimestamptzRLS standardorganizations◆ org_iduuidkms_key_arntext?kms_key_aliastext?key_providertext→ blob_key_iduuid?→ blob_key_versioninteger?storage_epochuuid?created_attimestamptzupdated_attimestamptzRLS org_onlyoverlay_filesorg_iduuid◆ workspace_iduuid◆ overlay_snapshot_iduuidrepo_iduuid◆ pathtextchangetextcreated_attimestamptzRLS standardpackage_releases◆ ecosystemtext◆ nametextlatest_versiontext?latest_released_attimestamptz?versionsjsonbchecked_attimestamptzerrortext?repos◆ iduuidorg_iduuid◆ workspace_iduuidprovidertextprovider_repository_idtextfull_nametextdefault_reftextconnection_generationbiginttagstext[]connected_attimestamptzretired_attimestamptz?RLS standardreviews◆ iduuidorg_iduuid◆ workspace_iduuidsubject_kindtextsubject_reftextdecisiontextreviewer_iduuid?notetext?decided_attimestamptzRLS standardsnapshot_pointersorg_iduuid◆ workspace_iduuid◆ repo_iduuid◆ reftextcurrent_snapshot_iduuid?latest_build_generationbigintupdated_attimestamptzRLS standardsnapshots◆ iduuidorg_iduuid◆ workspace_iduuidrepo_iduuidrevision_idtextkindtextreftextcommit_shatextseqbigint?predecessor_iduuid?base_snapshot_iduuid?pr_numberinteger?tagtext?manifestjsonbbuild_statustextbuild_generationbigintconnection_generationbigintprovisionalbooleansettings_committext?graph_file_keytext?graph_file_digesttext?keep_foreverbooleanembedding_spacetext?embeddingstextcreated_attimestamptzpublished_attimestamptz?closed_attimestamptz?RLS standardspend_reservations◆ iduuidorg_iduuid◆ workspace_iduuidrequest_idtextmodeltextkey_sourcetextmax_cost_microsbigintreserved_daydatereserved_monthdatelimitsjsonbstatetextprovider_batch_idtext?actual_cost_microsbigint?created_attimestamptzsent_attimestamptz?settled_attimestamptz?snapshot_iduuid?providertextcall_modetextusage_iduuid?input_tokensbigint?output_tokensbigint?host_iduuid?operator_user_iduuid?agent_keytext?surfacetext?RLS standardworkspace_snapshots◆ iduuidorg_iduuid◆ workspace_iduuidrevision_idtextseqbigintpredecessor_iduuid?snapshot_idsuuid[]cross_repo_file_keytext?cross_repo_file_digesttext?manifestjsonbbuild_statustextis_currentbooleancreated_attimestamptzpublished_attimestamptz?RLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

content (1 tables)

Tables in the content schema with their referencesattachments◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?user_iduuidkindtextsourcetextaccess_policytextstatustextstorage_providertextstorage_keytextstorage_urltext?mime_typetextsize_bytesbigint?prompttextmodeltextconversation_iduuid?message_iduuid?metadatajsonbRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

cost (14 tables)

Tables in the cost schema with their referencesfindings◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidkindtextleveltextsubjecttextfingerprinttextwindow_starttimestamptzwindow_endtimestamptzestimated_saving_microsbigintcurrencytextsaving_basistextconfidencetextwhytextfixtextcited_runstext[]cited_framesjsonbstatustextdetected_attimestamptzdecided_attimestamptz?decided_by_user_iduuid?applied_action_idtext?draftjsonb?RLS standardcost_centers◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?→ org_iduuidlabelcitextdescriptiontext?org_id ↗ org.organizationsRLS org_onlydaily_totals◆ iduuidorg_iduuidworkspace_iduuiddaydategroup_kindtextgroup_keytextprovidertext?runsintegercallsintegercost_microsbigint?currencytextcost_basistext?accepted_microsbigint?productive_rationumeric(9, 8)?graded_stepsinteger?tokensjsonbrolled_up_attimestamptzRLS standardfinding_claims◆ iduuidorg_iduuidworkspace_iduuid→ finding_iduuiddetectorsmallintrun_idcitextframe_keytextframe_attimestamptzoperator_keytext?cost_microsbigintcurrencytextRLS standardmodel_class_replays◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzfinding_fingerprinttextfinding_public_idcitextplanjsonbplan_digesttextsample_sizesmallintcurrencytextestimated_microsbigintapproved_by_user_iduuidapproved_attimestamptzstatetextreasontext?claimed_attimestamptz?claim_tokentext?repriced_microsbigint?measured_microsbigint?resultsjsonbfinished_attimestamptz?RLS standardno_progress_hits◆ iduuidorg_iduuidworkspace_iduuidrun_idcitexttooltextinput_digesttextoutput_digesttextloopintegerrepeatsintegerlimit_repeatsintegerat_callintegermodetextoutcometextpause_blocktext?detected_attimestamptzupdated_attimestamptzRLS standardprice_book_initializations◆ booktextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?initialized_attimestamptzcompleted_catalogstext[]price_entries◆ iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuid?providertextmodeltextmodel_aliasestext[]regiontext?token_classtextunittextcurrencytextmicros_per_millionbigintabove_prompt_tokensinteger?effective_fromtimestamptzeffective_totimestamptz?sourcetextcatalogtext?org_id ↗ org.organizationsRLS org_or_globalprice_snapshots◆ iduuidorg_iduuidworkspace_iduuidweekly_pricejsonb?weekly_price_computed_attimestamptz?unpriced_modelsjsonb?unpriced_sincetimestamptz?unpriced_attimestamptz?unpriced_computed_attimestamptz?refreshed_attimestamptzRLS standardrun_pr_delivered_states◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzpr_keytextpr_statetextread_attimestamptzclosed_attimestamptz?merged_attimestamptz?merge_commit_shatext?base_reftext?head_reftext?head_shatext?source_updated_attimestamptz?RLS standardrun_pr_outcomes◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzrun_idcitextrun_sourcetextpr_keytextprovidertext?repositorytext?numberinteger?urltext?pr_statetext?pr_state_read_attimestamptz?forge_read_attempted_attimestamptz?closed_attimestamptz?mergedbooleanmerged_attimestamptz?merge_commit_shatext?base_reftext?head_reftext?head_shatext?head_branch_existsboolean?head_branch_read_attimestamptz?ci_statetext?ci_read_attimestamptz?revertedbooleanreverted_bytext?reverted_attimestamptz?reverted_read_attimestamptz?terminal_reasontext?session_outcometext?terminal_reason_read_attimestamptz?source_updated_attimestamptz?RLS standardrun_pr_reverts◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzrepositorytextnumberinteger?merge_commit_shatext?branchtext?reverted_bytextreverted_attimestamptz?read_attimestamptzRLS standardrun_totals◆ iduuidorg_iduuidworkspace_iduuidrun_idcitextrun_sourcetextoperator_principal_iduuid?operator_keytext?agent_principal_iduuid?agent_keytext?task_reftext?cost_centertext?started_attimestamptzsealed_attimestamptz?turnsinteger?stepsintegermodel_callsintegertool_callsintegertokensjsonbcost_microsbigint?currencytextcost_basistext?price_entry_idsuuid[]cache_hit_ratenumeric(9, 8)?tool_definition_tokensinteger?context_frame_tokensinteger?steering_tokensinteger?retriesinteger?acceptedboolean?productive_rationumeric(9, 8)?advanced_stepsinteger?unproductive_stepsinteger?enforcement_tiertext?replay_gradetext?→ work_order_iduuid?end_causetext?steering_included_itemsinteger?model_msbigint?tool_msbigint?idle_msbigint?lines_addedbigint?lines_removedbigint?pull_request_urlstext[]claimed_commitsintegerchanges_read_attimestamptz?breakdownjsonbrolled_up_attimestamptzwork_order_id ↗ work.ordersRLS standardspend_attribution_dirty◆ org_iduuid◆ subjecttext◆ subject_idtextenqueued_attimestamptzRLS org_only
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 3 references leave the schema and are drawn as stubs.

crm (2 tables)

Tables in the crm schema with their referencesleads◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?emailcitextfirst_nametextlast_nametextjob_titletext?companytext?company_sizecompany_size?mobile_phonetext?countrytext?statetext?citytext?address_1text?address_2text?referral_sourcereferral_source?tracking_codetext?utm_sourcetext?utm_mediumtext?utm_campaigntext?sourcetext?page_pathtext?messagetext?marketing_consentbooleancrm_record_idtext?crm_synced_attimestamptz?crm_sync_errortext?crm_sync_lease_tokenuuid?crm_sync_lease_expires_attimestamptz?alert_requested_attimestamptz?alert_request_iduuid?alert_intenttext?alert_returningbooleanalert_email_sent_attimestamptz?alert_email_sent_totext[]alert_slack_sent_attimestamptz?alert_settled_attimestamptz?alert_errortext?lead_submissions◆ iduuid→ lead_iduuidsheet_rowserialemailcitextfirst_nametextlast_nametextjob_titletext?companytext?company_sizetext?mobile_phonetext?countrytext?statetext?citytext?address_1text?address_2text?referral_sourcetext?sourcetext?page_pathtext?tracking_codetext?utm_sourcetext?utm_mediumtext?utm_campaigntext?messagetext?marketing_consentbooleanalert_intenttextalert_returningbooleanalert_requested_attimestamptzalert_email_sent_attimestamptz?alert_email_sent_totext[]alert_slack_sent_attimestamptz?alert_sheet_sent_attimestamptz?alert_settled_attimestamptz?alert_errortext?lease_tokenuuid?lease_expires_attimestamptz?next_attempt_attimestamptz
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

environments (4 tables)

Tables in the environments schema with their referencesenvironments◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?nametextslugcitextdescriptiontext?is_defaultbooleanis_activebooleanRLS standardsecret_access_log◆ iduuidorg_iduuidworkspace_iduuidactor_user_iduuid?actiontextscopejsonbrequest_idtext?occurred_attimestamptzRLS standardsecret_keys◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?keytextsensitivebooleanmemotext?default_value_encbytea?default_value_texttext?default_value_kms_key_idtext?RLS standardsecret_values◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidsecret_key_iduuidenvironment_iduuidvalue_encbytea?value_texttext?value_kms_key_idtext?RLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

evidence (2 tables)

Tables in the evidence schema with their referencesretention_policy_versions◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?subjecttextversionintegermodetextretained_content_classestext[]ttl_daysintegerpolicy_digesttextRLS standardrun_exports◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?run_public_idcitextrequested_by_user_iduuidstatustextbundle_reftext?bundle_digesttext?bundle_bytesinteger?merkle_roottext?frame_countinteger?completed_attimestamptz?errortext?RLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

forge (13 tables)

Tables in the forge schema with their referencespull_requests◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidprovidertexthosttextprovider_repository_idtextrepositorytextnumberintegerurltexttitletext?author_logintext?statetextdraftbooleanbase_reftext?head_reftext?head_shatextbase_shatext?merge_commit_shatext?merged_attimestamptz?closed_attimestamptz?opened_attimestamptz?source_updated_attimestamptz?state_seen_attimestamptzsurvival_added_linesinteger?survival_kept_linesinteger?survival_commit_shatext?survival_skipped_filesinteger?survival_checked_attimestamptz?created_attimestamptzupdated_attimestamptzRLS standardcommits◆ iduuidorg_iduuidworkspace_iduuidprovidertexthosttextprovider_repository_idtextshatextparent_shastext[]kindtextpatch_idtext?authored_attimestamptzcommitted_attimestamptzsubjecttextfiles_changedintegeradditionsintegerdeletionsintegerfilesjsonbdiff_statustext?diff_storetext?diff_keytext?diff_sha256text?diff_bytesbigint?sourcetextfirst_seen_attimestamptzRLS standardpull_request_revisions◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuid→ pull_request_iduuidhead_shatextbase_shatext?merge_base_shatext?diff_statustextdiff_storetext?diff_keytext?diff_sha256text?diff_bytesbigint?files_changedinteger?additionsinteger?deletionsinteger?filesjsonbcompletebooleanlimitationstext[]captured_attimestamptzcreated_attimestamptzRLS standardci_runs◆ iduuidorg_iduuidworkspace_iduuidprovidertexthosttextprovider_repository_idtextrepositorytextrun_idbigintattemptintegerworkflow_idbigint?workflow_nametext?workflow_pathtext?eventtext?head_branchtext?head_shatextstatustext?conclusiontext?actor_logintext?urltext?pull_request_numbersinteger[]queued_attimestamptz?started_attimestamptz?completed_attimestamptz?source_updated_attimestamptz?jobsjsonbcreated_attimestamptzupdated_attimestamptzRLS standarddefect_links◆ iduuidorg_iduuidworkspace_iduuiditem_iduuidorigintext?→ introduced_pull_request_iduuid?found_bytext?set_by_user_iduuid?set_attimestamptzRLS standardhistory_imports◆ iduuidorg_iduuidworkspace_iduuidprovidertextrepositorytextwindow_starttimestamptzwindow_endtimestamptzpull_requestsintegerpagesintegercompleted_attimestamptzRLS standardpull_request_issues◆ iduuidorg_iduuidworkspace_iduuid→ pull_request_iduuidissue_node_idtextrepositorytextnumberintegerurltexttitletext?statetextrelationtextlinked_attimestamptzRLS standardpull_request_runs◆ iduuidorg_iduuidworkspace_iduuid→ pull_request_iduuidrun_idcitextsourcetextverified_keysjsonblinked_attimestamptzRLS standardpull_request_work_orders◆ iduuidorg_iduuidworkspace_iduuid→ pull_request_iduuidwork_order_iduuidrun_idcitext?linked_attimestamptzRLS standardreview_findings◆ iduuidorg_iduuidworkspace_iduuidprovidertexthosttextprovider_repository_idtextrepositorytextnumberintegerkindtextprovider_idbigintreview_idbigint?reviewer_logintext?reviewer_botbooleanreview_statetext?severitytext?titletext?bodytext?pathtext?lineinteger?urltext?resolvedboolean?residue_issue_numberinteger?residue_issue_urltext?pendingbooleansource_created_attimestamptzsource_updated_attimestamptz?created_attimestamptzupdated_attimestamptzRLS standardrevision_commits◆ iduuidorg_iduuidworkspace_iduuid→ revision_iduuid→ commit_iduuidpositionintegerRLS standardrevision_run_lines◆ iduuidorg_iduuidworkspace_iduuid→ revision_iduuidrun_idcitext?commitsintegerwritten_addedintegerwritten_removedintegershipped_addedintegershipped_removedintegermethodtextcomputed_attimestamptzRLS standardrun_commits◆ iduuidorg_iduuidworkspace_iduuid→ commit_iduuidrun_idcitextsourcetexttesttext?tool_use_idtext?files_outside_sessionboolean?recorded_attimestamptzRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

iam (11 tables)

Tables in the iam schema with their referencesprincipals◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidworkspace_iduuid?kindtextdisplay_nametextstatustextidp_subjecttext?→ parent_user_iduuid?metadatajsonborg_id ↗ org.organizationsparent_user_id ↗ auth.usersRLS workspace_nullableroles◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidscope_kindtextnametextdescriptiontext?is_system_defaultbooleanversiontextspend_authoritybooleanworkspace_iduuid?org_id ↗ org.organizationsRLS org_onlyauthorization_snapshots◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuidinitiating_principal_iduuidagent_principal_iduuidgrant_ceilingjsonbgrant_ceiling_digesttextsnapshot_digesttextorg_deny_generationbigintworkspace_deny_generationbigintnext_validity_boundary_attimestamptz?resolved_attimestamptzRLS standardaccess_requests◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuid→ requester_iduuidcapability_idtextscope_kindtextscope_iduuidstatustextjustificationtext?org_id ↗ org.organizationsRLS org_onlyaudit_chain_heads◆ org_iduuidseqbigintchain_hashtextupdated_attimestamptzRLS org_onlyauthorization_decisions◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuid?capability_idtextrequest_idtextactor_principal_iduuidon_behalf_of_principal_iduuid?scope_kindtextresource_scope_digesttext?run_iduuid?attempt_iduuid?→ authorization_snapshot_iduuid?org_deny_generationbigintworkspace_deny_generationbigint?outcometextreason_codetext?approval_request_iduuid?input_digesttexttrace_digesttext?decision_digesttextdecided_attimestamptzRLS workspace_nullableauthorization_deny_generations◆ iduuidorg_iduuidworkspace_iduuid?scope_kindtextgenerationbigintupdated_attimestamptzcreated_attimestamptztenantcapability_renames◆ retired_nametextcurrent_nametextretired_attimestamptzreasontextemergency_denies◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuid?scope_kindtextdeny_kindtextcapability_idtext?resource_scope_digesttext?principal_iduuid?reasontexttarget_kindtext?target_idtext?flipped_by_user_iduuid?cleared_reasontext?activebooleanactivated_attimestamptzdeactivated_attimestamptz?RLS workspace_nullableprincipal_role_assignments◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?→ principal_iduuid→ role_iduuid→ org_iduuidworkspace_iduuid?assigned_byuuid?assigned_attimestamptzexpires_attimestamptz?org_id ↗ org.organizationstenantrole_grants◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuid→ role_iduuidcapability_idtexteffecttextconditions_jsonbjsonb?org_id ↗ org.organizationsRLS org_only
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 6 references leave the schema and are drawn as stubs.

ingestion (12 tables)

Tables in the ingestion schema with their referencesrepository_bindings◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?→ connection_iduuidprovidertextprovider_repository_idtextprovider_ownertextprovider_nametextprovider_full_nametextconfigured_default_reftextobserved_attimestamptzversionintegersupersedes_binding_iduuid?RLS standardsource_connections◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?connector_idtextdisplay_nametextauth_schemetextdelivery_methodtextdelivery_configjsonb?statustextentity_countintegercursorjsonb?last_sync_attimestamptz?error_messagetext?health_statustextconsecutive_failure_countintegerlast_poll_attimestamptz?next_poll_attimestamptz?last_error_attimestamptz?oauth_account_iduuid?RLS standardauth_credentials◆ connection_iduuidauth_schemetextencrypted_payloadjsonbcreated_attimestamptzupdated_attimestamptzconnector_schemas◆ iduuidcreated_attimestamptzupdated_attimestamptzplugin_idtextschemajsonbschema_versiontextplugin_versiontextcached_attimestamptzdeletion_jobs◆ iduuidpublic_idcitextcreated_attimestamptzconnection_iduuidworkspace_iduuidorg_iduuiddelete_modetextrequested_byuuiddeleted_entitiesintegeralias_promotionsintegerstatustextstarted_attimestamptzcompleted_attimestamptz?errortext?RLS standardentity_type_mappings◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzconnection_iduuidworkspace_iduuidorg_iduuidsource_record_typetextoxagen_entity_typetextproperty_mappingsjsonbis_activebooleanRLS standardgithub_installations◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzinstallation_idtextaccount_logintext?account_idtext?account_typetext?app_slugtext?→ org_iduuid?repository_selectiontext?suspended_attimestamptz?deleted_attimestamptz?org_id ↗ org.organizationsoauth_accounts◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzorg_iduuidworkspace_iduuid?providertextprovider_user_idtextprovider_user_emailtext?provider_user_nametext?access_token_encjsonbrefresh_token_encjsonb?expires_attimestamptz?token_typetextscopestext[]last_refreshed_attimestamptz?refresh_failure_countintegerRLS workspace_nullablerepository_binding_heads◆ iduuidorg_iduuidworkspace_iduuidconnection_iduuidprovidertextprovider_repository_idtext→ current_binding_iduuidroletextcreated_attimestamptzupdated_attimestamptzRLS standardsetup_suggestions◆ iduuidpublic_idcitextcreated_attimestamptzconnection_iduuidorg_iduuidworkspace_iduuidsource_record_typetextsuggested_entity_typetextsuggested_property_mappingsjsonbreasoningtext?statustextRLS standardwebhook_subscriptions◆ iduuidpublic_idcitextcreated_attimestamptzconnection_iduuidwebhook_pathtextsecret_encjsonb?hmac_algorithmtext?hmac_headertext?provider_subscription_idtext?record_typestext[]statustextconsumertextcollector_iduuid?scope_digesttext?last_received_attimestamptz?release_errortext?release_attemptsintegerexpires_attimestamptz?updated_attimestamptzworking_copies◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidmachine_idtexthostnametextdirectorytextrepository_full_nametext?branchtext?head_committext?oxagen_presentbooleansymlinkstextpulled_committext?last_eventtextcli_versiontext?reported_by_iduuid?first_seen_attimestamptzlast_seen_attimestamptzRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 1 reference leave the schema and are drawn as stubs.

mcp (11 tables)

Tables in the mcp schema with their referencesmcp_servers◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?→ org_iduuidworkspace_iduuidorg_listing_iduuid?nametexttransport_typetextendpoint_urltextauth_strategytextauth_kindtext?auth_configjsonbhealth_statustextlast_healthcheck_attimestamptz?discovered_toolsjsonbenabledbooleanlast_import_attimestamptz?last_import_digesttext?origintextsteering_nametext?org_id ↗ org.organizationsRLS standardstudio_drafts◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?org_iduuidworkspace_iduuidserver_nametext→ mcp_server_iduuid?opsjsonbserver_tomltext?sourcejsonb?revisionintegerpr_numberinteger?pr_urltext?pr_branchtext?RLS standardcatalog_servers◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?registry_iduuidnametextversiontextis_latestbooleantitletext?descriptiontexticonsjsonbpackagesjsonbremotesjsonbtransport_typestext[]auth_kindtextrepository_urltext?website_urltext?statustextpublished_attimestamptz?upstream_updated_attimestamptz?synced_attimestamptzconsents◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidworkspace_iduuid→ user_iduuidsubject_kindtext→ mcp_server_iduuidtool_nametextstatustextgranted_attimestamptz?denied_attimestamptz?expires_attimestamptz?org_id ↗ org.organizationsuser_id ↗ auth.usersRLS standardcredential_grants◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidconnection_iduuidconnection_public_idcitextmcp_server_iduuidmcp_server_public_idcitextmcp_server_nametextrun_idtext?scopejsonbprovider_token_idtext?issued_attimestamptzexpires_attimestamptzrevoked_attimestamptz?RLS standardregistries◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidnametextbase_urltextkindtextenabledbooleanis_defaultbooleanlast_synced_attimestamptz?last_synced_cursortext?RLS standardrelays◆ iduuidpublic_idcitext→ org_iduuid→ workspace_iduuidworkspace_public_idtextnametexttoken_hashtextcreated_attimestamptzcreated_by_iduuidrevoked_attimestamptz?revoked_by_iduuid?org_id ↗ org.organizationsworkspace_id ↗ workspace.workspacesRLS standardsearch_embeddings◆ iduuidorg_iduuidworkspace_iduuidtarget_keytextcontent_hashtextdimensionsintegervectorbyteacreated_attimestamptzRLS standardserver_discoveries◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzservertextmcp_server_iduuid?statustexttriggertextrequested_attimestamptzrequested_byuuid?started_attimestamptz?finished_attimestamptz?errortext?outcometext?tool_countinteger?machinetext?source_kindtext?source_repotext?source_pathtext?source_reftext?scheduletext?upstream_digesttext?latest_versiontext?source_registry_nametext?source_versiontext?pr_numberinteger?pr_urltext?pr_branchtext?withheldtext[]withheld_upstreamtext[]offeredtext[]machine_groupstext[]run_iduuid?RLS standardstudio_listings◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptz→ draft_iduuidserver_nametextstatustextmachine_groupstext[]lock_sourcejsonbdraft_revisionintegerrequested_byuuid?requested_attimestamptzclaimed_attimestamptz?finished_attimestamptz?machinetext?tool_countinteger?errortext?RLS standardtool_snapshots◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidworkspace_iduuid→ mcp_server_iduuidtool_nametextschema_jsonjsonbcaptured_attimestamptzorg_id ↗ org.organizationsRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 6 references leave the schema and are drawn as stubs.

notification (3 tables)

Tables in the notification schema with their referencesevents◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuid?eventtextdedupe_keytextsubjecttextbodytext?deep_linktext?→ item_iduuid?→ run_iduuid?datajsonbtaintedboolean→ digest_iduuid?dispatched_attimestamptz?raised_attimestamptzitem_id ↗ work.itemsrun_id ↗ tacho.sessionsRLS workspace_nullabledeliveries◆ iduuidorg_iduuidworkspace_iduuid?→ event_iduuidchanneltextslack_channel_idtext?user_iduuid?statetexttriesintegerclaimed_attimestamptz?last_errortext?slack_tstext?slack_thread_tstext?delivered_attimestamptz?created_attimestamptzupdated_attimestamptzRLS standardnotifications◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuid?user_iduuidkindtexteventtext?titletextbodytext?deep_linktext?unreadbooleanarchivedbooleanemailed_attimestamptz?→ event_iduuid?taintedbooleanRLS workspace_nullable
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 2 references leave the schema and are drawn as stubs.

org (15 tables)

Tables in the org schema with their referencesorganizations◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?nametextslugcitextnamespacecitextavatar_urltext?plan_typetextnegotiated_actions_annualbigint?statustexttypetextwebsitetext?industrytext?employee_sizetext?settingsjsonbmodel_tiers◆ iduuid→ org_iduuidslugcitextnamecitextkindtextrankintegerguidancetextis_defaultbooleanuses_shared_keybooleancreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?archived_attimestamptz?archived_by_iduuid?RLS org_onlyscim_groups◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuiddisplay_nametextexternal_idtext?origintextRLS org_onlyvault_credentials◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?→ org_iduuid?workspace_iduuid?kindtextowner_user_iduuid?providertextharnesstext?auth_typetextsecret_ciphertextbytea?secret_key_idtext?secret_digesttext?secret_hinttext?refresh_ciphertextbytea?expires_attimestamptz?statustextlast_verified_attimestamptz?rotated_attimestamptz?labeltext?limited_untiltimestamptz?limit_windowsjsonbcredit_refusalsintegeraccount_problemtext?account_problem_attimestamptz?account_problem_evidencetext?provider_account_idtext?base_urltext?model_mapjsonbstructured_outputsboolean?embedding_spacetext?embedding_modeltext?embedding_dimensionsinteger?account_nametext?account_environmenttext?key_idtext?check_statetext?listing_iduuid?nametext?held_by_proposaltext?scopestext[]oauth_client_idtext?oauth_client_secret_ciphertextbytea?oauth_client_auth_methodtext?oauth_client_redirect_uritext?oauth_client_issuertext?oauth_token_issuertext?token_endpointtext?revocation_endpointtext?servertext?environmenttext?→ client_credential_iduuid?last_refreshed_attimestamptz?RLS workspace_nullableassistant_model_keys◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidprovidertextkey_hashtextkey_nametextkey_ciphertextbyteakey_key_idtextkey_digesttextkey_hinttextdaily_limit_usdnumeric(10, 2)statustextprovisioned_attimestamptzdisabled_attimestamptz?last_errortext?RLS org_onlydata_planes◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?→ org_iduuidkindtextmodetextconfig_ciphertextbytea?config_key_idtext?config_digesttext?statustextschema_versiontext?last_verified_attimestamptz?rotated_attimestamptz?graph_databasetext?RLS org_onlyinvitations◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidemailcitextroletextstatustextinvited_by_user_iduuidaccepted_user_iduuid?expires_attimestamptz?workspace_iduuid?workspace_roletext?RLS org_onlymodel_tier_models◆ iduuidorg_iduuid→ model_tier_iduuidharnesstextmodeltextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?RLS org_onlyonboarding_state◆ org_iduuidworkspace_iduuid?steptextfirst_frame_attimestamptz?first_run_idtext?detected_repositoryjsonb?created_attimestamptzupdated_attimestamptzRLS org_onlyorg_slug_history◆ iduuidpublic_idcitext→ org_iduuidold_slugcitextchanged_attimestamptzredirect_enabledbooleanRLS org_onlyorg_users◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuid→ user_iduuidroletextjoined_attimestamptzcan_create_workspacesbooleanuser_id ↗ auth.usersRLS org_onlyscim_group_members→ group_iduuid→ org_iduuiduser_iduuidcreated_attimestamptzRLS org_onlyscim_tokens◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidtoken_prefixtexttoken_hashtextlast_used_attimestamptz?revoked_attimestamptz?revoked_by_iduuid?RLS org_onlysso_group_roles◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuid→ provider_idtextidp_grouptextroletextrole_iduuid?workspace_iduuid?provider_id ↗ auth.sso_providersRLS org_onlystatus_reports◆ iduuidpublic_idcitext→ org_iduuid→ workspace_iduuid?window_starttimestamptzwindow_endtimestamptzdescriptiontextfactsjsonbwritten_bytextmodeltext?created_attimestamptzworkspace_id ↗ workspace.workspacesRLS org_only
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 3 references leave the schema and are drawn as stubs.

plugin (1 tables)

Tables in the plugin schema with their referencesinstalled_plugins◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?org_iduuidworkspace_iduuidplugin_typetextsourcetextnametexttitletext?descriptiontext?icon_urltext?enabledbooleanconfigjsonbRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

privacy (2 tables)

Tables in the privacy schema with their referencesprivacy_erasure_requests◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?user_iduuidorg_iduuidscopeprivacy_request_scopestatusprivacy_erasure_statusscheduled_attimestamptzerror_messagetext?RLS org_onlyprivacy_export_requests◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?user_iduuidorg_iduuidworkspace_iduuid?scopeprivacy_request_scopestatusprivacy_export_statusexport_urltext?completed_attimestamptz?error_messagetext?RLS org_only
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

ratelimit (1 tables)

Tables in the ratelimit schema with their referencesrate_limit_counters◆ bucket_keytext◆ window_starttimestamptzcountinteger
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

schema_registry (7 tables)

Tables in the schema_registry schema with their referencesschema_versions◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuid→ registry_iduuidversion_numberintegerstatustext→ parent_version_iduuid?labeltext?change_summarytext?published_attimestamptz?RLS standardschemas◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?→ version_iduuidnametextdisplay_nametextdescriptiontext?sourcetextconnector_idtext?RLS standardnode_labels◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?→ version_iduuid→ schema_iduuidnametextdisplay_nametextdescriptiontext?natural_key_propstext[]RLS standardregistries◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?→ pinned_version_iduuid?→ draft_version_iduuid?enforcement_modetextconformance_floornumeric(3, 2)reconcile_job_iduuid?reconcile_job_public_idtext?reconcile_version_iduuid?reconcile_statustext?reconcile_statejsonb?reconcile_errortext?reconcile_started_attimestamptz?reconcile_completed_attimestamptz?RLS standardrelationship_types◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?→ version_iduuid→ schema_iduuidnametextdisplay_nametextdescriptiontext?start_labeltext?end_labeltext?cardinalitytext?RLS standardproperties◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?→ version_iduuid→ node_label_iduuid?→ relationship_type_iduuid?keytextdata_typetextrequiredbooleandescriptiontext?enum_valuestext[]?item_typetext?constraintsjsonbexampletext?RLS standardschema_activations◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?schema_nametextenabledbooleanRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

security (3 tables)

Tables in the security schema with their referencesmcp_server_changes◆ iduuid→ org_iduuidworkspace_iduuid→ server_iduuidchange_typetextactor_user_iduuid?occurred_attimestamptzorg_id ↗ org.organizationsserver_id ↗ mcp.mcp_serversRLS standardorg_security_policy◆ org_iduuidmfa_requiredbooleanmfa_grace_hoursintegersso_requiredbooleanupdated_by_iduuid?created_attimestamptzupdated_attimestamptzRLS org_onlysecurity_events◆ iduuid◆ occurred_attimestamptzevent_typetextactor_user_iduuid?org_iduuidworkspace_iduuid?capabilitytext?outcometextiptext?user_agenttext?request_idtext?detailjsonb?RLS workspace_nullable
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 2 references leave the schema and are drawn as stubs.

skills (1 tables)

Tables in the skills schema with their referencesconfig_versions◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?version_labeltext→ repository_binding_iduuidcommit_shatextpull_request_numberinteger?enabledbooleanconfig_digesttextsourcesjsonbsearchjsonbunbound_repojsonbreflectionjsonbpublished_attimestamptzrepository_binding_id ↗ ingestion.repository_bindingsRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 1 reference leave the schema and are drawn as stubs.

tacho (12 tables)

Tables in the tacho schema with their referenceshosts◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidagent_keytextagent_iduuid?agent_principal_iduuid?api_key_iduuidruntime_iduuid?kindtexthostnametexthostname_digesttextplatformtextos_versiontext?archtext?os_usertextos_user_digesttextdevice_public_keytextdevice_key_fingerprinttextharnessesjsonbclaude_version_at_enrolltext?claude_execpathtext?node_versiontext?wrapper_versiontext?shelltext?statustextenrollment_claimsjsonbenrollment_signaturetextexpires_attimestamptzrevoked_attimestamptz?revoke_reasontext?managedbooleanconnection_statetextconnection_generationbigint?connection_changed_attimestamptz?connection_revisionbigint?machine_idtext?modetextbundle_version_servedinteger?bundle_etag_servedtext?steering_workspace_version_servedinteger?steering_organization_version_servedinteger?steering_workspace_commit_servedtext?steering_organization_commit_servedtext?deny_generation_org_seenbigint?deny_generation_ws_seenbigint?last_bundle_fetch_attimestamptz?last_seen_attimestamptz?last_ingest_attimestamptz?last_heartbeat_attimestamptz?gateway_last_seen_attimestamptz?spool_depthintegerspool_oldest_attimestamptz?hooks_okboolean?hooks_last_checked_attimestamptz?otel_okboolean?daemon_versiontext?daemon_uptime_sinteger?bundle_featuresjsonbmodel_base_urlsjsonbsessions_countintegerunobserved_sessions_countintegerincidents_openintegerRLS standardcheckpoints◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuidsession_iduuidseqbigintchain_headtextevent_countbigintdevice_key_fingerprinttextdevice_signaturetextplatform_key_idtext?signed_attimestamptzcountersigned_attimestamptz?anchor_roottext?anchored_attimestamptz?RLS standardcontained_launches◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidhost_iduuid?→ sandbox_instance_iduuid?session_uuiduuidgenesis_hashtextmeasurementjsonbparticipantjsonb?registered_attimestamptzsandbox_instance_id ↗ agent.sandbox_instancesRLS standardcontrol_commands◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidhost_iduuid?session_iduuid?target_kindtexttarget_idtextcommandtextpayloadjsonbrequested_modetext?delivery_modetext?degraded_reasontext?reasontext?issued_by_user_iduuid?issued_attimestamptzexpires_attimestamptz?delivered_attimestamptz?acknowledged_attimestamptz?applied_attimestamptz?applied_at_seqbigint?outcometextoutcome_detailtext?idempotency_keytext?RLS standardenrollment_tokens◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuidagent_iduuidtoken_hashtextissued_to_user_iduuidexpires_attimestamptzused_attimestamptz?used_by_host_iduuid?rejected_countintegerharnesstext?replaced_attimestamptz?refusal_codetext?refused_attimestamptz?RLS standardgateway_chains◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidhost_iduuidchain_session_uuidtextchain_genesis_hashtext?first_seen_attimestamptzlast_seen_attimestamptzRLS standardincidents◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidhost_iduuid?session_iduuid?kindtextseveritysmallintdetected_attimestamptzdetected_bytextevidencejsonbresolved_attimestamptz?resolution_notetext?RLS standardmachine_group_members◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuidgroup_nametext→ host_iduuidRLS standardsession_commands◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuidsession_iduuidseqbiginttool_use_idtext?command_digesttextcommand_headtextbash_commandtext?duration_msbigint?statustext?cwdtext?decisiontext?decision_sourcetext?policy_ruletext?RLS standardsession_files◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidsession_iduuidpathtextrepo_relative_pathtext?languagetext?readsintegerwritesintegereditsintegerdeletesintegerbytes_writtenbigintlines_addedbigintlines_removedbigintobserved_statustext?uncommitted_lines_addedbigint?uncommitted_lines_removedbigint?first_seqbigintlast_seqbigintdigest_beforetext?digest_aftertext?RLS standardsession_models◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidsession_iduuidmodeltextcanonical_modeltext?providertext?cost_basistext?requestsbigintinput_tokensbigintoutput_tokensbigintcache_read_tokensbigintcache_creation_tokensbigintthinking_tokensbigintweb_search_requestsbigintcost_microsbigintapi_duration_msbigintRLS standardsessions◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidsession_uuiduuidharness_session_idtexthost_iduuid?agent_keytextagent_iduuid?agent_principal_iduuid?initiating_principal_iduuid?initiating_user_iduuid?operator_roletext?steering_workspace_versioninteger?steering_organization_versioninteger?steering_workspace_committext?steering_organization_committext?root_session_uuiduuidparent_session_uuiduuid?subagent_idtext?subagent_typetext?subagent_descriptiontext?spawn_depthsmallintspawn_tool_use_idtext?anthropic_user_id_hashtext?anthropic_account_uuidtext?anthropic_account_idtext?anthropic_org_uuidtext?api_key_sourcetext?machine_snapshotjsonb?runtimetextharnesstextharness_versiontext?wrapper_versiontext?entrypointtext?query_source_initialtext?terminal_typetext?session_kindtext?is_child_sessionboolean?bridge_session_idtext?output_styletext?efforttext?model_initialtext?model_finaltext?fast_mode_statetext?fast_mode_disabled_reasontext?permission_mode_initialtext?permission_mode_finaltext?analytics_disabledboolean?start_typetext?start_sourcetext?end_reasontext?terminal_reasontext?outcometextis_errorboolean?api_error_statusinteger?started_attimestamptzlast_event_attimestamptzended_attimestamptz?duration_minutesinteger?sealed_attimestamptz?seal_sourcetext?cwdtext?project_dirtext?transcript_pathtext?git_remote_digesttext?repository_unlinkedbooleangit_branchtext?git_head_sha_starttext?git_head_sha_endtext?git_dirty_startboolean?worktree_pathtext?worktree_branchtext?tools_availablejsonb?mcp_serversjsonb?agents_availablejsonb?skills_availablejsonb?slash_commandsjsonb?pluginsjsonb?plugin_errorsjsonb?mcp_server_errorsjsonb?harness_capabilitiesjsonb?instructions_loadedjsonb?settings_sourcesjsonb?hooks_registeredjsonb?env_snapshotjsonb?memory_pathsjsonb?available_modelsjsonb?fallback_modelsjsonb?effort_level_settingtext?sandbox_enabledboolean?auto_compact_enabledboolean?always_thinking_enabledboolean?prompt_cache_ttltext?default_permission_mode_settingtext?num_turnsbigintnum_promptsbigintnum_model_callsbigintnum_api_errorsbigintnum_api_retriesbigintnum_tool_callsbigintnum_tool_errorsbigintnum_tool_rejectionsbigintnum_tool_asksbigintnum_subagentsbigintnum_compactionsbigintnum_model_switchesbigintnum_notificationsbigintnum_elicitationsbigintinput_tokensbigintoutput_tokensbigintcache_read_tokensbigintcache_creation_tokensbigintcache_creation_5m_tokensbigintcache_creation_1h_tokensbigintthinking_tokensbigintweb_search_requestsbigintweb_fetch_requestsbiginttotal_cost_microsbigintharness_reported_cost_microsbigint?cost_basistext?has_unknown_model_costboolean?duration_msbigint?api_duration_msbigint?api_duration_without_retries_msbigint?tool_duration_msbigint?active_time_sbigint?ttft_first_msbigint?lines_addedbigintlines_removedbigintfiles_readbigintfiles_writtenbigintfiles_deletedbigintcommands_runbigintnetwork_callsbigintcommitsbigintpushesbigintpull_requestsbigintsubagent_statsjsonb?permission_denialsjsonb?models_usedjsonb?enforcement_tiertextgateway_observed_attimestamptz?bundle_modetext?bundle_versioninteger?policy_decisionsbigintpolicy_deniesbigintseq_countbigintgenesis_hashtext?last_hashtext?final_hashtext?checkpoint_countbigintchain_verifiedbooleanchain_break_at_seqbigint?telemetry_gap_countbigintunobserved_tailbooleancompleteness_gapsjsonbsize_only_output_toolstext[]replay_gradetext?content_framesbigintbody_framesbiginttool_body_framesbigintsurfacetext?ledger_run_public_idtext?origin_message_iduuid?record_basistextbackfill_normalizertext?titletext?nametext?summarytext?summary_generated_attimestamptz?summary_modeltext?summary_input_digesttext?summary_observed_attimestamptz?summary_observed_revisiontimestamptz?summary_errortext?summary_spent_usd_microsbigintlatest_activityjsonb?latest_activity_attimestamptz?edited_nametext?edited_name_attimestamptz?edited_name_by_iduuid?edited_summarytext?edited_summary_attimestamptz?edited_summary_by_iduuid?harness_titletext?harness_title_attimestamptz?fit_readingjsonb?fit_methodtext?fit_read_attimestamptz?fit_sealed_attimestamptz?turn1_cost_microsbigintsteer_cost_microsbigintstubborn_countbigintlast_tool_call_io_hashtext?peak_context_tokensbigint?max_tool_result_tokensbigint?blocked_on_user_msbigintenv_friction_events_countbigintinput_ctx_pointsinteger?input_has_strategyboolean?initial_prompt_complexitysmallint?size_bandtext?size_band_reasontext?edited_size_bandtext?kind_iduuid?kind_reasontext?kind_modeltext?kind_inputtext?kind_classified_attimestamptz?edited_kind_iduuid?edited_kind_by_iduuid?edited_kind_attimestamptz?RLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 1 reference leave the schema and are drawn as stubs.

tools (4 tables)

Tables in the tools schema with their referencestoolbelts◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?nametextslugcitextdescriptiontext?kindtext→ cloned_from_iduuid?RLS standardmandates◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidagent_principal_iduuidrequested_byuuid?granted_byuuid?role_at_granttext?impactstext[]limitsjsonbtargetsjsonbtoolstext[]approval_rulesjsonbpurposetextvalid_fromtimestamptzvalid_totimestamptzstatustextrevoked_byuuid?revoked_reasontext?revoked_attimestamptz?RLS standardmandate_ledger◆ iduuidcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuid→ mandate_iduuidtool_call_iduuidkindtextmeasuretextvaluenumericunit_or_currencytextmeasure_kindtext?external_effect_idtext?period_keytextbalance_afternumericRLS standardtoolbelt_tools◆ iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuid→ toolbelt_iduuidtool_iduuidactivebooleanRLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. No reference leaves this schema.

work (20 tables)

Tables in the work schema with their referencesitems◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?numbertextsubjecttextdescriptiontext?labelstext[]ownertext?→ owner_iduuid?kindtext?kind_iduuid?kind_reasontext?kind_modeltext?kind_classified_attimestamptz?edited_kind_iduuid?edited_kind_by_iduuid?edited_kind_attimestamptz?source_created_bytext?source_created_attimestamptz?source_updated_bytext?source_updated_attimestamptz?closed_attimestamptz?statustextstatus_categorytextresolutiontext?pending_source_statustext?source_status_updated_attimestamptz?source_status_confirmed_attimestamptz?source_status_attempted_attimestamptz?source_status_errortext?source_status_error_codetext?source_status_retry_attimestamptz?pending_source_labelsjsonb?source_labels_attempted_attimestamptz?source_labels_writtenjsonb?source_labels_written_bytext?source_labels_errortext?pending_certify_noteinteger?certify_note_attempted_attimestamptz?certify_note_errortext?pending_source_createjsonb?source_create_attempted_attimestamptz?source_create_errortext?source_create_markertext?idempotency_keytext?pending_source_textjsonb?source_text_attempted_attimestamptz?source_text_errortext?pending_source_badgebooleansource_badge_attempted_attimestamptz?provider_idtext?source_urltext?prioritytext?priority_rawtext?estimate_minutesinteger?→ model_tier_iduuid?efforttext?planning_priorityjsonb?→ collector_iduuid?origintextrequestertext?taintedtext[]statetextapproved_by_iduuid?approved_attimestamptz?accepted_by_iduuid?accepted_attimestamptz?rework_counterintegertimeout_attimestamptz?triage_iduuid?→ duplicate_ofuuid?source_repositorytext?source_digesttext?material_revisionintegerversionintegersuggested_attimestamptz?searchtsvector?model_tier_id ↗ org.model_tiersowner_id ↗ workspace.workspace_usersRLS standarddod_items◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?→ item_iduuidrevisionintegeritem_revisionintegerbodyjsonbdigesttextauthortextRLS standardorders◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?kindtext→ item_iduuid?item_revisioninteger?sendinteger?→ dod_iduuid?→ dod_revisioninteger?→ dod_digesttext?idempotency_keytext?agent_iduuid?runtime_iduuid?runtime_tiertext?operator_iduuid?mandate_iduuid?repositorytext?repository_providertext?budget_reservation_iduuid?→ batch_idtext?released_attimestamptz?closed_attimestamptz?→ session_iduuid?attached_attimestamptz?attached_bytext?returned_attimestamptz?→ model_tier_iduuid?model_tier_sourcetext?modeltext?efforttext?effort_sourcetext?account_sourcetext?model_tier_id ↗ org.model_tierssession_id ↗ tacho.sessionsRLS standardcollectors◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?nametexttypetextconnection_iduuid?scopejsonbhealthtextcursortext?file_hashtextwrite_backjsonbsource_keytext?RLS standardbatches◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?public_idtextkindtextoperator_iduuiddecision_actorjsonb?agent_iduuidruntime_iduuiditemsjsonbrefusalsjsonblease_untiltimestamptz?stopped_attimestamptz?stopped_by_iduuid?closed_attimestamptz?→ model_tier_iduuid?model_tier_sourcetext?modeltext?efforttext?effort_sourcetext?model_tier_id ↗ org.model_tiersRLS standardtriage_decisions◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptz→ item_iduuidoutputjsonbmodeltext?prompt_digesttextpriorities_hashtextinput_digesttextcost_usdnumeric(12, 6)?item_revisioninteger?RLS standardfield_mappings◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?tracker_typetexttenanttextkindtextoxagen_valuetexttracker_fieldtexttracker_valuetextwith_labelstext[]directiontextsourcetextRLS standardinbound_events◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptz→ collector_iduuiddelivery_idtextcloudeventjsonbraw_reftext?processed_attimestamptz?outcometext?RLS standarditem_attachments◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?→ item_iduuid?→ asset_iduuiduploaded_byuuidpositioninteger?link_token_hashtext?link_revoked_attimestamptz?provider_file_idtext?provider_file_urltext?asset_id ↗ content.attachmentsRLS standarditem_embeddings◆ item_iduuidorg_iduuidworkspace_iduuidmaterial_revisionintegeritem_versionintegermodeltextdimensionsintegerembeddinghalfvec?text_digesttextembedded_attimestamptzRLS standarditem_facts◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?→ item_iduuid→ order_iduuid?kindtextsourcetextitem_revisioninteger→ dod_iduuid?→ dod_digesttext?repositorytext?pr_numberinteger?head_shatext?run_idtext?criterion_idtext?feedback_cluster_idtext?actortextdecision_actorjsonb?datajsonboccurred_attimestamptzdedupe_keytextRLS standarditem_mentions◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?→ item_iduuid→ record_iduuid→ version_iduuid?sourcestext[]labeltextpositionintegerrecord_id ↗ agent.steering_recordsversion_id ↗ agent.steering_record_versionsRLS standardlabels◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?nametexticontextcolortextvarianttextorigintextarchived_attimestamptz?archived_by_iduuid?former_namestext[]RLS standardorder_context_pins◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?→ order_iduuid→ record_iduuid→ version_iduuidchecksumtextpositionintegerrecord_id ↗ agent.steering_recordsversion_id ↗ agent.steering_record_versionsRLS standardsend_back_deliveries◆ iduuidorg_iduuidworkspace_iduuid→ order_iduuidlast_run_idtext→ item_iduuidcollector_iduuidcollector_typetextprovider_idtextnote_keytextpublic_texttextprivate_texttextstatetextclaim_tokenuuid?lease_untiltimestamptz?cursortext?reasontext?provider_note_idtext?created_attimestamptzupdated_attimestamptzRLS standardsend_backs◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?→ order_iduuidlast_run_idtextRLS standardsources◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?keytexttypetext?nametext?item_nountext?shapesjsonb?shapes_darkjsonb?pathtextfile_hashtextstatetextrefusal_reasontext?RLS standardtriage_batches◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?providertextprovider_batch_idtext?modeltextstatustextreasontextitem_countintegerrequested_byuuid?submitted_attimestamptzfinalized_attimestamptz?input_tokensintegeroutput_tokensintegercost_usd_microsbigint?errortext?itemsjsonbopen_workjsonbRLS standardtriage_corrections◆ iduuidorg_iduuidworkspace_iduuid→ decision_iduuidfieldtextbeforejsonb?afterjsonb?bytextattimestamptzRLS standardworkflow_statuses◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?nametextstagetextpositionintegersystem_keytext?RLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 10 references leave the schema and are drawn as stubs.

workspace (8 tables)

Tables in the workspace schema with their referencesworkspaces◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidnametextslugcitextnamespacecitextavatar_urltext?descriptiontext?prompt_configjsonbsettingsjsonbconsequence_rolesjsonb→ default_text_tier_iduuid?default_text_modeltext?archived_attimestamptz?archived_by_user_iduuid?cost_centertext?command_reasonstextdefault_text_tier_id ↗ org.model_tiersorg_id ↗ org.organizationsRLS org_onlyjoin_requests◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiduser_iduuidnotetext?statustextapproved_roletext?answered_byuuid?answered_attimestamptz?reasontext?expires_attimestamptzRLS standardkinds◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?subjecttextnametextslugtextdescriptiontexticontextcolortextvarianttextfixedbooleanarchived_attimestamptz?archived_by_iduuid?RLS standardno_progress_policy◆ iduuidorg_iduuidworkspace_iduuidrepeatsinteger?modetextcreated_attimestamptzupdated_attimestamptzRLS standardrouting_policy◆ iduuidorg_iduuidworkspace_iduuid?modetextsuccess_thresholdrealmin_samplesintegerwindow_daysintegerescalate_on_rejectionbooleansets_market_policybooleankind_rulesjsonb?created_attimestamptzupdated_attimestamptzRLS workspace_nullabletacho_session_policy◆ iduuidorg_iduuidworkspace_iduuidmodetextsession_limit_usdnumeric(12, 2)?model_allowjsonb?model_denyjsonbcreated_attimestamptzupdated_attimestamptzRLS standardworkspace_slug_history◆ iduuidpublic_idcitextorg_iduuid→ workspace_iduuidold_slugcitextnew_slugcitextchanged_attimestamptzredirect_enabledbooleanRLS standardworkspace_users◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ workspace_iduuid→ user_iduuidroletextjoined_attimestamptzuser_id ↗ auth.usersRLS workspace_only
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 3 references leave the schema and are drawn as stubs.

ClickHouse

Replayed the way packages/telemetry/src/migrate.ts does: schema.sql first, then every numbered migration, honouring drops. The storage manifest only sees schema.sql, so this list is the fuller one.

15
TableEngineORDER BYColumnsDefined in
assistant_reply_feedbackMergeTree()(org_id, workspace_id, run_public_id, user_id, created_at)9migrations/0030_assistant_reply_feedback.sql
audit_eventsReplacingMergeTree(occurred_at)(org_id, occurred_at, event_id)18migrations/0003_iam_audit.sql
codegraph_queriesMergeTree()(org_id, workspace_id, capability, created_at)19migrations/0041_codegraph_queries.sql
dev_logsMergeTree()(dev_session, service, ts)7schema.sql
error_eventsMergeTree()(org_id, source, created_at)14migrations/0020_error_events.sql
eventsMergeTree()(org_id, event_type, emitted_at)8schema.sql
graph_observed_labelsMergeTree()(org_id, workspace_id, target_kind, label_or_type, occurred_at)9migrations/0013_graph_observed_labels.sql
router_outcomesMergeTree()(org_id, task_class, model, created_at)15migrations/0025_router_outcomes.sql
schema_conformance_eventsReplacingMergeTree(occurred_at)(org_id, workspace_id, version_id, node_label, event_id)16migrations/0021_schema_conformance_events_idempotency.sql
served_tool_callsMergeTree()(org_id, workspace_id, server, tool, created_at)8migrations/0037_served_tool_calls.sql
spend_attribution_runsReplacingMergeTree(version, is_deleted)(org_id, workspace_id, started_at, session_uuid)22migrations/0057_spend_attribution_runs.sql
stella_operational_eventsReplacingMergeTree(received_at)(org_id, workspace_id, event_id)17migrations/0026_stella_operational_events.sql
tacho_eventsReplacingMergeTree(received_at)(org_id, workspace_id, session_uuid, seq)404migrations/0027_tacho_events.sql
tool_invocationsMergeTree()(org_id, capability_name, created_at)22schema.sql
usage_eventsMergeTree()(command, timestamp)19migrations/0019_usage_events.sql

Blob

Asset kindDescriptionAccessDriver
avatarPublic profile/logo images; the blob URL is stored on the owning entity's avatar_url column (no attachments row).publicvercel-blob
evidence_bodyFrame bodies: redacted, content-addressed, envelope-encrypted bytes under evidence/<org>/<workspace>/bodies/<key id>/<sha256>; ClickHouse tacho_events.bytes_ref holds the reference (ADR-058).privatevercel-blob
evidence_exportRun export bundles; run_exports.bundle_ref holds the reference (ADR-058). The ledger's archive segments went with its tables (ADR-5969).privatevercel-blob
generated_assetGenerated + uploaded media (chat attachments, exports, agent output); content.attachments is the source-of-truth reference row.privatevercel-blob

Background jobs

141 Inngest functions served at /api/jobs on apps/api, read from the functions array that registers them. Trigger events are parsed with the scanner the gate uses to prove every event has a sender, and event constants are resolved from their declarations.

Event → function → event

Inngest events and functions: which event starts which function, and which events a function sends onwardtriggerstriggerstriggerssendstriggerstriggerstriggerstriggerstriggerstriggerssendstriggerstriggerstriggerstriggerstriggerstriggerstriggerssendstriggerstriggerstriggerstriggerstriggerssendstriggerstriggerstriggerssendssendssendstriggerstriggerstriggerssendssendstriggerssendstriggerstriggerssendssendstriggerssendstriggerssendssendstriggerssendssendssendstriggerssendssendstriggerstriggerstriggerssendstriggerstriggerssendstriggerssendssendssendstriggerssendstriggerstriggerstriggerssendstriggerssendstriggerstriggerstriggerstriggerssendstriggerstriggerstriggerstriggerstriggerssendstriggerstriggerssendstriggerstriggerstriggerstriggerstriggerstriggerssendssendstriggerssendstriggerssendstriggerstriggerstriggerssendstriggerssendstriggerstriggerstriggerstriggerssendstriggerstriggerstriggerstriggerstriggerstriggersagent/interjection.raisedagent/interjection-timeout-sweepcron */5 * * * *forge/pull-request-backfillcron */15 * * * *auth/sso-secrets.reseal.requestedapproval/resumecron * * * * *codegraph/revision.publishedforge/finding-record.requestedassistant.attachment-sweepcron 0 * * * *ingestion/sync.requestedmemory.curate-dailycron 17 6 * * *ingestion-poll-schedulercron */5 * * * *billing/wallet.top-up.requestedauth/session-expiry-auditcron 0 * * * *work/event.receivedauth/sso-reseal-dailycron 30 3 * * *embeddings/backfill-schedulecron */30 * * * *backfill-status-reportsforge/repository.linkednotification/sweepcron */5 * * * *billing.credit-expirycron 0 3 * * *run.enrichment-sweepcron */5 * * * *code-repo/check.requestedbilling.dunning-sweepcron 0 2 * * *sandbox.template-build-sweepcron */10 * * * *codegraph/workspace.run.requestedbilling.gau-closecron 10 * * * *tacho.session-idle-closecron */15 * * * *cost.daily-rollupcron 0 1 * * *cost.price-book-synccron 0 * * * *codegraph/decisions.report.requestedbilling.usage-deliverycron */5 * * * *forge/commit-backfillcodegraph/domains.changedsteering-repo/headless-backfillcron */15 * * * *steering-repo/health-sweepcron 0 * * * *codegraph/decisions-reportcron 0 4 * * *steering/sync-sweepcron 0 * * * *codegraph/freshness.check.requestedcodegraph/embed-batchcodegraph/intake.receivedcodegraph/enrich-batchcodegraph/intake.buildcodegraph/intake.build.prcodegraph/workspace.gate.requestedingestion/connection.deletecodegraph/survival.measuredchat/conversation.openedcost/model-class-replay.approvedcodegraph/linker-roundcost/run.progressedevidence/run-export.buildcodegraph/linker-samplecron 30 4 * * *github/pull-request.mentionedingestion/webhook.provisioncodegraph/org-key-backfillmcp-server/discover.requestedinngest/function.failedprivacy/erasure.executecodegraph/release-gatecron */5 * * * *privacy/export.processrepository-config/cleanup.requestedrepository-config/rescan.requestedrun/classify-kindcodegraph/survival-requestproject-spend-attributionschedule-spend-attribution-projectioncron * * * * *run/residue.requestedrun/artifact.linkedcontext/labels-backfillcron 0 * * * *run/pull-request.linkedschema/reconcile.startsteering/sync.nowcost.findings-nightlycron 0 2 * * *agent/question.raisedwork/classify-kindcost.model-class-replay-sweepcron 23 * * * *work/base-advancedwork/item.receivedwork/item.embed-requestedcost.price-snapshotscron */5 * * * *work/triage.batch.requestedcost.run-pr-outcomes-hourlycron 15 * * * *cost.work-order-send-back-hourlycron 45 * * * *ingestion-oauth-refreshcron 0 * * * *ingestion-webhook-renewcron 0 * * * *mandate/expirycron 0 * * * *mcp-server/synccron 0 * * * *mcp.credential-grant-retentioncron 30 4 * * 0mcp.tool-snapshot-retentioncron 0 4 2 * *plugin.catalog-synccron 0 */6 * * *plugin.oauth-refresh-watcherprune-status-reportscron 35 1 * * *run.classify-kind-sweepcron */5 * * * *run.enrich-scratch-expirerun.residue-sweepcron 23 * * * *security.audit-partition-rollovercron 0 3 * * *similarity/reconcilecron 15,45 * * * *steer/repeatedcron 17 * * * *stella.session-archivecron 30 4 * * *work.attachments-sweepcron 17 * * * *work.classify-kind-sweepcron */5 * * * *work/intake-count-sweepcron 23 3 * * *work/intake-prunecron 41 4 * * *work/intake-sweepcron */15 * * * *work/item-embed-sweepcron 37 5 * * *work/order-results-sweepcron 35 * * * *work/triage-sweepcron */15 * * * *workspace/join-request-expirycron 25 3 * * *write-status-reportscron 5 */3 * * *agent/interjection-timeoutcodegraph/enrich-requestauth/sso-reseal-requestedforge/history-importcodegraph/inventory-publishedforge/finding-recordingestion-sync-requestedingestion/connection.pollbilling.wallet-top-upwork/intake-collectcodegraph/freshness-publishedembeddings/backfill.requestedspend/status-reports.backfillnotification/event.raisedrun/enrichcode-repo/checksandbox/template.build.requestedcodegraph/decisions-importcost/run.sealedcost/price-book.backdatedcodegraph/decisions-report-workspacecodegraph/domains-changesteering-repo/provision.requestedforge/repository-linkedsteering-repo/health.requestedsteering/sync.requestedcodegraph/freshness-checkcodegraph/freshness-intakecodegraph/intakecodegraph/intake-buildcodegraph/release-record-buildcodegraph/intake-debounce-prcodegraph/release-gate-workspacecodegraph/remove-on-gitlab-detachingestion-delete-connectioncodegraph/survival-recordconversation.titlecost.model-class-replayforge/commit-backfill.requestedcost.run-progressevidence.run-exportgithub/pull-request-mentioningestion-webhook-provisionmcp-server/discoverobservability.capture-failureprivacy.erasure-executeprivacy.export-processrepository-config/cleanuprepository-config/rescanrun.classify-kindspend/attribution.projectrun.residuerun/artifact-backfillrun/pull-request-backfillwork/order-pull-request-linkedschema-reconcilesteering/sync-nowstella.answer-from-ruleswork.classify-kindwork/base-advancedwork/intake-triagework/item-embedwork/triage-batchcodegraph/enrich.v2.requestedforge/pull-request.observedcodegraph/inventory.requestedingestion/github.initial-syncingestion-connection-pollwork/collector.check.requestedcost.run-rollupembeddings/backfillrun.reflectnotification/deliverrun.enrichsandbox.template-buildcost.price-book-repricerun.classify-kind-requestrun.residue-requestwork/order-run-endedsteering-repo/provisionsteering-repo/health-checksteering/syncforge/pull-request-syncingestion-github-initial-syncwork/intake-checkwork/status-synccost/findings.requestedrun/fit.requestedmemory/curate.requestedforge/pull-request-diff.readyrun/infer-workingestion/entity.receivedforge/revision-commits.readycost.findingsrun.fitmemory.curaterun/infer-workingestion-pipelinecost.run-pr-outcomes-deliveryforge/revision-attributioningestion/entity.createdingestion/entity.updated
Cron-driven functions are highlighted; everything else starts from an event some code path sends. Read left to right.
  • Functions are declared through a local createFunction adapter that can return an on-failure companion, which is why some exports destructure two functions. The companions are served too and are not drawn.

Functions

141
IdTriggerSendsRetriesFile
agent/interjection-timeoutagent/interjection.raised—3agent.interjection-timeout.ts
agent/interjection-timeout-sweep*/5 * * * *—2agent.interjection-timeout-sweep.ts
approval/resume* * * * *—3approval.resume.ts
assistant.attachment-sweep0 * * * *—3assistant.attachment-sweep.ts
auth/session-expiry-audit0 * * * *—3auth.session-expiry-audit.ts
auth/sso-reseal-daily30 3 * * *—3auth.sso-reseal.ts
auth/sso-reseal-requestedauth/sso-secrets.reseal.requested—3auth.sso-reseal.ts
backfill-status-reportsspend/status-reports.backfillspend/status-reports.backfill2status-reports.ts
billing.credit-expiry0 3 * * *—3billing.credit-expiry.ts
billing.dunning-sweep0 2 * * *—3billing.dunning-sweep.ts
billing.gau-close10 * * * *—3billing.gau-close.ts
billing.usage-delivery*/5 * * * *—3billing.usage-delivery.ts
billing.wallet-top-upbilling/wallet.top-up.requested—3billing.wallet-top-up.ts
code-repo/checkcode-repo/check.requested—3code-repo.check.ts
codegraph/decisions-importcodegraph/workspace.run.requested—4codegraph.decisions.ts
codegraph/decisions-report0 4 * * *—2codegraph.decisions.ts
codegraph/decisions-report-workspacecodegraph/decisions.report.requested—4codegraph.decisions.ts
codegraph/domains-changecodegraph/domains.changed—4codegraph.domains-change.ts
codegraph/embed-batch—4codegraph.embed.ts
codegraph/enrich-batch—4codegraph.enrich.ts
codegraph/enrich-requestcodegraph/revision.publishedcodegraph/enrich.v2.requested4codegraph.enrich-request.ts
codegraph/freshness-checkcodegraph/freshness.check.requested—4codegraph.freshness.ts
codegraph/freshness-intakecodegraph/intake.received—4codegraph.freshness.ts
codegraph/freshness-publishedcodegraph/revision.published—4codegraph.freshness.ts
codegraph/intakecodegraph/intake.received—4codegraph.intake.ts
codegraph/intake-buildcodegraph/intake.build—4codegraph.intake.ts
codegraph/intake-debounce-prcodegraph/intake.build.pr—4codegraph.intake.ts
codegraph/inventory-publishedcodegraph/revision.publishedcodegraph/inventory.requested4codegraph.inventory.ts
codegraph/linker-round—4codegraph.linker.ts
codegraph/linker-sample30 4 * * *—2codegraph.linker-sample.ts
codegraph/org-key-backfill—2codegraph.org-key-backfill.ts
codegraph/release-gate*/5 * * * *—2codegraph.release.ts
codegraph/release-gate-workspacecodegraph/workspace.gate.requested—4codegraph.release.ts
codegraph/release-record-buildcodegraph/intake.build—4codegraph.release.ts
codegraph/remove-on-gitlab-detachingestion/connection.delete—4codegraph.intake-detach.ts
codegraph/survival-recordcodegraph/survival.measured—4codegraph.survival.ts
codegraph/survival-request—2codegraph.survival.ts
context/labels-backfill0 * * * *—3context.labels-backfill.ts
conversation.titlechat/conversation.opened—1conversation.title.ts
cost.daily-rollup0 1 * * *cost/price-book.backdated3cost.daily-rollup.ts
cost.findingscost/findings.requested—3cost.findings.ts
cost.findings-nightly0 2 * * *—3cost.findings.ts
cost.model-class-replaycost/model-class-replay.approved—2cost.model-class-replay.ts
cost.model-class-replay-sweep23 * * * *—2cost.model-class-replay.ts
cost.price-book-repricecost/price-book.backdatedcost/findings.requested
cost/price-book.backdated
3cost.price-book-reprice.ts
cost.price-book-sync0 * * * *cost/price-book.backdated3cost.price-book-sync.ts
cost.price-snapshots*/5 * * * *—0cost.price-snapshots.ts
cost.run-pr-outcomes-deliveryingestion/entity.received—3cost.run-pr-outcomes.ts
cost.run-pr-outcomes-hourly15 * * * *—2cost.run-pr-outcomes.ts
cost.run-progresscost/run.progressed—3cost.run-progress.ts
cost.run-rollupcost/run.sealedcost/findings.requested
run/fit.requested
5cost.run-rollup.ts
cost.work-order-send-back-hourly45 * * * *—2cost.work-order-send-back.ts
embeddings/backfillembeddings/backfill.requested—2embeddings.backfill.ts
embeddings/backfill-schedule*/30 * * * *embeddings/backfill.requested1embeddings.backfill.ts
evidence.run-exportevidence/run-export.build—2evidence.run-export.ts
forge/commit-backfillforge/commit-backfill.requestedforge/commit-backfill.requested
forge/revision-commits.ready
2forge.commit-backfill.ts
forge/finding-recordforge/finding-record.requestedingestion/entity.received4forge.finding-record.ts
forge/history-importforge/repository.linkedforge/pull-request.observed2forge.history-import.ts
forge/pull-request-backfill*/15 * * * *forge/pull-request.observed1forge.pull-request-backfill.ts
forge/pull-request-syncforge/pull-request.observedforge/pull-request-diff.ready
forge/revision-commits.ready
run/infer-work
4forge.pull-request-sync.ts
forge/repository-linkedforge/repository.linkedforge/repository.linked
forge/revision-commits.ready
2forge.repository-linked.ts
forge/revision-attributionforge/revision-commits.ready—4forge.revision-attribution.ts
github/pull-request-mentiongithub/pull-request.mentioned—3github.pull-request-mention.ts
ingestion-connection-pollingestion/connection.pollingestion/entity.received2ingestion.connection-poll.ts
ingestion-delete-connectioningestion/connection.delete—2ingestion.delete.ts
ingestion-github-initial-syncingestion/github.initial-syncingestion/entity.received3ingestion.github-initial-sync.ts
ingestion-oauth-refresh0 * * * *—2ingestion.oauth-refresh.ts
ingestion-pipelineingestion/entity.receivedingestion/entity.created
ingestion/entity.updated
3ingestion.pipeline.ts
ingestion-poll-scheduler*/5 * * * *ingestion/connection.poll2ingestion.poll-scheduler.ts
ingestion-sync-requestedingestion/sync.requestedingestion/github.initial-sync3ingestion.sync-requested.ts
ingestion-webhook-provisioningestion/webhook.provision—3ingestion.webhook-provision.ts
ingestion-webhook-renew0 * * * *—2ingestion.webhook-renew.ts
mandate/expiry0 * * * *—3mandate.expiry.ts
mcp-server/discovermcp-server/discover.requested—2mcp-server.discover.ts
mcp-server/sync0 * * * *—1mcp-server.sync.ts
mcp.credential-grant-retention30 4 * * 0—3mcp.credential-grant-retention.ts
mcp.tool-snapshot-retention0 4 2 * *—3mcp.tool-snapshot-retention.ts
memory.curatememory/curate.requested—3memory.curate.ts
memory.curate-daily17 6 * * *memory/curate.requested1memory.curate.ts
notification/delivernotification/event.raised—4notification.deliver.ts
notification/sweep*/5 * * * *notification/event.raised1notification.deliver.ts
observability.capture-failureinngest/function.failed—0observability.capture-failure.ts
plugin.catalog-sync0 */6 * * *—1plugin.catalog-sync.ts
plugin.oauth-refresh-watcher—0plugin.oauth-refresh-watcher.ts
privacy.erasure-executeprivacy/erasure.execute—3privacy.erasure.execute.ts
privacy.export-processprivacy/export.process—2privacy.export.process.ts
project-spend-attributionspend/attribution.projectspend/attribution.project2spend-attribution-projection.ts
prune-status-reports35 1 * * *—2status-reports.ts
repository-config/cleanuprepository-config/cleanup.requested—3repository-config.cleanup.ts
repository-config/rescanrepository-config/rescan.requested—3repository-config.rescan.ts
run.classify-kindrun/classify-kind—2run.classify-kind.ts
run.classify-kind-requestcost/run.sealed—3run.classify-kind.ts
run.classify-kind-sweep*/5 * * * *—2run.classify-kind.ts
run.enrichrun/enrich—2run.enrich.ts
run.enrich-scratch-expire—3run.enrich-scratch-expire.ts
run.enrichment-sweep*/5 * * * *run/enrich2run.enrich.ts
run.fitrun/fit.requested—3run.fit.ts
run.reflectcost/run.sealedmemory/curate.requested3run.reflect.ts
run.residuerun/residue.requested—3run.residue.ts
run.residue-requestcost/run.sealed—3run.residue.ts
run.residue-sweep23 * * * *—2run.residue.ts
run/artifact-backfillrun/artifact.linked—3run.artifact-backfill.ts
run/infer-workrun/infer-work—2run.infer-work.ts
run/pull-request-backfillrun/pull-request.linked—3run.pull-request-backfill.ts
sandbox.template-buildsandbox/template.build.requested—2sandbox.template-build.ts
sandbox.template-build-sweep*/10 * * * *sandbox/template.build.requested1sandbox.template-build.ts
schedule-spend-attribution-projection* * * * *spend/attribution.project1spend-attribution-projection.ts
schema-reconcileschema/reconcile.start—2schema.reconcile.ts
security.audit-partition-rollover0 3 * * *—3security.audit-partition-rollover.ts
similarity/reconcile15,45 * * * *—2similarity.reconcile.ts
steer/repeated17 * * * *—2steer.repeated.ts
steering-repo/headless-backfill*/15 * * * *steering-repo/provision.requested1steering-repo.backfill.ts
steering-repo/health-checksteering-repo/health.requested—3steering-repo.sweep.ts
steering-repo/health-sweep0 * * * *steering-repo/health.requested1steering-repo.sweep.ts
steering-repo/provisionsteering-repo/provision.requested—4steering-repo.provision.ts
steering/syncsteering/sync.requested—3steering.sync.ts
steering/sync-nowsteering/sync.now—3steering.sync.ts
steering/sync-sweep0 * * * *steering/sync.requested1steering.sync.ts
stella.answer-from-rulesagent/question.raised—2stella.answer-from-rules.ts
stella.session-archive30 4 * * *—3stella.session-archive.ts
tacho.session-idle-close*/15 * * * *cost/run.sealed3tacho.session-idle-close.ts
work.attachments-sweep17 * * * *—3work.attachments-sweep.ts
work.classify-kindwork/classify-kind—2work.classify-kind.ts
work.classify-kind-sweep*/5 * * * *—2work.classify-kind.ts
work/base-advancedwork/base-advanced—2work.order-results.ts
work/intake-checkwork/collector.check.requested—2work.intake.ts
work/intake-collectwork/event.receivedwork/collector.check.requested4work.intake.ts
work/intake-count-sweep23 3 * * *—1work.intake.ts
work/intake-prune41 4 * * *—1work.intake.ts
work/intake-sweep*/15 * * * *—1work.intake.ts
work/intake-triagework/item.received——work.intake.ts
work/item-embedwork/item.embed-requested—3work.item-embed.ts
work/item-embed-sweep37 5 * * *—1work.item-embed.ts
work/order-pull-request-linkedrun/pull-request.linked—3work.order-results.ts
work/order-results-sweep35 * * * *—2work.order-results.ts
work/order-run-endedcost/run.sealed—5work.order-results.ts
work/status-syncwork/collector.check.requested—2work.intake.ts
work/triage-batchwork/triage.batch.requested—2work.intake.ts
work/triage-sweep*/15 * * * *—1work.intake.ts
workspace/join-request-expiry25 3 * * *—3workspace.join-request-expiry.ts
write-status-reports5 */3 * * *—2status-reports.ts

CLI and MCP surfaces

The CLI speaks HTTP to apps/api, typing responses from the contracts in @oxagen/oxagen where it imports them and by hand elsewhere; the MCP server exposes one tool per contract whose surfaces include mcp, named exactly after the contract.

MCP tools

606 tool files under apps/mcp/src/tools, 606 contracts declare the mcp surface. Every tool file matches a contract stem.

CLI commands

From apps/cli/src/program.ts, the side-effect-free Commander tree.

CommandDescription
agentGovern the workspace's registered agents
agent backfillRecord the Claude Code sessions this machine ran before it enrolled, from the transcripts Claude Code kept
agent connectConnect this device to a new agent with the request the page shows, and report the device back to the page. Enrolls nothing until you confirm
agent detectWhich harnesses this machine has (claude, codex, cursor-agent, stella) and which are enrolled
agent draftSave and finish agent setup
agent draft cancel—
agent draft finish—
agent draft get—
agent draft saveSave an unfinished agent setup
agent enrollWrap this machine: device key, host credential, collector service, harness hooks. A single-use enrollment token (oxe_1time_…) enrolls it as that registered agent's host; anything else uses a platform API token or the logged-in session
agent enroll-tokenMint a single-use enrollment token for an agent, and print the command that enrolls a machine with it. Owner only
agent exportExport a session from the local WAL
agent hostsEvery machine enrolled in this workspace, with the enforcement tier each of its apps reaches
agent label—
agent reassignPoint this host at another workspace (or org): revoke, then enroll again keeping the device key
agent registerRegister an agent: one harness on one runtime, carrying a toolbelt. Prints its credential once. Registers your own agent
agent register-machineGet a machine ready to wrap one harness: find or make its runtime and your agent, and mint an enrollment token. Prints the steps to run, or enrolls this machine with --enroll. Owner only
agent resumeLet a suspended agent run again. Owner only
agent retireRetire an agent: archive it and revoke its credentials, hosts, and mandates. Its runs keep their identity. Owner only
agent runRun one agent session under Oxagen control: a custom agent by its own command (`oxagen agent run --name my-agent -- ./my-agent`), a wrapped harness through its hooks, or Claude Code or Codex in the contained launcher with --contained
agent status—
agent suspendSuspend an agent: no governed run starts for it, and its credentials, roles, and hosts stay. Owner only
agent unenroll—
agent uninstallTake Oxagen off this machine without the desktop app: unenroll every agent, then remove the app's per-user copy, PATH links, and shell profile lines, and ~/.config/oxagen, which holds your `oxagen login` session
agent verifyRun one headless turn (Claude Code by default) and confirm it was chained
api-keyRotate a workspace API key and confirm the rotation
api-key acknowledgeConfirm the new key arrived, which revokes the key it replaced at once
api-key rotateIssue a replacement key; the old key keeps working for 24 hours
approvalsRead the workspace's approval ledger
approvals resolvedList resolved approvals, most recently resolved first, including a call a decision rule auto-approved with no person
assetIngest and manage binary assets in object storage
asset uploadIngest an asset from a public URL. With --conversation, records it as a
attentionList what waits on you in this workspace: approvals and questions on your runs, work orders in review, ready work items assigned to you, and steering suggestions
billingThe organization's billing statements
billing statementRead or export the billing statement for a week, month, quarter, year or custom period
briefingRead what changed since you last opened the Stella page: runs that ended, work orders that reached review, and how much waits on you
budgetHard period-to-date spend ceilings that gate agent runs (org + workspace)
budget no-progressThe identical calls in a row that stop a run counting as progress
budget no-progress setOpen a steering PR that changes the limit (org Owner or workspace Admin)
budget no-progress showShow the limit in force, its open steering PR, and the runs that reached it
budget setSet (create or replace) a spend ceiling (Owner/Admin/Billing only)
budget showShow configured spend ceilings with their live burn
check—
configRead or set the CLI's settings: default_workspace_id, api_url, app_url. With no flags, list them
contextSteering: record a suggestion for a steering record, or revert a merged one
context proposeRecord a suggestion (the record it should become, why). Open and merge it with `oxagen steering open` and `oxagen steering merge`.
context revertOpen a steering PR that undoes a merged one (revert_steering_pr); it merges after its own review
conversationExport and inspect chat conversations
conversation exportExport a conversation's active branch as Markdown (stdout/file) or a
costProject model cost from the baked-in rate card (observed spend: `budget show`)
credentialsManage your model credentials: API keys and Claude or ChatGPT logins. They belong to your account, so every workspace you work in can use them. The gateway attaches them to your runs and never puts one in a sandbox. Also named keys
credentials checkAsk the provider whether a credential it refused works again, once you fixed the account. A pass continues the runs that waited on it. Exits 1 unless the check passed
credentials createSave a credential on your account. With --harness it runs the harness's own sign-in and saves the login. With --provider it saves an API key. Several for one harness or provider are fine. Also named add
credentials listList your credentials in the order the gateway uses them
credentials reauthAnswer a sign-in request Oxagen sent this machine for a login the provider refused: confirm it, run the agent type's own login, and save the new login in place of the saved one
credentials removeRemove one of your credentials
credentials rotateReplace the key of one of your API keys in place. Asks first unless --yes. The new key comes from a hidden prompt or from standard input, never from an argument
credentials updateRename, pause, or resume one of your credentials
envManage workspace environments
env createCreate an environment
env getShow one environment
env listList environments in the active workspace
env rmDelete an environment (not the default)
env set-defaultPromote an environment to the workspace default
env updateUpdate an environment
findingsThe workspace's costed findings and what each would save
findings listList the findings by the money at stake, 50 a page; with --run, only those citing the run, with the frames each cites
fleetList your work items by workstream, each with its runs and their subagents, and whether each one is working, waiting on you, failed, done or quiet
graphSearch the knowledge graph, build code graphs on this machine, and upload CI reports to the code graph
graph initGive each agent on this machine Oxagen's MCP entry, then build the working tree's code graph here (default: the current folder). Needs an enrolled machine
graph rebuildBuild the working tree's code graph again, even when it has not changed (default: the current folder)
graph searchSemantic (vector) search across the customer context graph
graph statusShow every code graph built on this machine
graph stopStop the local code graph server. The next code graph call starts it again
graph uploadUpload coverage, test reports, runtime profiles, schema dumps, infrastructure plans, and API specs from CI. Signs in with the CI provider's OIDC token, with no login
hookThe command hook a wrapped harness runs: reads the payload on stdin and prints the answer
initPick the Oxagen org + workspace the CLI works in, and report this directory to it. Writes no file here
loginAuthenticate the CLI. Opens a browser by default (interactive). Use --token for CI/headless.
logoutRevoke this machine's sign-in on the server and clear it from ~/.config/oxagen/config.json.
logsSee and debug the CLI's log (~/.oxagen/logs/cli.output). Captures each invocation,
mcpList and call the tools shipped by the MCP server
mcp callCall a tool and print its complete MCP result as JSON
mcp describePrint one tool's description and schemas as JSON
mcp listPrint every available tool and its schemas as JSON
memoryReview the memories agents wrote in their harnesses: list, show, promote into steering records, or dismiss
memory dismissDismiss memories so the curator does not propose them again, or restore them with --restore
memory dropDrop one proposed record from an open memory PR. When the PR merges, the record's statements are rejected and its memories wait again
memory importRead Markdown files into steering records with a kind and a force for each statement. Previews unless --yes.
memory listList the workspace's memories ranked by uses, one row per group of memories that say the same thing
memory promotePromote waiting memories into draft steering records on the open memory PR, or open one. One record per id. Oxagen suggests each record's kind and force unless you name them
memory showShow one memory with its full text, its source, the runs that used it, and its memory PR
priceThe organization's negotiated rates in the price book: what runs are billed at
price listRead current prices and optionally scheduled negotiated rates
price removeEnd a negotiated rate so the model returns to the list price (Owner/Admin/Billing only)
price setSet a negotiated rate for one model and token class (Owner/Admin/Billing only)
repoThe workspace's repositories: one steering repository, which holds its steering record, and the linked ones its agents work on
repo branchConfirm or change a repository's production branch; the branch must exist on GitHub
repo governanceSet the steering governance mode: who may merge a steering PR in this workspace
repo linkOpen the steering PR that links a GitHub repository the workspace's GitHub App installation reaches. The link follows the merge.
repo listEvery repository the workspace binds, the steering repository first, with each one's approved default ref and binding id
repo scanList the agent harness files on a repository's default branch: instruction and rule files, skills, commands, subagent files, settings files and MCP configs. The repository need not be linked.
repo treeWhat the workspace's steering repository holds on its production branch, read from GitHub now
repo unlinkUnlink a linked repository by its binding id. A repository workspace.toml lists is removed by a steering PR. The steering repository is refused.
routerVerified-Outcome Market Router: learned, economic model routing
router policyGet or set the governed market-router policy
router policy getShow the effective policy and its provenance
router policy setUpdate the policy, which changes spend behavior (org Owner)
router previewDry-run the routing decision for a prompt (changes nothing)
runStart an agent under the contained launcher (`oxagen run -- claude -p <task>`), start a run in its own sandbox (`oxagen run --harness claude --workspace-slug <slug> --repo <owner/name>`), or read a recorded run: its chain, Oxagen's lock on it, and its locked evidence export
run answerAnswer the question a run paused to ask: --text for an agent's own question, --link or --create for a repository the workspace has not bound, --link --criterion or --deny for a residue item
run chainShow what makes a run's record tamper-evident: the hash rule, the root, the locks taken along the way, the gaps, and the replay ladder
run contextShow what each of a run's model requests carried: the prompt tokens and each block's share of them
run downloadDownload a ready run export and check its sha256 against the recorded hash
run draft-answerShow the answers stella drafted for an agent's question, the recommended one first
run exportQueue the evidence export for a locked run. Oxagen locks the export so anyone can check it offline (Owner only)
run export-statusShow where a run export stands and, once it is ready, its download link
run listList the workspace's runs, newest first
run pause-allPause every live wrapped run in the workspace as one recorded decision. Org Owner, or workspace Admin
run reopenTake back an answer stella gave to an agent's question from one of your rules, so the question waits for you again
run showShow one run: its header, the pause in force, a page of its frames, and its subagent chains
run transcriptRead one page of a run's transcript: its entries, the count per chip over the whole run, and a search of the kept bodies
run turnsShow a run's cost turn by turn: each turn's model and tool steps, frames, cache hit, cost, and the cost so far
runtimeList, create, change, or delete the runtimes agents run on, such as a laptop or a VM
runtime createName a runtime in the workspace. Org Owner
runtime listList the workspace's runtimes with the agents and hosts on each
runtime rmDelete a runtime for good, once no agent, host, or sandbox uses it. Org Owner
runtime updateRename a runtime, change its slug, or change its containment. Org Owner
sandboxStart, list, show, attach to, or stop runs in their own sandboxes. Set up sandbox runtimes, and generate and test their templates
sandbox attachOpen the terminal of one of your sandbox runs. Ctrl-] detaches and leaves the run going
sandbox listList your own sandbox runs in the workspace, live first and then the newest
sandbox pin-hooksWrite the sandbox's hook files as the launcher does, and print their hash
sandbox reviewAsk another agent to review a sandbox's work (the server refuses this until #7100 ships)
sandbox runStart a run in its own sandbox. With no prompt and no work order it opens a terminal and attaches to it
sandbox runtimeList, set up, change, or delete the workspace's sandbox runtimes. Each run on one gets its own sandbox in the workspace's Modal account
sandbox runtime createSet up a sandbox runtime on the workspace's Modal account and queue its template build. Modal bills the workspace for the build and every run. Org Owner
sandbox runtime listList the workspace's sandbox runtimes with each one's template state and size
sandbox runtime rmDelete a sandbox runtime for good, once no run on it is live and no build is running. Org Owner
sandbox runtime setupGive the workspace a cloud sandbox runtime with no settings to pick, or show the one it has. Modal bills the workspace for the template build and every run. Org Owner
sandbox runtime updateChange a sandbox runtime's setup. A new template queues a build, which Modal bills the workspace for. Org Owner
sandbox showShow one sandbox run: its state, runtime, host, and estimated cost
sandbox stopStop one of your sandbox runs and free its sandbox
sandbox templateGenerate the workspace's sandbox template into its steering repo, or test a sandbox runtime's template
sandbox template generateWrite a sandbox template from the linked repositories, or from a starter, and open a steering PR. Org Owner, or workspace Admin
sandbox template logPrint the stored log of one template build of a sandbox runtime, with credentials redacted. Org Owner, or workspace Admin
sandbox template testStart a short sandbox from a sandbox runtime's ready template and check each service and toolchain. Modal bills the workspace for it. Org Owner, or workspace Admin
secretManage the workspace credential vault
secret exportExport resolved secrets as .env (recorded to the access log)
secret importImport .env text (preview unless --yes)
secret listList vault keys (masked metadata)
secret revealReveal a secret's plaintext value (recorded to the access log)
secret rmDelete a key, or just an environment override with --env
secret setSet a secret's default value, or an override with --env
spendThe organization's agent spend, split by dimension
spend attribution—
spend exportExport Spend as CSV or a spreadsheet
spend summaryRead the stored status briefing
steerSend a steer to one run, to every run of an agent, or to every run going in the workspace
steer listList the steers and commands sent to one run, newest first, with what became of each
steeringSteering records: draft, save, merge, and dismiss suggestions, Markdown import, and instruction file findings
steering dismiss—
steering draft—
steering findingsList the statements in linked repositories' instruction files that repeat or contradict a steering record
steering import—
steering merge—
steering open—
steering promote—
steering restore-block—
steering saveSave a steering record's fields as a new suggestion, then open or merge its steering PR
steering suggestionsList the open steering suggestions and the waiting memories
stellaRead and change what stella may do alone for you
stella permissionsList each switch for what stella may do alone for you in this workspace, and whether it asks first or acts alone
stella set-permissionSet one switch to ask or alone: answer-from-rules, relaunch-failed-work, create-issues, update-source-issues or steer-agents
telemetryInspect or control anonymous CLI usage telemetry (on by default; see TELEMETRY.md)
tierThe organization's model tiers and the model each harness runs for them
tier addAdd a model tier (organization Owner only)
tier archiveArchive a tier (organization Owner only)
tier listList the model tiers in rank order, lightest first
tier modelSet the model a harness runs for a tier, or none to clear it (organization Owner only)
tier updateRename a tier, rewrite its guidance, move it, make it the default, or choose who pays for its stella turns (organization Owner only)
toolsThe workspace's connected MCP servers and their tools
tools approve-schemaApprove the output schema the gateway observed for a tool version whose server declares none
tools migrateOpen the pull request that moves the workspace's MCP servers into its steering repo, or print the one already open
verifyCheck a run export or a claim export offline: each frame's hash and link, each lock, and for a claim export each timestamp, inclusion proof, gap, read, and recording path
workSee and start the work orders Oxagen sent to the agents on this machine, claim an item of the Done Checklist or post a progress update from inside a run, and recommend a work item's model tier and effort
work claimFrom inside a work order's run, claim that the pushed head commit meets one item of the Done Checklist. A person still decides.
work listList the work orders waiting on this machine
work progressFrom inside a work order's run, post a progress update after a step of your plan. A question in --ask waits for a person's answer.
work staffingRecommend the model tier and effort for one work item from the runs similar work ran on
work startClaim a work order, then start the agent in this directory with the order's Done Checklist as its first prompt
workspaceChoose the workspace the CLI works in, and connect this machine to one
workspaceChoose the workspace the CLI works in, and connect this machine to one
workspace connectConnect this machine to a workspace: pick the installed harnesses to register, and each becomes an agent you own, such as anderson-claudecode-local
workspace connectConnect this machine to a workspace: pick the installed harnesses to register, and each becomes an agent you own, such as anderson-claudecode-local
workspace currentShow the active workspace and how this machine reports to it
workspace currentShow the active workspace and how this machine reports to it
workspace linkRemember a workspace on this machine, and with --save make it the CLI's default, without changing the one it takes sends from
workspace linkRemember a workspace on this machine, and with --save make it the CLI's default, without changing the one it takes sends from
workspace listList the workspaces you belong to as org/workspace, with the active one and the ones this machine reports to
workspace listList the workspaces you belong to as org/workspace, with the active one and the ones this machine reports to
workspace switchAsk one of your enrolled machines to take new runs from another workspace. The machine applies it when its recorder next checks in
workspace switchAsk one of your enrolled machines to take new runs from another workspace. The machine applies it when its recorder next checks in
workspace useMake a workspace the one the CLI works in and the one this machine takes sends from
workspace useMake a workspace the one the CLI works in and the one this machine takes sends from

Deployment

One AWS account managed by OpenTofu stacks under infra/stacks-new. Production runs on one application node behind an ALB. Postgres and ClickHouse run in ClickHouse Cloud (ADR-295), and Neo4j runs on the node. Staging is a dormant copy of that shape under staging.oxagen.sh, and production deploys do not wait on it. GitHub Actions deploys over OIDC.

Production topology (AWS account 916294258235)

The ALB is the only public entry to the node. One ARM node runs Caddy, four Node services, the stella-serve engine, two static sites and Neo4j. Postgres and ClickHouse run in ClickHouse Cloud (ADR-295), which admits only the node's NAT address. The node's ClickHouse container and the Aurora cluster remain as rollback targets.APP NODE · M7G.XLARGE ARM64 · PRIVATE SUBNET · NO SSHDNSoxagen.sh · www ·downloadsapp · api · mcp ·docs · stella ·internalHTTPapp.oxagen.shapi.oxagen.shmcp.oxagen.shdocs.oxagen.shstella · internalloopbackloopbackbolthttps :8443pg via NATpackage-for-node ·uploadship-to-noderestart one serviceconfig at startInternetRoute 53oxagen.sh zoneCloudFront + S3oxagen.sh · www · downloadsALBACM TLS · :443 → nodeCaddy :80host-based routingapp:3000api:4000mcp:4100docs:3002static sitesstella :3001 · internal :3003service containersone per servicestella-serveRust engine · 127.0.0.1:4300Neo4jdocker · EBS · SSM port-forwardClickHouse Cloudhttps :8443 · node copy for rollbackClickHouse CloudPostgresvia the NAT address · Aurora for rollbackSSM Parameter Store/oxagen/production/*GitHub ActionsOIDC role gha-deploy-oxagen-platformS3 deploy bucketoxagen-deploy-916294258235SSM Run Commandoxagen-deploy-service
The ALB is the only public entry to the node. One ARM node runs Caddy, four Node services, the stella-serve engine, two static sites and Neo4j. Postgres and ClickHouse run in ClickHouse Cloud (ADR-295), which admits only the node's NAT address. The node's ClickHouse container and the Aurora cluster remain as rollback targets.
  • For the node's hostnames only the ALB terminates TLS (ACM, DNS-validated). CloudFront terminates it for oxagen.sh, www.oxagen.sh and downloads.oxagen.sh. The node has no public IP and no SSH key. Administration is SSM Session Manager, and Neo4j and ClickHouse bind to 127.0.0.1 only.
  • deploy-node runs twice on ARM runners after migration-gate. Wave 1 deploys api and stella-serve in parallel, beside the code graph's services. api-healthy then waits for 20 seconds of healthy answers before wave 2 deploys app, mcp and docs. Services in a wave restart at staggered times. deploy-guard.sh ends a job green without shipping when a newer push covers the commit or production's schema is newer.
  • On every push to main, migration-gate applies pending migrations before deploy-node ships. Postgres goes through infra/tools/apply-postgres-migrations.sh, which runs Atlas on the node over SSM. ClickHouse and Neo4j go through tools/scripts/db-migrate.ts when check-store-drift.sh finds them behind. The deploy proceeds only when every store then reads current. A store that is behind or unreadable blocks it. deploy-web does not wait on the gate. The manual DB Migrate and Store Migrate workflows cover the cases the gate refuses.
  • Every service log group is archived unfiltered through Kinesis Firehose to S3. Lines matching ERROR, WARN, FATAL, CRITICAL, incident or outage, or a pino level of 40 or above, reach an EventBridge bus through a Lambda publisher. The ingestion KMS key (alias/oxagen-app/ingestion) wraps stored connector credentials and OAuth tokens.
Source refs (22, verified at build)
  • infra/stacks-new/oxagen/main.tf
  • infra/stacks-new/oxagen/data-services.tf#aws_rds_cluster
  • infra/stacks-new/oxagen/downloads.tf
  • infra/stacks-new/oxagen/observability.tf#publish-incidents
  • docs/adr/ADR-295-clickhouse-and-postgres-run-in-clickhouse-cloud.md
  • infra/modules/network/main.tf#aws_eip
  • tools/ci/deploy-guard.sh
  • tools/ci/plan-main.sh
  • infra/stacks-new/oxagen/crypto.tf#alias/oxagen-app/ingestion
  • infra/modules/app-node/main.tf
  • infra/modules/network/main.tf
  • infra/modules/static-site/main.tf
  • infra/tools/caddy/Caddyfile.alb#internal.oxagen.sh
  • infra/stacks-new/ci-deploy/infra-apply.tf
  • infra/stacks-new/ci-deploy/ssm.tf#oxagen-deploy-service
  • .github/actions/ship-to-node/action.yml
  • .github/workflows/main.yml#migration-gate:
  • tools/ci/ship-to-node.sh
  • infra/tools/apply-postgres-migrations.sh
  • infra/tools/check-store-drift.sh
  • tools/scripts/package-for-node.sh#127.0.0.1:4300
  • tools/scripts/build-env.ts

Caddy host routing on the node

Read from infra/tools/caddy/Caddyfile.alb.

HostUpstream
api.oxagen.sh127.0.0.1:4000
app.oxagen.sh127.0.0.1:3000
docs.oxagen.sh127.0.0.1:3002
gateway.oxagen.sh127.0.0.1:4000
internal.oxagen.sh127.0.0.1:3003
mcp.oxagen.sh127.0.0.1:4100
stella.oxagen.sh127.0.0.1:3001

CI job graph (main)

CI job dependency graphneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsplandeploy-webmigration-gatedeploy-codegraphdeploy-wave-1api-healthydeploy-wave-2record-main-basenpm
A push to main runs plan, then migration-gate, which applies pending migrations. deploy-web waits only on plan. deploy-wave-1 (api and stella-serve) and deploy-codegraph wait on the gate, api-healthy waits on both, and deploy-wave-2 (app, mcp and docs) waits on api-healthy. npm and record-main-base run last. Pull-request CI is pr.yml, which runs the unit lanes and records-lint.
  • Every deploy job starts with tools/ci/deploy-guard.sh, which ends it green without shipping when a newer push covers the commit or production's schema is newer than the commit.

Workflows

FileNameTriggersJobs
ci-image.ymlci-imageworkflow_dispatch schedule push2
codegraph.ymlcodegraphworkflow_dispatch5
db-migrate.ymlDB Migrate (manual)workflow_dispatch2
deploy-node.ymldeploy-nodeworkflow_call1
desktop.ymlDesktoppush release schedule workflow_dispatch4
infra.ymlinfrapull_request push workflow_dispatch3
main.ymlmainpush9
npm.ymlnpmpush workflow_dispatch1
oxagen-ci-mirror.ymloxagen-ci mirrorpush workflow_dispatch1
pr.ymlprpull_request7
release.ymlReleaseworkflow_dispatch push2
store-migrate.ymlStore Migrate (manual)workflow_dispatch1

Local development stack

Services from docker-compose.dev.yml; Postgres is published on host port 5433 so it does not collide with another Postgres on 5432. stella-serve is published on 4300, the port app and api call.

ServiceImage
postgrespostgres:16-alpine
stella-serveghcr.io/macanderson/stella-serve:${STELLA_SERVE_IMAGE_TAG:-0.9.414}
neo4jneo4j:5.24-community
clickhouseclickhouse/clickhouse-server:24.8-alpine

Configuration contract

Every deployable surface's environment, declared once and generated everywhere else.

239 variables from packages/config/src/registry.ts, the single source for .env.example, the build environment, pnpm env:pull, and the CI env checker. A dot marks a service that needs the variable. The required column gives the initial of each environment that requires it. Secrets and variables lists where each value is kept and how to refresh it.

Agent engine

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
STELLA_SERVE_TOKEN secret●●····PmanualBearer token the Stella engine was started with. The same value the engine's own container reads under its prefix; without it the assistant reports the engine as unavailable.
STELLA_SERVE_URL●●····PstaticWhere the Stella engine (stella-serve) listens. The in-app agent's turns run there; every model call and tool call comes back to this process to answer (ADR-053). Loopback on the node.

AI providers

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
AI_GATEWAY_API_KEY secret●●●···—manualVercel AI Gateway token for language models. @oxagen/ai routes text through the gateway only where OXAGEN_MODEL_PROVIDER is 'gateway', which is local development. Deployed environments run on OpenRouter and do not need it. Embeddings use VOYAGE_API_KEY instead.
ANTHROPIC_API_KEY secret······—manualCLI-only BYOK fallback: when no AI_GATEWAY_API_KEY exists anywhere, the CLI runs anthropic/* models directly against the Anthropic API with this key (other vendors and embeddings stay unavailable). The gateway key always wins when both are set. Never read by deployed services, because platform AI is gateway-only.
OPENROUTER_API_KEY secret●●●···P PmanualOpenRouter token for language models in preview and production, where OXAGEN_MODEL_PROVIDER is 'openrouter'. Local development reads it only when it sets that provider too.
OPENROUTER_MANAGEMENT_KEY secret●●●···—manualOpenRouter provisioning key, not an inference key (ADR-131). Mints one capped token per organisation so the vendor reports usage per customer. It can create, read, disable and delete every key in the account, so it is read in one module and never reaches a provider client or a log. Unset means no key is minted and every organisation serves on the shared key. Read only when OXAGEN_MODEL_PROVIDER=openrouter: a minted key cannot serve on a gateway deployment, so none is minted there (ADR-131 §9).
OPENROUTER_ORG_KEY_DAILY_LIMIT_USD●●●···—manualDaily USD ceiling on each organisation's minted OpenRouter key. A blast radius, not a budget: the credit gate bounds what a customer may spend, and this stops one runaway loop draining the account every other customer's assistant depends on. A key that hits it stops answering until midnight UTC, so set it well above a heavy legitimate day. Unset falls back to 25, which is the ceiling ADR-131 reasons about.
OPENROUTER_WORKSPACE_ID●·····—manualThe OpenRouter workspace the organizations' minted keys sit in. The code graph lists that workspace's batches to find one an earlier attempt sent before it sends again (ADR-310), so a batch runs only where this is set. Unset means code graph enrichment sends no batch and records the pass as not allowed (ADR-340).
OXAGEN_LLM_BALANCED●●●···—staticBalanced model: the gateway model id Oxagen's own calls run on when they ask for the balanced tier, and a call that names no model. A stella turn's own model comes from the organization's model tiers (#7197).
OXAGEN_LLM_BATCH●·····—staticBatch model: the OpenRouter model id bulk triage sends through OpenRouter's batch API when the platform provider is OpenRouter. Its provider must take OpenRouter batches (ADR-309).
OXAGEN_LLM_FAST●●●···—staticFast model: the gateway model id Oxagen's own quick calls run on, such as conversation titles, drafts and triage, and a stella turn's summaries and verdicts. A stella turn's own model comes from the organization's model tiers (#7197).
OXAGEN_LLM_PRECISE●●●···—staticPrecise model: the gateway model id Oxagen's own calls run on when they ask for the precise tier, such as schema chat. A stella turn's own model comes from the organization's model tiers (#7197).
OXAGEN_LLM_SUMMARY●·····—staticSummary model: the gateway model id run accounts (run names and summaries) are written on when Oxagen pays. A customer's own key keeps its fast tier.
OXAGEN_MODEL_PROVIDER●●●···—staticWhich provider serves language models: 'openrouter' in preview and production, on OPENROUTER_API_KEY, and the Vercel AI Gateway in local development. Never an automatic fallback: a silent failover would move spend to another vendor's bill. Embeddings use Voyage either way. The per-organisation keys ADR-131 mints are OpenRouter keys, so they are minted and consulted only when this is 'openrouter' (ADR-131 §9).
VOYAGE_API_KEY secret●●●···PmanualVoyage AI key for every embedding (voyage-4-large, 1,024 dimensions). One platform key serves every organisation, and every embedding is billed. Without it, embedding calls answer 503 and ingestion stores records without vectors.

Asana

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
ASANA_OAUTH_CLIENT_ID●●····—manualAsana OAuth client ID for connecting Asana as a work tracker. Connecting Asana answers not configured until this and ASANA_OAUTH_CLIENT_SECRET are set.
ASANA_OAUTH_CLIENT_SECRET secret●●····—manualAsana OAuth client secret, sent to Asana's token address when a person connects Asana and when its tokens refresh.

Azure DevOps

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
AZURE_DEVOPS_OAUTH_CLIENT_ID●●····—manualAzure DevOps OAuth client ID for connecting Azure DevOps as a work tracker. Connecting Azure DevOps answers not configured until this and AZURE_DEVOPS_OAUTH_CLIENT_SECRET are set.
AZURE_DEVOPS_OAUTH_CLIENT_SECRET secret●●····—manualAzure DevOps OAuth client secret, sent to Azure DevOps's token address when a person connects Azure DevOps and when its tokens refresh.

Basecamp

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
BASECAMP_OAUTH_CLIENT_ID●●····—manualBasecamp OAuth client ID for connecting Basecamp as a work tracker. Connecting Basecamp answers not configured until this and BASECAMP_OAUTH_CLIENT_SECRET are set.
BASECAMP_OAUTH_CLIENT_SECRET secret●●····—manualBasecamp OAuth client secret, sent to Basecamp's token address when a person connects Basecamp and when its tokens refresh.

Better Auth

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
AUTH_TOKEN_ENCRYPTION_KEY secret●●●···P PmanualBase64 256-bit KEK that wraps OAuth token encryption keys. Required in preview+production (enforced by the auth startup guard); blank locally disables it. Unset, every capability that encrypts a secret with it refuses rather than store the secret in plaintext. Generate with `openssl rand -base64 32`.
BETTER_AUTH_SECRET secret●●····D P PgenerateSecret (≥32 chars) that locks sessions and cookies. Minted once per env and applied identically to api + app so sessions validate across both.
BETTER_AUTH_TRUSTED_ORIGINS●●····—staticComma-separated origins allowed cross-origin access to the auth API.
BETTER_AUTH_URL●●····D P PstaticAuth base URL (the app origin).
OAUTH_PROXY_PRODUCTION_URL●●····—staticOfficial production origin the shared social-login OAuth app's callback is registered against (OAuth Proxy productionURL). Preview deployments relay social login through this origin. Defaults to the production app URL when unset.
OAUTH_PROXY_SECRET secret●●····—manualDedicated secret the OAuth Proxy uses to encrypt/decrypt the relay payload between production and preview deployments. MUST be set to the SAME value in production AND preview for preview social login to work (production alone only passes through). Kept separate from BETTER_AUTH_SECRET to limit blast radius. Generate with `openssl rand -base64 32`.
SSO_SECRET_KEY_ID●●●···—manualKey id written into every SSO provider secret encrypted under AUTH_TOKEN_ENCRYPTION_KEY. Unset means sso_v1. Give it a new value when you rotate that key, and list the old key in SSO_SECRET_PREVIOUS_KEYS under the old id (ADR-145).
SSO_SECRET_PREVIOUS_KEYS secret●●●···—manualRetired SSO secret keys that still open existing tokens, as comma-separated <keyId>=<base64 32-byte key> entries. Remove an entry once an auth/sso-reseal run reports no failures (ADR-145).

Billing

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
OXAGEN_ASSISTANT_MARKUP●●●···—manualMarkup (>=1) on the provider's list price for the in-app assistant's model calls on Oxagen's key. Unset means 1.20, list price plus 20%.
OXAGEN_PRICE_OVERRIDES secret●●●···—manualNegotiated model rates as inline JSON, in USD per one million tokens: {"claude-sonnet-5":{"inputPer1M":2.40,"outputPer1M":12.00,"cachedInputPer1M":0.24,"cacheWrite5mPer1M":3.00}}. Leave unset unless you have negotiated rates with a model provider.
OXAGEN_PRICE_OVERRIDES_FILE●●●···—manualPath to a JSON file of negotiated model rates, same shape as OXAGEN_PRICE_OVERRIDES. Wins over the inline value when both are set, so a mounted secret does not need the variable cleared.

Circuit breaker

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
CIRCUIT_BREAKER_FAILURE_THRESHOLD●●●···—manualConsecutive failures before a breaker opens for a wrapped dependency call (Neo4j / Stripe / ClickHouse). Optional. Defaults to 5 in packages/config/src/env.ts.
CIRCUIT_BREAKER_RESET_TIMEOUT_MS●●●···—manualMilliseconds an open breaker waits before allowing a trial (half-open) request. Optional. Defaults to 30000 in packages/config/src/env.ts.
CIRCUIT_BREAKER_SUCCESS_THRESHOLD●●●···—manualConsecutive successes required in the half-open state before a breaker closes. Optional. Defaults to 1 in packages/config/src/env.ts.

CLI

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
DO_NOT_TRACK······—manualCross-tool opt-out convention (https://consoledonottrack.com): set to '1' to disable CLI usage telemetry. Checked before OXAGEN_TELEMETRY and the persisted telemetry.enabled config.
OXAGEN_ALLOW_STDIO_MCP······—manualSet to '1' or 'true' to allow stdio-transport MCP servers to be SPAWNED as child processes from workspace file-mcp plugin configs (packages/agent file-mcp.ts). Spawning is OFF by default because a workspace-scoped config could otherwise execute arbitrary commands on the API host. Enable only for a trusted local/CLI runtime, never on shared server deployments. HTTP MCP transports are unaffected and always processed.
OXAGEN_API_TOKEN secret······—manualAPI token used by the CLI to authenticate requests; falls back to the value stored in ~/.oxagen/config.json.
OXAGEN_API_URL······—staticBase URL for the Oxagen REST API, consumed by the CLI. Falls back to the default production API URL when unset.
OXAGEN_APP_URL······—staticBase URL for the Oxagen web app, where `oxagen login` opens the browser authorize page. Falls back to the default production app URL when unset.
OXAGEN_CLI_DEBUG······—manualSet to 1 or true to write the CLI's debug log to ~/.oxagen/logs (apps/cli/src/lib/debug-log.ts). Developer tooling, never set on a deployed service.
OXAGEN_DEBUG······—manualWhen set, the CLI prints extra diagnostics (e.g. context-engine memory open failures) to stderr.
OXAGEN_ORG_ID······—manualDefault org slug for CLI commands; falls back to the value stored in ~/.oxagen/config.json.
OXAGEN_TELEMETRY······—manualSet to '0' to disable CLI usage telemetry for this invocation (equivalent to `oxagen telemetry off`). DO_NOT_TRACK=1 also disables it and takes precedence.
OXAGEN_WORKSPACE······—manualWorkspace slug that `oxagen sandbox` and `oxagen credentials` address when --workspace-slug is absent. The CLI never infers it from a repository.
OXAGEN_WORKSPACE_ID······—manualDefault workspace slug for CLI commands; falls back to the value stored in ~/.oxagen/config.json.

ClickHouse

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
CLICKHOUSE_DATABASE●●●···—staticClickHouse database name.
CLICKHOUSE_PASSWORD secret●●●···—manualClickHouse password (empty for local Docker).
CLICKHOUSE_URL●●●···D P PmanualClickHouse HTTPS endpoint.
CLICKHOUSE_USERNAME●●●···D P PmanualClickHouse user.

ClickUp

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
CLICKUP_OAUTH_CLIENT_ID●●····—manualClickUp OAuth client ID for connecting ClickUp as a work tracker. Connecting ClickUp answers not configured until this and CLICKUP_OAUTH_CLIENT_SECRET are set.
CLICKUP_OAUTH_CLIENT_SECRET secret●●····—manualClickUp OAuth client secret, sent to ClickUp's token address when a person connects ClickUp and when its tokens refresh.

Code graph

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
CODEGRAPH_BLOB_PROVIDER●·····—manualCode graph blob storage: s3 uses the existing AWS keys; gcs requires an active portable key and storage epoch.
CODEGRAPH_BUCKET_REGION●·····—manualThe AWS region of the code graph's graph file bucket. The intake creates each organization's KMS key there, because a key encrypts objects in its own region only (ADR-306). Unset, the AWS SDK's own region chain decides.
CODEGRAPH_QUERY_TOKEN secret●●●···—manualBearer token the code graph query service was started with. Without it, the code graph capabilities report the service as unavailable.
CODEGRAPH_QUERY_URL●●●···—manualWhere the code graph query service (cg-query) listens on the private network. The code graph capabilities send their calls there (ADR-326).
CODEGRAPH_WORKER_TOKEN secret●·····—manualBearer token the code graph worker presents to the API, one step at a time: for a GitLab project's access token (ADR-341), and for a GitHub repo's CI runs, which the API reads on the organization's own data plane. At least 32 characters. Unset, the API answers 503, GitLab projects do not build, and a GitHub repo's CI index has no run history.
GOOGLE_CLOUD_PROJECT●·····—manualThe Google Cloud project allowed to hold portable code graph key versions. Required when code graph storage is gcs.
GOOGLE_CLOUD_PROJECT_NUMBER●·····—manualThe explicit Google Cloud project number allowed in exact Secret Manager key references. Required for gcs code graph storage.

Email

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
SMTP_FROM_EMAIL●●●···—staticDefault sender address. Its domain must be verified at the provider.
SMTP_FROM_NAME●●●···—staticDefault sender display name.
SMTP_HOST●●●···—staticSMTP server host (Resend: smtp.resend.com).
SMTP_PASSWORD secret●●●···—manualSMTP password. For Resend this is an API key (re_…).
SMTP_PORT●●●···—staticSMTP port. 465 = implicit TLS; 587 = STARTTLS (TLS enforced).
SMTP_USERNAME●●●···—staticSMTP username (Resend: the literal "resend").

Error alerting

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
ALERT_WEBHOOK_URL secret●●●···—manualWhen set, high-severity/unhandled server errors are POSTed as a Slack-compatible `{ text, blocks }` JSON payload here (Slack/Mattermost/Discord incoming webhook, or any compatible endpoint). BYO webhook, with no vendor SDK. When unset, errors are still recorded to the ClickHouse error_events table; only the webhook alert is skipped.

File storage

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
BLOB_READ_WRITE_TOKEN secret●●····—manualVercel Blob read/write token. Authenticates the 'vercel-blob' storage driver, and lets a deployment on another driver delete files it wrote to Vercel Blob before it moved.
PR_DIFF_BUCKET●●●···—manualThe private bucket the pull request sync keeps each head commit's diff in (ADR-288). PR_DIFF_STORAGE_PROVIDER selects S3 or GCS. Unset, each revision keeps its file list and marks diff bytes unconfigured until a bucket is named.
PR_DIFF_BUCKET_REGION●●●···—manualThe AWS region of PR_DIFF_BUCKET when its provider is s3. Unset, the AWS SDK's region chain decides. GCS ignores this setting.
PR_DIFF_STORAGE_PROVIDER●●●···—manualPrivate pull request diff provider: s3 or gcs. Defaults to s3. GCS uses STORAGE_GCS_SERVICE_ACCOUNT and the private PR_DIFF_BUCKET.
SANDBOX_BUCKET●·●···—manualThe private S3 bucket of agent sandboxes (ADR-289): template root filesystems under templates/ and each run's launch prompt under sandboxes/. The control plane gives a sandbox host a download link for a template that expires soon, so a sandbox host never holds bucket credentials. Unset, launch_sandbox_run refuses every launch.
SANDBOX_BUCKET_REGION●·●···—manualThe AWS region of SANDBOX_BUCKET. Unset, the AWS SDK's own region chain decides.
SANDBOX_HOST_JOIN_TOKEN_PATH●·····—manualThe Parameter Store path that holds one join token per sandbox host (ADR-289). The control plane checks a joining host's token against the parameters under it and deletes the one that matched, so a token works once. Unset, it reads /oxagen/sandbox-hosts/join-tokens.
SANDBOX_REQUIRED_HOSTS●●●···—manualThe four host names every sandbox may reach whatever its sandbox runtime allows, comma separated: the cloud gateway, git custody, the terminal relay, and the Oxagen API (ADR-289). The control plane hashes them with the runtime's allowlist into the egress policy hash it sends a sandbox host, and the host's own settings name the same four. A sandbox on Modal may reach only the first, the cloud gateway, which relays its Git and tool calls, so its policy names the gateway alone as required (ADR-6116). Unset, no sandbox can start.
STORAGE_DRIVER●●●···—manualSelects the @oxagen/storage backend: 'gcs' (Google Cloud Storage), 's3' (AWS buckets), 'vercel-blob' (the default when unset), or 'fs' (local files).
STORAGE_FS_ROOT●●····—manualRoot directory for the 'fs' storage driver. Only read when STORAGE_DRIVER=fs. Absolute path used as-is; a relative path is anchored at process.cwd(); unset falls back to an OS-tmp directory.
STORAGE_GCS_BUCKET●●●···—manualPrivate Google Cloud Storage bucket. Required when STORAGE_DRIVER=gcs.
STORAGE_GCS_PUBLIC_BUCKET●●●···—manualPrivate Google Cloud Storage bucket for public assets served through the application. Required when STORAGE_DRIVER=gcs.
STORAGE_GCS_PUBLIC_URL●●●···—manualHTTPS origin that serves public assets. Required when STORAGE_DRIVER=gcs. Stored asset URLs retain this origin.
STORAGE_GCS_SERVICE_ACCOUNT●●●···—manualAssigned Google Cloud service-account email used to request temporary metadata credentials. Required when STORAGE_DRIVER=gcs.
STORAGE_S3_BUCKET●●····—manualThe private S3 bucket the 's3' storage driver keeps every object in except avatars and pasted images. Read only when STORAGE_DRIVER=s3.
STORAGE_S3_PUBLIC_BUCKET●●····—manualThe S3 bucket the 's3' storage driver writes public objects to, avatars and pasted images, which CloudFront serves at STORAGE_S3_PUBLIC_URL. Read only when STORAGE_DRIVER=s3.
STORAGE_S3_PUBLIC_URL●●····—manualThe https origin CloudFront serves STORAGE_S3_PUBLIC_BUCKET from. A public object's URL is this origin and its key. Read only when STORAGE_DRIVER=s3.
STORAGE_S3_REGION●●····—manualThe AWS region of both storage buckets. Unset, the AWS SDK's own region chain decides.

github

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
GITHUB_APP_CLIENT_ID●●●···—manualGitHub App OAuth client id, used for the data-connector OAuth flow. Also read in-process by apps/app's Workspace settings dialog and by apps/mcp's get_main_repository tool (envGithubUrls in packages/handlers/src/repository.main.get.ts, invoked through the kernel's invoke() rather than an HTTP call), so it must reach both of those services too, not only the callback route in api.
GITHUB_APP_CLIENT_SECRET secret●●●···—manualGitHub App OAuth client secret: what the public callback in api exchanges the returned code with. envGithubUrls (see GITHUB_APP_CLIENT_ID) also checks this is set in app and mcp, before publishing a Connect URL that api's callback could not finish without it.
GITHUB_APP_ID●●●···—manualGitHub App numeric ID. Required (with GITHUB_APP_PRIVATE_KEY) for the installation-token path in resolveGitHubToken(). Find it on the GitHub App settings page. Also required in-process by app: repository.binding-write.ts (behind link_repository) and repository.installation.list.ts mint installation tokens directly when the app invokes them, not only from api/mcp. Steering repos run on the same App (ADR-228): the steering repo provision job, repair, and health read mint their installation tokens with it.
GITHUB_APP_INSTALL_STATE_SECRET secret●●●···—manualHMAC secret that locks the OAuth state parameter for GitHub App installs. api's callback locks and checks it, and envGithubUrls (see GITHUB_APP_CLIENT_ID) also locks it when app and mcp mint the same URLs in-process.
GITHUB_APP_PRIVATE_KEY secret●●●···—manualPEM-encoded RSA private key for the GitHub App. Required (with GITHUB_APP_ID) for the installation-token path in resolveGitHubToken(). Generate in the GitHub App settings → Private keys. Also required in-process by app (see GITHUB_APP_ID).
GITHUB_APP_SLUG●●●···—manualGitHub App public slug (the path segment in https://github.com/apps/<slug>). Used to deep-link users to GitHub's install/configure page so they can add or remove orgs and repos. Optional. When unset the connection dialog derives the slug from an existing installation. Also minted by envGithubUrls (see GITHUB_APP_CLIENT_ID) in-process from app and mcp. The steering connect in api sends an install to this slug, and the steering repo health read compares a check's app against it (ADR-228). Work orders treat a pull request merged by <slug>[bot] as the Oxagen GitHub App's own merge, so that send stays in review (merged_by_app).
GITHUB_APP_WEBHOOK_SECRET secret●·····—manualGitHub App webhook secret. It validates inbound webhook payloads. A verified delivery that can change a steering repo's health also asks for a health read (S2, ADR-228).
GITHUB_PERSONAL_ACCESS_TOKEN secret●·····—manualPersonal access token (PAT) that resolveGitHubToken (packages/github/src/workspace-token.ts) falls back to, LOCAL/DEMO-ONLY, when a workspace has neither a GitHub App installation token nor its own KMS-encrypted OAuth token. It MUST NOT be set in production: a shared PAT bypasses per-workspace scoping. resolveGitHubToken refuses it and throws while NODE_ENV=production.
OXAGEN_TACHO_GITHUB_BROKER●●●···—manualSet to 1 to let hosts and sandboxes request repository-scoped GitHub credentials for their Git proxies. Any other value refuses each request (github_broker_disabled).

Infrastructure

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
AURORA_ENDPOINT······—manualAurora writer endpoint for run-db-migrations.sh. Set it to skip the AWS lookup the script otherwise does.
AURORA_PORT······—manualPort for AURORA_ENDPOINT. Defaults to 5432.
DATA_NODE_NAME······—manualName tag of the data-plane EC2 instance the DB-client tunnel scripts target. Defaults to oxagen-data.
EVENT_BUS_NAME······—manualEventBridge bus the log-event-publisher Lambda puts events on. The stack sets it on the function; the handler refuses to import without it.
NODE_NAME······—manualName tag of the EC2 instance the infra/tools scripts target. Defaults to oxagen-app.

Ingestion

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
AWS_KMS_INGESTION_KEY_ARN●●●···—manualAWS KMS key ARN for credential and private file encryption (INGESTION_CRYPTO_PROVIDER=kms). Also required in-process by app and mcp (see INGESTION_CRYPTO_PROVIDER).
EVIDENCE_RECOVERY_ENCRYPTION_KEY secret●●●···—manualPinned base64 32-byte key for explicit historical evidence recovery wrappers. Keep this key for every recovered body that names evidence:recovery:v1.
INGESTION_CRYPTO_PROVIDER●●●···—staticEncryption backend for ingestion credentials and private Vercel Blob files: 'env' (AES-256-GCM via INGESTION_ENCRYPTION_KEY) or 'kms' (AWS KMS). Also read in-process by app and mcp: resolveGitHubToken's stored-OAuth-token path (packages/github/src/workspace-token.ts) decrypts through resolveIngestionCryptoAdapterForKeyId whenever it falls back off the installation-token path, and resolveWorkspaceGithubUserToken opens the stored token that backs the list_github_installations tool.
INGESTION_ENCRYPTION_KEY secret●●●···P PmanualBase64-encoded 32-byte master key for AES-256-GCM credential and private file encryption (INGESTION_CRYPTO_PROVIDER=env). Also required in-process by app and mcp (see INGESTION_CRYPTO_PROVIDER).
MICROSOFT_DATA_CLIENT_ID●·····—manualMicrosoft DATA OAuth client id for token refresh (ingestion cron; MS Graph offline_access).
MICROSOFT_DATA_CLIENT_SECRET secret●·····—manualMicrosoft DATA OAuth client secret for token refresh (ingestion cron).
SALESFORCE_DATA_CLIENT_ID●·····—manualSalesforce DATA OAuth client id for token refresh (ingestion cron).
SALESFORCE_DATA_CLIENT_SECRET secret●·····—manualSalesforce DATA OAuth client secret for token refresh (ingestion cron).
SLACK_DATA_CLIENT_ID●·····—manualSlack DATA OAuth client id for token refresh (ingestion cron). Token rotation must be enabled in the Slack app.
SLACK_DATA_CLIENT_SECRET secret●·····—manualSlack DATA OAuth client secret for token refresh (ingestion cron).
ZOOM_DATA_CLIENT_ID●·····—manualZoom DATA OAuth client id for token refresh (ingestion cron). Zoom rotates the refresh token on each use.
ZOOM_DATA_CLIENT_SECRET secret●·····—manualZoom DATA OAuth client secret for token refresh (ingestion cron).

Inngest

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
CURSOR_CONFIG_DIR······—manualOverrides where the recorder host writes Cursor's `hooks.json` and `mcp.json`. Read on the operator's machine, not the server, and never a deployment value: it exists because Cursor can be installed against a non-default config directory, and enrolling the wrong one leaves the session unwrapped and silently unrecorded.
ENROLLMENT_SIGNING_PREVIOUS_PRIVATE_KEY secret●·····—manualThe Ed25519 key that locked enrollments before the current one (ADR-6604), set only while a rotation is in progress. The key set is locked with it as well, so a host that still pins it takes the set that carries the new key. Unset outside a rotation.
ENROLLMENT_SIGNING_PRIVATE_KEY secret●·····—manualEd25519 private key (PKCS#8 PEM, newlines as \n) this deployment locks enrollment certificates with (create_tacho_enrollment, enroll_host, create_stella_enrollment, renew_enrollment_certificate; ADR-6604). Separate from the bundle key. Each recorder host and Stella install pins the public half, by key id, from the locked key set get_enrollment_keys serves, and checks its certificate offline at every start. Unset means every enrollment and renewal refuses.
INNGEST_EVENT_KEY secret●●····P PmanualInngest event key. Required in preview+production.
INNGEST_SIGNING_KEY secret●●····P PmanualThe key that locks the calls between Inngest and this deployment (Inngest names it the signing key). Required in preview+production.
STELLA_TELEMETRY_INGEST_ENDPOINTS●·····—manualComma-separated HTTPS ingest endpoints this deployment serves for Stella operational telemetry. create_stella_enrollment refuses to lock an enrollment pointing anywhere else, so an operator cannot mint a valid document aiming a fleet of installs at a third party. Defaults to the public endpoint; plaintext entries are dropped.
TACHO_BUNDLE_SIGNING_PRIVATE_KEY secret●·●···—manualEd25519 private key (PKCS#8 PEM, newlines as \n) this deployment locks recorder policy bundles with (get_tacho_bundle) and locks run exports with (export_run, ADR-058). The matching public key travels to each host at enrollment so the recorder's hook verifies a cached bundle offline and fails closed on one it cannot verify, and into every export bundle so its verifier runs offline. The MCP service locks relay envelopes and local server calls with it. Unset means enrollment, bundle, export, relay calls, and local calls refuse. A run's record still closes when the run ends, without Oxagen's lock (ADR-195).
TACHO_INGEST_ENDPOINTS●·····—manualComma-separated HTTPS base URLs of this deployment's recorder machine endpoints (the /v1/tacho prefix). create_tacho_enrollment refuses to lock an enrollment pointing anywhere else, so an operator cannot aim a fleet of hosts at a third party. Defaults to the public endpoint; plaintext entries are dropped.
TACHO_LOCAL_TOKEN secret······—manualThe per-install bearer the recorder collector's loopback listener requires. Written into each wrapped harness's settings and into a connected app's MCP config by `oxagen agent enroll`, and read back by the hook and the `oxagen mcp-stdio` shim. Never set by hand and never a deployment value: it is minted per machine at enrollment and lives in host.json.
TACHO_MCP_ENDPOINT●·····—manualOverrides the workspace MCP endpoint the recorder collector's local gateway proxies to (ADR-078). Read on the host: it is how a local stack points the gateway at 127.0.0.1:4100 instead of the deployment's MCP host. Unset, the gateway uses the endpoints.mcp claim from the enrollment, then derives one from api_url. The API reads it too, for the claim it locks and as the upstream of the gateway's MCP relay for a sandbox daemon (ADR-6807); unset there, the relay forwards to /mcp on MCP_URL.
XDG_CONFIG_HOME······—manualThe XDG base directory the recorder host falls back to when locating Cursor's config on Linux, after CURSOR_CONFIG_DIR and before ~/.cursor. Set by the operator's own environment rather than by Oxagen, and ignored on macOS and Windows, which do not follow the XDG layout.

Jira

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
JIRA_OAUTH_CLIENT_ID●●····—manualJira OAuth client ID for connecting Jira as a work tracker. Connecting Jira answers not configured until this and JIRA_OAUTH_CLIENT_SECRET are set.
JIRA_OAUTH_CLIENT_SECRET secret●●····—manualJira OAuth client secret, sent to Jira's token address when a person connects Jira and when its tokens refresh. The collector webhook route checks the lock on each Jira delivery with it, so a delivery is refused while it is unset.

Lead alerts

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
LEAD_ALERT_EMAILS●·····—manualComma-separated addresses that receive each website lead submission. Delivery receipts and failures live on crm.lead_submissions. The API retries missing deliveries automatically. Production submissions remain pending when email delivery is unset.
LEAD_ALERT_SLACK_BOT_TOKEN secret●·····—manualSlack bot token (xoxb-) with channels:manage, channels:read, channels:join and chat:write scopes. The API posts each website submission to LEAD_ALERT_SLACK_CHANNEL and creates the channel if needed. Failed posts retry automatically. Production submissions remain pending when Slack is unset.
LEAD_ALERT_SLACK_CHANNEL●·····—manualThe Slack channel that gets each website lead, by name, with or without the #. Unset means web-leads. The API creates the channel on the first lead when no channel has the name. Read only when LEAD_ALERT_SLACK_BOT_TOKEN is set.
LEAD_SHEETS_SERVICE_ACCOUNT_EMAIL●·····—manualDedicated Google service account shared as a writer on the lead spreadsheet. The API runtime identity needs roles/iam.serviceAccountTokenCreator on this account. Delivery uses short-lived Sheets tokens through IAM impersonation.
LEAD_SHEETS_SPREADSHEET_ID●·····—manualGoogle spreadsheet ID for website submissions. The Leads tab uses columns A through P. Each submission writes to its database-assigned row with literal values. Keep physical rows in place so retries update the same submission.

Linear

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
LINEAR_API_KEY secret······—manualLinear API key (tooling/provenance; not read by deployed apps).
LINEAR_OAUTH_CLIENT_ID●●····—manualLinear OAuth application client ID. Connecting Linear uses PKCE with the app callback URL, so no client secret is needed.
LINEAR_PROJECT_ID······—staticLinear project id for the oxagen-v2 project (tooling-only).
LINEAR_WEBHOOK_SECRET secret●·····—manualShared secret of the Linear OAuth app's webhook (Linear names it the signing secret). POST /webhooks/linear checks the Linear-Signature header with it.

MCP

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
OPENAI_APPS_VERIFICATION_TOKEN··●···—manualOptional OpenAI Apps domain verification challenge. MCP serves this value publicly at /.well-known/openai-apps-challenge when set.

Neo4j

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
NEO4J_DATABASE●●●···—staticNeo4j database.
NEO4J_ORG_PROVISIONER●●●···—staticGraph provisioner for paid organisations (ADR-098): pooled (Community, dev, CI), cypher (self-managed Enterprise: CREATE DATABASE org-<namespace>), aura (not implemented; refused).
NEO4J_PASSWORD secret●●●···—manualNeo4j password. Required when a Neo4j URI or username is set.
NEO4J_URI●●●···—manualOptional Neo4j bolt(+s) URI. Set URI, username, and password together to enable the graph.
NEO4J_USERNAME●●●···—manualNeo4j user. Required when a Neo4j URI or password is set.

Next.js

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
NEXT_SERVER_ACTIONS_ENCRYPTION_KEY secret·●····PgenerateThe key Next salts every server action id with and encrypts bound action arguments under. Without it each build makes a random key, every action id changes at a deploy, and every page left open breaks until it is reloaded (#5318). Next itself reads it at build and at run time, and writes it into the build's server manifest, as it did the random key. package-for-node.sh refuses to package the app without it.

Node

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
NODE_ENV······—staticRuntime mode. Next.js sets it itself at build and start. The Inngest verifier rejects test signing keys when this is production.

OAuth providers

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
GITHUB_LOGIN_CLIENT_ID●●····P PmanualGitHub LOGIN OAuth App client id (social sign-in; minimal scopes). Not the GitHub App. Checklist: docs/runbooks/social-login-oauth-apps.md.
GITHUB_LOGIN_CLIENT_SECRET secret●●····P PmanualGitHub LOGIN OAuth App client secret. Checklist: docs/runbooks/social-login-oauth-apps.md.
GOOGLE_DATA_CLIENT_ID●●····—manualGoogle DATA OAuth client id (Workspace data scopes; future connection).
GOOGLE_DATA_CLIENT_SECRET secret●●····—manualGoogle DATA OAuth client secret.
GOOGLE_LOGIN_CLIENT_ID●●····P PmanualGoogle LOGIN OAuth client id (social sign-in; minimal scopes). Checklist: docs/runbooks/social-login-oauth-apps.md.
GOOGLE_LOGIN_CLIENT_SECRET secret●●····P PmanualGoogle LOGIN OAuth client secret. Checklist: docs/runbooks/social-login-oauth-apps.md.
MCP_OAUTH_PREREGISTERED_CLIENTS secret●●····—manualPre-registered OAuth clients for MCP authorization servers that do NOT support RFC 7591 dynamic client registration (GitHub MCP, notably). JSON object mapping the MCP server's endpoint HOST to the client registered with that provider, e.g. {"api.githubcopilot.com":{"client_id":"…","client_secret":"…","issuer":"https://github.com"}}. Each provider app must list <app-origin>/api/v1/mcp/oauth/callback as its callback URL. When a host is absent the flow falls back to dynamic client registration. Entries without a trusted authorization server issuer are ignored so discovery cannot redirect their secrets.

Observability

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
KNOWLEDGE_GRAPH_ENABLED●●●···—staticFeature flag. Set "false" to disable the Neo4j knowledge-graph writes.
LOG_LEVEL●●●···—staticPino log level for service loggers.
MCP_PORT··●···—manualHTTP port for the xmcp server.

OpenTelemetry

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
OTEL_EXPORTER_OTLP_ENDPOINT●●●···—manualOTLP HTTP collector URL (e.g. https://otel.example.com/v1/traces). When unset the SDK does not start and all spans are no-ops, which is safe for all envs. Rollback = leave unset.
OTEL_EXPORTER_OTLP_HEADERS secret●●●···—manualStandard OTEL comma-separated `key=value` header list sent to the collector (e.g. "authorization=Bearer xxx,x-tenant=oxagen"). Optional, for collectors that require auth headers. Parsed by packages/telemetry/src/tracer.ts.
OTEL_SERVICE_NAME●●●···—manualService name tag on OTEL span resources (default: oxagen). Optional. Leave unset to use the default.
OXAGEN_REGION·●····—staticThe region this process answers from, printed beside the trace id on a page's error line (#3841). Every deployed node runs in us-east-1, and the node manifest (tools/scripts/package-for-node.sh) sets it too. Unset locally, where the page says the region was not recorded.

Operator scripts

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
ADMIN_DATABASE_URL secret······—manualSuperuser Postgres connection used by provision-rls-role.ts to create the least-privilege app role. Kept separate from DATABASE_URL so the provisioning step cannot silently run through the restricted connection it is about to create.
APPLE_SIGNING_IDENTITY······—manualThe Developer ID tauri locks the macOS bundle with, so macOS can check it came from Oxagen unchanged. `-` locks it without a Developer ID, so macOS cannot tell who made it, which `pnpm dist:local` and desktop.yml use when no Developer ID is configured.
BLOG_DRAFTS······—manualSet to 1 to include draft posts when building the static research blog (apps/web/scripts/build.mjs). Unset in every deploy, so drafts never ship.
CI_SUPERSEDED_THRESHOLD······—manualHow many superseded CI runs in a row make check-superseded-runs.mjs report a pull request, when the script is run by hand. Unset or below 2 reads as 3.
CONTEXT_GRAPH_PROTOCOL_DIR······—manualPath to a local context-graph-protocol checkout. check-contextgraph-fixtures.ts verifies the vendored profile against it when set.
DB_LINT_BASE_REF······—manualThe ref `pnpm db:lint-migrations` compares new Atlas migrations against for its git-aware ordering check (#3387): a migration added since the merge base with this ref must sort after every migration already there. Defaults to origin/main.
DB_LINT_HEAD_REF······—manualThe ref `pnpm db:lint-migrations` treats as the branch's own tip for its git-aware ordering check (#3387). CI's pull_request checkout puts HEAD on GitHub's synthetic merge commit, not the PR branch itself, which collapses the merge-base fail/warn distinction into one tier. No workflow sets it today. Set it to the pull request's head commit to compare against the real PR head on such a checkout. Defaults to HEAD, which is correct everywhere else (a push checkout, a local branch).
DB_MIGRATE_STORES······—manualComma-separated stores `pnpm db:migrate` should migrate. Defaults to clickhouse,neo4j. Postgres is Atlas's job and is deliberately not in the list.
DEFAULT_BRANCH······—manualThe repository's default branch. rerun-lost-runner.mjs reruns a lost job on this branch even after newer commits land. rerun-lost-runner.yml sets it from the event's repository. Defaults to main.
DEPLOY_SERVICE······—manualThe service a deploy record names. check-deploy-tip.mjs reads it to find what is live for that service and to record what shipped (ADR-164). desktop.yml sets it to desktop on the step that records the installers' commit.
DRY_RUN······—manualSet to 1 to make check-superseded-runs.mjs print what it would post instead of posting it, when the script is run by hand.
FLEET_BUNDLE_PUBLIC_KEY_PEM······—manualPinned staging policy-bundle public key for the fleet load rig.
FLEET_CLICKHOUSE_HOST······—manualIndependently pinned staging ClickHouse hostname for fleet reconciliation.
FLEET_CLICKHOUSE_PASSWORD secret······—manualRead-only staging ClickHouse credential for fleet reconciliation.
FLEET_CLICKHOUSE_URL······—manualStaging ClickHouse HTTPS endpoint for fleet reconciliation, without credentials.
FLEET_CLICKHOUSE_USER······—manualRead-only staging ClickHouse user for fleet reconciliation.
FLEET_DATABASE_HOST······—manualIndependently pinned staging Postgres hostname for fleet reconciliation.
FLEET_DATABASE_URL secret······—manualRead-only staging Postgres connection string for fleet reconciliation.
FLEET_OPERATOR_TOKEN secret······—manualStaging operator credential used to enroll synthetic fleet hosts.
FLEET_OUTPUT_ROOT······—manualExisting private persistent runner directory for fleet reports and credentials.
FLEET_STAGING_ORIGIN······—manualExact trusted HTTPS staging origin for the fleet load rig.
GITLAB_PROJECT······—manualThe gitlab.com project, `group/project`, that `tools/scripts/gitlab-steering-exercise.ts` publishes its exercise record to. Use a scratch project: a run with --merge adds a file to its default branch.
GITLAB_TOKEN secret······—manualA gitlab.com project access token that `tools/scripts/gitlab-steering-exercise.ts` publishes one steering record with, as recorded evidence for #3762. Set it in the shell for one run only; the platform never reads it, and workspaces store their own tokens through attach_gitlab_project.
HEAD_BRANCH······—manualThe head branch of the CI run check-superseded-runs.mjs reports on, when the script is run by hand. It finds the pull request from this and HEAD_REPO when PR_NUMBER is unset.
HEAD_REPO······—manualThe head repository (owner/name) of the CI run check-superseded-runs.mjs reports on, when the script is run by hand. It finds the pull request from this and HEAD_BRANCH when PR_NUMBER is unset.
INNGEST_DEV······—manualSet to 1 to point the Inngest SDK at a local dev server instead of Inngest Cloud. tools/scripts/inngest-dev.ts sets it for every child turbo spawns.
MAIN_VERIFIED_COVER_MINUTES······—manualHow long check-main-verified.mjs treats a commit whose run a newer push replaced as pending while a later run is still going. Pushes to main share one concurrency group, so a commit can wait about two run lengths. Defaults to 180.
MAIN_VERIFIED_GRACE_MINUTES······—manualHow long after a commit lands check-main-verified.mjs refuses to conclude it has no run. The workflow races the registration of the run it looks for. Defaults to 10.
MAIN_VERIFIED_MAX_WAIT_MINUTES······—manualUpper bound on how long check-main-verified.mjs sleeps waiting the grace out before re-reading. Must stay below the workflow job's timeout-minutes. Defaults to 12.
MAIN_VERIFIED_WINDOW······—manualHow many recent commits on main check-main-verified.mjs asks about. Defaults to 10.
NPM_TOKEN secret······—manualnpm token used to publish the CLI package from a laptop. Unset skips the npm publish step of `pnpm release` rather than failing it. CI publishes with its own copy, the NPM_TOKEN repository secret (ADR-253).
OXAGEN_INSTALL_BASE······—manualBase URL the published install.sh downloads the oxagen-<rust triple> executable and its .sha256 from. Set it to install a pinned version, such as https://downloads.oxagen.sh/desktop/<version>.
OXAGEN_INSTALL_DIR······—manualDirectory install.sh puts the oxagen binary in. Defaults to ~/.local/bin.
PGSUPERPASS secret······—manualPassword for PGSUPERUSER.
PGSUPERUSER······—manualSuperuser on the cluster tools/scripts/rds-sim-check.sh simulates RDS against. The script refuses to run without it.
POLLS······—manualNumber of five-second polls install-node-scripts.sh waits for its remote command. Defaults to 150.
PR_CHANGED_FILES······—manualHow many files the pull request a CI run tests changes, from the pull_request event. ci-pr-scope.mjs checks that it read every file before it calls a pull request docs-only (#4918).
PR_DRAFT······—manualWhether the pull request a CI run tests is a draft (true or false). pipeline.yml sets it on the preflight job, and ci-pr-scope.mjs runs only the light lanes for a draft (#4918).
PR_NUMBER······—manualThe pull request number. pr.yml's records-lint job sets it, and check-adr-index.mjs reads it there. new-adr.mjs reads it to number a new ADR, and check-superseded-runs.mjs reads it as the pull request to report on when the script is run by hand.
PRODUCTION_DATABASE_URL secret······—manualMigration connection for Atlas's `prod` env (packages/database/atlas.hcl), read by db-migrate.yml and no other workflow. Holds a role that may run DDL against pre-existing schemas: the app role may only CREATE in schemas it owns, so migrating through DATABASE_URL fails 42501 on billing and friends.
RERUN_RUN_ID······—manualThe failed CI run that rerun-lost-runner.mjs checks for jobs whose runner was lost. rerun-lost-runner.yml sets it from the workflow_run event, or from the run_id input on a manual dispatch.
SCR_OWNER······—manualGitHub owner to read all five SCR corpus repos under, for a fork or a test organization. Unset, the check reads each repo where it lives.
SOURCE_COMMIT······—manualThe commit a manual app deploy ships, from the dispatch's source_commit input. check-deploy-tip.mjs --schema reads it in place of GITHUB_SHA, which is main's head on a dispatch, to refuse code older than production's schema (#5247).
STALE_MERGE_BASE_REF······—manualRef the stale-merge-base check (#3237) treats as main's current tip. Defaults to origin/main.
STALE_MERGE_BRANCH_REF······—manualRef the stale-merge-base check (#3237) treats as the branch under review. Defaults to HEAD.
STANDALONE······—manualSet to 1 to build apps/app or apps/docs with Next's standalone output. tools/scripts/package-for-node.sh sets it for the self-hosted node bundle. Unset, Next.js writes its default output.
TAURI_SIGNING_PRIVATE_KEY secret······—manualThe key that locks the desktop app's updates (minisign; contents or a path). `pnpm dist:local` reads ~/.tauri/oxagen-desktop.key when this is unset; desktop.yml holds it as a secret. Unset builds carry no updater artifacts.
TAURI_SIGNING_PRIVATE_KEY_PASSWORD secret······—manualPassword of TAURI_SIGNING_PRIVATE_KEY. The key has none, so this is set to the empty string: an absent variable makes tauri prompt for one.
VISION_GATE_BASE······—manualRef the vision gate diffs against. Defaults to origin/main.
VISION_GATE_MODEL······—manualModel the vision gate judges a diff with.
VISION_GATE_STRICT······—manualSet to 1 to make a drifts verdict fail the vision gate instead of only printing it.
WEB_PORT······—manualPort for the apps/web static dev server (apps/web/scripts/dev.mjs). Defaults to 5500; local convenience only, never read by a deploy.
WRITE_MANIFEST_IMAGE······—manualContainer image the packaged node bundle's run manifest names. Defaults to node:24.21.0-alpine.

Postgres

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
DATABASE_URL secret●●●···D P PmanualPostgres connection string. Deployed environments read it from Parameter Store (ADR-240); local dev points at the Docker container.

Privacy

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
PRIVACY_ERASURE_GRACE_DAYS●·····—staticGrace period in days before a hard-delete erasure job runs (GDPR Art.17). Defaults to 30 when unset. Set to 0 for immediate erasure in test envs.

Public URLs

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
APP_URL●●●···—staticServer-side app origin used to build plugin OAuth authorize/callback URLs (falls back to NEXT_PUBLIC_APP_URL). Not browser-exposed.
MARKETING_URL●·····—staticPublic marketing website origin (oxagen.sh). The /v1/cms/* lead routes use it to build the emailed reader link and CORS allows it as a cross-origin caller. Not browser-exposed.
MCP_URL●●●···—staticMCP server origin used to build install instructions and client connections.
NEXT_PUBLIC_API_URL client●●●···D P PstaticPublic api origin (browser-exposed). The api and mcp read it too: the Inngest serve host, and the absolute download URL get_run_export mints.
NEXT_PUBLIC_APP_URL client·●····D P PstaticPublic app origin (browser-exposed).
WORK_ATTACHMENT_URL●●····—manualOrigin that serves a work item attachment's public link (/work-attachments/<token>). It must be a cookieless origin that is not the app's. Tracker create writes a link into an issue only when this is set, and names each file without a link otherwise. Not browser-exposed.

Rate limiting

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
RATE_LIMIT_CHAT_PER_MIN●·····—manualMax chat send/stream requests per minute per workspace (fallback: per org, then per IP) on /v1/**/chat/*. Optional. Defaults to 60 in packages/config/src/env.ts.
TRUST_EDGE_CLIENT_IP_HEADER●●●···—manualWhether the x-oxagen-client-ip header written by the edge is believed. Optional. Defaults to false. Set to "true" only AFTER the Caddy config that SETS that header (infra/tools/caddy/Caddyfile.alb) is uploaded and reloaded; until then the old config forwards a caller-supplied copy of it unchanged and the value would be attacker-controlled (ADR-083). Once that config is live it is what attributes the caller, because the same config rewrites x-forwarded-for to a single client address and leaves no proxy entry for TRUSTED_PROXY_CIDRS to vouch with.
TRUSTED_PROXY_CIDRS●●●···—manualComma-separated CIDRs or addresses of the proxies in front of apps/api. With the edge header (TRUST_EDGE_CLIENT_IP_HEADER) this is how a client address is attributed: the walk goes right through x-forwarded-for while each entry is a named proxy and stops at the first that is not, so a caller padding the header cannot move the result. NAME THE PROXIES' OWN SUBNETS, never an RFC1918 supernet like 10.0.0.0/8: a list wide enough to contain a caller makes the walk skip that caller as though it were a proxy and return an entry further left, which is one the caller wrote: the exact bypass this form exists to close. Once set it decides alone, and it returns nothing when no named proxy vouched for an entry, so it does not belong in a deployment whose edge rewrites x-forwarded-for to a single client address (ADR-083). Unset, no client address is derived at all, and the two things that read one both fail safe: the IAM ip_ranges / ip_allow conditions deny, and the pre-authentication IP ceilings on the recorder and Stella machine routes skip rather than pooling every caller into one bucket. Empty by default, which means those IP controls are OFF and say so in the log.

Release / build metadata

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
PLATFORM_VERSION●●●···—manualPlatform version string surfaced by @oxagen/config platformVersion(). Nothing sets it in production today: the release script's sync went with the Vercel deploy, and Parameter Store does not hold it, so platformVersion() falls back to "0.0.0". Declared in turbo.json globalEnv so a version change busts the build cache. Read via raw process.env and absent from baseEnvSchema on purpose: it is a release tag, not a service setting.

Security

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
AUDIT_EXPORT_SIGNING_SECRET secret●●●···—generateHMAC-SHA256 secret that locks audit-log export tokens, so exported files can be verified as untampered. OPTIONAL: baseEnvSchema declares it `.optional()` and the audit export route falls back to BETTER_AUTH_SECRET when it is unset. A value shorter than 16 characters counts as unset. Setting a dedicated value changes the key that locks export tokens and invalidates outstanding export download URLs. Generate with `openssl rand -base64 32`.
SERVER_ACTIONS_ALLOWED_ORIGINS·●····—manualExtra hosts allowed to POST a Next server action to apps/app, comma-separated. Next rejects a server action whose Origin is not the deployment's own host, so a custom domain in front of the app has to be named here or every mutation 403s.
TENANT_RLS_ENFORCEMENT_ENABLED●●●···—manualGates the RLS startup checks only. Postgres RLS policies filter every tenant query whatever this says: no policy reads app.rls_bypass, and system paths assume the oxagen_system role (ADR-5879). When true, a service refuses to start if its database role is a superuser, has BYPASSRLS, or inherits oxagen_system (assertRlsConnectionSafe). When UNSET it defaults to true wherever NODE_ENV=production, staging included, unless VERCEL_ENV says otherwise, and to false in dev and test. A production process refuses to boot if this is forced to false (assertRlsEnforcedInProduction). Locally, false lets a service start on a superuser connection, which skips RLS.

Slack app

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
SLACK_APP_CLIENT_ID·●····—manualOxagen Slack app OAuth client id. Organization settings uses it to start the Connect Slack flow.
SLACK_APP_CLIENT_SECRET secret·●····—manualOxagen Slack app OAuth client secret. The callback sends it to oauth.v2.access to exchange the code.
SLACK_APP_ID·●····—manualOxagen Slack app id. The callback rejects an oauth.v2.access answer for another app. Unset, the callback checks no app id.
SLACK_APP_SIGNING_SECRET secret······—manualShared secret of the Oxagen Slack app (Slack names it the signing secret), for checking Slack requests. Nothing reads it yet. The C8 collector will.

Stripe

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
STRIPE_PUBLISHABLE_KEY······—manualStripe publishable key. Every environment, production included, is the sandbox's pk_test_ key until the production cutover. Provisioning-only: no service reads it. The browser reads the NEXT_PUBLIC_ prefixed name. Keep the two equal.
STRIPE_SECRET_KEY secret●●····D P PmanualStripe secret key. Every environment, production included, binds to the shared Stripe sandbox (sk_test_) until the maintainer cuts production over to live keys; see docs/ops/stripe-sandbox-mode.md.
STRIPE_TAX_ENABLED●●····—manualWhen 'true', enables Stripe Tax automatic_tax on all checkout sessions. Ships dark; flip on only after Stripe Tax is registered/active in the dashboard.
STRIPE_WEBHOOK_SECRET secret●●····D P PmanualStripe webhook secret (whsec_; Stripe names it the signing secret) of the endpoint registered on the shared sandbox for this environment's API URL; production's is the sandbox endpoint for https://api.oxagen.sh/webhooks/stripe until the cutover.

Teamwork

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
TEAMWORK_OAUTH_CLIENT_ID●●····—manualTeamwork OAuth client ID for connecting Teamwork as a work tracker. Connecting Teamwork answers not configured until this and TEAMWORK_OAUTH_CLIENT_SECRET are set.
TEAMWORK_OAUTH_CLIENT_SECRET secret●●····—manualTeamwork OAuth client secret, sent to Teamwork's token address when a person connects Teamwork and when its tokens refresh.

Testing / e2e

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
E2E_TEST·●····—manualThe exact string "true" on the e2e webServer (apps/app/playwright.config.ts) and the e2e seed (apps/app seed:e2e): packages/auth relaxes email verification and rate limiting on that value, only when VERCEL is unset and BETTER_AUTH_URL is a loopback origin (local-env.ts), so a leaked value on a deployed host relaxes nothing. Declared in turbo.json test:e2e env. Not for dev/preview/prod. NOTE: read via raw process.env, not in baseEnvSchema (test-only).
OXAGEN_LOCAL_DEV······—manualSet to "1" by tools/scripts/dev.ts for the local dev stack. Consumed by packages/auth to make local-env detection deterministic instead of racing NODE_ENV at module-load time. Believed only when VERCEL is unset and BETTER_AUTH_URL is a loopback origin (local-env.ts), so it relaxes nothing on a deployed host. NOTE: read via raw process.env, not in baseEnvSchema (dev-tooling only).
STRIPE_E2E·●····—manualWhether the e2e job resolved a Stripe test key: "1" when STRIPE_TEST_SECRET_KEY was mapped into STRIPE_SECRET_KEY, "0" on a fork pull request without one (pay.spec.ts skips). Set by the e2e webServer env (apps/app/playwright.config.ts) and the CI job (WL-48). NOTE: read via raw process.env, not in baseEnvSchema (test-only).

Trello

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
TRELLO_OAUTH_CLIENT_ID●●····—manualTrello OAuth client ID for connecting Trello as a work tracker. Connecting Trello answers not configured until this and TRELLO_OAUTH_CLIENT_SECRET are set.
TRELLO_OAUTH_CLIENT_SECRET secret●●····—manualTrello OAuth client secret, sent to Trello's token address when a person connects Trello and when its tokens refresh.

Wrike

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
WRIKE_OAUTH_CLIENT_ID●●····—manualWrike OAuth client ID for connecting Wrike as a work tracker. Connecting Wrike answers not configured until this and WRIKE_OAUTH_CLIENT_SECRET are set.
WRIKE_OAUTH_CLIENT_SECRET secret●●····—manualWrike OAuth client secret, sent to Wrike's token address when a person connects Wrike and when its tokens refresh.

Secrets and variables

Where each secret and setting is kept and how to mint a new one.

SSM Parameter Store holds every value, in AWS account 916294258235 in us-east-1 (ADR-240). Run pnpm env:pull to write /oxagen/development into the four .env.local files: the root, apps/app, apps/api, and apps/mcp. Run pnpm env:push KEY --env <env> to save a new value, where <env> is development, staging, production, or operator. Parameter Store keeps a secret as a SecureString and any other value as a String.

Parameter prefixes

PrefixHoldsRead by
/oxagen/productionProduction valuesThe app node at container start and the production build
/oxagen/stagingStaging values for the registry's preview environmentThe staging node and the staging build
/oxagen/developmentShared values for a laptoppnpm env:pull
/oxagen/operatorSecrets for maintainer toolingpnpm env:pull --operator
/oxagen/ciCI secrets and variables (phase 3 of ADR-240: the prefix and its read roles exist, and no workflow reads it yet)GitHub Actions through OIDC

Environment values

A service reads each of these at build or start. Each one has a parameter in every environment, named by the prefix and the variable.

130
VariableRequiredParameterRefresh
AI_GATEWAY_API_KEY secretnone/oxagen/{development,staging,production}/AI_GATEWAY_API_KEYThe script mints one key per environment through the Vercel API and saves each under that environment's prefix. Restart api, app, and mcp for staging and production, then delete the old keys in the Vercel dashboard under AI Gateway, API keys.
pnpm vercel:rotate-ai-key oxagen-inc --env development,staging,production
Save with pnpm env:push AI_GATEWAY_API_KEY --env <env>
ALERT_WEBHOOK_URL secretnone/oxagen/{development,staging,production}/ALERT_WEBHOOK_URLCreate an incoming webhook in the chat tool that receives alerts (in Slack, the app's Incoming Webhooks page). Save the URL, restart, then remove the old webhook there.
Save with pnpm env:push ALERT_WEBHOOK_URL --env <env>
ASANA_OAUTH_CLIENT_IDnone/oxagen/{development,staging,production}/ASANA_OAUTH_CLIENT_IDOpen the Asana developer console, My apps, the Oxagen app, OAuth. It changes only with the application.
Save with pnpm env:push ASANA_OAUTH_CLIENT_ID --env <env>
ASANA_OAUTH_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/ASANA_OAUTH_CLIENT_SECRETOpen the Asana developer console, My apps, the Oxagen app, OAuth, and make a new secret. Save it here and restart app and api in the same sitting, then delete the old secret at Asana.
Save with pnpm env:push ASANA_OAUTH_CLIENT_SECRET --env <env>
AUDIT_EXPORT_SIGNING_SECRET secretnone/oxagen/{development,staging,production}/AUDIT_EXPORT_SIGNING_SECRETMint 32 random bytes. Outstanding export download links stop verifying.
openssl rand -base64 32
Save with pnpm env:push AUDIT_EXPORT_SIGNING_SECRET --env <env>
AUTH_TOKEN_ENCRYPTION_KEY secretP P/oxagen/{development,staging,production}/AUTH_TOKEN_ENCRYPTION_KEYMint a 32-byte key. It encrypts SSO secrets, so change it together with SSO_SECRET_KEY_ID and SSO_SECRET_PREVIOUS_KEYS. Stored OAuth account tokens have no old-key fallback (TOKEN_KEY_ID in packages/auth/src/server/token-kms.ts), so people reconnect the accounts those tokens belong to.
openssl rand -base64 32
Save with pnpm env:push AUTH_TOKEN_ENCRYPTION_KEY --env <env>
AWS_KMS_INGESTION_KEY_ARNnone/oxagen/{development,staging,production}/AWS_KMS_INGESTION_KEY_ARNTerraform owns the key (aws_kms_key.ingestion in infra/stacks-new/oxagen/crypto.tf) and this parameter. KMS rotates the key material yearly under the same ARN. Never point it at another key while credentials or private files encrypted with this one exist (docs/ops/ingestion-key-cutover.md).
Save with pnpm env:push AWS_KMS_INGESTION_KEY_ARN --env <env>
AZURE_DEVOPS_OAUTH_CLIENT_IDnone/oxagen/{development,staging,production}/AZURE_DEVOPS_OAUTH_CLIENT_IDOpen the Microsoft Entra admin center, App registrations, the Oxagen Azure DevOps app, Certificates and secrets. It changes only with the application.
Save with pnpm env:push AZURE_DEVOPS_OAUTH_CLIENT_ID --env <env>
AZURE_DEVOPS_OAUTH_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/AZURE_DEVOPS_OAUTH_CLIENT_SECRETOpen the Microsoft Entra admin center, App registrations, the Oxagen Azure DevOps app, Certificates and secrets, and make a new secret. Save it here and restart app and api in the same sitting, then delete the old secret at Azure DevOps.
Save with pnpm env:push AZURE_DEVOPS_OAUTH_CLIENT_SECRET --env <env>
BASECAMP_OAUTH_CLIENT_IDnone/oxagen/{development,staging,production}/BASECAMP_OAUTH_CLIENT_IDOpen the launchpad.37signals.com/integrations, the Oxagen app. It changes only with the application.
Save with pnpm env:push BASECAMP_OAUTH_CLIENT_ID --env <env>
BASECAMP_OAUTH_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/BASECAMP_OAUTH_CLIENT_SECRETOpen the launchpad.37signals.com/integrations, the Oxagen app, and make a new secret. Save it here and restart app and api in the same sitting, then delete the old secret at Basecamp.
Save with pnpm env:push BASECAMP_OAUTH_CLIENT_SECRET --env <env>
BETTER_AUTH_SECRET secretD P P/oxagen/{development,staging,production}/BETTER_AUTH_SECRETMint 32 random bytes. A new value signs out every session in that environment, so rotate in a quiet hour. api and app read the same parameter. AUDIT_EXPORT_SIGNING_SECRET falls back to this value when unset, so outstanding export links stop verifying too. Work order tokens are made under it as well, so a run already working a work order cannot post progress or claim checklist items until its work item is sent again.
openssl rand -base64 32
Save with pnpm env:push BETTER_AUTH_SECRET --env <env>
BLOB_READ_WRITE_TOKEN secretnone/oxagen/{development,staging,production}/BLOB_READ_WRITE_TOKENIn the Vercel dashboard, open Storage, the Blob store, and create a read-write token. Save it, restart app and api, then revoke the old token.
Save with pnpm env:push BLOB_READ_WRITE_TOKEN --env <env>
CIRCUIT_BREAKER_FAILURE_THRESHOLDnone/oxagen/{development,staging,production}/CIRCUIT_BREAKER_FAILURE_THRESHOLDA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push CIRCUIT_BREAKER_FAILURE_THRESHOLD --env <env>
CIRCUIT_BREAKER_RESET_TIMEOUT_MSnone/oxagen/{development,staging,production}/CIRCUIT_BREAKER_RESET_TIMEOUT_MSA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push CIRCUIT_BREAKER_RESET_TIMEOUT_MS --env <env>
CIRCUIT_BREAKER_SUCCESS_THRESHOLDnone/oxagen/{development,staging,production}/CIRCUIT_BREAKER_SUCCESS_THRESHOLDA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push CIRCUIT_BREAKER_SUCCESS_THRESHOLD --env <env>
CLICKHOUSE_PASSWORD secretnone/oxagen/{development,staging,production}/CLICKHOUSE_PASSWORDTerraform generates it (random_password.clickhouse in infra/modules/app-node) and keeps it at /oxagen-app/clickhouse/password, or /oxagen-staging-app/clickhouse/password for staging. Copy that value here. A rotation replaces the Terraform resource, rewrites the node's ClickHouse env file, and restarts ClickHouse and the services in one window. Local Docker uses an empty password.
aws ssm get-parameter --name /oxagen-app/clickhouse/password --with-decryption --query Parameter.Value --output text
Save with pnpm env:push CLICKHOUSE_PASSWORD --env <env>
CLICKHOUSE_URLD P P/oxagen/{development,staging,production}/CLICKHOUSE_URLChanges only when ClickHouse moves. Production and staging run it on the app node (infra/modules/app-node). Locally it is the Docker container from docker-compose.dev.yml.
Save with pnpm env:push CLICKHOUSE_URL --env <env>
CLICKHOUSE_USERNAMED P P/oxagen/{development,staging,production}/CLICKHOUSE_USERNAMEChanges only with the ClickHouse user. The deployed nodes use the default user.
Save with pnpm env:push CLICKHOUSE_USERNAME --env <env>
CLICKUP_OAUTH_CLIENT_IDnone/oxagen/{development,staging,production}/CLICKUP_OAUTH_CLIENT_IDOpen the ClickUp, Settings, Apps, the Oxagen app. It changes only with the application.
Save with pnpm env:push CLICKUP_OAUTH_CLIENT_ID --env <env>
CLICKUP_OAUTH_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/CLICKUP_OAUTH_CLIENT_SECRETOpen the ClickUp, Settings, Apps, the Oxagen app, and make a new secret. Save it here and restart app and api in the same sitting, then delete the old secret at ClickUp.
Save with pnpm env:push CLICKUP_OAUTH_CLIENT_SECRET --env <env>
CODEGRAPH_BLOB_PROVIDERnone/oxagen/{development,staging,production}/CODEGRAPH_BLOB_PROVIDERA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push CODEGRAPH_BLOB_PROVIDER --env <env>
CODEGRAPH_BUCKET_REGIONnone/oxagen/{development,staging,production}/CODEGRAPH_BUCKET_REGIONA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push CODEGRAPH_BUCKET_REGION --env <env>
CODEGRAPH_QUERY_TOKEN secretnone/oxagen/{development,staging,production}/CODEGRAPH_QUERY_TOKENProduction keeps one value at /oxagen/production/CODEGRAPH_QUERY_TOKEN, which the query service and api, app, and mcp all read. deploy-codegraph creates it with a random value when the parameter does not exist, and replaces a value shorter than 32 characters. OpenTofu does not manage it, so the token stays out of the state file. To rotate it, write a new value of at least 32 characters there, then restart the query service and the three services together.
openssl rand -hex 32
Save with pnpm env:push CODEGRAPH_QUERY_TOKEN --env <env>
CODEGRAPH_QUERY_URLnone/oxagen/{development,staging,production}/CODEGRAPH_QUERY_URLA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push CODEGRAPH_QUERY_URL --env <env>
CODEGRAPH_WORKER_TOKEN secretnone/oxagen/{development,staging,production}/CODEGRAPH_WORKER_TOKENMint a value of at least 32 characters and save it under this name. The api node reads it at start, and the code graph worker's task definition reads the same parameter. Restart both together.
openssl rand -hex 32
Save with pnpm env:push CODEGRAPH_WORKER_TOKEN --env <env>
DATABASE_URL secretD P P/oxagen/{development,staging,production}/DATABASE_URLProduction and staging connect to Aurora as the app role. Change that role's password on the database first, from the app node (Aurora admits connections from it alone), then save the new URL. The local value matches docker-compose.dev.yml and changes only with that file.
openssl rand -hex 32
Save with pnpm env:push DATABASE_URL --env <env>
ENROLLMENT_SIGNING_PREVIOUS_PRIVATE_KEY secretnone/oxagen/{development,staging,production}/ENROLLMENT_SIGNING_PREVIOUS_PRIVATE_KEYSet during a rotation to the key ENROLLMENT_SIGNING_PRIVATE_KEY held before; clear once every host has renewed under the new key.
Save with pnpm env:push ENROLLMENT_SIGNING_PREVIOUS_PRIVATE_KEY --env <env>
ENROLLMENT_SIGNING_PRIVATE_KEY secretnone/oxagen/{development,staging,production}/ENROLLMENT_SIGNING_PRIVATE_KEYRotate by moving the current key to ENROLLMENT_SIGNING_PREVIOUS_PRIVATE_KEY and saving the new key here. The key set is then locked with both, so a host that pins the old key takes the set that carries the new one at its next renewal. Clear the previous key once every host has renewed, within seven days. Save the PEM file as it is.
openssl genpkey -algorithm ed25519 -out enrollment-signing.pem
Save with pnpm env:push ENROLLMENT_SIGNING_PRIVATE_KEY --env <env>
EVIDENCE_RECOVERY_ENCRYPTION_KEY secretnone/oxagen/{development,staging,production}/EVIDENCE_RECOVERY_ENCRYPTION_KEYCreate a separate recovery key once and keep its secret version pinned. Replacing it makes recovered bodies unreadable.
openssl rand -base64 32
Save with pnpm env:push EVIDENCE_RECOVERY_ENCRYPTION_KEY --env <env>
GITHUB_APP_CLIENT_IDnone/oxagen/{development,staging,production}/GITHUB_APP_CLIENT_IDOn the GitHub App's settings page (Oxagen Connect, owned by the oxageninc organization). It changes only with the App.
Save with pnpm env:push GITHUB_APP_CLIENT_ID --env <env>
GITHUB_APP_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/GITHUB_APP_CLIENT_SECRETOn the GitHub App's settings page, generate a new client secret. Save it, restart api, app, and mcp, then delete the old secret.
Save with pnpm env:push GITHUB_APP_CLIENT_SECRET --env <env>
GITHUB_APP_IDnone/oxagen/{development,staging,production}/GITHUB_APP_IDThe numeric id on the GitHub App's settings page. It changes only with the App.
Save with pnpm env:push GITHUB_APP_ID --env <env>
GITHUB_APP_INSTALL_STATE_SECRET secretnone/oxagen/{development,staging,production}/GITHUB_APP_INSTALL_STATE_SECRETMint a value. An install that started before the change fails its state check and starts again.
openssl rand -hex 32
Save with pnpm env:push GITHUB_APP_INSTALL_STATE_SECRET --env <env>
GITHUB_APP_PRIVATE_KEY secretnone/oxagen/{development,staging,production}/GITHUB_APP_PRIVATE_KEYOn the GitHub App's settings page, generate a private key. GitHub allows several keys at once. Save the whole .pem from the file, restart, confirm a connected repository still syncs, then delete the old key on the same page.
pnpm env:push GITHUB_APP_PRIVATE_KEY --env production < oxagen-connect.private-key.pem
Save with pnpm env:push GITHUB_APP_PRIVATE_KEY --env <env>
GITHUB_APP_SLUGnone/oxagen/{development,staging,production}/GITHUB_APP_SLUGThe App's name in its public URL. It changes only if the App is renamed.
Save with pnpm env:push GITHUB_APP_SLUG --env <env>
GITHUB_APP_WEBHOOK_SECRET secretnone/oxagen/{development,staging,production}/GITHUB_APP_WEBHOOK_SECRETMint a value. Set it on the GitHub App's settings page under Webhook secret and save it here in the same sitting. GitHub holds one secret, so deliveries between the two writes fail their check. Redeliver them from the App's Advanced tab.
openssl rand -hex 32
Save with pnpm env:push GITHUB_APP_WEBHOOK_SECRET --env <env>
GITHUB_LOGIN_CLIENT_IDP P/oxagen/{development,staging,production}/GITHUB_LOGIN_CLIENT_IDOn the GitHub OAuth App's settings page (the organization's Developer settings, OAuth Apps). It changes only with a new app. Checklist: docs/runbooks/social-login-oauth-apps.md.
Save with pnpm env:push GITHUB_LOGIN_CLIENT_ID --env <env>
GITHUB_LOGIN_CLIENT_SECRET secretP P/oxagen/{development,staging,production}/GITHUB_LOGIN_CLIENT_SECRETOn the OAuth App's settings page, generate a new client secret. GitHub keeps both secrets valid until you delete one. Save the new one, restart api and app, then delete the old one.
Save with pnpm env:push GITHUB_LOGIN_CLIENT_SECRET --env <env>
GITHUB_PERSONAL_ACCESS_TOKEN secretnone/oxagen/{development,staging,production}/GITHUB_PERSONAL_ACCESS_TOKENLocal and demo only. Never set it in staging or production. Create a fine-grained token at github.com/settings/personal-access-tokens when you need it.
Save with pnpm env:push GITHUB_PERSONAL_ACCESS_TOKEN --env <env>
GOOGLE_CLOUD_PROJECTnone/oxagen/{development,staging,production}/GOOGLE_CLOUD_PROJECTA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push GOOGLE_CLOUD_PROJECT --env <env>
GOOGLE_CLOUD_PROJECT_NUMBERnone/oxagen/{development,staging,production}/GOOGLE_CLOUD_PROJECT_NUMBERA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push GOOGLE_CLOUD_PROJECT_NUMBER --env <env>
GOOGLE_DATA_CLIENT_IDnone/oxagen/{development,staging,production}/GOOGLE_DATA_CLIENT_IDIn the Google Cloud console, open APIs and Services, Credentials, and the data OAuth client. It changes only with a new client.
Save with pnpm env:push GOOGLE_DATA_CLIENT_ID --env <env>
GOOGLE_DATA_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/GOOGLE_DATA_CLIENT_SECRETIn the Google Cloud console, open the data OAuth client and add a client secret. Save it, restart, then disable and delete the old secret.
Save with pnpm env:push GOOGLE_DATA_CLIENT_SECRET --env <env>
GOOGLE_LOGIN_CLIENT_IDP P/oxagen/{development,staging,production}/GOOGLE_LOGIN_CLIENT_IDIn the Google Cloud console, open APIs and Services, Credentials, and the login OAuth client. It changes only with a new client. Checklist: docs/runbooks/social-login-oauth-apps.md.
Save with pnpm env:push GOOGLE_LOGIN_CLIENT_ID --env <env>
GOOGLE_LOGIN_CLIENT_SECRET secretP P/oxagen/{development,staging,production}/GOOGLE_LOGIN_CLIENT_SECRETIn the Google Cloud console, open the login OAuth client and add a client secret. Save it, restart api and app, then disable and delete the old secret on the same page.
Save with pnpm env:push GOOGLE_LOGIN_CLIENT_SECRET --env <env>
INGESTION_ENCRYPTION_KEY secretP P/oxagen/{development,staging,production}/INGESTION_ENCRYPTION_KEYMint a 32-byte key. Production encrypts with KMS instead (INGESTION_CRYPTO_PROVIDER=kms). Credentials and private files encrypted under the old key cannot be opened with a new one. Keep the old key until a rewrap migration is complete; replacing or losing it can make attachments and exports unreadable and require connectors to reconnect.
openssl rand -base64 32
Save with pnpm env:push INGESTION_ENCRYPTION_KEY --env <env>
INNGEST_EVENT_KEY secretP P/oxagen/{development,staging,production}/INNGEST_EVENT_KEYIn the Inngest dashboard, open the environment's Manage page, Event keys. Create a key, save it, restart api and app, then delete the old key.
Save with pnpm env:push INNGEST_EVENT_KEY --env <env>
INNGEST_SIGNING_KEY secretP P/oxagen/{development,staging,production}/INNGEST_SIGNING_KEYIn the Inngest dashboard, open the environment's Manage page, Signing key. Inngest's rotation issues a new key while the old one still works. Save the new key, restart api and app, then finish the rotation in the dashboard.
Save with pnpm env:push INNGEST_SIGNING_KEY --env <env>
JIRA_OAUTH_CLIENT_IDnone/oxagen/{development,staging,production}/JIRA_OAUTH_CLIENT_IDOpen the Atlassian developer console, the OAuth 2.0 (3LO) app, Settings. It changes only with the application.
Save with pnpm env:push JIRA_OAUTH_CLIENT_ID --env <env>
JIRA_OAUTH_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/JIRA_OAUTH_CLIENT_SECRETOpen the Atlassian developer console, the OAuth 2.0 (3LO) app, Settings, and make a new secret. Save it here and restart app and api in the same sitting, then delete the old secret at Jira.
Save with pnpm env:push JIRA_OAUTH_CLIENT_SECRET --env <env>
LEAD_ALERT_EMAILSnone/oxagen/{development,staging,production}/LEAD_ALERT_EMAILSSave the addresses as a comma-separated list, then restart the api. The api reads the value when it starts.
Save with pnpm env:push LEAD_ALERT_EMAILS --env <env>
LEAD_ALERT_SLACK_BOT_TOKEN secretnone/oxagen/{development,staging,production}/LEAD_ALERT_SLACK_BOT_TOKENAt api.slack.com/apps, open the Oxagen leads app, OAuth & Permissions, and reinstall it to the workspace or rotate the bot token. Save the new token, restart the api, then revoke the old one there.
Save with pnpm env:push LEAD_ALERT_SLACK_BOT_TOKEN --env <env>
LEAD_ALERT_SLACK_CHANNELnone/oxagen/{development,staging,production}/LEAD_ALERT_SLACK_CHANNELSave the channel's name and restart the api. The api reads the value when it starts.
Save with pnpm env:push LEAD_ALERT_SLACK_CHANNEL --env <env>
LEAD_SHEETS_SERVICE_ACCOUNT_EMAILnone/oxagen/{development,staging,production}/LEAD_SHEETS_SERVICE_ACCOUNT_EMAILSave the service account email and restart the api.
Save with pnpm env:push LEAD_SHEETS_SERVICE_ACCOUNT_EMAIL --env <env>
LEAD_SHEETS_SPREADSHEET_IDnone/oxagen/{development,staging,production}/LEAD_SHEETS_SPREADSHEET_IDSave the spreadsheet ID and restart the api.
Save with pnpm env:push LEAD_SHEETS_SPREADSHEET_ID --env <env>
LINEAR_OAUTH_CLIENT_IDnone/oxagen/{development,staging,production}/LINEAR_OAUTH_CLIENT_IDIn Linear, open Settings, API, and the OAuth application. It changes only with the application.
Save with pnpm env:push LINEAR_OAUTH_CLIENT_ID --env <env>
LINEAR_WEBHOOK_SECRET secretnone/oxagen/{development,staging,production}/LINEAR_WEBHOOK_SECRETIn Linear, open Settings, API, the OAuth application, and its webhook. Linear shows the signing secret there. Save it and restart api in the same sitting, because deliveries locked with the new secret fail until api has it.
Save with pnpm env:push LINEAR_WEBHOOK_SECRET --env <env>
MCP_OAUTH_PREREGISTERED_CLIENTS secretnone/oxagen/{development,staging,production}/MCP_OAUTH_PREREGISTERED_CLIENTSJSON built from the client id and secret each MCP vendor issued for the callback <app-origin>/api/v1/mcp/oauth/callback. Roll a secret in that vendor's console, edit the JSON, and save the whole object.
Save with pnpm env:push MCP_OAUTH_PREREGISTERED_CLIENTS --env <env>
MICROSOFT_DATA_CLIENT_IDnone/oxagen/{development,staging,production}/MICROSOFT_DATA_CLIENT_IDIn the Azure portal, open App registrations and the app. It is the application (client) id and changes only with the app.
Save with pnpm env:push MICROSOFT_DATA_CLIENT_ID --env <env>
MICROSOFT_DATA_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/MICROSOFT_DATA_CLIENT_SECRETIn the Azure portal, open the app registration, Certificates and secrets, and add a client secret. Save it, restart api, then delete the old secret. Azure secrets expire, so note the date.
Save with pnpm env:push MICROSOFT_DATA_CLIENT_SECRET --env <env>
NEO4J_PASSWORD secretnone/oxagen/{development,staging,production}/NEO4J_PASSWORDTerraform generates it (random_password.neo4j in infra/modules/app-node) and keeps it at /oxagen-app/neo4j/password, or /oxagen-staging-app/neo4j/password for staging. Copy that value here. A rotation replaces the Terraform resource, rewrites the node's Neo4j env file, and restarts Neo4j and the services in one window. Locally it is the password in docker-compose.dev.yml.
aws ssm get-parameter --name /oxagen-app/neo4j/password --with-decryption --query Parameter.Value --output text
Save with pnpm env:push NEO4J_PASSWORD --env <env>
NEO4J_URInone/oxagen/{development,staging,production}/NEO4J_URIChanges only when Neo4j moves. Production and staging run it on the app node (infra/modules/app-node). Locally it is the Docker container.
Save with pnpm env:push NEO4J_URI --env <env>
NEO4J_USERNAMEnone/oxagen/{development,staging,production}/NEO4J_USERNAMEChanges only with the Neo4j user. The deployed nodes use neo4j.
Save with pnpm env:push NEO4J_USERNAME --env <env>
NEXT_SERVER_ACTIONS_ENCRYPTION_KEY secretP/oxagen/{development,staging,production}/NEXT_SERVER_ACTIONS_ENCRYPTION_KEYMint 32 random bytes, base64. A new value changes every server action id, so every page open at the next app deploy breaks once and works after a reload. Keep production and staging (/oxagen/staging) on different values.
openssl rand -base64 32
Save with pnpm env:push NEXT_SERVER_ACTIONS_ENCRYPTION_KEY --env <env>
OAUTH_PROXY_SECRET secretnone/oxagen/{development,staging,production}/OAUTH_PROXY_SECRETMint 32 random bytes. Save the same value in production and staging in one sitting. Preview social sign-in fails until the two match.
openssl rand -base64 32
Save with pnpm env:push OAUTH_PROXY_SECRET --env <env>
OPENAI_APPS_VERIFICATION_TOKENnone/oxagen/{development,staging,production}/OPENAI_APPS_VERIFICATION_TOKENOpenAI shows the challenge when you verify the domain for an app. Paste the value it shows.
Save with pnpm env:push OPENAI_APPS_VERIFICATION_TOKEN --env <env>
OPENROUTER_API_KEY secretP P/oxagen/{development,staging,production}/OPENROUTER_API_KEYCreate a key at openrouter.ai/settings/keys, or mint one with the management key. Save it, restart, then delete the old key.
curl -s https://openrouter.ai/api/v1/keys -H "Authorization: Bearer $OPENROUTER_MANAGEMENT_KEY" -H 'Content-Type: application/json' -d '{"name":"oxagen-production"}'
Save with pnpm env:push OPENROUTER_API_KEY --env <env>
OPENROUTER_MANAGEMENT_KEY secretnone/oxagen/{development,staging,production}/OPENROUTER_MANAGEMENT_KEYIn OpenRouter settings, open Provisioning keys. Create a key, save it, restart, then delete the old one. Keys it already minted keep working.
Save with pnpm env:push OPENROUTER_MANAGEMENT_KEY --env <env>
OPENROUTER_ORG_KEY_DAILY_LIMIT_USDnone/oxagen/{development,staging,production}/OPENROUTER_ORG_KEY_DAILY_LIMIT_USDA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push OPENROUTER_ORG_KEY_DAILY_LIMIT_USD --env <env>
OPENROUTER_WORKSPACE_IDnone/oxagen/{development,staging,production}/OPENROUTER_WORKSPACE_IDIn OpenRouter settings, open the workspace that holds the minted keys and copy its ID.
Save with pnpm env:push OPENROUTER_WORKSPACE_ID --env <env>
OTEL_EXPORTER_OTLP_ENDPOINTnone/oxagen/{development,staging,production}/OTEL_EXPORTER_OTLP_ENDPOINTYour collector's OTLP HTTP traces URL. Delete the parameter to turn tracing off.
Save with pnpm env:push OTEL_EXPORTER_OTLP_ENDPOINT --env <env>
OTEL_EXPORTER_OTLP_HEADERS secretnone/oxagen/{development,staging,production}/OTEL_EXPORTER_OTLP_HEADERSThe collector vendor issues the ingest token these headers carry. Create a new token there, save the whole header list, restart, then revoke the old token.
Save with pnpm env:push OTEL_EXPORTER_OTLP_HEADERS --env <env>
OTEL_SERVICE_NAMEnone/oxagen/{development,staging,production}/OTEL_SERVICE_NAMEA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push OTEL_SERVICE_NAME --env <env>
OXAGEN_ASSISTANT_MARKUPnone/oxagen/{development,staging,production}/OXAGEN_ASSISTANT_MARKUPA setting. Leave it unset unless pricing changes the assistant markup.
Save with pnpm env:push OXAGEN_ASSISTANT_MARKUP --env <env>
OXAGEN_PRICE_OVERRIDES secretnone/oxagen/{development,staging,production}/OXAGEN_PRICE_OVERRIDESNegotiated rates from a provider contract, as JSON. Edit the object and save it whole when a contract changes.
Save with pnpm env:push OXAGEN_PRICE_OVERRIDES --env <env>
OXAGEN_PRICE_OVERRIDES_FILEnone/oxagen/{development,staging,production}/OXAGEN_PRICE_OVERRIDES_FILEA path inside the container. Set it only when a rates file is mounted there.
Save with pnpm env:push OXAGEN_PRICE_OVERRIDES_FILE --env <env>
OXAGEN_TACHO_GITHUB_BROKERnone/oxagen/{development,staging,production}/OXAGEN_TACHO_GITHUB_BROKERA switch. Set it to 1 to turn the feature on, or delete the parameter to turn it off.
Save with pnpm env:push OXAGEN_TACHO_GITHUB_BROKER --env <env>
PR_DIFF_BUCKETnone/oxagen/{development,staging,production}/PR_DIFF_BUCKETManage the private bucket through the selected infrastructure stack. Preserve its provider and bucket while revisions reference stored objects. The GCS setting must not name the public-assets bucket.
Save with pnpm env:push PR_DIFF_BUCKET --env <env>
PR_DIFF_BUCKET_REGIONnone/oxagen/{development,staging,production}/PR_DIFF_BUCKET_REGIONA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push PR_DIFF_BUCKET_REGION --env <env>
PR_DIFF_STORAGE_PROVIDERnone/oxagen/{development,staging,production}/PR_DIFF_STORAGE_PROVIDERA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push PR_DIFF_STORAGE_PROVIDER --env <env>
RATE_LIMIT_CHAT_PER_MINnone/oxagen/{development,staging,production}/RATE_LIMIT_CHAT_PER_MINA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push RATE_LIMIT_CHAT_PER_MIN --env <env>
SALESFORCE_DATA_CLIENT_IDnone/oxagen/{development,staging,production}/SALESFORCE_DATA_CLIENT_IDIn Salesforce Setup, open App Manager, the connected app, Manage Consumer Details. It changes only with the app.
Save with pnpm env:push SALESFORCE_DATA_CLIENT_ID --env <env>
SALESFORCE_DATA_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/SALESFORCE_DATA_CLIENT_SECRETIn Salesforce Setup, open the connected app, Manage Consumer Details, and generate a new consumer secret. Save it and restart api.
Save with pnpm env:push SALESFORCE_DATA_CLIENT_SECRET --env <env>
SANDBOX_BUCKETnone/oxagen/{development,staging,production}/SANDBOX_BUCKETThe sandbox-hosts stack owns the bucket (infra/stacks-new/sandbox-hosts/storage.tf). Never point it at another bucket while templates and runs name objects in this one.
Save with pnpm env:push SANDBOX_BUCKET --env <env>
SANDBOX_BUCKET_REGIONnone/oxagen/{development,staging,production}/SANDBOX_BUCKET_REGIONA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push SANDBOX_BUCKET_REGION --env <env>
SANDBOX_HOST_JOIN_TOKEN_PATHnone/oxagen/{development,staging,production}/SANDBOX_HOST_JOIN_TOKEN_PATHA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push SANDBOX_HOST_JOIN_TOKEN_PATH --env <env>
SANDBOX_REQUIRED_HOSTSnone/oxagen/{development,staging,production}/SANDBOX_REQUIRED_HOSTSA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push SANDBOX_REQUIRED_HOSTS --env <env>
SERVER_ACTIONS_ALLOWED_ORIGINSnone/oxagen/{development,staging,production}/SERVER_ACTIONS_ALLOWED_ORIGINSA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push SERVER_ACTIONS_ALLOWED_ORIGINS --env <env>
SLACK_APP_CLIENT_IDnone/oxagen/{development,staging,production}/SLACK_APP_CLIENT_IDAt api.slack.com/apps, open the Oxagen app, Basic Information. It changes only with the app.
Save with pnpm env:push SLACK_APP_CLIENT_ID --env <env>
SLACK_APP_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/SLACK_APP_CLIENT_SECRETAt api.slack.com/apps, open the Oxagen app, Basic Information, App Credentials, and regenerate the client secret. Slack retires the old one at once, so save and restart app in the same sitting.
Save with pnpm env:push SLACK_APP_CLIENT_SECRET --env <env>
SLACK_APP_IDnone/oxagen/{development,staging,production}/SLACK_APP_IDAt api.slack.com/apps, open the Oxagen app, Basic Information. It changes only with the app.
Save with pnpm env:push SLACK_APP_ID --env <env>
SLACK_APP_SIGNING_SECRET secretnone/oxagen/{development,staging,production}/SLACK_APP_SIGNING_SECRETAt api.slack.com/apps, open the Oxagen app, Basic Information, and regenerate the signing secret. Nothing reads it yet.
Save with pnpm env:push SLACK_APP_SIGNING_SECRET --env <env>
SLACK_DATA_CLIENT_IDnone/oxagen/{development,staging,production}/SLACK_DATA_CLIENT_IDAt api.slack.com/apps, open the data app, Basic Information. It changes only with the app.
Save with pnpm env:push SLACK_DATA_CLIENT_ID --env <env>
SLACK_DATA_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/SLACK_DATA_CLIENT_SECRETAt api.slack.com/apps, open the data app, Basic Information, App Credentials, and regenerate the client secret. Slack retires the old one at once, so save and restart in the same sitting.
Save with pnpm env:push SLACK_DATA_CLIENT_SECRET --env <env>
SMTP_PASSWORD secretnone/oxagen/{development,staging,production}/SMTP_PASSWORDA Resend API key with sending access. Create one in the Resend dashboard under API keys, save it, restart, then delete the old key.
Save with pnpm env:push SMTP_PASSWORD --env <env>
SSO_SECRET_KEY_IDnone/oxagen/{development,staging,production}/SSO_SECRET_KEY_IDA label. Give it a new value, such as sso_v2, each time AUTH_TOKEN_ENCRYPTION_KEY changes (ADR-145 describes the rotation).
Save with pnpm env:push SSO_SECRET_KEY_ID --env <env>
SSO_SECRET_PREVIOUS_KEYS secretnone/oxagen/{development,staging,production}/SSO_SECRET_PREVIOUS_KEYSWhen AUTH_TOKEN_ENCRYPTION_KEY changes, add <old key id>=<old key>. Remove the entry once an auth/sso-reseal run reports failed: [] and resealed: 0 (ADR-145 describes the rotation).
Save with pnpm env:push SSO_SECRET_PREVIOUS_KEYS --env <env>
STELLA_SERVE_TOKEN secretP/oxagen/{development,staging,production}/STELLA_SERVE_TOKENMint a value and save it at both /oxagen/production/STELLA_SERVE_TOKEN and /oxagen/production/stella-serve/STELLA_SERVE_TOKEN. pnpm env:push writes the first. Write the second with aws ssm put-parameter. Then restart stella-serve, app, and api together (infra/tools/node/README.md, The engine service).
openssl rand -hex 32
Save with pnpm env:push STELLA_SERVE_TOKEN --env <env>
STELLA_TELEMETRY_INGEST_ENDPOINTSnone/oxagen/{development,staging,production}/STELLA_TELEMETRY_INGEST_ENDPOINTSA setting. List the HTTPS endpoints this deployment serves for Stella telemetry.
Save with pnpm env:push STELLA_TELEMETRY_INGEST_ENDPOINTS --env <env>
STORAGE_DRIVERnone/oxagen/{development,staging,production}/STORAGE_DRIVERTerraform owns the production value (infra/stacks-new/oxagen/blob-storage.tf). Restart app and api after it changes. Files written to the old store stay there and read as missing.
Save with pnpm env:push STORAGE_DRIVER --env <env>
STORAGE_FS_ROOTnone/oxagen/{development,staging,production}/STORAGE_FS_ROOTA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push STORAGE_FS_ROOT --env <env>
STORAGE_GCS_BUCKETnone/oxagen/{development,staging,production}/STORAGE_GCS_BUCKETA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push STORAGE_GCS_BUCKET --env <env>
STORAGE_GCS_PUBLIC_BUCKETnone/oxagen/{development,staging,production}/STORAGE_GCS_PUBLIC_BUCKETA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push STORAGE_GCS_PUBLIC_BUCKET --env <env>
STORAGE_GCS_PUBLIC_URLnone/oxagen/{development,staging,production}/STORAGE_GCS_PUBLIC_URLA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push STORAGE_GCS_PUBLIC_URL --env <env>
STORAGE_GCS_SERVICE_ACCOUNTnone/oxagen/{development,staging,production}/STORAGE_GCS_SERVICE_ACCOUNTA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push STORAGE_GCS_SERVICE_ACCOUNT --env <env>
STORAGE_S3_BUCKETnone/oxagen/{development,staging,production}/STORAGE_S3_BUCKETTerraform owns the bucket and this parameter (infra/stacks-new/oxagen/blob-storage.tf). Never point it at another bucket while rows name objects in this one.
Save with pnpm env:push STORAGE_S3_BUCKET --env <env>
STORAGE_S3_PUBLIC_BUCKETnone/oxagen/{development,staging,production}/STORAGE_S3_PUBLIC_BUCKETTerraform owns the bucket and this parameter (infra/stacks-new/oxagen/blob-storage.tf).
Save with pnpm env:push STORAGE_S3_PUBLIC_BUCKET --env <env>
STORAGE_S3_PUBLIC_URLnone/oxagen/{development,staging,production}/STORAGE_S3_PUBLIC_URLTerraform owns the distribution and this parameter (infra/stacks-new/oxagen/blob-storage.tf). A stored public URL keeps the origin it was written with.
Save with pnpm env:push STORAGE_S3_PUBLIC_URL --env <env>
STORAGE_S3_REGIONnone/oxagen/{development,staging,production}/STORAGE_S3_REGIONA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push STORAGE_S3_REGION --env <env>
STRIPE_PUBLISHABLE_KEYnone/oxagen/{development,staging,production}/STRIPE_PUBLISHABLE_KEYIn the Stripe dashboard, open Developers, API keys. It changes when the account does, at the live cutover.
Save with pnpm env:push STRIPE_PUBLISHABLE_KEY --env <env>
STRIPE_SECRET_KEY secretD P P/oxagen/{development,staging,production}/STRIPE_SECRET_KEYIn the Stripe dashboard, open Developers, API keys, and roll the secret key. Every environment uses the shared sandbox until the live cutover (docs/ops/stripe-sandbox-mode.md). Stripe keeps the old key alive for the period you pick, so save and restart inside it. Production's value is also the GitHub secret STRIPE_SECRET_KEY in the production environment.
Save with pnpm env:push STRIPE_SECRET_KEY --env <env>
STRIPE_TAX_ENABLEDnone/oxagen/{development,staging,production}/STRIPE_TAX_ENABLEDA switch. Turn it on only after Stripe Tax is active in the dashboard.
Save with pnpm env:push STRIPE_TAX_ENABLED --env <env>
STRIPE_WEBHOOK_SECRET secretD P P/oxagen/{development,staging,production}/STRIPE_WEBHOOK_SECRETIn the Stripe dashboard, open Developers, Webhooks, the endpoint for this environment's API URL, and roll the signing secret. Save the new whsec_ value and restart inside the overlap Stripe offers.
Save with pnpm env:push STRIPE_WEBHOOK_SECRET --env <env>
TACHO_BUNDLE_SIGNING_PRIVATE_KEY secretnone/oxagen/{development,staging,production}/TACHO_BUNDLE_SIGNING_PRIVATE_KEYRotate only on a leak. Hosts received the public key at enrollment and refuse bundles a new key locks, so every host enrolls again after the change. Run exports locked before the change verify only with the old public key. Save the PEM file as it is.
openssl genpkey -algorithm ed25519 -out tacho-bundle.pem
Save with pnpm env:push TACHO_BUNDLE_SIGNING_PRIVATE_KEY --env <env>
TACHO_INGEST_ENDPOINTSnone/oxagen/{development,staging,production}/TACHO_INGEST_ENDPOINTSA setting. List the HTTPS base URLs of this deployment's recorder endpoints.
Save with pnpm env:push TACHO_INGEST_ENDPOINTS --env <env>
TACHO_MCP_ENDPOINTnone/oxagen/{development,staging,production}/TACHO_MCP_ENDPOINTA setting. Change it in the environment that needs it. Services read it when they start.
Save with pnpm env:push TACHO_MCP_ENDPOINT --env <env>
TEAMWORK_OAUTH_CLIENT_IDnone/oxagen/{development,staging,production}/TEAMWORK_OAUTH_CLIENT_IDOpen the Teamwork developer portal, the Oxagen app. It changes only with the application.
Save with pnpm env:push TEAMWORK_OAUTH_CLIENT_ID --env <env>
TEAMWORK_OAUTH_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/TEAMWORK_OAUTH_CLIENT_SECRETOpen the Teamwork developer portal, the Oxagen app, and make a new secret. Save it here and restart app and api in the same sitting, then delete the old secret at Teamwork.
Save with pnpm env:push TEAMWORK_OAUTH_CLIENT_SECRET --env <env>
TENANT_RLS_ENFORCEMENT_ENABLEDnone/oxagen/{development,staging,production}/TENANT_RLS_ENFORCEMENT_ENABLEDA switch. Leave it unset in production, where it defaults on and false refuses to boot.
Save with pnpm env:push TENANT_RLS_ENFORCEMENT_ENABLED --env <env>
TRELLO_OAUTH_CLIENT_IDnone/oxagen/{development,staging,production}/TRELLO_OAUTH_CLIENT_IDOpen the Atlassian developer console, the Oxagen Trello app, Settings. It changes only with the application.
Save with pnpm env:push TRELLO_OAUTH_CLIENT_ID --env <env>
TRELLO_OAUTH_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/TRELLO_OAUTH_CLIENT_SECRETOpen the Atlassian developer console, the Oxagen Trello app, Settings, and make a new secret. Save it here and restart app and api in the same sitting, then delete the old secret at Trello.
Save with pnpm env:push TRELLO_OAUTH_CLIENT_SECRET --env <env>
TRUST_EDGE_CLIENT_IP_HEADERnone/oxagen/{development,staging,production}/TRUST_EDGE_CLIENT_IP_HEADERA switch. Set it to true only after the Caddy config that writes the header is live (ADR-083).
Save with pnpm env:push TRUST_EDGE_CLIENT_IP_HEADER --env <env>
TRUSTED_PROXY_CIDRSnone/oxagen/{development,staging,production}/TRUSTED_PROXY_CIDRSA setting. Name the subnets of the proxies in front of the services, from infra/modules/network. Read ADR-083 before you change it.
Save with pnpm env:push TRUSTED_PROXY_CIDRS --env <env>
VOYAGE_API_KEY secretP/oxagen/{development,staging,production}/VOYAGE_API_KEYIn the Voyage AI dashboard, open API keys. Create a key, save it, restart, then revoke the old key.
Save with pnpm env:push VOYAGE_API_KEY --env <env>
WORK_ATTACHMENT_URLnone/oxagen/{development,staging,production}/WORK_ATTACHMENT_URLSet to the origin that serves work attachment links. Changes only when that origin moves.
Save with pnpm env:push WORK_ATTACHMENT_URL --env <env>
WRIKE_OAUTH_CLIENT_IDnone/oxagen/{development,staging,production}/WRIKE_OAUTH_CLIENT_IDOpen the Wrike, Apps and integrations, API, the Oxagen app. It changes only with the application.
Save with pnpm env:push WRIKE_OAUTH_CLIENT_ID --env <env>
WRIKE_OAUTH_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/WRIKE_OAUTH_CLIENT_SECRETOpen the Wrike, Apps and integrations, API, the Oxagen app, and make a new secret. Save it here and restart app and api in the same sitting, then delete the old secret at Wrike.
Save with pnpm env:push WRIKE_OAUTH_CLIENT_SECRET --env <env>
ZOOM_DATA_CLIENT_IDnone/oxagen/{development,staging,production}/ZOOM_DATA_CLIENT_IDIn the Zoom App Marketplace, open the OAuth app, App Credentials. It changes only with the app.
Save with pnpm env:push ZOOM_DATA_CLIENT_ID --env <env>
ZOOM_DATA_CLIENT_SECRET secretnone/oxagen/{development,staging,production}/ZOOM_DATA_CLIENT_SECRETIn the Zoom App Marketplace, open the OAuth app, App Credentials, and regenerate the client secret. Save it and restart api in the same sitting.
Save with pnpm env:push ZOOM_DATA_CLIENT_SECRET --env <env>

Operator values

Only maintainer tooling reads these. One parameter holds each one for every environment.

VariableRequiredParameterRefresh
LINEAR_API_KEY secretnone/oxagen/operator/LINEAR_API_KEYIn Linear, open Settings, Security and access, Personal API keys. Create a key, save it here and as the GitHub secret LINEAR_API_KEY, then revoke the old key.
Save with pnpm env:push LINEAR_API_KEY --env operator
NPM_TOKEN secretnone/oxagen/operator/NPM_TOKENOn npmjs.com, open Access Tokens and generate a granular token with read and write on @oxagen/cli. It expires within 90 days. Save it here and as the GitHub secret NPM_TOKEN, then delete the old token once npm.yml publishes with the new one.
Save with pnpm env:push NPM_TOKEN --env operator
TAURI_SIGNING_PRIVATE_KEY secretnone/oxagen/operator/TAURI_SIGNING_PRIVATE_KEYRotate only on a leak. Installed apps check updates against the public key in apps/desktop/src-tauri/tauri.conf.json, so a new key needs a release, locked with the old key, that ships the new public key first. Save the private key here and as the GitHub secret of the same name.
pnpm --filter @oxagen/desktop exec tauri signer generate -w ~/.tauri/oxagen-desktop.key
Save with pnpm env:push TAURI_SIGNING_PRIVATE_KEY --env operator
TAURI_SIGNING_PRIVATE_KEY_PASSWORD secretnone/oxagen/operator/TAURI_SIGNING_PRIVATE_KEY_PASSWORDChanges only with TAURI_SIGNING_PRIVATE_KEY. The key has none, so the value is the empty string.
Save with pnpm env:push TAURI_SIGNING_PRIVATE_KEY_PASSWORD --env operator

CI secrets and variables

21 values from packages/config/src/ci-registry.ts. Each one is a GitHub Actions secret or variable on the repository, or on the GitHub environment named under its kind. pnpm env:check fails when a workflow reads a value the registry does not list, reads one as the wrong kind, or the registry lists one no workflow reads. Phase 3 of ADR-240 moves the secrets to /oxagen/ci. That prefix and its OIDC read roles exist, and no workflow reads it yet.

21
NameKindDescriptionRead byRefresh
AI_GATEWAY_API_KEYsecretVercel AI Gateway key that release.yml uses to write the release notes.release.ymlCreate a key in the Vercel dashboard under AI Gateway, API keys. Save it here, then delete the old key on the same page.
Save with gh secret set AI_GATEWAY_API_KEY
APPLE_CERTIFICATEsecretBase64 of the Developer ID Application certificate and its private key, exported as a .p12. desktop.yml locks the macOS build with it, so macOS can check the build came from Oxagen unchanged. Unset, the build is locked without a Developer ID, so macOS cannot tell who made it.desktop.ymlApple issues the certificate at developer.apple.com under Certificates. Export it with its private key from Keychain Access as a .p12, and save the base64 of the file. Save APPLE_CERTIFICATE_PASSWORD in the same change.
base64 -i developer-id.p12
Save with gh secret set APPLE_CERTIFICATE
APPLE_CERTIFICATE_PASSWORDsecretExport password of the .p12 in APPLE_CERTIFICATE.desktop.ymlYou choose it when you export the .p12. Change it only with APPLE_CERTIFICATE.
Save with gh secret set APPLE_CERTIFICATE_PASSWORD
APPLE_IDsecretApple ID email desktop.yml notarizes the macOS build with.desktop.ymlThe email of the Apple developer account. It changes only when the account does.
Save with gh secret set APPLE_ID
APPLE_PASSWORDsecretApp-specific password for APPLE_ID, used by notarization in desktop.yml.desktop.ymlGenerate one at account.apple.com under Sign-In and Security, App-Specific Passwords. Revoke the old one there after the next desktop build notarizes.
Save with gh secret set APPLE_PASSWORD
APPLE_SIGNING_IDENTITYsecretName of the Developer ID certificate desktop.yml locks the macOS build with, as Keychain shows it.desktop.ymlRead it from the certificate in APPLE_CERTIFICATE. It changes when that certificate does.
security find-identity -v -p codesigning
Save with gh secret set APPLE_SIGNING_IDENTITY
APPLE_TEAM_IDsecretApple developer team id, used by notarization in desktop.yml.desktop.ymlRead it at developer.apple.com under Membership details. It changes only with the team.
Save with gh secret set APPLE_TEAM_ID
CI_FILES_PER_SHARDvariableChanged code files per unit shard in pr.yml. The plan starts one shard for each block of this many files in a lane, up to the lane's ceiling. Unset, 8.pr.ymlA setting. Change it with gh variable set, and the next pull request run reads it. tools/scripts/github-ci-secrets.md gives the cost of each value.
Save with gh variable set CI_FILES_PER_SHARD --body '<value>'
CI_IMAGE_REGISTRYvariableRegistry the CI toolchain and service images come from, such as an ECR Public alias. Unset, jobs use public.ecr.aws/z5z6u7g2.main.yml
pr.yml
A setting. Point it at the ECR Public registry ci-image.yml publishes to (docs/runbooks/ci-runners.md).
Save with gh variable set CI_IMAGE_REGISTRY --body '<value>'
CI_RUNNER_UNITvariableRunner label the pr.yml unit lanes run on. Unset, linux-arm64-16core from the github-hosted-arm64 group. linux-arm64-4core costs less and runs slower.pr.ymlA setting. Change it with gh variable set, and the next pull request run reads it. tools/scripts/github-ci-secrets.md gives the cost of each value.
Save with gh variable set CI_RUNNER_UNIT --body '<value>'
CI_SHARDS_APPvariableMost shards the pr.yml unit-app lane starts. Unset, 4.pr.ymlA setting. Change it with gh variable set, and the next pull request run reads it. tools/scripts/github-ci-secrets.md gives the cost of each value.
Save with gh variable set CI_SHARDS_APP --body '<value>'
CI_SHARDS_PLAINvariableMost shards the pr.yml unit-related lane starts. Unset, 2.pr.ymlA setting. Change it with gh variable set, and the next pull request run reads it. tools/scripts/github-ci-secrets.md gives the cost of each value.
Save with gh variable set CI_SHARDS_PLAIN --body '<value>'
CI_SHARDS_STORESvariableMost shards the pr.yml unit-related-stores lane starts. Unset, 4.pr.ymlA setting. Change it with gh variable set, and the next pull request run reads it. tools/scripts/github-ci-secrets.md gives the cost of each value.
Save with gh variable set CI_SHARDS_STORES --body '<value>'
CI_UNIT_MAX_WORKERSvariablevitest workers per unit shard in pr.yml. Unset, 8, which fits a 16-core runner. Set 3 with linux-arm64-4core.pr.ymlA setting. Change it with gh variable set, and the next pull request run reads it. tools/scripts/github-ci-secrets.md gives the cost of each value.
Save with gh variable set CI_UNIT_MAX_WORKERS --body '<value>'
NPM_TOKENsecretnpm token npm.yml publishes @oxagen/cli with, after every production deploy and every release tag. It expires within 90 days.npm.ymlOn npmjs.com, signed in as the account that owns @oxagen, open Access Tokens and generate a granular token with read and write on @oxagen/cli and the longest expiry npm allows (90 days). If the account requires two-factor authentication for writes, let the token bypass it. Save it with gh secret set NPM_TOKEN, which reads the value from a prompt. Dispatch npm.yml with no inputs, or wait for the next deploy, and check its run publishes or reports the version already on npm. Then delete the old token. Mac rotates it on a scheduled routine.
Save with gh secret set NPM_TOKEN
OXAGEN_CI_DEPLOY_KEYsecretPrivate half of a deploy key with write access on oxageninc/oxagen-ci. oxagen-ci-mirror.yml pushes tools/oxagen-ci there with it. Unset, the job ends with a notice and mirrors nothing.oxagen-ci-mirror.ymlRun ssh-keygen -t ed25519 -N '' -f oxagen-ci-deploy. Add oxagen-ci-deploy.pub as a deploy key with write access under oxageninc/oxagen-ci Settings, Deploy keys. Save the private key with gh secret set OXAGEN_CI_DEPLOY_KEY < oxagen-ci-deploy, dispatch oxagen-ci mirror, and check its run pushes. Then delete the old deploy key and both local files.
Save with gh secret set OXAGEN_CI_DEPLOY_KEY
OXAGEN_LLM_BALANCEDvariableModel release.yml writes release notes with. Unset, the script uses the registry's balanced tier.release.ymlA gateway model id. Change it to move release notes to another model.
Save with gh variable set OXAGEN_LLM_BALANCED --body '<value>'
PREVIEW_DATABASE_URLsecretPostgres URL db-migrate.yml applies migrations to when dispatched with target preview.db-migrate.ymlCompose it from the preview database's endpoint, user, and password. Rotate the password on the database first, then save the new URL here.
Save with gh secret set PREVIEW_DATABASE_URL
RELEASE_TOKENsecretFine-grained personal access token for oxageninc/product. Both jobs in release.yml check out with it, push the release branch and tags with it, and open the release pull request with it. A push with GITHUB_TOKEN starts no workflow, so the release would not deploy. A token scoped to any other repository, such as the old macanderson/oxagen, fails checkout with a 403 and stops every release (#5127).release.ymlAt github.com/settings/personal-access-tokens, create a fine-grained token with oxageninc as the resource owner and access to the oxageninc/product repository only. Set contents, pull requests, and workflows to read and write. If the oxageninc organization asks to approve the token, approve it. Give it an expiry and replace it before that date. Save it with gh secret set RELEASE_TOKEN --repo oxageninc/product, then run Release with dry_run off and check that the release pull request opens.
Save with gh secret set RELEASE_TOKEN
TAURI_SIGNING_PRIVATE_KEYsecretMinisign private key desktop.yml locks updater artifacts with. Installed apps check updates against the matching public key in apps/desktop/src-tauri/tauri.conf.json.desktop.ymlRotate only on a leak. A new key needs a release, locked with the old key, that ships the new public key first, or installed apps reject every later update. Generate the pair, put the public key in tauri.conf.json, and save the private key here and at /oxagen/operator/TAURI_SIGNING_PRIVATE_KEY.
pnpm --filter @oxagen/desktop exec tauri signer generate -w ~/.tauri/oxagen-desktop.key
Save with gh secret set TAURI_SIGNING_PRIVATE_KEY
TAURI_SIGNING_PRIVATE_KEY_PASSWORDsecretPassword of TAURI_SIGNING_PRIVATE_KEY. The key has none, so the secret holds the empty string.desktop.ymlChanges only with TAURI_SIGNING_PRIVATE_KEY. Keep it empty unless the new key has a password.
Save with gh secret set TAURI_SIGNING_PRIVATE_KEY_PASSWORD

Values no store holds

No parameter holds these: each one is a literal in registry.ts, or the shell sets it for one run.

104
VariableValue sourceDescription
ADMIN_DATABASE_URLShell or scriptSuperuser Postgres connection used by provision-rls-role.ts to create the least-privilege app role. Kept separate from DATABASE_URL so the provisioning step cannot silently run through the restricted connection it is about to create.
ANTHROPIC_API_KEYShell or scriptCLI-only BYOK fallback: when no AI_GATEWAY_API_KEY exists anywhere, the CLI runs anthropic/* models directly against the Anthropic API with this key (other vendors and embeddings stay unavailable). The gateway key always wins when both are set. Never read by deployed services, because platform AI is gateway-only.
APP_URLRegistry static valueServer-side app origin used to build plugin OAuth authorize/callback URLs (falls back to NEXT_PUBLIC_APP_URL). Not browser-exposed.
AURORA_ENDPOINTShell or scriptAurora writer endpoint for run-db-migrations.sh. Set it to skip the AWS lookup the script otherwise does.
AURORA_PORTShell or scriptPort for AURORA_ENDPOINT. Defaults to 5432.
BETTER_AUTH_TRUSTED_ORIGINSRegistry static valueComma-separated origins allowed cross-origin access to the auth API.
BETTER_AUTH_URLRegistry static valueAuth base URL (the app origin).
BLOG_DRAFTSShell or scriptSet to 1 to include draft posts when building the static research blog (apps/web/scripts/build.mjs). Unset in every deploy, so drafts never ship.
CI_SUPERSEDED_THRESHOLDShell or scriptHow many superseded CI runs in a row make check-superseded-runs.mjs report a pull request, when the script is run by hand. Unset or below 2 reads as 3.
CLICKHOUSE_DATABASERegistry static valueClickHouse database name.
CONTEXT_GRAPH_PROTOCOL_DIRShell or scriptPath to a local context-graph-protocol checkout. check-contextgraph-fixtures.ts verifies the vendored profile against it when set.
CURSOR_CONFIG_DIRShell or scriptOverrides where the recorder host writes Cursor's `hooks.json` and `mcp.json`. Read on the operator's machine, not the server, and never a deployment value: it exists because Cursor can be installed against a non-default config directory, and enrolling the wrong one leaves the session unwrapped and silently unrecorded.
DATA_NODE_NAMEShell or scriptName tag of the data-plane EC2 instance the DB-client tunnel scripts target. Defaults to oxagen-data.
DB_LINT_BASE_REFShell or scriptThe ref `pnpm db:lint-migrations` compares new Atlas migrations against for its git-aware ordering check (#3387): a migration added since the merge base with this ref must sort after every migration already there. Defaults to origin/main.
DB_LINT_HEAD_REFShell or scriptThe ref `pnpm db:lint-migrations` treats as the branch's own tip for its git-aware ordering check (#3387). CI's pull_request checkout puts HEAD on GitHub's synthetic merge commit, not the PR branch itself, which collapses the merge-base fail/warn distinction into one tier. No workflow sets it today. Set it to the pull request's head commit to compare against the real PR head on such a checkout. Defaults to HEAD, which is correct everywhere else (a push checkout, a local branch).
DB_MIGRATE_STORESShell or scriptComma-separated stores `pnpm db:migrate` should migrate. Defaults to clickhouse,neo4j. Postgres is Atlas's job and is deliberately not in the list.
DEFAULT_BRANCHShell or scriptThe repository's default branch. rerun-lost-runner.mjs reruns a lost job on this branch even after newer commits land. rerun-lost-runner.yml sets it from the event's repository. Defaults to main.
DEPLOY_SERVICEShell or scriptThe service a deploy record names. check-deploy-tip.mjs reads it to find what is live for that service and to record what shipped (ADR-164). desktop.yml sets it to desktop on the step that records the installers' commit.
DO_NOT_TRACKShell or scriptCross-tool opt-out convention (https://consoledonottrack.com): set to '1' to disable CLI usage telemetry. Checked before OXAGEN_TELEMETRY and the persisted telemetry.enabled config.
DRY_RUNShell or scriptSet to 1 to make check-superseded-runs.mjs print what it would post instead of posting it, when the script is run by hand.
E2E_TESTShell or scriptThe exact string "true" on the e2e webServer (apps/app/playwright.config.ts) and the e2e seed (apps/app seed:e2e): packages/auth relaxes email verification and rate limiting on that value, only when VERCEL is unset and BETTER_AUTH_URL is a loopback origin (local-env.ts), so a leaked value on a deployed host relaxes nothing. Declared in turbo.json test:e2e env. Not for dev/preview/prod. NOTE: read via raw process.env, not in baseEnvSchema (test-only).
EVENT_BUS_NAMEShell or scriptEventBridge bus the log-event-publisher Lambda puts events on. The stack sets it on the function; the handler refuses to import without it.
FLEET_BUNDLE_PUBLIC_KEY_PEMShell or scriptPinned staging policy-bundle public key for the fleet load rig.
FLEET_CLICKHOUSE_HOSTShell or scriptIndependently pinned staging ClickHouse hostname for fleet reconciliation.
FLEET_CLICKHOUSE_PASSWORDShell or scriptRead-only staging ClickHouse credential for fleet reconciliation.
FLEET_CLICKHOUSE_URLShell or scriptStaging ClickHouse HTTPS endpoint for fleet reconciliation, without credentials.
FLEET_CLICKHOUSE_USERShell or scriptRead-only staging ClickHouse user for fleet reconciliation.
FLEET_DATABASE_HOSTShell or scriptIndependently pinned staging Postgres hostname for fleet reconciliation.
FLEET_DATABASE_URLShell or scriptRead-only staging Postgres connection string for fleet reconciliation.
FLEET_OPERATOR_TOKENShell or scriptStaging operator credential used to enroll synthetic fleet hosts.
FLEET_OUTPUT_ROOTShell or scriptExisting private persistent runner directory for fleet reports and credentials.
FLEET_STAGING_ORIGINShell or scriptExact trusted HTTPS staging origin for the fleet load rig.
GITLAB_PROJECTShell or scriptThe gitlab.com project, `group/project`, that `tools/scripts/gitlab-steering-exercise.ts` publishes its exercise record to. Use a scratch project: a run with --merge adds a file to its default branch.
GITLAB_TOKENShell or scriptA gitlab.com project access token that `tools/scripts/gitlab-steering-exercise.ts` publishes one steering record with, as recorded evidence for #3762. Set it in the shell for one run only; the platform never reads it, and workspaces store their own tokens through attach_gitlab_project.
HEAD_BRANCHShell or scriptThe head branch of the CI run check-superseded-runs.mjs reports on, when the script is run by hand. It finds the pull request from this and HEAD_REPO when PR_NUMBER is unset.
HEAD_REPOShell or scriptThe head repository (owner/name) of the CI run check-superseded-runs.mjs reports on, when the script is run by hand. It finds the pull request from this and HEAD_BRANCH when PR_NUMBER is unset.
INGESTION_CRYPTO_PROVIDERRegistry static valueEncryption backend for ingestion credentials and private Vercel Blob files: 'env' (AES-256-GCM via INGESTION_ENCRYPTION_KEY) or 'kms' (AWS KMS). Also read in-process by app and mcp: resolveGitHubToken's stored-OAuth-token path (packages/github/src/workspace-token.ts) decrypts through resolveIngestionCryptoAdapterForKeyId whenever it falls back off the installation-token path, and resolveWorkspaceGithubUserToken opens the stored token that backs the list_github_installations tool.
INNGEST_DEVShell or scriptSet to 1 to point the Inngest SDK at a local dev server instead of Inngest Cloud. tools/scripts/inngest-dev.ts sets it for every child turbo spawns.
KNOWLEDGE_GRAPH_ENABLEDRegistry static valueFeature flag. Set "false" to disable the Neo4j knowledge-graph writes.
LINEAR_PROJECT_IDRegistry static valueLinear project id for the oxagen-v2 project (tooling-only).
LOG_LEVELRegistry static valuePino log level for service loggers.
MAIN_VERIFIED_COVER_MINUTESShell or scriptHow long check-main-verified.mjs treats a commit whose run a newer push replaced as pending while a later run is still going. Pushes to main share one concurrency group, so a commit can wait about two run lengths. Defaults to 180.
MAIN_VERIFIED_GRACE_MINUTESShell or scriptHow long after a commit lands check-main-verified.mjs refuses to conclude it has no run. The workflow races the registration of the run it looks for. Defaults to 10.
MAIN_VERIFIED_MAX_WAIT_MINUTESShell or scriptUpper bound on how long check-main-verified.mjs sleeps waiting the grace out before re-reading. Must stay below the workflow job's timeout-minutes. Defaults to 12.
MAIN_VERIFIED_WINDOWShell or scriptHow many recent commits on main check-main-verified.mjs asks about. Defaults to 10.
MARKETING_URLRegistry static valuePublic marketing website origin (oxagen.sh). The /v1/cms/* lead routes use it to build the emailed reader link and CORS allows it as a cross-origin caller. Not browser-exposed.
MCP_PORTShell or scriptHTTP port for the xmcp server.
MCP_URLRegistry static valueMCP server origin used to build install instructions and client connections.
NEO4J_DATABASERegistry static valueNeo4j database.
NEO4J_ORG_PROVISIONERRegistry static valueGraph provisioner for paid organisations (ADR-098): pooled (Community, dev, CI), cypher (self-managed Enterprise: CREATE DATABASE org-<namespace>), aura (not implemented; refused).
NEXT_PUBLIC_API_URLRegistry static valuePublic api origin (browser-exposed). The api and mcp read it too: the Inngest serve host, and the absolute download URL get_run_export mints.
NEXT_PUBLIC_APP_URLRegistry static valuePublic app origin (browser-exposed).
NODE_ENVRegistry static valueRuntime mode. Next.js sets it itself at build and start. The Inngest verifier rejects test signing keys when this is production.
NODE_NAMEShell or scriptName tag of the EC2 instance the infra/tools scripts target. Defaults to oxagen-app.
OAUTH_PROXY_PRODUCTION_URLRegistry static valueOfficial production origin the shared social-login OAuth app's callback is registered against (OAuth Proxy productionURL). Preview deployments relay social login through this origin. Defaults to the production app URL when unset.
OXAGEN_ALLOW_STDIO_MCPShell or scriptSet to '1' or 'true' to allow stdio-transport MCP servers to be SPAWNED as child processes from workspace file-mcp plugin configs (packages/agent file-mcp.ts). Spawning is OFF by default because a workspace-scoped config could otherwise execute arbitrary commands on the API host. Enable only for a trusted local/CLI runtime, never on shared server deployments. HTTP MCP transports are unaffected and always processed.
OXAGEN_API_TOKENShell or scriptAPI token used by the CLI to authenticate requests; falls back to the value stored in ~/.oxagen/config.json.
OXAGEN_API_URLRegistry static valueBase URL for the Oxagen REST API, consumed by the CLI. Falls back to the default production API URL when unset.
OXAGEN_APP_URLRegistry static valueBase URL for the Oxagen web app, where `oxagen login` opens the browser authorize page. Falls back to the default production app URL when unset.
OXAGEN_CLI_DEBUGShell or scriptSet to 1 or true to write the CLI's debug log to ~/.oxagen/logs (apps/cli/src/lib/debug-log.ts). Developer tooling, never set on a deployed service.
OXAGEN_DEBUGShell or scriptWhen set, the CLI prints extra diagnostics (e.g. context-engine memory open failures) to stderr.
OXAGEN_INSTALL_BASEShell or scriptBase URL the published install.sh downloads the oxagen-<rust triple> executable and its .sha256 from. Set it to install a pinned version, such as https://downloads.oxagen.sh/desktop/<version>.
OXAGEN_INSTALL_DIRShell or scriptDirectory install.sh puts the oxagen binary in. Defaults to ~/.local/bin.
OXAGEN_LLM_BALANCEDRegistry static valueBalanced model: the gateway model id Oxagen's own calls run on when they ask for the balanced tier, and a call that names no model. A stella turn's own model comes from the organization's model tiers (#7197).
OXAGEN_LLM_BATCHRegistry static valueBatch model: the OpenRouter model id bulk triage sends through OpenRouter's batch API when the platform provider is OpenRouter. Its provider must take OpenRouter batches (ADR-309).
OXAGEN_LLM_FASTRegistry static valueFast model: the gateway model id Oxagen's own quick calls run on, such as conversation titles, drafts and triage, and a stella turn's summaries and verdicts. A stella turn's own model comes from the organization's model tiers (#7197).
OXAGEN_LLM_PRECISERegistry static valuePrecise model: the gateway model id Oxagen's own calls run on when they ask for the precise tier, such as schema chat. A stella turn's own model comes from the organization's model tiers (#7197).
OXAGEN_LLM_SUMMARYRegistry static valueSummary model: the gateway model id run accounts (run names and summaries) are written on when Oxagen pays. A customer's own key keeps its fast tier.
OXAGEN_LOCAL_DEVShell or scriptSet to "1" by tools/scripts/dev.ts for the local dev stack. Consumed by packages/auth to make local-env detection deterministic instead of racing NODE_ENV at module-load time. Believed only when VERCEL is unset and BETTER_AUTH_URL is a loopback origin (local-env.ts), so it relaxes nothing on a deployed host. NOTE: read via raw process.env, not in baseEnvSchema (dev-tooling only).
OXAGEN_MODEL_PROVIDERRegistry static valueWhich provider serves language models: 'openrouter' in preview and production, on OPENROUTER_API_KEY, and the Vercel AI Gateway in local development. Never an automatic fallback: a silent failover would move spend to another vendor's bill. Embeddings use Voyage either way. The per-organisation keys ADR-131 mints are OpenRouter keys, so they are minted and consulted only when this is 'openrouter' (ADR-131 §9).
OXAGEN_ORG_IDShell or scriptDefault org slug for CLI commands; falls back to the value stored in ~/.oxagen/config.json.
OXAGEN_REGIONRegistry static valueThe region this process answers from, printed beside the trace id on a page's error line (#3841). Every deployed node runs in us-east-1, and the node manifest (tools/scripts/package-for-node.sh) sets it too. Unset locally, where the page says the region was not recorded.
OXAGEN_TELEMETRYShell or scriptSet to '0' to disable CLI usage telemetry for this invocation (equivalent to `oxagen telemetry off`). DO_NOT_TRACK=1 also disables it and takes precedence.
OXAGEN_WORKSPACEShell or scriptWorkspace slug that `oxagen sandbox` and `oxagen credentials` address when --workspace-slug is absent. The CLI never infers it from a repository.
OXAGEN_WORKSPACE_IDShell or scriptDefault workspace slug for CLI commands; falls back to the value stored in ~/.oxagen/config.json.
PGSUPERPASSShell or scriptPassword for PGSUPERUSER.
PGSUPERUSERShell or scriptSuperuser on the cluster tools/scripts/rds-sim-check.sh simulates RDS against. The script refuses to run without it.
PLATFORM_VERSIONShell or scriptPlatform version string surfaced by @oxagen/config platformVersion(). Nothing sets it in production today: the release script's sync went with the Vercel deploy, and Parameter Store does not hold it, so platformVersion() falls back to "0.0.0". Declared in turbo.json globalEnv so a version change busts the build cache. Read via raw process.env and absent from baseEnvSchema on purpose: it is a release tag, not a service setting.
POLLSShell or scriptNumber of five-second polls install-node-scripts.sh waits for its remote command. Defaults to 150.
PR_CHANGED_FILESShell or scriptHow many files the pull request a CI run tests changes, from the pull_request event. ci-pr-scope.mjs checks that it read every file before it calls a pull request docs-only (#4918).
PR_DRAFTShell or scriptWhether the pull request a CI run tests is a draft (true or false). pipeline.yml sets it on the preflight job, and ci-pr-scope.mjs runs only the light lanes for a draft (#4918).
PR_NUMBERShell or scriptThe pull request number. pr.yml's records-lint job sets it, and check-adr-index.mjs reads it there. new-adr.mjs reads it to number a new ADR, and check-superseded-runs.mjs reads it as the pull request to report on when the script is run by hand.
PRIVACY_ERASURE_GRACE_DAYSRegistry static valueGrace period in days before a hard-delete erasure job runs (GDPR Art.17). Defaults to 30 when unset. Set to 0 for immediate erasure in test envs.
PRODUCTION_DATABASE_URLShell or scriptMigration connection for Atlas's `prod` env (packages/database/atlas.hcl), read by db-migrate.yml and no other workflow. Holds a role that may run DDL against pre-existing schemas: the app role may only CREATE in schemas it owns, so migrating through DATABASE_URL fails 42501 on billing and friends.
RERUN_RUN_IDShell or scriptThe failed CI run that rerun-lost-runner.mjs checks for jobs whose runner was lost. rerun-lost-runner.yml sets it from the workflow_run event, or from the run_id input on a manual dispatch.
SCR_OWNERShell or scriptGitHub owner to read all five SCR corpus repos under, for a fork or a test organization. Unset, the check reads each repo where it lives.
SMTP_FROM_EMAILRegistry static valueDefault sender address. Its domain must be verified at the provider.
SMTP_FROM_NAMERegistry static valueDefault sender display name.
SMTP_HOSTRegistry static valueSMTP server host (Resend: smtp.resend.com).
SMTP_PORTRegistry static valueSMTP port. 465 = implicit TLS; 587 = STARTTLS (TLS enforced).
SMTP_USERNAMERegistry static valueSMTP username (Resend: the literal "resend").
SOURCE_COMMITShell or scriptThe commit a manual app deploy ships, from the dispatch's source_commit input. check-deploy-tip.mjs --schema reads it in place of GITHUB_SHA, which is main's head on a dispatch, to refuse code older than production's schema (#5247).
STALE_MERGE_BASE_REFShell or scriptRef the stale-merge-base check (#3237) treats as main's current tip. Defaults to origin/main.
STALE_MERGE_BRANCH_REFShell or scriptRef the stale-merge-base check (#3237) treats as the branch under review. Defaults to HEAD.
STANDALONEShell or scriptSet to 1 to build apps/app or apps/docs with Next's standalone output. tools/scripts/package-for-node.sh sets it for the self-hosted node bundle. Unset, Next.js writes its default output.
STELLA_SERVE_URLRegistry static valueWhere the Stella engine (stella-serve) listens. The in-app agent's turns run there; every model call and tool call comes back to this process to answer (ADR-053). Loopback on the node.
STRIPE_E2EShell or scriptWhether the e2e job resolved a Stripe test key: "1" when STRIPE_TEST_SECRET_KEY was mapped into STRIPE_SECRET_KEY, "0" on a fork pull request without one (pay.spec.ts skips). Set by the e2e webServer env (apps/app/playwright.config.ts) and the CI job (WL-48). NOTE: read via raw process.env, not in baseEnvSchema (test-only).
TACHO_LOCAL_TOKENShell or scriptThe per-install bearer the recorder collector's loopback listener requires. Written into each wrapped harness's settings and into a connected app's MCP config by `oxagen agent enroll`, and read back by the hook and the `oxagen mcp-stdio` shim. Never set by hand and never a deployment value: it is minted per machine at enrollment and lives in host.json.
VISION_GATE_BASEShell or scriptRef the vision gate diffs against. Defaults to origin/main.
VISION_GATE_MODELShell or scriptModel the vision gate judges a diff with.
VISION_GATE_STRICTShell or scriptSet to 1 to make a drifts verdict fail the vision gate instead of only printing it.
WEB_PORTShell or scriptPort for the apps/web static dev server (apps/web/scripts/dev.mjs). Defaults to 5500; local convenience only, never read by a deploy.
WRITE_MANIFEST_IMAGEShell or scriptContainer image the packaged node bundle's run manifest names. Defaults to node:24.21.0-alpine.
XDG_CONFIG_HOMEShell or scriptThe XDG base directory the recorder host falls back to when locating Cursor's config on Linux, after CURSOR_CONFIG_DIR and before ~/.cursor. Set by the operator's own environment rather than by Oxagen, and ignored on macOS and Windows, which do not follow the XDG layout.

Decisions

The architecture decision records. ADR-001 to ADR-016 are grouped by the epic that produced them. Every later record is listed under Unfiled, because the README index stopped growing and ADRs numbered by pull request (ADR-5864) never enter it.

577 records under docs/adr. ADRs are immutable once accepted; a change of mind is a new ADR that supersedes the old one, which is why superseded entries stay listed.

Foundations

#TitleStatusDate
ADR-001— Drizzle as Postgres ORMAccepted2026-05-27
ADR-002— Inngest as job orchestrationAccepted2026-05-27
ADR-003— Neo4j as vector storeAccepted2026-05-27
ADR-004— Environment variables, not Google Secret ManagerSuperseded by ADR-2402026-05-28
ADR-005— Single-version monorepo via ChangesetsAccepted2026-05-27
ADR-006— Better Auth bound to canonical `auth.users`Accepted2026-05-27

Agent Runtime

#TitleStatusDate
ADR-007— Docker as vendor-neutral code sandboxAccepted2026-05-28
ADR-008— Skills as filesystem-first with DB augmentationAccepted2026-05-28
ADR-009— Unified capability/tool model via `surfaces`Accepted2026-05-28
ADR-010— Subagent fanout via Inngest invokeAccepted2026-05-28
ADR-011— Vercel Sandbox driver for Vercel FunctionsAccepted2026-05-31

Marketplace

#TitleStatusDate
ADR-012— Connector dual-write pattern: Postgres (durability) + Neo4j (index)Accepted2026-06-09
ADR-013— Oxagen Plugins: first-party capability packs as a fourth plugin typeAccepted2026-06-12
ADR-014— Workspace-scoped MCP registries with a single-default state machineAccepted2026-06-17

Developer workflow

#TitleStatusDate
ADR-015— Graph-edge-driven git hooks (Vitest import-graph) + Biome formattingSuperseded in part2026-06-21

CLI & Local Agent Runtime

#TitleStatusDate
ADR-016— Oxagen CLI daemon: a live code-graph memory fed by coding-agent hooksProposed2026-06-24

Unfiled

#TitleStatusDate
ADR-017— OpenTelemetry Distributed TracingAccepted2026-06-26
ADR-018CLI ↔ Workspace Graph Bidirectional SyncSuperseded2026-06-27
ADR-019Unified agent engine — one brain across CLI and platformAccepted2026-06-27
ADR-020Per-workspace GitHub write credentialsAccepted2026-06-28
ADR-021Inference doctrine — deterministic-first, cache-aligned, structured-tool agentic codingProposed2026-07-06
ADR-022Capability & tool naming standardAccepted2026-07-06
ADR-023— CLI fleet: sessions as append-only event logs, views as renderersAccepted2026-07-06
ADR-024— Namespaced, immutable agent identity (`org_ns.workspace_ns.agent_slug`)Accepted2026-07-07
ADR-025Verb-first snake_case capability namingAccepted2026-07-08
ADR-026— Mobile feature parity is law, enforced by a manifest gateAccepted2026-07-08
ADR-027Multi-tenant GitHub App connect (identity leg + installation registry)Accepted2026-07-09
ADR-028— Time-travel replay: deterministic session records, bisect, resume, and failure→eval distillationAccepted2026-07-11
ADR-029The mutation verifier gate — every green turn must prove its tests catch the fixAccepted2026-07-10
ADR-030Speculative tool execution — prefetch the model's next reads while it thinksAccepted2026-07-11
ADR-031Platform Storage Ontology — a drift-aware, machine-readable self-model of the platform's storage layerAccepted2026-07-13
ADR-032— Unified chat session state (chat_ux_v2)Accepted2026-07-14
ADR-033Adopt the Stella Rust engine as the platform agent coreProposed2026-07-18
ADR-034Customer-built capability packages (`.cap`)Proposed2026-07-18
ADR-035Consume the Context Graph Protocol directly via pinned conformance fixturesAccepted2026-07-22
ADR-036Adopt the official CGP TypeScript SDK as the canonical type sourceAccepted2026-07-23
ADR-037A test double must fail when the thing it doubles movesAccepted2026-08-24
ADR-038Adopt org standing decisions as a Steering Context Record corpusAccepted2026-09-22
ADR-039Centralize SCR enforcement in oxagen rather than replicating itAccepted2026-10-02
ADR-040Refocus Oxagen as an engine-agnostic governance planeAccepted2026-08-29
ADR-041Canonical JSON — one rule, not one implementationAccepted2026-09-06
ADR-042Organisation-scoped data planes — every store switches at the tenantAccepted2026-09-07
ADR-043Excise the agent runtime — Oxagen governs agents, it does not run themAccepted2026-09-18
ADR-044Every field of a memory record has a merge ruleAccepted2026-09-07
ADR-045Cross-repo reusable workflows are pinned to a commitAccepted2026-09-07
ADR-046A push to main gets its own CI concurrency groupSuperseded by ADR-2872026-10-02
ADR-047No provider-posture matrix; handle divergence at the gatewayAccepted2026-09-07
ADR-048One path glob, in a package with no dependenciesAccepted2026-09-07
ADR-049The DoD recheck re-runs the old run rather than reporting a new checkAccepted2026-09-07
ADR-050Privileged secret access is recorded in the main audit log, not only beside itAccepted2026-09-07
ADR-051A workspace's context records enter the turn as volatile policy, not as prefixSuperseded by ADR-0432026-09-18
ADR-052The governed action is the billable unit; tokens are reported, never billedAccepted2026-10-02
ADR-053The in-app agent runs on Stella's headless engine, and a token is billed only when Oxagen paid for itAccepted2026-10-13
ADR-054The migration connection carries the RLS bypass; the policy is not changedAccepted2026-09-11
ADR-055Subscriptions carry monthly buckets of governed action units, bought in unit quantities at a per-customer contracted rateAccepted2026-11-03
ADR-056Run control connection points and the model-proxy decisionAccepted2026-09-15
ADR-057Agents: the definition of record, budgets in micros, enrollmentAccepted2026-09-14
ADR-058Run record placement, retention default and `digest_only`Accepted2026-10-07
ADR-059Mandates: consequence roles, the decision seam and the ledgerAccepted2026-09-14
ADR-060Spend: the price book as data, the rollup store, budgets in microsAccepted2026-09-14
ADR-061Steering: governance mode, thresholds, the reflectorAccepted2026-09-15
ADR-062Findings: providers, fix application, the counterfactual ruleAccepted2026-09-15
ADR-063Organization: the permission catalogueAccepted2026-09-15
ADR-065Onboarding: gate shape, installer path, provisional workspaceAccepted2026-09-15
ADR-066Oxagen has two names, the agent control plane and agent fleet management, and the agent asks for the keysAccepted2026-09-15
ADR-067Mission Control leads, the agent control plane is the category, and every claim states its scopeAccepted2026-09-15
ADR-068One org-only workspace sentinel, shared by every surfaceAccepted2026-09-15
ADR-069Roles are editable on every tierAccepted2026-09-15
ADR-070Auto-approval rules: the policy matrix, the rule store, standing approvalsAccepted2026-09-16
ADR-071A kill switch outlives its target — deleting what it names is refusedAccepted2026-09-16
ADR-072Tools: classification vocabulary, assurance hosting, observed-schema sourceAccepted2026-09-15
ADR-073An API key names a workspace, and so does the page that mints itAccepted2026-09-16
ADR-074A read under the org-only workspace sentinel is checked against the policy manifestAccepted2026-09-17
ADR-075— One writer for the account preference rowAccepted2026-09-16
ADR-076— A general run's spec states what the run didAccepted2026-09-16
ADR-077Attribution columns are `<verb>_by_id`Accepted2026-09-15
ADR-078Wrapped and connected are two enforcement tiers, and neither dominates the otherAccepted2026-09-18
ADR-079An `oxagen login` key acts for its creator on Tacho host enrollmentAccepted2026-09-15
ADR-080Stella is wrapped through its hooks until it speaks the Tacho contract nativelyAccepted2026-09-15
ADR-081The `app` layer is retired at the Mission Control cutover for every capability rev1 does not surfaceAccepted2026-09-16
ADR-082A rate limiter that cannot reach its counters degrades rather than deniesAccepted2026-09-17
ADR-083One client-IP derivation, and the edge rewrites the header it is not allowed to trustAccepted2026-09-17
ADR-084The person behind a Tacho session is a principal Oxagen issues, and nothing derived from the reported address is storedAccepted2026-09-17
ADR-085A refunded or disputed GAU purchase withdraws what is left, and records what it could not recoverAccepted2026-09-17
ADR-086An org-only read of a workspace-scoped table raises, and the static check retiresAccepted2026-09-17
ADR-087The Neo4j tenancy seam constructs scoping rather than validating itProposed2026-09-17
ADR-088A credential follows the service that reads it, and `apps/app` reads the GitHub App's private keyAccepted2026-09-18
ADR-089An on-demand read lives in a `"use server"` module, beside the writeAccepted2026-09-17
ADR-090Oxagen governs skill resolution, and the 2026-09-15 narrowing is reversedAccepted2026-09-15
ADR-091One record steers one agent — steering rides the bundle's `context.system`Accepted2026-09-18
ADR-092An abandoned assistant turn is owned to completion, not cancelledAccepted2026-09-18
ADR-093One assembler decides what reaches the agent, and records what it cutAccepted2026-09-25
ADR-094tachod grows into the gateway: a loopback model proxy and an MCP aggregatorAccepted2026-09-18
ADR-095The tier ladder is four words, computed from what was routedAccepted2026-09-18
ADR-096Oxagen may contain the process that runs turns: the contained tierAccepted2026-10-02
ADR-097Steering and gating are two planes, authored on one surface and compiled twiceAccepted2026-09-18
ADR-098Organisation graphs are placed by one provisioning interface, and pooled is the defaultAccepted2026-09-18
ADR-099A workspace is born with its main repository, and a repository is main for at most one workspaceAccepted2026-10-03
ADR-100Frame bodies are captured by default, redacted where they are produced, capped, and released by retentionAccepted2026-09-18
ADR-101Claude Code, Codex, Cursor and Stella are the four first-class harnessesAccepted2026-09-18
ADR-102A limit change merges under the mandate's row lock, and replacement stays for callers that hold the recordAccepted2026-09-19
ADR-103The price book records its own initializationAccepted2026-09-19
ADR-104A harness label round-trips whatever it holdsAccepted2026-09-19
ADR-105An archived workspace accepts no machine credentialAccepted2026-09-19
ADR-106Retirement revokes what it scoped, rather than refusing while it existsAccepted2026-09-19
ADR-107`list_mandates` and `get_mandate` admit the roles `request_mandate` admitsAccepted—
ADR-108A mandate limit carries its own measure kind, worked out once at write timeAccepted2026-09-19
ADR-109A resolved approval is read back through a sibling capability, not the security event streamAccepted—
ADR-110Review main integrations and report stale-base overlapAccepted2026-09-19
ADR-111An amount measure's unit is refused at declaration, not widened at `Money`Accepted2026-09-19
ADR-112The two §2.1 renames land on the surfaces, behind aliases, in phasesAccepted2026-09-19
ADR-113Workforce management leads, and Mission Control is retired as a product nameAccepted2026-09-19
ADR-114One version across every manifest, and a publish flow that runs from a laptopAccepted2026-09-19
ADR-115`resolve_approval` is the one billed action of the approvals surfaceAccepted2026-09-19
ADR-116ClickHouse reads scope the source and migrations share a lockAccepted2026-09-20
ADR-117Bound GitHub retries and use managed graph transactionsProposed—
ADR-118Approved built-in calls resume onceAccepted2026-09-19
ADR-119Tool changes invalidate approval rulesAccepted2026-09-19
ADR-120Shared organization rows require organization scope to writeAccepted2026-09-19
ADR-121Preserve GitHub record identity across repositoriesAccepted2026-09-19
ADR-122External MCP calls enter the decision-rules gateAccepted2026-09-19
ADR-123Production migrations run platform seedsAccepted2026-09-19
ADR-125Audit partition maintenance and telemetry boundariesAccepted—
ADR-126Keep frame bodies in the WAL and record bounded redaction detailsAccepted2026-09-25
ADR-127Keep sealed events when body storage failsAccepted2026-09-25
ADR-128Source identifiers determine draft filenamesAccepted2026-09-19
ADR-130Spend and operator feedback lead the appSuperseded2026-09-20
ADR-131One OpenRouter key per organisation, and funding is decided with the modelAccepted2026-09-20
ADR-132The mockup's CSS is the app's design of recordSuperseded2026-09-20
ADR-133The governance mode in force decides how it may be changedAccepted2026-09-21
ADR-134Durable AI usage settlementAccepted—
ADR-135Rev1 console scope and cutover evidenceAccepted2026-09-20
ADR-136Clone and retire immutable configuration identitiesAccepted2026-09-20
ADR-137Standing decisions are workspace context records, stored onceAccepted2026-09-22
ADR-138An external tool's identity is case-folded at the decision gateAccepted2026-09-22
ADR-139One store for a run's content on the hostAccepted2026-09-22
ADR-140One tool call seals one frame, sealed by the source that reports it firstAccepted2026-09-25
ADR-141What counts as an installed Cursor, and where a Cursor steer landsAccepted2026-09-25
ADR-142Cost-center chargeback on SpendAccepted2026-09-22
ADR-143The gateway brokers the vendor credential: a wrapped harness holds a run tokenAccepted2026-10-07
ADR-144The assembler has its own package, and the two memory packages are deletedAccepted2026-09-22
ADR-145Enterprise SSO behind Better AuthAccepted2026-09-22
ADR-147A merge queue runs the full gate before a PR lands on mainAccepted2026-09-23
ADR-149Independent model policyAccepted2026-09-22
ADR-150Isolated staging before productionAccepted2026-09-23
ADR-151Git custody keeps installation tokens in the host proxyAccepted2026-09-23
ADR-152The contained launcher measures a Docker container, and the server decides the tierAccepted2026-09-23
ADR-153Automatic run accounts use StellaAccepted2026-09-23
ADR-154Restore the marketing ebook lead gateAccepted2026-09-19
ADR-155The book has one manuscript, and its editions and migration are generatedAccepted2026-09-19
ADR-156Website leads sync to Attio after the row commits, with the outcome on the rowSuperseded2026-10-26
ADR-157Local ARP checkpoints prepare external runsAccepted2026-09-19
ADR-158Every production deploy publishes the desktop installersAccepted2026-10-01
ADR-159A run is costed while it runs, and the control plane closes a silent sessionAccepted2026-09-24
ADR-160An agent's day is a UTC calendar dayProposed2026-09-24
ADR-161Backfilled runs are rebuilt from local transcripts and claim no governanceAccepted2026-09-23
ADR-162A run resolves an issue when dispatch, PR link and merge agreeAccepted2026-09-23
ADR-163Operator controls do not depend on the policy tierAccepted2026-10-07
ADR-164Every green commit ships unless a newer one is already liveAccepted2026-09-24
ADR-165Every billed governed action is a ledger row, wrapped tool calls bill, and statements and prepaid orders read from the ledgerAccepted2026-09-23
ADR-166The Run page draws every panel of the mockup, and a figure the record lacks reads not recordedAccepted2026-09-24
ADR-167A record picker reads its options through the portAccepted2026-09-24
ADR-168A session and its subagents share one model-call ledger and one tool-call ledgerAccepted2026-09-24
ADR-169An operator seals a run, and its agent is killedAccepted2026-09-24
ADR-170A panel header sits on a grey band, and the dark page is inkSuperseded2026-09-24
ADR-171A chain break is reported beside a run's factsAccepted2026-09-24
ADR-172A host's seal reopens when the host starts the chain againAccepted2026-09-24
ADR-173An assistant run that stops recording is sealed abandonedAccepted2026-09-25
ADR-174The assistant summarises the messages its history window dropsAccepted2026-09-25
ADR-175Approvals and consent requests are off the agent surfaceAccepted2026-09-25
ADR-176The flyout streams a turn over the API's chat streamAccepted2026-09-25
ADR-177A goal-shaped assistant turn is judged on another tier, and each verdict is on the runAccepted2026-09-25
ADR-178A context record is named by its labelAccepted2026-09-24
ADR-179A re-enrolled host carries on its predecessor's sessionsAccepted2026-09-24
ADR-180The control plane seals a silent ledger attempt abandonedAccepted2026-09-24
ADR-181ClickHouse on the app node keeps two system logsAccepted2026-09-25
ADR-182The server is the only place a run's transcript is foldedAccepted2026-09-25
ADR-183Claude Code email addresses in ClickHouse and PostgresAccepted2026-10-02
ADR-184The context registry follows the production branchAccepted2026-09-25
ADR-185A failed WAL body write rolls back the sealAccepted2026-09-25
ADR-186Rule authoring is a capability that builds its goal on the serverAccepted2026-09-25
ADR-187Two gateways carry every customer agent's traffic, and Oxagen holds the keysAccepted2026-10-02
ADR-188A reconciliation reports what the session changedAccepted2026-09-25
ADR-189A gateway call a hooked session makes seals one frame on that session's chainAccepted2026-09-25
ADR-190A failed WAL write leaves every file as it found itAccepted2026-09-25
ADR-191A wrapped run's turn steps are counted by the fold's rules in SQLAccepted2026-09-25
ADR-192Pull request state is stored per run and kept current by forge webhooksSuperseded by ADR-59942026-09-25
ADR-193Paused and compacted are recorded facts beside run statusAccepted2026-09-25
ADR-194Every embedding is voyage-4-large on one platform keyAccepted2026-09-26
ADR-195A seal signs its run attestation when it is writtenAccepted2026-09-26
ADR-196A run's images are frame bodies in the evidence storeAccepted2026-09-26
ADR-197A run stamps its own circumstances and reads the tracker on loadAccepted2026-09-26
ADR-198An agent is one operator on one runtime with one harnessAccepted2026-10-02
ADR-199Run steps are graded from recorded outcomes and set beside the agent's last 30 daysAccepted2026-09-26
ADR-200The context window is recorded on the model-call frameAccepted2026-09-26
ADR-201A run's fit reading is computed from the record and its effort is read from the requestAccepted2026-09-26
ADR-202The macOS desktop app installs updates without askingAccepted2026-10-01
ADR-203A machine holds one tacho enrollment per agentAccepted2026-09-26
ADR-204Containment is a setting of the runtimeAccepted2026-10-02
ADR-205A run's reads cover every chain it recordedAccepted2026-09-26
ADR-206Memories wait in Oxagen and reach a repository by a memory PRAccepted2026-10-02
ADR-207CI runs its own turbo cache on S3Accepted2026-09-26
ADR-208Unproductive spend counts each model-call frame onceAccepted2026-09-26
ADR-209A migrated workspace's tool registry is written from its steering repoAccepted2026-09-27
ADR-210The findings pass reads frames for up to 200 runs and counts the restProposed2026-09-27
ADR-211Review refuses the HTTP+SSE transportAccepted2026-09-27
ADR-212A workspace links a code repository by a steering PRAccepted2026-10-03
ADR-213Merge without review is a grantable permissionAccepted2026-09-27
ADR-214Server-built code graph copies hold symbols, chunks, and embeddingsAccepted2026-09-28
ADR-215The production app moves to oxagen.appSuperseded2026-09-30
ADR-216Generated files commit no value derived from the whole setAccepted2026-09-28
ADR-217A search-mode server ranks its tools by the workspace's embedding providerAccepted2026-09-28
ADR-218A pull request whose CI runs keep getting cancelled is reportedAccepted2026-09-28
ADR-219An existing workspace imports its .oxagen/ steering by steering PRsAccepted2026-09-28
ADR-220The code graph builds on the operator's machine, and a workspace may name its embedding endpointAccepted2026-10-10
ADR-221The app takes shadcn's base-maia style on Base UIAccepted2026-09-28
ADR-222The in-app assistant reads attached filesProposed2026-09-28
ADR-224Studio keeps a draft, and Review opens a steering PR for one server folderAccepted2026-09-28
ADR-225A private-network relay dials out to the MCP service and acts only on signed callsProposed2026-09-28
ADR-226The v3 mockup and the brand kit are the design of recordAccepted2026-09-28
ADR-227The shell frame owns the main landmarkAccepted2026-09-29
ADR-228One GitHub App serves code and steering repositoriesAccepted2026-09-29
ADR-229Request admission and bounded run processingAccepted2026-09-30
ADR-230Enrollment names a versioned per-user copy of the sidecarsAccepted2026-09-30
ADR-231tachod queues hooks per session and reads outside the queuesAccepted2026-09-30
ADR-232A steering repository's governance mode changes through a steering PRAccepted2026-09-30
ADR-233A machine-run server is pinned before it first runsAccepted2026-09-30
ADR-234Served calls are recorded per tool for agent feedbackAccepted2026-09-30
ADR-235Workspaces do not govern or monitor StellaAccepted2026-10-01
ADR-236The production app stays on oxagen.shAccepted2026-09-30
ADR-237Steering repositories support GitHub FreeAccepted2026-10-01
ADR-238Oxagen collects harness memories and recalls none of themAccepted2026-09-30
ADR-239The Neo4j memory import loses its adapters and its deprecated uploadAccepted2026-10-01
ADR-240Parameter Store holds every secret and settingAccepted2026-09-30
ADR-241A new organization gets one grant of governed actions, then subscribesAccepted2026-10-01
ADR-242One model reply is one step, however many parts it arrives inAccepted2026-10-01
ADR-243A row of route tabs is a tab widgetAccepted2026-10-01
ADR-244Phase 1 work records are facts, and the state is reduced from themAccepted2026-10-01
ADR-245A workspace's tool migration starts on provisioning and on requestAccepted2026-10-01
ADR-246CI runs on ephemeral runners in our AWS accountSuperseded2026-10-01
ADR-247Every desktop release file is served from downloads.oxagen.shAccepted2026-10-01
ADR-248Memories keep their rows and rank by useAccepted2026-09-30
ADR-249`oxagen memory` reads workspace memoriesAccepted2026-10-01
ADR-250Phase 1 work intake reads GitHub through the GitHub App, and triage cites a steering recordAccepted2026-10-02
ADR-251A work order reaches its runtime on the command channel, and the runtime claims itAccepted2026-10-02
ADR-252A wrapped agent's pull request carries the Oxagen badge and labelAccepted2026-10-02
ADR-253Every production deploy publishes the CLI to npmAccepted2026-10-02
ADR-254A contained run reaches GitHub through Git custody, and the operator holds no tokenAccepted2026-10-02
ADR-255The Work pages are walked in a real browser by a CI-only script outside the e2e suiteAccepted2026-10-02
ADR-256A model call the gateway does not forward seals an error frameAccepted2026-10-02
ADR-260Ingest stores the collector's signed checkpoints it can verifyAccepted2026-10-02
ADR-261The WAL drops a stalled session's bodies past a ceilingAccepted2026-10-02
ADR-262A Codex rollout seals one llm_call per completed responseAccepted2026-10-02
ADR-263Code repository findings are stored when the check runsAccepted2026-10-02
ADR-264Issue creators file issues complete, and the triage guard is retiredAccepted2026-10-02
ADR-265Every steering PR Oxagen opens carries a proposal rowAccepted2026-10-02
ADR-266Enrollment proposes the runtime's agent fileAccepted2026-10-15
ADR-267A steering PR approval is stored in OxagenAccepted2026-10-02
ADR-277Per-turn budgets for the in-app assistant are deletedAccepted2026-10-02
ADR-278A steering PR may change a server's lock when Oxagen wrote itAccepted2026-10-02
ADR-286The Phase 1 pilot is measured from the work records, and a person decides itAccepted2026-10-02
ADR-287Pushes to main share one CI concurrency groupAccepted2026-10-02
ADR-288Pull requests and their diffs are stored in the forge schema and S3Accepted2026-10-03
ADR-289Oxagen may operate the compute a contained process runs on, and bills it by the running hourAccepted2026-10-08
ADR-292Every pull request read comes from the forge storeAccepted2026-10-03
ADR-293Any workspace may link any repository its installation can seeAccepted2026-10-03
ADR-295ClickHouse and Postgres run in ClickHouse CloudAccepted2026-10-03
ADR-296A pull request merged on GitHub publishes like one Oxagen mergedAccepted2026-10-03
ADR-297A run is credited with the commits it madeAccepted2026-10-03
ADR-298A text class follows the kit's type role, not the mockup's pixel sizeAccepted2026-10-03
ADR-299The code graph's code lives in services/codegraph and packages/codegraphAccepted2026-10-10
ADR-300get_memory_policy loses its route and its MCP toolAccepted2026-10-03
ADR-301Code graph settings are checked files that Settings writers changeAccepted2026-10-03
ADR-302Code graph IDs and the deployable seed rowAccepted2026-10-03
ADR-303The code graph tables are hash-partitioned and embeddings are shared per organizationAccepted2026-10-04
ADR-304Decision and declassification records carry their fields in a map named for the kindAccepted2026-10-03
ADR-305SCIP indexers run in Fargate tasks behind a registry proxyProposed2026-10-04
ADR-306The code graph runs on Fargate and each organization gets its own keyAccepted2026-10-10
ADR-307Code graph extraction links its query grammars and names files, tests, and commentsAccepted2026-10-04
ADR-308One secret pattern set for the code graphAccepted2026-10-04
ADR-309Bulk triage runs on OpenRouter's batch API with a Google modelAccepted2026-10-04
ADR-310Code graph batches carry their request ID in custom IDs and recover before they resubmitAccepted2026-10-04
ADR-311Code graph intake keeps the retired repo row and hands file deletion to the workerAccepted2026-10-04
ADR-313The local code graph maps the Postgres tables into one SQLite file per repoAccepted2026-10-04
ADR-314Code graph grammars load from the pinned pack at run timeAccepted2026-10-04
ADR-315The code graph link step resolves names in one language familyAccepted2026-10-04
ADR-316Code graph dependency readers, Package URLs, and build target labelsAccepted2026-10-04
ADR-317A Tier 1 symbol keeps its cg ID and SCIP is compared by referenceAccepted2026-10-04
ADR-318The schema graph uses the replayed schema and names data nodes under dbAccepted2026-10-04
ADR-320Code graph environment variables join by name and keep setters on the nodeAccepted2026-10-04
ADR-321Code graph scripts are named by file and task, and code tasks stay unknownAccepted2026-10-04
ADR-322The code graph tests index reads tests by rule and turns CI uploads into observationsAccepted2026-10-04
ADR-323The code graph call step replaces link call edges and names entry points by hashAccepted2026-10-04
ADR-324Code graph comments and docs are step code in cg-coreAccepted2026-10-04
ADR-325Tier 2 Swift and Elixir resolve by module, and markup files read their script blocksAccepted2026-10-04
ADR-326The code graph query service reads a workspace manifest and takes the caller's readable reposAccepted2026-10-04
ADR-327apps/app_deprecated is deletedAccepted2026-10-05
ADR-328The code graph publish step layers stages and keeps rows by revision kindAccepted2026-10-04
ADR-329Code graph PageRank runs a fixed 50 iterations, and the query service ranks unannotated filesAccepted2026-10-05
ADR-330The code graph panel sits on Repositories and shows no local-graph copyAccepted2026-10-04
ADR-331The code graph parse step targets 10 seconds and the M1 gate scores agreement by referenceAccepted2026-10-04
ADR-332The local code graph host keys every build to one worktree ref and counts its own heapAccepted2026-10-05
ADR-333Code graph CI uploads bind to the CI token and land on the observation rowAccepted2026-10-05
ADR-334A linked repository's harness files become steering records through one steering PRAccepted2026-10-05
ADR-335Code graph CI workflows are nodes by pipeline file, and run history comes from the hostAccepted2026-10-05
ADR-336The code graph index calls answer from the graph file, and the tests index carries measured coverage on the test nodeAccepted2026-10-05
ADR-337Code graph history walks the first parent, and stores each co-change direction with its own confidenceAccepted2026-10-05
ADR-338The freshness check starts its window at the commit and reads GitHub for what is openAccepted2026-10-05
ADR-339The code graph resolves `at` in the handler, records every build request, and gates the workspace run by cronAccepted2026-10-05
ADR-340Code graph enrichment exchanges batches through Postgres and pauses on a refused reservationAccepted2026-10-05
ADR-341The code graph reads a GitLab project through the workspace's connectionAccepted2026-10-05
ADR-342The code graph workspace stage joins current repo revisions and publishes a checked workspace revisionAccepted2026-10-05
ADR-343Work status sync uses durable provider writesAccepted2026-10-05
ADR-344A person names a run, and no automatic account replaces itAccepted2026-10-05
ADR-345The code graph structure stage runs after the last shard and saves each index under the link stepAccepted2026-10-05
ADR-346The code graph infrastructure index shares IDs with the CI index and keeps connection facts on the nodeAccepted2026-10-05
ADR-347Code graph runtime counts ride on the caller node per observation, and attach after the commit's copy publishesAccepted2026-10-05
ADR-348Python scope links follow annotations to fields and keywordsAccepted2026-10-05
ADR-349Graph file format v2 carries each edge's facts, and the blast radius walks by path confidenceAccepted2026-10-05
ADR-350A run's steering is assembled for its repository under its harness's hook limitAccepted2026-10-05
ADR-351The code graph settings read the approved commit and change through a codegraph branchAccepted2026-10-05
ADR-352Code graph cards embed in passes 6a and 6b, and the organization's vector table is their only cacheAccepted2026-10-05
ADR-353Imported ADRs are indexed in their source repo and copied to the steering repo under the publication ruleAccepted2026-10-05
ADR-354PHP names resolve by namespace and PSR-4, and Laravel routes and migrations are read from their filesAccepted2026-10-06
ADR-355C and C++ resolve includes by folder and index with scip-clang in the sandboxAccepted2026-10-05
ADR-356Go names resolve by package folder and module path, and methods by receiver typeAccepted2026-10-05
ADR-357JVM names resolve by package, scip-java indexes whole Gradle and Maven builds, and Spring and JPA are read from annotationsAccepted2026-10-05
ADR-358Code graph domains keep opaque stable IDs per workspace, and approved changes name only those IDsAccepted2026-10-05
ADR-359Dart names resolve by pubspec package and URI, and Dart projects index with scip-dartAccepted2026-10-05
ADR-360Rust paths follow the mod tree, Ruby constants resolve by nesting, and .NET names resolve by namespaceAccepted2026-10-05
ADR-361The code graph M2 gate replays squash-merged pull requests with the worker's own buildAccepted2026-10-05
ADR-362Code graph search ranks words in the query service and takes meaning from the handlerAccepted2026-10-06
ADR-363Floating surfaces are glassAccepted2026-10-06
ADR-364Code graph live inventory reads AWS Config through an opt-in role, and publishes drift as one layer per accountAccepted2026-10-05
ADR-365The code graph M5 gate checks call flows, plans, and CI jobs against what ranAccepted2026-10-05
ADR-366The code graph M6 gate runs the M1 and M2 harnesses on pinned public repos, one or more per languageAccepted2026-10-05
ADR-367Linker rounds run from an Inngest function, and one checker serves propose_edge and the batchAccepted2026-10-06
ADR-368Code graph embeddings run through one gateway, and only the cloud build host writes the vector tableAccepted2026-10-06
ADR-369Code graph boundaries are decided at question time, and conventions are mined by count with a template ruleAccepted2026-10-06
ADR-370The code graph M3 gate scores search on pinned benchmark tasks and domain tags on two folds of labelsAccepted2026-10-06
ADR-371Spec status is worked out once per workspace revision, and trace_spec reads it from the specs fileAccepted2026-10-06
ADR-372Pull requests run light lanes, and main runs the full gateAccepted2026-10-06
ADR-373Linker rounds per node are a workspace settingAccepted2026-10-06
ADR-374packages/ui is the one component library: shadcn on Base UI, in glassAccepted2026-10-06
ADR-375CI status goes to Slack, and no workflow files a P0Accepted2026-10-06
ADR-5864ADRs take their merge request's number, and atlas.sum is generatedAccepted2026-10-06
ADR-5876The weekly price and unpriced-model report are precomputed every five minutesAccepted2026-10-06
ADR-5878Session succession requires a device key proofAccepted2026-10-06
ADR-5879System paths assume a role, and no policy reads app.rls_bypassAccepted2026-10-06
ADR-5882Design documents live in the roadmap repositoryAccepted2026-10-06
ADR-5929A model the price book has never priced is priced from the floorProposed2026-10-07
ADR-5939Command reasons are a workspace setting, off by default and enforced by dispatch_commandAccepted2026-10-07
ADR-5945A host starts a sent work order itselfAccepted2026-10-07
ADR-5965A pause holds the session's model calls at the host gatewayAccepted2026-10-07
ADR-5969One run table: tacho.sessions holds every runAccepted2026-10-07
ADR-5986One billing customer per organization, stored under provider-neutral namesAccepted2026-10-07
ADR-5989Agent memories live in Postgres alone, and the Neo4j memory tools are deletedAccepted2026-10-07
ADR-5992The MCP server row holds its connectionAccepted2026-10-07
ADR-5994A pull request's state is kept only in the forge storeAccepted2026-10-07
ADR-6028Dispatched work is accepted only when its pull request can mergeAccepted2026-10-07
ADR-6058A local code graph uses the workspace's own embedding key and talks to Oxagen only to fetch itAccepted2026-10-07
ADR-6080Operator presence, away time and the output measuresAccepted2026-10-07
ADR-6082A pull request mention steers or redispatches the agent that opened itAccepted2026-10-08
ADR-6107A rotated API key keeps working for 24 hoursAccepted2026-10-08
ADR-6116Sandbox runtimes run only in the customer's own Modal account in phase 2Accepted2026-10-08
ADR-6120Every issue and comment a wrapped run writes carries the run badgeAccepted2026-10-08
ADR-6126Oxagen returns a send whose pull request cannot mergeAccepted2026-10-08
ADR-6154Beta pricing lives in data and can change without a deployAccepted2026-11-03
ADR-6170A prompt that names an issue claims its work itemAccepted2026-10-15
ADR-6171Decisions made finishing the issues #6153 advancedAccepted2026-11-05
ADR-6203Production logs go to Datadog through the archive FirehoseAccepted2026-10-09
ADR-6293Every list table follows one anatomyAccepted2026-10-09
ADR-6563An operator keeps many model credentials per harness, and the gateway moves to the next when one runs out of usageAccepted2026-10-09
ADR-6574Oxagen adopts the Oxide design systemAccepted2026-10-10
ADR-6588Every create flow runs on one record wizard that stella draftsAccepted2026-10-10
ADR-6603A local code graph builds what the cloud builds, from the same Rust step code and a cloud copy of its baseAccepted2026-10-10
ADR-6604Enrollment is an Ed25519 certificate signed by the control plane and proved by the host's device keyAccepted2026-10-10
ADR-6606A local tool discovery travels in a signed envelopeAccepted2026-10-10
ADR-6608The kernel decisions of issue 2971: typed refusals, the agent approval matrix, reads and the billing gate, and the rows closed by removalAccepted2026-10-10
ADR-6622Every figure and chart is drawn by the dashboard kitAccepted2026-10-17
ADR-6625Durable jobs are served on /api/jobs through a provider contractAccepted2026-10-10
ADR-6629Sandbox providers plug in by host operatorAccepted2026-10-10
ADR-6672The def-use layer is built per file when a call first needs it, and fault localization fuses seven signalsProposed2026-10-10
ADR-6742The code graph link step builds on the commit before it and records moved filesAccepted2026-10-11
ADR-6746A required check passes as GitHub counts it, and a merge settles the review gateAccepted2026-10-10
ADR-6750A workspace hears about its work and runs on Slack and by emailAccepted2026-10-11
ADR-6753A work collector connects to any issue tracker through one framework and syncs both waysAccepted2026-10-11
ADR-6754A work item is written in Oxagen's editor and creates its tracker issue on saveAccepted2026-10-11
ADR-6765A sandbox runtime names its run environment and the workspace default is the fallbackAccepted2026-10-11
ADR-6776Every MCP credential is an mcp row of the vaultAccepted2026-10-11
ADR-6780A sandbox's daemon enrolls by exchanging its run token for a certificate the control plane signsAccepted2026-10-11
ADR-6791Go values take the types their declarations state, and another module of the repo is outside unless replacedAccepted2026-10-11
ADR-6796The def-use layer is one JSON file per file content, built by the host that holds the sourceAccepted2026-10-11
ADR-6805A batch of work orders is one row, and a sandbox batch runs one sandbox per orderAccepted2026-10-11
ADR-6807The cloud gateway relays Git and tool calls for the daemon inside a sandboxAccepted2026-10-11
ADR-6926The registry follows the steering directory in a steering repositoryAccepted2026-10-12
ADR-6932A model credential change from a CLI session key is refused by key purpose, recorded with the key and address, and told to the personAccepted2026-10-13
ADR-6940Memories rank by whether they steer agents wellAccepted2026-10-12
ADR-6943The cloud gateway relays a sandbox run's GitLab project to gitlab.comAccepted2026-10-13
ADR-6947Memories come only from the workspace's repositories and personal foldersAccepted2026-10-13
ADR-6955Sandbox reads that a page opens answer released false and record no denialAccepted2026-10-13
ADR-6967A table's column order and visibility live in one cookie per tableAccepted2026-10-13
ADR-6968A page tab awaits only the reads its body drawsAccepted2026-10-13
ADR-7039The Stella console and the count of what waits on the operatorAccepted2026-10-13
ADR-7046A runtime is deleted for good once nothing live uses itAccepted2026-10-13
ADR-7054A sandbox runtime's egress hosts and services take effect on ModalAccepted2026-10-13
ADR-7069Oxagen generates a workspace's sandbox template into its steering repoAccepted2026-10-13
ADR-7073A settings area lists its pages in one grouped settings navAccepted2026-10-13
ADR-7097One agent runs any number of sandboxes at once, each with a host of its ownAccepted2026-10-13
ADR-7098Run link inference tries the run's own record before a semantic matchAccepted2026-10-13
ADR-7107Every surface draws shared components from one package through its own components folderAccepted2026-10-13
ADR-7129A repeated instruction reaches a person only as a rule stella judgedAccepted2026-10-14
ADR-7134A steering draft reaches a person only when the agent that would receive it asks for itAccepted2026-10-14
ADR-7155Stella raises what an agent says it left undoneAccepted2026-10-14
ADR-7157A steering record draft comes from a person's corrections, and every draft passes the agent testAccepted2026-10-14
ADR-7185Full transcript mode keeps every tool body, cut rather than droppedAccepted2026-10-14
ADR-7187A pull request merged on GitHub counts in OxagenAccepted2026-10-14
ADR-7200stella runs a published skill only when the person names it with a slash commandAccepted2026-10-14
ADR-7206A local code graph build embeds through a loopback relay on tachod and bills the operatorAccepted2026-10-14
ADR-7207A memory reaches Oxagen when it is written, and the host's copy winsAccepted2026-10-14
ADR-7216Deleting a stella conversation removes it and its files for goodAccepted2026-10-14
ADR-7226stella runs on the organization's model tiers, and each tier says who paysAccepted2026-10-14
ADR-7229A re-enrolled machine takes its revoked enrollment's open runs at onceAccepted2026-10-14
ADR-7237Private blob encryptionAccepted2026-10-14
ADR-7249Durable send-back deliveryAccepted2026-10-14
ADR-7261A re-enrolled machine takes a run only on its daemon's proofAccepted2026-10-14
ADR-7362Cedar tool policies and enforcement failuresAccepted2026-10-15
ADR-7373Steering tokens name one repository, and recall may send the prompt under `digest_only`Accepted2026-10-14
ADR-7374A rejected primary moves its run's spend to the next confirmed item or back to unassignedAccepted2026-10-15
ADR-7378Both gateways add run steering before each model callAccepted2026-10-15
ADR-7385Reports live in one section and each report read checks its scopeAccepted2026-10-15
ADR-7391Each operator is decided on their own agent fileAccepted2026-10-15
ADR-7419The shared component package holds every component the design system drawsAccepted2026-10-16
ADR-7449CI runs on our own GitHub App and AWS boxesAccepted2026-10-17
ADR-7450A price book row can price only prompts past a sizeAccepted2026-10-17
ADR-7451A default model tier names one of the organization's tiersAccepted2026-10-17
ADR-7454Every surface draws its components from @oxagen/uikit, and packages/ui is deletedAccepted2026-10-17
ADR-7460Graph nodes carry a durable public id that cloud and local graphs shareAccepted2026-10-17
ADR-7493A person declines a suggested work item with a start_declined work factAccepted2026-10-18
ADR-7494The brief becomes the Definition of Done with two fields per itemAccepted2026-10-18
ADR-7495The app, the docs site and Storybook draw one uikit stylesheetAccepted2026-10-20
ADR-7504Built-in role grants come from contracts at read timeAccepted2026-10-18
ADR-7506Tacho is now the recorderAccepted2026-10-18
ADR-7543Billing has four entry points and keeps its root as their unionAccepted2026-10-17
ADR-7551The code graph spend ledger belongs to billing and the model package root lists only model callsAccepted2026-10-18
ADR-7554Background jobs read their parts from one object the API installsAccepted2026-10-18
ADR-7555The agent package holds the runtime and names its entry pointsAccepted2026-10-18
ADR-7571The durable ingestion job is the one runner of the graph ingestion stagesAccepted2026-10-18
ADR-7575Capability handlers are bound in one typed table per contract domainAccepted2026-10-18
ADR-7598A mention pins the record version the person picked, and one chip draws itAccepted2026-10-19
ADR-7606One table holds every steering record mention outside a work itemAccepted2026-10-20
ADR-7608Charts draw quiet colors and the gold marks one emphasized seriesAccepted2026-10-22
ADR-7642Skill registries share the registries table and default to skills.shAccepted2026-10-20
ADR-7647Every design-system component lives in the shared component package, the run family includedAccepted2026-10-21
ADR-7658The mockup draws every component from the shared library and is where new designs are tried firstAccepted2026-10-21
ADR-7671Steering lists records, suggestions and skillsAccepted2026-10-21
ADR-7678A skill's folder opens and edits in placeAccepted2026-10-21
ADR-7685File storage runs on S3 in Oxagen's AWS accountAccepted2026-10-21
ADR-7690stella asks a decision on the ticket it blocksAccepted2026-10-21
ADR-7706Every question to the operator is multiple choice with the recommended answer firstAccepted2026-10-21
ADR-7719The design system draws one dialog componentAccepted2026-10-21
ADR-7721The Run page draws PageHeader and the Work panel holds the pull requestAccepted2026-10-21
ADR-7742The Run page header holds the title, the status and a two-line summaryAccepted2026-10-21
ADR-7755The Work panel shows the work a run created and closed, and Changes holds the pull requestAccepted2026-10-21
ADR-7775Agent minutes, staffing and decisions on work itemsAccepted2026-10-22
ADR-7777Work item statuses map to fixed stagesAccepted2026-10-22
ADR-7779A person's return records its feedback cluster on the factAccepted2026-10-22
ADR-7780Work item labels have a workspace look and one mapping tableAccepted2026-10-22
ADR-7783Oxagen scores and ranks each person from the recordAccepted2026-10-22
ADR-7788A run stores the sums its report needs and the report works out the restAccepted2026-10-22
ADR-7809Pages show the least that answers their question and reveal the rest on requestAccepted2026-10-22
ADR-7818The phone's top bar holds three controls and a three-dot button opens the full navigationSuperseded2026-10-22
ADR-7819The work item page draws as one scroll, as the mockup draws itAccepted2026-10-22
ADR-7823The app's Run page takes the mockup's two columns and leaves unread figures outAccepted2026-10-22
ADR-7838A work order session starts with Oxagen's own progress note, and the agent records progress with the host keyAccepted2026-10-22
ADR-7906The app draws its frame from the design system's inset dual-rail shellAccepted2026-10-22
ADR-7910Charts draw in one gold familyAccepted2026-10-22
ADR-7916Work item labels are renamed, archived and deleted without rewriting itemsAccepted2026-10-22
ADR-7923A work order's run proves itself with a token Oxagen makes from the claimAccepted2026-10-22
ADR-7935A decision stands alone and each option names what stella does nextAccepted2026-10-22
ADR-7936A person ticks Done Checklist items with an item factAccepted2026-10-22
ADR-7954Triage runs again on its own when its failure passesAccepted2026-10-23
ADR-7967Residue that files an issue is FYI, and housekeeping is never residueAccepted2026-10-22
ADR-7989Work, Agents and Steering draw their tabs on the page and the shell has one railAccepted2026-10-23
ADR-8004The work item page folds every section and shows four factsAccepted2026-10-24
ADR-8006The plan line item is found by its price kind and the sandbox slot add-on owns its grantAccepted2026-10-24
ADR-8018The run transcript hides model calls the provider refusedAccepted2026-10-24
ADR-8020Stella widgets draw from one chart kit with pixel hit targetsAccepted2026-10-24
ADR-8031A run's context score is the share of three recorded signals it carriesAccepted2026-10-24
ADR-8042Stella's widget data comes from recorded runs and settled vocabulariesAccepted2026-10-24
ADR-8102Stella keeps every item a run lists as left undoneAccepted2026-10-24
ADR-8108An action stella takes alone answers the item and can be undoneAccepted2026-10-24
ADR-8111The Run page drops the issue connections panelAccepted2026-10-24
ADR-8112The Console shows what needs you and what stella did alone in one card stackAccepted2026-10-24
ADR-8120A run's report reaches the Console as one questionnaire and one updateAccepted2026-10-24
ADR-8123Triage questions wait on the Console as multiple choice, and their answers reach the agentAccepted2026-10-24
ADR-8125The Run page has a sticky header with a chip row, an independent side column and a live barAccepted2026-10-25
ADR-8149A run linked to a work item becomes the item's sendAccepted2026-10-25
ADR-8156The stella widgets reach the app as uikit cards read through one port and shown by a widget cardAccepted2026-10-25
ADR-8175The browser gets the message catalogue from a static moduleAccepted2026-10-25
ADR-8207Dashboards list the stella widgets as cards under an Analytics sectionAccepted2026-10-25
ADR-8209The main deploy publishes the node tools from the orchestratorAccepted2026-10-25
ADR-8211A run's frames are read in pages of 1,000Accepted2026-10-25
ADR-8221The Dashboards page draws the stella widget indexAccepted2026-10-25
ADR-8224The run lists page from an index on the start at UTCAccepted2026-10-25
ADR-8225A request memo on the capability context shares one request's readsAccepted2026-10-25
ADR-8242Explicit delegated work decisions and CLI MCP parityAccepted2026-10-25
ADR-8253The run header lists a repository only for a branch the run committed toAccepted2026-10-25
ADR-8265The Run page's side column puts Tasks under Run details and above ChangesAccepted2026-10-25
ADR-8290The app draws each stella dashboard from the mockup's widget card and a live readAccepted2026-10-25
ADR-8324The sidebar groups workspace, organization and analytics pages, and Spend becomes a Reports dashboardAccepted2026-10-26
ADR-8329The Work items and Runs tables draw as a spreadsheet gridAccepted2026-10-26
ADR-8352A machine registers through a token bound to its runtime and agentAccepted2026-10-26
ADR-8353Each workspace keeps its own run kinds and work item kinds, and a model picks oneAccepted2026-10-26
ADR-8355Work item writes from every surface, in lists, and what a deleted item reachesAccepted2026-10-26
ADR-8361A work item's cost is read from its runs and its owner sits in owner_idAccepted2026-10-26
ADR-8367Run and work item panels fold by section and draw nothing when emptyAccepted2026-10-26
ADR-8395Website leads alert by email and Slack and none go to AttioAccepted2026-10-26
ADR-8400Agent claims of done are checked by a deterministic engine over oracle reportsAccepted2026-10-26
ADR-8401Issue titles carry the initiative key and the statementAccepted2026-10-26
ADR-8405Plans carry agent sandboxes and a sandbox runtime limit, and a plan can differ from its tierAccepted2026-10-26
ADR-8422The agent evidence bundle is a SCITT profile published as an Internet-DraftAccepted2026-10-26
ADR-8431A run's Console card starts with no answer pickedAccepted2026-10-27
ADR-8447Geist Mono sets code and nothing else, and a run's cost is a price badgeAccepted2026-10-27
ADR-8451A phone draws its own Work items list from one stats read that replays the work factsAccepted2026-10-27
ADR-8481Plans limit how many workspaces an organization holdsAccepted2026-10-27
ADR-8491Stored status reports feed the Spend briefingAccepted2026-10-28
ADR-8545The brand lives in packages/brand, in cool tonesAccepted2026-10-28
ADR-8546Steering has no stale state, and a connected repository holds no steeringAccepted2026-10-28
ADR-8549Spend reads stored per-run rows that triggers keep currentAccepted2026-10-28
ADR-8550Spend briefings read the organization's reports and a model writes every scopeAccepted2026-10-28
ADR-8556A work item's theme comes from its issueAccepted2026-10-28
ADR-8562A machine's agents are named after the operator, the harness, and localAccepted2026-10-28
ADR-8582The run terminal pauses the run before anyone typesAccepted2026-10-28
ADR-8586A steering repo's main is served however a commit reached itAccepted2026-10-28
ADR-8595An organization on its own database keeps its sandbox work and workspace notifications thereAccepted2026-10-28
ADR-8596A sandbox template's setup command runs once at build timeAccepted2026-10-28
ADR-8604Every sandbox run checks out every linked repositoryAccepted2026-10-28
ADR-8616A workspace account is a model credential the workspace holds, and a run's account source says who paysAccepted2026-10-29
ADR-8617A person's model credentials belong to the person, not to an organizationAccepted2026-10-28
ADR-8623A run on a person's own machine rotates through their saved credentialsAccepted2026-10-28
ADR-8631Transcript Reader turns run problems into fixesAccepted2026-10-29
ADR-8634A device serves one workspace at a time, with a connection generation on each enrollmentAccepted2026-10-29
ADR-8644A device connection request is the enrollment token, and a device is the machine id on each hostAccepted2026-11-02
ADR-8645A sandbox run waits out its model accounts' limits and its launcher continues the harnessAccepted2026-11-02
ADR-8648The brand gold is the metal D4AF37 and darker on the light groundAccepted2026-11-02
ADR-8667Steering reads answer only wrapped runsAccepted2026-11-02
ADR-8669Website leads post to Slack through a bot token and the channel opens itselfAccepted2026-11-02
ADR-8692A refused model account is a Console card that its owner or the workspace's admins repair and checkAccepted2026-11-02
ADR-8720The prepaid wallet extends the billing tables Oxagen already hasAccepted2026-11-03
ADR-8725CI/CD runs and merged pull requests reach the Console as read-once noticesAccepted2026-11-02
ADR-8726A failed run's card is a Console notice read onceAccepted2026-11-03
ADR-8732The wallet's lots hold the balance only while it is zero or moreAccepted2026-11-03
ADR-8733A refused model login is signed in again on the person's own enrolled machine through a reauth commandAccepted2026-11-03
ADR-8734Paid action units carry over, seat changes move the month by the share left, and the month close charges unpaid blocksAccepted2026-11-04
ADR-8754Google Cloud infrastructureAccepted2026-11-03
ADR-8774Main gates without deploying on Google Cloud until the deploy bridge landsAccepted2026-11-03
ADR-8777Production pulls each passed main release from the CI bucketAccepted2026-11-04
ADR-8786A result in review is accepted on the person's wordAccepted2026-11-04
ADR-8788A host's Codex keeps its ChatGPT login and the gateway records its callsAccepted2026-11-04
ADR-8799The agent action gate runs the auto top-up before it refusesSuperseded by ADR-88192026-11-04
ADR-8800Portable code graph storageAccepted2026-11-04
ADR-8819Billing holds new runs at run start and the recorder asks a job for the auto top-upAccepted2026-11-04
ADR-8870A person carries a work item to approval by hand, and approves many at onceAccepted2026-11-04
ADR-8876Stella runs in a sandbox on its own route with every harness's hooks pinnedAccepted2026-11-04
ADR-8886Infrastructure pull requests merge without waiting for Mac's reviewAccepted2026-11-04
ADR-8889A run that bills the workspace's model accounts needs no second confirmationAccepted2026-11-04
ADR-8890One cloud environment installs many harnessesAccepted2026-11-04
ADR-8894Sandbox pushes to recorded repositoriesProposed2026-11-04
ADR-8897Device workspace connectionsProposed2026-11-05
ADR-8898Empty-credit sandbox retriesProposed2026-11-05
ADR-8901Agent drafts finish with one permanent identityAccepted2026-11-05
ADR-8907Several agents take turns in one sandboxProposed2026-11-04
ADR-8953Website leads live in the crm schema with first-touch UTM columnsAccepted2026-11-05
ADR-8978A workspace chooses what a model call does when required steering does not fitAccepted2026-11-06
ADR-8989Each organization's IAM audit rows form one chain under a Postgres lockAccepted2026-11-05
ADR-8994Unproductive spend is read from finding claims, and the step grade counts stepsAccepted2026-11-05

About this atlas

Generated, not written. The docs build regenerates it from the tree; pnpm docs:architecture --check proves the cited sources still exist and the output is deterministic.

Inputs

  • apps/*/package.json, packages/*/package.json, tools/*/package.json: the workspace graph.
  • packages/database/storage-manifest.json: the ADR-031 platform storage ontology (content hash 37268951ee69c62e…), kept byte-stable by pnpm schema:manifest:check.
  • packages/database/src/relations.ts, schema/_schemas.ts, tenant-policy.manifest.ts: logical edges, schema namespaces, RLS classes.
  • packages/telemetry/src/schema.sql + migrations/*.sql: ClickHouse, replayed in order.
  • packages/ontology/src/schema.cypher: Neo4j vector indexes (labels arrive via the manifest).
  • packages/oxagen/capabilities.manifest.json and packages/handlers/src/bindings/: contracts and handler bindings.
  • apps/api/src/app.ts + routes/**: mounted routes, tiers, middleware chains.
  • apps/mcp/src/tools, apps/cli/src/program.ts: the other two surfaces.
  • packages/inngest-functions/src/functions.ts and functions/*.ts: the served array, each declaration scanned with the exported helpers of check-inngest-senders.ts.
  • packages/config/src/registry.ts: ENV_REGISTRY and the Parameter Store prefixes, imported directly.
  • packages/config/src/ci-registry.ts: CI_REGISTRY, joined to the secrets. and vars. names each workflow and each .github/actions/**/action.yml reads.
  • .github/workflows/*.yml, docs/adr/*.md, infra/tools/caddy/Caddyfile.alb, docker-compose.dev.yml.

Curated flows

11 mechanism diagrams are hand-described in tools/scripts/lib/archdocs/flows.ts because they encode order, which no manifest records. Each cites the files and symbols it depicts (134 references); the generator fails when any cited file or symbol is missing, so a flow cannot outlive the code it draws.

Determinism

No timestamps, no random ids, no network. Two builds of the same tree produce identical bytes. The output is not committed: apps/docs regenerates it as a prebuild step, so the published atlas always matches the tree it shipped with, and pnpm docs:architecture --check, part of pnpm gate, guards the two things that can rot, cited sources and determinism. The docs build's own generation step also fails when a cited file or symbol is gone.