Repository navigation
v1.23.0
Added
-
pycache joins the Python group as a regular adapter (on by default): it deletes
__pycache__by name alone, since CPython owns that name unconditionally, and deletes
.pytest_cache,.mypy_cacheand.ruff_cacheonly when aCACHEDIR.TAGfile inside
proves the tool wrote it, per the cache directory tagging
spec. It never touches.hypothesis(holds regression
examples pytest cannot regenerate on its own), and never.toxor.nox(environments,
not caches). Verification requires at least one.pyfile anywhere in the repository,
so there is always something to regenerate the bytecode and tool caches from. That
makes thirty-six adapters. -
devp statusreports a Tools line for the output graphify and understand-anything
leave behind (graphify-out/and.understand-anything/), because both can grow
into gigabytes and neither has a lockfile to prove it is safe to delete: rebuilding
either means re-running the tool's own extraction passes, LLM calls included. The
interactive dashboard's header and the plain-table view both show the size next to
everything else, and--jsoncarries it as atoolsarray on each repository entry.
It is report-only: never counted in the reclaimable total, and never a candidate for
devp run. -
devp statusopens an inspector pane beside the table on terminals at least 110
columns wide: the selected repository's per-directory sizes, root-commit identity,
idle window, last prune, lifetime space saved and detected adapters, all in one
place instead of behinddevp doctor <path>. It also draws a sparkline of the
repository's commits over the last 26 weeks and lists the five largest entries inside
its bloat directories, both read in the background so moving the selection never waits
on a largenode_modules. A narrower terminal with at least 34 rows puts the pane
below the table instead, andTabhides and shows it. -
devp scores(the same report asdevp history --scores) ranks your all-time
largest single-repository cleanups and largest whole passes, read from the same pass
logdevp historyprints, with medals on the top three of each.--jsonemits it
as a document with"command": "history --scores". -
The registry heals itself.
devp status,devp runanddevp doctornow
resolve registry entries whose directory is gone instead of warning about them
forever. A repository
that moved into a siblingArchive/-style directory, or anywhere else its root-commit
identity proves it is the same repository, keeps its lifetime statistics under the new
path. An entry for a deleted AI-agent worktree (.claude/worktrees/,
.cursor/worktrees/and kin) is dropped outright, because the session that creates
one deletes it when it ends. Nothing is merged on a shared directory name alone, so
an entry whose drive is merely unplugged stays put until the drive returns. -
devp skill --prompt workspace(or--prompt agent) prints just that onboarding
prompt, with no header or code fence around it, so you can pipe it or paste it
without trimming. Add--copyand it goes straight to the clipboard instead.
devp skill --rules-file <path>writes the same marked rules block--agent
uses into any file you name inside the repository, for an editor--agentdoes not
list or one that reads a renamed file; a re-run replaces the block and leaves the
rest of the file alone. Seedevp skillin the CLI
reference.
Changed
-
iindevp statusasks before it changes anything. A small dialog names the
repository and what will happen;yorEnterconfirms and any other key backs out.
A stray keypress used to rewrite.devprune.jsonon whichever row was highlighted. -
devp update --installand the auto-update also replace the copies cargo put on
PATH. The scheduled pass runs the managed copy, and a copy only ever replaced itself
and the managed one, sodevptyped from~/.cargo/binkept answering with the
release thatcargo binstallinstalled, however many scheduled passes had updated
since. Thedev-pruneanddevpfiles in cargo'sbindirectory now move forward with
the managed copy, unless they are already the same release or newer (acargo install --path .development build is never downgraded). Cargo's own record of the installed
version is not touched, and the update says which command brings it forward. -
devp doctornames the upgrade command for a stale copy, not only the uninstall
one. A copy on an older release is usually one you still want, on the current
release, and "remove withcargo uninstall dev-prune" pointed at deleting the binary
you type. The line now reads, for example, "upgrade withcargo binstall dev-prune --forceor remove withcargo uninstall dev-prune". -
Windows binaries no longer need the Visual C++ runtime. They link the C runtime
statically, so the release zip, the install script, Scoop, npm, PyPI and WinGet all
run on a clean Windows install instead of failing to start with a missing
VCRUNTIME140.dll.cargo install
from crates.io still compiles against the dynamic runtime, which any machine with the
MSVC toolchain already has.
Fixed
-
A pass that found nothing eligible to prune, or stopped early on a lockfile
verification failure, skipped the auto-update check entirely, so an unattended
machine whose repositories were all clean or all active could stay on an old release
indefinitely. The check now runs at the end of every pass regardless of what the
pass found, with one deliberate exception: a--jsonpass stays out of it, because
that mode's stdout is a single machine-readable document and nothing else. -
The windowless
devpw.exetwin the Windows scheduled task runs is now refreshed
when it is stale against the running binary, so an upgrade no longer leaves the
scheduled task executing the previous version. And when the twin is missing and the
console binary runs the task instead, it detaches from its console immediately,
shortening the window flash. -
DEV_PRUNE_NO_TUInow keeps every full-screen view closed, as documented. Only the
config wizard read it, sodevp statusand thedevp runselector still opened
whenever both ends looked like a terminal, and an AI agent holding a pseudo-terminal
landed in a keypress loop it had no way to leave. Set the variable and both print
their plain output instead. -
-yondevp trust --fix-ownershipworks in either position.devp -y trust --fix-ownershipparsed the flag and then asked anyway, anddevp trust --fix-ownership -ywas a usage error. -
devp restore --last-runputs a Govendor/directory back. Restore chose between
go mod vendorandgo mod downloadby checking whethervendor/existed, but the
prune had just deleted it, so a vendored repository always gotgo mod download,
which exits successfully without recreating anything, and the pass reported
"restored" over a directory that was still gone. It now rebuilds what the prune
recorded, and reports a failure unlessvendor/exists afterwards. -
Pressing
ion a repository ignored through the olderignore.devprune.jsonmarker
took two presses to un-ignore it. The first wrote"ignore": trueand deleted the
marker, so the repository stayed ignored; it is now offered "stop ignoring" straight
away, and confirming clears both. -
In
devp status, after sorting, filtering or searching, the highlighted row's path
could keep the colour meant for an unhighlighted one while a different row got the
white text meant for the highlight, which is unreadable on a light terminal theme.
The highlight is now matched by its position on screen. -
devp run --helplistsdenoanddotnet_buildamong the--onlyand--skip
names,devp caches --helpcovers every manager the report sizes, and the sample
output throughout the docs says MiB and GiB, which is what dev-prune prints. -
When a
.devprune.jsoncannot be read,devp run,devp doctoranddevp config
now suggestdevp config project <PATH> --updateto reset it. The hint used to say
devp config <PATH> --update, which is a usage error, so following the advice printed
only clap's complaint.
For contributors
devp uninstallanddevp updatenow recognise a development build anywhere under
target/, includingtarget/<triple>/releaseand cargo-llvm-cov's
target/llvm-cov-target/debug. Before, an uninstall run from one of those deleted the
binary it was running from, socargo llvm-covfailed the uninstall tests.
Which download do I want?
Most people want none of them. The installers below verify the SHA-256
sidecar, put the binary somewhere already on PATH, and create the devp
alias — three things unzipping an archive does not do.
| You are on | Run this |
|---|---|
| Windows (PowerShell) | iwr -useb https://devprune.vkrishna04.me/install.ps1 | iex |
| Windows (Command Prompt) | powershell -NoProfile -ExecutionPolicy Bypass -Command "iwr -useb https://devprune.vkrishna04.me/install.ps1 | iex" |
| macOS / Linux | curl -fsSL https://devprune.vkrishna04.me/install.sh | sh |
| Python tooling | uv tool install dev-prune==1.23.0 / pipx install dev-prune==1.23.0 |
| Rust, no compile | cargo binstall dev-prune@1.23.0 |
| Rust, from source | cargo install dev-prune --version 1.23.0 (needs Rust 1.88+) |
The PyPI packages contain these same binaries rather than downloading one
afterwards, so they work behind a registry mirror and offline. cargo install
is the only channel that compiles on your machine; cargo binstall reaches
for the archives on this page instead.
Full instructions: https://devprune.vkrishna04.me/#install
The assets, then
Take one only if you are packaging dev-prune yourself, air-gapping it, or
pinning it into a container image.
| Asset | For |
|---|---|
dev-prune-v1.23.0-windows-x64.zip |
Windows on Intel/AMD — almost every Windows PC |
dev-prune-v1.23.0-windows-arm64.zip |
Windows on ARM — Surface Pro X, Snapdragon laptops, Windows in a Mac VM |
dev-prune-v1.23.0-windows-x86.zip |
32-bit Windows — locked-down corporate images, older industrial machines |
dev-prune-v1.23.0-darwin-arm64.tar.gz |
Apple Silicon Macs — M1 and later |
dev-prune-v1.23.0-darwin-x64.tar.gz |
Intel Macs — 2020 and earlier |
dev-prune-v1.23.0-linux-x64.tar.gz |
Linux on Intel/AMD |
dev-prune-v1.23.0-linux-arm64.tar.gz |
Linux on ARM — Raspberry Pi 4/5, Graviton, ARM CI runners |
Both Linux builds are statically linked against musl, so they run on any
distribution including Alpine, with no glibc floor.
32-bit is published for Windows only. There is no 32-bit Linux, no 32-bit
macOS and no 32-bit ARM build on any platform; the install scripts refuse
rather than guess when they meet one.
There is no .vsix on this page. The VS Code extension has its own
version and its own release cadence, so it ships from its own tags:
the extension's releases.
Install it by name instead — VKrishna04.dev-prune, on the
VS Code Marketplace
and on Open VSX.
Windows: the binaries are not code-signed, and two separate features react
to that.
Windows protected your PC is SmartScreen, and it only challenges files
carrying a Mark of the Web — which your browser attaches to the download and
File Explorer copies onto everything it extracts. Clear the mark on the archive
before extracting and nothing inside it is ever marked:
Unblock-File .\dev-prune-v1.23.0-windows-x64.zipThe installers above already do this for you, on the archive and on both
installed copies.
A refusal with no dialog and no "run anyway" is something else: Smart App
Control, which blocks unsigned executables outright and never looks at the mark.
It is on by default on clean installs of Windows 11 22H2+ and always off on
upgraded ones, which is why the same release runs on one machine and not the
next. Unblock-File does not help, and neither does building from source.
The troubleshooting guide
covers what your options actually are.
Every archive ships a .sha256 sidecar. Check it before you trust it:
sha256sum -c dev-prune-v1.23.0-linux-x64.tar.gz.sha256(Get-FileHash dev-prune-v1.23.0-windows-x64.zip).Hash -eq (Get-Content dev-prune-v1.23.0-windows-x64.zip.sha256).Split(' ')[0].ToUpper()An archive's hash stops meaning anything the moment you unpack it, and the
unpacked files are the only ones your antivirus ever looks at. So each Windows
zip also ships a .zip.contents.sha256 listing the digest of every file inside
it — run this in the folder you extracted to, from Git Bash (sha256sum ships
with Git for Windows, and is what reads this format):
sha256sum -c dev-prune-v1.23.0-windows-x64.zip.contents.sha256dev-prune.exe and devp.exe are one file under two names and share a digest
on purpose, so a scanner builds one reputation record instead of two.
devpw.exe — the console-free build the scheduled task runs — is compiled
separately and legitimately has a different one. devp trust prints the same
three digests for the copies already installed on your machine, so you can
compare them against this file without downloading anything again.
That sidecar proves the file was not altered in transit. It does not prove
where it came from — the same hand that swaps an archive swaps its sidecar.
Every archive on this page is also signed by GitHub's build provenance, which
binds it to this repository, this workflow and the commit it was built from:
gh attestation verify dev-prune-v1.23.0-linux-x64.tar.gz --repo Life-Experimentalist/dev-prunegh attestation verify dev-prune-v1.23.0-windows-x64.zip --repo Life-Experimentalist/dev-pruneFull Changelog: v1.22.0...v1.23.0