Internal engineering docs

Oxagen Architecture Atlas

What the monorepo is made of and how a request, a run, a credit 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 resolves to one capability kernel, and the kernel is the only path to the stores.

System context

System context: every client surface reaches the stores only through the capability kernel.GOVERN · GROUND · EXPLAIN · METER · RATEHTTPSREST, ox_ keystreamable HTTP/v1/tacho ·/v1/telemetrysession cookieinvoke()invoke()governed turnwithTenantDbscopedSessionaudit · usage ·tool calls/webhooks/stripebackground jobsexportsBrowseroxagen CLI85 commandsMCP clientClaude · Cursor · agentsExternal agentsStella · tacho-wrapped harnessesapps/appapp.oxagen.shapps/apiapi.oxagen.sh · 354 routesapps/mcpmcp.oxagen.sh · 308 toolscapability kernel355 contracts · one invoke()Inngest33 functionsPostgres141 tables · 24 schemas · RLSNeo4j28 labels · vectorClickHouse20 tables · append-onlyBlobavatars · attachments · evidencestella-servemodel engine, loopbackStripewebhooks in · nothing re-billed
Every client surface reaches the stores only through the capability kernel; stella-serve, Stripe and Inngest sit outside it.
  • 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: 8 apps, 32 packages and 2 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.context-providerapiappcliappmcpappappappdesktopappdocsappweb-v2appengramhandlerssteering-freshnessuiauthgithubinngest-functionsfunctionsagentingestionaipluginsrulesontologystella-engine-clientglobiammcp-configbillingnotificationsrun-ledgerdatabasestoragecryptooxagentelemetryrun-evidenceconfigtachotenancycompliance
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 a node to trace its edges.
  • Most depended-on: config (17), database (17), telemetry (16), tenancy (16), oxagen (15), billing (11), crypto (10), ai (8).
  • Deprecated and tool workspaces are listed in the table but left out of the drawing.

Workspaces

