A durable execution runtime for AI agents with event sourcing, replay, and workflow orchestration capabilities. Includes MCP server support, graph-based workflows, and a control plane HTTP API.
Salvor provides 4 tools with basic schemas and descriptions, but falls short of production quality. All tools have descriptions (10-70 chars, below the 50-200 char baseline for LLM optimization) and input schemas with typed parameters. However, descriptions lack actionable context, they state WHAT but not WHEN or WHY. Parameter descriptions are minimal or absent (e.g., 'claim_id' and 'amount' in pay_claim lack descriptions). No output schemas are documented. Error handling is not visible in the tool definitions. The 'save_claim' tool's claim_data parameter accepts an untyped object with no schema constraints, inviting invalid input. Tool names are clear (verb_noun pattern), but composition issues exist: 'pay_claim' and 'save_claim' both write to persistent storage with similar semantics, unclear when to use each. No evidence of idempotency guarantees, rate limiting, or permission gates.
Increments a counter and returns the new count value
Records a payment claim to a ledger, appending one line per execution without deduplication
Performs research queries and returns structured results
Saves a salvage claim to persistent storage, appending one line per real execution with zero duplicate writes
Parameter descriptions missing or trivial. 'claim_id', 'amount', 'query', and 'claim_data' lack descriptions explaining format, constraints, or examples. LLMs cannot infer parameter meaning from names alone.
Tool descriptions are too short (10-70 chars vs. 50-200 char baseline). 'Increments a counter' and 'Records a payment claim' lack context on WHEN to use each tool, prerequisites, or side effects. Descriptions do not guide LLM selection.
No output schemas documented. LLMs cannot plan downstream tool calls or extract required fields without knowing what each tool returns. Baseline: 100% of A+ tools document return types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Untyped object parameter 'claim_data' in save_claim accepts arbitrary JSON with no schema constraints. Invites invalid input and forces LLM to guess structure. Should define required fields and types.
Semantic overlap between pay_claim and save_claim. Both write to persistent storage; descriptions do not clarify when to use each. Violates single-responsibility principle and forces LLM to reason about tool selection.