← the whole session plugin/skills/on-scope-change/SKILL.md
Use whenever the active scope shifts during a session — entering a sub-task, dropping into a bug, climbing back to a parent goal, or pivoting. Emits a visible nested breadcrumb of the current focus (deepest < parent < root) so the person you're working with gets instant recall of exactly where the agent is in the work's nesting, and fires the chapter-mark (if that tool is available) so it lands in the transcript/TOC.
On Scope Change
Any time your scope changes, print the breadcrumb below and fire the chapter-mark if you have that tool — minimum words per level, hyper-specific words that trigger instant recall for the person you're working with. (An earlier version of this skill said to "update your session title" instead; the chapter-mark below is the current mechanism — if your environment also supports renaming the session title itself, do both.)
The format — TWO lines, never one
The marker and the breadcrumb live on separate lines. This is not cosmetic — it is a scrape contract:
- Line 1 — the marker: the pin emoji + the label
Focus Updated:and NOTHING else. This is the anchor a later scraper greps for. - Line 2 — the breadcrumb: ONLY
{deepest} < {parent} < {root}. No pin, no label, no extra words. This is the payload the scraper grabs from the line immediately below the marker.
📍 Focus Updated:
{deepest active scope} < {parent} < {root}
Read the breadcrumb right-to-left = root → deepest. Each level is the fewest, most specific words that let the person recall exactly what that level is. The chain grows as you descend into sub-work and shortens as you climb back out.
Never truncate the parent chain. If the nesting is deeper than three levels, include every level — do not drop the middle, do not collapse to three. The chain is exactly as long as the real nesting is:
📍 Focus Updated:
fix login redirect < signup flow < onboarding < web app < roadmap
Hard rule: the pin and the label NEVER appear on the breadcrumb line, and the breadcrumb line NEVER contains the pin or label. Two distinct lines, always — so scraping is unambiguous: find the marker line, take the line beneath it.
Examples
The root focus is roadmap (the overall priority list for this project).
If you start on the signup-flow onboarding work:
📍 Focus Updated:
onboarding < web app < roadmap
If the focus then changes to debugging a redirect bug inside it:
📍 Focus Updated:
fix login redirect < onboarding < web app < roadmap
If you climb back out of debugging:
📍 Focus Updated:
onboarding < web app < roadmap
How it surfaces
If you have a session chapter-mark tool available (for example mcp__ccd_session__mark_chapter, part of some Claude Code environments — check whether it's in your current tool list), use it as the mechanism that surfaces the breadcrumb in the transcript / table of contents. After printing the two-line marker, fire the chapter-mark whose title is the breadcrumb only — exactly the line-2 payload, with NO pin and NO Focus Updated: label. The pin and label live solely on the chat marker line (line 1); the chapter title is the pure breadcrumb so the TOC stays clean and the breadcrumb is identical in both places.
mcp__ccd_session__mark_chapter({
title: "{deepest} < {parent} < {root}", // pure breadcrumb — NO pin, NO label
summary: "one line on what this scope covers"
})
If that tool isn't available in your environment, still print the two-line chat marker — that's the part every setup gets — and simply skip the chapter-mark call. Say once, the first time it would have fired, that table-of-contents entries aren't available here, rather than silently doing nothing or pretending a mark was made.
So each scope change produces up to three things, in this order:
- Chat line 1:
📍 Focus Updated:(marker — pin + label only) - Chat line 2:
{deepest} < {parent} < {root}(breadcrumb payload) - A chapter-mark whose title === that breadcrumb (no pin, no label) — only if the tool exists
If you find these markers noisy, this is a good candidate for an on/off switch in your own harness config rather than removing the skill outright — see /alignment-harness:harness-setup.
When to fire
- Entering a new sub-task under the current goal (descend a level)
- Dropping into a bug, debug, or detour off the current work (descend)
- Finishing a sub-scope and returning to its parent (ascend — shorten the chain)
- Pivoting to a different root focus entirely (new chain)
Do not fire for every tool call — only when the active scope genuinely moves.