Repository navigation
Releases: JordanNewell/tractum
Release list
tractum v0.5.0
Rebrand from claudeway. Highlights:
- tractum — package, module, CLI (tractum-mcp), and env vars (TRACTUM_*) renamed; wire-format type tags stay
claudeway.*for v0.2–0.4 receipt back-compat - .curt linkage —
build_curt_transcript/link_receipt/emit_curt_decision: bind a signed consensus receipt to .curt transcript evidence (first .curt-native consumer);consensus-receiptextension registered in dot_curt PR #8 - MCP server always signs — ephemeral operator key by default,
TRACTUM_REQUIRE_PINNED_KEY=1loud-fails unset keys,TRACTUM_MCP_DRY_RUN=1keyless mode - Verified end-to-end — docs/mcp-demo.md walks a real MCP sign→verify round-trip; 227 tests
- fix: pin
mcp<2(upstream 2.x renamed FastMCP)
v0.4.0 — per-agent signed statements + k-of-n quorum receipts
[0.4.0] — 2026-10-01
Feature release — per-agent signed statements and k-of-n quorum receipts.
The receipt stops being one operator's claim about what the agents said and
becomes a countable multi-sig: every agent signs its own stance, and anyone
can verify the signatures individually.
Added
- Per-agent signed statements. Every agent in a
Swarmnow gets a
signing keypair (pinned viaAgentConfig.signing_key, otherwise an
ephemeral key is provisioned per swarm) and signs a
claudeway.agent-statement.v1statement over its stance — answer,
confidence, model, role, task, round. Statements ride on
AgentResponse.statementand survive dict round-trips through
Task.result. - v2 receipt payload (
claudeway.consensus.v2). When statements are
present,ConsensusReceipt.from_resultemits a payload carrying the
statements plus aquorumthreshold k (default: unanimous). The
operator's aggregate signature covers the agent signatures too. v1
receipts are produced unchanged when no statements exist — the verifier
handles both forever. verify_receipt_detailed(receipt, expected_operator_pubkey="", expected_agent_pubkeys={})— full verification report: aggregate
signature, per-statement signature/hash checks, statement↔response
cross-checks (response-mismatch:answer/confidence), cross-task replay
detection (task-id-mismatch), operator and per-agent key pinning
(key-mismatch), and the quorum count. Returns aReceiptVerification
with per-statement reasons.- Statement helpers —
SignatureBackend.sign_statement/
verify_statement(implemented once on the ABC, inherited by Ed25519 and
ML-DSA-65 backends; mixed-algorithm statements verify per statement),
plus module-levelsign_statement/verify_statement/
statement_hash. - MCP
verify_consensusupgrade — the tool now accepts optional
expected_operator_pubkey/expected_agent_pubkeysand returns the
full statement-by-statement verdict, not just a boolean.
Security
- New adversarial tests for the statement attack surface: operator
fabrication of statements under fresh keys (caught by per-agent pinning),
statement tampering inside a signed receipt (aggregate hash guard),
cross-task statement replay (task-id-mismatch), statement/response
desync (response-mismatch), and stolen-agent-key isolation. - Honest threat-model note: a signature proves self-consistency, not key
custody. Without per-agent pinning, a malicious operator can mint
self-consistent statements under fresh keys — pinning is what makes
fabrication detectable. Seedocs/THREAT-MODEL.md.
Compatibility
- v1 receipts verify exactly as before;
verify_receiptsemantics are
unchanged. Responses without statements keep their v1 dict shape
byte-for-byte, so existing payload hashes and transparency-log anchors
are unaffected.
v0.3.2 — Maintenance: OIDC + OG image
Maintenance release — CI/docs only, no package behavior change.
Changed
- Publish workflow uses OIDC trusted publishing (no API tokens). PyPI trusted-publisher configuration corrected; the GitHub Actions workflow now mints a short-lived OIDC token at publish time. Removes the need for any long-lived
PYPI_API_TOKENsecret on the repo. - README ships with a canonical Open Graph image and banner. Social previews (Twitter/X, LinkedIn, Slack, Discord) now render the Claudeway card instead of a blank tile.
Chore
- Bumped version stubs (
pyproject.toml,claudeway/__init__.py,bug_report.ymlplaceholder) andCHANGELOG.mdfooter links.
Full diff: v0.3.1...v0.3.2
v0.3.1 — Windows [benchmark] hotfix
Hotfix release. Unblocks pip install claudeway[benchmark] on Windows.
v0.3.0's
[benchmark]extra pinnedlitellm>=1.18, which transitively requires a Rust build toolchain that fails on Windows. The killer demo's docstring already acknowledged litellm's token tracking was "unreliable on Windows + litellm 1.18+" — so we were shipping a dep that both failed to install AND didn't work on Windows.
Fixed
[benchmark]extra no longer pullslitellm. The killer demo (examples/killer_demo.py) imports litellm lazily via try/except — token-cost tracking is degraded on Windows when litellm is absent (it was already broken there per the inline comment), but the demo itself runs. Full token tracking on Linux/macOS is restored bypip install litellmseparately. The Docker compose appliance (which is Linux) installs litellm in its own Dockerfile.
Verified
pip install claudeway[benchmark]now succeeds on Windows.- 164 tests pass, ruff clean, mkdocs strict clean.
- Killer demo runs end-to-end on Windows without litellm (token count degrades gracefully to zero for CrewAI internal calls; Claudeway's direct Anthropic calls still tracked via the SDK's own
response.usage).
Install
pip install --upgrade claudeway # base SDK
pip install "claudeway[benchmark]" # killer demo deps (Windows-safe)
pip install litellm # optional, Linux/macOS only — full token trackingChangelog
See CHANGELOG for the full diff from v0.3.0.
Signature
Tag v0.3.1 is an annotated git tag on commit 9734d5e. Verify with:
git tag -v v0.3.1v0.3.0 — the coordination layer frameworks punted on
Live proof (new): Claudeway's first signed consensus is already on the Nostr wire — three Claudeway agents answered "what's the missing primitive for agent agreement, given Buzz punted on coordination?", signed the result, and published it as a NIP-78 event to five public relays. Open it in any Nostr client (Buzz, Damus, Snort, Primal): nostr.guru/e/3974ebfe....
Every agent framework can make one agent answer. Most can run several in parallel. None of them make agents genuinely agree — with the disagreement surfaced and the result cryptographically signed. That's Claudeway.
Claudeway v0.3.0 ships the coordination layer that LangGraph, CrewAI, Microsoft Agent Framework, and Buzz rooms all lack — with ML-DSA-65 post-quantum-ready signatures, a transparency log, and a reproducible benchmark showing Claudeway beats single Claude (+7/20) and CrewAI (+5/20) on hard questions.
At a glance
| Version | 0.3.0 |
| Tests | 164 pass / 7 skipped (optional-dep gates) |
| License | MIT |
| Python | 3.11, 3.12, 3.13 |
| Docs | https://jordannewell.github.io/claudeway/ |
| Repo | https://github.com/JordanNewell/claudeway |
| Live signed consensus | nostr.guru/e/3974ebfe... |
Highlights
🧩 Three framework adapters
The same signed consensus, dropped into your existing stack:
- LangGraph — Claudeway as a single
StateGraphnode (pip install claudeway[langgraph]) - Microsoft Agent Framework — Claudeway as a workflow + agent (
pip install claudeway[maf]) - CrewAI — Claudeway as a
@tooland Flow; inverts the killer demo so a CrewAI crew can call Claudeway for agreement (pip install claudeway[crewai])
🔐 Post-quantum signatures
MLDSABackend ships ML-DSA-65 / FIPS 204 signatures via pure-Python dilithium-py. Same ConsensusReceipt, same canonical payload hash — swap in at the SignatureBackend ABC. The receipts you sign today stay verifiable across the transition to cryptographically relevant quantum hardware.
from claudeway import ConsensusReceipt, Ed25519Backend, MLDSABackend
# Same receipt, two signature schemes:
Ed25519Backend().sign_receipt(receipt, ed_private_key) # fast, compact
MLDSABackend().sign_receipt(receipt, mldsa_private_key) # post-quantum📜 Consensus transparency log
RFC 6962-style append-only log of consensus results, anchored to Nostr on a cadence. Tamper-evident beyond the per-receipt signature — third parties can independently verify your consensus history hasn't been rewritten.
⚡ Streaming consensus events
OnEvent callback surfaces AgentCompleted and ConsensusResolved events as they happen — observable from any adapter (MAF, LangGraph, custom host).
🛡️ Adversarial security suite + threat model
20 tests across 7 attack classes: signature forgery, receipt tampering, transport malleability, key reuse, replay, downgrade, timestamp manipulation. The published THREAT-MODEL.md documents what the signatures defend against — and what they don't.
📊 Killer benchmark (reproducible)
Same hard architecture question → single Claude vs CrewAI vs Claudeway, blind LLM-judge, position-randomized, Mann-Whitney U:
| Approach | Score (of 20) |
|---|---|
| Claudeway | 18 (range 17–19 across 3 runs) |
| CrewAI | 13 |
| Single Claude | 11 |
Reproduce from cold:
export ANTHROPIC_API_KEY=...
git clone https://github.com/JordanNewell/claudeway && cd claudeway
docker compose up killer-bench # ~5 min for 10 runs × 4 approachesThe reviewer brings only an API key. Compose handles the relay, Python image, dependencies, and report staging.
📖 Docs site
jordannewell.github.io/claudeway — mkdocs-material + mkdocstrings API reference. Auto-deploys on push to main.
Install
pip install claudeway # SDK only (4 deps, lean)
pip install claudeway[mcp] # + expose consensus as an MCP server
pip install claudeway[nostr] # + sign Nostr events for Buzz interop
pip install claudeway[pq] # + ML-DSA-65 post-quantum signatures
pip install claudeway[langgraph] # + LangGraph adapter
pip install claudeway[maf] # + Microsoft Agent Framework adapter
pip install claudeway[crewai] # + CrewAI adapter
pip install claudeway[docs] # + build the docs site locallyChangelog
See CHANGELOG for the full diff from v0.2.0.
Signature
Tag v0.3.0 is an annotated git tag on the merge commit 3fb8e1e. Verify with:
git tag -v v0.3.0Roadmap next: A2A (Agent-to-Agent) protocol adapter, W3C VC presentation exchange, single-tenant runner. See docs/CHANGELOG.md.