AI repo cleaner and steward
Pro.
The Repo Cleaner analyses a BNLRepo and proposes evidence-backed cleanup, drawing on source files, .llm summaries, exact code and symbol analysis, and dependency graph edges.
Analysis types
- Summary drift (default) — files whose summary no longer matches reality
- Code cleanup candidates — duplicate or superseded files, orphaned assets and tests
- Security hotspots
- Dependency and API drift
- AI-churn review — files repeatedly rewritten by automated edits
The safety model
This is the part worth reading twice.
The cleaner produces a proposal: a branch name, a pull-request title and body, a compare URL, and per-finding risk, evidence and rollback steps. You review it and act on it, or you do not.
It performs no Git writes at all. It does not create the branch. It does not commit. It does not open the pull request. It writes a plan into its own records and renders the text you would use. Nothing in your repository changes because a cleanup plan was proposed.
It can never target your default branch. That is enforced in code — checked when a plan is constructed and checked again every time a plan is persisted, not left to the model's good judgement. The instruction is also in the prompt, but the prompt is not what enforces it.
Every finding ships with rollback steps, because a cleanup suggestion you cannot reverse is not a suggestion.
Cost
Proposing a plan that includes analysis requires explicit cost confirmation before any billable call runs.
A plan derived purely from records BNLGit already holds makes no provider calls, and is therefore not cost-gated. That is a deliberate distinction rather than a gap: you are asked to confirm spend when there is spend.
Running one
From the repository's cleaner page, or:
POST /api/v1/repos/{owner}/{repo}/bnlgit/cleanup-plans
Authorization: token <your token>
Content-Type: application/json
{
"analysis_types": ["summary_drift"],
"confirm_cost": true
}
An LLM does not get to delete your code. It gets to write down, with evidence and line numbers, why it thinks something could go — and then a human decides. Everything about how this feature is built follows from that, including the fact that it cannot write to Git even if it wanted to.
Something here wrong or missing? Mail docs@bnlgit.com — these pages are the single public source of truth for BNLGit and we would rather fix them than leave you guessing.