open-standards/jouleclaw
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 04086d2e38
All checks were successful
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 6s
wai-quantum WebGPU member / does this change touch it (pull_request) Successful in 8s
energy meters on real hardware / RAPL and NVML on jetson-hub (pull_request) Successful in 41s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 52s
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (pull_request) Successful in 1m11s
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 1m31s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m15s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 3m20s
wai-quantum WebGPU member / member · integrated GPU, Vulkan (framework-128gb) (pull_request) Successful in 7m22s
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 8m24s
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 12m15s
wai-quantum WebGPU member / member · discrete GPU, Vulkan (jetson-hub) (pull_request) Successful in 18m16s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 13m56s
standards workspaces build + test / jouledesk-rs (jouledesk/jouledesk-rs, jouledesk-rs, macos) (pull_request) Successful in 6m34s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 5m7s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 3m10s
jouleclaw: bound a GPU energy counter from below, not only above
`GpuPlausibility` judged an NVML cumulative-energy counter against the board's
own telemetry in one direction only. Its three verdicts were `Plausible`,
`CounterOverRate` ("ran faster than the board can draw") and
`BoardTelemetryUnusable`. Nothing caught a counter reading **low**.

That is the wrong direction to guard. By this family's own doctrine (jcp/SPEC
§5): "Under-reporting is the unsafe direction at a ceiling, because it admits
work the budget cannot cover." A counter running fast fails safe — it spends a
budget sooner. A counter reading low is graded `HwShunt` and then spends an
energy ceiling it is not measuring. jouleclaw/SPEC §1.3 already refused a
counter "republished in lumps", but nothing implemented it: such a counter
*advances*, so the sustained-advance liveness probe calls it live while it
accrues a fraction of the energy.

`CounterUnderRate` closes it, bounded by the **same** board telemetry the
ceiling bound already uses, so no threshold is invented:

    floor = (mean_usable_draw - GPU_DRAW_SLACK_MW) / GPU_UNDER_FACTOR

The slack comes off the draw *before* the division, so the floor collapses to
zero at or below 5 W of mean draw: on an idle board a correct counter accrues
almost nothing, and refuting it would be noise rather than a finding. The
factor is deliberately looser than `GPU_DRAW_FACTOR` because the draw readings
are one-second averages, so a bursty load idle between samples really does
integrate to less than its sampled mean. The verdict carries the yardstick it
was judged against, so the judgement can be re-made against a different factor.

It ranks **above** a proven overrun: both refute, but only this one admits work
a budget cannot cover, so where one GPU of a probe over-reports and another
under-reports, the under-report is what an operator must act on. Among two
under-reporting GPUs the ordering is by shortfall, not by rate.

Two things found while doing it, beyond the reported gap:

- **`_ => CounterLiveness::Live` in the verdict mapping** meant a newly added
  verdict would silently become *live* — and "unrecognised verdict is
  admissible" is the unsafe default. That match is now exhaustive, so a future
  arm must be graded deliberately or the crate does not compile.
- **The wiring was untested.** The existing test covered
  `plausible_gpu_counter` and the over-rate path through `GpuWatch::liveness`,
  but a verdict that never reaches `CounterLiveness` changes nothing. Added a
  test driving an under-reporting GPU through the probe, whose discriminating
  half is the *same slow counter beside an idle board* — which must stay live,
  because nothing about the counter changed, only the yardstick.

`mode_for` needed no change: `Implausible` already falls back to the vendor
power integral and grades `ModelBased`, so the fix completes itself once the
verdict exists and maps. SPEC §1.3 now states the bound is two-sided, that it
refutes and never verifies, that an indeterminate is not hardware-graded, and
that it must not fire near idle. Doc comments that described the bound as
one-directional are corrected.