42
PackageDirectoryKindWorkspace depsExternal depsDescription
@oxagen/agentpackages/agentpackage167
@oxagen/aipackages/aipackage68
@oxagen/apiapps/apiapp217
@oxagen/appapps/appapp1511
@oxagen/app-deprecatedapps/app_deprecatedapp2133
@oxagen/authpackages/authpackage63
@oxagen/billingpackages/billingpackage94
@oxagen/cliapps/cliapp42Oxagen governance CLI — spend, lineage, grounding, credentials, and audit (agentic coding lives in the stella CLI)
@oxagen/compliancepackages/compliancepackage00
@oxagen/configpackages/configpackage01
@oxagen/context-providerpackages/context-providerpackage11
@oxagen/cryptopackages/cryptopackage02
@oxagen/databasepackages/databasepackage73
@oxagen/desktopapps/desktopapp17The Oxagen desktop app: installs the CLI and the Tacho wrapper 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/docsapp19
@oxagen/engrampackages/engrampackage13
@oxagen/env-managertools/env-managertool12Local-only web UI to view env/secrets per environment and deploy the right values to the right Vercel project + environment. Requires a per-process access token and binds to 127.0.0.1.
@oxagen/functionspackages/functionspackage00
@oxagen/githubpackages/githubpackage21
@oxagen/globpackages/globpackage00
@oxagen/handlerspackages/handlerspackage228
@oxagen/iampackages/iampackage52
@oxagen/ingestionpackages/ingestionpackage52
@oxagen/inngest-functionspackages/inngest-functionspackage176
@oxagen/mcpapps/mcpapp1112
@oxagen/mcp-configpackages/mcp-configpackage01
@oxagen/notificationspackages/notificationspackage24
@oxagen/ontologypackages/ontologypackage31
@oxagen/oxagenpackages/oxagenpackage43
@oxagen/pluginspackages/pluginspackage610
@oxagen/rulespackages/rulespackage44
@oxagen/run-evidencepackages/run-evidencepackage03
@oxagen/run-ledgerpackages/run-ledgerpackage44Durable run / attempt / event / seal / finalization ledger — the evidence store for governed agent runs (ADR-043).
@oxagen/scriptstools/scriptstool126
@oxagen/steering-freshnesspackages/steering-freshnesspackage01
@oxagen/stella-engine-clientpackages/stella-engine-clientpackage00
@oxagen/storagepackages/storagepackage12
@oxagen/tachopackages/tachopackage04Tacho: the Oxagen wrapper that records, gates, and evidences Claude Code, Claude Agent SDK, and custom agents. Leaf package: no @oxagen/* runtime dependency.
@oxagen/telemetrypackages/telemetrypackage49
@oxagen/tenancypackages/tenancypackage00
@oxagen/uipackages/uipackage06
@oxagen/web-v2apps/webapp00oxagen.sh public website (v2). Hand-authored HTML plus a blog built from MDX content; `pnpm build` assembles the publishable site into dist/.

Request path

Identity → tenant scope → capability → row-level security. Nothing reaches a table without the three GUCs set, 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.Clientbrowser · CLI · MCP · SDKapps/apiHono middleware chain@oxagen/authresolverskernel.invoke@oxagen/oxagenwithTenantDb@oxagen/databasePostgresAurora / local :54331HTTPS request/v1/:org_slug/:workspace_slug/…2Authorization: Bearer ox_… ?resolveApiKey → orgId + workspaceId pre-bound from the key3else session cookieparseSessionCookie → resolveSession (Better Auth)4orgMiddleware · workspaceMiddlewareresolveOrgScope / resolveWorkspaceScope by slug (skipped when the key pre-bound them)5capabilityContext(c) → invoke(name, input, ctx, { surface: 'api' })apps/api/src/lib/context.ts6gates run in ordersee “Gate order inside invoke()” below7handler runs inside runInTenantScope@oxagen/tenancy AsyncLocalStorage8BEGIN; select set_config(…, true) ×3app.current_org_id · app.current_workspace_id · app.rls_bypass9handler 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.
  • An API key wins outright when present: the session cookie is never consulted, and the key's immutable org and workspace scope is copied onto the request, so the slug middlewares return early.
  • The three GUCs are set with set_config(name, value, true), which is transaction-local. app.rls_bypass is always written explicitly so a policy never evaluates a missing setting.
  • withSystemDb is the audited bypass: it sets only app.rls_bypass = 'on', always on the shared plane, and unscoped calls are counted under the db.query.unscoped metric.
Source refs (9, 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/atlas/migrations/20260612140000_restore_rls_policies.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 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 · digest in pool keyorg.data_planeskind · mode · status · KMS envelopeshared Postgresprocess singletondedicated Postgresper-org pool, LRU-cappedshared Neo4jdedicated Neo4jper-org drivershared ClickHousededicated ClickHouseper-org client
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 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 itself reads org.data_planes through withSystemDb on the shared plane, which is why the system path can never be plane-aware without a cycle.
Source refs (3, verified at build)
  • packages/tenancy/src/data-plane.ts#resolveDataPlane
  • packages/database/src/data-plane-resolver.ts
  • packages/database/src/data-plane-pool.ts#MAX_DEDICATED_POOLS

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
user* → authMiddleware
stella telemetry* → authMiddleware
ledgerIngress* → authMiddleware
tacho host* → authMiddleware
/bundle → tachoControlLimiter
/commands → tachoControlLimiter
org+workspace* → authMiddleware, orgMiddleware, workspaceMiddleware
/chat/* → chatRateLimiter
org* → authMiddleware, orgMiddleware
TierRoutesPrefixes
ledgerIngress1/v1/run-ingest/
org3/v1/:org_slug/audit · /v1/:org_slug/onboarding · /v1/:org_slug/workspaces
org+workspace319/v1/:org_slug/:workspace_slug
public11/health · /v1/auth/cli · /v1/cms/book · /v1/cms/leads · /v1/run-exports/download · /v1/tacho/enroll
stella telemetry2/v1/telemetry/stella
tacho host4/v1/tacho/apiKeyId · /v1/tacho/bundle · /v1/tacho/commands · /v1/tacho/events
user14/v1/auth/whoami · /v1/auth/whoamiapiKeyId · /v1/auth/whoamiorgId · /v1/auth/whoamiuserId · /v1/auth/whoamiworkspaceId · /v1/onboarding/state

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().

354
MethodPathTierCapabilityRoute file
POST/v1/run-ingest/ledgerIngressingest_run_framesv1/run.frames.ingest.ts
POST/v1/:org_slug/audit/events/exportorgexport_audit_eventsv1/audit.events.export.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
GET/v1/:org_slug/:workspace_slug/agent/debug/trace/:executionIdorg+workspacedebug_executionv1/agent.debug.trace.ts
GET/v1/:org_slug/:workspace_slug/agent/definitionsorg+workspacelist_agent_defsv1/agent.definition.list.ts
POST/v1/:org_slug/:workspace_slug/agent/definitionsorg+workspacecreate_agent_defv1/agent.definition.create.ts
GET/v1/:org_slug/:workspace_slug/agent/definitions/:agentIdorg+workspaceget_agent_defv1/agent.definition.get.ts
POST/v1/:org_slug/:workspace_slug/agent/definitions/deleteorg+workspacedelete_agent_defv1/agent.definition.delete.ts
POST/v1/:org_slug/:workspace_slug/agent/definitions/publishorg+workspacepublish_agent_defv1/agent.definition.publish.ts
POST/v1/:org_slug/:workspace_slug/agent/definitions/reviseorg+workspacerevise_agent_defv1/agent.definition.revise.ts
POST/v1/:org_slug/:workspace_slug/agent/definitions/suggestorg+workspacesuggest_agent_defv1/agent.definition.suggest.ts
POST/v1/:org_slug/:workspace_slug/agent/definitions/summarizeorg+workspacesummarize_agent_defv1/agent.definition.summarize.ts
POST/v1/:org_slug/:workspace_slug/agent/definitions/updateorg+workspaceupdate_agent_defv1/agent.definition.update.ts
POST/v1/:org_slug/:workspace_slug/agent/deployorg+workspacedeploy_agentv1/agent.deploy.ts
POST/v1/:org_slug/:workspace_slug/agent/environment/bindorg+workspacebind_agent_environmentv1/agent.environment.bind.ts
POST/v1/:org_slug/:workspace_slug/agent/environment/listorg+workspacelist_agent_environmentsv1/agent.environment.list.ts
POST/v1/:org_slug/:workspace_slug/agent/environment/unbindorg+workspaceunbind_agent_environmentv1/agent.environment.unbind.ts
POST/v1/:org_slug/:workspace_slug/agent/execution/recordorg+workspacerecord_executionv1/agent.execution.record.ts
GET/v1/:org_slug/:workspace_slug/agent/executionsorg+workspacelist_executionsv1/agent.execution.list.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-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
GET/v1/:org_slug/:workspace_slug/agent/mcp-servers/resolveorg+workspaceresolve_mcp_serversv1/agent.mcp.resolve.ts
POST/v1/:org_slug/:workspace_slug/agent/mcp-servers/set-enabledorg+workspaceset_mcp_enabledv1/agent.mcp.set_enabled.ts
POST/v1/:org_slug/:workspace_slug/agent/memoryorg+workspacewrite_memoryv1/agent.memory.write.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/citations/listorg+workspacelist_memory_citationsv1/agent.memory_citation.list.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/citations/statsorg+workspaceget_citation_statsv1/agent.memory_citation.stats.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/citeorg+workspacecite_memoryv1/agent.memory.cite.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/deleteorg+workspacedelete_memoryv1/agent.memory.delete.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/demoteorg+workspacedemote_memoryv1/agent.memory.demote.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/import/commitorg+workspacecommit_memory_importv1/agent.memory_import.commit.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/import/parseorg+workspaceparse_memory_importv1/agent.memory_import.parse.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/listorg+workspacelist_memoriesv1/agent.memory.list.ts
GET/v1/:org_slug/:workspace_slug/agent/memory/policyorg+workspaceget_memory_policyv1/agent.memory_policy.read.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/policyorg+workspaceupdate_memory_policyv1/agent.memory_policy.write.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/promoteorg+workspacepromote_memoryv1/agent.memory.promote.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/recallorg+workspacerecall_memoryv1/agent.memory.recall.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/rememberorg+workspacesave_memoryv1/agent.memory.remember.ts
POST/v1/:org_slug/:workspace_slug/agent/memory/updateorg+workspaceupdate_memoryv1/agent.memory.update.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
GET/v1/:org_slug/:workspace_slug/agent/trace/:executionIdorg+workspaceget_execution_tracev1/agent.trace.get.ts
POST/v1/:org_slug/:workspace_slug/agentsorg+workspacelist_agentsv1/agent.list.ts
POST/v1/:org_slug/:workspace_slug/agents/credential/rotateorg+workspacerotate_agent_credentialv1/agent.credential.rotate.ts
POST/v1/:org_slug/:workspace_slug/agents/definition/commitorg+workspacecommit_agent_definitionv1/agent.definition.commit.ts
POST/v1/:org_slug/:workspace_slug/agents/getorg+workspaceget_agentv1/agent.get.ts
POST/v1/:org_slug/:workspace_slug/agents/proposeorg+workspacepropose_agentv1/agent.propose.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
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/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/engineorg+workspaceget_assistant_enginev1/assistant.engine.get.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
PUT/v1/:org_slug/:workspace_slug/billing/auto-topuporg+workspaceset_auto_topupv1/billing.auto_topup.set.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
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
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/messages/executionorg+workspaceget_message_executionv1/chat.message.execution.ts
POST/v1/:org_slug/:workspace_slug/chat/streamorg+workspaceask_assistantv1/chat.stream.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/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+workspaceupdate_connectionv1/connection.ts
POST/v1/:org_slug/:workspace_slug/connections/:id/suggest-mappingsorg+workspacesuggest_connection_mappingsv1/connection.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/proposalsorg+workspacelist_proposalsv1/context.proposal.list.ts
POST/v1/:org_slug/:workspace_slug/context/proposals/createorg+workspacepropose_recordv1/context.proposal.create.ts
POST/v1/:org_slug/:workspace_slug/context/proposals/dismissorg+workspacedismiss_proposalv1/context.proposal.dismiss.ts
POST/v1/:org_slug/:workspace_slug/context/prs/getorg+workspaceget_context_prv1/context.pr.get.ts
POST/v1/:org_slug/:workspace_slug/context/prs/mergeorg+workspacemerge_context_prv1/context.pr.merge.ts
POST/v1/:org_slug/:workspace_slug/context/prs/openorg+workspaceopen_context_prv1/context.pr.open.ts
GET/v1/:org_slug/:workspace_slug/context/record/listorg+workspacelist_context_recordsv1/context.record.list.ts
POST/v1/:org_slug/:workspace_slug/context/record/promoteorg+workspacepromote_context_recordv1/context.record.promote.ts
POST/v1/:org_slug/:workspace_slug/context/record/publishorg+workspacepublish_context_recordv1/context.record.publish.ts
POST/v1/:org_slug/:workspace_slug/context/record/reviseorg+workspacerevise_context_recordv1/context.record.revise.ts
POST/v1/:org_slug/:workspace_slug/context/recordsorg+workspacelist_recordsv1/context.records.list.ts
POST/v1/:org_slug/:workspace_slug/context/records/appendorg+workspaceappend_recordv1/context.records.append.ts
POST/v1/:org_slug/:workspace_slug/context/records/getorg+workspaceget_recordv1/context.records.get.ts
POST/v1/:org_slug/:workspace_slug/context/steering/freshnessorg+workspaceget_steering_freshnessv1/context.steering.freshness.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/: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/deleteorg+workspacedelete_conversationv1/conversation.delete.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/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
PUT/v1/:org_slug/:workspace_slug/evidence/disclosure-grainorg+workspaceset_disclosure_grainv1/evidence.disclosure_grain.set.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/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/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
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/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
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/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
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
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/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
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/mainorg+workspacebind_main_repositoryv1/repository.main.bind.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
GET/v1/:org_slug/:workspace_slug/router/statsorg+workspacelist_routing_statsv1/router.stats.list.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/bisectorg+workspacebisect_runsv1/run.bisect.ts
POST/v1/:org_slug/:workspace_slug/runs/chainorg+workspaceget_run_chainv1/run.chain.get.ts
POST/v1/:org_slug/:workspace_slug/runs/costorg+workspaceget_run_costv1/run.cost.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/forkorg+workspacefork_runv1/run.fork.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/outputsorg+workspaceget_run_outputsv1/run.outputs.get.ts
POST/v1/:org_slug/:workspace_slug/runs/prooforg+workspaceget_run_proofv1/run.proof.get.ts
POST/v1/:org_slug/:workspace_slug/runs/recentorg+workspacelist_recent_runsv1/run.recent.list.ts
POST/v1/:org_slug/:workspace_slug/runs/summarizeorg+workspacesummarize_runv1/run.summarize.ts
POST/v1/:org_slug/:workspace_slug/runs/tokenorg+workspacecreate_run_tokenv1/run.token.issue.ts
POST/v1/:org_slug/:workspace_slug/runs/transcriptorg+workspaceget_run_transcriptv1/run.transcript.get.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/proposeorg+workspacepropose_skillv1/skill.propose.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/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/findingsorg+workspacelist_findingsv1/finding.list.ts
POST/v1/:org_slug/:workspace_slug/spend/findings/dismissorg+workspacedismiss_findingv1/finding.dismiss.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/statement/exportorg+workspaceexport_statementv1/spend.statement.export.ts
POST/v1/:org_slug/:workspace_slug/spend/wasteorg+workspacelist_wastev1/spend.waste.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/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/searchorg+workspacesearch_toolsv1/tools.search.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
GET/v1/:org_slug/:workspace_slug/workspace/budget-policyorg+workspaceget_budget_policyv1/workspace.budget_policy.read.ts
PATCH/v1/:org_slug/:workspace_slug/workspace/budget-policyorg+workspaceupdate_budget_policyv1/workspace.budget_policy.write.ts
POST/v1/:org_slug/:workspace_slug/workspace/invite/sendorg+workspacesend_workspace_invitev1/workspace.invite.send.ts
GET/v1/:org_slug/:workspace_slug/workspace/member/listorg+workspacelist_membersv1/workspace.member.list.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/healthpublichealth.ts
POST/v1/auth/cli/tokenpublicv1/auth.cli.token.ts
POST/v1/cms/book/redeempublicv1/cms.ts
POST/v1/cms/book/resendpublicv1/cms.ts
POST/v1/cms/leadspublicv1/cms.ts
GET/v1/run-exports/downloadpublicv1/run.export.download.ts
POST/v1/tacho/enrollpublicenroll_hostv1/tacho.host.enroll.ts
POST/v1/telemetry/usagepublicv1/telemetry.usage.ts
POST/webhooks/:connectorId/:connectionIdpublicv1/webhook.ts
POST/webhooks/github/apppublicv1/github-webhook.ts
POST/webhooks/stripepublicstripe.ts
GET/v1/telemetry/stella/apiKeyIdstella telemetryingest_stella_operational_telemetryv1/telemetry.stella.ingest.ts
POST/v1/telemetry/stella/operationalstella telemetryingest_stella_operational_telemetryv1/telemetry.stella.ingest.ts
GET/v1/tacho/apiKeyIdtacho hostfetch_commandsv1/tacho.command.fetch.ts
POST/v1/tacho/bundletacho hostget_tacho_bundlev1/tacho.bundle.get.ts
POST/v1/tacho/commandstacho hostfetch_commandsv1/tacho.command.fetch.ts
POST/v1/tacho/eventstacho hostingest_tacho_eventsv1/tacho.events.ingest.ts
GET/v1/auth/whoamiuserv1/auth.whoami.ts
GET/v1/auth/whoamiapiKeyIduserv1/auth.whoami.ts
GET/v1/auth/whoamiorgIduserv1/auth.whoami.ts
GET/v1/auth/whoamiuserIduserv1/auth.whoami.ts
GET/v1/auth/whoamiworkspaceIduserv1/auth.whoami.ts
POST/v1/onboarding/stateuserget_onboarding_statev1/onboarding.state.get.ts
POST/v1/organizationsusercreate_orgv1/org.create.ts
GET/v1/user/budget/readuserget_user_budgetv1/budget.policy.read.ts
PATCH/v1/user/budget/writeuserupdate_user_budgetv1/budget.policy.write.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

355 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 lookupregisterHandlerpackages/handlers/src/register.ts<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.
  • 303 of 355 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; duplicates with a different signature warn instead of throwing.

Gate order inside invoke()

A refused call never reaches a handler, and both outcomes leave a security event. Only the outermost invoke() accrues a governed action.LookupgetCapability(name)unknown_capability → denyForged binding?caller-supplied authzauthz_deniedSurface allowed?cap.surfacessurface_deniedInput valid?cap.input.safeParseinvalid_inputEnter tenant scoperunInTenantScopeIAMcheckIAM → allow | deny | pending_approvalaccess_requests rowBilling admissionassertCanStartTurnInsufficientCredits · SuspendedBudget admissionassertWithinSpendBudgetbudget_exceededEntitlementplugin-claimed contracts onlyDecision rules_decisionRulesGateHandlerresolveHandler → runWithPrincipalOutput valid?cap.output.safeParseinvalid_outputAuditemitSecurityEvent(allow) + traceAccrue actionusageRecorder (top-level only)
A refused call never reaches a handler, and both outcomes leave a security event. Only the outermost invoke() accrues a governed action.
  • The billing, budget and usage slots are empty until bootstrapBillingRuntime() fills them once per surface; a surface that forgets to bootstrap runs ungated, which is why the gate is set at boot, not per request.
  • An IAM throw fails closed regardless of IAM_ENFORCEMENT_ENABLED. An agent-run invocation whose pinned authorization decision is null also fails closed.
  • Every failure path exits through the catch block before the accrual step, which is how ADR-052's rule that denials are free is enforced structurally rather than by policy.
Source refs (7, verified at build)
  • packages/oxagen/src/kernel.ts#_invokeCoreInner
  • packages/oxagen/src/kernel.ts#setBillingAdmissionGate
  • packages/oxagen/src/kernel.ts#setUsageRecorder
  • packages/iam/src/check-iam.ts#checkIAM
  • packages/billing/src/metering.ts#assertCanStartTurn
  • packages/billing/src/spend-budget-gate.ts#assertWithinSpendBudget
  • packages/billing/src/bootstrap.ts#bootstrapBillingRuntime

checkIAM decision order

Agent principals are checked against their pinned ceiling at every plan tier; the tier fast-path applies to humans only and fails closed when the tier cannot be established.Principal kindarg → ctx.agentRun → 'human'Agent branchpinned ceiling ∩ live authority, deny-winsiam.authorization_decisions rowTier fast-pathestablished && !canAccessACL(tier)audit rule: tier_gatefetchAuthzgrants · roles · policies (withTenantDb)resolve()pure evaluator, @oxagen/oxagen/iamemitAuditClickHouse audit_events, hash-chained
Agent principals are checked against their pinned ceiling at every plan tier; the tier fast-path applies to humans only and fails closed when the tier cannot be established.
  • The audit row stores payload_hash = sha256(raw input), never the input, and chain_hash = sha256(prev | event_id | capability) per (org, capability) chain. Verification is at range level: two concurrent writes can read the same predecessor.
  • The audit write is fire-and-forget with three retries; a failed emission is itself captured to the error_events table.
Source refs (4, verified at build)
  • packages/iam/src/check-iam.ts#checkIAM
  • packages/iam/src/emit-audit.ts#AuditEventRow
  • 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
agent60446035316
api_key434·44
approval_rule535·55
asset111·11
assistant2·2·20
audit212122
auth1····1
billing15111421415
capability222·22
chat2·2·22
command222··2
configuration2·2·22
connection101010·1010
context14614·814
control3·3·23
conversation989·99
cost4·4344
credential1·1·11
environment666·66
evidence1·1··1
graph665356
iam444·44
integration777677
kill_switch212·22
mandate666·66
model111·11
notification222·22
onboarding3·3·23
ontology222222
org18918·1816
plugin191819·1919
privacy323·33
reference221·11
repo999499
repository11·116911
router4·4444
run16·161916
schema231022212123
secret868·88
shell1·1·11
skill6·5·46
spend13113·1313
system111·11
tacho122122412
telemetry313·12
tool515·45
tools222·20
user747·57
workspace13111311313

Capability catalog

355
NameDomainModeSurfacesLayersHandler
assign_agent_roleagentsyncagent api mcpapi · mcp · unit · docs · app@oxagen/agent or inline
attach_memory_evidenceagentsyncagent api mcpschema · api · mcp · docs@oxagen/agent or inline
bind_agent_environmentagentsyncagent api mcpapi · mcp · unit · docsagent.environment.bind.ts
cite_memoryagentsyncagent api mcpschema · api · mcp · docs@oxagen/agent or inline
commit_agent_definitionagentsyncapischema · api · unit · docs · appagent.definition.commit.ts
commit_memory_importagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
create_agent_defagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
debug_executionagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
delete_agent_defagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
delete_mcp_serveragentsyncapi mcpschema · api · mcp · unit · docs@oxagen/agent or inline
delete_memoryagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
demote_memoryagentsyncagent api mcpschema · api · mcp · docs@oxagen/agent or inline
deploy_agentagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
dismiss_memory_promotionagentsyncagent api mcpschema · api · mcp · docs@oxagen/agent or inline
get_agentagentsyncapi cli mcpschema · api · mcp · unit · docs · app@oxagen/agent or inline
get_agent_defagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
get_agent_roleagentsyncagent api mcpapi · mcp · unit · docs@oxagen/agent or inline
get_agent_toolbeltagentsyncapi mcpschema · api · mcp · unit · docs · appagent.toolbelt.get.ts
get_citation_statsagentsyncagent api mcpschema · api · mcp · docs@oxagen/agent or inline
get_execution_traceagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
get_memory_policyagentsyncagent api mcpschema · api · mcp · unit · docsagent.memory_policy.read.ts
list_agent_defsagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
list_agent_environmentsagentsyncagent api mcpapi · mcp · unit · docsagent.environment.list.ts
list_agent_rolesagentsyncagent api mcpapi · mcp · unit · docs@oxagen/agent or inline
list_agent_toolsagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
list_agentsagentsyncapi mcpschema · api · mcp · unit · docs · app@oxagen/agent or inline
list_approvalsagentsyncapi mcpschema · api · mcp · unit · docs · app@oxagen/agent or inline
list_executionsagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
list_mcp_consentsagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
list_mcp_serversagentsyncagent api mcpschema · api · mcp · unit · docs · app@oxagen/agent or inline
list_memoriesagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
list_memory_citationsagentsyncagent api mcpschema · api · mcp · docs@oxagen/agent or inline
list_memory_promotionsagentsyncagent api mcpschema · api · mcp · docs@oxagen/agent or inline
list_resolved_approvalsagentsyncapi cli mcpschema · api · mcp · unit · docs · app@oxagen/agent or inline
parse_memory_importagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
promote_memoryagentsyncagent api mcpschema · api · mcp · docs@oxagen/agent or inline
propose_agentagentsyncapischema · api · unit · docs · appagent.propose.ts
publish_agent_defagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
recall_memoryagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
record_executionagentsyncapi mcpschema · api · mcp · unit · docsagent.execution.record.ts
register_agentagentsyncapi clischema · api · unit · docs · appagent.register.ts
register_mcp_serveragentsyncapi mcpschema · api · mcp · unit · docs · app@oxagen/agent or inline
resolve_approvalagentsyncagent api mcpschema · api · mcp · unit · docs · app@oxagen/agent or inline
resolve_mcp_consentagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
resolve_mcp_serversagentsyncapischema · api@oxagen/agent or inline
retire_agentagentsyncapischema · api · unit · docs · appagent.retire.ts
revise_agent_defagentsyncagent api mcpschema · api · mcp · docsagent.definition.revise.ts
revoke_agent_roleagentsyncagent api mcpapi · mcp · unit · docs · app@oxagen/agent or inline
rotate_agent_credentialagentsyncapischema · api · unit · docs · appagent.credential.rotate.ts
save_memoryagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
set_mcp_enabledagentsyncapi mcpschema · api · mcp · unit · docs@oxagen/agent or inline
suggest_agent_defagentsyncagent api mcpschema · api · mcp · unit · docsagent.definition.suggest.ts
suggest_promotion_rationalesagentsyncagent api mcpschema · api · mcp · docs@oxagen/agent or inline
summarize_agent_defagentsyncagent api mcpschema · api · mcp · docsagent.definition.summarize.ts
suspend_agentagentsyncapischema · api · unit · docs · appagent.suspend.ts
unbind_agent_environmentagentsyncagent api mcpapi · mcp · unit · docsagent.environment.unbind.ts
update_agent_defagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
update_memoryagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
update_memory_policyagentsyncagent api mcpschema · api · mcp · unit · docsagent.memory_policy.write.ts
write_memoryagentsyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
create_api_keyapi_keysyncagent api mcpapi · docs · mcp · unit · appapi.key.create.ts
list_api_keysapi_keysyncapi mcpapi · docs · mcp · unit · appapi.key.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_rulesyncapi mcpschema · api · mcp · unit · docs · appapproval.auto_eligibility.get.ts
list_approval_rulesapproval_rulesyncapi 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_assetassetsyncagent api mcpschema · api · mcp · unit · docsasset.upload.ts
ask_assistantassistantasyncapi mcpschema · api · mcp · unit · docs · app@oxagen/agent or inline
get_assistant_engineassistantsyncapi mcpschema · api · mcp · unit · docs@oxagen/agent or inline
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
get_contract_ratebillingsyncagent api mcpschema · api · mcp · unit · docs · appbilling.contract_rate.get.ts
get_evidence_retentionbillingsyncagent api mcpschema · api · mcp · unit · docsbilling.evidence_retention.ts
get_gau_bucketbillingsyncapi 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_invoicesbillingsyncapi mcpschema · api · mcp · unit · docs · appbilling.invoice.list.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
set_auto_topupbillingsyncapi mcpschema · api · mcp · unit · docs · appbilling.auto_topup.set.ts
set_org_billing_termsbillingsyncschema · unit · docsbilling.org_terms.set.ts
set_spend_budgetbillingsyncagent api cli mcpschema · api · docs · mcp · unit · appbilling.budget.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
get_message_executionchatsyncapi mcpschema · api · mcp · unit · docschat.message.execution.ts
send_messagechatasyncapi mcpschema · api · mcp · unit · docschat.message.send.ts
search_command_menucommandsyncagent apischema · api · unit · docscommand.menu.search.ts
suggest_commandscommandsyncagent apischema · api · unit · docscommand.menu.suggest.ts
get_clone_draftconfigurationsyncapi mcpschema · api · mcp · docs · appconfiguration.clone.get.ts
propose_configuration_cloneconfigurationsyncapi mcpschema · api · mcp · docs · appconfiguration.clone.propose.ts
create_connectionconnectionsyncagent api mcpschema · api · mcp · unit · docs · appconnection.create.ts
delete_connectionconnectionasyncagent api mcpschema · api · mcp · unit · docsconnection.delete.ts
get_connectionconnectionsyncagent api mcpschema · api · mcp · unit · docs · appconnection.get.ts
get_connection_mappingsconnectionsyncagent api 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
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 · docscontext.records.append.ts
dismiss_proposalcontextsyncapischema · api · unit · docs · appcontext.proposal.dismiss.ts
get_context_prcontextsyncapi mcpschema · api · mcp · unit · docs · appcontext.pr.get.ts
get_recordcontextsyncagent api mcpschema · api · mcp · unit · docs · appcontext.records.get.ts
get_steering_freshnesscontextsyncagent api mcpschema · api · mcpcontext.steering.freshness.ts
list_context_recordscontextsyncagent api mcpschema · api · docs · mcp · unitcontext.record.list.ts
list_proposalscontextsyncapi mcpschema · api · mcp · unit · docs · appcontext.proposal.list.ts
list_recordscontextsyncagent api mcpschema · api · mcp · unit · docs · appcontext.records.list.ts
merge_context_prcontextsyncapischema · api · unit · docs · appcontext.pr.merge.ts
open_context_prcontextsyncapischema · api · unit · docs · appcontext.pr.open.ts
promote_context_recordcontextsyncapischema · api · docs · unitcontext.record.promote.ts
propose_recordcontextsyncagent api mcpschema · api · mcp · unit · docs · appcontext.proposal.create.ts
publish_context_recordcontextsyncapischema · api · docs · unitcontext.record.publish.ts
revise_context_recordcontextsyncapischema · api · unit · docs · appcontext.record.revise.ts
dispatch_commandcontrolsyncapi mcpschema · api · mcp · unit · docs · apptacho.command.dispatch.ts
fetch_commandscontrolsyncapischema · api · unit · docstacho.command.fetch.ts
list_commandscontrolsyncapi mcpschema · api · mcp · unit · docstacho.command.list.ts
add_conversation_attachmentconversationsyncagent api mcpschema · api · mcp · unit · docsconversation.attachment.add.ts
archive_conversationconversationsyncagent api mcpschema · api · mcp · unit · docsconversation.archive.ts
delete_conversationconversationsyncagent api mcpschema · api · mcp · unit · docsconversation.delete.ts
export_conversationconversationsyncagent api mcpschema · api · mcp · unit · docsconversation.export.ts
list_conversation_filesconversationsyncagent api mcpschema · api · mcp · unit · docsconversation.files.list.ts
list_conversationsconversationsyncagent api mcpschema · api · mcp · unit · docsconversation.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_entriescostsyncapi cli mcpschema · api · mcp · app · unit · docscost.price_entry.list.ts
list_unpriced_modelscostsyncapi mcpschema · api · mcp · app · unit · docscost.unpriced_model.list.ts
remove_price_entrycostsyncapi cli mcpschema · api · mcp · app · unit · docscost.price_entry.remove.ts
set_price_entrycostsyncapi cli mcpschema · api · mcp · app · unit · docscost.price_entry.set.ts
list_credential_grantscredentialsyncapi mcpschema · api · mcp · unit · docs · appcredential.grant.list.ts
create_environmentenvironmentsyncagent api mcpapi · mcp · unit · docsenvironment.create.ts
delete_environmentenvironmentsyncagent api mcpapi · mcp · unit · docsenvironment.delete.ts
get_environmentenvironmentsyncagent api mcpapi · mcp · unit · docsenvironment.get.ts
list_environmentsenvironmentsyncagent api mcpapi · mcp · unit · docsenvironment.list.ts
set_default_environmentenvironmentsyncagent api mcpapi · mcp · unit · docsenvironment.set_default.ts
update_environmentenvironmentsyncagent api mcpapi · mcp · unit · docsenvironment.update.ts
set_disclosure_grainevidencesyncapischema · api · unit · docsevidence.disclosure_grain.set.ts
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
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
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_switchsyncapi 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 · unitnotification.list.ts
mark_notificationnotificationsyncagent api mcpapi · docs · mcp · unitnotification.mark.ts
advance_onboardingonboardingsyncapischema · api · unit · docs · apponboarding.advance.ts
get_first_frameonboardingsyncapi mcpschema · api · mcp · unit · docs · apponboarding.first_frame.get.ts
get_onboarding_stateonboardingsyncapi 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_org_memberorgsyncagent api mcpschema · api · mcp · unit · docsorg.member.add.ts
change_member_roleorgsyncagent api mcpapi · docs · mcp · unit · apporg.member_role.change.ts
create_orgorgsyncagent api mcpschema · api · mcp · unit · docs · apporg.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
get_data_planeorgsyncapi mcpschema · api · mcp · unit · docsorg.data_plane.get.ts
get_model_credentialorgsyncapi mcpschema · api · mcp · unit · docs · apporg.model_credential.get.ts
get_org_settingsorgsyncagent api mcpschema · api · mcp · unit · docsorg.settings.read.ts
list_membersorgsyncapi mcpschema · api · mcp · unit · docs · appworkspace.member.list.ts
list_orgsorgsyncagent api mcpschema · api · mcp · unit · docs · apporg.list.ts
remove_org_memberorgsyncagent api mcpapi · docs · mcp · unit · apporg.member.remove.ts
resend_member_inviteorgsyncapi mcpschema · api · mcp · docs · app@oxagen/agent or inline
revoke_member_inviteorgsyncapi mcpschema · api · mcp · docs · app@oxagen/agent or inline
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
update_org_settingsorgsyncagent api mcpschema · api · mcp · unit · docsorg.settings.write.ts
verify_model_credentialorgsyncapi mcpschema · api · mcp · unit · docs · apporg.model_credential.verify.ts
add_plugin_registrypluginsyncagent api mcpapi · docs · mcp · unitplugin.registry.add.ts
browse_plugin_catalogpluginsyncagent api mcpapi · docs · mcp · unitplugin.catalog.browse.ts
get_auth_alertspluginsyncagent api mcpapi · docs · mcp · unitplugin.settings.get_auth_alerts.ts
get_catalog_pluginpluginsyncagent api mcpapi · docs · mcp · unitplugin.catalog.get.ts
get_plugin_schemapluginsyncagent api mcpschema · api · mcp · unit · docsplugin.schema.get.ts
install_pluginpluginsyncagent api mcpapi · docs · mcp · unitplugin.org.install.ts
install_plugins_bulkpluginsyncagent api mcpapi · docs · mcp · unitplugin.org.install_bulk.ts
list_plugin_registriespluginsyncagent api mcpapi · docs · mcp · unitplugin.registry.list.ts
list_plugin_versionspluginsyncagent api mcpschema · api · mcp · unit · docsplugin.version.list.ts
list_pluginspluginsyncagent api mcpapi · docs · mcp · unitplugin.org.list.ts
reauth_plugin_credentialpluginsyncagent api mcpapi · docs · mcp · unitplugin.credential.reauth.ts
remove_plugin_registrypluginsyncagent api mcpapi · docs · mcp · unitplugin.registry.remove.ts
revoke_plugin_credentialpluginsyncagent api mcpapi · docs · mcp · unitplugin.credential.revoke.ts
set_auth_alertspluginsyncagent api mcpapi · docs · mcp · unitplugin.settings.set_auth_alerts.ts
set_plugin_enabledpluginsyncagent api mcpapi · docs · mcp · unitplugin.set_enabled.ts
set_plugin_secretpluginsyncagent api mcpapi · docs · mcp · unitplugin.credential.set_secret.ts
sync_plugin_catalogpluginsyncapi mcpapi · mcp · unit · docsplugin.catalog.sync.handler.ts
uninstall_pluginpluginsyncagent api mcpapi · docs · mcp · unitplugin.org.uninstall.ts
validate_plugin_schemapluginsyncagent api 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_statusprivacysyncapi mcpschema · api · mcp · unit · docs · appprivacy.data.export.status.ts
cite_referencereferencesyncagentschema · docs@oxagen/agent or inline
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_branchesreposyncagent api 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
bind_main_repositoryrepositorysyncapischema · api · unit · docs · apprepository.main.bind.ts
get_main_repositoryrepositorysyncapi mcpschema · api · mcp · unit · docs · apprepository.main.get.ts
get_repository_treerepositorysyncapi cli mcpschema · api · mcp · docs · apprepository.tree.get.ts
link_repositoryrepositorysyncapi cli mcpschema · api · mcp · docs · apprepository.link.ts
list_github_installationsrepositorysyncapi mcpschema · api · mcp · unit · docs · apprepository.installation.candidates.ts
list_installation_repositoriesrepositorysyncapi mcpschema · api · mcp · unit · docs · apprepository.installation.list.ts
list_repositoriesrepositorysyncapi cli mcpschema · api · mcp · docs · apprepository.list.ts
open_init_prrepositorysyncapi cli mcpschema · api · mcp · docs · apprepository.init_pr.open.ts
set_production_branchrepositorysyncapi cli mcpschema · api · mcp · docs · apprepository.production_branch.set.ts
unlink_repositoryrepositorysyncapi cli mcpschema · api · mcp · docs · apprepository.unlink.ts
get_routing_policyroutersyncapi cli mcpschema · api · mcp · docsrouter.policy.get.ts
list_routing_statsroutersyncapi cli mcpschema · api · mcp · docsrouter.stats.list.ts
preview_routing_decisionroutersyncapi cli mcpschema · api · mcp · docsrouter.decision.preview.ts
set_routing_policyroutersyncapi cli mcpschema · api · mcp · docsrouter.policy.set.ts
bisect_runsrunsyncapi mcpschema · api · mcp · unit · docs · apprun.bisect.ts
create_run_tokenrunsyncapischema · api · docsrun.token.issue.ts
export_runrunasyncapischema · api · unit · docs · apprun.export.ts
fork_runrunsyncapischema · api · unit · docs · apprun.fork.ts
get_runrunsyncapi mcpschema · api · mcp · unit · docs · apprun.get.ts
get_run_chainrunsyncapi mcpschema · api · mcp · unit · docs · apprun.chain.get.ts
get_run_costrunsyncapi mcpschema · api · mcp · unit · docs · apprun.cost.ts
get_run_exportrunsyncapi cli mcpschema · api · mcp · cli · unit · docs · apprun.export.get.ts
get_run_frame_bodyrunsyncapi mcpschema · api · mcp · unit · docs · apprun.frame_body.get.ts
get_run_outputsrunsyncapischema · api · app · unit · docsrun.outputs.get.ts
get_run_proofrunsyncapischema · api · unit · docsrun.proof.get.ts
get_run_transcriptrunsyncapi mcpschema · api · mcp · unit · docs · apprun.transcript.get.ts
ingest_run_framesrunsyncapischema · api · docsrun.frames.ingest.ts
list_recent_runsrunsyncapi mcpschema · api · mcp · unit · docsrun.recent.list.ts
list_runsrunsyncapi mcpschema · api · mcp · unit · docs · apprun.list.ts
summarize_runrunasyncapischema · api · unit · docs · apprun.summarize.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_secretssecretsyncagent api 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_countsshellsyncapi mcpschema · api · mcp · unit · docsshell.nav_counts.get.ts
get_skill_configskillsyncapi mcpschema · api · mcp · docs · appskill.config.get.ts
list_skillsskillsyncapi mcpschema · api · mcp · unit · docs · appskill.list.ts
preview_skill_searchskillsyncapischema · api · docs · appskill.search.preview.ts
propose_skillskillsyncapischema · api · unit · docs · appskill.propose.ts
summarize_skill_searchskillsyncmcpschema · mcp · docsskill.search.summarize.ts
update_skill_configskillsyncapi mcpschema · api · mcp · docs · appskill.config.update.ts
create_cost_centerspendsyncapi mcpschema · api · mcp · unit · docs · appcost_center.create.ts
delete_cost_centerspendsyncapi mcpschema · api · mcp · unit · docs · appcost_center.delete.ts
dismiss_findingspendsyncapi mcpschema · api · mcp · unit · docs · appfinding.dismiss.ts
export_cost_center_statementspendsyncapi mcpschema · api · mcp · unit · docs · appspend.cost_center_statement.export.ts
export_statementspendsyncapi mcpschema · api · mcp · unit · docs · appspend.statement.export.ts
get_finding_evidencespendsyncapi mcpschema · api · mcp · unit · docs · appfinding.evidence.get.ts
get_spendspendsyncapi mcpschema · api · mcp · unit · docs · appspend.get.ts
get_spend_drillspendsyncapi mcpschema · api · mcp · unit · docs · appspend.drill.ts
list_cost_centersspendsyncapi mcpschema · api · mcp · unit · docs · appcost_center.list.ts
list_findingsspendsyncapi mcpschema · api · mcp · unit · docs · appfinding.list.ts
list_wastespendsyncapi mcpschema · api · mcp · unit · docs · appspend.waste.ts
record_finding_fixspendsyncagent api mcpschema · api · mcp · unit · docs · appfinding.fix.record.ts
set_cost_centerspendsyncapi mcpschema · api · mcp · unit · docs · appcost_center.set.ts
get_install_instructionssystemsyncagent api mcpschema · api · mcp · unit · docssystem.install.instructions.ts
create_enrollment_tokentachosyncapi clischema · api · unit · docs · apptacho.enrollment_token.create.ts
create_tacho_enrollmenttachosyncapischema · api · unit · docstacho.enrollment.create.ts
enroll_hosttachosyncapi clischema · api · unit · docstacho.host.enroll.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
list_incidentstachosyncapi mcpschema · api · mcp · unit · docs · apptacho.incident.list.ts
list_tacho_hoststachosyncapi mcpschema · api · mcp · unit · docstacho.host.list.ts
list_tacho_sessionstachosyncapischema · api · unit · docstacho.session.list.ts
revoke_tacho_enrollmenttachosyncapischema · api · 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 · docs@oxagen/agent or inline
import_toolstoolsyncapi mcpschema · api · mcp · unit · docs · apptool.import.ts
list_tool_declarationstoolsyncagent api mcpschema · api · docs · mcp · unittool.declaration.list.ts
list_tool_versionstoolsyncapi mcpschema · api · mcp · unit · docs · apptool.version.list.ts
publish_tool_declarationtoolsyncapischema · api · docs · unittool.declaration.publish.ts
set_tool_classificationtoolsyncapi mcpschema · api · mcp · unit · docs · apptool.classification.set.ts
load_toolstoolssyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
search_toolstoolssyncagent api mcpschema · api · mcp · unit · docs@oxagen/agent or inline
get_user_budgetusersyncagent api mcpschema · api · docs · mcp · unitbudget.policy.read.ts
get_user_preferencesusersyncagent api mcpschema · api · docs · mcp · unit · appuser.preferences.read.ts
get_workspace_user_preferencesusersyncagent api mcpschema · api · docs · mcpuser.workspace_preferences.read.ts
set_preferencesusersyncapi mcpschema · api · mcp · unit · docs · appuser.preferences.set.ts
update_profileusersyncapischema · api · unit · docs · appuser.profile.update.ts
update_user_budgetusersyncagent api mcpschema · api · docs · mcp · unitbudget.policy.write.ts
update_workspace_user_preferencesusersyncapischema · api · docsuser.workspace_preferences.write.ts
archive_workspaceworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.archive.ts
create_workspaceworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.create.ts
get_budget_policyworkspacesyncagent api mcpschema · api · docs · mcp · unitworkspace.budget_policy.read.ts
get_model_settingsworkspacesyncagent api mcpschema · api · docs · mcp · unitworkspace.model_settings.read.ts
get_prompt_settingsworkspacesyncagent api mcpschema · api · docs · mcp · unitprompt.settings.read.ts
get_workspace_settingsworkspacesyncagent api mcpschema · api · mcp · unit · docsworkspace.settings.read.ts
list_workspacesworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.list.ts
send_workspace_inviteworkspacesyncapi mcpschema · api · mcp · unit · docs · appworkspace.invite.send.ts
set_governance_modeworkspacesyncapi cli mcpschema · api · mcp · cli · unit · docs · appcontext.governance_mode.set.ts
update_budget_policyworkspacesyncagent api mcpschema · api · docs · mcp · unitworkspace.budget_policy.write.ts
update_model_settingsworkspacesyncagent api mcpschema · api · docs · mcp · unitworkspace.model_settings.write.ts
update_prompt_settingsworkspacesyncagent api mcpschema · api · docs · mcp · unitprompt.settings.write.ts
update_workspace_settingsworkspacesyncagent api mcpschema · api · mcp · unit · docs · appworkspace.settings.write.ts

The governed turn

The one agent loop in this repo is a governed, metered Q&A turn over the fleet record and the knowledge graph. It runs models on stella-serve and tools through invoke().

The governed turn (in-app agent)

Funding is decided before the credit gate, grounding arrives through a metered capability, the model runs on stella-serve over loopback with no fallback, and tools re-enter invoke().ClientSSE consumerchat.streamapps/api route@oxagen/billingrunGovernedTurn@oxagen/agentstella-serveloopback :3001 (prod) · :4300 (dev)@oxagen/aiprovider portkernel.invokePostgresAurora / local :5433Neo4jknowledge graphClickHousetelemetry1POST /v1/:org/:ws/chat/stream2resolveModelFundingSource(orgId)BYOK credential or platform key — decided first (ADR-053 §2)3evaluateTurnCreditGate({ fundedBy })402 on refusal4history (≤50 messages) · model defaults · budget policy5recallWorkspaceMemoryMessage → invoke('agent.memory.recall')limit 6 · 2.5 s timeout · fails open6vector recallgraph_node_embedding_index7materializeTools + prompt config → runGovernedTurn8assertEngineReady → driveTurnEngineUnavailableError, no fallback (ADR-053 §4)9onProviderRequest → streamAgentReply (1 step)budget guard may abort: 'turn budget exhausted'10token_usage rowpriced in full, billed zero unless platform-funded11onToolRequest → tool.execute → invoke(name, …, { surface: 'agent' })approval wait ≤5 min · MCP consent · mutating tools serialised12tool_invocations row13SSE parts + one usage eventcreateApiStreamTranslator owns the wire shapes14insert user + assistant messages · update conversation leafskipped when the stream errored15invoke('get_message_execution', { status: 'completed', steps })the SOC 2 execution record
Funding is decided before the credit gate, grounding arrives through a metered capability, the model runs on stella-serve over loopback with no fallback, and tools re-enter invoke().
  • There is no Inngest persistence hop: messages are written inline by the route inside withTenantDb. The chat.persist-stream function named in older codemaps has no sender and no file.
  • Role routing inside the provider port: verdict/judge calls use the tier above the worker, summarisation and reflection use fast, everything else the turn's worker model.
  • Context records (ADR-051) no longer enter the turn; that ADR is superseded by ADR-043. What rides as a volatile user message today is recalled workspace memory.
Source refs (11, verified at build)
  • apps/api/src/routes/v1/chat.stream.ts#chatStreamRoute
  • packages/agent/src/runtime/assistant-recall.ts#recallWorkspaceMemoryMessage
  • apps/api/src/routes/v1/chat-stream-translator.ts#createApiStreamTranslator
  • packages/ai/src/funding-source.ts#resolveModelFundingSource
  • 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/index.ts#streamAgentReply

Evidence ledger and wrapped agents

Execution evidence arrives from agents Oxagen does not run. The ledger stamps, seals and grades it; it never re-runs anything (ADR-043).

The evidence ledger's record chain

A run owns immutable attempts; each attempt owns a dense, digest-chained event log; a seal closes the attempt and mints exactly one finalization grant and one obligation in the same transaction.@OXAGEN/RUN-LEDGER IS THE ONLY WRITER OF THESE TABLES1 : n1 : n, append-onlyfold → sealsame txsame txconsumed oncerunStatusForTerminalagent_runsarun_… · RunSpecV2 · statusagent_run_attemptsarat_… · engine pinned · immutableagent_run_eventsattempt_seq dense from 1 · event_digestagent_run_attempt_sealsevent_stream_digest · one per attemptfinalization_grantsafg_… = submission_idfinalization_obligationsone shotingest_run_evidenceRunEvidenceEnvelopeV1 · JCS ≤ 1 MiB
A run owns immutable attempts; each attempt owns a dense, digest-chained event log; a seal closes the attempt and mints exactly one finalization grant and one obligation in the same transaction.
  • The stream digest folds only (attempt_seq, schema_version, event_type, payload_digest), deliberately excluding stage and observed time, so a finalizer can reproduce it from the log alone.
  • A repeated (attempt_id, attempt_seq) with a different digest is an integrity error: the insert has no ON CONFLICT, the transaction rolls back, and agent_run.event_sequence_conflict is emitted afterwards.
  • Grants carry no expiry column. The seal binding plus one successful consumption is the limiting authority; (org_id, submission_id) is the finalization idempotency key.
Source refs (6, verified at build)
  • packages/run-ledger/src/run-store.ts#ATTEMPT_TERMINAL_STATUSES
  • packages/run-ledger/src/run-store.ts#runStatusForTerminal
  • packages/run-ledger/src/finalization-grant.ts#FINALIZATION_GRANT_CAPABILITY
  • packages/run-ledger/src/event-payload-registry.ts#EVIDENCE_STAGES
  • packages/run-evidence/src/digest.ts#digestJcs
  • packages/run-evidence/src/limits.ts#MAX_ENVELOPE_JCS_BYTES

Run and attempt status

An attempt is either open or sealed; its terminal status maps onto the run, where denied and abandoned both read as failed because the denial itself is the evidence.first attempt opensattemptsealsealsealsealseal (0 events ok)runStatusForTerminalpendingrunningattempt: opensealed: cancelledsealed: completedsealed: abandonedsealed: deniedsealed: failedcancelledcompletedfailed
An attempt is either open or sealed; its terminal status maps onto the run, where denied and abandoned both read as failed because the denial itself is the evidence.
  • Run status values: pending · running · completed · failed · cancelled. Attempt terminal statuses: completed · failed · cancelled · denied · abandoned.
Source refs (2, verified at build)
  • packages/run-ledger/src/run-store.ts#ATTEMPT_TERMINAL_STATUSES
  • packages/run-ledger/src/run-store.ts#runStatusForTerminal

Wrapping: evidencing an agent Oxagen does not run

The hook is answered only after the event is chained and durably written on the host; the control plane recomputes every hash on ingest and records a broken chain rather than rejecting the batch.agent harnessClaude Code · Agent SDK · customtachodper-host collector/v1/tacho/*apps/api, API-key tieringest_tacho_events@oxagen/handlersClickHousetelemetryPostgresAurora / local :54331hook / OTLP eventPreToolUse · PostToolUse · SessionEnd …2normalize → tacho/1.0 · dense seq · hash chain · WAL appendanswered only after the WAL write3allow | deny | ask | deferfrom the cached signed policy bundle (ed25519)4POST /v1/tacho/events (tacho.batch.v1, ≤1 MiB)pre-auth limits: ip 6000 · credential 120 · post-auth 30/min5invoke(ingest_tacho_events)tenant from the key's tacho_host_v1 scope, never the body6recompute every hash · check chain against stored headbreak → chain_verified=false, recorded, never rejected7tacho_events rowsReplacingMergeTree(received_at) on (org, ws, session_uuid, seq)8upsert tacho_sessions · authorization_decisionsagent.* and iam.* tables9response: deny_generation · bundle etag · pending commandspause · resume · cancel · message · revoke · refresh_bundle · kill10SessionEnd → session sealed→ RunEvidenceEnvelopeV1 → ingest_run_evidence
The hook is answered only after the event is chained and durably written on the host; the control plane recomputes every hash on ingest and records a broken chain rather than rejecting the batch.
  • Two enforcement tiers: a denial inside a process Oxagen does not own grades as harness (client-attested); only calls through the governed gateway grade as gateway-enforced.
  • The ClickHouse DDL for tacho_events is generated from the envelope schema; a test fails when the SQL and the schema disagree.
Source refs (6, verified at build)
  • packages/tacho/src/envelope.ts#TACHO_ENVELOPE_VERSION
  • packages/tacho/src/wire.ts#TACHO_BATCH_SCHEMA
  • packages/handlers/src/tacho.events.ingest.ts
  • apps/api/src/routes/v1/tacho.events.ingest.ts
  • apps/api/src/middleware/distributed-rate-limit.ts#distributedRateLimiter
  • packages/telemetry/src/tacho-events-ddl.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.

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

Tokens are reported, never billed; the billable unit is the outermost invoke(). The debit to the organisation's month bucket is one upsert committed before anything else, so a failed auto top-up claim leaves the action counted and the request intact.kernel.invoketop-level, admitted, executedusage recorder@oxagen/billing bootstraprecordGovernedActionaction-metering.tsensureCurrentBucketgau-bucket.tsPostgresAurora / local :5433Stripewebhooks → grants1after output validationskipped when noBillingGate, nested, or unscoped2recordGovernedAction({ orgId, actions, capability, runId })the recorder resolves terms itself; a caller cannot claim cheaper ones3resolveGauEntitlement · readOrgBillingSettingscontracted terms, prepaid or invoice mode, periodFor → the org's month4ensureCurrentBucket({ period, terms, usedDelta: actions })5INSERT … ON CONFLICT DO UPDATE used_gau + actionsbilling.gau_buckets — lazy create and debit in one statement, row lock6remainingGau = included + purchased + carried − usednegative when overdrawn7claimAutoTopup (prepaid · remaining ≤ 0 · auto top-up on · card saved)billing.gau_settlements — at most one episode, committed before any provider call8invoice.paid → grantsstripe_events (append-only) · stripe_event_processing (processed_at)
Tokens are reported, never billed; the billable unit is the outermost invoke(). The debit to the organisation's month bucket is one upsert committed before anything else, so a failed auto top-up claim 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.
  • The only billing background job is billing.dunning-sweep (02:00 UTC): grace → suspended past the grace end, then a keyset sweep for low-balance notifications.
  • The stripe.sync-* events named in older inventories have no sender; the webhook route handles those events inline.
Source refs (12, verified at build)
  • 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#periodFor
  • packages/billing/src/gau-bucket.ts#ensureCurrentBucket
  • packages/billing/src/gau-bucket.ts#remainingGau
  • packages/billing/src/gau-settlements.ts#claimAutoTopup
  • packages/billing/src/webhooks.ts#processStripeEvent
  • packages/billing/src/grants.ts#grantPlanCreditsForInvoicePaid
  • apps/api/src/routes/stripe.ts
  • packages/inngest-functions/src/functions/billing.dunning-sweep.ts

assertCanStartTurn

The billing admission gate reads only, so a Stripe outage cannot make it fail open.Suspended?dunningState === 'suspended'BillingSuspendedErrorAuto-reloadif configured and balance is 0Balance > 0?effectiveBalanceInsufficientCreditsErrorAssistant capplatform-funded turns only (ADR-053 §3)AssistantSpendCapError
The billing admission gate reads only, so a Stripe outage cannot make it fail open.
  • The spend-budget gate runs after it with org and workspace ceilings from billing.spend_budgets; a breach surfaces as budget_exceeded.
Source refs (2, verified at build)
  • packages/billing/src/metering.ts#assertCanStartTurn
  • packages/billing/src/spend-budget-gate.ts#assertWithinSpendBudget

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 individually retried steps; the Postgres cursor is the source of truth and Neo4j is a lossy-okay index, so a failed graph write is retried rather than skipped (ADR-012).normalize-and-mapentity_type_mappings × delivery_configskipped · filtereddedup pass Aexact naturalKey MATCHdedup pass Bembedding similarity (stub today)upsert-nodeMERGE :EntityNode via scopedSessionembed1536-d vector on the noderecorded, not fatalschedule-evententity.created | entity.updated
Six individually retried steps; the Postgres cursor is the source of truth and Neo4j is a lossy-okay index, so a failed graph write is retried rather than skipped (ADR-012).
  • Concurrency is capped at 5 per organisation (concurrency: { key: event.data.orgId }).
  • 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 (6, verified at build)
  • packages/inngest-functions/src/functions/ingestion.pipeline.ts
  • packages/ingestion/src/dedup/resolve.ts
  • packages/ingestion/src/mutations/upsert-entity.ts
  • packages/ingestion/src/pipeline.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 tenant declares them in schema_registry.relationship_types; the only hard-coded fallback is RELATED_TO.

28
LabelDomainKey propertiesConstraints / indexesOrg-scoped
AgentagentpublicIdagent_public_id
AgentMemoryagentcitation_count, embedding, memory_class, memory_kind, orgId, promotion_dismissed_at, publicId, statusagent_memory_public_idyes
AgentVersionagentpublicIdagent_version_public_id
BackgroundTaskagentorgId, publicIdbackground_task_public_idyes
Citationagentid, orgIdcitation_idyes
ConversationchatpublicIdconversation_public_id
Demotiongraphid, orgIddemotion_idyes
Documentcontentembedding, orgId, publicIddocument_public_idyes
EntityNodeingestionconnectionId, embedding, entityType, naturalKey, workspaceIdentity_node_connection,entity_node_natural_key,entity_node_workspace
Evidenceagentid, orgIdevidence_idyes
ExecutionagentorgId, publicIdexecution_public_idyes
FanoutagentorgId, publicIdfanout_public_idyes
GraphNodegraphembedding, label, orgId, publicId, workspaceIdgraph_node_public_idyes
MessagechatconversationId, embedding, publicIdmessage_public_id
PlanagentpublicIdplan_public_id
PlaybookworkflowpublicIdplaybook_public_id
PlaybookVersionworkflowpublicIdplaybook_version_public_id
Promotionagentid, orgIdpromotion_idyes
SkillagentpublicIdskill_public_id
SkillVersionagentpublicIdskill_version_public_id
SourceConnectioningestionid, orgIdsource_connection_idyes
SubagentFanoutgraphorgId, publicIdsubagent_fanout_public_idyes
SubagentRungraphorgId, publicIdsubagent_run_public_idyes
TenantorgpublicIdtenant_public_id
ToolagentorgId, publicIdtool_public_idyes
ToolVersionagentpublicIdtool_version_public_id
UserauthpublicIduser_public_id
WorkspaceworkspacepublicIdworkspace_public_id

Vector indexes

All 1536-dimensional cosine. graph_node_embedding_index is the universal one because every tenant node also carries the GraphNode anchor label.

IndexLabelProperty
document_embedding_indexDocumentembedding
entity_node_embedding_indexEntityNodeembedding
graph_node_embedding_indexGraphNodeembedding
memory_embedding_indexAgentMemoryembedding
message_embedding_indexMessageembedding

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
postgres141Transactional state — users, orgs, permissions, billing, configs, durable application state.agent ai auth billing chat cms content cost environments evidence iam ingestion mcp notification org plugin privacy ratelimit schema_registry security skills tacho tools workspace
clickhouse11Append-only runtime events — execution events, logs, metrics, traces, token analytics, telemetry.agent billing eval telemetry
neo4j28Graph data — ontology/entity relationships, workflow lineage, agent memory, semantic retrieval.agent auth chat content graph ingestion org workflow workspace
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
agent19214·
ai1···
auth9·1·
billing182··
chat2·2·
cms3···
content1·14
cost6···
environments5···
eval·3··
evidence5···
graph··4·
iam9···
ingestion12·2·
mcp7···
notification1···
org8·1·
plugin1···
privacy2···
ratelimit1···
schema_registry7···
security3···
skills2···
tacho10···
telemetry·4··
tools2···
workflow··2·
workspace7·1·

Postgres schemas

Postgres schemas and the number of cross-schema references between them111414121513111111billing18 tablescost6 tablesiam9 tablessecurity3 tablesagent19 tablesai1 tablesskills2 tablescms3 tablescontent1 tablesenvironments5 tablesevidence5 tablesnotification1 tablesplugin1 tablesprivacy2 tablesratelimit1 tablesschema_registry7 tablestacho10 tableschat2 tablesmcp7 tablesworkspace7 tablestools2 tablesingestion12 tablesorg8 tablesauth9 tables
Twenty 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 (19 tables)

Tables in the agent schema with their referencescontext_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 standardagent_run_attempt_seals◆ iduuidorg_iduuidworkspace_iduuidrun_iduuid→ attempt_iduuidterminal_statustextreason_codetext?event_countintegerfinal_run_seqbigint?final_attempt_seqinteger?final_event_digesttext?event_stream_digesttextsealer_kindtextsealer_worker_idtextsealed_attimestamptzcreated_attimestamptzreplay_gradetext?completeness_gapsjsonbmerkle_roottext?archive_segment_reftext?model_callsinteger?tool_callsinteger?turnsinteger?enforcement_tiertext?RLS standardagent_run_attempts◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?→ run_iduuidattempt_numberintegerworker_idtextclaimed_attimestamptzengine_nametextengine_versiontextengine_build_digesttextresumed_from_attempt_iduuid?resumed_from_attempt_public_idcitext?forked_from_run_seqbigint?RLS standardagent_run_finalization_grants◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?run_iduuidattempt_iduuid→ seal_iduuidattempt_public_idcitextcapability_idtextevent_countintegerfinal_event_digesttext?event_stream_digesttextissued_attimestamptzRLS standardagent_runs◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?surfacetextstatustextspecjsonbresultjsonb?errortext?cancel_requestedbooleaningress_pausedbooleanstarted_attimestamptz?completed_attimestamptz?nametext?summarytext?summary_generated_attimestamptz?summary_modeltext?spec_versionintegerrun_kindtext?spec_digesttext?initiating_principal_iduuid?agent_principal_iduuid?agent_iduuid?agent_version_iduuid?agent_version_checksumtext?authorization_snapshot_iduuid?parent_run_iduuid?repository_binding_iduuid?repository_providertext?provider_repository_idtext?repository_connection_iduuid?configured_default_reftext?base_commit_shatext?base_tree_shatext?retention_policy_iduuid?retention_policy_digesttext?max_attemptsinteger?active_attempt_iduuid?attempt_countintegernext_run_seqbigintRLS 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?workspace_id ↗ workspace.workspacesRLS standardcontext_records◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuid→ workspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?slugcitexttitletextstatustextvalid_untiltimestamptz?→ active_version_iduuid?activated_by_user_iduuid?activated_attimestamptz?kindtext?forcetext?constraint_effecttext?sharing_scopetextstatementtext?commit_shatext?pathtext?published_attimestamptz?workspace_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_origintextclassificationjsonb?classified_risk_gradetext?classified_by_user_iduuid?classified_attimestamptz?classification_reasontext?consequence_tagstext[]measuresjsonbeffect_id_pathtext?RLS standardagent_execution_steps◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ execution_iduuidorg_iduuidworkspace_iduuidstep_numberintegerstep_typetextstatustextinput_payloadjsonboutput_payloadjsonb?failure_reasontext?latency_msbigint?input_tokensinteger?output_tokensinteger?started_attimestamptz?completed_attimestamptz?claimed_bytext?lease_expires_attimestamptz?attemptsintegerRLS standardagent_executions◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuid→ workspace_iduuid→ agent_iduuid?→ agent_version_iduuid?origin_typetextorigin_iduuidstatustextinput_payloadjsonboutput_payloadjsonb?failure_reasontext?started_attimestamptz?completed_attimestamptz?latency_msbigint?input_tokensinteger?output_tokensinteger?estimated_cost_usdnumeric(10, 6)?parent_execution_iduuid?statejsonbworkspace_id ↗ workspace.workspacesRLS standardagent_run_finalization_obligations◆ iduuidorg_iduuidworkspace_iduuid→ grant_iduuidsubmission_idcitextrun_iduuidattempt_iduuidseal_iduuidcreated_attimestamptztenantagent_versions◆ iduuid→ agent_iduuidversionintegeris_publishedbooleanchecksumtext?configjsonbcreated_by_iduuidcreated_attimestamptzdefinition_pathtext?definition_digesttext?definition_sourcetext?commit_shatext?branchtext?pull_request_urltext?tools◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuid→ workspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?nametextslugcitextdescriptiontext?sourcecitextenabledboolean→ active_version_iduuid?mcp_server_iduuid?activated_by_user_iduuid?activated_attimestamptz?workspace_id ↗ workspace.workspacesRLS standardagent_run_events◆ iduuidorg_iduuidworkspace_iduuid→ run_iduuidevent_record_versionsmallintseqinteger?typetext?payloadjsonb?created_attimestamptz→ attempt_iduuid?run_seqbigint?attempt_seqinteger?event_schema_versiontext?event_typetext?stagetext?payload_digesttext?event_digesttext?payload_inlinejsonb?encrypted_payload_reftext?observed_attimestamptz?body_reftext?body_digesttext?body_bytesinteger?redactionsjsonb?fidelitytextRLS standardagent_tool_calls◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ execution_step_iduuidorg_iduuidworkspace_iduuidtool_nametexttool_typetextrequest_payloadjsonbresponse_payloadjsonb?statustextlatency_msbigint?input_tokensinteger?output_tokensinteger?RLS standardapproval_requests◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidexecution_step_iduuid?tool_call_iduuid?→ message_iduuid?run_public_idtext?resume_payloadjsonb?resume_keytext?resume_statustext?resume_started_attimestamptz?resume_finished_attimestamptz?resume_run_public_idtext?resume_errortext?capability_nametextinput_previewjsonbrisk_leveltext→ 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 standardcontext_appends◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuidkindtextlineage_idcitextstatementtextsharing_scopetextrecord_hashtextsource_refstext[]evidence_linkstext[]proposal_iduuid?RLS standardcontext_promotions◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuid→ record_iduuid→ version_iduuid?seqintegeractiontextapprover_user_iduuid?policy_versiontextprev_chain_digesttext?chain_digesttextRLS standardcontext_proposals◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidlineage_idcitextkindtextforcetextconstraint_effecttext?sharing_scopetexttitletext?statementtextrationaletextsourcetextsupport_runstext[]support_agentstext[]supporting_record_idstext[]evidence_linkstext[]statustextgovernance_modetext?repositorytext?base_reftext?branchtext?pathtext?pr_numberinteger?pr_urltext?head_shatext?stamped_record_idtext?record_hashtext?checksjsonbmerged_committext?merged_attimestamptz?merged_by_user_iduuid?published_record_iduuid?promotion_event_iduuid?dismissed_attimestamptz?dismissed_reasontext?RLS standard
Solid edges are declared foreign keys; dashed edges come from relations.ts, where every cross-schema tie lives by design. 7 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_hashtextmodeltextsurfacetextresponse_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 (9 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_enabledbooleanaccounts◆ 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_attimestamptzapi_keys◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuiddeleted_attimestamptz?deleted_by_iduuid?key_prefixtextkey_hashtextnametextscopejsonbstella_telemetry_enrollment_idtext?stella_telemetry_enrolled_attimestamptz?expires_attimestamptz?last_used_attimestamptz?RLS standardrate_limit◆ idtextkeytextcountintegerlastRequestbigintsessions◆ idtext→ user_iduuidtokentextexpires_attimestamptzip_addresstext?user_agenttext?created_attimestamptzupdated_attimestamptztwo_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_behaviordefault_text_tiermodel_tier?default_text_modeltext?themetextlanguagetexttimezonetextnotification_settingsjsonbper_turn_budget_enabledbooleanper_turn_budget_usdreal?per_turn_budget_modetextper_turn_budget_grace_pctrealverifications◆ 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_environment_idtext?default_agent_idtext?repo_default_prompted_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.

billing (18 tables)

Tables in the billing schema with their referencesgau_buckets◆ iduuid→ org_iduuidperiod_starttimestamptzperiod_endtimestamptzincluded_gaubigintpurchased_gaubigintcarried_gaubigintused_gaubigintoverage_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_monthintegerfeaturesjsonbis_publicbooleangau_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_customer_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_balances◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidbalance_centsbigintlast_event_attimestamptz?org_id ↗ org.organizationsRLS org_onlycredit_ledger◆ iduuid→ org_iduuiddelta_centsbigintreasontextreference_typetext?reference_iduuid?created_by_iduuid?created_attimestamptzorg_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_onlygau_reversals◆ iduuid→ org_iduuid→ settlement_iduuid?→ bucket_iduuid?stripe_payment_intent_idtextkindtextprovider_event_idtextrequested_gaubigintreversed_gaubigintunrecovered_gaubigintamount_centsbigintcurrencytextcreated_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?meter_carry_micro_credits_by_reasonjsonbmeter_carry_micro_creditsbigintlow_balance_threshold_centsbigintassistant_spend_cap_centsbigint?extended_evidence_retention_enabledbooleanstripe_customer_idtext?approved_for_invoice_billingbooleaninvoice_gau_maxintegerauto_topup_enabledbooleanauto_topup_blocksintegerdunning_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_customer_idtextstripe_payment_method_idtexttypetextbrandtext?last4text?exp_monthinteger?exp_yearinteger?is_defaultbooleanorg_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?daydatespent_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. 14 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?statustext→ active_leaf_message_iduuid?archived_attimestamptz?archived_by_user_iduuid?code_bindingjsonb?deleted_attimestamptz?deleted_by_iduuid?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 (3 tables)

Tables in the cms schema with their referencesbook_access_codes◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?codecitextlead_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_slugtextformattexttitletexthtmltextpublishedbooleanleads◆ 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?sourcetext?page_pathtext?messagetext?marketing_consentbooleancrm_record_idtext?crm_synced_attimestamptz?crm_sync_errortext?
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 referencesgenerated_assets◆ 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 (6 tables)

Tables in the cost schema with their referencescost_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?proven_microsbigint?accepted_microsbigint?productive_rationumeric(9, 8)?tokensjsonbrolled_up_attimestamptzRLS standardfindings◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidkindtextleveltextsubjecttextfingerprinttextwindow_starttimestamptzwindow_endtimestamptzestimated_saving_microsbigintcurrencytextsaving_basistextconfidencetextwhytextfixtextcited_runstext[]cited_framesjsonbstatustextdetected_attimestamptzdecided_attimestamptz?decided_by_user_iduuid?applied_action_idtext?RLS 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_millionbiginteffective_fromtimestamptzeffective_totimestamptz?sourcetextcatalogtext?org_id ↗ org.organizationsRLS org_or_globalrun_totals◆ iduuidorg_iduuidworkspace_iduuidrun_idtextrun_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?verdicttext?acceptedboolean?productive_rationumeric(9, 8)?enforcement_tiertext?replay_gradetext?governed_actionsinteger?billed_attimestamptz?breakdownjsonbrolled_up_attimestamptzRLS 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.

environments (5 tables)

Tables in the environments schema with their referencesagent_environment_bindings◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidagent_iduuidenvironment_iduuidis_primarybooleanRLS standardenvironments◆ 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 (5 tables)

Tables in the evidence schema with their referenceswitnesses◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?witness_idtextoracle_kindtextcommand_digesttextheld_outbooleanRLS standarddisclosure_policies◆ iduuidorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?graintextRLS standardretention_policy_versions◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzcreated_by_iduuid?versionintegermodetextretained_content_classestext[]ttl_daysintegerenvironment_restoration_rulejsonbpolicy_digesttextRLS standardrun_exports◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?run_public_idtextrequested_by_user_iduuidstatustextbundle_reftext?bundle_digesttext?bundle_bytesinteger?merkle_roottext?frame_countinteger?completed_attimestamptz?errortext?RLS standardverdicts◆ iduuid→ org_iduuid→ workspace_iduuidcreated_attimestamptzcreated_by_iduuid?run_idtextsession_uuiduuidframe_seqbigintobserved_attimestamptz→ witness_idtextattempt_nointegerwitness_run_idtext?target_reftexttarget_shatextpr_reftextpr_shatexttarget_resulttextpr_resulttextverdicttextfail_fingerprinttext?pass_output_digesttext?tamper_exclusiontexttamperjsonb?disclosure_graintextrunner_attestationjsonbRLS 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 (9 tables)

Tables in the iam schema with their referencesroles◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidscope_kindtextnametextdescriptiontext?is_system_defaultbooleanversiontext→ parent_role_iduuid?org_id ↗ org.organizationsRLS org_onlyprincipals◆ 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_nullableauthorization_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_iduuidstatustextapprover_iduuid?approved_attimestamptz?ttl_secondsinteger?justificationtext?org_id ↗ org.organizationsRLS 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_attimestamptztenantemergency_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_idtextschema_urltext?schemajsonbschema_versiontextplugin_versiontextcached_attimestamptzdeletion_jobs◆ iduuidpublic_idcitextcreated_attimestamptzconnection_iduuidworkspace_iduuidorg_iduuiddelete_modetextrequested_byuuidtotal_entitiesinteger?deleted_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?repository_selectiontext?suspended_attimestamptz?deleted_attimestamptz?oauth_accounts◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzorg_iduuidprovidertextprovider_user_idtextprovider_user_emailtext?provider_user_nametext?access_token_encjsonbrefresh_token_encjsonb?expires_attimestamptz?token_typetextscopestext[]last_refreshed_attimestamptz?refresh_failure_countintegerRLS org_onlyoauth_tokens◆ connection_iduuidaccess_token_encjsonbrefresh_token_encjsonb?expires_attimestamptz?token_typetextscopestext[]provider_user_idtext?provider_account_idtext?last_refreshed_attimestamptz?refresh_failure_countintegercreated_attimestamptzupdated_attimestamptzrepository_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[]statustextlast_received_attimestamptz?expires_attimestamptz?updated_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.

mcp (7 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_configjsonbhealth_statustextlast_healthcheck_attimestamptz?discovered_toolsjsonbenabledbooleanlast_import_attimestamptz?last_import_digesttext?org_id ↗ org.organizationsRLS 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 standardcredentials◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidorg_listing_iduuidauth_kindtextaccess_token_encbytea?refresh_token_encbytea?secret_encbytea?oauth_client_secret_encbytea?token_kms_key_idtext?oauth_client_idtext?scopestext[]expires_attimestamptz?statustextlast_refreshed_attimestamptz?RLS standardregistries◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidnametextbase_urltextenabledbooleanis_defaultbooleanlast_synced_attimestamptz?last_synced_cursortext?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. 4 references leave the schema and are drawn as stubs.

notification (1 tables)

Tables in the notification schema with their referencesnotifications◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuid?user_iduuidkindtexteventtext?titletextbodytext?deep_linktext?unreadbooleanarchivedbooleanemailed_attimestamptz?RLS workspace_nullable
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.

org (8 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?settingsjsonbassistant_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?RLS org_onlymodel_credentials◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?deleted_attimestamptz?deleted_by_iduuid?→ org_iduuidprovidertextkey_ciphertextbyteakey_key_idtextkey_digesttextkey_hinttextbase_urltext?model_mapjsonbstatustextlast_verified_attimestamptz?rotated_attimestamptz?RLS org_onlyonboarding_state◆ org_iduuidworkspace_iduuidsteptextfirst_frame_attimestamptz?first_run_idtext?provisional_untiltimestamptzmain_repo_bound_attimestamptz?detected_repositoryjsonb?created_attimestamptzupdated_attimestamptzRLS org_onlyorg_slug_history◆ iduuidpublic_idcitextorg_iduuidold_slugcitextnew_slugcitextchanged_attimestamptzredirect_enabledbooleanRLS org_onlyorg_users◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuid→ user_iduuidroletextjoined_attimestamptzuser_id ↗ auth.usersRLS org_only
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.

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?endpoint_urltext?transporttext?auth_kindtextauth_configjsonbenabledbooleanconfigjsonbRLS 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_attimestamptzcompleted_attimestamptz?error_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_countersbucket_keytextwindow_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)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_hoursintegerupdated_by_iduuid?created_attimestamptzupdated_attimestamptzRLS org_onlysecurity_eventsiduuidoccurred_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 (2 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 standardresolutions◆ iduuidpublic_idcitext→ org_iduuid→ workspace_iduuidcreated_attimestamptzcreated_by_iduuid?→ config_version_iduuidrun_idtextattempt_idtextskill_idtextskill_versiontextskill_digesttextsourcetextdecisiontextwithheld_reasontext?loadedbooleantoken_costintegerresolved_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.

tacho (10 tables)

Tables in the tacho schema with their referencescheckpoints◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuidsession_iduuidseqbigintchain_headtextevent_countbigintdevice_key_fingerprinttextdevice_signaturetextplatform_key_idtext?platform_signaturetext?signed_attimestamptzcountersigned_attimestamptz?anchor_roottext?anchored_attimestamptz?RLS 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_principal_iduuid?issued_by_user_iduuid?issued_attimestamptzexpires_attimestamptz?delivered_attimestamptz?acknowledged_attimestamptz?applied_attimestamptz?applied_at_seqbigint?outcometextoutcome_detailtext?RLS standardenrollment_tokens◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuidagent_iduuidtoken_hashtextissued_to_user_iduuidexpires_attimestamptzused_attimestamptz?used_by_host_iduuid?rejected_countintegerRLS standardgateway_chains◆ iduuidpublic_idcitextorg_iduuidworkspace_iduuidhost_iduuidchain_session_uuidtextchain_genesis_hashtext?first_seen_attimestamptzlast_seen_attimestamptzRLS standardhosts◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidagent_keytextagent_iduuid?agent_principal_iduuid?api_key_iduuidhostnametexthostname_digesttextplatformtextos_versiontext?archtext?os_usertextos_user_digesttextdevice_public_keytextdevice_key_fingerprinttextharnessesjsonbclaude_version_at_enrolltext?claude_execpathtext?node_versiontext?wrapper_versiontext?shelltext?terminal_type_lasttext?statustextenrollment_claimsjsonbenrollment_signaturetextexpires_attimestamptzrevoked_attimestamptz?revoke_reasontext?managedbooleanmanaged_settings_digesttext?user_settings_digesttext?project_settings_digestsjsonbmodetextbundle_version_servedinteger?bundle_etag_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 standardincidents◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidhost_iduuid?session_iduuid?kindtextseveritysmallintdetected_attimestamptzdetected_bytextevidencejsonbevent_seqbigint?resolved_attimestamptz?resolved_by_principal_iduuid?resolution_notetext?trust_weightinteger?RLS standardsession_commands◆ iduuidpublic_idcitextcreated_attimestamptzcreated_by_iduuid?org_iduuidworkspace_iduuidsession_iduuidseqbiginttool_use_idtext?command_digesttextcommand_headtextbash_commandtext?exit_statusinteger?duration_msinteger?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_addedintegerlines_removedintegerobserved_statustext?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?context_windowinteger?max_output_tokensinteger?requestsintegerinput_tokensbigintoutput_tokensbigintcache_read_tokensbigintcache_creation_tokensbigintthinking_tokensbigintweb_search_requestsintegercost_microsbigintapi_duration_msintegerRLS 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?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?permission_mode_changesintegeranalytics_disabledboolean?start_typetext?start_sourcetext?end_reasontext?terminal_reasontext?stop_reason_finaltext?outcometextis_errorboolean?api_error_statusinteger?started_attimestamptzfirst_prompt_attimestamptz?last_event_attimestamptzended_attimestamptz?sealed_attimestamptz?cwdtext?project_dirtext?transcript_pathtext?git_remote_digesttext?git_branchtext?git_head_sha_starttext?git_head_sha_endtext?git_dirty_startboolean?worktree_pathtext?worktree_nametext?worktree_branchtext?relocated_cwdtext?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_turnsintegernum_promptsintegernum_model_callsintegernum_api_errorsintegernum_api_retriesintegernum_tool_callsintegernum_tool_errorsintegernum_tool_rejectionsintegernum_tool_asksintegernum_subagentsintegernum_compactionsintegernum_model_switchesintegernum_notificationsintegernum_elicitationsintegerinput_tokensbigintoutput_tokensbigintcache_read_tokensbigintcache_creation_tokensbigintcache_creation_5m_tokensbigintcache_creation_1h_tokensbigintthinking_tokensbigintweb_search_requestsintegerweb_fetch_requestsintegertotal_cost_microsbigintcost_basistext?has_unknown_model_costboolean?duration_msinteger?api_duration_msinteger?api_duration_without_retries_msinteger?tool_duration_msinteger?active_time_sinteger?ttft_first_msinteger?lines_addedintegerlines_removedintegerfiles_readintegerfiles_writtenintegerfiles_deletedintegercommands_runintegernetwork_callsintegercommitsintegerpushesintegerpull_requestsintegersubagent_statsjsonb?permission_denialsjsonb?models_usedjsonb?enforcement_tiertextgateway_observed_attimestamptz?bundle_modetext?bundle_versioninteger?policy_decisionsintegerpolicy_deniesintegerelevations_requestedintegerelevations_approvedintegerelevations_deniedintegerelevations_expiredintegertokens_issuedintegertokens_usedintegerseq_countbigintgenesis_hashtext?last_hashtext?final_hashtext?checkpoint_countintegerlast_checkpoint_iduuid?chain_verifiedbooleanchain_break_at_seqbigint?telemetry_gap_countintegerunobserved_tailbooleancompleteness_gapsjsonbreplay_gradetext?evidence_manifest_iduuid?content_framesintegerbody_framesintegertool_body_framesintegertitletext?last_prompt_digesttext?nametext?summarytext?summary_generated_attimestamptz?summary_modeltext?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.

tools (2 tables)

Tables in the tools schema with their referencesmandates◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?org_iduuidworkspace_iduuidagent_principal_iduuidrequested_byuuid?granted_byuuid?role_at_granttext?consequence_tagstext[]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 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.

workspace (7 tables)

Tables in the workspace schema with their referencesworkspaces◆ iduuidpublic_idcitextcreated_attimestamptzupdated_attimestamptzcreated_by_iduuid?updated_by_iduuid?→ org_iduuidnametextslugcitextnamespacecitextavatar_urltext?descriptiontext?prompt_configjsonbsettingsjsonbconsequence_rolesjsonbdefault_text_tiermodel_tier?default_text_modeltext?archived_attimestamptz?archived_by_user_iduuid?cost_centertext?org_id ↗ org.organizationsRLS org_onlyrouting_policy◆ iduuidorg_iduuidworkspace_iduuid?modetextsuccess_thresholdrealmin_samplesintegerwindow_daysintegerescalate_on_rejectionbooleancreated_attimestamptzupdated_attimestamptzRLS workspace_nullabletacho_session_policy◆ iduuidorg_iduuidworkspace_iduuidmodetextsession_limit_usdnumeric(12, 2)?model_allowjsonb?model_denyjsonbcreated_attimestamptzupdated_attimestamptzRLS standardworkspace_budget_policy◆ iduuidorg_iduuidworkspace_iduuidenabledbooleanlimit_usdnumeric(12, 2)?modetextgrace_overage_pctrealenforcementtextcreated_attimestamptzupdated_attimestamptzRLS standardworkspace_memory_policy◆ iduuidorg_iduuidworkspace_iduuidhalf_life_low_daysintegerhalf_life_high_daysintegerrecall_thresholdrealcompliance_thresholdintegerdefault_decay_floorrealcreated_attimestamptzupdated_attimestamptzRLS standardworkspace_slug_history◆ iduuidpublic_idcitextorg_iduuidworkspace_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. 2 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.

20
TableEngineORDER BYColumnsDefined in
audit_eventsReplacingMergeTree(occurred_at)(org_id, occurred_at, event_id)18migrations/0003_iam_audit.sql
claude_sessionsReplacingMergeTree(inserted_at)(user_email, session_id, timestamp, entry_uuid)34migrations/0007_claude_sessions.sql
dev_logsMergeTree()(dev_session, service, ts)7schema.sql
error_eventsMergeTree()(org_id, source, created_at)14migrations/0020_error_events.sql
eval_item_resultsMergeTree()(org_id, workspace_id, run_id, item_id, created_at)21migrations/0020_eval_item_results.sql
eval_resultsMergeTree()(harness, suite, task_id, agent_version, created_at)20schema.sql
eval_runsReplacingMergeTree(updated_at)(harness, suite, agent_name, agent_version, run_id)28schema.sql
eventsMergeTree()(org_id, event_type, emitted_at)8schema.sql
execution_logsMergeTree()(org_id, execution_id, created_at)8schema.sql
graph_observed_labelsMergeTree()(org_id, workspace_id, target_kind, label_or_type, occurred_at)9migrations/0013_graph_observed_labels.sql
memory_changesMergeTree()(org_id, memory_id, occurred_at)9migrations/0016_memory_changes.sql
router_outcomesMergeTree()(org_id, task_class, model, created_at)15migrations/0025_router_outcomes.sql
sandbox_log_eventsMergeTree()(org_id, workspace_id, session_id, ts)11migrations/0024_sandbox_log_events.sql
schema_conformance_eventsReplacingMergeTree(occurred_at)(org_id, workspace_id, version_id, node_label, event_id)16migrations/0021_schema_conformance_events_idempotency.sql
skill_loadsMergeTree()(org_id, workspace_id, skill_id, created_at)9migrations/0008_skill_loads.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)383migrations/0027_tacho_events.sql
token_usageMergeTree()(org_id, created_at, execution_step_id)18schema.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 generated_assets row).publicvercel-blob
evidence_bodyFrame bodies (Mission Control spec §8.2): redacted, content-addressed, envelope-encrypted bytes under evidence/<org>/<workspace>/bodies/<key id>/<sha256>; agent_run_events.body_ref and ClickHouse tacho_events.bytes_ref hold the reference (ADR-058).privatevercel-blob
evidence_segmentPer-seal archive segments (frame envelopes as zstd NDJSON, written once at seal) and export bundles; the seal's archive_segment_ref and run_exports.bundle_ref hold the reference (ADR-058).privatevercel-blob
generated_assetGenerated + uploaded media (chat attachments, exports, agent output); content.generated_assets is the source-of-truth reference row.privatevercel-blob

Background jobs

33 Inngest functions served at /api/inngest on apps/api. Trigger events are parsed with the same scanner the gate uses to prove every event has a sender.

Event → function → event

Inngest events and functions: which event starts which function, and which events a function sends onwardtriggerssendstriggerssendstriggerssendstriggerstriggerssendstriggerssendssendssendstriggerssendstriggerstriggerstriggerstriggerstriggerscost/run.sealedcost.price-book-repriceapproval/resumecron * * * * *ingestion-poll-schedulercron */5 * * * *ingestion/connection.deleteingestion/sync.requestedauth/session-expiry-auditcron 0 * * * *ingestion/webhook.provisioninngest/function.failedprivacy/erasure.executebilling.dunning-sweepcron 0 2 * * *privacy/export.processschema/reconcile.startbilling.gau-closecron 10 * * * *billing.usage-deliverycron * * * * *cost.daily-rollupcron 0 1 * * *cost.price-book-synccron 0 * * * *evidence.frame-compactioncron 0 4 3 * *evidence.run-exportingestion-oauth-refreshcron 0 * * * *ingestion-webhook-renewcron 0 * * * *mandate/expirycron 0 * * * *mcp.credential-grant-retentioncron 30 4 * * 0mcp.tool-snapshot-retentioncron 0 4 2 * *memory.decay-passcron 0 4 * * *plugin.catalog-synccron 0 */6 * * *plugin.oauth-refresh-watchercron */30 * * * *run.summarizesecurity.audit-partition-rollovercron 0 3 * * *cost.run-rollupingestion/connection.pollingestion-delete-connectioningestion-sync-requestedingestion-webhook-provisionobservability.capture-failureprivacy.erasure-executeprivacy.export-processschema-reconcilecost/findings.requestedingestion-connection-pollingestion/github.initial-synccost.findingscron 0 2 * * *ingestion-github-initial-syncingestion/entity.receivedingestion-pipelineingestion/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.

