Gusset installs on a repository and keeps the expensive truths true — the ones that quietly rot between reviews. Every claim it makes is checked against a code graph built from your source, and anything it cannot prove is dropped and logged rather than shipped.
What it does
- Every pull request gets a verified blast-radius comment. Not "the model thinks this might break" — each "X affects Y" line names a dependency edge that provably exists in your code, with the edge kind and depth attached.
- Architecture docs stay current. A module map whose diagram edges are computed from the graph, refreshed when the structure actually shifts.
- Dead code and doc drift are caught on a schedule. Both are pure graph queries — no model involved, nothing to distrust.
- A local canvas (
gusset serve): graph explorer, impact replay, live run feed, drift map, and the autonomy ladder. Binds to 127.0.0.1; nothing leaves the machine.
Why you can trust the output
The graph is the oracle. The model authors wording; the graph owns truth, and a verification gate drops every claim whose edge the graph cannot produce. That property is tested against a deliberately lying model.
Every run is scored deterministically — closure_recall, summary_grounding, gate_drop_rate — with no LLM judges and no human labels. Those scores drive an autonomy ladder: each job starts out only able to write a report and earns the right to comment, then to open pull requests, over 15 consecutive clean runs. Three bad runs in five and it drops back. The top rung — changing files directly — is never earned, only granted by a human in gusset.toml.
Honesty as a design constraint
The resolver never guesses an edge. A call through a variable whose type a parser cannot know is recorded as unresolved and counted, not invented — because one wrong edge poisons every claim built on it. The same rule runs through the product: deadcode separates "nothing references this" from "we could not see the reference", and docs-drift reports a dotted name as stale only when some prefix of it actually resolves, so a database column or an instance type in your prose is counted rather than called drift.
DOGFOOD.md is the public record of that discipline being applied to us, including the time the graph was inventing 20% of its own edges and the time the audit of that finding had a bug in it.
Requirements
Python 3.13+, an Anthropic API key for the LLM workflows. Languages: Python, TypeScript/JavaScript/JSX, Go. Everything else — tree-sitter, SQLite, LangGraph, GitHub Actions — is free and bundled. PandaProbe tracing and the self-healing harness are optional; without credentials, scores stay local and everything still runs.
Getting started
git clone https://github.com/latchkey-dev/gusset && cd gusset
uv sync
export ANTHROPIC_API_KEY=sk-ant-...
uv run gusset index ~/code/yourrepo
uv run gusset impact --diff HEAD~1
uv run gusset serveAutonomous mode: uv run gusset init ~/code/yourrepo writes gusset.toml and the GitHub Action.
Using Claude Code or Cursor? Point it at skills/gusset/SKILL.md and it will drive Gusset for you.
One thing to expect on a fresh install: GitHub disables "Allow GitHub Actions to create and approve pull requests" by default on every new repository. At propose level Gusset therefore pushes a branch and hands you a one-click link to open the pull request, rather than opening it itself. Nothing failed — see the CLI reference for the two ways to upgrade if you want it fully hands-off.