tool_id, Ed25519 keypair, and optional model_provenance hash declared by the developer.
Same ltx_* account auth as agent passports — no new account type. Mutating routes require the root ltx_* key (scoped sub-keys are rejected).
Register a tool passport
tool_id, passport_did (did:lithtrix:tool:{tool_id}), public_key, private_key, model_provenance, key_algorithm, risk_class.
Optional risk_class: low (default) or high — registrant-declared only; Lithtrix logs, does not verify.
Public read (no auth)
TOOL_PASSPORT_NOT_FOUND when the tool is missing or revoked.
Rotate and revoke
POST /v1/me/tools/{tool_id}/rotate— root key only; optional newmodel_provenance; previous public key honored untilgrace_until.POST /v1/me/tools/{tool_id}/revoke— root key only; public GET returns 404 after revoke.
model_provenance discipline
Captured, not verified — same trust level as agent_type self-declaration. Lithtrix stores whatever hash or label the developer submits; consumers compare against their own model-provider queries.
Model swapped — worked example
- Register with
model_provenance: "sha256:abc123..."(hash of e.g."openai/gpt-4o-2024-05-13"). - Silent swap — developer changes the model but does not rotate. Public GET still shows
"sha256:abc123...". Divergence from the provider is the signal. - Auditable swap — developer calls rotate with a new
model_provenance. A row intool_passport_rotation_eventsrecords the prior hash + timestamp.
Distinction from model_attestation_hash
See Passports for agent-layer passports and Browse / feedback docs for interaction-level attestation (G28.1).
risk_class and HITL approval events (G28.3)
Tools declare risk_class: low or high at register (and optionally on rotate). Public GET includes the declared value. Lithtrix does not intercept MCP calls — client-side enforcement is expected for high-risk tools.
When a human approves a high-risk action, log an immutable event:
GET /v1/me/activity).
Endpoints
Discoverable from
GET /v1/capabilities under passport.tool_passport.