Agents need guardrails.
Not guesswork.
Scoped permissions, signed actions, replayable audit. Nomos is the control plane between your AI agents and the world — every action authorized, every scope narrowed, every decision witnessed. Open source on GitHub.
A token in a prompt
is a token in a screenshot.
The default agent quickstart says: paste your OAuth token into the system message. It ends up in model traces, OTel spans, training caches, and the screenshot someone shares in Slack at 11pm.
const agent = createAgent({
systemPrompt: `
You are a release bot. Use this GitHub token to ship code:
ghp_W7Yk2pNvZxQ8mHb4cFrJdT9eAuLqB1sR0gXi
`,
});
await agent.run("ship v0.2.1");
// → token now in: model trace · langfuse span · cache · backupOnce a credential is in the context window, you have lost control of where it goes next. Rotation is reactive. Audit is best-effort. Blast radius is the lifetime of the token times every place a trace might land.
Three primitives.
One page of code.
Nomos doesn’t add another orchestration framework. It adds three primitives between your agent and its tools: a capability mint, a policy decision, and a signed audit. Use one. Use all three. Drop in tomorrow without rewriting your stack.
- 01
Mint UCAN
A capability token scoped to one resource, one action, expires in seconds. Agent holds the token; the secret stays with us.
@auto-nomos/ucan - 02
Decide with Cedar
AWS-grade policy language. Deterministic, formally verifiable, fail-closed. Visual builder round-trips to the same text.
@auto-nomos/cedar - 03
Record on chain
Every decision hashed into a prev-linked chain. Daily roots Ed25519-signed. Verify offline with our CLI, forever.
@auto-nomos/audit-verify
One guard().
Every tool call.
Drop the SDK into your agent. Every external call routes through one function. Allow, deny, or step-up in under fifty milliseconds — and fail-closed by default if the PDP is unreachable, so a network blip never opens the gate.
- languageTypeScript · Python
- p99 decision<50ms
- default on outagedeny
import { createAuthGuard } from '@auto-nomos/sdk';
const guard = createAuthGuard({
apiKey: process.env.NOMOS_API_KEY!,
agent: 'release-bot',
});
const decision = await guard.authorize({
command: 'github.create_pr',
resource: 'auto-nomos/nomos',
payload: { title, body, head, base },
});
if (decision.decision !== 'allow') throw decision;
await guard.exec(decision); // proxied, audited, signedEvery decision,
signed and chained.
Each PDP decision is hashed against the previous one. A daily root signs the whole window with our Ed25519 key. Hand any signed root to our CLI and walk the chain back to genesis. Forever. Offline.
$ npx @auto-nomos/audit-verify \
--bundle audit-2026-05-23.tar.gz
✓ 14,922 events verified
✓ root signature valid (kid 0x4d2c)
✓ chain head: 09f4·1c7b·ae71event N-1 hash 09f4ab21…
├─ ts 14:22:06.182 UTC
├─ agent fin-bot
├─ command stripe.refund_charge
├─ decision deny · policy: refund_above_threshold
└─ prev e7c0…
│
▼
event N hash 1c7b9d04…
├─ ts 14:22:07.001 UTC
├─ agent support-bot
├─ command slack.post_message
├─ decision allow
└─ prev 09f4ab21…
│
▼
event N+1 hash ae7142f9…
├─ ts 14:22:08.214 UTC
├─ agent release-bot
├─ command github.transfer_repo
├─ decision step-up · passkey required
└─ prev 1c7b9d04…
─────────────────────────────────────────────
daily root 2026-05-23 sig 7f3a… kid 0x4d2cFor the calls
that matter.
Detect a high-impact action at policy time, push to your device, wait for a passkey signature, then mint a cosigner UCAN. One tap covers an envelope of actions — the next ten calls in the same intent silent-mint until the envelope expires.
- repo transfers · prod deletes · refunds
- new resource · novel scope · denied retry
- anything you flag in Cedar
Command github.transfer_repo on auto-nomos/nomos. Once approved, this envelope covers the next 3 actions in the same intent.
One npx.
In your editor.
Nomos ships as an MCP server. Point Claude Desktop, Cursor, or Claude Code at it and every tool call your agent makes — across all 24 integrations — is gated, proxied, and chained. No code in your editor.
$ npx -y @auto-nomos/mcp-server \
--config ./nomos.json
✓ connected to PDP
✓ 24 integrations available
→ ready for tool calls- Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.jsonshipped - Cursor
~/.cursor/mcp.jsonshipped - Claude Code
claude mcp add nomosshipped - Windsurf
~/.codeium/windsurf/mcp_config.jsonbeta
Open source.
Read every line.
Thirteen packages live on npm under @auto-nomos/*, and the full control-plane and dashboard source is public too — all under Apache-2.0. Read every line, open an issue, send a PR.
- @auto-nomos/corePDP decide() engineon npm
- @auto-nomos/cedarPolicy evaluationon npm
- @auto-nomos/ucanCapability tokenson npm
- @auto-nomos/cryptoDID + signingon npm
- @auto-nomos/sdkTS SDK for agentson npm
- @auto-nomos/mcp-serverMCP serveron npm
- @auto-nomos/adaptersYAML connectorson npm
- @auto-nomos/schema-packsTool-call validatorson npm
- @auto-nomos/policy-builderReact Flow editoron npm
- @auto-nomos/audit-verifyChain verify CLIon npm
- @auto-nomos/clinomos CLIon npm
- @auto-nomos/ucan-clinomos-ucan CLIon npm
- @auto-nomos/shared-typesZod schemason npm
- nomos-sdk (PyPI)Python SDK for agentson npm
- @auto-nomos/control-planeHono + tRPC serversource
- @auto-nomos/dashboardNext.js operator UIsource
- TypeScript SDK
npm i @auto-nomos/sdk - Python SDK
pip install nomos-sdk - CLI
npm i -g @auto-nomos/cli - MCP server
npm i -g @auto-nomos/mcp-server - Self-host PDP (Helm)
helm install pdp oci://ghcr.io/auto-nomos/charts/cb-pdp
Build with us.
Authorization for agents is a new category. We’d rather invent it in public with you than ship it from a closed room. Three doors in.
Real-time chat
Office hours every Friday. Policy debugging, integration requests, weird-edge-case stories.
Join the serverRFC-style proposals
Where new integrations, schema changes, and policy primitives get argued before they ship.
Open DiscussionsSend a PR
Adapters are YAML. Schema packs are TypeScript. The bar to first commit is one file. Be commit #001.
Read CONTRIBUTING.mdWhy not just X?
We get asked this every week. Here’s the honest answer. Read the full breakdown for any cell that surprises you — we link the deep dive under the table.
| feature | Auth0 | HashiCorp Vault | Permit.io | Raw OAuth tokens | Nomos |
|---|---|---|---|---|---|
| Capability tokens (UCAN) | |||||
| Per-call policy decision | |||||
| Cryptographic audit chain | logs | ||||
| MCP-native server | |||||
| Step-up passkey approval | enterprise | soon | |||
| Multi-agent UCAN delegation | OPAL | soon | |||
| Schema-validated tool calls | |||||
| Self-hostable | |||||
| Open source |
Give your agents
shoulders to
stand on.
Two ways in. Free during open beta on both. Pick what fits — your operators can switch later without a migration.
Or browse the repo on GitHub firstUse Nomos cloud.
- 1. Create a workspace
- 2. Connect a SaaS or cloud
- 3. Register your first App
- 4. Drop the SDK into your agent
Run it on your iron.
- 1. Join the waitlist
- 2. Get the helm chart on flip
- 3. Bring your own Ed25519 key
- 4. Same SDK, same dashboard