Figures throughout are the jetson-hub RTX 4050's own, as the existing test's
already are.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-19 20:26:38 -04:00
..
conformance/v1 jouleclaw SPEC.md: normative §§8-12 for waves 12-21 2026-06-02 10:42:25 -04:00
jouleclaw-rs jouleclaw: bound a GPU energy counter from below, not only above 2026-10-19 20:26:38 -04:00
scales compliance: publish the EU draft PUE bands as a sourced data pack, not as code 2026-09-06 06:24:25 -04:00
vocab jouleclaw: wave-24 — contract + handoff + mission + value report 2026-06-03 02:35:34 -04:00
LICENSE jouleclaw: standard skeleton + Phase 1 foundation crates 2026-05-26 09:55:11 -04:00
LICENSE-SPEC licences: ship the Apache-2.0 text the code already declares 2026-10-09 17:22:32 -04:00
README.md licences: ship the Apache-2.0 text the code already declares 2026-10-09 17:22:32 -04:00
ROADMAP.md docs: strip vanity metrics from README + ROADMAP 2026-06-02 07:30:50 -04:00
SPEC.md jouleclaw: bound a GPU energy counter from below, not only above 2026-10-19 20:26:38 -04:00

JouleClaw — Energy-Optimized AI Runtime

The substrate for AI that costs Joules, not tokens.

Capability per Joule, not capability per parameter.

What JouleClaw is

JouleClaw is a pure-Rust, omni-modal AI runtime + harness + agentic layer governed by Transaction Science as an open standard (5th in the open-standards quartet, alongside OpenPay, Smart Byte, EOC, and WAI).

Every operation JouleClaw performs walks an explicit energy-tiered cascade, top to bottom, stopping at the first stage that closes the query:

Tier Name Cost class What runs here
L0 Cache picojoules Content-addressed cache hits
L1 Lawful nanojoules Deterministic, pre-compiled primitive (text/code only)
L2 Embed sub-millijoules Matryoshka embeddings + nearest-neighbor + hybrid search
L3 Model joules Local SSM / ternary / multimodal / diffusion / etc.
L4 Wire tens of joules Remote frontier RPC (escape hatch only)

L1 (Lawful) is only meaningful for text and code modalities. For image, audio, video and 3D generation, the cascade collapses to L0 / L2 / L3 / L4 — the energy savings come from caching plus dispatch to the cheapest model that meets the quality bar.

Why JouleClaw exists

The mainstream "agentic AI" ecosystem treats inference as the entry point. Every state shift, every tool call, every routing decision runs through a 70-billion-parameter stochastic engine, burning kilojoules to do work that deterministic compute or a hot cache could resolve for microjoules.

JouleClaw inverts the default. Inference is the last resort, not the first. Frozen model weights are less trustworthy than current world state; fresh, provenance-stamped retrieval beats synthesis from training cuts. Every operation is metered in microjoules where the hardware permits it, and in millijoules where it doesn't — the spec is honest about the floor on every platform.

The thermodynamic circuit breaker is the safety mechanism. Set an energy budget; when measured consumption exceeds the budget, the breaker trips and the operation halts. Hallucination loops cannot survive an honest joule ledger.

What's here

Path Contents
SPEC.md JouleClaw v1 spec — cascade tiers, energy contract, receipt
CHARTER.md Stewardship pattern (shared across open-standards)
jouleclaw-rs/ Apache-2.0 Rust reference implementation
spec/ Tier specifications, energy provenance, receipt format
conformance/v1/ Signed wire vectors for cross-implementation verification

Reference implementation

jouleclaw-rs/ is the Apache-2.0 reference implementation in Rust. It runs on Apple Silicon (M3/M4/M5 with UMA + Metal 4 Tensor APIs), AMD Strix Halo / Ryzen AI Max, Intel Lunar Lake, NVIDIA Jetson, and discrete NVIDIA / AMD GPUs.

It is omni-modal: text, code, vision, audio, video, image diffusion, 3D Gaussian splatting, and cross-modal fusion all dispatch through the same energy-tiered cascade.

The MCP tool surface is a JCP consumer: jouleclaw-jcp wraps any jouleclaw-mcp metered tool so every dispatch is decided by the JCP runtime against a signed, metered Grant before a byte reaches the tool — the tool's identity is the content-addressed resource, the call's energy estimate is debited from the grant's joule budget, and every decision (allow and deny alike) seals as a JCR-1 receipt. An injected instruction can name an ungranted tool; it cannot make the gate dispatch it.

Status

v0.1.0 reference implementation in active development. The spec is draft status. Cross-implementation conformance vectors will land with v1.0.0.

License