pub enum Commands {
Show 19 variants
Init {
paths: Vec<String>,
},
Link {
path: String,
quiet: bool,
},
Unlink {
path: String,
missing: bool,
},
Undo,
Run {
target_path: Option<String>,
daemon: bool,
only: Option<String>,
skip: Option<String>,
min_size: Option<u64>,
except: Option<String>,
json: bool,
explain: bool,
},
Status {
top: Option<u64>,
drift: bool,
json: bool,
},
Stats {
json: bool,
},
Trust {
json: bool,
fix_ownership: bool,
yes: bool,
},
Completions {
shell: Shell,
},
Man {
command: Option<String>,
dir: Option<String>,
roff: bool,
},
Caches {
json: bool,
action: Option<CachesAction>,
},
Config {
action: Option<ConfigAction>,
},
Restore {
path: Option<String>,
last_run: bool,
},
Update {
offline: bool,
install: bool,
},
Skill {
agent: Option<AgentEditor>,
},
Setup {
status: bool,
},
Doctor {
path: Option<String>,
fix: bool,
},
Install {
channel: Option<TargetChannel>,
dry_run: bool,
},
Uninstall {
deep: bool,
},
}Variants§
Init
Workspace onboarding & discovery: crawl paths for Git repositories and register them.
Link
Register a single Git repository for pruning (defaults to current directory .).
Fields
Unlink
Remove a repository from the dev-prune registry (does not delete workspace files).
Fields
Undo
Revert the most recent init or link action.
Run
Run a prune pass across all registered repositories or a target directory (devp run .).
Fields
target_path: Option<String>Optional target workspace path. If omitted, runs across all registered repositories.
daemon: boolMark this as the scheduled background pass. Repositories that set
disable_daemon in .devprune.json are skipped. Set by the installed scheduler.
only: Option<String>Act only on these package managers (comma-separated),
e.g. --only npm,pnpm. Unknown names are an error.
Status
View system dashboard: registered repos, background daemon, Git hooks & space metrics.
Fields
top: Option<u64>Show only the N repositories with the most reclaimable space.
The dashboard lists every registered repository, which on a machine with a
hundred of them buries the handful actually worth pruning. Applies to the TUI,
the plain table and --json alike.
Zero is rejected up front: “show the top 0” can only be a typo, and an empty dashboard that looks like an empty registry is worse than a usage error.
drift: boolReport lockfile drift instead of the dashboard: environments holding packages their lockfile never recorded — the installs a prune would refuse to delete because nothing could bring them back.
A pure read: no package manager runs, nothing is written. Checked where a file-level comparison exists — npm, uv and venv projects.
Stats
Show lifetime space reclaimed, recent prune passes, and the biggest repositories.
Trust
Report what dev-prune is allowed to do on this machine, and what it has been given permission to do.
Fields
Completions
Print a shell completion script for bash, zsh, fish, PowerShell or elvish.
Man
Print or write man pages, generated from the same definitions --help prints.
Fields
command: Option<String>The command whose page to read, e.g. devp man run. Omit for the
contents page.
Caches
Report the size of every package manager cache on this machine (read-only unless you ask for clear).
Fields
json: boolEmit the report as one JSON document instead of the table.
Global within caches so it can be written after the subcommand too —
devp caches clear npm --json is what everyone types.
action: Option<CachesAction>Config
Manage global settings, background daemon, Git hooks, custom icons, or per-project .devprune.json.
Fields
action: Option<ConfigAction>Restore
Restore dependencies in a project using its lockfile (npm ci, pnpm install, uv sync).
Fields
Update
Print the installed version, check for a newer release, and show how to upgrade.
Fields
Skill
Export SKILL.md and display ready-to-copy AI Agent onboarding & skill import prompts.
Fields
agent: Option<AgentEditor>Write rules for one editor’s agent into the current repository instead.
Each value below names the exact file it writes. Five of them —
agents-md, copilot, gemini, junie, zed — share a file with
other tools, so dev-prune owns a marked block inside it and leaves every
byte outside the markers as found. Claude Code needs no per-repo file:
plain devp skill installs its skill globally.
Setup
Install whatever dev-prune integration is missing: alias, SKILL.md, Git hooks, scheduler.
Doctor
Diagnose the installation, or one repository if given a path (devp doctor .).
Fields
fix: boolRepair what the installation check finds broken: refresh a stale or missing
devp twin, re-export SKILL.md, re-register a scheduler or Git hooks whose
binary moved, and drop registry entries whose repository is gone.
Repairs only what was installed and has since broken — it never installs an
integration that was never set up (that is devp setup), and it cannot fix a
corrupt registry file, which needs a human decision.
Install
Move this install to another package manager: devp install --channel uv.
Fields
channel: Option<TargetChannel>The package manager to move this installation to. Omit to print which one owns the running copy, and the names this flag accepts.
Uninstall
Remove dev-prune: scheduler, hooks, PATH entry, agent skill, and every copy of the binary.
Trait Implementations§
Source§impl FromArgMatches for Commands
impl FromArgMatches for Commands
Source§fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
Source§fn from_arg_matches_mut(
__clap_arg_matches: &mut ArgMatches,
) -> Result<Self, Error>
fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>
Source§fn update_from_arg_matches(
&mut self,
__clap_arg_matches: &ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§fn update_from_arg_matches_mut<'b>(
&mut self,
__clap_arg_matches: &mut ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches_mut<'b>( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§impl Subcommand for Commands
impl Subcommand for Commands
Source§fn augment_subcommands<'b>(__clap_app: Command) -> Command
fn augment_subcommands<'b>(__clap_app: Command) -> Command
Source§fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command
fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command
Command so it can instantiate self via
FromArgMatches::update_from_arg_matches_mut Read moreSource§fn has_subcommand(__clap_name: &str) -> bool
fn has_subcommand(__clap_name: &str) -> bool
Self can parse a specific subcommandAuto Trait Implementations§
impl Freeze for Commands
impl RefUnwindSafe for Commands
impl Send for Commands
impl Sync for Commands
impl Unpin for Commands
impl UnsafeUnpin for Commands
impl UnwindSafe for Commands
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more