Goto next milestone
Skill uHappyLogic/cairn/.agents/plugins/cairn/skills/goto-next-milestone
Activate an already-defined milestone — scans milestones/ for a defined-but-not-yet-active directory and updates milestones/README.md to point to it as the current milestone. Requires finish-current-milestone to have been run first (current pointer must be "none").From its SKILL.md
npx -y skills add uHappyLogic/cairn --skill goto-next-milestoneAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 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
3.6 KB, as published. Nobody here has run it
goto-next-milestone
Activates an already-defined milestone by updating milestones/README.md to point to it as the current milestone. The milestone directory must already exist (created by /define-milestone-goal). Run this after /finish-current-milestone has cleared the current pointer to "none".
Usage
/goto-next-milestone
No arguments. The milestone to activate is discovered automatically.
Workflow
1. Check prerequisites
Read milestones/README.md and find the line whose prefix is Current milestone:. If that line is not Current milestone: none (i.e. it still points to an active milestone path), stop and tell the user to run /finish-current-milestone first.
2. Find the candidate milestone
Read milestones/README.md and scan milestones/ to collect:
- All directories matching
milestone_<N>_<slug>/ - All milestone dirs already listed in the
## Milestone Historysection (these are completed)
The candidates are directories that exist in milestones/ but do not appear in ## Milestone History.
- Zero candidates: stop. Tell the user to run
/define-milestone-goalfirst to create a milestone. - One candidate: confirm the path and title with the user, then proceed.
- Multiple candidates: list them (number, slug, path) and ask the user which one to activate before proceeding. When deriving the number from the directory slug, strip leading zeros and treat it as an integer (e.g.
milestone_01_foo→ number1).
3. Update milestones/README.md
In milestones/README.md, overwrite the Current milestone: line with:
Current milestone: `milestones/milestone_<number>_<slug>/`
Leave the ## Current Milestone heading, the ## Milestone History section, and all other content unchanged.
4. Commit the activation
Read and follow the shared commit procedure at ${CLAUDE_PLUGIN_ROOT}/shared/commit-procedure.md (run echo "$CLAUDE_PLUGIN_ROOT" if you need to resolve the path), carrying out its steps yourself. Supply it these two inputs:
- PATHS — this skill's own change set:
milestones/README.md(the file whoseCurrent milestone:pointer it just overwrote). - SUBJECT —
Milestone-activation: milestone_<number>_<slug>.
The shared procedure owns the path-scoped staging, the dirty-own-path no-op guard, and the commit; do not restate those mechanics here.
5. Confirm
On the success path — the commit in step 4 recorded the activation — print exactly one fixed terse status line and nothing else:
Milestone activated.
Do not add the activated milestone's path or title, or a next-step pointer; the committed diff and git log are the durable record.
If instead the step-4 dirty-own-path guard fired (the Current milestone: pointer was unchanged, so nothing was committed), do not print the terse line — print a single concise line stating that nothing changed and briefly why, e.g. No change — the pointer already named that milestone; nothing committed.
Rules
- Do not run if the
Current milestone:line inmilestones/README.mdis notnone— always require/finish-current-milestoneto have been run first. - Do not create any files or directories — the milestone directory must already exist.
- Update
milestones/README.mdonly — do not write the pointer intoCLAUDE.md.