Functions

33
IdTriggerSendsRetriesFile
approval/resume* * * * *3approval.resume.ts
auth/session-expiry-audit0 * * * *3auth.session-expiry-audit.ts
billing.dunning-sweep0 2 * * *3billing.dunning-sweep.ts
billing.gau-close10 * * * *3billing.gau-close.ts
billing.usage-delivery* * * * *3billing.usage-delivery.ts
cost.daily-rollup0 1 * * *3cost.daily-rollup.ts
cost.findings0 2 * * *3cost.findings.ts
cost.price-book-repricecost/findings.requested3cost.price-book-reprice.ts
cost.price-book-sync0 * * * *3cost.price-book-sync.ts
cost.run-rollupcost/run.sealedcost/findings.requested5cost.run-rollup.ts
evidence.frame-compaction0 4 3 * *3evidence.frame-compaction.ts
evidence.run-export2evidence.run-export.ts
ingestion-connection-pollingestion/connection.pollingestion/entity.received2ingestion.connection-poll.ts
ingestion-delete-connectioningestion/connection.delete2ingestion.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.provision3ingestion.webhook-provision.ts
ingestion-webhook-renew0 * * * *2ingestion.webhook-renew.ts
mandate/expiry0 * * * *3mandate.expiry.ts
mcp.credential-grant-retention30 4 * * 03mcp.credential-grant-retention.ts
mcp.tool-snapshot-retention0 4 2 * *3mcp.tool-snapshot-retention.ts
memory.decay-pass0 4 * * *3memory.decay-pass.ts
observability.capture-failureinngest/function.failed0observability.capture-failure.ts
plugin.catalog-sync0 */6 * * *1plugin.catalog-sync.ts
plugin.oauth-refresh-watcher*/30 * * * *0plugin.oauth-refresh-watcher.ts
privacy.erasure-executeprivacy/erasure.execute3privacy.erasure.execute.ts
privacy.export-processprivacy/export.process2privacy.export.process.ts
run.summarize2run.summarize.ts
schema-reconcileschema/reconcile.start2schema.reconcile.ts
security.audit-partition-rollover0 3 * * *3security.audit-partition-rollover.ts

