Skip to content

princepal9120/devrunner

devrunner

One command. Any project. Zero configuration.

CI Release License Contributions welcome

devrunner test
# or the short alias:
dr test

That's it. Whether your project uses npm, yarn, pnpm, bun, cargo, poetry, gradle, or any of 20+ other tools — devrunner (or dr) figures it out.

Why?

Modern development involves constantly context-switching between different ecosystems.

  1. "What command do I run?" Is this project using npm, yarn, pnpm, cargo, poetry, or make? devrunner eliminates this friction. Just type dr build and it works.
  2. "I don't have that tool installed." Thanks to our Zero-Install Architecture, if you clone a project and don't have cargo or npm installed, devrunner will seamlessly proxy to mise or proto to silently provision the correct toolchain in the background.

One command. No manual tool installations.

Install

# Linux/macOS
curl -fsSL install.cat/princepal9120/devrunner | bash

# Windows (PowerShell)
irm install.cat/princepal9120/devrunner | iex

# Or via Cargo
cargo install devrunner-cli

Usage

devrunner test              # Runs test with detected tool
devrunner build             # Runs build
devrunner lint              # Runs lint
devrunner dev               # Runs dev server

# Pass arguments after --
devrunner test -- --coverage --watch

# Works from any subdirectory
cd src/components && devrunner test    # Finds package.json in parent dirs

Supported Tools

Ecosystem Tools (priority order)
Monorepo nx → turbo → lerna
Node.js bun → pnpm → yarn → npm
Deno deno
Python uv → poetry → pipenv → pip
Rust cargo
PHP composer
Go task → go
Ruby bundler → rake
Java gradle → maven
.NET dotnet
Elixir mix
Swift swift (SPM)
Zig zig
Generic just → make

Detection is based on lockfiles first (more specific), then manifest files.

Options

devrunner test --dry-run         # Show command without executing
devrunner test --verbose         # Show detection details
devrunner test --quiet           # Suppress output except errors
devrunner test --levels=5        # Search up to 5 parent directories (default: 3)
devrunner test --ignore=npm,yarn # Skip specific runners
devrunner test --no-auto-install # Skip auto-install, show hint only
devrunner --update               # Force update check

Configuration

Create ~/.config/devrunner/config.toml for global settings:

max_levels = 5
auto_update = true
ignore_tools = ["npm"]

# Advanced update settings (optional)
[update]
enabled = true              # Enable auto-update (default: true)
check_interval_hours = 2    # Hours between update checks (default: 2)

# Toolchain auto-install via mise/proto (optional)
[toolchain]
auto_install = true         # Auto-install missing tools (default: true)
backend = "auto"            # "auto" | "mise" | "proto" | "none"

Or devrunner.toml in your project for local overrides.

Precedence: CLI args > local config > global config > defaults

Auto-Install Missing Tools

When a project's tool is detected but not installed (e.g. Cargo.toml found but cargo missing), devrunner tries to auto-install it transparently via mise or proto before falling back to a manual install hint.

# User installs only devrunner + mise (once)
curl https://mise.run | sh   # install mise

# Then on any project, just:
dr build   # ← devrunner auto-installs cargo/npm/etc. via mise if missing

The fallback chain is:

  1. Tool installed → use it directly (fast path)
  2. Tool missing + mise availablemise exec -- <tool> <cmd> (auto-installs)
  3. Tool missing + proto availableproto run <tool> -- <cmd> (auto-installs)
  4. Nothing available → show install hint + suggest installing mise

Disable for a single run:

dr build --no-auto-install   # show hint only, don't delegate to mise/proto

Disable globally:

# ~/.config/devrunner/config.toml
[toolchain]
auto_install = false

Conflict Resolution

When multiple lockfiles exist (e.g., package-lock.json + yarn.lock):

  1. Corepack — If package.json has a packageManager field, uses that tool
  2. If only one tool is installed → uses it with a warning
  3. If multiple tools installed → error with suggested action
  4. If no tools installed → shows installation instructions

Exit Codes

Code Meaning
0 Success (passes through original exit code)
1 Generic error
2 No runner found
3 Lockfile conflict
127 Tool not installed

Auto-Update

Updates happen silently in the background after commands complete (every 2 hours by default).

Disable with:

  • Environment variable: RUN_NO_UPDATE=1
  • Legacy config: auto_update = false
  • New config section: [update] enabled = false

Shell Completions

# Bash
devrunner completions bash > ~/.local/share/bash-completion/completions/devrunner

# Zsh
devrunner completions zsh > ~/.zsh/completion/_devrunner

# Fish
devrunner completions fish > ~/.config/fish/completions/devrunner.fish

# PowerShell
devrunner completions powershell >> $PROFILE

# Alias completions are also available
dr completions bash > ~/.local/share/bash-completion/completions/dr
dr completions zsh > ~/.zsh/completion/_dr

AI Agent Integration

The installer automatically configures AI coding assistants (Claude Code, OpenCode, Codex) to use dr as the universal task runner.

If you installed manually or want to reconfigure, add this to your AI tool's global config:

Claude Code (~/.claude/CLAUDE.md):

## devrunner
Use `dr <command>` or `devrunner <command>` as the universal task runner.
Do NOT call npm run, cargo, make, etc. directly — use `dr <command>` instead.
Examples: `dr test`, `dr build`, `dr lint`, `dr dev`

OpenCode / Codex (~/.config/opencode/AGENTS.md or ~/.codex/AGENTS.md): same content.

npx skills — install devrunner as an agent skill in any project:

npx skills add princepal9120/devrunner

This installs SKILL.md into .claude/skills/ (or .agents/skills/) so any agent in that project automatically knows to use dr.

Development

git clone https://github.com/princepal9120/devrunner.git
cd devrunner
make precommit   # Format, lint, test, audit
cargo build --release

Contributing

Contributions are welcome. Good first contributions include new ecosystem detection tests, clearer error messages, install-script fixes, and documentation improvements.

Before opening a PR, run:

make precommit

See CONTRIBUTING.md for setup, testing guidance, and the pull request checklist. Please also read the Code of Conduct and report vulnerabilities through the private process in SECURITY.md.

License

AGPL-3.0. See LICENSE.


Made with mass production by princepal9120

About

One command. Any project. Zero configuration.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors