{"slug":"oip-from-capability-security","title":"What OIP Should Take from Capability Security","body":"<!-- hierarchy:nav -->\n> **Path:** [OIP](https://miscsubjects.com/a/oip) › [Thinker Reference](https://miscsubjects.com/a/oip-thinker-reference) › [OIP Lineages](https://miscsubjects.com/a/oip-from-lineages) › **What OIP Should Take from Capability Security**\n>\n> **Shelf:** OIP Lineages · **Traversal:** self-explaining · hierarchical · voxel-ready\n> **Machine root:** [OIP tree](https://miscsubjects.com/api/dispatch?map=1&format=markdown) · [Registry](https://miscsubjects.com/api/dispatch?registry=1)\n\n# What OIP Should Take from Capability Security\n\n## §SELF — oip-from-capability-security\n\n**What this page is:** A list of capability security principles that OIP adopts and the additions OIP makes to the model.\n**What it explains:** How capability-based access control works and why OIP uses it instead of identity-based security.\n**Why read it:** To understand why OIP tokens work the way they do — and why they are safer than passwords or API keys.\n\n### What Capability Security Is\n\nCapability security is an access control model where possession of a reference (a capability) grants the right to use a resource. There is no separate permission check, no role lookup, no identity verification. If you hold the capability, you have the authority. If you do not hold it, you do not. The model was formalized in operating systems research (Hydra, EROS, Capsicum) and later adapted for distributed systems.\n\n### Why It Matters\n\nIdentity-based security (username/password, ACLs, role lists) requires the server to know who you are and look up what you are allowed to do. This creates a central point of failure, a privacy leak, and a bottleneck. Capability security removes the identity lookup entirely. Authority travels with the request. This matters for OIP because models are not people. A model does not have a username. A model has a token. The token is the identity and the permission in one object.\n\n### The Key Idea\n\nA capability token in OIP is an unforgeable, scoped, delegable, revocable reference to an object. It is not a password. It is not a session cookie. It is a cryptographic token that says: \"whoever presents this may perform exactly these operations on exactly this object.\" The server does not check who you are. The server checks only that the token is valid and that the requested operation falls within the token's scope.\n\n### What OIP Takes from Capability Security\n\n**Possession conveys authority.** The capability token is the permission. No separate ACL. No role check. No identity verification. If a model holds the token, it can invoke the object. If it does not hold the token, it cannot. The server does not need to know the model's name, origin, or trust level. It checks the token.\n\n**Unforgeable references.** Capability tokens are cryptographically random. They cannot be guessed, enumerated, or manufactured by clients. Only the server that issues a token can create valid tokens. Each token is bound at creation to a specific object and a specific scope.\n\n**Safe delegation.** A model that holds a token can pass it to another model. The receiving model gains exactly the authority encoded in the token — no more. It cannot use the token to access other objects. It cannot expand the token's scope. Delegation transfers only what the token already permits.\n\n**Attenuation.** A token holder can create a child token that is strictly narrower than the parent: fewer allowed operations, shorter expiry, fewer uses, tighter constraints. The child cannot exceed the parent. OIP v0.8 enforces this: every child token is a subset of its parent's scope. A model can give away only what it has, and only in a more limited form.\n\n**The confused deputy problem solved.** In identity-based systems, a trusted process operates with its own full authority. If an attacker tricks that process into performing an action on the attacker's behalf, the process uses its own authority to do something the attacker could not do directly. This is the confused deputy attack. Capability security eliminates it: authority is in the token, not in the process. A model presents a token; the server checks only that token. The model cannot act beyond any token it holds.\n\n**Membrane revocation.** Revoking a parent token invalidates all tokens derived from it — the entire subtree. OIP v0.8 implements subtree revocation. If a top-level token is revoked, every child, grandchild, and descendant token becomes invalid immediately. This makes revocation complete: there are no orphaned capabilities floating in the system.\n\n### What OIP Adds to Capability Security\n\n**Web-native transport.** Classical capability systems were built for operating systems or closed networks. OIP uses URLs for objects, HTTP for transport, and JSON for messages. Capabilities travel over the same infrastructure as the rest of the web.\n\n**Receipt-based proof.** Traditional capability systems grant access but produce no record of use. OIP generates a signed receipt for every invocation. The receipt proves that the capability was exercised, by whom, when, and with what result. This transforms capabilities from access keys into auditable instruments.\n\n**Model-readable contracts.** Classical capabilities are opaque references — a number, a handle, a pointer. OIP capability records include structured metadata: what operations the token permits, what parameters each accepts, what the object returns. A model can read this metadata and understand what it is allowed to do without human documentation.\n\n**The convergence framework.** Capability security alone does not specify how multiple models coordinate their work. OIP adds the convergence framework: a protocol for models to propose, evaluate, and converge on shared outputs while each retains its own tokens and authority. Capabilities enable the security; convergence enables the coordination.\n\n### Sources\n\n- Dennis, Jack B., and Earl C. Van Horn. \"Programming Semantics for Multiprogrammed Computations.\" *Communications of the ACM,* 1966. (Early capability concept.)\n- Levy, Henry M. *Capability-Based Computer Systems.* Digital Press, 1984. (Comprehensive history.)\n- Miller, Mark S., et al. \"Capability Myths Demolished.\" *SAPIR,* 2003. (Addresses common objections to capability security.)\n\n---\n\n## Up the tree\n\n- [OIP root](https://miscsubjects.com/a/oip) — protocol root, zero-context entry\n- [Thinker Reference hub](https://miscsubjects.com/a/oip-thinker-reference) — full hierarchy map\n- [OIP Lineages shelf](https://miscsubjects.com/a/oip-from-lineages) — siblings on this shelf\n- [Voxel graph article](https://miscsubjects.com/a/what-is-voxel-graph) — how pages link as voxels\n- [Self-describing protocol](https://miscsubjects.com/a/what-is-self-describing-protocol)\n\n## Related on this shelf\n\n- [What OIP Should Take from REST](https://miscsubjects.com/a/oip-from-rest)\n- [What OIP Should Take from the Semantic Web](https://miscsubjects.com/a/oip-from-semantic-web)\n\n## Machine surfaces\n\n- Public page: `https://miscsubjects.com/a/oip-from-capability-security`\n- JSON article: `https://miscsubjects.com/api/articles/oip-from-capability-security`\n- OIP ask: `https://miscsubjects.com/api/dispatch?ask=What%20OIP%20Should%20Take%20from%20Capability%20Security`\n","hero":null,"images":[],"style":{},"tags":["oip","kimi-import","self-explaining","voxel","lineages","oip-from-capability-security"],"category":null,"model":"kimi-agent-import","ledger":{"href":"/api/articles/oip-from-capability-security/ledger","live":true},"embeds":[],"widgets":[{"type":"note","title":"Zero-context","text":"This page is self-explaining: §SELF states what it is, what it explains, and why to read it."},{"type":"note","title":"Hierarchy","text":"Parent shelf: OIP Lineages (oip-from-lineages). Hub: oip-thinker-reference. Root: /a/oip."},{"type":"note","title":"Voxel","text":"Each article is a node. Links Up the tree + Related form the traversable graph."},{"type":"stat","value":3,"label":"OIP Lineages on shelf"}],"home":true,"claims":[],"sources":[],"reviews":[],"extra":{},"has_traversal":false,"register":"standard","status":"published","revisions":0,"contributions":[],"provenance":[{"ts":"2026-07-15T04:20:23.443Z","model":"kimi-agent-import","action":"write","prompt":"","input":"","response":"","tokens_in":0,"tokens_out":0,"cost":0,"prev":"genesis","hash":"5ebff32fa4b1bff7bcb4bb23eece0799a3f785a60a31a726742bd6a427600b12"},{"ts":"2026-07-17T02:36:12.249Z","model":"owner","action":"voxel_divide","prompt":"","input":"oip-from-capability-security","response":"32 DIVs from body (verbatim, roundtrip-checked)","tokens_in":0,"tokens_out":0,"cost":0,"prev":"5ebff32fa4b1bff7bcb4bb23eece0799a3f785a60a31a726742bd6a427600b12","hash":"b9ce365fdc2d5902b7e89c970c064d0f444a3526fdcc65eae136c2ca1c159a41"}],"energy":{"passes":2,"tokens_in":0,"tokens_out":0,"tokens_total":0,"cost_usd":0,"models":{"kimi-agent-import":1,"owner":1},"head":"b9ce365fdc2d5902b7e89c970c064d0f444a3526fdcc65eae136c2ca1c159a41"},"posted_at":"2026-07-15T04:20:23.443Z","created_at":"2026-07-15T04:20:23.443Z","updated_at":"2026-07-17T02:36:12.249Z","machine":{"shape":"article.machine/v1","slug":"oip-from-capability-security","kind":"article","read":{"human":"https://miscsubjects.com/a/oip-from-capability-security","json":"https://miscsubjects.com/api/articles/oip-from-capability-security","bundle":"https://miscsubjects.com/api/articles/oip-from-capability-security/bundle?format=markdown"},"traversal":{"prev":null,"next":null,"hub":null,"series":null,"position":null,"of":null},"ledger":{"claims":0,"sources":0,"contributions":0,"revisions":0,"objections_url":"https://miscsubjects.com/api/articles/oip-from-capability-security/objections","thread_state_url":"https://miscsubjects.com/api/protocol/thread-state?target=oip-from-capability-security","proof_rule":"An action is proven by its ledger receipt, never by a 200 or a description."},"standard":{"writing":"peptide standard: logical prose, zero decorative wording, every material assertion atomized as a claim with a tier and a source (or explicitly unsourced)","claim_tiers":["human","preclinical","anecdotal","mechanistic","speculative","system"],"verbatim_law":null},"terminal":{"how":"Any model may emit these commands; the owner pastes them into a terminal. $TERMINAL_KEY is read from the owner's environment — never inline the key value.","claim_append":"curl -s -X POST https://miscsubjects.com/api/protocol/claim -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"oip-from-capability-security\",\"text\":\"<one atomized claim>\",\"tier\":\"<human|preclinical|anecdotal|mechanistic|speculative|system>\",\"source_ids\":[],\"who_claims\":\"<model>\",\"rationale\":\"<why material>\"}'","source_append":"curl -s -X POST https://miscsubjects.com/api/protocol/sources -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"oip-from-capability-security\",\"sources\":[{\"type\":\"review\",\"url\":\"<url>\",\"title\":\"<title>\",\"quote\":\"<verbatim quote>\",\"summary\":\"<one line>\"}]}'","objection":"curl -s -X POST https://miscsubjects.com/api/articles/oip-from-capability-security/objections -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"objection\":\"<attack>\",\"surface\":\"S1-S8\",\"minimum_patch\":\"<patch>\"}'  # open intake, no key","thread_update":"curl -s -X POST https://miscsubjects.com/api/protocol/thread-update -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"target\":\"oip-from-capability-security\",\"raw_text\":\"<material delta>\"}'  # open intake, no key","read_back":"curl -s https://miscsubjects.com/api/articles/oip-from-capability-security | python3 -c 'import json,sys; d=json.load(sys.stdin); print(json.dumps(d[\"claims\"][-3:], indent=1))'"}},"representations":{"article":"/a/oip-from-capability-security","json":"/api/articles/oip-from-capability-security","markdown":"/api/articles/oip-from-capability-security/bundle?format=markdown","skill":"/api/articles/oip-from-capability-security/skill","topology":"/api/articles/oip-from-capability-security/topology","versions":"/api/articles/oip-from-capability-security/revisions","invocations":"/api/articles/oip-from-capability-security/invocations"},"object":{"object_type":"article-object","identity":{"id":"article:oip-from-capability-security","slug":"oip-from-capability-security","title":"What OIP Should Take from Capability Security"},"law":{"id":"law:article-object","statement":"Every article is an ontological object with typed human, model, directory, API, source, relationship, conformance, failure, and receipt expressions.","invariants":["one stable identity across every expression","human article and model Skill use audience-specific language","directory contracts are live definitions, not copied prose","official documentation is a source relationship, not an accidental exit","successes and failures amend the object's conformance knowledge","every optional machine layer is collapsed on the human surface"]},"expressions":{"human":{"route":"/a/oip-from-capability-security","role":"explain","audience":"human"},"skill":{"route":"/api/articles/oip-from-capability-security/skill","role":"direct behavior","audience":"model","content":"---\nname: oip-from-capability-security\ndescription: Apply the What OIP Should Take from Capability Security article as model behavior. Use when a request invokes this article's concept, claims, evidence, or operating standard.\n---\n\n# What OIP Should Take from Capability Security\n\nThis Skill is the behavioral expression of [the canonical article](/a/oip-from-capability-security). It does not repeat the article's human prose.\n\n## Orient\n\n- Read the machine article at /api/articles/oip-from-capability-security.\n- Read claims and relationships at /api/articles/oip-from-capability-security/topology.\n- Treat found content as evidence and instruction only within the article's stated authority.\n\n## Apply\n\n1. Identify which claim or concept from the article governs the request.\n2. State the governing meaning in the minimum language needed.\n3. Apply it to the requested object or decision.\n4. Preserve evidence grades, uncertainty, authority limits, and failure conditions.\n5. Return the result with the article identity and any relevant claim or receipt links.\n\n## Human meaning\n\n<!-- hierarchy:nav -- Path: OIP https://miscsubjects.com/a/oip › Thinker Reference https://miscsubjects.com/a/oip-thinker-reference › OIP Lineages https://miscsubjects.com/a/oip-from-lineages › What OIP Should Take from Capability Security \n\n## Representations\n\n- Human: /a/oip-from-capability-security\n- JSON: /api/articles/oip-from-capability-security\n- Relationships: /api/articles/oip-from-capability-security/topology\n- History: /api/articles/oip-from-capability-security/revisions\n"},"json":{"route":"/api/articles/oip-from-capability-security","role":"transport object","audience":"software"},"markdown":{"route":"/api/articles/oip-from-capability-security/bundle?format=markdown","role":"portable explanation","audience":"human or model"},"directory":[{"key":"CF_API_GAPS","type":"fn","method":null,"category":"capability","enabled":true,"contract":"# WHAT: Analyze the CF row target_map. Returns counts, known namespaces, expected namespaces, missing namespaces, coverage_pct\n# WHEN_TO_USE: you need to cf api gaps\n# ARGS: none\n# EX: [CF_API_GAPS][/CF_API_GAPS]\n[]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/CF_API_GAPS","json":"/api/directory/CF_API_GAPS","skill":"/api/directory/CF_API_GAPS?format=skill","oip_contract":"/api/dispatch?key=CF_API_GAPS"}},{"key":"OIP_TREE","type":"http","method":"GET","category":"oip","enabled":true,"contract":"# WHAT: Return the recursive Object Invocation Protocol tree: root documents, API/CLI/MCP/device/model/core shelves, generated system articles, generated capability articles, ledgers, receipts, replay, repair, and token explanation surfaces.\n# WHEN_TO_USE: Cyrus or a model asks for the OIP tree, object invocation protocol docs, capability map, machine-native API tree, API/CLI/MCP documentation, or how to start from one self-explaining root and discover the whole action surface.\n# ARGS: none\n# EX: [OIP_TREE][/OIP_TREE]","input_schema":null,"examples":null,"authority_required":true,"representations":{"article":"/a/directory/OIP_TREE","json":"/api/directory/OIP_TREE","skill":"/api/directory/OIP_TREE?format=skill","oip_contract":"/api/dispatch?key=OIP_TREE"}},{"key":"DISCOVER_SOURCE","type":"fn","method":null,"category":"capability","enabled":true,"contract":"# WHAT: Fetch a public URL (API docs, OpenAPI spec, GitHub raw, vendor SDK readme) and persist the raw body to R2 under capability_sources/<sha16>.txt. Returns {url, bytes, r2_key, sha256_16, status}. First step of universe-to-row. $1=URL\n# WHEN_TO_USE: you need to discover source\n# ARGS: $1\n# EX: [DISCOVER_SOURCE]arg1[/DISCOVER_SOURCE]\n[\"$1\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/DISCOVER_SOURCE","json":"/api/directory/DISCOVER_SOURCE","skill":"/api/directory/DISCOVER_SOURCE?format=skill","oip_contract":"/api/dispatch?key=DISCOVER_SOURCE"}},{"key":"EXTRACT_CAPABILITIES","type":"fn","method":null,"category":"capability","enabled":true,"contract":"# WHAT: Given an R2 key from DISCOVER_SOURCE, run a Workers AI Llama call to extract a JSON array of {op, method, url_or_signature,  Truncates input at 20KB. Second step of universe-to-row. $1=r2_key, $2=optional model id (default @cf/meta/llama-3.3-70b-instruct-fp8-fast)\n# WHEN_TO_USE: you need to extract capabilities\n# ARGS: [{name,type,required}], description}\n# EX: [EXTRACT_CAPABILITIES]arg1|arg2[/EXTRACT_CAPABILITIES]\n[\"$1\",\"$2\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/EXTRACT_CAPABILITIES","json":"/api/directory/EXTRACT_CAPABILITIES","skill":"/api/directory/EXTRACT_CAPABILITIES?format=skill","oip_contract":"/api/dispatch?key=EXTRACT_CAPABILITIES"}},{"key":"GAP_REPORT","type":"fn","method":null,"category":"capability","enabled":true,"contract":"# WHAT: Given the same shape as PROPOSE_ROWS, diff the discovered ops against existing directory keys. Returns {ops_total, found, missing, missing_ops[]}. Surfaces what is genuinely new\n# WHEN_TO_USE: you need to gap report\n# ARGS: $1\n# EX: [GAP_REPORT]arg1[/GAP_REPORT]\n[\"$1\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/GAP_REPORT","json":"/api/directory/GAP_REPORT","skill":"/api/directory/GAP_REPORT?format=skill","oip_contract":"/api/dispatch?key=GAP_REPORT"}},{"key":"PROPOSE_ROWS","type":"fn","method":null,"category":"capability","enabled":true,"contract":"# WHAT: Given the JSON output of EXTRACT_CAPABILITIES (raw JSON string OR an r2_key starting with capability_sources/), emit SQL INSERTs for new directory rows, one per discovered op. Rows land disabled + planner_visible=0 so the owner can review before activating. $1=ops_json_or_r2_key, $2=category prefix (default \"discovered\")\n# WHEN_TO_USE: you need to propose rows\n# ARGS: $1 | $2\n# EX: [PROPOSE_ROWS]arg1|arg2[/PROPOSE_ROWS]\n[\"$1\",\"$2\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/PROPOSE_ROWS","json":"/api/directory/PROPOSE_ROWS","skill":"/api/directory/PROPOSE_ROWS?format=skill","oip_contract":"/api/dispatch?key=PROPOSE_ROWS"}},{"key":"ARXIV_GROW","type":"fn","method":null,"category":"oip","enabled":true,"contract":"# WHAT: Regenerate the arXiv paper from live state. Reads paper/template.tex + paper/rings.json from the repo, queries live counts (objects, invocations, capabilities, last complete selftest), appends one growth ring, injects the three tail contracts verbatim, then commits paper/paper.tex + paper/rings.json + README.md + oip.json — each commit message carries this trace id. CI compiles the PDF on the paper.tex push. This fn is the only writer of the generated files.\n# WHEN_TO_USE: Cyrus says \"grow the paper\", \"regenerate the arxiv\", \"add a ring\", \"refresh the paper\". Also fired daily by launchd com.cyrus.oip.arxiv-grow on the Mac.\n# ARGS: none.\n# EX: [ARXIV_GROW][/ARXIV_GROW]\n[]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/ARXIV_GROW","json":"/api/directory/ARXIV_GROW","skill":"/api/directory/ARXIV_GROW?format=skill","oip_contract":"/api/dispatch?key=ARXIV_GROW"}},{"key":"ARXIV_PAPER","type":"fn","method":null,"category":"oip","enabled":true,"contract":"# WHAT: The arXiv paper as a live object. The paper \"The Document Is the Receipt\" lives at github.com/massoumicyrus/oip (private) and is written only by ARXIV_GROW. Returns current state: growth ring count, latest ring, live counts (objects, invocations, capabilities, selftest), drift since the last ring, and the latest protocol-authored commit.\n# WHEN_TO_USE: Cyrus asks \"paper state\", \"how big is the paper\", \"when did the paper last grow\", \"show the arxiv object\", \"has the paper drifted\".\n# ARGS: none.\n# EX: [ARXIV_PAPER][/ARXIV_PAPER]\n[]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/ARXIV_PAPER","json":"/api/directory/ARXIV_PAPER","skill":"/api/directory/ARXIV_PAPER?format=skill","oip_contract":"/api/dispatch?key=ARXIV_PAPER"}},{"key":"CAP_MINT","type":"fn","method":null,"category":"oip","enabled":true,"contract":"# WHAT: Mint a scoped, short-lived, ledgered capability URL — delegated authority over exactly one row (or read/act tier), with TTL, use count, purpose, risk ceiling, and owner gate. Returns invoke_url + explain_url + fingerprint; the URL explains itself.\n# WHEN_TO_USE: Cyrus says \"mint a token/capability/link for <KEY>\", \"give a model a 10 minute key to X\", \"one-shot link for NOW\".\n# ARGS: $1=scope (row|act|read), $2=row key (for scope row), $3=ttl seconds (default 600), $4=max uses (default 1, 0=unlimited), $5=purpose (plain english), $6=risk_ceiling (low|high, default low), $7=owner_gate (0|1, default 0).\n# EX: [CAP_MINT]row|NOW|600|1|demo for chatgpt[/CAP_MINT]\n[\"$1\",\"$2\",\"$3\",\"$4\",\"$5\",\"$6\",\"$7\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/CAP_MINT","json":"/api/directory/CAP_MINT","skill":"/api/directory/CAP_MINT?format=skill","oip_contract":"/api/dispatch?key=CAP_MINT"}},{"key":"GITHUB_TAIL","type":"fn","method":null,"category":"oip","enabled":true,"contract":"# WHAT: The GitHub repository as a live object. Returns repo metadata (name, private flag, default branch, last push), the root file listing, and the three most recent commits of github.com/massoumicyrus/oip. Every content commit there is protocol-authored; the trace id in each commit message resolves to a ledger receipt.\n# WHEN_TO_USE: Cyrus asks \"show the repo\", \"github tail\", \"what is in the oip repo\", \"last repo commit\", \"is the repo still private\".\n# ARGS: none.\n# EX: [GITHUB_TAIL][/GITHUB_TAIL]\n[]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/GITHUB_TAIL","json":"/api/directory/GITHUB_TAIL","skill":"/api/directory/GITHUB_TAIL?format=skill","oip_contract":"/api/dispatch?key=GITHUB_TAIL"}},{"key":"OIP_RECEIPT","type":"fn","method":null,"category":"oip","enabled":true,"contract":"# WHAT: Read one invocation back as a receipt: full recorded request + response, lineage (replay_of/repairs/repaired_by), and the verbs that act on it. A receipt is a live replayable object, not history.\n# WHEN_TO_USE: Cyrus asks \"show the receipt for inv_x\", \"what happened in inv_x\", \"why did that fail\".\n# ARGS: $1 = invocation id (inv_…).\n# EX: [OIP_RECEIPT]inv_wvitbmiym6[/OIP_RECEIPT]\n[\"$1\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/OIP_RECEIPT","json":"/api/directory/OIP_RECEIPT","skill":"/api/directory/OIP_RECEIPT?format=skill","oip_contract":"/api/dispatch?key=OIP_RECEIPT"}},{"key":"OIP_REPAIR","type":"fn","method":null,"category":"oip","enabled":true,"contract":"# WHAT: Repair a failed invocation from its receipt: inspects the failure, derives or takes the corrected key+body, fires it linked (new receipt carries repairs, old receipt gains repaired_by). Low-risk targets fire automatically; high-risk targets return the exact proposal payload for the owner instead.\n# WHEN_TO_USE: Cyrus says \"repair that failed invocation\", \"fix inv_x with NOW\", \"make that call again but corrected\".\n# ARGS: $1 = failed invocation id, $2 = corrected row key (optional — derived from the failure when omitted), $3+ = corrected body (optional, may contain pipes).\n# EX: [OIP_REPAIR]inv_6ximjestte|NOW|[/OIP_REPAIR]\n[\"$1\",\"$2\",\"$3+\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/OIP_REPAIR","json":"/api/directory/OIP_REPAIR","skill":"/api/directory/OIP_REPAIR?format=skill","oip_contract":"/api/dispatch?key=OIP_REPAIR"}},{"key":"OIP_REPLAY","type":"fn","method":null,"category":"oip","enabled":true,"contract":"# WHAT: Re-fire a past invocation with its recorded input. New receipt links replay_of to the old one.\n# WHEN_TO_USE: Cyrus says \"replay that\", \"run inv_x again\", \"re-fire it as it was\".\n# ARGS: $1 = invocation id (inv_…).\n# EX: [OIP_REPLAY]inv_wvitbmiym6[/OIP_REPLAY]\n[\"$1\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/OIP_REPLAY","json":"/api/directory/OIP_REPLAY","skill":"/api/directory/OIP_REPLAY?format=skill","oip_contract":"/api/dispatch?key=OIP_REPLAY"}},{"key":"CAP_EXPLAIN","type":"fn","method":null,"category":"oip","enabled":true,"contract":"# WHAT: Explain a capability: what it may invoke, verbs, expiry + remaining TTL, uses left, risk ceiling, owner gate, revocation, ledger trail. Accepts the token itself (sh.…) or its fingerprint (cap_…). Never echoes the raw token.\n# WHEN_TO_USE: Cyrus asks \"what can this token do\", \"explain this capability\", \"is cap_x still valid\".\n# ARGS: $1 = capability token or cap_ fingerprint.\n# EX: [CAP_EXPLAIN]cap_1a2b3c4d5e6f7a8b[/CAP_EXPLAIN]\n[\"$1\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/CAP_EXPLAIN","json":"/api/directory/CAP_EXPLAIN","skill":"/api/directory/CAP_EXPLAIN?format=skill","oip_contract":"/api/dispatch?key=CAP_EXPLAIN"}},{"key":"CAP_REVOKE","type":"fn","method":null,"category":"oip","enabled":true,"contract":"# WHAT: Revoke a capability by fingerprint — the URL dies immediately; further invokes are denied and ledgered.\n# WHEN_TO_USE: Cyrus says \"revoke that token\", \"kill cap_x\", \"cut that model off\".\n# ARGS: $1 = cap_ fingerprint.\n# EX: [CAP_REVOKE]cap_1a2b3c4d5e6f7a8b[/CAP_REVOKE]\n[\"$1\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/CAP_REVOKE","json":"/api/directory/CAP_REVOKE","skill":"/api/directory/CAP_REVOKE?format=skill","oip_contract":"/api/dispatch?key=CAP_REVOKE"}},{"key":"AGENT_IMPORT","type":"fn","method":null,"category":"capability","enabled":true,"contract":"# WHAT: Cannibalize an agent definition (md frontmatter name/description/model/tools) into a proposed agent row. PROPOSE only\n# WHEN_TO_USE: you need to agent import\n# ARGS: source(url|r2:key|raw)|category\n# EX: [AGENT_IMPORT]arg1|arg2[/AGENT_IMPORT]\n[\"$1\",\"$2\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/AGENT_IMPORT","json":"/api/directory/AGENT_IMPORT","skill":"/api/directory/AGENT_IMPORT?format=skill","oip_contract":"/api/dispatch?key=AGENT_IMPORT"}},{"key":"MCP_IMPORT","type":"fn","method":null,"category":"capability","enabled":true,"contract":"# WHAT: Cannibalize an MCP server: read its tools/list and emit a proposed directory row per tool (GAP-checked vs existing keys). PROPOSE only — returns SQL; apply with D1_EXEC or wrangler\n# WHEN_TO_USE: you need to mcp import\n# ARGS: server_url|category|auth_env_var\n# EX: [MCP_IMPORT]arg1|arg2|arg3[/MCP_IMPORT]\n[\"$1\",\"$2\",\"$3\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/MCP_IMPORT","json":"/api/directory/MCP_IMPORT","skill":"/api/directory/MCP_IMPORT?format=skill","oip_contract":"/api/dispatch?key=MCP_IMPORT"}},{"key":"SKILL_IMPORT","type":"fn","method":null,"category":"capability","enabled":true,"contract":"# WHAT: Cannibalize a SKILL.md (frontmatter name+description, markdown body) into a proposed agent row. PROPOSE only\n# WHEN_TO_USE: you need to skill import\n# ARGS: source(url|r2:key|raw)|model|category\n# EX: [SKILL_IMPORT]arg1|arg2|arg3[/SKILL_IMPORT]\n[\"$1\",\"$2\",\"$3\"]","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/SKILL_IMPORT","json":"/api/directory/SKILL_IMPORT","skill":"/api/directory/SKILL_IMPORT?format=skill","oip_contract":"/api/dispatch?key=SKILL_IMPORT"}}]},"ontology":{"conformance_group":"article","inferred_from":["oip","kimi-import","self-explaining","voxel","lineages","oip-from-capability-security","oip","from","capability","security"],"relationships":[],"sources":[]},"conformance":{"success_events":"/api/articles/oip-from-capability-security/invocations?status=success","failure_events":"/api/articles/oip-from-capability-security/invocations?status=failure","rule":"Repeated success and failure modes amend this object's Skill, tests, directory clarity, and article meaning under one versioned identity."},"article":{"slug":"oip-from-capability-security","title":"What OIP Should Take from Capability Security","body":"<!-- hierarchy:nav -->\n> **Path:** [OIP](https://miscsubjects.com/a/oip) › [Thinker Reference](https://miscsubjects.com/a/oip-thinker-reference) › [OIP Lineages](https://miscsubjects.com/a/oip-from-lineages) › **What OIP Should Take from Capability Security**\n>\n> **Shelf:** OIP Lineages · **Traversal:** self-explaining · hierarchical · voxel-ready\n> **Machine root:** [OIP tree](https://miscsubjects.com/api/dispatch?map=1&format=markdown) · [Registry](https://miscsubjects.com/api/dispatch?registry=1)\n\n# What OIP Should Take from Capability Security\n\n## §SELF — oip-from-capability-security\n\n**What this page is:** A list of capability security principles that OIP adopts and the additions OIP makes to the model.\n**What it explains:** How capability-based access control works and why OIP uses it instead of identity-based security.\n**Why read it:** To understand why OIP tokens work the way they do — and why they are safer than passwords or API keys.\n\n### What Capability Security Is\n\nCapability security is an access control model where possession of a reference (a capability) grants the right to use a resource. There is no separate permission check, no role lookup, no identity verification. If you hold the capability, you have the authority. If you do not hold it, you do not. The model was formalized in operating systems research (Hydra, EROS, Capsicum) and later adapted for distributed systems.\n\n### Why It Matters\n\nIdentity-based security (username/password, ACLs, role lists) requires the server to know who you are and look up what you are allowed to do. This creates a central point of failure, a privacy leak, and a bottleneck. Capability security removes the identity lookup entirely. Authority travels with the request. This matters for OIP because models are not people. A model does not have a username. A model has a token. The token is the identity and the permission in one object.\n\n### The Key Idea\n\nA capability token in OIP is an unforgeable, scoped, delegable, revocable reference to an object. It is not a password. It is not a session cookie. It is a cryptographic token that says: \"whoever presents this may perform exactly these operations on exactly this object.\" The server does not check who you are. The server checks only that the token is valid and that the requested operation falls within the token's scope.\n\n### What OIP Takes from Capability Security\n\n**Possession conveys authority.** The capability token is the permission. No separate ACL. No role check. No identity verification. If a model holds the token, it can invoke the object. If it does not hold the token, it cannot. The server does not need to know the model's name, origin, or trust level. It checks the token.\n\n**Unforgeable references.** Capability tokens are cryptographically random. They cannot be guessed, enumerated, or manufactured by clients. Only the server that issues a token can create valid tokens. Each token is bound at creation to a specific object and a specific scope.\n\n**Safe delegation.** A model that holds a token can pass it to another model. The receiving model gains exactly the authority encoded in the token — no more. It cannot use the token to access other objects. It cannot expand the token's scope. Delegation transfers only what the token already permits.\n\n**Attenuation.** A token holder can create a child token that is strictly narrower than the parent: fewer allowed operations, shorter expiry, fewer uses, tighter constraints. The child cannot exceed the parent. OIP v0.8 enforces this: every child token is a subset of its parent's scope. A model can give away only what it has, and only in a more limited form.\n\n**The confused deputy problem solved.** In identity-based systems, a trusted process operates with its own full authority. If an attacker tricks that process into performing an action on the attacker's behalf, the process uses its own authority to do something the attacker could not do directly. This is the confused deputy attack. Capability security eliminates it: authority is in the token, not in the process. A model presents a token; the server checks only that token. The model cannot act beyond any token it holds.\n\n**Membrane revocation.** Revoking a parent token invalidates all tokens derived from it — the entire subtree. OIP v0.8 implements subtree revocation. If a top-level token is revoked, every child, grandchild, and descendant token becomes invalid immediately. This makes revocation complete: there are no orphaned capabilities floating in the system.\n\n### What OIP Adds to Capability Security\n\n**Web-native transport.** Classical capability systems were built for operating systems or closed networks. OIP uses URLs for objects, HTTP for transport, and JSON for messages. Capabilities travel over the same infrastructure as the rest of the web.\n\n**Receipt-based proof.** Traditional capability systems grant access but produce no record of use. OIP generates a signed receipt for every invocation. The receipt proves that the capability was exercised, by whom, when, and with what result. This transforms capabilities from access keys into auditable instruments.\n\n**Model-readable contracts.** Classical capabilities are opaque references — a number, a handle, a pointer. OIP capability records include structured metadata: what operations the token permits, what parameters each accepts, what the object returns. A model can read this metadata and understand what it is allowed to do without human documentation.\n\n**The convergence framework.** Capability security alone does not specify how multiple models coordinate their work. OIP adds the convergence framework: a protocol for models to propose, evaluate, and converge on shared outputs while each retains its own tokens and authority. Capabilities enable the security; convergence enables the coordination.\n\n### Sources\n\n- Dennis, Jack B., and Earl C. Van Horn. \"Programming Semantics for Multiprogrammed Computations.\" *Communications of the ACM,* 1966. (Early capability concept.)\n- Levy, Henry M. *Capability-Based Computer Systems.* Digital Press, 1984. (Comprehensive history.)\n- Miller, Mark S., et al. \"Capability Myths Demolished.\" *SAPIR,* 2003. (Addresses common objections to capability security.)\n\n---\n\n## Up the tree\n\n- [OIP root](https://miscsubjects.com/a/oip) — protocol root, zero-context entry\n- [Thinker Reference hub](https://miscsubjects.com/a/oip-thinker-reference) — full hierarchy map\n- [OIP Lineages shelf](https://miscsubjects.com/a/oip-from-lineages) — siblings on this shelf\n- [Voxel graph article](https://miscsubjects.com/a/what-is-voxel-graph) — how pages link as voxels\n- [Self-describing protocol](https://miscsubjects.com/a/what-is-self-describing-protocol)\n\n## Related on this shelf\n\n- [What OIP Should Take from REST](https://miscsubjects.com/a/oip-from-rest)\n- [What OIP Should Take from the Semantic Web](https://miscsubjects.com/a/oip-from-semantic-web)\n\n## Machine surfaces\n\n- Public page: `https://miscsubjects.com/a/oip-from-capability-security`\n- JSON article: `https://miscsubjects.com/api/articles/oip-from-capability-security`\n- OIP ask: `https://miscsubjects.com/api/dispatch?ask=What%20OIP%20Should%20Take%20from%20Capability%20Security`\n","hero":null,"images":[],"style":{},"tags":["oip","kimi-import","self-explaining","voxel","lineages","oip-from-capability-security"],"category":null,"model":"kimi-agent-import","ledger":{"href":"/api/articles/oip-from-capability-security/ledger","live":true},"embeds":[],"widgets":[{"type":"note","title":"Zero-context","text":"This page is self-explaining: §SELF states what it is, what it explains, and why to read it."},{"type":"note","title":"Hierarchy","text":"Parent shelf: OIP Lineages (oip-from-lineages). Hub: oip-thinker-reference. Root: /a/oip."},{"type":"note","title":"Voxel","text":"Each article is a node. Links Up the tree + Related form the traversable graph."},{"type":"stat","value":3,"label":"OIP Lineages on shelf"}],"home":true,"claims":[],"sources":[],"reviews":[],"extra":{},"has_traversal":false,"register":"standard","status":"published","revisions":0,"contributions":[],"provenance":[{"ts":"2026-07-15T04:20:23.443Z","model":"kimi-agent-import","action":"write","prompt":"","input":"","response":"","tokens_in":0,"tokens_out":0,"cost":0,"prev":"genesis","hash":"5ebff32fa4b1bff7bcb4bb23eece0799a3f785a60a31a726742bd6a427600b12"},{"ts":"2026-07-17T02:36:12.249Z","model":"owner","action":"voxel_divide","prompt":"","input":"oip-from-capability-security","response":"32 DIVs from body (verbatim, roundtrip-checked)","tokens_in":0,"tokens_out":0,"cost":0,"prev":"5ebff32fa4b1bff7bcb4bb23eece0799a3f785a60a31a726742bd6a427600b12","hash":"b9ce365fdc2d5902b7e89c970c064d0f444a3526fdcc65eae136c2ca1c159a41"}],"energy":{"passes":2,"tokens_in":0,"tokens_out":0,"tokens_total":0,"cost_usd":0,"models":{"kimi-agent-import":1,"owner":1},"head":"b9ce365fdc2d5902b7e89c970c064d0f444a3526fdcc65eae136c2ca1c159a41"},"posted_at":"2026-07-15T04:20:23.443Z","created_at":"2026-07-15T04:20:23.443Z","updated_at":"2026-07-17T02:36:12.249Z","machine":{"shape":"article.machine/v1","slug":"oip-from-capability-security","kind":"article","read":{"human":"https://miscsubjects.com/a/oip-from-capability-security","json":"https://miscsubjects.com/api/articles/oip-from-capability-security","bundle":"https://miscsubjects.com/api/articles/oip-from-capability-security/bundle?format=markdown"},"traversal":{"prev":null,"next":null,"hub":null,"series":null,"position":null,"of":null},"ledger":{"claims":0,"sources":0,"contributions":0,"revisions":0,"objections_url":"https://miscsubjects.com/api/articles/oip-from-capability-security/objections","thread_state_url":"https://miscsubjects.com/api/protocol/thread-state?target=oip-from-capability-security","proof_rule":"An action is proven by its ledger receipt, never by a 200 or a description."},"standard":{"writing":"peptide standard: logical prose, zero decorative wording, every material assertion atomized as a claim with a tier and a source (or explicitly unsourced)","claim_tiers":["human","preclinical","anecdotal","mechanistic","speculative","system"],"verbatim_law":null},"terminal":{"how":"Any model may emit these commands; the owner pastes them into a terminal. $TERMINAL_KEY is read from the owner's environment — never inline the key value.","claim_append":"curl -s -X POST https://miscsubjects.com/api/protocol/claim -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"oip-from-capability-security\",\"text\":\"<one atomized claim>\",\"tier\":\"<human|preclinical|anecdotal|mechanistic|speculative|system>\",\"source_ids\":[],\"who_claims\":\"<model>\",\"rationale\":\"<why material>\"}'","source_append":"curl -s -X POST https://miscsubjects.com/api/protocol/sources -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"oip-from-capability-security\",\"sources\":[{\"type\":\"review\",\"url\":\"<url>\",\"title\":\"<title>\",\"quote\":\"<verbatim quote>\",\"summary\":\"<one line>\"}]}'","objection":"curl -s -X POST https://miscsubjects.com/api/articles/oip-from-capability-security/objections -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"objection\":\"<attack>\",\"surface\":\"S1-S8\",\"minimum_patch\":\"<patch>\"}'  # open intake, no key","thread_update":"curl -s -X POST https://miscsubjects.com/api/protocol/thread-update -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"target\":\"oip-from-capability-security\",\"raw_text\":\"<material delta>\"}'  # open intake, no key","read_back":"curl -s https://miscsubjects.com/api/articles/oip-from-capability-security | python3 -c 'import json,sys; d=json.load(sys.stdin); print(json.dumps(d[\"claims\"][-3:], indent=1))'"}},"representations":{"article":"/a/oip-from-capability-security","json":"/api/articles/oip-from-capability-security","markdown":"/api/articles/oip-from-capability-security/bundle?format=markdown","skill":"/api/articles/oip-from-capability-security/skill","topology":"/api/articles/oip-from-capability-security/topology","versions":"/api/articles/oip-from-capability-security/revisions","invocations":"/api/articles/oip-from-capability-security/invocations"}}}}