open-standards/jouledesk
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science db65d20be0 sec: close the advisory backlog across every workspace, and move the WASM sandbox off a runtime with three critical escapes
`cargo audit` over all 47 workspace lockfiles reported 142 vulnerability
instances. The dangerous ones were not exotic: the S2 executor was pinned to
wasmtime 43.0.2, which carries eight advisories including RUSTSEC-2026-0379
(9.9), -0327 (9.3) and -0269 (8.8). That crate is the one component whose whole
job is to execute untrusted guest code, so a sandbox-escape class defect there
is not a dependency hygiene matter — it is the confinement claim itself.

wasmtime moves 43.0.2 -> 49.0.4, the single version every one of the eight
advisories names as patched (50.0.0 exists but no advisory lists it as fixed,
so it is not yet the safe choice). WASMTIME_VERSION is updated with it: the
constant is attested into the mechanism commitment under SPEC §7.9, so leaving
it stale would attest confinement to a runtime that did not run. The crate's
own `wasmtime_version_matches_the_lockfile` test enforces that pairing.

The rest are semver-compatible bumps carrying no API change: rustls 0.23.46,
rustls-webpki 0.103.16, webpki-roots/webpki-root-certs 1.0.10, quinn-proto
0.11.18 (RUSTSEC-2026-0340/-0343, both 7.5), tokio 1.54.1, crossbeam-epoch
0.9.20, rtrb 0.3.5.

Not fixed here, and deliberately so rather than silently: zip (>=9.0.0),
hpke-rs (>=0.6.0), quick-xml (>=0.41.0) and libcrux-kem (>=0.0.10) are all
semver-major moves, three of them transitive, so each needs its dependent
assessed on its own. rsa RUSTSEC-2023-0071 has no fixed version at all.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-22 09:44:59 -04:00
..
conformance/v1 jouledesk: refresh the published receipt to jcp/2, and hold it byte for byte 2026-09-30 14:16:01 -04:00
jouledesk-rs sec: close the advisory backlog across every workspace, and move the WASM sandbox off a runtime with three critical escapes 2026-10-22 09:44:59 -04:00
LICENSE jouledesk: rename Joule Tag → Joule Desk (naming call), part of the Joule Table umbrella 2026-07-05 07:30:53 -04:00
LICENSE-SPEC jouledesk: rename Joule Tag → Joule Desk (naming call), part of the Joule Table umbrella 2026-07-05 07:30:53 -04:00
README.md no-vanity-metrics: clear the three failures blocking the gate on main 2026-07-23 00:17:08 -04:00
SPEC.md jouledesk, joulehook: the docs say a figure carries its meter's grade, not "measured" 2026-10-10 18:10:28 -04:00

Joule Desk — The Open, Energy-Accounted Agent Teammate

The agent-teammate shape — a persistent principal you tag in a shared channel to delegate work under scoped access — is the right shape. Joule Desk is the open standard for it, with the three things that shape needs and a closed product cannot give you:

Authority that is a signed, enforced grant — not an admin setting. Work that is energy-metered and attested — not merely reported. And a shared, signed ledger the whole channel can verify — not just watch.

You add @joule to a channel; an admin issues it a grant chain (the tools and data it may touch, and a joule budget). Any member tags it to delegate a task; it decides every action against those grants outside the model, runs the work in an attested sandbox, meters the energy, and seals every decision and completed unit to a ledger anyone can verify — which principal did what, under which capability, at what cost.

Joule Desk is the collaboration/teammate binding of Joule Table (jt.transaction.science); its sibling binding Joule Hook covers coding editors — and Joule Desk's own editor class is Joule Hook. It does not reinvent — it composes the sibling standards: JCP (identity, grants, the shared channel, orchestration), jcp-efficiency (the energy receipt), Sandbox (attested execution), and Joule Hook (when the teammate works in a coding editor). It is one of the Transaction Science open standards.

  • Licence: Apache-2.0 for reference code (LICENSE); CC-BY-4.0 for the specification text (LICENSE-SPEC).
  • Status: v0.1.0 draft. Specification published (SPEC.md); reference workspace jouledesk-rs/ ships the teammate loop (Teammate + Skill over jcp-orchestrate + jcp-efficiency): grant a skill → tag it → authorise outside the model → seal to a per-receipt-verifiable ledger, with efficiency/1 energy accounting (energy_summary → joules per completed unit, charging waste).

What Joule Desk adds over a closed teammate

Property Closed teammate Joule Desk
Authority admin config, trusted a signed grant, decided outside the model, enforced
Work integrity reported attested (Sandbox)
Energy none efficiency/1 — µJ + cost per completed unit + waste
Audit visible verifiable — a signed ledger anyone can check
Budget a quota a debited, settle-able joule budget
Portability one product any surface (chat / forge / editor / api), one standard

Conformance profiles (surfaces)

chat (team chat + mentions) · forge (git issues/PRs) · editor (a coding editor via JouleHook) · api (a service). See SPEC.md §8.

The reference jouledesk-bind binary targets real discrete-message services — Slack, GitHub, GitLab, Discord, Matrix, and a neutral shape — each a thin parse+render pair over one event→tag→reply transform:

echo '{"comment":{"user":{"login":"alice"},"body":"@joule summarize the thread"}}' \
  | jouledesk-bind --surface github
# → {"body":"✅ **@joule** completed it, @alice — decision sealed. _ledger: 1 decisions, all verified…_"}

And a real-time (media) binding class (room, SPEC.md §8.1) for when @joule joins a live voice/video meeting — Zoom, Teams, Meet, or a LiveKit/WebRTC room. The loop is four seams — join under a signed grant, gate each turn outside the model, meter each model call at the model-call boundary, seal one efficiency/1 per session anchored to the room. RealtimeSession (jouledesk-rs) is the reference (target: LiveKit Agents); its meter reuses the same model-call proxy that meters a text session, so the joule ceiling holds whether @joule is typing or talking. examples/room runs a live call — turns gated outside the model, metered at the boundary, and sealed into one verifiable session receipt.

What's here

jouledesk/
├── SPEC.md          — the normative standard (§1–§10)
├── README.md        — this file
├── jouledesk-rs/     — ✅ reference implementation: the teammate loop (Teammate + Skill +
│                      parse_mention/tag_mention for the chat/forge binding, §8) over
│                      jcp-orchestrate. `examples/channel` runs a multiplayer channel;
│                      `examples/vector` regenerates the conformance vector.
└── conformance/v1/  — ✅ a byte-deterministic sealed decision receipt (summarize-allow.hex)
                        + its verified-decode target (receipt.json)

Transaction Science is the steward, not the proprietor: the wire and the right to fork are public.