Tractum¶
Verifiable multi-agent consensus for Claude. A coordination layer built around signed, verifiable agreement.
Every agent framework can make one Claude answer. Most can run several in parallel. None of them ship a signed consensus receipt — agreement with the disagreement surfaced and the result cryptographically verifiable. That's Tractum.
Buzz coordinates agents via workflows. Goose gave one agent tools. LangGraph makes you wire coordination by hand. Tractum adds what none of them ship: signed multi-agent consensus with the disagreement surfaced.
The 30-second pitch¶
from tractum import AgentConfig, Swarm, SwarmConfig, Task
swarm = Swarm(SwarmConfig(
name="ArchReview",
agents=[
AgentConfig("StrongConsistency", "Distributed Systems Engineer", "..."),
AgentConfig("Operations", "SRE / Platform Lead", "..."),
AgentConfig("Pragmatist", "Staff Engineer", "..."),
],
), api_key=...)
result = await swarm.process(Task(
id="q1",
description="Active-active Postgres, FoundationDB, or eventual consistency for payments?",
input_data={},
))
print(result.result["final_answer"])
print(f"agreement: {result.result['agreement']:.0%} disagreed: {result.result['disagreed']}")
Three specialists. One signed answer. Disagreement surfaced, not averaged away.
Why this exists¶
The agent-framework field is crowded but lopsided:
| Tool | What it solves | The gap |
|---|---|---|
| LangGraph | Production orchestration, manual graphs | Coordination is DIY wiring |
| CrewAI | DX, fast prototyping | Coordination is shallow; +48% token cost |
| Goose (Block) | Single-agent harness + MCP | No multi-agent at all |
| Buzz (Block) | The room agents talk in | Coordination via workflows, no consensus primitive |
| Anthropic SDK | Base Claude calls | No coordination layer |
| MCP marketplaces | Tool distribution | No agreement primitive |
The whitespace, plain: everyone built where agents act or where agents talk. Nobody shipped verifiable consensus — agreement with a tamper-evident receipt. Tractum fills exactly that.
What makes it defensible¶
Consensus results aren't text — they're signed, tamper-evident attestations anyone can verify. Since v0.4.0, every agent signs its own stance: a receipt is a k-of-n multi-sig over machine judgment, not one operator's claim about what the agents said.
from tractum import ConsensusReceipt, Ed25519Backend, verify_receipt_detailed
receipt = ConsensusReceipt.from_result(result, swarm_name="ArchReview", task_id="q1")
Ed25519Backend().sign_receipt(receipt, private_key)
# Anyone, anywhere, can verify this later — aggregate signature, every
# agent's individual statement signature, and the quorum count:
report = verify_receipt_detailed(receipt, expected_agent_pubkeys=agent_keys)
report.valid, report.valid_statements # -> (True, 3)
# ...and tampering with any answer — or any agent's signature — is caught.
- k-of-n quorum receipts — each agent's statement is individually signed; the quorum threshold is part of the signed payload.
- Ed25519 by default — no new native deps, works everywhere.
- Swappable signature backend — a post-quantum (ML-DSA) backend ships today; statements can mix algorithms and verify per statement.
- Three transports — the same signed receipt renders as plain JSON, a W3C Verifiable Credential, or a Nostr NIP-78 event any Nostr client can read.
This is the layer that makes consensus worth acquiring rather than reimplementing in a weekend. See Transports for the tradeoffs and API Reference for the surface area.
Install¶
pip install tractum # the SDK (4 deps, lean)
pip install tractum[mcp] # + expose consensus as an MCP server
pip install tractum[nostr] # + sign Nostr events for Buzz interop
pip install tractum[langgraph] # + drop consensus into a LangGraph StateGraph
Use it three ways¶
1. As a Python SDK¶
from tractum import Swarm, WeightedVote, Debate
# Cheap default — one round, picks highest-confidence answer
swarm = Swarm(config, consensus=WeightedVote())
# For hard questions — agents see peers' answers and revise once
swarm = Swarm(config, consensus=Debate())
2. As an MCP server¶
Any MCP-capable agent (Claude Code, Cursor, Goose) gains two tools:
reach_consensus and verify_consensus. One tool call gets a signed
agreement — no framework to learn, no graphs to wire.
Try it in 5 minutes: MCP demo — pip install to a verifiable decision, keyless-friendly.
3. As a coordinator (hierarchical decomposition)¶
from tractum import Coordinator, CoordinatorConfig
coord = Coordinator(CoordinatorConfig())
coord.add_sub_agent("Researcher", ...)
coord.add_sub_agent("Analyst", ...)
result = await coord.coordinate(task)
Next¶
- Transports — JSON vs W3C VC vs Nostr NIP-78, and when to pick each.
- Adapters — Buzz and LangGraph integration paths.
- Benchmarks — Tractum vs single Claude vs CrewAI on a hard question.
- API Reference — auto-generated from the source.
- Changelog