Skip to content

Releases: JordanNewell/tractum

tractum v0.5.0

Choose a tag to compare

@JordanNewell JordanNewell released this 17 Oct 05:31
v0.5.0
3a73e75

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-receipt extension registered in dot_curt PR #8
  • MCP server always signs — ephemeral operator key by default, TRACTUM_REQUIRE_PINNED_KEY=1 loud-fails unset keys, TRACTUM_MCP_DRY_RUN=1 keyless 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)

PyPI: https://pypi.org/project/tractum/0.5.0/

v0.4.0 — per-agent signed statements + k-of-n quorum receipts

Choose a tag to compare

@JordanNewell JordanNewell released this 17 Oct 00:55
v0.4.0
653198d

[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 Swarm now gets a
    signing keypair (pinned via AgentConfig.signing_key, otherwise an
    ephemeral key is provisioned per swarm) and signs a
    claudeway.agent-statement.v1 statement over its stance — answer,
    confidence, model, role, task, round. Statements ride on
    AgentResponse.statement and survive dict round-trips through
    Task.result.
  • v2 receipt payload (claudeway.consensus.v2). When statements are
    present, ConsensusReceipt.from_result emits a payload carrying the
    statements plus a quorum threshold 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 a ReceiptVerification
    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-level sign_statement / verify_statement /
    statement_hash.
  • MCP verify_consensus upgrade — the tool now accepts optional
    expected_operator_pubkey / expected_agent_pubkeys and 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. See docs/THREAT-MODEL.md.

Compatibility

  • v1 receipts verify exactly as before; verify_receipt semantics 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

Choose a tag to compare

@JordanNewell JordanNewell released this 26 Jul 20:01
v0.3.2
d8ec4f5

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_TOKEN secret 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.yml placeholder) and CHANGELOG.md footer links.

Full diff: v0.3.1...v0.3.2

v0.3.1 — Windows [benchmark] hotfix

Choose a tag to compare

@JordanNewell JordanNewell released this 26 Jul 16:02
v0.3.1
9734d5e

Hotfix release. Unblocks pip install claudeway[benchmark] on Windows.

v0.3.0's [benchmark] extra pinned litellm>=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 pulls litellm. 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 by pip install litellm separately. 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 tracking

Changelog

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.1

v0.3.0 — the coordination layer frameworks punted on

Choose a tag to compare

@JordanNewell JordanNewell released this 26 Jul 04:02
v0.3.0
3fb8e1e

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 StateGraph node (pip install claudeway[langgraph])
  • Microsoft Agent Framework — Claudeway as a workflow + agent (pip install claudeway[maf])
  • CrewAI — Claudeway as a @tool and 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 approaches

The 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 locally

Changelog

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.0

Roadmap next: A2A (Agent-to-Agent) protocol adapter, W3C VC presentation exchange, single-tenant runner. See docs/CHANGELOG.md.