campaign

A system for running a named, repeatable series of code improvements. It manages the work loop, decisions, progress, stop conditions, and questions that need answers.

In plain words
What is it for?
Use it to start, run, monitor, answer questions for, or stop an autonomous code-improvement campaign.
Why use it?
It keeps long-running improvement work organized and lets it pause safely when a decision or piece of information is missing.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/nodealchemy/powernode-platform/campaign
Any agent
npx skills add nodealchemy/powernode-platform --skill campaign
Clone the repo
git clone --depth 1 https://github.com/nodealchemy/powernode-platform

Made for: Claude Code, Codex.

Per session 27 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,338 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
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 $0.00027 $0.01338
Opus 5 $0.00014 $0.00669
Sonnet 5 $0.00005 $0.00268
Haiku 4.5 $0.00003 $0.00134

Measured yesterday against content hash d2562e0dabdc, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

campaign 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 yesterday.

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.

.claude/skills/campaign/SKILL.md · 88 lines

How it starts

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

/campaign — Autonomous Improvement Campaigns

A campaign is a durable, named, repeatable improvement run. It replaces the hand-authored standing prompt + ~/.claude plan files: a run becomes start(config). The campaign owns its scope/posture/decision-authority/stop-conditions, the Ralph loop(s) it drives, a decision log, an async parked-questions queue, and a progress ledger. /campaign run is the Ralph-pattern loop body — drive it repeatedly with /loop /campaign run <id>.

Aliases: /campaign and /autodev are the same skill. Dual surface — platform agents call the same actions via the campaign MCP tool (campaign_start/status/answer_question/stop).

Usage

/campaign start <name>     # create a campaign + its dedicated loop (interactive config)
/campaign run [<id>]       # drive ONE improvement iteration for the campaign (loop body)
/campaign status [<id>]    # progress + open questions + recent decisions (all, or one)
/campaign answer <id>      # answer a parked question to unblock the campaign
/campaign stop <id>        # stop the campaign + pause its loops + record a summary

start

Surface the config, then create. Confirm these with the operator if not given:

  • scope — which tree/area (e.g. a private extension, server/, worker/); stays in configuration.
  • posture/ordering — bugs-first, dead-code, test-gaps, quality; free text in configuration.
  • decision_authority — how much the loop decides vs parks (see table below). Default trusted.
  • stop_conditions — e.g. { "max_failed": 3, "completion_pct": 100 }. Optional.

Call platform.campaign_start(name:, description:, decision_authority:, configuration:, stop_conditions:). It creates the Ai::Campaign and a dedicated campaign-scoped Ralph loop (branch campaign/<id>), starts the campaign, and snapshots initial progress. Report the campaign id + loop branch.

run []

One in-scope improvement, end to end — this is the loop body (compose, don't reinvent):

  1. Read the campaign: platform.campaign_status(<id>) (or the most recent active campaign if id omitted). Honour decision_authority, configuration scope/posture, and stop_conditions.
  2. Stop conditions / halt: if the campaign is terminal, should_stop? is met, or an emergency_halt / kill-switch is active → report and STOP (end /loop if active).
  3. Refill if dry: if the campaign loop has no queued task, discover within scope — /improve discover <scope> (verify-before-offer gate), approve the next in-scope offer (individually, never batch — CLAUDE.md bulk rule), which promotes a task onto the campaign loop. If discovery is dry and nothing is pending → snapshot + report queue-empty + STOP.
  4. Drive one task: run the /dev-loop <campaign-loop> iteration body on the campaign's loop (pull → re-verify claim → branch campaign/<id>test-first red → minimal fix → verify → commit on the loop branch, STAGE-only, no push, no Claude attribution → report).
  5. Record the decision: log what was decided (unblock/skip/build/remove/defer/policy) to the campaign so the operator sees the reasoning, not just the diff.
  6. Park, don't stall: when blocked on something above your decision_authority (live-credential, irreversible external, business-policy/pricing value), park_question! on the campaign and move on or stop — never guess. Parked questions are answered async via /campaign answer.
  7. Snapshot progress so the ledger + dashboard reflect the new state.

Read the full file on GitHub · 88 lines

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. yesterday First seen · 88 lines · 0 tokens per session scan A d2562e0dabdc

Subscribe to this mod's changes

campaign is a skill published in the GitHub repository nodealchemy/powernode-platform (2 stars, last pushed 3d ago), licensed MIT. It adds 27 tokens to every session and 1,338 once invoked, about $0.0001 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-31.

Related

Other skills, from other repositories

good-first-issue-batch

File a batch of contributor-ready GitHub issues from the seeds backlog, re-verifying every candidate against HEAD first so no dead issue reaches a contributor. Activate for prompts like "file some good first issues", "open a batch of GFIs", "publish backlog issues to GitHub", "find contributor-ready work", or after an…

jayminwest/warren · 80 tokens

seeds-issue-audit

Audit and triage open Seeds (sd) issues — find which can be closed, auto-close high-confidence completed ones, and report borderline cases. Activate for prompts like "audit open issues", "which seeds issues can be closed", "clean up the issue tracker", "triage the seeds backlog".

jayminwest/warren · 67 tokens

os-eco-dep-sync

Bump warren onto the latest published @os-eco/ versions across package.json + bun.lock and the Dockerfile CLI pins, then run the gates and open a PR. Use when checking if warren is on the newest burrow/plot/canopy/seeds/mulch/sapling.

jayminwest/warren · 69 tokens

release

Prepare, cut, and verify a warren release — tracker audits, version bump, CHANGELOG curation, ROADMAP update, push, then watch the pipeline through to published artifacts.

jayminwest/warren · 39 tokens

warren-dogfood-pipeline

Full prioritize → dispatch → shepherd → track pipeline against the live warren instance. Audits the seeds backlog around a focus theme, dispatches the surviving issues to warren agents one at a time, babysits the resulting PRs to merge (update-branch, conflict-repair runs, auto-merge), and closes the loop in the…

jayminwest/warren · 116 tokens

canvas

Display HTML content on connected Mayros nodes (Mac app, iOS, Android).

ApiliumCode/mayros · 0 tokens