{"name":"Intent-Plane: Fail-Closed Authorization Gate for AI Agent Actions","description":"Intent-Plane is a fail-closed authorization gate designed for AI agents performing irreversible actions, ensuring every decision is deterministic and auditable. It provides a durable record that third parties can re-verify independently, without needing to trust the gate's internal code. This system is crucial for applications in fintech, payments, and treasury, where accountability and security are paramount.","github":"https://github.com/hossainpazooki/intent-plane","url":"https://osrepos.com/repo/hossainpazooki-intent-plane","source":"osrepos.com","sourceDescription":"This repository profile is provided by osrepos.com, an open source repository discovery platform.","repositoryProfile":"https://osrepos.com/repo/hossainpazooki-intent-plane","generatedFor":"open source discovery and AI-assisted research","markdown":"https://osrepos.com/repo/hossainpazooki-intent-plane.md","json":"https://osrepos.com/repo/hossainpazooki-intent-plane.json","topics":["audit-trail","authorization","go","fintech","payments","ai-agents","deterministic","state-machine"],"keywords":["audit-trail","authorization","go","fintech","payments","ai-agents","deterministic","state-machine"],"stars":null,"summary":"Intent-Plane is a fail-closed authorization gate designed for AI agents performing irreversible actions, ensuring every decision is deterministic and auditable. It provides a durable record that third parties can re-verify independently, without needing to trust the gate's internal code. This system is crucial for applications in fintech, payments, and treasury, where accountability and security are paramount.","content":"## Introduction\n\nAs AI agents increasingly take on roles involving irreversible actions, such as moving money or filing reports, the need for robust authorization and auditability becomes critical. Intent-Plane addresses this challenge by providing a fail-closed authorization gate. Before an agent executes any critical action, it must declare its intent. A deterministic gate then authorizes or refuses the action against a human-signed policy specification. Every decision is committed to a durable, append-only record, designed for independent re-computation and verification by external auditors.\n\n## Why Use It & Key Benefits\n\nIntent-Plane offers a unique approach to securing AI agent operations, focusing on accountability and trust minimization:\n\n*   **Fail-Closed Posture**: The system is designed to refuse anything it cannot evaluate, ensuring that an action is never wrongly executed. Missing data, unsigned or revoked specifications, unreachable scorers, or empty criteria sets all result in a denial.\n*   **Deterministic and Auditable Decisions**: Every authorization decision is recorded in a durable feed, allowing auditors, compliance teams, or counterparties to re-derive every record from the feed alone, without trusting the gate's code.\n*   **Exactly-Once Execution**: Idempotency keys are derived from the action's canonicalized identity, preventing duplicate actions, regardless of how they are spelled or retried across instances.\n*   **Governance Without Cooperation**: Intent-Plane can front external services, imposing governance without requiring cooperation from the tool's owner. A refused call never reaches the backend.\n*   **Two Sides, One Record**: The repository provides distinct packages for the \"audit side\" (verifier) and the \"platform side\" (declarant), both converging on the same examinable record, ensuring independent verification.\n*   **Robust Refusal Mechanisms**: It explicitly refuses unevaluable intents, duplicates, calls it cannot key honestly, redirects, and any outcome outside its contractually closed vocabulary, providing strong guarantees against unintended actions.\n\n## Installation\n\nIntent-Plane ships with Go packages, a Python twin with adapters, and an examiner's kit. Here's how to get started:\n\n**Go Packages (verifier/, declarant/)**\n\nbash\ngo get github.com/hossainpazooki/intent-plane\n\n\nThese are public modules, Go 1.26, and stdlib-only, ensuring no transitive dependencies to review.\n\n**Python Twin + Adapters (declarant/pydeclarant/)**\n\nThere is no PyPI package; you need to vendor the tree. Copy the `declarant/pydeclarant/` directory into your project. The core modules (`declare.py`, `client.py`, `gating.py`) are stdlib-only. LangChain and MCP adapters are optional and require `langchain-core` and `fastmcp` respectively.\n\n**The Examiner's Kit (intent-verify + frozen fixtures)**\n\nThis kit is built by you, not published as a release artifact:\n\nbash\nscripts/release.sh\n\n\nThis script cross-compiles for various platforms and bundles byte-frozen good/tampered feed pairs with their expected reports. Integrity is ensured via `SHA256SUMS` and specific build flags for reproducible builds.\n\n## Examples\n\nHere are examples demonstrating how to gate calls using the Python declarant SDK and how to verify a feed with the `intent-verify` CLI.\n\n**Gating a call, four ways (Python)**\n\nThe gate sits at the tool-call seam, not in the prompt. Embed it once, and every agent inherits it:\n\npython\nfrom client import Client\nfrom langchain_adapter import gate_tool                    # needs langchain-core\nfrom mcp_adapter import IntentGateMiddleware, gated_proxy  # needs fastmcp\nfrom reporting_adapter import ReportIdentity, gate_submission  # stdlib only\n\nclient = Client(\"http://127.0.0.1:8080\")     # bounded, 30s per call, by default\n\n# (a) a LangChain tool — one call\ngated = gate_tool(my_tool, client,\n                  intent_spec_hash=SPEC_HASH, scope=\"per-actor\", run_id=run_id)\n\n# (b) an MCP server you OWN — attach the middleware\nserver.add_middleware(IntentGateMiddleware(\n    client, intent_spec_hash=SPEC_HASH, scope=\"per-actor\", run_id=run_id))\n\n# (c) an MCP server you do NOT own — front it, unchanged\ngated = gated_proxy(backend, client,\n                    intent_spec_hash=SPEC_HASH, scope=\"per-actor\", run_id=run_id)\n\n# (d) a regulatory-report submission — the plane never sees the report\ndone = gate_submission(ReportIdentity(reporting_entity=LEI, uti=uti, action_type=\"VALU\",\n                                      rule_set=RULES, as_of=\"2026-08-21\"),\n                       lambda: tr.submit(xml), client,\n                       intent_spec_hash=SPECS, scope=\"per-actor\", run_id=run_id)\n\n\n**Verifying a feed with `intent-verify` CLI**\n\nTake the audit side's seat and hand the CLI a feed to re-derive everything:\n\nbash\ngo run ./verifier/cmd/intent-verify core/contract/feed/events-good.jsonl      # RESULT: VERIFIED, exit 0\ngo run ./verifier/cmd/intent-verify core/contract/feed/events-tampered.jsonl  # one flipped byte: REFUTED, exit 1\n\n\n## Links\n\n*   **GitHub Repository**: [`https://github.com/hossainpazooki/intent-plane`](https://github.com/hossainpazooki/intent-plane){:target=\"_blank\"}\n*   **The Contract**: [`CONTRACT.md`](https://github.com/hossainpazooki/intent-plane/blob/main/CONTRACT.md){:target=\"_blank\"}\n*   **Assurance Documentation**: [`docs/assurance.md`](https://github.com/hossainpazooki/intent-plane/blob/main/docs/assurance.md){:target=\"_blank\"}\n*   **Integration Documentation**: [`docs/integration.md`](https://github.com/hossainpazooki/intent-plane/blob/main/docs/integration.md){:target=\"_blank\"}\n*   **Architecture Documentation**: [`docs/architecture.md`](https://github.com/hossainpazooki/intent-plane/blob/main/docs/architecture.md){:target=\"_blank\"}","metrics":{"detailViews":1,"githubClicks":0},"dates":{"published":null,"modified":"2026-09-12T11:38:20.000Z"}}