open-standards/joulehook
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science beec37f47c
All checks were successful
jouleclaw fabrics / cuda (linux, RTX 4050 + Vulkan loader) (pull_request) Successful in 18s
jouleclaw fabrics / vulkan (linux, RTX 4050 + Vulkan loader) (pull_request) Successful in 17s
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Successful in 1m37s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 1m44s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 8s
WAI conformance / does this change touch it (pull_request) Successful in 11s
WAI energy receipts / does this change touch it (pull_request) Successful in 5s
WAI JPEG-AI whole decode (pinned inputs, required) / does this change touch it (pull_request) Successful in 10s
WAI neural sink gates / does this change touch it (pull_request) Successful in 5s
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Successful in 5s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 1m1s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 5s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 5s
wai-quantum WebGPU member / does this change touch it (pull_request) Successful in 5s
WAI mbt2018_mean integer decode (regenerated vectors) / does this change touch it (pull_request) Successful in 5s
wai-web wasm32 / does this change touch it (pull_request) Successful in 5s
standards workspaces build + test / jouleclaw-rs (-nodebug, jouleclaw/jouleclaw-rs, -p jouleclaw-energy --features rapl,nvml, jouleclaw-rs, linux-arm64, -C target-feature=+fp16) (pull_request) Successful in 3m28s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 4m12s
standards workspaces build + test / joulecontract-rs (joulecontract/joulecontract-rs, joulecontract-rs, linux-arm64, true) (pull_request) Successful in 58s
standards workspaces build + test / mesh-rs (mesh/mesh-rs, -p mesh-engine-gguf -p mesh-openai --features mesh-engine-gguf/gguf,mesh-openai/server, mesh-rs, linux-arm64) (pull_request) Successful in 58s
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 12m57s
wai-quantum WebGPU member / member · integrated GPU, Vulkan (framework-128gb) (pull_request) Successful in 7m38s
standards workspaces build + test / openpay (openpay, openpay, linux-arm64) (pull_request) Successful in 3m41s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 15s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 12s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 24s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m20s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 16m38s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m19s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 7m43s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 28s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m50s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m39s
wai-quantum WebGPU member / member · discrete GPU, Vulkan (jetson-hub) (pull_request) Successful in 28m23s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 34m50s
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Successful in 2m44s
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 5s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 5s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 55s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 5s
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (pull_request) Successful in 59s
standards workspaces build + test / jcp-rs (jcp-conformance, jcp/jcp-rs, -p jcp-energy --features nvml, jcp-rs, linux) (pull_request) Successful in 2m4s
standards workspaces build + test / eoc-rs (eoc/eoc-rs, -p eoc-meter --features cuda, eoc-rs, linux) (pull_request) Successful in 2m13s
standards workspaces build + test / joule-ui-rs (joule-ui/joule-ui-rs, joule-ui-rs, linux) (pull_request) Successful in 1m13s
standards workspaces build + test / joulehook-rs (joulehook/joulehook-rs, joulehook-rs, linux) (pull_request) Successful in 1m12s
standards workspaces build + test / proof-rs (proof-conformance, proof/proof-rs, proof-rs, linux, true) (pull_request) Successful in 1m33s
standards workspaces build + test / sandbox-rs (sandbox-conformance, sandbox/sandbox-rs, -p sandbox-tee --features amd-kds,intel-pcs, sandbox-rs, linux) (pull_request) Successful in 3m0s
standards workspaces build + test / smart-byte-rs (smart-byte/smart-byte-rs, smart-byte-rs, linux) (pull_request) Successful in 4m9s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m13s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 29s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 10m20s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 18m57s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 1m23s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 1m40s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 6m54s
wai-pack / wai-pack · linux (pull_request) Successful in 1m34s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m35s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 3m8s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m5s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m20s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 5m23s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 3m1s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m42s
jouleclaw fabrics / metal (macOS, Apple GPU) (pull_request) Successful in 1m25s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 11m19s
standards workspaces build + test / jouledesk-rs (jouledesk/jouledesk-rs, jouledesk-rs, macos) (pull_request) Successful in 5m13s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 23m35s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 26s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 58s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 7m45s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 2m52s
wai-pack / wai-pack · macos (pull_request) Successful in 1m17s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 3m23s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 3m0s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 1m43s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 6m45s
Security: patched crate versions across the workspaces; wasmtime 50 in the sandbox; quick-xml 0.42 where outside XML is parsed
Every workspace lockfile was checked against the RustSec database as of 2026-10-22.
What our code reaches is fixed here.

