feat(session-flow): add keep-going skill - #251
Conversation
New /session-flow:keep-going — recover and continue after any interruption (rate limit, crash, disconnect, gap): inventory off-thread work, inspect each item's real state from its artifact rather than assuming, resume the resumable / restart the dead / surface the unrecoverable, then reconcile the main thread from a fresh read of its backing plan or handoff file and continue. Safe/idempotent work auto-resumes; re-running side-effectful work (push, PR comment, deploy) is gated against double-firing. The resume counterpart to handoff; the interruption cause is not diagnosed (recovery is identical regardless). session-flow now bundles five skills. Bumps to 0.7.0 with updated description, README, keywords, and catalog entry. Ships warranted evals. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> 🤖 Generated with [Claude Code](https://claude.com/claude-code)
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d209415521
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Claude finished @kyle-sexton's task in 2m 23s —— View job PR Review:
|
keep-going's description advertises natural-language triggers ('keep
going', 'continue', 'resume', ...) and its evals exercise exactly those
phrases, but disable-model-invocation: true blocked the model from
loading it on anything but the explicit slash command. Every sibling
skill in session-flow (handoff, orchestrate, retro, workflow) that
advertises natural-language "Use when" triggers ships with
disable-model-invocation: false; keep-going's own autonomy policy
already gates re-running side-effectful work internally, so there is
no safety reason to require explicit invocation. Set it to false to
match.
Resolve the two escalated design findings on the re-anchor correctors.
Model invocation (was disable-model-invocation: true on all five
correctors). Each corrector's description advertises natural-language
trigger phrases ("you're guessing", "too verbose"); with model invocation
disabled those phrases were inert — only the slash command loaded the
skill. Flip to false on all five. This is the repo convention: true is
reserved for setup / destructive / mode-entry skills (architecture:improve
even documents re-enabling it), and every substantive discipline skill
(research, devils-advocate, confirm, tidy) is false. Sibling PR #251
(keep-going) made the same call for the same reason. Flipping makes the
"Use when:" phrasing accurate, resolving both the Codex finding (enable
invocation) and the claude[bot] finding (misleading trigger phrasing) in
one move — the descriptions become correct rather than needing a reword.
Deep verification is now a sibling skill, not a `deep` argument. The deep
pass fans forked subagents out over every load-bearing claim — a change in
execution topology, which MIGRATION-PLAYBOOK.md fixes in frontmatter as a
sibling (the /discovery:research-deep precedent), not a runtime argument.
Graduated to /re-anchor:do-your-research-deep: a thin delta that points at
the parent's discipline and the shared method doc (no duplication) and
carries only the fan-out. Added a wave-cap / retry-failed-subset throttle
so a claim-heavy session cannot fire an unthrottled burst (mirrors
codebase-health's per-file fan-out cap and the guardrails burst-529
guidance) — resolves the Codex throttle finding. Removed the deep argument,
argument-hint, and $ARGUMENTS branch from do-your-research; moved its deep
eval to the new skill and backfilled a premature-solution / training-data
-recall audit case so both skills keep four warranted evals.
Manifest description, both READMEs, CHANGELOG, and the regenerated root
catalog updated to describe six skills.
## What
New plugin **`re-anchor`** — **five discipline correctors plus a
deep-verification sibling, sharing one re-anchor / audit /
correct-forward
engine doc**. Each corrector re-anchors a standing rule mid-session,
audits
the work in flight against it, and corrects what has drifted.
| Skill | Discipline it re-anchors |
|---|---|
| `/re-anchor:do-your-research` | Research / no-assumptions before
assertion |
| `/re-anchor:do-your-research-deep` | Verification-fan-out tier of
do-your-research — subagents verify every load-bearing claim so far |
| `/re-anchor:follow-our-standards` | Alignment to the consuming org's
engineering conventions |
| `/re-anchor:point-dont-copy` | Pointer over copy — cite the living
source, don't duplicate it |
| `/re-anchor:reason-dont-recite` | Interrogate inherited content —
precedent describes, it doesn't justify |
| `/re-anchor:tighten-your-output` | Terseness — fewer words or lines
with no loss of meaning or correctness |
The shared **re-anchor → audit → correct-forward** method lives once at
plugin scope (`context/re-anchor-audit-correct.md`); each skill carries
only
its own delta and cites the method doc (mirrors the `prototype`
precedent).
## Design decisions
- **Corrector tone.** Firing a corrector is a re-anchor, not an
accusation;
gentle-reminder use is first-class; the audit may honestly return clean.
- **Repo-/machine-agnostic (portability).** The source personal skills
hardcoded `~/.claude/CLAUDE.md`, `melodic-software/standards`, ghq, and
a
sync-manifest path — all removed. Each corrector resolves its
discipline's
source of truth from the **consumer's own** instruction layer via the
convention-resolution ladder, degrading to a **plugin-authored portable
baseline**. No `userConfig`, so no setup skill.
- **Model-invocable correctors (`disable-model-invocation: false`).**
Each
corrector advertises natural-language trigger phrases in its
`description`
("you're guessing", "too verbose", …). Those phrases only reach the
model's
invocation path when model invocation is enabled, so the flag is `false`
on
every corrector — the same choice the sibling `keep-going` skill (#251)
made, and consistent with the repo's convention that `true` is reserved
for
setup / destructive / mode-entry skills (`architecture:improve` even
re-enabled it). This makes the "Use when:" phrasing accurate rather than
inert, resolving both bot findings on this flag in one move.
- **`deep` is a sibling skill, not an argument.** The deep verification
pass
fans forked subagents out over every load-bearing claim — a change in
execution *topology*, not a depth knob on one path.
`MIGRATION-PLAYBOOK.md`
fixes execution-tier variants in frontmatter as siblings (the
`/discovery:research-deep` precedent), so `deep` graduated to
`/re-anchor:do-your-research-deep`. That sibling points at the parent's
discipline + the shared method doc (no duplication) and carries only the
fan-out delta, including a wave-cap / retry throttle so a claim-heavy
session cannot fire an unthrottled burst (mirrors `codebase-health`'s
per-file fan-out throttle and the guardrails burst-529 guidance).
- **`point-dont-copy` SSOT.** Its re-anchor routes through the org
standards'
`reference-don't-duplicate` (in-repo facts) and
`documentation-and-citations`
(external facts) conventions rather than restating that doctrine; the
skill
keeps only its own pins — threshold **two** (tighter than the
convention's
three-or-more smell signal), point-at-public-contracts, no-capability-
enumeration — plus the not-a-copy carve-outs.
- **`reason-dont-recite`.** Incumbency discipline, a distinct axis from
do-your-research (external evidence you lack vs internal evidence you
inherited). A standards disagreement it surfaces routes upstream via
`follow-our-standards` (routing-only delta; that skill owns "never
silent
deviation, never silent conformance" — no doctrine duplicated).
- **`tighten-your-output`.** Terseness. Code side re-anchors the org's
`simpler-code` convention (named failure modes; constraints never traded
for
line count); prose terseness has **no standards doc** (verified against
the
standards engineering conventions), so the skill flags that gap rather
than
inventing a rubric — a standards-repo issue proposes the prose sibling
of
`simpler-code.md`. Batch work routes to a compress capability (prose)
and a
simplify capability (code).
- **Plugin name `re-anchor`** reads verb-ish rather than the noun/gerund
the
repo's namespace guidance prefers — kept as owner-locked
(blind-generator
protocol). No `name:name` stutter.
- **Dogfooded `point-dont-copy`** on the plugin's own correctors:
trimmed
gotchas that restated the shared method doc.
## Gates
- markdownlint-cli2: clean on all 9 markdown files.
- `claude plugin validate` (re-anchor) + `--strict` (catalog): both
pass.
- `validate-plugin-contracts.mjs`: pass.
- Evals present + schema-valid against
`skill-quality/reference/evals.schema.json`
(4 warranted cases each across all 6 eval sets).
- Root catalog regenerated via `scripts/generate-catalog.mjs` (in sync).
## Related
- Sibling round-2 graduation PRs: #249 (re-anchor), #250 (naming), #251
(keep-going session-flow skill).
- Upstream issues filed from this work: #252 (extract-ssot threshold),
#253 (docs-hygiene proactive detection), plus a
melodic-software/standards issue proposing a markdown/prose-terseness
convention (linked in the PR thread).
No linked issue — round-2 personal-skill graduation is driven by the
planning brief, not a tracked GitHub issue.
## What New single-skill plugin **`naming`** — `/naming:name-it-better` generates and evaluates fresh name candidates for anything (identifier, file, module, skill, repo, domain term), then hands the human a scored shortlist. It never auto-locks a name. The dominant trigger is a reactive retry: a name was just rejected, and the same context that produced it will only produce more of the same. So the generators run **blind** to the conversation — seeded only with a distilled context brief — across three distinct lenses (responsibility-literal, moment-of-use, domain-lore). Diverge widely, converge once, and keep the first-seen suggestion from anchoring the choice. An optional `tournament` action widens to ~5 generators with elimination rounds and independent judges for high-stakes, hard-to-refactor names — framed honestly as an adaptation of elimination brackets + pairwise scoring, not a documented naming technique. ## Design decisions - **Repo-agnostic (portability).** The source personal skill scored against `melodic-software/standards` naming docs. Generalized: the skill scores against the **consuming org's** naming/domain-language conventions when the project declares them (`CLAUDE.md` / `.claude/rules` / a standards source it points to), degrading to the general criteria grounded in the skill's `context/sources.md` when none is declared. A missing criterion flows UP into the org's conventions, never hardcoded into the skill. - **`context/sources.md` kept as the plugin's own one-shot research deliverable** (method grounding: Belshee/Deep Roots naming-as-a-process, Ottinger/Clean Code, DDD ubiquitous language, Double Diamond, anchoring bias, and the tournament-mode adaptation basis). Only its two references to "the standards repo" were generalized to "the consuming org's conventions". - **Naming.** Namespace `naming` (gerund, activity domain) + skill `name-it-better` (action verb) — no `name:name` stutter. Plugin name locked by the owner via the blind-generator naming protocol. ## Gates - markdownlint-cli2 (MD013=80): clean on all 4 files. - `/skill-quality:check`: PASS, 0 errors / 0 warnings. - Evals present and schema-valid (4 warranted cases: blind-retry→human-pick, collision-check, tournament honest-framing, missing-criterion-routes-up). - `claude plugin validate` (plugin) and `--strict` (catalog): pass. Part of the round-2 personal-skill graduation. Sibling PR #249 adds the `re-anchor` corrector plugin; another sibling adds `keep-going` to `session-flow`. Raw `~/.claude/skills/` copies are removed only after these merge and verify. ## Related - Sibling round-2 graduation PRs: #249 (re-anchor), #250 (naming), #251 (keep-going session-flow skill). - Upstream issues filed from this work: #252 (extract-ssot threshold), #253 (docs-hygiene proactive detection). No linked issue — round-2 personal-skill graduation is driven by the planning brief, not a tracked GitHub issue.
What
Adds a fifth skill to
session-flow:/session-flow:keep-going—recover and continue after any interruption (rate limit, crash, disconnect,
gap). It is the resume counterpart to
handoff: handoff deliberately pausesa session, keep-going picks it back up.
Flow: inventory off-thread work → inspect each item's real state
from its own artifact (never assume "probably done" / "probably died") →
recover (resume the resumable, restart the dead, surface the
unrecoverable) → reconcile the main thread from a fresh read of its
backing plan or handoff file → report recovered / restarted /
still-running / lost.
Autonomy policy: safe, idempotent, read-only work auto-resumes;
re-running anything with external side effects (a push, a PR comment, a
deploy) is gated when inspection cannot prove it did not already land —
double-firing a side effect is worse than pausing.
Design decisions
change the recovery, so it is deliberately not classified.
shells, monitors, scheduled tasks, workflows, subagents) are named only as
marked examples of the kinds of off-thread work — the duty is to
inventory whatever the current harness exposes, so the skill survives tool
evolution.
## X.Y.Z — DATEchangelog format, README skill-table + section, keywords,and root catalog entry all updated in the plugin's existing style.
Coordination note
This PR bumps
session-flowto 0.7.0 and edits the shared pluginfiles (plugin.json version/description, README, CHANGELOG, root
marketplace + catalog row). If a concurrent
session-flowPR (e.g. afurther orchestrate change) lands first, these shared-file edits are the
expected conflict resolved by serializing the merge — this branch rebases
onto the new base and re-bumps the version. The
keep-going/skill filesthemselves are conflict-free.
Gates
/skill-quality:check: PASS, 0 errors / 0 warnings.side-effect re-fire gating, nothing-off-thread, does-not-diagnose-cause).
claude plugin validate(plugin) and--strict(catalog): pass.Part of the round-2 personal-skill graduation, alongside
re-anchor(#249) and
naming(#250). Raw~/.claude/skills/copies are removed onlyafter these merge and verify.
Related
No linked issue — round-2 personal-skill graduation is driven by the planning brief, not a tracked GitHub issue.