Trust-based agent selection for multi-agent systems
Project description
agent-trust
Add one agent that controls every other agent. An autonomous agent that verifies, scores, and enforces what other agents are allowed to do - using cryptographic proof.
Langfuse can tell you an agent failed. Agent Trust can prove it failed and revoke its permissions before it fails again.
pip install kanoniv-trust
Quick Start
from agent_trust import TrustAgent
trust = TrustAgent() # SQLite, zero infra
# Register agents with verified identity (Ed25519 DIDs)
trust.register("researcher", capabilities=["search"])
trust.register("writer", capabilities=["write"])
# Grant scoped delegation - cryptographic, not advisory
trust.delegate("researcher", scopes=["search", "analyze"])
trust.delegate("writer", scopes=["write", "summarize"])
# Observe outcomes - creates signed provenance
trust.observe("researcher", action="search", result="success", reward=0.9)
trust.observe("writer", action="write", result="failure", reward=-0.5)
# Select best agent - UCB exploration, verified reputation
best = trust.select(["researcher", "writer"]) # -> "researcher"
# Enforce - real authority, not a recommendation
trust.restrict("writer", scopes=["summarize"]) # limit permissions
trust.revoke("writer") # revoke all access
# Reputation from verified, signed outcomes - not self-reported metrics
trust.reputation("writer")
# -> ReputationReport(score=18, success_rate=0.0, trend="declining", current_scopes=[])
CrewAI Integration
from crewai import Agent, Crew, Process
from agent_trust.integrations.crewai import TrustManager
# Create agents
researcher = Agent(role="Researcher", goal="Find information", backstory="Expert researcher")
writer = Agent(role="Writer", goal="Write content", backstory="Expert writer")
# Trust-based manager replaces hardcoded delegation
manager = TrustManager()
manager.register_crew([researcher, writer])
crew = Crew(
agents=[researcher, writer],
tasks=[...],
process=Process.hierarchical,
manager_agent=manager.as_agent(),
task_callback=manager.task_callback, # auto-records outcomes
)
# Before: allowed_agents=["researcher", "writer"] -> random/first-match
# After: trust.select(["researcher", "writer"]) -> earned reputation
How It Works
Agents produce actions
|
Protocol verifies actions (signed provenance, DIDs, delegation)
|
TrustAgent interprets + enforces (reputation, UCB, restrict/revoke)
Every trust decision rests on cryptographic verification:
- Identity: Each agent gets an Ed25519 key pair and a
did:keyidentifier - Provenance: Every action is signed. Tamper-proof audit trail.
- Delegation: Scoped permissions that can be restricted or revoked in real time
- Reputation: Computed from verified, signed outcomes - not self-reported metrics or LLM judgment
- Selection: UCB (Upper Confidence Bound) balances exploiting proven agents with exploring under-tested ones
API Reference
TrustAgent(db_path=None, url=None, private_key=None)
Create a trust orchestrator. It has its own DID and signing keys.
TrustAgent()- SQLite at~/.agent-trust/trust.dbTrustAgent(db_path=":memory:")- in-memory (testing)TrustAgent(url="http://...")- hosted backend (shared reputation)TrustAgent(private_key="base64...")- persistent identity across restarts
Methods
| Method | Description |
|---|---|
register(name, capabilities) |
Register an agent with verified identity |
delegate(agent, scopes) |
Grant scoped delegation (signed) |
observe(agent, action, result, reward) |
Record outcome with signed provenance |
select(agents, strategy="ucb") |
Select best agent from verified reputation |
rank(agents, strategy="ucb") |
Rank agents by reputation (best first) |
reputation(agent) |
Get full reputation report |
restrict(agent, scopes) |
Limit an agent's permissions |
revoke(agent) |
Revoke all delegation |
Selection Strategies
ucb(default) - Upper Confidence Bound. Balances exploiting known-good agents with exploring under-tested ones. Mathematically principled.greedy- Always picks the highest avg reward. No exploration. Can get stuck.
What Makes This Different
| Langfuse | AgentOps | CrewAI | Agent Trust | |
|---|---|---|---|---|
| Agent Identity (DIDs) | No | No | No | Yes |
| Signed Provenance | No | No | No | Yes |
| Scoped Delegation | No | No | Hardcoded | Cryptographic |
| Reputation Scoring | No | No | No | Yes |
| RL / Adaptive Routing | No | No | No | UCB |
| Enforcement (restrict/revoke) | No | No | No | Yes |
Hosted Backend
Local SQLite is great for development. For shared reputation across teams and systems:
trust = TrustAgent(url="http://your-agent-trust-api:4100")
Same API, shared persistence. An agent's reputation follows it across systems.
pip install kanoniv-trust[hosted] # adds httpx
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kanoniv_trust-0.1.5.tar.gz.
File metadata
- Download URL: kanoniv_trust-0.1.5.tar.gz
- Upload date:
- Size: 26.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0987364437e2887952b2a1e3f76f9aaa612274340c04d6990cf6ef3c3fd81281
|
|
| MD5 |
0906c8a710436e1ae91c99161cacc279
|
|
| BLAKE2b-256 |
248a8be8270f70313089142244c522255aa73afdbb42bfc00f382e977be3ede9
|
Provenance
The following attestation bundles were made for kanoniv_trust-0.1.5.tar.gz:
Publisher:
release-sdk.yml on kanoniv/agent-trust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kanoniv_trust-0.1.5.tar.gz -
Subject digest:
0987364437e2887952b2a1e3f76f9aaa612274340c04d6990cf6ef3c3fd81281 - Sigstore transparency entry: 1118124641
- Sigstore integration time:
-
Permalink:
kanoniv/agent-trust@ebb640b2a57db7733e44f7e7b7b80c1caf17e9bb -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/kanoniv
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-sdk.yml@ebb640b2a57db7733e44f7e7b7b80c1caf17e9bb -
Trigger Event:
push
-
Statement type:
File details
Details for the file kanoniv_trust-0.1.5-py3-none-any.whl.
File metadata
- Download URL: kanoniv_trust-0.1.5-py3-none-any.whl
- Upload date:
- Size: 24.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e4c93ce6a0cdcff20d1c685eba100a0a207af364649011c6deab9b6dd667cd8
|
|
| MD5 |
b348ab047dd3836080e7befdef3fc145
|
|
| BLAKE2b-256 |
a3f9bd3f32d117a855627bbf7c5020dac7f17cdd217e46bc8a1b55c0c895e494
|
Provenance
The following attestation bundles were made for kanoniv_trust-0.1.5-py3-none-any.whl:
Publisher:
release-sdk.yml on kanoniv/agent-trust
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kanoniv_trust-0.1.5-py3-none-any.whl -
Subject digest:
3e4c93ce6a0cdcff20d1c685eba100a0a207af364649011c6deab9b6dd667cd8 - Sigstore transparency entry: 1118124648
- Sigstore integration time:
-
Permalink:
kanoniv/agent-trust@ebb640b2a57db7733e44f7e7b7b80c1caf17e9bb -
Branch / Tag:
refs/tags/v0.1.5 - Owner: https://github.com/kanoniv
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-sdk.yml@ebb640b2a57db7733e44f7e7b7b80c1caf17e9bb -
Trigger Event:
push
-
Statement type: