task-list-runner

task-list-runner is a skill for Claude Code from paulbaranowski/wild-horses. It costs 108 tokens per session (5,444 once invoked), scanned A, original, MIT.

A task runner that executes a JSON list of planned work one task at a time by sending each task to an AI agent. It can resume a task list that already has a task in progress.

In plain words
What is it for?
Use it to run or resume structured implementation plans stored in the project's active execution-plan folder.
Why use it?
It keeps multi-step work in order and records progress in the task list. You do not need to dispatch each task manually.

Skill for Claude Code

Written for Claude Code: disable-model-invocation in frontmatter. Also seen: mentions subagents; names the NotebookEdit tool; mentions Claude Code.

Runs only inside its plugin — its command needs a path that Claude Code sets for a plugin’s own hooks and for nothing else. Install the plugin, not this.

Part of the harness plugin — 3 skills, 2 commands shipped together

Good fit Use it to run or resume structured implementation plans stored in the project's active execution-plan folder.

Compare 6 skills from other repositories ↓
Install

Getting it into your agent

This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.

Claude Code
/plugin marketplace add paulbaranowski/wild-horses
Claude Code
/plugin install harness

Made for: Claude Code.

Or install harness, the plugin that ships this one along with the rest of its 3 skills, 2 commands.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for task-list-runner

