Skip to content

feat(session-flow): add keep-going skill - #251

Merged
kyle-sexton merged 2 commits into
mainfrom
feat/session-flow-keep-going
Jul 17, 2026
Merged

feat(session-flow): add keep-going skill#251
kyle-sexton merged 2 commits into
mainfrom
feat/session-flow-keep-going

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

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 pauses
a 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

  • Cause not diagnosed. Short-limit vs weekly-limit vs crash does not
    change the recovery, so it is deliberately not classified.
  • No capability enumeration. Harness mechanisms (background tasks,
    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.
  • Follows the plugin's conventions. Version bump 0.6.0 → 0.7.0,
    ## X.Y.Z — DATE changelog format, README skill-table + section, keywords,
    and root catalog entry all updated in the plugin's existing style.

Coordination note

This PR bumps session-flow to 0.7.0 and edits the shared plugin
files (plugin.json version/description, README, CHANGELOG, root
marketplace + catalog row). If a concurrent session-flow PR (e.g. a
further 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 files
themselves are conflict-free.

Gates

  • markdownlint-cli2 (MD013=80): clean.
  • /skill-quality:check: PASS, 0 errors / 0 warnings.
  • Evals present and schema-valid (4 warranted cases: real-state inspection,
    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 only
after these merge and verify.

Related

No linked issue — round-2 personal-skill graduation is driven by the planning brief, not a tracked GitHub issue.

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)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread plugins/session-flow/skills/keep-going/SKILL.md Outdated
@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 2m 23s —— View job


PR Review: feat(session-flow): add keep-going skill

  • Gather context from PR metadata and changed files
  • Review SKILL.md — design, schema fields, autonomy policy, trigger/invocation settings
  • Review evals.json — schema validity, coverage, edge cases
  • Review plugin manifest and versioning (plugin.json, CHANGELOG.md)
  • Review catalog/README updates (marketplace.json, root README, plugin README)
  • Synthesize findings and post review

Overall the PR is well-constructed — the autonomy policy is sound, the "never assume" principle is consistently reinforced across Steps / What-this-skill-does-NOT-do / Gotchas, the plugin conventions are all followed, and the evals map cleanly onto the four stated design decisions. A few things worth resolving before merge:


disable-model-invocation: true contradicts the trigger phrases

File: plugins/session-flow/skills/keep-going/SKILL.md, line 5

The frontmatter description ends with:

Use when: 'keep going', 'continue', 'pick up where you left off', 'resume', 'you got cut off'…

disable-model-invocation: true means the model cannot auto-load this skill from those phrases — it is slash-only. So a user who says "keep going" after reconnecting gets nothing unless they know to type /session-flow:keep-going.

Two defensible positions:

  1. Slash-only is intentional. "Keep going" is ambiguous mid-task ("carry on with what you're doing" vs. "run the recovery skill"), so auto-invocation would fire spuriously. In that case the description phrasing should read "Common invocation: /session-flow:keep-going" rather than "Use when: …" so it doesn't imply model-trigger semantics.

  2. Auto-invocation is the right call. At reconnect time, context makes the intent unambiguous, and the user shouldn't need to know the slash command. Set disable-model-invocation: false.

The PR description doesn't justify the current choice — please make the intent explicit either in the frontmatter or the PR. Fix this →


Missing eval for handoff-backed reconciliation

File: plugins/session-flow/skills/keep-going/evals/evals.json

Step 4 says "When the interruption followed a /session-flow:handoff, the handoff file is that artifact; read it rather than trusting memory." This is the integration seam with the handoff skill — the one place keep-going references a concrete artifact type — yet none of the four evals exercise it. A fifth eval with a small handoff file fixture would cover:

  • Does the skill read the handoff file for the main-thread state?
  • Does it NOT rely on what was claimed in prior turns?

The four existing evals cover their stated cases well; this is an additive gap rather than a flaw. Worth adding if coverage standards require it, or calling it out as a known gap in the PR. Fix this →


Minor: "can't read the artifact" case not addressed

File: plugins/session-flow/skills/keep-going/SKILL.md, lines 36–44

Step 2 says to "read its actual state from the source of truth." The skill covers three outcomes (completed, mid-flight, dead) but doesn't mention a fourth: the artifact is missing or unreadable (session transcript cleared, task output gone). A model following this skill could stall wondering whether to guess or escalate. The existing "Unrecoverable → surface it plainly" path implicitly handles it, but making it explicit in the Gotchas section ("cannot read the artifact → treat as unrecoverable, surface it rather than guessing") would avoid that ambiguity.


Everything else looks solid

  • Version bump 0.6.0 → 0.7.0 is correct for a new skill addition.
  • CHANGELOG format (## X.Y.Z — DATE) matches the established style; date matches today.
  • plugin.json description accurately names all five skills in the correct order.
  • Keywords (keep-going, resume, recover) added to both plugin.json and marketplace.json tags.
  • Plugin README table row and prose section are accurate and consistent with SKILL.md.
  • Root README catalog entry updated to match the plugin.json description verbatim.
  • Evals 1–4 map cleanly to the four design decisions called out in the PR (real-state inspection, side-effect gating, nothing-off-thread, no cause diagnosis).
  • Autonomy policy framing is precise — "when inspection cannot prove the action did NOT already land" is the right burden-of-proof standard for gating side effects.
  • Future-proofed harness language — listing current mechanisms as examples of kinds of off-thread work rather than a fixed catalogue is the right call for a skill that needs to survive tool evolution.

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.
@kyle-sexton
kyle-sexton merged commit c96c9d5 into main Jul 17, 2026
19 checks passed
@kyle-sexton
kyle-sexton deleted the feat/session-flow-keep-going branch July 17, 2026 15:30
kyle-sexton added a commit that referenced this pull request Jul 17, 2026
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.
kyle-sexton added a commit that referenced this pull request Jul 17, 2026
## 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.
kyle-sexton added a commit that referenced this pull request Jul 17, 2026
## 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant