- Ship one self-contained Rust binary that is easy to copy to a workstation or server.
- Read devkit TOML config dynamically and expose configured tasks, language pipelines, setup defaults, and validation rules.
- Provide uniform language verbs:
fmt,lint,type,test,fix,check, andci. - Keep core workflows non-interactive, scriptable, idempotent where possible, and dry-run aware.
- Preserve config comments when the CLI edits TOML.
dev [GLOBAL] <command> [args]
Global:
-C, --chdir <PATH> Change working directory before running
-f, --file <PATH> Use an explicit config file
--project <NAME> Select a named project from config
-l, --language <NAME> Override default_language
-n, --dry-run Print commands without executing where supported
-v, --verbose... Increase verbosity
--no-color Disable color
Commands:
list
run <task>
start [--port <PORT>] [--prod]
fmt | lint | type | test | fix | check | ci
all <fmt|lint|type|test|fix|check|ci>
config [show]
config path
config check
config generate [PATH] [--force]
config reload
config add [NAME] [--force] [--append] -- <command...>
language set <NAME>
install [<NAME>] [--force] [--no-scaffold]
env [--raw] [list]
env get <KEY>
env add <KEY> <VALUE>
env rm <KEY>
env profiles
env switch <PROFILE>
env save <NAME>
env check
env init
env template
env diff [REF]
env sync [REF]
git branch-create <NAME> [--from <BASE>] [--push] [--allow-dirty]
git branch-finalize [NAME] [--into <BASE>] [--delete] [--allow-dirty]
git release-pr <major|minor|patch|prerelease> [--from <BASE>] [--to <HEAD>] [--no-open]
version show
version bump <major|minor|patch|prerelease> [--custom <X.Y.Z>] [--tag] [--no-commit] [--no-changelog]
version changelog [--since <REF>] [--unreleased]
update [--check] [--version <TAG>] [--repo <OWNER/REPO>] [--install-dir <DIR>] [--yes]
setup
setup run [--skip-installed] [--no-deps] <COMPONENT...>
setup inference <SERVICE> [--dest <PATH>] [--force] [--no-cache]
setup all [--skip-installed] [--no-deps]
setup status
setup list
setup config
review [--output <PATH>] [--include-working] [--main]
walk [DIR] [-o, --output <PATH>] [--stdout] [--format <FMT>] [--max-depth <N>] [--no-content]
[--extensions <EXT...>] [--include-hidden]
The first-class verbs are hidden clap variants so dynamic help can summarize configured pipelines cleanly.
Core fields:
default_language = "rust" | "python" | "typescript" | "elixir"[tasks.<name>]withcommands = [[...], ...]or string references to other tasks.[languages.<name>.pipelines]mappingfmt,lint,type,test,fix,check, andcito task names.[git]formain_branch,release_branch,version_file, andchangelog.[env]forrequiredandoptionalkey lists.[summary]for shell and output capture limits.[setup]for default components, skipped components, and tool versions.
Config discovery order:
- Explicit
--file. .dev/config.<os>.toml..dev/config.toml.tools/dev/config.<os>.toml.tools/dev/config.toml.~/.dev/config.toml.
Missing explicit or discovered config is an error. Missing home-default config is treated as an empty config for command families that can run without configured tasks.
- Composite tasks flatten into ordered command lists before execution.
- Command arrays execute directly without an implicit shell.
- Shell syntax belongs in an explicit command such as
["sh", "-lc", "..."]. - Raw tasks stream output with
[ok],[warn], and[error]status markers. - First-class verbs capture output and print compact summaries.
- Task execution stops on first failure unless the task marks a command as allowed to fail.
branch-create:
- Requires a clean worktree unless
--allow-dirtyis set. - Resolves the base branch from
--from, then[git].main_branch, thenorigin/HEAD, then localmain/master, then the current branch. - If
originexists, fetches and fast-forwards/rebases the base before creating the new branch. - If no remote exists, skips remote work and creates the local branch.
- Pushes with upstream tracking only when
--pushis set.
branch-finalize:
- Defaults the feature branch to the current branch when
NAMEis omitted. - Resolves the target base from
--intousing the same fallback order as branch creation. - Merges the feature branch into the base with
--no-ff, pushes when a remote is available, and optionally deletes the feature branch locally/remotely with--delete.
release-pr:
- Requires a bump level.
- Uses
[git].release_branchor the--tooverride for the release head. - Updates version/changelog state, pushes the release branch, and opens a GitHub PR with
ghunless--no-openis set.
Version detection uses git.version_file first, then common manifests:
pyproject.toml→[project].versionpackage.json→versionCargo.toml→[package].version
version bump updates the manifest, updates changelog unless --no-changelog is set, commits unless --no-commit is set, and tags when --tag is passed. Changelog dates use the current local date.
Tagged releases build the dev binary for Linux and macOS on x86_64 and aarch64. Release assets are named dev-<tag>-<target>.tar.gz and include a top-level dev executable, README, and license. A checksums.txt file is published beside the archives.
scripts/install.sh is the supported curl installer. It detects OS/architecture, resolves the latest GitHub release unless DEVKIT_VERSION is set, downloads the matching archive, verifies checksums.txt when sha256sum is available, and installs to DEVKIT_INSTALL_DIR or $HOME/.local/bin.
dev update uses the same release asset naming. --check performs a non-mutating version comparison. Installation requires --yes or an interactive confirmation, honors global --dry-run, keeps the previous binary as dev.old, and verifies the installed binary reports the requested version.
dev install rust:
- Ensures Rust formatting/lint components are available.
- Writes
.cargo/config.tomlwhen absent unless--no-scaffoldis set. - Runs optional
languages.rust.installprovisioning commands.
dev install python:
- Ensures
uvwhen configured. - Runs
uv syncwhen appropriate. - Writes
ruff.toml,mypy.ini,.pre-commit-config.yaml, and.env.exampletemplates when absent.
dev install typescript:
- Uses
pnpmwhen available and falls back to npm-oriented tooling where configured. - Writes
eslint.config.ts,tsconfig.json,vitest.config.ts, and.prettierrctemplates when absent.
dev install elixir:
- Scaffolds Elixir-oriented configuration from the embedded template set.
.envlookup starts in the working directory and falls back to the git root.dev envmasks values unless--rawis passed.get,add, andrmpreserve comments and ordering.- Profiles are
.env.<name>files, excluding.env.example. checkvalidates required and optional keys from config.template,init,diff, andsyncoperate against.env.exampleby default.
Setup components:
system_packagesgit_lfsuvrustupnodepnpmpm2dockernvidia_container_runtimecuda_toolkit_hostzoxideatuinngrokrm_guard
Dependency rules:
git_lfsdepends onsystem_packages.dockerdepends onsystem_packages.pnpmdepends onnode.pm2depends onnodeandpnpm.nvidia_container_runtimedepends ondocker.
detect() functions must remain pure and side-effect free. Installers must be idempotent and dry-run aware. CUDA host detection uses Installed, Partial, PresentButUnknown, and NotInstalled states so existing OEM images are validated rather than overwritten.
setup inference <service> clones or updates https://github.com/bakobiibizo/dev-<service>.git, strips explicit Compose container_name: entries to avoid collisions, and runs scripts/setup.sh.
review generates Markdown code review reports from staged diffs, working tree diffs, or branch comparison to main. walk generates Markdown directory manifests with file contents by default and supports extension filtering, max-depth limits, hidden-file inclusion, and stdout output via --stdout.
First-class verbs run configured pipelines through the configured shell, capture bounded stdout/stderr, and print either an LLM-generated summary or a deterministic tail summary.
crates/dev/
Cargo.toml
src/
main.rs
cli.rs
cli_help.rs
dispatch.rs
config.rs
tasks.rs
envfile.rs
gitops.rs
versioning.rs
review.rs
walk.rs
templates.rs
commands/
config.rs
env.rs
git.rs
language.rs
review.rs
setup.rs
task.rs
version.rs
walk.rs
core/
changelog.rs
exec.rs
git.rs
output.rs
summarize.rs
scaffold/
elixir.rs
python.rs
rust.rs
typescript.rs
setup/
component.rs
context.rs
cuda.rs
docker.rs
system.rs
templates.rs
tools.rs
templates/
clapandclap_derivefor CLI parsing.anyhowfor errors.serde,serde_json,toml, andtoml_editfor config.caminoanddirsfor paths.chronofor changelog dates.rust-embedfor template embedding.- Native
std::process::Commandhelpers for subprocess execution.