v0.8.0-alpha.1
Pre-releasev0.8.0-alpha.1 — Daemon-backed cutover (alpha)
⚠️ Pre-release alpha. Expect breaks. The agent-receipts stack is moving from in-process signing to a separateagent-receipts-daemonper ADR-0010 and #236. This release lets operators soak the new architecture before the stable cut.
What's changing
An agent process auditing itself is not a meaningful audit. v0.8 splits signing and storage into a separate agent-receipts-daemon running as its own OS user. Every emitter (Go, TS, Py SDKs, mcp-proxy, OpenClaw plugin) becomes a thin fire-and-forget AF_UNIX client. The daemon is sole owner of Ed25519 keys, the SQLite chain database, and RFC 8785 canonicalization.
This fixes two concrete bugs that no smaller intervention can:
- Concurrent
mcp-proxyinstances racing on chain tail allocation (UNIQUEindex conflict atseq=N+1) - Per-session listener collisions (
bind: address already in use)
Why a minor bump
The project is pre-1.0, so a breaking change lands as a minor bump. v1.0 is a stability commitment we're not ready to make yet. Lower-versioned packages skipped minors deliberately to align all six packages at one number.
Components
| Package | Tag | Install |
|---|---|---|
agent-receipts-daemon |
daemon/v0.8.0-alpha.1 |
go install github.com/agent-receipts/ar/daemon/cmd/agent-receipts-daemon@v0.8.0-alpha.1 (or brew install --HEAD agent-receipts/tap/agent-receipts-daemon) |
sdk/go |
sdk/go/v0.8.0-alpha.1 |
go get github.com/agent-receipts/ar/sdk/go@v0.8.0-alpha.1 |
mcp-proxy |
mcp-proxy/v0.8.0-alpha.1 |
Download tarball from the mcp-proxy release page (Homebrew tap stays on stable) |
@agnt-rcpt/sdk-ts |
sdk-ts-v0.8.0-alpha.1 |
pnpm add @agnt-rcpt/sdk-ts@alpha |
agent-receipts (PyPI) |
sdk-py-v0.8.0a1 |
pip install --pre agent-receipts |
@agnt-rcpt/openclaw |
v0.8.0-alpha.1 (own repo) |
npm install @agnt-rcpt/openclaw@alpha |
Migration
- Install and start
agent-receipts-daemon. On macOS run it as a long-lived process for soak; launchd/systemd integration ships in a future release (#346). - Update each emitter package to
v0.8.0-alpha.1(PyPI:0.8.0a1). - Existing chains are abandoned per ADR-0010 OQ2: the daemon starts fresh at
seq=1using new default DB and key paths. If you need long-term verification of pre-cutover receipts, preserve the old SQLite databases and public keys offline. - The legacy in-process API is still present in this alpha. The daemon path is the supported path; in-process signing is removed at the stable cut.
- OpenClaw daemon forwarding is opt-in via
daemonForwarding: trueconfig. Off by default because the wire path crosses a process boundary — stricter trust contract than the in-processparameterDisclosuresetting.
Soak
Help us soak this. Open issues for anything surprising. Particular interest:
- Drop counter /
events_droppedsynthesis: not yet implemented; emitters silently drop on connect or write timeout. We want to hear about real drops in real workloads. - Cross-platform peer-credential capture: macOS uses
LOCAL_PEERCRED+LOCAL_PEEREPID; Linux usesSO_PEERCRED. CI exercises both, but real-world processes (sandboxed Codex, short-lived hooks) find edge cases. - OpenClaw
daemonForwardingopt-in: feedback on the operator-facing language welcome.
Resolved open questions (ADR-0010)
- OQ1 — socket path on macOS:
$TMPDIR/agentreceipts/events.sock(Linux:$XDG_RUNTIME_DIR/agentreceipts/events.sockor/run/agentreceipts/events.sock) - OQ2 — chain migration: abandon old chains; daemon starts fresh
- OQ3 — cutover sequencing: single-shot release (this one)
- OQ4 —
session_idallocation: stable per emitter, host-supplied or UUID v4 at construction; persistent across daemon reconnects
Known follow-ups (filed)
- #345 — sdk/py: derive
_version.pyfromimportlib.metadata - #346 — daemon: add
release-daemon.ymlbinary release pipeline before-beta.1 - agent-receipts/openclaw#128 — openclaw
release.shpre-release support