campaign
Skill4 starsChanged 18 days agoMITView on GitHub
Start, drive, monitor, and stop an Autonomous Improvement Campaign — a durable, repeatable wrapper around the dev-improve loop
8 other projects use a version of this.
Adopted by
Most recently taken up by
- a-lottes/aSPARKtheir own version, first seen Oct 13, 2026
- akachandan1/proofstacktheir own version, first seen Oct 11, 2026
- zyphr-labs/bounty-harnesstheir own version, first seen Aug 26, 2026
- RubyEyedReaper/Odin-Skillstheir own version, first seen Aug 15, 2026
- inkwell-finance/claude-skillstheir own version, first seen Aug 13, 2026
- GTMify/aigtmtheir own version, first seen May 25, 2026
Other versions8 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 8
- a-lottes/aSPARK★ 25same name
- GTMify/aigtm★ 25same name
- inkwell-finance/claude-skills★ 2same name
- zyphr-labs/bounty-harness★ 1same name
- akachandan1/proofstack★ 0same name
- phoenixvn/claude-code-agency★ 0same name
- RubyEyedReaper/Odin-Skills★ 0same name
- victordelrosal/chairman★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 2 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 7 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 45
Stop conditions / halt: if the campaign is terminal, should_stop?
- Very specific: line 47
Refill if dry: if the campaign loop has no queued task, discover within scope — /improve discover <scope> (verify-before-offer gate), …
- Distinctive: line 50
If discovery is dry and nothing is pending → snapshot + report queue-empty + STOP.
- Very specific: line 51
Drive one task: run the /dev-loop <campaign-loop> iteration body on the campaign's loop (pull → re-verify claim → branch campaign/<id> → …
- Very specific: line 56
Park, don't stall: when blocked on something above your decision_authority (live-credential, irreversible external, business-policy/pricing …
- Distinctive: line 92
Core-purity: never make a core file depend on a private extension.
“Common” is measured: kept by at least 6 in 10 of the 7 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/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>.
Dual surface — platform agents call the same actions through the MCP tools platform.campaign_start,
platform.campaign_status, platform.campaign_answer_question, platform.campaign_stop and
platform.campaign_resume.
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
/campaign resume <id> # request a resume (human-confirmed; parks until a person approves)start <name>
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 inconfiguration. - 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 [<id>]
One in-scope improvement, end to end — this is the loop body (compose, don't reinvent):
- Read the campaign:
platform.campaign_status(<id>)(or the most recent active campaign if id omitted). Honourdecision_authority,configurationscope/posture, andstop_conditions. - Stop conditions / halt: if the campaign is terminal,
should_stop?is met, or anemergency_halt/ kill-switch is active → report and STOP (end/loopif active). - 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. - Drive one task: run the
/dev-loop <campaign-loop>iteration body on the campaign's loop (pull → re-verify claim → branchcampaign/<id>→ test-first red → minimal fix → verify → commit on the loop branch, STAGE-only, no push, no Claude attribution → report). - 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.
- 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. - Snapshot progress so the ledger + dashboard reflect the new state.
status [<id>]
platform.campaign_status(<id>) (or list active campaigns). Show completion %, task counts,
open questions, and the recent decision log. Read-only.
answer <id>
List the campaign's open questions (status), then platform.campaign_answer_question(<id>,
question_id:, answer:). The answer unblocks the next /campaign run for that area.
stop <id>
platform.campaign_stop(<id>, summary:) — pauses the campaign's loop schedules and marks the
campaign completed with your summary. Use when scope is drained or the operator calls it.
resume <id>
Resumes a stopped or auto-completed campaign, optionally with updated stop_conditions (for
example a higher max_failed). The action is human-confirmed: platform.campaign_resume(<id>,
stop_conditions:) from any MCP caller parks as a pending approval, and a person confirms it
from their own session (the approval queue, the campaign's Resume button, or
POST /api/v1/ai/campaigns/:id/resume). The requester's MCP client cannot confirm its own
request. Stop values must be valid for their type, and a resume never removes a stop condition.
Decision authority
| Level | The loop decides… | It parks… |
supervised | almost nothing | every non-trivial fork |
monitored | low-risk, reversible items | anything ambiguous |
trusted (default) | design/architecture per best practice; implements test-first/staged, mocks externals | only irreversible-external / live-credential / business-policy-value |
autonomous | everything reversible | only live-credential / irreversible-external |
Posture (inherits the loop body's rules)
- STAGE-only during a run — commit on the campaign branch, never push/land unless the operator says so.
- Test-first bug reproduction; minimal change tracing to the task; no scope creep.
- Core-purity: never make a core file depend on a private extension; extension findings stay extension-scoped.
- Crypto-material safety absolute; bulk-op confirmation for >5 items; 3-strikes → stop & ask.
- One improvement per
run. Park genuine forks rather than guessing.
See autonomous-campaigns convention
(tag guidance-autonomous-campaigns) for the model/driver/tool reference and the rationale.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

