sift · audits of the instruction files your agents read
sift audits the instruction files coding agents read and finds what is too big, duplicated, stale, dead or misplaced. An agent writes a revised version of each file with findings, and you decide each file on a local page. What you approve becomes one pull request per repo, and merging it is up to you.
> audit my instruction files sift found 4 findings in 2 files: ~/src/app/AGENTS.md 14.2 KB, over its 8.0 KB budget line 41 points at a file that no longer exists line 88 repeats a passage from line 12 ~/.claude/CLAUDE.md line 12 waits on a pull request that has merged I've written one revised version of each file. They're ready for you to decide on the review page: http://127.0.0.1:52741/
what it reads
An instruction file is a file a coding agent reads before it starts
work, such as a repo's AGENTS.md or CLAUDE.md. Your agent also has a
global file, which applies in every repo (Claude Code reads
~/.claude/CLAUDE.md, for example), and skills, which are instructions for
one kind of task that the agent loads when the task comes up. These files grow a line at a time
and are rarely reread, so over time they drift from the code they describe.
sift reads each global file and skill for the agents you use (Claude Code, Codex and pi), and every instruction file in the repos under the directories you name. It reads each repo at its fetched default branch, so the audit sees what is on that branch rather than your uncommitted work. It skips forks and the skill directories a vendor manages, and lists what it skipped.
what it finds
Each finding names the file, the line, the check and a one-line reason. A finding marked certain is one sift can prove, such as a path that does not exist, and the recommendation for that file must fix it. Any other finding the agent can fix, or keep with a reason.
A file over its budget. Global files, repo files and skills each have their own budget, which you can change in the config.
An agent loads the global file and every instruction file from the repo root down to the directory it works in. Past the agent's own limit, it silently drops the rest.
The same passage in two places, for example a rule in your global file that a repo's file repeats word for word.
A file or directory the text points to that no longer exists, such as
docs/setup.md after it was renamed.
A status note that may be out of date, such as "waiting on the pull request that adds retries" after that pull request merged, or an old date.
A pointer to a notes store you have listed in the config as retired, so an agent stops reading from or writing to it.
Text that belongs somewhere else, such as a rule about one repo written in the global file that every repo loads.
A password, token or API key written into the file. The finding shows only its first characters and its length.
a round
A round is one audit from start to finish. With the sift skill installed, ask your agent to audit your instruction files, and it runs the round through the sift channel's tools:
sift holds back a file whose branch moved on since the audit, or a repo with uncommitted or unpushed work, and says why. A file outside every repo is left for you, with its approved content saved and its path reported.
your review
The review page runs on your machine. Each file to change shows its current and recommended versions side by side, with the findings, what the recommended version does about each, and a diff. Pick one version, or write your own, and add a note if you like. Linked files are decided together, so text moved from one file to another is never written to only one of them.
Files the agent would leave as they are get agree or disagree. Agreeing mutes their findings until the text changes. Disagreeing takes a note, and after Send the agent recommends that file again for you to decide.
Press Send to hand your decisions to the agent session that opened the page.
In Claude Code, the sift plugin from the install steps delivers Send into the session, and in pi the sift channel does, through channels.tools. In any other agent, run sift wait, which returns when you press Send and prints what to do next.
install
One command downloads sift, verifies its checksum, and puts it on your PATH
(~/.local/bin). Then install the sift skill for each agent sift finds, and name the
directories to audit. Run sift skills install again after each upgrade.
$ curl -fsSL https://tackle.tools/install.sh | sh -s sift # then $ sift skills install $ sift init --root ~/src $ sift doctor # checks the setup # Claude Code $ claude plugin marketplace add subaud-tools/plugins $ claude plugin install sift@subaud-tools
Then start claude as usual. In a session that is already open, run /reload-plugins to load the plugin.
Turn on auto-update for the subaud-tools marketplace so the plugin stays current: in Claude Code, run /plugin, open the Marketplaces tab, select subaud-tools and choose Enable auto-update.
On macOS, kempt can install sift from the
manifest in a clone of the tackle repo, which also installs the sift plugin for Claude Code and registers the sift channel for pi: kempt apply -manifest cmd/sift/kempt.toml -packages sift. Then run the same
sift skills install and sift init steps. sift opens pull requests with
gh, so sign in to it first.