CLI and MCP surfaces

The CLI speaks HTTP to apps/api and mirrors response shapes by hand; the MCP server exposes one tool per contract whose surfaces include mcp, named exactly after the contract.

MCP tools

308 tool files under apps/mcp/src/tools, 307 contracts declare the mcp surface. Tool files with no matching contract stem: _schema-test-helpers.

CLI commands

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

CommandDescription
agentGovern the workspace's registered agents
agent enrollWrap this machine: device key, host credential, tachod 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 envBind an agent to an environment
agent env bindBind an agent to an environment (promotes to primary if it is the agent's first)
agent env listList an agent's environment bindings
agent env unbindRemove an agent's binding to an environment
agent registerRegister an agent identity and print its credential once — Owner/Admin only
agent status
agent unenroll
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
budgetHard period-to-date spend ceilings that gate agent runs — org + workspace
budget setSet (create or replace) a spend ceiling — Owner/Admin/Billing only
budget showShow configured spend ceilings with their live burn
contextSteering: record a proposal on a lineage
context proposeRecord a proposal (the record it should become, why); its Context PR is opened and merged in Oxagen
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`)
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
graphQuery the knowledge graph
graph searchSemantic (vector) search across the customer context graph
initLink this project to an Oxagen org + workspace (writes .oxagen/workspace.json)
loginAuthenticate the CLI — opens a browser by default (interactive). Use --token for CI/headless.
logoutClear the stored Oxagen session from ~/.config/oxagen/config.json.
logsSee and debug the CLI's log (~/.oxagen/logs/cli.output). Captures invocations,
memoryManage the workspace's agent memories (list, show, edit, salience, promote, candidates, rm)
memory candidatesList the top OBSERVATION memories by citation pressure ripe for promotion
memory citationsWorkspace citation analytics: totals, influence/compliance, most-cited / least-useful / most-violated memories and nodes
memory demoteDemote a memory to RULE or OBSERVATION, recording an auditable demotion event (target must be below the current class)
memory dismissDismiss a memory from the promotion candidate queue (or restore it with --restore)
memory editEdit a memory's lesson, kind, or source
memory importBulk-import markdown skill files / rule docs as memories (previews unless --yes)
memory listList the workspace's memories, sorted by recency or citation count
memory promotePromote a memory to RULE or FACT, recording an auditable promotion event (FACT requires human confirmation)
memory rmPermanently delete a memory by id
memory salienceAdjust a memory's confidence/enforcement scores or lifecycle status (class changes go through `memory promote`)
memory showShow one memory in full detail (by id or publicId)
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
rememberCapture a memory — infers its class + kind and saves it to the workspace graph
repoThe workspace's repositories: one main repository, bound at creation, 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 Context PR in this workspace
repo initOpen the pull request that adds .oxagen/ to a repository; it never writes to the production branch
repo linkLink a GitHub repository the workspace's GitHub App installation reaches as a linked repository
repo listEvery repository the workspace binds, main first, with each one's approved default ref and binding id
repo treeWhat a repository holds under .oxagen/ on its production branch, read from GitHub now
repo unlinkUnlink a linked repository by its binding id; the main 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 (org Owner/Admin) — changes spend behavior
router previewDry-run the routing decision for a prompt (changes nothing)
router statsObserved outcomes per (task class, model) + cheapest-clearing model per class
runThe recorded run: its chain and seal, and its signed evidence bundle
run chainShow what makes a run's record tamper-evident: the hash rule, the root, the checkpoints, the gaps, and the replay ladder
run downloadDownload a ready run export and check its sha256 against the recorded digest
run exportQueue the signed, offline-verifiable evidence bundle for a sealed run — Owner/Admin only
run export-statusShow where a run export stands and, once it is ready, its download link
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
steeringSteering freshness: whether .oxagen/ carries the records merged on the production branch
steering gateThe pre-prompt check an agent harness calls. Exit 0 allows, exit 2 refuses with the reason on stderr
steering hooks
steering statusCompare .oxagen/ against the remote production branch and show the two gates
steering syncTake .oxagen/ from the remote production branch; refuses while it holds uncommitted or unmerged work
telemetryInspect or control anonymous CLI usage telemetry (on by default — see TELEMETRY.md)
trace
verifyCheck a run export bundle offline: each frame's digest and link, the Merkle root, and each signature

Retired commands

Kept as stubs that explain where the capability went.

CommandWas
a2aThe Agent2Agent protocol surface
agentsThe fleet agents screen
codeLocal code diff/patch/format utilities
commandUser-defined slash commands
configThe local CLI config file
daemonThe local context daemon
evalEval datasets and runs
file-lockAgent file locks
fleetThe session fleet
importForeign-platform artifact import
lineageThe subagent dispatch-tree explorer
mcpLocal MCP server configuration
modelsOn-device model runtime selection
prPull-request CI watching and merging
promptSaved prompt snippets
recoverAgent commit-ledger recovery
replayLocal turn replay
rulesLocal agent rule files
sandboxAgent sandbox sessions
sandbox-templateSandbox template management
settingsThe local settings.json driver
skillLoadable skill bundles
solveBest-of-N task solving
viewThe agent-work dashboard

Deployment

One AWS account, OpenTofu stacks under infra/stacks-new, a single application node behind an ALB, Aurora for Postgres, and GitHub Actions deploying over OIDC.

Production topology (AWS account 916294258235)

The ALB is the only thing on the internet; one ARM node runs Caddy, the five Node services and the two self-hosted stores; Postgres is Aurora Serverless v2 reachable only from the node's security group.APP NODE · T4G.LARGE ARM64 · PRIVATE SUBNET · NO SSHDNSoxagen.shdocs · app · api ·mcp · stellaHTTPapp.oxagen.shapi.oxagen.shmcp.oxagen.shdocs.oxagen.shreverse RPCbolthttp :8123pg :5432package-for-nodeoxagen-deploy-servicerestartInternetRoute 53oxagen.sh zoneCloudFront + S3oxagen.sh · wwwALBACM TLS · :443 → nodeCaddy :80host-based routingapp:3000api:4000mcp:4100docs:3002stella-serveloopback onlyNeo4jdocker · EBS · SSM port-forwardClickHousedocker · EBSAurora PostgreSQLServerless v2 · :5432 from node SGSSM Parameter Store/oxagen/production/*GitHub ActionsOIDC role gha-deploy-oxagen-platformS3 deploy bucket+ SSM Run Command
The ALB is the only thing on the internet; one ARM node runs Caddy, the five Node services and the two self-hosted stores; Postgres is Aurora Serverless v2 reachable only from the node's security group.
  • Only the ALB terminates TLS (ACM, DNS-validated). The node has no public IP and no SSH key; administration is SSM Session Manager, and Neo4j's ports never leave loopback.
  • The deploy job runs one service at a time on an ARM runner; stella-serve is first in the matrix so it is up before the services that call it. A commit that is no longer the tip of main refuses to ship.
  • Nothing migrates production automatically. Postgres migrations run from the node over SSM (infra/tools/run-db-migrations.sh); ClickHouse and Neo4j through the manual store-migrate workflow.
  • Logs go CloudWatch → Kinesis Firehose → S3 archive; high-severity log lines fan into an EventBridge bus through a Lambda publisher. The ingestion KMS key wraps connector credentials.
Source refs (10, verified at build)
  • infra/stacks-new/oxagen/main.tf
  • infra/stacks-new/oxagen/data-services.tf#aws_rds_cluster
  • infra/modules/app-node/main.tf
  • infra/modules/network/main.tf
  • infra/modules/static-site/main.tf
  • infra/tools/caddy/Caddyfile.alb
  • infra/stacks-new/ci-deploy/infra-apply.tf
  • .github/actions/ship-to-node/action.yml
  • tools/scripts/package-for-node.sh
  • 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
internal.oxagen.sh127.0.0.1:3003
mcp.oxagen.sh127.0.0.1:4100
stella.oxagen.sh127.0.0.1:3001

CI job graph (CI)

CI job dependency graphneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsneedsatlas-validatemanual-app-deployManual production app deploymentpreflightPreflight (skip the gate for a superseded commit)migration-gateProduction schema is ready for this commitchecksteste2erds-compatibilityrls-integrationdeploy-nodedeploy ….oxagen.shdeploy-webdeploy oxagen.sh
Deploy jobs run only after checks and test pass, and only on a push to main; the other jobs gate pull requests in parallel.
  • Deploys refuse to ship a commit that is no longer the tip of main, so a superseded queued run stays green without publishing.

Workflows

FileNameTriggersJobs
ci-image.ymlci-imageworkflow_dispatch1
db-migrate.ymlDB Migrate (manual)workflow_dispatch2
desktop-rig.ymlDesktop install rigpull_request1
desktop.ymlDesktoppush3
dod-check.ymldod-checkworkflow_call1
dod-close-guard.ymldod-close-guardworkflow_call1
dod-recheck.ymldod-recheckworkflow_call issues1
infra-drift.ymlinfra driftschedule1
infra.ymlinfrapull_request3
linear-release.ymlLinear Releaserelease1
main-verified.ymlmain-verifiedpush1
migration-label.ymlmigration-labelpull_request_target1
nightly.ymlci-nightlyschedule2
pipeline.ymlCIpull_request11
release.ymlReleaseworkflow_dispatch2
scr-corpus-check.ymlscr-corpus-checkschedule workflow_dispatch push1
store-migrate-drift.ymlStore Drift (scheduled)schedule1
store-migrate.ymlStore Migrate (manual)workflow_dispatch1
stripe-sync.ymlStripe Sync (manual)workflow_dispatch1
triage-guard.ymltriage-guardissues1
vision-gate.ymlVision Gatepull_request1
where-is-production.ymlwhere-is-productionworkflow_dispatch1

Local development stack

Services from docker-compose.dev.yml; Postgres listens on 5433 to avoid colliding with other checkouts.

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.

178 variables from packages/config/src/registry.ts, the single source for .env.example, the env-manager catalog and the CI env checker. A dot marks a service that needs the variable; R marks environments where it is required.

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···P PmanualVercel AI Gateway token — the platform's default AI auth. @oxagen/ai routes image, embeddings and video through the gateway always, and text too unless OXAGEN_MODEL_PROVIDER opts that deployment out, so this is required wherever AI runs.
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 — platform AI is gateway-only.
OPENROUTER_API_KEY secret···manualOpenRouter token for language models. Read only when OXAGEN_MODEL_PROVIDER=openrouter; every other deployment stays valid without it.
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.
OXAGEN_LLM_BALANCED···staticBalanced text tier ("Oxagen Balanced") — gateway model id for the balanced tier.
OXAGEN_LLM_FAST···staticFast text tier ("Oxagen Fast") — the gateway model id @oxagen/ai resolves for the fast tier. The ask-page default.
OXAGEN_LLM_PRECISE···staticPrecise text tier ("Oxagen Precise") — gateway model id for the precise tier.
OXAGEN_MODEL_PROVIDER···staticWhich provider serves language models: the gateway (default, and the metered path) or 'openrouter' for a deployment that cannot reach the gateway. Never an automatic fallback — an operator opts out explicitly, because a silent failover would move spend to another vendor's bill and skip metering. Image, video and embeddings stay on the gateway 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).

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. Generate with `openssl rand -base64 32`.
BETTER_AUTH_SECRET secret····D P PgenerateSession/cookie signing secret (≥32 chars). 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····staticCanonical 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`.

Billing

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
OXAGEN_METER_MARKUP···manualOptional pinned solved meter markup (≥1). Leave unset to derive from OXAGEN_TARGET_MARGIN + the code config.
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.
OXAGEN_TARGET_MARGIN···D P PstaticTarget blended gross margin in (0,1). Drives the usage-meter markup; keep in sync with Stripe via `pnpm billing:stripe-sync --apply`.
OXAGEN_USAGE_DISCOUNT_CEILING_USDD P PstaticUsage volume discount: purchase amount (USD) at which the discount caps; above this it stays flat at the max. 3% per $50 up to $250 ⇒ 15% max.
OXAGEN_USAGE_DISCOUNT_INCREMENTD P PstaticUsage volume discount: dollar increment that earns one OXAGEN_USAGE_DISCOUNT_PERCENT step (e.g. 50 = a discount step every $50 purchased).
OXAGEN_USAGE_DISCOUNT_PERCENTD P PstaticUsage volume discount: percent off per OXAGEN_USAGE_DISCOUNT_INCREMENT dollars of usage credits purchased (e.g. 3 = 3% per increment ⇒ 15% at the $250 ceiling).

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_STEERING_FRESHNESS······manualSet to 0, off, false or no to suspend the steering-freshness gates (`oxagen steering gate`) for this shell only: no auto-sync and no refusal on stale steering. The escape hatch exists so a gate cannot wedge someone when a remote is unreachable, and it is deliberately environment-only so it cannot be committed and cannot outlive the shell that set it. Never set on a deployed service.
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_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.

Context provider

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
ENGRAM_DUCKDB_PATH······manualThe engram DuckDB file @oxagen/context-provider reads. Unset means an in-memory store, so every query answers with nothing — the right answer for a misconfigured process, rather than someone else's memory. DuckDB opens a file as a single writer, so the process that writes this database and the process that serves it must be different.
OXAGEN_CONTEXT_ORG······manualThe organisation whose memory @oxagen/context-provider serves. Required, with no default: the Context Graph Protocol carries no tenant, so one process serves one workspace and which one is a deployment decision. A process started without it refuses rather than guessing.
OXAGEN_CONTEXT_WORKSPACE······manualThe workspace whose memory @oxagen/context-provider serves. Required, with no default, for the reason OXAGEN_CONTEXT_ORG is.

CRM

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
ATTIO_API_KEY secret·····manualAttio API access token. When set, apps/api upserts every lead captured by /v1/cms/leads into Attio as a person (and a company by email domain) with a note carrying the form details. Unset disables the sync; leads stay in cms.leads. Needs the record_permission:read-write, object_configuration:read and note:read-write scopes.

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").

env-manager tooling

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
ENV_MANAGER_PORT······staticLocal port for the env-manager web UI.
VERCEL_TEAM_ID······manualVercel team id (defaults to the oxagen team).
VERCEL_TEAM_SLUG······manualVercel team slug for `pnpm env:pull` --scope (e.g. "oxagen"). Optional — when unset, the CLI resolves the team from each project's linked .vercel/project.json.
VERCEL_TOKEN secret······manualVercel API token (admin) the env-manager uses to read/write project env vars.

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 — 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 @oxagen/storage (avatar/image uploads). Swap-point for S3/R2.
STORAGE_DRIVER·····manualSelects the @oxagen/storage backend: 'vercel-blob' (default, prod) or 'fs' (local/CI filesystem driver, no token needed). The swap-point for an S3/R2 driver.
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.

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.main.bind.ts and repository.installation.list.ts mint installation tokens directly when invoked from the Workspace settings dialog, not only from api/mcp.
GITHUB_APP_INSTALL_STATE_SECRET secret···manualHMAC secret used to sign the OAuth state parameter for GitHub App installs. Signed and verified by api's callback, and also signed by envGithubUrls (see GITHUB_APP_CLIENT_ID) minting the same URLs in-process from app and mcp.
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.
GITHUB_APP_WEBHOOK_SECRET secret·····manualGitHub App webhook signing secret — validates inbound webhook payloads.
GITHUB_PERSONAL_ACCESS_TOKEN secret·····manualPersonal access token (PAT) used by GitHub write capabilities (repo.create, repo.file.put, repo.fork, repo.branch.create, repo.pr.open) as a LOCAL/DEMO-ONLY fallback. Per-workspace credential resolution is now live (GitHub App installation token + KMS-encrypted per-workspace OAuth — see resolveGitHubToken in packages/handlers/src/lib/github-token.ts), so this MUST NOT be set in production: a shared PAT bypasses per-workspace scoping. resolveGitHubToken logs a loud warning when it is used while NODE_ENV=production.
GITHUB_WEBHOOK_SECRET secret·····manualWebhook signing secret for the SECOND GitHub App (oxagen-sh, app id 4055615), which delivers to the same /webhooks/github/app endpoint as oxagen-code-agent. Optional: unset means that App's deliveries are rejected.

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 encryption (INGESTION_CRYPTO_PROVIDER=kms). Also required in-process by app and mcp — see INGESTION_CRYPTO_PROVIDER.
INGESTION_CRYPTO_PROVIDER···staticCredential encryption backend for ingestion: '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 repository.main.bind.ts or repository.installation.list.ts 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 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 Tacho 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.
INNGEST_EVENT_KEY secret····P PmanualInngest event key. Required in preview+production.
INNGEST_SIGNING_KEY secret····P PmanualInngest signing key. Required in preview+production.
STELLA_ENROLLMENT_SIGNING_SECRET secret······generateHMAC secret this deployment signs Stella enterprise-telemetry enrollments with (create_stella_enrollment). A managed Stella install verifies the signature against its own copy of the same secret, named by the enrollment document's verification_secret_env — the two are distributed out of band. Unset means the capability refuses to mint rather than issuing an enrollment no install could verify.
STELLA_TELEMETRY_INGEST_ENDPOINTS······manualComma-separated HTTPS ingest endpoints this deployment serves for Stella operational telemetry. create_stella_enrollment refuses to sign 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 signs Tacho policy bundles with (get_tacho_bundle) and attests run exports with (export_run, ADR-058). The matching public key travels to each host at enrollment so tacho-hook verifies a cached bundle offline and fails closed on one it cannot verify, and into every export bundle so its verifier runs offline. Unset means enrollment, bundle and export refuse.
TACHO_ENROLLMENT_SIGNING_SECRET secret·····manualHMAC secret this deployment signs Tacho host enrollments with (create_tacho_enrollment). The collector on an enrolled host verifies the enrollment document against its own copy of the same secret, named by the document's verification_secret_env; the two are distributed out of band. Unset means the capability refuses to enrol a host.
TACHO_INGEST_ENDPOINTS·····manualComma-separated HTTPS base URLs of this deployment's Tacho machine endpoints (the /v1/tacho prefix). create_tacho_enrollment refuses to sign 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 Tacho collector's loopback listener requires. Written into each wrapped harness's settings and into a connected app's MCP config by `tacho enroll`, and read back by the hook and the `tacho 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 Tacho collector's local gateway proxies to (ADR-078). Read on the host, not the server: 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.
XDG_CONFIG_HOME······manualThe XDG base directory the Tacho 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.

Linear

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
LINEAR_API_KEY secret······manualLinear API key (tooling/provenance; not read by deployed apps).
LINEAR_PROJECT_ID······staticLinear project id for the oxagen-v2 project (tooling-only).

MCP

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
MCP_OAUTH_FETCH_TIMEOUT_MS·····manualPer-request timeout (ms) for the app MCP OAuth authorize/callback flows when the MCP SDK fetches a third-party authorization server well-known / token endpoints. Bounds a hung server so it cannot stall the serverless function. Optional — defaults to 10000 in lib/mcp-oauth/safe-fetch.ts.

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···D P PmanualNeo4j password.
NEO4J_URI···D P PmanualNeo4j bolt(+s) URI.
NEO4J_USERNAME···D P PmanualNeo4j user.

Node

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
NODE_ENV······staticRuntime mode. Vercel/Next set this automatically per deploy.

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/specs/social-login-oauth-apps.md.
GITHUB_LOGIN_CLIENT_SECRET secret····P PmanualGitHub LOGIN OAuth App client secret. Checklist: docs/specs/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/specs/social-login-oauth-apps.md.
GOOGLE_LOGIN_CLIENT_SECRET secret····P PmanualGoogle LOGIN OAuth client secret. Checklist: docs/specs/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":"…"}}. 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 as before.

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 — 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.

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 signs the macOS bundle with. `-` signs ad hoc, 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.
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; the pipeline sets this to github.event.pull_request.head.sha to compare against the real PR head. 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.
GCP_PROJECT······manualGoogle Cloud project the env-manager pulls Secret Manager secrets from. Defaults to oxagen-490023.
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_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 automation token used to publish the CLI package. Unset skips the npm publish step of `pnpm release` rather than failing it.
OXAGEN_BRAND_KIT······manualPath to the house brand kit checkout (oxagenai/oxagen-brand) sync-brand-assets.mjs copies marks and the branding skill from. Defaults to ../oxagen-brand.
OXAGEN_HOUSE_BRAND······manualDeprecated alias for OXAGEN_BRAND_KIT, accepted for one transition release.
OXAGEN_INSTALL_BASE······manualBase URL the published install.sh downloads CLI release archives from. Set it to install from a staging bucket instead of cli.oxagen.sh.
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.
PRODUCTION_ANALYTICS_PASSWORD secret······manualPassword for PRODUCTION_ANALYTICS_USER.
PRODUCTION_ANALYTICS_URL······manualProduction ClickHouse endpoint tools/scripts/backfill-claude-telemetry.ts writes backfilled session rows to.
PRODUCTION_ANALYTICS_USER······manualUsername for PRODUCTION_ANALYTICS_URL.
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.
SCR_OWNER······manualGitHub owner whose repos the SCR corpus check reads. Defaults to macanderson.
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; Vercel builds leave it unset and get the default output.
TAURI_SIGNING_PRIVATE_KEY secret······manualThe desktop app's updater signing key (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.
USER_EMAIL······manualEmail stamped on rows the Claude telemetry backfill writes, so a backfilled session is attributable to whoever ran the script.
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 PmanualNeon Postgres connection string. Prod = live branch; preview/dev = dev branch.

Privacy

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
PRIVACY_ERASURE_GRACE_DAYS·····staticGrace period in days before a hard-delete erasure job runs (GDPR Art.17). 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).
NEXT_PUBLIC_CHAT_UX_V2 client·····manualchat_ux_v2 feature flag (apps/app chat UX overhaul, browser-exposed). "1" enables the new session-settings chat surface environment-wide; unset/anything else = off. A per-browser cookie override (?chat_ux_v2=1|0) wins over this default. Validated as an optional "0"|"1" enum by baseEnvSchema.
NEXT_PUBLIC_DOCS_URL client·····manualOptional override for the docs site origin (browser-exposed). When unset, apps/app resolves the correct URL per environment automatically (dev → http://localhost:3300; prod → https://docs.oxagen.sh, per apps/app/src/lib/docs-url.ts). Set only to test a custom docs deployment. Validated as an optional URL by baseEnvSchema.

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 Tacho 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(). Written by `pnpm release:*` and synced to every oxagen-v2-* Vercel project. Declared in turbo.json globalEnv so a version change busts the build cache. LOCAL: leave unset → falls back to package.json version. PROD/PREVIEW: the released semver. NOTE: read via raw process.env in @oxagen/config — not yet in baseEnvSchema (tracked).

Security

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
AUDIT_EXPORT_SIGNING_SECRET secret···generateHMAC-SHA256 secret for signing 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. Setting a dedicated value changes the signing key 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···manualWhen true, Postgres RLS policies filter by org/workspace. Fail-closed: when UNSET it defaults ON in production (NODE_ENV/VERCEL_ENV=production) and OFF in dev/test/preview. A production process refuses to boot if this is forced to false (assertRlsEnforcedInProduction). Local dev override: set false in .env.local only if seeding/migration scripts need to bypass RLS; revert before running app code against the DB.

Stripe

VariableapiappmcpdocswebsiteadminRequiredOriginDescription
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY client·····manualBrowser-exposed Stripe publishable key for Stripe.js init. Inlined into the app bundle at build, so a rotation needs a rebuild. Sandbox pk_test_ in every environment until the production cutover.
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, and env-manager pulls this one from the secret store so the two stay in step.
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 signing secret (whsec_) 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.

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, secure cookies and rate limiting on that value, off-Vercel only (local-env.ts). 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. Ignored on real Vercel deployments (VERCEL=1 guards it). NOTE: read via raw process.env — not in baseEnvSchema (dev-tooling only).
PLAYWRIGHT_BASE_URL·····manualBase URL of the deprecated Playwright suite (apps/app_deprecated/playwright.config.ts, deleted with that app in WL-50). The rev1 harness (apps/app/playwright.config.ts) reads NEXT_PUBLIC_APP_URL and does not read this. NOTE: read via raw process.env — not in baseEnvSchema (test-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).

Decisions

The architecture decision records, grouped by the epic that produced them.

146 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 ManagerAccepted2026-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 augmentationAccepted, retired by ADR-043; amended 2026-09-18 by ADR-0932026-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 witness 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-08-26
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 themAccepted; amended 2026-09-18 by ADR-0962026-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 groupAccepted2026-09-07
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-043; amended 2026-09-18 by ADR-093 and ADR-0942026-09-18
ADR-052The governed action is the billable unit; tokens are reported, never billedAccepted2026-09-08
ADR-053The in-app agent runs on Stella's headless engine, and a token is billed only when Oxagen paid for itAccepted2026-09-09
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-09-13
ADR-056Run control connection points and the model-proxy decisionAccepted; amended 2026-09-152026-09-15
ADR-057Agents: the definition of record, budgets in micros, enrollmentAccepted2026-09-14
ADR-058Run record placement, retention default and `digest_only`Accepted2026-09-14
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-064Proof: the witness runner planeAccepted; amended 2026-09-18 by ADR-0962026-09-18
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 keysAccepted; the two names are superseded by ADR-067, the access rule stands2026-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 manifestAccepted; **decision 3 superseded by2026-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 otherAccepted; §1 amended 2026-09-18 by ADR-0952026-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 reversedAccepted; amended 2026-09-18 by ADR-097 and ADR-0932026-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-18
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-09-18
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-09-18
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-102Restore the marketing ebook lead gateAccepted2026-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-109The book has one manuscript, and its editions and migration are generatedAccepted2026-09-19
ADR-110Review main integrations and report stale-base overlapAccepted, mechanism corrected by #34852026-09-19
ADR-111An amount measure's unit is refused at declaration, not widened at `Money`Accepted2026-09-19
ADR-111Website leads sync to Attio after the row commits, with the outcome on the rowAccepted2026-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 for implementation
ADR-126Keep frame bodies in the WAL and record bounded redaction detailsAccepted2026-09-19
ADR-127Keep sealed events when body storage failsAccepted2026-09-19
ADR-128Local ARP checkpoints prepare external runsAccepted2026-09-19
ADR-128Source identifiers determine draft filenamesAccepted2026-09-19
ADR-130Spend and operator feedback lead the appAccepted2026-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 recordAccepted2026-09-20
ADR-133The governance mode in force decides how it may be changedAccepted2026-09-21
ADR-134Durable AI usage settlementAccepted for implementation
ADR-135Rev1 console scope and cutover evidenceAccepted decisions consolidated from the maintainer record2026-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-22
ADR-141What counts as an installed Cursor, and where a Cursor steer landsAccepted2026-09-22
ADR-142Cost-center chargeback on SpendAccepted2026-09-22
ADR-143The gateway brokers the vendor credential: a wrapped harness holds a run tokenAccepted2026-09-22
ADR-147A merge queue runs the full gate before a PR lands on mainAccepted2026-09-23

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 4c3b1ee210ab7d1d…), 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/register.ts — 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 — scanned with the exported helpers of check-inngest-senders.ts.
  • packages/config/src/registry.tsENV_REGISTRY, imported directly.
  • .github/workflows/*.yml, docs/adr/*.md, infra/tools/caddy/Caddyfile.alb, docker-compose.dev.yml.

Curated flows

12 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 (78 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 CI's --check guards the two things that can rot, cited sources and determinism.