Adds two sibling files in plugins/ultraplan-local/docs/ that together
specify a new /ultracontinue command for zero-friction multi-session
resumption — drafted from design dialogue at the end of the config-audit
v5.0.0 release session (5 sessions, ~10 manual NEXT-SESSION-PROMPT
context-handovers — friction this work removes).
ultracontinue-brief.md (159 lines):
- Follows the /ultrabrief-local template (frontmatter brief_version: 2.0)
so /ultraplan-local can consume it directly
- Defines per-project state-file convention .claude/projects/<project>/
.session-state.local.json as the contract; /ultracontinue is read-only,
multiple writers may update
- 10 falsifiable success criteria including cross-project consistency,
no-new-deps, validator + helper command, docs sweep across plugin
README + CLAUDE.md + marketplace root README
- 3 research topics: ultraexecute end-of-session integration depth,
graceful-handoff alignment (no hard dep), Claude Code slash-command
conventions for read+execute commands
- Explicit non-goals: not replacing /ultraexecute-local --resume, not
replacing graceful-handoff, not auto-orchestrating N sessions
- Open questions and assumptions flagged for plan-critic / scope-guardian
ultracontinue-design-notes.md (117 lines):
- Captures the dialogue rationale that shaped the brief, so the
implementing session has full context without needing to read this
conversation's transcript
- Origin (config-audit v5 release pain point), key design insight
("state-fil ER kontrakten, ikke verktøyet"), 6 design decisions with
alternatives considered, anti-patterns from KTG auto-memory to respect,
recommended reading order, expected scope (1-2 execution sessions)
No code changes. Brief is ready for /ultraplan-local --brief
plugins/ultraplan-local/docs/ultracontinue-brief.md (light path) or
/ultraresearch-local for full research path.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
9.4 KiB
/ultracontinue — Design Notes
Companion to:
ultracontinue-brief.md(sibling file in this folder). Captured: 2026-05-01, end of config-audit v5.0.0 release session. Purpose: Preserve the dialogue rationale that shaped the brief so a fresh session (with no memory of the discussion) can plan + execute with full context. Read this AFTER the brief, not instead of it.
Why this work exists (origin)
The brief was drafted immediately after shipping config-audit v5.0.0 — a 5-session release run (alpha.1 → alpha.2 → beta.1 → rc.1 → release) executed across 5 fresh Claude Code sessions. Each session ended with KTG (or Claude on KTG's behalf) hand-writing a NEXT-SESSION-PROMPT.local.md file containing the canonical "paste this into the next session" prompt. Each session began with KTG manually reading + invoking that prompt.
The pattern works (v5 shipped clean, 635 tests, SC-6b PASS at -0.85% delta) but is operator-driven: ~10 manual context-handover steps across the run, each a candidate for omission, copy errors, or stale-file risk.
Initial Q from KTG: "Er det formalisert i ultraexecute-local at NEXT-SESSION-PROMPT.local.md er mekanismen for å lage en ny prompt til neste sesjon?"
Investigation found: No, it is not. NEXT-SESSION-PROMPT.local.md references in the ultraplan-local plugin tree exist only in historical project artifacts (.claude/projects/2026-04-18-v3.0-skill-factory-ekstraksjon/). The convention lives in KTG's auto-memory (feedback_session_handoff_prompt.md, feedback_next_session_prompt_manual.md) — not in any tool. /ultraexecute-local has its own multi-session model via session specs (YAML manifests + --session N flag), but that's for scripted/headless runs, not interactive multi-session.
KTG's framing of the goal: "Jeg ønsker at det blir så enkelt å kjøre X antall sesjoner i sekvens slik at samme kommando kan kjøres for hver eneste sesjon for å redusere mental belastning, og jeg ønsker at dette blir likt mellom alle sesjoner."
That's the load-bearing constraint: identical command, every session, every project.
The key design insight
The brief's Goal section reads "state-filen ER kontrakten" — that phrase came out of dialogue and is the load-bearing decision.
Initial framing was "build a /ultracontinue skill that wraps a state-write helper". The problem with that framing: it ties the consistency promise to a specific writer. If /ultraexecute-local writes the state file but a manual session series (like the v5 release) doesn't, the convention is broken in the cases that matter most.
Reframing: the state file is the contract, not the writer. /ultracontinue reads a documented JSON convention. ANY tool, helper command, or operator-driven session-end may write to it. Loose coupling. The convention is what's universal, not the integration depth into any one command.
This shifts the work-shape from "build one big integration" to "(1) define the convention, (2) build the reader, (3) build writers wherever they make sense — including a tiny manual-session helper that doesn't require touching /ultraexecute-local at all". SC-4 (full ultraexecute integration) becomes optional/follow-up rather than a v1.0 blocker.
Decisions and alternatives
1. Where does /ultracontinue live?
Decision: ultraplan-local plugin.
Alternative considered: graceful-handoff plugin (since it already deals with "save state, restart in new context").
Reasoning: graceful-handoff solves intra-session context-budget rescue (one project's session is hitting token limits, dump and restart). /ultracontinue solves planned multi-session execution (this is session 3 of 5 in a release run). Different problems sharing convention surface. ultraplan-local is the natural home because multi-session planning is part of its remit (see --decompose, session-spec template, --session N flag).
KTG noted graceful-handoff "trenger det også for konsistens" — captured in brief as Topic 2 of the research plan. Convergence is desirable but not blocking; /ultracontinue must work standalone.
2. State scope: per-project vs global
Decision: Per-project. .claude/projects/<project>/.session-state.local.json.
Alternative considered: ~/.claude/active-session.json (one active project at a time, machine-global).
Reasoning: KTG explicit: "Per prosjekt". Global has the same single-active-project assumption baked in but breaks if KTG context-switches. Per-project also matches existing ultraplan-local convention (briefs, plans, progress.json all live under .claude/projects/<project>/).
3. UX: prompt before starting next session?
Decision: No interactive prompt. Show 3-line summary (project / next-session-label / brief-path), then start executing.
Alternative considered: Y/N prompt ("Run session 3 now?").
Reasoning: From dialogue: "Maksimalt brukervennlig = ingen prompts, men la informasjon synes." Y/N is friction. Information visibility matters; gating on confirmation does not. If KTG wants to abort, Ctrl+C. Brief codifies this in NFRs.
4. State-file format: JSON vs YAML
Decision (assumption in brief): JSON.
Reasoning: Parity with progress.json already in ultraplan-local. Mechanical validator parity. Marked as [ASSUMPTION] so plan-critic / scope-guardian can flag if there's a strong case for YAML during planning.
5. Command name: /ultracontinue vs /ultraplan-local continue vs /continue
Decision: /ultracontinue (KTG choice).
Reasoning: Muscle-memory parity with the four existing ultra-commands (/ultrabrief-local, /ultraresearch-local, /ultraplan-local, /ultraexecute-local). /continue is risky (potential collision with Claude Code builtins — flagged as open question in brief).
6. Single command for N sessions, or N invocations?
Decision: N invocations. Each /ultracontinue advances exactly ONE session.
Alternative considered: "auto-run all remaining sessions."
Reasoning: Multi-session exists precisely because context resets between sessions are valuable. Compaction-survival, fresh perspective, no token-budget rot. Running N sessions in one go destroys the reason multi-session exists. Captured in brief as explicit non-goal.
What's NOT in the brief but worth knowing
-
Anti-pattern flagged in KTG's auto-memory:
feedback_next_session_prompt_manual.mdsays "Ikke foreslå auto-loading via SessionStart/CLAUDE.md. Manuell invokasjon unngår stale-fil-risiko."/ultracontinuerespects this — it's still operator-invoked. The improvement is that the file the operator loads is mechanically defined and validated, not a hand-written prompt that may have drifted from reality. -
Existing handover-contracts pattern:
docs/HANDOVER-CONTRACTS.mdalready documents 5 handovers (brief→research, research→plan, architecture→plan, plan→execute, progress.json). Adding.session-state.local.jsonas Handover 6 is the natural placement and SC-6 in the brief codifies it. -
Plan-critic / scope-guardian risks to anticipate:
- Plan-critic will likely push on SC-4 (ultraexecute integration depth). The brief positions this as "may land in a follow-up" — defend that framing or accept it lands in v1.0 if the research finds the insertion points are clean.
- Scope-guardian may flag SC-5 (helper command) as scope creep if ultraplan-local doesn't already have an
end-sessionslash. It's NEW surface but justified by the "informal multi-session" use case (v5 release). Plan should make this trade-off explicit.
-
The v5 release run is the canonical motivating example. When in doubt, ask: "would this have removed friction in the 5-session config-audit v5 run?" If no, scope it out. If yes, scope it in.
-
Token-budget realism: This brief is being created at the END of a 250K-context conversation that already shipped v5.0.0. The implementer of
/ultracontinuewill be a fresh session with this brief + design-notes + handover-contracts as context. Keep that in mind when writing the plan — front-load decisions, minimize cross-references that require reading more files than necessary.
Recommended next steps for the implementing session
-
Read in this order:
ultracontinue-brief.md→ultracontinue-design-notes.md(this file) →docs/HANDOVER-CONTRACTS.md(just the structure, to know where Handover 6 fits) →commands/ultraexecute-local.mdend-of-session sections (for SC-4 scoping). -
Decide research path:
- Light research path (recommended if context-budget is a concern): skip topics 1 and 2, run only Topic 3 (Claude Code slash-command conventions) since 1 and 2 are largely answerable from local code-reading during planning.
/ultraresearch-local --external "..."for Topic 3 alone. - Full research path: run all 3 as suggested in the brief.
- Light research path (recommended if context-budget is a concern): skip topics 1 and 2, run only Topic 3 (Claude Code slash-command conventions) since 1 and 2 are largely answerable from local code-reading during planning.
-
Plan with
/ultraplan-local --brief plugins/ultraplan-local/docs/ultracontinue-brief.md(or--project .claude/projects/2026-05-01-ultracontinueif you set up a project dir for the research outputs first). -
Expect 1-2 execution sessions. Small surface area: validator + reader-command + helper writer + docs sweep + tests. Not a multi-session epic — meta-irony noted (the work to ship
/ultracontinueitself doesn't need/ultracontinue). -
Don't forget the marketplace root README — KTG conventions: every plugin doc-affecting change updates plugin README + plugin CLAUDE.md + root marketplace README. Brief's SC-7 codifies this.