Selvedge vs. AgentDiff
Both answer “why did the agent write this?” — but they capture the answer at opposite ends of the change. AgentDiff infers it afterward from the diff; Selvedge records it as it happens, from the agent itself.
| Selvedge | AgentDiff | |
|---|---|---|
| Reasoning source | Captured live, by the agent in the same context that produced the change | Inferred post-hoc by Claude Haiku from the diff at session end |
| Granularity | Entity — DB column, table, env var, dep, API route, function | Line |
| Mechanism | MCP server — the agent calls it as work happens | Git pre/post-commit hook |
| Grouping | Changesets — named feature/task slugs across many entities | None |
| Prior attempts | Yes — prior_attempts surfaces tried-and-rejected paths | None |
| Storage | SQLite, zero deps | JSONL on disk |
Where Selvedge is different
Section titled “Where Selvedge is different”- Captured live, not inferred. AgentDiff feeds the finished diff back to a second LLM to guess the intent. Selvedge’s reasoning is the agent’s own words, written from the same context window that produced the change — no second model, no hallucinated rationale, and an empty
reasoningis itself an honest signal. - Entity-level, not line-level. Selvedge attributes the things you actually search for —
users.email,env/STRIPE_SECRET_KEY,deps/stripe— so six months later you query the column, not a line range that has since moved. - Changesets. Selvedge groups every event in a multi-file feature under one slug (
add-stripe-billing); AgentDiff has no grouping. - It reads, too.
prior_attemptslets the agent ask “was this tried and reverted?” before it edits. A post-hoc capture tool only ever writes.
When AgentDiff might fit you better
Section titled “When AgentDiff might fit you better”If you want a zero-config, fully passive trail that works with any tool (no MCP support required) and you’re fine with after-the-fact LLM-inferred summaries at line granularity, a hook-based tool like AgentDiff is simpler to drop in.