askill
rr

rrSafety 100Repository

Sync code and run commands on remote machines. Use when running tests, builds, or commands remotely, syncing files to hosts, setting up remote development, or troubleshooting rr configuration.

142 stars
2.8k downloads
Updated 2/5/2026

Package Files

Loading files...
SKILL.md

rr (Road Runner) CLI

rr syncs code to remote machines and runs commands there. Handles host failover, file sync with rsync, distributed locking, and test output formatting.

Quick Reference

rr run "make test"     # Sync files + run command
rr exec "git status"   # Run command without syncing
rr sync                # Just sync files
rr <taskname>          # Run named task from config
rr provision           # Install missing tools on hosts
rr doctor              # Diagnose issues
rr monitor             # TUI dashboard for host metrics

Two-Config System

rr uses two config files:

ConfigLocationPurpose
Global~/.rr/config.yamlPersonal host definitions (SSH, directories)
Project.rr.yamlShareable project settings (tasks, sync rules)

See config.md for complete config reference.

Minimal Global Config

version: 1
hosts:
  mini:
    ssh: [mac-mini.local, mac-mini-tailscale]
    dir: ${HOME}/projects/${PROJECT}

Minimal Project Config

version: 1
hosts: [mini]

sync:
  exclude: [.git/, node_modules/, .venv/]

tasks:
  test:
    run: pytest -v

Commands Overview

CommandPurpose
rr run "cmd"Sync files, then run command
rr exec "cmd"Run command without syncing
rr syncJust sync files
rr <taskname>Run named task
rr tasksList available tasks
rr provisionInstall missing tools on hosts
rr doctorDiagnose issues
rr host list/add/removeManage hosts

See commands.md for full command reference.

Common Flags

  • --host <name> - Target specific host
  • --tag <tag> - Select host by tag
  • --local - Force local execution
  • --skip-requirements - Skip requirement checks

Tasks

Define reusable commands in .rr.yaml:

tasks:
  test:
    description: Run tests
    run: pytest -v

  deploy:
    steps:
      - name: Build
        run: make build
      - name: Deploy
        run: ./deploy.sh

Run with: rr test, rr deploy

Extra arguments append to single-command tasks: rr test -k "test_login"

See tasks.md for parallel tasks, multi-step tasks, and advanced configuration.

Remote Environment Bootstrap

Declare required tools with require: - rr verifies they exist before running commands:

# .rr.yaml
require:
  - go
  - node

tasks:
  build:
    run: make build
    require: [cargo]  # Task-specific requirement
# ~/.rr/config.yaml
hosts:
  gpu-box:
    ssh: [gpu.local]
    require: [nvidia-smi, python3]  # Host-specific requirements

Run with: rr test-all, rr quick-check

Setup Phase (Once Per Host)

Avoid redundant setup work (dependency sync, migrations) when multiple subtasks run on the same host:

tasks:
  test-all:
    setup: pip install -r requirements.txt   # Runs once per host
    parallel:
      - test-unit
      - test-integration
      - test-e2e

Setup runs exactly once per host before any subtasks execute. If a host runs 3 subtasks, setup runs once (not 3 times).

Parallel Task Flags

FlagPurpose
--streamShow real-time interleaved output with [host:task] prefixes
--verboseShow full output per task on completion
--quietSummary only
--fail-fastStop on first failure (overrides config)
--max-parallel NLimit concurrent tasks
--dry-runShow plan without executing
--localForce local execution (no remote hosts)

Task Dependencies

Define task execution order with depends. Tasks run their dependencies first, then execute their own command:

tasks:
  lint:
    run: golangci-lint run
  test:
    run: go test ./...
  build:
    run: go build ./...

  # Linear chain: lint -> test -> build
  ci:
    description: Full CI pipeline
    depends:
      - lint
      - test
      - build

Run with: rr ci

Parallel Groups in Dependencies

Run multiple dependencies simultaneously:

tasks:
  lint:
    run: golangci-lint run
  typecheck:
    run: mypy .
  test:
    run: pytest

  ci:
    depends:
      - parallel: [lint, typecheck]  # Run simultaneously
      - test                          # Run after parallel completes

Executes: [lint, typecheck] (parallel) -> test

Orchestrator Tasks

Tasks with only depends orchestrate without running their own command:

tasks:
  lint:
    run: golangci-lint run
  test:
    run: go test ./...

  verify:
    description: Run all checks
    depends: [lint, test]
    # No 'run' - just orchestrates

Dependency Flags

FlagPurpose
--skip-depsSkip dependencies, run only the target task
--from <task>Start from a specific task in the chain
rr ci                  # Full dependency chain
rr ci --skip-deps      # Only run ci task itself
rr ci --from test      # Start from test, skip lint

Dependency Features

  • Deduplication: Tasks run once even if referenced multiple times (diamond deps)
  • Validation: Circular dependencies detected at config load
  • Fail-fast: Stops on first failure when fail_fast: true
  • Timeout: Honor timeout field for entire dependency chain

Output Modes

  • progress (default): Live status indicators with spinners
  • stream: Real-time output with [host:task] prefixes
  • verbose: Full output shown when each task completes
  • quiet: Summary only at the end

Example:

rr test-all --stream    # See all output in real-time
rr test-all --dry-run   # Preview what would run
rr test-all --local     # Run locally without remote hosts

Missing tools trigger actionable error messages. Tools with built-in installers (40+) can be auto-installed.

See requirements.md for complete requirements reference.

How It Works

  1. Host Selection: Tries SSH aliases in order until one connects
  2. Requirements: Verifies required tools exist (if configured)
  3. File Sync: Uses rsync with exclude/preserve patterns
  4. Locking: Creates lock on remote; if locked, tries next host
  5. Execution: Runs command with configured environment

Troubleshooting

ProblemFix
SSH failsCheck ssh <alias> manually, verify ~/.ssh/config
"handshake failed" but ssh worksKey not in agent: ssh-add ~/.ssh/id_rsa, add AddKeysToAgent yes to SSH config
"command not found"Add setup_commands or check require config
Sync slowAdd large dirs to sync.exclude
Lock stuckrr unlock

See troubleshooting.md for detailed diagnostics.

Machine Interface (LLM/CI)

Use --machine or -m for structured JSON output:

rr doctor --machine
rr status --machine
rr tasks --machine

See machine-interface.md for JSON envelope format and error codes.

Quick Setup

# 1. Add a host
rr host add

# 2. Initialize project
cd your-project && rr init

# 3. Verify
rr doctor

# 4. Run
rr run "make test"

When to Use Each Command

SituationCommand
Run tests with latest coderr run "make test"
Quick check on remoterr exec "git log -1"
Prep remote before multiple runsrr sync
Install missing tools on hostsrr provision
Debug connection issuesrr doctor
Watch resource usagerr monitor
First time setuprr init
Add new machinerr host add

Reference Files

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

95/100Analyzed 2/10/2026

An exceptionally well-documented skill for the Road Runner (rr) CLI. It provides comprehensive coverage of configuration, command usage, task orchestration, and troubleshooting with clear, actionable examples.

100
98
90
95
98

Metadata

Licenseunknown
Version-
Updated2/5/2026
Publisherrileyhilliard

Tags

ci-cdlintingllmobservabilitytesting