v0.7.1 is live — Read release notes →

The bridge between human
and AI tooling

Define functions once. Run them in your terminal, or expose them to AI agents via MCP.

Zero TypeScript boilerplate. Zero complex SDKs. Just write Bash, Python, or Node with typed signatures and let AI agents discover your tools automatically.

# Runfile — Human workflows & AI tools in one file

# @desc Search codebase for patterns and file types
# @arg query Search substring or regex
# @arg ext File extension filter (default: ".rs")
# @shell python
search(query: str, ext = ".rs") {
    # 'query' and 'ext' are auto-injected from signature
    import os
    for root, _, files in os.walk("."):
        for f in files:
            if f.endswith(ext) and query in f:
                print(f"{root}/{f}")
}

# @desc Deploy service to staging or production
# @arg env Target environment (staging|prod)
# @arg version Release version tag
deploy(env: str, version = "latest") {
    echo "Deploying $version to $env..."
    ./scripts/deploy.sh "$env" "$version"
}

# @depends fmt:check, clippy:check, test
# @parallel
# @desc Run complete CI verification pipeline in parallel
ci() {
    echo "✓ All checks passed in parallel!"
}
# Discover all available tasks with their docstrings
$ run --list
  search   query [ext]          Search codebase for patterns and file types
  deploy   env [version]       Deploy service to staging or production
  ci                             Run complete CI verification pipeline in parallel

# Execute with positional or default arguments
$ run search "parser" .rs
./run/src/parser.rs

$ run deploy prod v0.7.1
Deploying v0.7.1 to prod...

# Run dependency graph tasks in parallel
$ run ci -p
# Generated automatically by `run --serve-mcp`
{
  "name": "deploy",
  "description": "Deploy service to staging or production",
  "inputSchema": {
    "type": "object",
    "properties": {
      "env": {
        "type": "string",
        "description": "Target environment (staging|prod)"
      },
      "version": {
        "type": "string",
        "description": "Release version tag",
        "default": "latest"
      }
    },
    "required": ["env"]
  }
}

Built for Modern Development & AI Agents

Everything you need to automate workflows and empower AI assistants without boilerplate.

Built-in MCP Server

Turn any Runfile into a full Model Context Protocol server via run --serve-mcp. Claude, Cursor, and Antigravity discover tools automatically.

First-Class Signatures

Declare parameters, types, and defaults directly in function headers (task(env: str, port = 8080)). Clean # @arg docs drive schemas.

Polyglot without Glue

Mix Bash, Python, Node, and Ruby seamlessly. Parameters are auto-injected as native variables in Python/Node without manual sys.argv parsing.

Parallel DAG Execution

Define task dependencies with # @depends and run independent branches concurrently via # @parallel or run -p.

Directory Isolation (@cd)

Scope tasks to specific subdirectories with # @cd ./dir. Changes execute in isolated subshells without leaking environment state.

Safe & Deterministic

AI agents can only execute functions you explicitly expose. Strict parameter validation, custom timeouts, and zero arbitrary shell injection.

Install in Seconds

Available as runtool across all major package managers, or directly via Cargo.

Homebrew

brew install nihilok/tap/runtool

Arch Linux

yay -S runtool

Windows Scoop

scoop bucket add nihilok https://github.com/nihilok/scoop-bucket
scoop install runtool

Cargo

cargo install run

Add to your MCP Client Configuration

Add run to Claude Desktop, Cursor, Antigravity, or Claude Code configuration:

{
  "mcpServers": {
    "run": {
      "command": "run",
      "args": ["--serve-mcp"]
    }
  }
}