- wasmtime 43 -> 50 in sandbox-rs, whose wasm executor runs untrusted guests:
  - RUSTSEC-2026-0379 (Cranelift on aarch64 can jump to the wrong target on a large
    br_table);
  - RUSTSEC-2026-0327 (an unvalidated callback result count overflows a native stack);
  - RUSTSEC-2026-0269 (filesystem sandbox escape through trailing slashes);
  - and the rest of the 2026 wasmtime advisories.
  The core module API it uses compiles unchanged. WASMTIME_VERSION, which attestations
  record, is now 50.0.0, as are the spec's example and two test samples.
- Compatible updates in 13 workspaces:
  - rustls 0.23.46 (RUSTSEC-2026-0285, 0346, 0348, 0349);
  - rustls-webpki 0.103.16, webpki-roots 1.0.10 and webpki-root-certs 1.0.10
    (distrusted emSign intermediates, RUSTSEC-2026-0381 to 0383);
  - quinn-proto 0.11.19 (remote panics and memory exhaustion, RUSTSEC-2026-0185, 0338
    to 0343);
  - h2 0.4.20 (RUSTSEC-2026-0258);
  - tokio 1.54.1 (RUSTSEC-2026-0384);
  - crossbeam-epoch 0.9.21 (RUSTSEC-2026-0204).
- quick-xml 0.36 -> 0.42 (RUSTSEC-2026-0194 and 0195: quadratic duplicate-attribute
  checks and unbounded namespace allocation) where outside XML is parsed:
  - openpay's op-screening sanctions-list updater (OFAC SDN, UN, EU), op-3ds2, op-batch
    and op-iso20022;
  - jouleclaw's OpenVINO IR loader and Maltego TRX parser.
  Each reference (&, &) now arrives as its own event. The parsers gather an
  element's text from both kinds of event and trim it once, so names keep their spaces.
  Attribute values go through normalized_value. The EU parser had kept `&` in
  wholeName literally; it now reads as `&`. New tests cover references in every list
  format and in TRX values, fields and messages.
- joule-code-collab's MLS keying test moves to openmls 0.9.1 (matching joule-moq-mls),
  removing hpke-rs 0.2.0 (RUSTSEC-2026-0069 to 0072) from the lockfile. It was a
  dev-dependency only.
- op-3ds2 drops an unused rsa dependency (RUSTSEC-2023-0071 has no fix).

Left as they are, and why:
- zip < 9 is only a transitive dependency (c2pa, candle, a build helper of livekit). No
  code of ours calls its extract().
- open_board_format reads .obz in memory in a test only. aac-core's import accepts
  stored entries alone, so nothing is inflated.
- rsa via c2pa and sandbox-tee is used for public-key verification, which Marvin does
  not reach.
- h2 0.3 (via hf-hub's reqwest 0.11), hickory-proto 0.25, libcrux-kem 0.0.9 (via
  hpke-rs-libcrux), pyo3 0.28 and rkyv 0.7 (via rust_decimal) are client-side or
  unused paths with no patched release on their lines. They are noted for the next
  dependency round.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 10:12:06 -04:00
..
conformance/v1 joulehook: refresh the published deny receipt to jcp/2, and hold it byte for byte 2026-09-30 14:16:01 -04:00
joulehook-rs Security: patched crate versions across the workspaces; wasmtime 50 in the sandbox; quick-xml 0.42 where outside XML is parsed 2026-10-22 10:12:06 -04:00
LICENSE joulehook: new open standard v0.1.0-draft.1 — metered/gated/attested agent work in any host 2026-07-04 05:42:45 -04:00
LICENSE-SPEC joulehook: new open standard v0.1.0-draft.1 — metered/gated/attested agent work in any host 2026-07-04 05:42:45 -04:00
README.md joulehook: the deployable meter — joulehook-proxy (OpenAI-shaped base_url proxy) 2026-07-04 20:38:32 -04:00
SPEC.md joulehook: new open standard v0.1.0-draft.1 — metered/gated/attested agent work in any host 2026-07-04 05:42:45 -04:00

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 workspace joulehook-rs/ ships the gate binding (joulehook-hook) for the claude-code and hooks-family profiles — 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 --host selector; joulehook-statusline, the in-editor joule meter (honest est from Claude Code's own tokens); and joulehook-mcp, an MCP server that surfaces the sealed decisions as verified, human-readable resources in any MCP-speaking editor. The claude-code full profile 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.