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"]
}
}
}