run is a planning-and-execution skill for bigger pieces of work.
You use it when a task is too large, fuzzy, or high-stakes for a single prompt. Instead of throwing one giant instruction at an AI tool, run helps you shape the work into a clear execution package, then hands that package to a portable runner that can execute, monitor, and resume it.
The result is a repeatable workflow:
- Plan the work in a guided session.
- Lock the plan into a structured package.
- Launch it with the runner.
- Check progress, inspect blockers, and resume when needed.
This repo is designed to work as a standalone product. If you can install a skill in Claude Code or Codex and run a shell command, you can use it.
run gives you three user-facing modes:
run session: turn a goal into a launch-ready run packagerun status: inspect a run that is active, blocked, or completerun resume: adjust a run and continue it after a blocker or pause
It also ships a companion CLI:
run-skill --validate: verify a package before launchrun-skill --launch-mode ...: execute the packagerun-skill --status: print a one-shot status summaryrun-skill --follow: stay attached to live progressrun-skill --watch: open a light supervision looprun-skill --dry-run: inspect what would run without executing it
run is useful when you want an AI tool to handle a project with multiple steps, dependencies, and checkpoints.
Good fits:
- research and synthesis projects
- implementation plans that require several passes
- content or document production with review stages
- repo work that needs discovery, edits, validation, and recap
- anything you want to supervise without micromanaging every prompt
Bad fits:
- tiny one-shot tasks
- casual brainstorming
- work where a normal direct prompt is already enough
The workflow has two layers.
Inside Claude Code or Codex, you start with:
/run
or:
$run
The skill walks through the project with you, asks for clarification where it matters, and writes a run package to a folder like:
./runs/<project-slug>/
That folder typically contains:
session.md: the human-readable planning recordblueprint.json: the structured execution contractprogress.md: the durable progress log
Once the package is approved, you use the runner:
run-skill --validate ./runs/<project>/blueprint.json
run-skill --launch-mode standard ./runs/<project>/blueprint.jsonThe runner executes each step in order, records progress, and writes machine-readable and human-readable artifacts as it goes.
Clone this repo somewhere stable, then run:
python3 scripts/install.py --host bothThat installs:
- the
runskill into~/.codex/skills/for Codex - the
runskill into~/.claude/skills/for Claude Code - a Claude Code command wrapper at
~/.claude/commands/run.md - a
run-skillshim in~/.local/bin
The installer only manages run-owned paths. It does not claim or overwrite a host-level ~/.codex/skills/_shared or ~/.claude/skills/_shared.
If ~/.local/bin is not already on your PATH, add it:
export PATH="$HOME/.local/bin:$PATH"Other install variants:
python3 scripts/install.py --host codex
python3 scripts/install.py --host claude
python3 scripts/install.py --host both --mode copy
python3 scripts/install.py --host both --forceRestart Claude Code or Codex after install so the skill is discovered cleanly.
Start in any project directory where you want the work to happen.
In Codex:
$run
In Claude Code:
/run
The skill will help you define:
- what the project is
- what success looks like
- what is out of scope
- what steps need to happen
- which tool should handle each step
- which launch mode fits the work
When the package is ready, it will hand you the exact commands to validate and launch it.
run-skill supports three main launch modes.
standard: execute the approved plan and stop on failure or blockeradaptive: keep the same scope, but allow bounded recovery and retriesexpansion: adaptive behavior plus bounded step creation during execution
Most teams should start with standard unless the work clearly benefits from controlled autonomy.
Each run lives in its own folder. Beyond the core planning files, the runner may create:
launch.jsonrun-state.jsonevents.jsonlblockers.mdblockers.jsonlcompletion-summary.txtcompletion-recap.mdhandoff/logs/steps/...
You do not need to read all of these manually. In normal use:
session.mdis the planning recordprogress.mdis the narrative logrun-skill --statusis the fastest way to inspect statecompletion-recap.mdis the best first read after a run finishes
To inspect a run:
run-skill --status ./runs/<project>/blueprint.jsonTo stay attached while it runs:
run-skill --follow ./runs/<project>/blueprint.jsonTo watch the run with a lighter supervision surface:
run-skill --watch ./runs/<project>/blueprint.jsonIf a run stops, you can reopen it through the skill:
/run resume
or:
$run resume
That flow helps you review blockers, adjust the plan, update blueprint.json, and re-emit the next launch command.
You can also resume from the CLI:
run-skill --resume-lastEach step in a run can route to a specific execution tool.
Built-in tool targets include:
claude-codecodexgeminiskill:<name>
That means a run can mix direct CLI execution and installed skills. For example, one step might use Codex for implementation, another might use Claude Code for synthesis, and another might invoke a separate installed skill.
Blueprint steps can reference another installed skill like this:
{
"tool": "skill:research-brief"
}The runner looks for skills in this order:
- this repo's bundled
skills/ - extra roots from
RUN_SKILL_PATHS ~/.codex/skills~/.claude/skills
This lets you build runs that depend on shared team skills without hardcoding a single workspace layout.
skills/
run/
_shared/
commands/
scripts/
If you are using run for the first time, think of it this way:
- the skill is the planner
blueprint.jsonis the contract- the runner is the operator
- the run folder is the project record
You do not have to learn the full schema up front. Start with /run or $run, approve the package, and let the system generate the structure for you.