| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
standards workspaces build + test / aac-rs (push) Successful in 35s
standards workspaces build + test / joule-code-rs (push) Successful in 41s
standards workspaces build + test / jouleclaw-rs (push) Failing after 2m32s
standards workspaces build + test / joulecontract-rs (push) Successful in 39s
standards workspaces build + test / map-rs (push) Successful in 33s
standards workspaces build + test / mesh-rs (push) Successful in 29s
standards workspaces build + test / openpay (push) Successful in 1m43s
standards workspaces build + test / eoc-rs (push) Successful in 1m55s
standards workspaces build + test / jcp-rs (push) Successful in 1m22s
standards workspaces build + test / proof-rs (push) Successful in 2m53s
standards workspaces build + test / sandbox-rs (push) Successful in 2m15s
standards workspaces build + test / smart-byte-rs (push) Successful in 2m35s
standards workspaces build + test / arl-rs (push) Successful in 2m33s
standards workspaces build + test / joule-ui-rs (push) Successful in 2m32s
standards workspaces build + test / jouledesk-rs (push) Successful in 2m29s
standards workspaces build + test / joulehook-rs (push) Successful in 2m22s
standards workspaces build + test / sense-rs (push) Successful in 2m10s
`joulehook/conformance/v1/` was the one pack in the repo that nothing read -- no test, not even a generator. Its README advertises the vectors as reproducible, so anyone building an adapter is told to check against them, while nothing checked that the reference gate still matched them. Adds crates/joulehook-hook/tests/conformance.rs, which reads decisions.json from disk -- the same bytes a third party would -- and drives the real gate binary once per (case, host), asserting the decision the pack says every conformant adapter MUST emit. All eight pairs pass: claude-code permissionDecision, cursor permission, windsurf exit-code-2, antigravity allow_tool, for both a granted and an ungranted tool. Only the decision is asserted; the pack states the reason text is not normative, so pinning it would turn a copy-edit into a CI failure. Falsified rather than assumed: flipping the pack's `expected` for the Read case makes the test fail with the mismatching host named, so it is bound to the pack and not to hardcoded values. It also asserts the pair count, so a wrong pack path fails loudly instead of silently checking nothing. `deny-receipt.hex` is NOT asserted, and the file says why. The pack pins it at 598 bytes "byte-identical on every run"; the gate is still byte-deterministic -- repeated runs agree exactly -- but now emits 677, because the JCR-1 payload gained a `payload_hash` field, taking the CBOR map from 15 entries to 16. Decoding both yields the same verdict, deny_reason, steward, subject and verified, so receipt.json's claims still hold: this is a stale vector, not a regression. Refreshing a published signed security vector is a normative change to a public pack, so it is left to a maintainer rather than quietly regenerated. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
| .. | ||
| conformance/v1 | ||
| joulehook-rs | ||
| LICENSE | ||
| LICENSE-SPEC | ||
| README.md | ||
| SPEC.md | ||
JouleHook — Metered, Gated, Attested Agent Work in Any Host
Provisional name — the steward may rename; the profile string joulehook/1 and the
seam names are the stable surface.
The energy-accounting and methodology-gating you build for one coding agent is worth little if it's trapped in that one agent. JouleHook carries it into the editors developers already use — Claude Code, Cursor, Windsurf, Antigravity, Zed, JetBrains, OpenCode — without forking any of them.
It rests on one finding: no host lets an extension observe its agent's tokens or intercept its native tools — but every host exposes the same three seams, and JouleHook is the normative contract over them:
A per-action gate, a model-call meter, and a receipt surface. Bind those three to a decide-outside-the-model grant check, an honest energy meter, and a sealed receipt, and any agent's work becomes a metered, gated transaction — from one core.
JouleHook does not replace the host's agent. It is the host-binding layer for the
sibling standards: JCP decides and grants, Mesh meters at the model front
door, jcp-efficiency is the receipt. JouleHook adds the seam contract and the
per-host conformance profiles that make them portable.
- Licence: Apache-2.0 for reference code (
LICENSE); CC-BY-4.0 for specification text (LICENSE-SPEC). - Status: v0.1.0 draft. Specification published (
SPEC.md); reference workspacejoulehook-rs/ships the gate binding (joulehook-hook) for theclaude-codeandhooks-familyprofiles — one PreToolUse hook that gates by JCP capability (decided outside the model, every decision sealed) and speaks the native decision format of Claude Code, Cursor, Windsurf, and Antigravity behind a--hostselector;joulehook-statusline, the in-editor joule meter (honestestfrom Claude Code's own tokens); andjoulehook-mcp, an MCP server that surfaces the sealed decisions as verified, human-readable resources in any MCP-speaking editor. Theclaude-codefullprofile installs today (joulehook-rs/INSTALL.md); the enforcing Mesh-proxy meter + a site land next.
The three seams
| Seam | Host mechanisms | What rides it |
|---|---|---|
| Gate | PreToolUse-hook family; ACP request_permission |
allow / deny / rewrite, decided outside the model, sealed |
| Meter | base_url proxy; OTel gen_ai.* |
tokens→joules, honest provenance, enforceable joule ceiling |
| Receipt | MCP resources; status line; panel | hash-chained, verifiable efficiency/1 + decision receipts |
Conformance profiles
claude-code (reference) · hooks-family (Cursor / Windsurf / Antigravity) · acp
(Zed / JetBrains / Neovim) · opencode · cline · vscode (Open-VSX) · meter-only
(Continue, any OTel host). See SPEC.md §6.
The honest limit
A host-side adapter alone cannot meter the host agent's own tokens; a complete energy
figure requires the Meter seam (proxy or OTel). An adapter that claims whole-session
energy without a bound meter is non-conformant (SPEC.md §7).
What's here
joulehook/
├── SPEC.md — the normative standard (§1–§9)
├── README.md — this file
├── joulehook-rs/ — reference implementation
│ └── crates/
│ ├── joulehook-hook — ✅ the PreToolUse gate CLI for the hook family
│ │ (Claude Code / Cursor / Windsurf / Antigravity via --host;
│ │ wraps jcp-bridge::LocalToolGate for the JCP check + seal)
│ │ + joulehook-statusline — ✅ the in-editor joule meter
│ ├── joulehook-mcp — ✅ the receipt-surface MCP server (sealed decisions →
│ │ verified MCP resources, any MCP-speaking editor)
│ ├── joulehook-meter — ✅ the meter-seam binding: inject a grant's budget as
│ │ the Mesh joule ceiling (enforce) + bridge Mesh's
│ │ usage.energy into an efficiency/1 receipt
│ └── joulehook-proxy — ✅ the deployable meter: an OpenAI-shaped base_url
│ proxy that caps + seals every model call
└── conformance/v1/ — ✅ reproducible vectors: per-host decision encodings
(decisions.json) + a byte-deterministic sealed deny receipt
(deny-receipt.hex + receipt.json, verified-decode)
JouleHook is one of the Transaction Science open standards. Transaction Science is the steward, not the proprietor.