https://github.com/agent-receipts/obsigna
Agent Receipts — cryptographically signed audit trails for AI agent actions. Protocol spec, SDKs (Go, TypeScript, Python), and MCP proxy.
https://github.com/agent-receipts/obsigna
agent-receipts ai ai-agents audit cryptography ed25519 golang mcp model-context-protocol python receipts security typescript verifiable-credentials w3c-vc
Last synced: 6 days ago
JSON representation
Agent Receipts — cryptographically signed audit trails for AI agent actions. Protocol spec, SDKs (Go, TypeScript, Python), and MCP proxy.
- Host: GitHub
- URL: https://github.com/agent-receipts/obsigna
- Owner: agent-receipts
- License: apache-2.0
- Created: 2026-04-02T07:53:51.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-06-10T10:27:21.000Z (8 days ago)
- Last Synced: 2026-06-10T12:15:12.165Z (8 days ago)
- Topics: agent-receipts, ai, ai-agents, audit, cryptography, ed25519, golang, mcp, model-context-protocol, python, receipts, security, typescript, verifiable-credentials, w3c-vc
- Language: Go
- Homepage: https://agentreceipts.ai
- Size: 10 MB
- Stars: 18
- Watchers: 0
- Forks: 4
- Open Issues: 38
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Security: SECURITY.md
- Roadmap: ROADMAP.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Agent Receipts
**Cryptographically signed audit trails for AI agent actions**
[](https://github.com/agent-receipts/ar/actions/workflows/sdk-go.yml)
[](https://github.com/agent-receipts/ar/actions/workflows/sdk-ts.yml)
[](https://github.com/agent-receipts/ar/actions/workflows/sdk-py.yml)
[](LICENSE)
| | |
|---|---|
| **Project site & docs** | [agentreceipts.ai](https://agentreceipts.ai) |
| **Daemon setup & migration guide** | [agentreceipts.ai/getting-started/daemon-setup/](https://agentreceipts.ai/getting-started/daemon-setup/) |
| **API reference** | [Go](https://agentreceipts.ai/sdk-go/api-reference/) · [TypeScript](https://agentreceipts.ai/sdk-ts/api-reference/) · [Python](https://agentreceipts.ai/sdk-py/api-reference/) |
| **Blog** | [Your AI Agent Just Sent an Email](https://jongerius.solutions/post/your-ai-agent-just-sent-an-email/) · [Every MCP Tool Call My AI Makes Now Gets a Signed Receipt](https://jongerius.solutions/post/auditing-github-mcp-agent-receipts/) |
| **Go** | [sdk/go](https://pkg.go.dev/github.com/agent-receipts/ar/sdk/go) · [mcp-proxy](https://pkg.go.dev/github.com/agent-receipts/ar/mcp-proxy) · [dashboard](https://pkg.go.dev/github.com/agent-receipts/dashboard) |
| **npm** | [@agnt-rcpt/sdk-ts](https://www.npmjs.com/package/@agnt-rcpt/sdk-ts) |
| **PyPI** | [agent-receipts](https://pypi.org/project/agent-receipts/) |
---
## Start here
The fastest way to try Agent Receipts is to put [`mcp-proxy/`](mcp-proxy/) in front of an MCP server you already use.
In one step, you get:
- Signed receipts for every tool call
- A tamper-evident audit chain you can verify later
- Risk scoring and policy hooks without changing the client or server
If you want to audit GitHub MCP in a real agent workflow, start with:
- [Claude Desktop integration](https://agentreceipts.ai/mcp-proxy/claude-desktop/)
- [Claude Code integration](https://agentreceipts.ai/mcp-proxy/claude-code/)
- [Codex integration](https://agentreceipts.ai/mcp-proxy/codex/)
## What is this?
Agent Receipts is an open protocol and set of SDKs for producing cryptographically signed, tamper-evident records of AI agent actions. Every action an agent takes -- API calls, tool use, data access -- gets a verifiable receipt that can be audited later.

## Project layout
| Project | Description |
|---------|-------------|
| [`docs/adr/`](docs/adr/) | Architecture Decision Records |
| [`spec/`](spec/) | Protocol specification, JSON schemas, governance |
| [`sdk/go/`](sdk/go/) | Go SDK |
| [`sdk/ts/`](sdk/ts/) | TypeScript SDK |
| [`sdk/py/`](sdk/py/) | Python SDK |
| [`daemon/`](daemon/) | Signing daemon — out-of-process key custody, shared audit chain |
| [`mcp-proxy/`](mcp-proxy/) | MCP proxy with receipt signing, policy engine, intent tracking |
| [`cross-sdk-tests/`](cross-sdk-tests/) | Cross-language verification tests |
| [dashboard](https://github.com/agent-receipts/dashboard) | Local web UI for browsing and verifying receipt databases |
| [openclaw](https://github.com/agent-receipts/openclaw) | Agent Receipts plugin for OpenClaw |
## 10-minute audited MCP quick start
Install the proxy:
```bash
go install github.com/agent-receipts/mcp-proxy/cmd/mcp-proxy@latest
```
Wrap any MCP server:
```bash
mcp-proxy node /path/to/mcp-server.js
```
Then point your agent client at the proxy instead of the raw server:
- [Claude Desktop setup](https://agentreceipts.ai/mcp-proxy/claude-desktop/)
- [Claude Code setup](https://agentreceipts.ai/mcp-proxy/claude-code/)
- [Codex setup](https://agentreceipts.ai/mcp-proxy/codex/)
Once your agent makes tool calls, inspect the signed audit trail:
```bash
mcp-proxy list
mcp-proxy inspect
mcp-proxy verify --key pub.pem
```
## SDK quick start
> **Not for production.** The snippets below keep the signing key inside the
> agent process. Anyone with code execution in the agent can forge receipts. For
> real deployments, use the
> [daemon-mediated path](https://agentreceipts.ai/getting-started/daemon-setup/),
> where the daemon owns the key and your app only sends events over a socket.
### Go
```bash
go get github.com/agent-receipts/ar/sdk/go
```
```go
import "github.com/agent-receipts/ar/sdk/go/receipt"
keys, _ := receipt.GenerateKeyPair()
unsigned := receipt.Create(receipt.CreateInput{
Issuer: receipt.Issuer{ID: "did:agent:my-agent"},
Principal: receipt.Principal{ID: "did:user:alice"},
Action: receipt.Action{Type: "filesystem.file.read", RiskLevel: receipt.RiskLow},
Outcome: receipt.Outcome{Status: receipt.StatusSuccess},
Chain: receipt.Chain{Sequence: 1, ChainID: "chain_1"},
})
signed, _ := receipt.Sign(unsigned, keys.PrivateKey, "did:agent:my-agent#key-1")
```
### TypeScript
```bash
npm install @agnt-rcpt/sdk-ts
```
```typescript
import {
createReceipt,
generateKeyPair,
signReceipt,
} from "@agnt-rcpt/sdk-ts";
const keys = generateKeyPair();
const unsigned = createReceipt({
issuer: { id: "did:agent:my-agent" },
principal: { id: "did:user:alice" },
action: { type: "filesystem.file.read", risk_level: "low" },
outcome: { status: "success" },
chain: { sequence: 1, previous_receipt_hash: null, chain_id: "chain_1" },
});
const signed = signReceipt(unsigned, keys.privateKey, "did:agent:my-agent#key-1");
```
### Python
```bash
pip install agent-receipts
```
```python
from agent_receipts import (
create_receipt, generate_key_pair, sign_receipt,
CreateReceiptInput, Issuer, Principal, Outcome, Chain,
)
from agent_receipts.receipt.create import ActionInput
keys = generate_key_pair()
unsigned = create_receipt(CreateReceiptInput(
issuer=Issuer(id="did:agent:my-agent"),
principal=Principal(id="did:user:alice"),
action=ActionInput(type="filesystem.file.read", risk_level="low"),
outcome=Outcome(status="success"),
chain=Chain(sequence=1, previous_receipt_hash=None, chain_id="chain_1"),
))
signed = sign_receipt(unsigned, keys.private_key, "did:agent:my-agent#key-1")
```
See the [Python SDK README](sdk/py/README.md) for the full quick start and daemon delivery.
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and PR guidelines.
## Security
See [SECURITY.md](SECURITY.md) to report vulnerabilities. The [threat model](docs/threat-model.md) documents trust boundaries, in-scope and out-of-scope threats, and the mitigation roadmap.
## License
Apache License 2.0 -- see [LICENSE](LICENSE).
The protocol specification in `spec/` is licensed under MIT.