Campaign planning
Skill ats4321/claude-engineering-skills/skills/campaign-planning
Decompose and execute large multi-step engineering efforts — multi-file features, migrations, and multi-agent workstreams. Auto-load when a task spans many files/days/agents, when planning a migration or rollout, when coordinating parallel subagents or engineers, when a big effort has stalled half-done, or when delegating slices of work with expectations of unattended execution. Covers risk-first slicing, per-slice done-criteria, dependency ordering, checkpoints that keep the system working, parallelization rules, delegation contracts, and pre-planned failure recovery. NOT for single-slice tasks (just do them) and NOT for the design itself (system-design).From its SKILL.md
npx -y skills add ats4321/claude-engineering-skills --skill campaign-planningAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
17.0 KB, ~3.7k tokens by cl100k_base, as published. Nobody here has run it
Campaign Planning
Purpose
Large efforts fail in characteristic ways: the riskiest part is discovered last, half-done states poison the codebase, parallel workers collide on shared state, and a delegated slice comes back as something else entirely. This skill is the orchestration discipline — slice by risk, verify per slice, keep every checkpoint working, parallelize only true independence, delegate with contracts, and plan the retreat before the advance.
Metadata
- Prerequisites: the design being executed should already exist (
system-designfor systems,refactoring-playbookstep 6 for migrations);change-controlgoverns every individual slice's diff. - Related Skills:
system-design(produces the delivery plan this skill executes),refactoring-playbook(strangler-fig migrations are campaigns),code-review-playbook(reviewing delegated output),research-methodology(digest-form reporting for delegation),engineering-minimalism(the when-NOT gate below). - Owns: work decomposition and slicing; delegation contracts; checkpoint discipline; parallelization rules; failure-recovery planning for multi-step work.
When to Use / When NOT to Use
Use when:
- A task will span many files, sessions, days, or workers (human or agent).
- Planning a migration, rollout, or any effort with a dangerous middle state.
- Dispatching subagents/teammates on slices of one larger goal.
- A big effort has stalled and needs restructuring to finish or retreat.
Do NOT use (load the sibling instead):
- The task fits in one sitting with one verification → just do it; a plan document for a two-hour task is process theater (
engineering-minimalism). - The DESIGN doesn't exist yet →
system-designfirst; you cannot slice what isn't shaped. - The campaign is a code restructuring →
refactoring-playbookowns the behavior-preservation strategy; this skill orchestrates its slices. - A single slice is failing →
debugging-playbookfor the failure; return here for whether the campaign continues.
Definitions & Mental Model
- Slice: a unit of campaign work with its own done-criteria and verification, sized so one worker completes it in one focused stretch, and shaped so the system still works when it lands.
- Checkpoint: the state after a slice lands — always green (builds, tests pass, system runs). Campaigns move checkpoint to checkpoint, never through mud.
- Risk-first ordering: the slice most likely to invalidate the plan ships first — it is the cheapest place to learn you're wrong.
- Delegation contract: the written agreement handed with a slice — inputs, expected output shape, verification the delegate must run, and blocked-behavior instructions.
- Retreat plan: the pre-decided answer to "how do we get back to a good state if this stalls at 60%?"
Mental model: a campaign is a sequence of releasable states, not a pile of tasks. The naive decomposition ("first all the models, then all the handlers, then all the tests") produces slices that are categories — nothing works until everything does. The professional decomposition produces slices that are increments — after each one, the system is whole, verified, and better. Two consequences follow: risk goes first (an increment that disproves the plan on day one saves the month), and the middle states are safe by construction (any checkpoint is a place you can stop, ship, or retreat from). Delegation adds the third law: a slice handed off without a contract comes back as a surprise.
Core Methodology
- Run the when-NOT gate. Estimate honestly: one worker, one sitting, one verification? Then skip the ceremony and do it. Campaign machinery is for work that cannot be held in one head at one time.
- Slice by risk and increment, not by layer or file (decision tree):
How to cut the work?
├─ FIRST SLICE = the assumption that could invalidate everything:
│ the unproven integration, the performance question, the
│ "does the API even allow this?" — build the thinnest end-to-end
│ path through it. If it fails, the campaign redesigns cheaply.
├─ EACH SUBSEQUENT SLICE = one increment that leaves the system
│ working: a vertical path, a migrated consumer, a replaced module
│ behind a stable seam — never "all the Xs".
├─ A slice needing >1 focused stretch → split it.
├─ A slice that can't be verified alone → merge it with what
│ verifies it, or reshape the boundary (contracts-as-seams:
│ architecture-analysis).
└─ Work nobody asked for appearing in a slice → cut it
(engineering-minimalism).
- Write per-slice done-criteria and verification BEFORE starting. Each slice gets one line each: done means (observable state) and verified by (the command/check that proves it). A slice without a verification line is not plannable — it is hope with a name. (Verification craft:
validation-and-testing.) - Order by dependency, explicitly. For each slice: what must already be true when it starts? Draw the arrows (a list is fine; a graph if it branches). Two rules: no slice starts on an unverified predecessor, and shared-state slices are ordered, never parallel (step 6).
- Enforce checkpoint discipline. A slice lands only when its verification passes AND the whole system is green. If a slice cannot land green, its boundary is wrong — reshape it (feature flags and seams exist for exactly this:
configuration-management,architecture-analysis). The campaign's invariant: at every checkpoint, stopping forever is acceptable. That is what makes stalls survivable and priorities changeable. - Parallelize only true independence. Two slices may run in parallel only if: no shared files/state, no dependency arrow between them, and separate verifications. Everything else is sequential — the coordination cost of "careful" parallel work on shared state exceeds the time saved, every time. For agent swarms this is absolute: agents cannot negotiate over an edit conflict; the orchestrator must never create one.
- Delegate with a contract. Every handed-off slice carries, in writing:
- Context: the minimum background the delegate needs (not the whole campaign — context is a budget).
- Inputs: files, facts, constraints — including what is read-only.
- Expected output: the shape of what comes back (a diff, a file, a report in digest form —
research-methodologystep 7). - Verification to run: the exact check the delegate executes before reporting done.
- Blocked behavior: "if you cannot proceed, STOP and report the blocker with what you tried — do not improvise around it." Improvisation around a blocker is how one bad slice becomes three.
On return: review the output against the contract (
code-review-playbookfor code), and run the verification yourself before integrating — trust the work, verify the claim.
- Plan the retreat before the advance. Before slice 1: what is the rollback unit (revert a commit? a branch? a flag flip?), and what happens to completed slices if the campaign is abandoned at each checkpoint? Because of step 5's invariant, the answer should always be "keep them — they stand alone." If a slice's failure would poison siblings (shared migration state, half-renamed concepts), redesign the slicing until it wouldn't.
- Track status in one visible place. One list: slice → state (pending / in-progress / verified / blocked) → owner. Updated at every checkpoint. The campaign's single source of truth prevents the classic multi-worker failure: two owners, or zero, for the same slice.
- On slice failure, contain then decide. A failed slice stops itself, not the campaign: siblings at their checkpoints are safe by construction. Diagnose (
debugging-playbook); then choose explicitly — retry with what was learned, reshape the slice, or retreat per step 8. What is never acceptable: pushing forward on top of an unverified failure.
Campaign checklist
- When-NOT gate passed: this genuinely exceeds one sitting/head
- Slice 1 attacks the plan-invalidating risk, end to end
- Every slice: one-line done-criteria + one-line verification, written before start
- Dependency order explicit; no slice starts on an unverified predecessor
- Every checkpoint leaves the whole system green and stop-forever-acceptable
- Parallel slices share nothing — no files, no state, no dependency arrow
- Every delegation carries: context, inputs, output shape, verification, blocked-behavior
- Delegated output verified by the orchestrator before integration
- Retreat plan written before slice 1; per-checkpoint abandonment answered
- One visible status list, updated at checkpoints
Discovery & Audit Commands
This domain is judgment-driven; the applicable commands audit campaign hygiene in a repository:
# Is a stalled campaign already in flight? (half-done states, abandoned branches)
git branch -a | head -20
git log --oneline -20 # look for "WIP", "part 1/", stalled sequences
git stash list # forgotten half-states
# Checkpoint health: is the system green right now?
git status --short # clean tree = a real checkpoint
pytest tests/ -x 2>/dev/null || npm test # the repo's verification, whatever it is
# Blast-radius map before slicing (what does the change touch?)
grep -rln "the_concept_being_changed" --include="*.py" --include="*.ts" . | grep -v node_modules | wc -l
# Shared-state collision check before parallelizing two slices
# (run per slice; overlapping file lists = sequential, not parallel)
git log --oneline -5 --name-only -- path/to/slice-A-area | sort -u
Failure Modes & Anti-patterns
| Symptom | Mistake | Correction |
|---|---|---|
| Month of work, fatal flaw found in week four | Riskiest slice scheduled last | Risk-first: the plan-invalidating assumption is slice 1 (step 2) |
| Nothing runs until everything is done | Sliced by layer/category, not increment | Vertical increments; every checkpoint whole and green (steps 2, 5) |
| Campaign stalls; codebase stuck half-migrated | No checkpoint invariant, no retreat plan | Stop-forever-acceptable checkpoints; retreat written before slice 1 (steps 5, 8) |
| Two agents edit the same file; both slices lost | Parallelized shared state | True-independence test; shared anything = sequential (step 6) |
| Delegated slice returns the wrong thing entirely | No contract — a vibe was delegated | Context + inputs + output shape + verification + blocked-behavior (step 7) |
| Delegate "worked around" a blocker into new breakage | Blocked-behavior unspecified | "Stop and report" is part of every contract (step 7) |
| Orchestrator integrates unverified delegate claims | Trusted "done" without running the check | Run the slice's verification yourself before integration (step 7) |
| Failed slice, campaign pushes on regardless | No contain-then-decide discipline | Stop the slice, diagnose, explicitly retry/reshape/retreat (step 10) |
| Nobody knows what's left or who owns what | Status scattered across chats and heads | One visible slice list, updated at checkpoints (step 9) |
| Planning document longer than the work | Campaign machinery on a one-sitting task | The when-NOT gate; just do small things (step 1) |
Worked Example
Task: migrate a service's persistence from JSON files to SQLite — ~30 call sites, must stay shippable throughout.
- Gate: many files, multiple sessions, a dangerous middle — a campaign.
- Risk-first slice 1: the plan-invalidating question is concurrent-write behavior under SQLite with the service's access pattern. Slice 1 builds the thinnest path: one storage seam interface, an SQLite implementation of it, and a two-writer stress check. Done: both backends pass the same seam tests. Verified by: the seam's test file. (Had SQLite failed here, the campaign would have pivoted in a day, not a month.)
- Slices 2–5: migrate consumers seam-ward one vertical group at a time (readers; writers; the exporter; the CLI) — each slice: switch that group to the seam, tests green, JSON still the backing store. Every checkpoint ships.
- Slice 6: flip the backing store behind a config flag (
configuration-management), dual-write for one release, verify parity with a comparison script. - Slice 7: remove JSON writes; slice 8 (the strangling): delete the JSON path entirely — scheduled, not "someday" (
refactoring-playbookstep 6). - Parallelization: slices 2 and 3 touch disjoint modules with no shared arrows → run in parallel by two workers. Slice 4 touches files slice 3 owns → sequential.
- Delegation: slice 3's contract to a subagent: the seam interface (read-only), the writer files list, expected output "a diff switching writers to the seam, plus passing
pytest tests/storage/", and "if any writer needs seam changes, STOP and report — do not modify the seam." The subagent hits exactly that blocker on one exotic writer, stops, reports; the orchestrator amends the seam in a micro-slice, and slice 3 resumes. - Retreat: every checkpoint keeps JSON as truth until slice 6; abandoning anywhere before it costs nothing but the seam — which is an improvement on its own.
Repository Examples
Repo facts below are point-in-time illustrations — examples, never assumptions about your system.
- This library's own construction (2026-07-04/06) — a live campaign case study: skills were authored by parallel writer agents from one shared spec and fact pack (delegation contracts: format spec + fact pack + output shape); when the writers' file-writes were permission-denied, the recovery was contract renegotiation — agents returned contents as text for the orchestrator to persist — without poisoning sibling slices; when a second writer wave was killed by session limits before producing anything, the retreat plan executed: the orchestrator authored the slices directly, checkpoint by checkpoint, each skill landing whole and registered before the next began. Three independent reviewers ran as parallel slices (no shared state); one died mid-run and its lens was covered by orchestrator spot-checks — contain, then decide.
- prism (
~/prism, as of 2026-07-04) — checkpoint discipline in a 4-commit history:e264a72(working skeleton) →b7bbabb(docs synced) →51b92c9(hardening) →b011239(tests locking the hardening) — each commit a green, stop-forever-acceptable state; the hardening and its verification landed as adjacent slices. - orphy (
~/orphy, as of 2026-07-04) — slicing by contract: phases connected by JSON contracts with deterministic validators gating each, designed so phases are independently implementable — slice boundaries chosen where verification is possible, which is step 2's rule made architectural.
Validation Criteria
You applied this skill correctly when:
- Slice 1 demonstrably attacked the campaign's plan-invalidating risk, and you can say what would have happened had it failed.
- Every landed slice's checkpoint was green — provable from the history (each merge/commit passes the suite).
- No two parallel slices' file sets intersected (auditable from their diffs).
- Every delegation's contract exists in writing, and the orchestrator ran each verification before integrating.
- At any point mid-campaign, you could answer "what happens if we stop today?" with "we keep everything landed."
- If anything failed, the record shows contain → diagnose → explicit retry/reshape/retreat — never advance-on-red.
Provenance & Maintenance
- Sources: this library's own build campaign (2026-07-04/06, first-hand),
~/prism,~/orphy— investigated 2026-07-04. Skill authored 2026-07-06; methodology is repo-independent. - Assumptions: the prism commit sequence is read as deliberate checkpointing (Candidate — consistent with the history; the author's intent is not documented).
- Re-verification commands:
git -C ~/prism log --oneline ls ~/.claude/skills/ | wc -l # the library campaign's own artifact count - Likely to drift: the library-build case study's details as the library evolves; agent-orchestration platform capabilities (delegation mechanics improve).
- Maintenance checklist:
- Re-run re-verification; re-stamp Repository Examples.
- After each future library campaign, update the first-hand case study with new lessons.
- Confirm cross-referenced skills still exist under their directory names.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.