| name | plastic-intent-continuing |
| description | Use when a specific intent is named to resume, by id or by description, or on `continuing --intent {id}`. Reads that intent's savepoint ledger and hands off to plastic-intent-starting. The general "continue" / new-session triggers belong to the plastic-continuing router, not here, so a bare "continue" does not settle on this skill directly. Boot (health check, core context, version, statusline) is owned by the SessionStart hook, not this skill. Does not drive work autonomously (that is plastic-auto). |
| user-invocable | true |
Continuing (intent route)
plastic-intent-continuing is the intent route of plastic-continuing. It resumes ONE
specific intent by its savepoint ledger, then hands off to plastic-intent-starting. It does
NOT land on a dashboard and does NOT execute work autonomously (that is plastic-auto); both
of those are other routes' jobs.
Boot is not this skill's job. The hook-session-start hook already runs by construction on
every session start: it runs the core health check (doctor --core), primes PLASTIC.md +
store/project state, and prints the Plastic Core loaded - v{version} banner. The
plastic-statusline hook sets the statusline. So by the time this skill runs, core is loaded
and healthy (or the banner already warned otherwise). This skill picks up from there and
resumes the named intent. This is the seam future continue-flags build on (see [[39]]).
When to Use
- A specific intent is named to resume, by id or by description
continuing --intent {id}
Determine Store
- Global store -
~/.plastic/INDEX.md exists → global mode.
- Local store - a project store under
~/.plastic/projects/{slug}/ whose registered
path (in ~/.plastic/projects.yml) matches the current working directory → project mode.
The SessionStart hook already detects this; here you only need the slug to scope the
named intent's store.
- If neither exists → announce "No Plastic store found. Run /plastic-install."
Conditional Ledger-Resume
Fires ONLY when the user explicitly asks to continue a SPECIFIC intent, or an agent is
instructed to continue one. It is not part of every boot.
QMD-first (when available): when the user names the intent by description rather than id, before
scanning the store with grep/Read run ruby ~/.plastic/scripts/qmd-sync search "<terms>" to
surface the candidate intent, then open the authoritative intent file for the hit you resume. The
command is a no-op when QMD is absent, so fall back to the existing INDEX.md / file scan.
For that intent's directory:
-
Read savepoint.md FIRST (intent 81). It is a deterministic, append-only ledger
(one line per event, newest at the bottom): {utc-iso8601} {Stage} {milestone}. Classify
the state from the last line alone, then verify ONLY that line's artifact. The bookends
are fixed: first line What created, last line either a cycle position or
Done delivered|abandoned.
| Last line | State | Verify only |
|---|
What {id}--{slug}.md | born / parked | intent file exists |
Why started | Why entered, no spec yet | spec.md not yet real; continue Why |
Why spec.md created | Why done | spec.md present; continue to How |
How started / How plan.md created | How in progress | plan.md; continue How |
How checklist.md created / Exec started | ready for / in Exec | plan.md + checklist.md present; continue Exec |
Exec outcome.md created | Exec done | outcome.md present; ready to complete |
Done delivered / Done abandoned | terminal | do NOT cycle-resume; INDEX is authoritative |
-
Verify the stage file. Confirm only the last line's artifact exists and is non-empty
(ledger How plan.md created → plan.md must be present and non-empty). Do not re-probe
every lifecycle file.
-
Drift handling. If the ledger's last line disagrees with files-on-disk, rebuild the
ledger from filesystem state and note the correction. A rebuilt ledger is the file-landing
skeleton (no started/Done lines), which still pins cycle position:
ruby -r ~/.plastic/scripts/lib/bridge -e 'Bridge.rebuild_savepoint("<intent_dir>")'
-
Derive the next step:
- First unchecked item in
checklist.md if it exists, else
- "advance to the next lifecycle stage" (e.g. ledger shows Why/spec.md → next is How).
- The newest
## Insights entry supplies human-readable context (Insights are
append-only, newest at the bottom).
-
Announce, then hand off to plastic-intent-starting:
Resuming intent [ID] - [name]
Store: [global | project:<slug> | local]
Stage: [from ledger last line]
Next step: [first unchecked checklist item | advance to <stage>]
Context: [newest ## Insights entry]
Drift: [none | ledger rebuilt from filesystem]
Hand off to plastic-intent-starting: it takes the lock, boards at this station, and is
where the single "auto or guided?" ask for the intent route lives, asked there exactly
once and never duplicated here. Its auto branch is the one that hands off to plastic-auto;
this skill never hands to plastic-auto directly.
References
- Read
references/context-management.md for the save/continue protocol and for
debugging the resume flow.