README.md
[![agentmods](https://agentmods.dev/badge/skills/paulbaranowski/wild-horses/task-list-runner/github.svg)](https://agentmods.dev/skills/paulbaranowski/wild-horses/task-list-runner)
Your own site
<a href="https://agentmods.dev/skills/paulbaranowski/wild-horses/task-list-runner"><img src="https://agentmods.dev/badge/skills/paulbaranowski/wild-horses/task-list-runner/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for task-list-runner

Your own site · 80×15
<a href="https://agentmods.dev/skills/paulbaranowski/wild-horses/task-list-runner"><img src="https://agentmods.dev/badge/skills/paulbaranowski/wild-horses/task-list-runner.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 108 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 5,444 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00108 $0.05444
Opus 5 $0.00054 $0.02722
Sonnet 5 $0.00022 $0.01089
Haiku 4.5 $0.00011 $0.00544

Measured 9d ago against content hash eb1e42f19f59, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-08, from the pricing page.

Security

Grade A, and why

task-list-runner scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.

The scan reads SKILL.md. This mod also ships 2 executable files (task_list_cli.py, test_task_list_cli.py), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

plugins/harness/skills/task-list-runner/SKILL.md · 178 lines

How it starts

The opening of the file, as written. The whole thing — 178 lines — stays where its author put it; the contents beside it link to each section on GitHub.

task-list-runner

Drive a harness task list (JSON file matching the task-list-schema.md schema) to completion by dispatching each task to a foreground Agent tool call, one at a time. Pairs with task-list-builder, which produces the JSON.

The schema this skill consumes is defined in ${CLAUDE_PLUGIN_ROOT}/task-list-schema.md. Re-read that file rather than relying on memory.

Arguments: $ARGUMENTS


CLI reference — task_list_cli.py

The bundled CLI at ${CLAUDE_PLUGIN_ROOT}/skills/task-list-runner/task_list_cli.py is the canonical interface to the task file.

Invocation form (always): python3 "${CLAUDE_PLUGIN_ROOT}/skills/task-list-runner/task_list_cli.py" <subcommand> --file <path>. Never run the bare script path (.../task_list_cli.py <subcommand>): the file ships without an executable bit, so a bare-path invocation dies with exit 126 (permission denied) and forces a wasted retry. It also won't be auto-approved — the PreToolUse allow-list hook only matches commands that start with python3, so the bare path additionally eats a permission prompt. Every bare task_list_cli.py ... reference below is shorthand for this full python3 "<path>" ... form — expand it when you build the actual Bash call.

Subcommands: next, start, set-status, draft, publish, get, list, status, remaining, verify. All take --file <task-file-path>. Don't invent verbs like show, inspect, info, or view — argparse rejects anything outside the list above and prints the full subcommand help on rejection, so a wrong guess costs one wasted call but the right verb is always one of the ten names just enumerated.

  • next — atomically claim and print the next task. Resumes in-progress, else flips first pending → in-progress. Exits 14 if no tasks remain. Exits 11 if any task is currently drafted — resolve via publish or set-status failed first. Output omits agentValidations by design: the implementation agent calls next to claim its task and must not pre-read the validator's checklist (get and list return the full object — they're for the runner's validator-dispatch and status-display callers). Redaction is at print time only; the on-disk file is unchanged.
  • start --id <N> — flip task N from pending → in-progress.
  • draft --id <N> --commit-msg "<subject>" --log-file <path|-> — flip in-progress task N to drafted; writes the log into the task and parks the commit subject in a per-task /tmp staging file. Does NOT touch git. This is the implementation agent's terminal step within an iteration — the runner takes over and dispatches the validation agent before either publish or set-status failed resolves the draft. Same --log-file - + quoted-heredoc convention as set-status (use stdin to keep it one Bash call).
  • publish --id <N> — flip drafted task N to complete by running git commit against the already-staged git index using the staged subject. Verifies the index is non-empty before committing. On success, removes the staging file. On commit failure (e.g., a pre-commit hook rejects), the task stays drafted and the staging file stays put — the runner can fix the underlying cause and re-run publish --id N. Only the runner calls this (post-validation), never the implementation agent.
  • set-status --id <N> --status complete|failed --log-file <path|-> — flip task N to a terminal status without touching git. Allowed transitions: in-progress → complete (no-code completion, e.g., investigation tasks), in-progress → failed (implementation gave up), drafted → failed (validation rejected the draft after retries). drafted → complete is forbidden — force the happy path through publish so a task cannot reach complete without a commit. Same --log-file - + quoted-heredoc convention as draft (the stdin path is preferred in the dispatched-agent flow because it's one Bash call, not two tool calls each gated separately by the auto-mode classifier).
  • get --id <N> — print one task as pretty JSON. Unlike next, returns the full object including agentValidations — called by the runner during Phase 4 step 7 to source the validation agent's checklist. The implementation agent must not call get for its own task (use next to claim it instead); doing so would surface the validator-only field the redaction is structurally preventing.
  • list [--status <s>] — print all tasks (or filtered) as a JSON array.
  • status — print task counts (including a drafted count) + a precomputed remaining integer (pending + in_progress + drafted, the halt-gate's one number) + plan path. Use this for Phase 5 summary displays AND as the between-iteration halt-gate (it runs load_and_validate like every other command, so a non-zero exit means the file is corrupt). Drafted is non-terminal and counts toward remaining — a draft awaiting publish-or-fail still owes the runner work.
  • remaining — print non-terminal tasks (pending + in-progress + drafted) as a compact JSON array — each entry has just id, title, effort, status. Use for Phase 3's user-facing summary table. The hot-path halt-gate uses status.remaining (the integer) instead so a 30–50-task file doesn't pay an O(N) array on every iteration.
  • verify --id <N> — execute the resolved verifySteps for task N in order, capturing each step's stdout+stderr to /tmp/verify-<id>-step<i>-<slug>.log, stopping on the first failure with that step's exit code, and printing one verify[i/n] <slug> exit=<EX> log=<path> line per executed step. Resolution rule: if task N declares its own verifySteps array, those run (total replacement, not a merge); otherwise the top-level verifySteps runs. So --id selects both the log-file slug and the resolved-steps source — different tasks may run different steps. Auto-approved through the harness PreToolUse hook, so per-task verification runs without per-call prompts; trust for verifySteps content is upstream (task-list-builder).

Read the full file on GitHub · 178 lines

Files

What ships with it

5 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 9d ago First seen · 178 lines · 108 tokens per session scan A eb1e42f19f59

Subscribe to this mod's changes

task-list-runner is a skill published in the GitHub repository paulbaranowski/wild-horses (12 stars, last pushed 21d ago), licensed MIT. It adds 108 tokens to every session and 5,444 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

recipe-create-meet-space

Create a Google Meet meeting space and share the join link.

googleworkspace/cli · 18 tokens

workthreads

SpecStory Workthreads - a weekly work-thread rollup across a team's repos from SpecStory coding histories (any agent - Claude Code, Codex, Cursor, Gemini, and more). It groups the window's sessions into threads of work per project and labels each new / open / recently closed, so a lead sees what shipped, what is still…

specstoryai/getspecstory · 126 tokens

atmos-config

Atmos root configuration: atmos.yaml discovery, precedence, deep merging, basepath, imports, minimal bootstrap, and routing to narrower Atmos skills.

cloudposse/atmos · 31 tokens

story-readiness

Validate that a story file is implementation-ready. Checks for embedded GDD requirements, ADR references, engine notes, clear acceptance criteria, and no open design questions. Produces READY / NEEDS WORK / BLOCKED verdict with specific gaps. Use when user says 'is this story ready', 'can I start on this story', 'is…

Donchitos/Claude-Code-Game-Studios · 77 tokens

autotask-creator

Rules for automation CRUD from the group-chat commander. The commander does not call mutation tools and does not edit cloud/autotasks files directly. It emits one or more top-level ... containers in its final text; the bus parses and applies them after the turn.

Orkas-AI/Orkas · 5 tokens

monorepo-management

Master monorepo management with Turborepo, Nx, and pnpm workspaces to build efficient, scalable multi-package repositories with optimized builds and dependency management. Use when setting up monorepos, optimizing builds, or managing shared dependencies.

wshobson/agents · 54 tokens