task-runner-detector

Crates.iotask-runner-detector
lib.rstask-runner-detector
version0.4.0
created_at2026-01-14 22:54:30.06543+00
updated_at2026-01-16 10:38:58.971048+00
descriptionDetect and run tasks from various task runner config files
homepagehttps://github.com/elob/task-runner-detector
repositoryhttps://github.com/elob/task-runner-detector
max_upload_size
id2044096
size250,028
Olle Bröms (EloB)

documentation

README

task

A fast CLI tool that discovers and runs tasks from various config files in your project.

Scans your directory for task runner configs (package.json, Makefile, Cargo.toml, etc.) and presents an interactive picker to run them.

demo

Why task?

In monorepos and multi-package projects, running tasks becomes tedious. You need to remember package names, navigate between directories, and keep track of which scripts exist where.

task solves this by scanning your entire project and presenting every available task in a single, filterable view. No more cd apps/web && npm run dev or trying to remember if it was pnpm --filter @org/api run build or yarn workspace api build.

Just run task, type a few characters to filter, and hit enter.

Installation

# Cargo
cargo install task-runner-detector

# Homebrew
brew install elob/tap/task-runner-detector

# npm
npm install -g task-runner-detector
More installation options

Shell (macOS/Linux):

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/elob/task-runner-detector/releases/latest/download/task-runner-detector-installer.sh | sh

PowerShell (Windows):

powershell -ExecutionPolicy ByPass -c "irm https://github.com/elob/task-runner-detector/releases/latest/download/task-runner-detector-installer.ps1 | iex"

From source:

git clone https://github.com/elob/task-runner-detector && cd task-runner-detector && cargo install --path .

Usage

# Interactive mode - scan current directory, pick and run a task
task

# Scan a specific directory
task /path/to/project

# JSON output for scripting
task --json          # or -j
task --json /path/to/project

# Streaming NDJSON output (outputs results as they're found)
task --json-stream   # or -s

# Filter with fuzzy search (works with --json and --json-stream)
task -j -q "npm dev"
task -s -q "^cargo"  # prefix match

# Include files/folders ignored by .gitignore
task --no-ignore     # or -i

Interactive Mode

The interactive picker shows all discovered tasks organized by folder:

  • Type to fuzzy-filter tasks by name, runner, or path (matched characters are highlighted)
  • Use arrow keys to navigate
  • Press Tab to edit the command before running
  • Press Tab again to expand to the actual script content (e.g., expand npm run build to tsc && esbuild...)
  • Press Tab again to return to selection mode
  • Press Enter to run the selected task
  • Press Esc to go back (Expanded → Edit → Select → Exit)

Readline keybindings in edit mode:

  • Ctrl+A / Ctrl+E - Jump to start/end
  • Ctrl+W - Delete previous word
  • Ctrl+U - Delete line
  • Ctrl+K - Delete to end

Supported Task Runners

Runner Config File Tasks
npm/yarn/pnpm/bun package.json Scripts from scripts field
Make Makefile Makefile targets
Cargo Cargo.toml Binary targets, [package.metadata.scripts]
Turbo turbo.json Pipeline tasks
Just justfile Just recipes
Deno deno.json Deno tasks
Poetry pyproject.toml Poetry scripts
PDM pyproject.toml PDM scripts
Flutter/Dart pubspec.yaml Custom scripts
Maven pom.xml Lifecycle phases, profiles
.NET *.csproj dotnet CLI commands, MSBuild targets

Library Usage

use task_runner_detector::scan;

fn main() {
    let runners = scan(".").unwrap();
    for runner in runners {
        println!("{} @ {}", runner.runner_type, runner.config_path.display());
        for task in &runner.tasks {
            println!("  {} -> {}", task.name, task.command);
        }
    }
}

License

MIT

Commit count: 24

cargo fmt