feat: /baton:start — the Conductor front porch (slice 1)#71
Merged
Conversation
Guided, teaching, user-adaptive entry point that starts or resumes a project (incl. for non-technical users), captures the why in a CHARTER, then hands the goal to /baton:go full-auto. Wrapper over existing front doors; minimal box-private user profile anchors the personalization seam. Slices 2 (Grimdex learning loop) and 3 (mid-stream idea injection) named, out of scope. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6 tasks: pure resolvers, project/profile stores, CHARTER templating, command brain + aliases, bootstrap wiring + version bump, docs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…eaching level, next-command
…gin to 1.5.0-rc.1
…, test backfill, doc restore - commands/start.md step 4: ask for a project name in the interview (or derive a title-cased default from the folder/projectId) when no name arg was supplied, so $name is never empty going into New-CharterContent at step 6. - commands/start.md step 10: gate the first-run profile write on ($mode -eq 'new' -and -not $profile) so a resume with no prior profile never writes an unbound $depth into user-profile.json. - scripts/test-start-lib.ps1: add the missing Resolve-TeachingLevel profile-present-but-unset case, a Read-UserProfile corrupt-file case, and a Get-NextCommandRecommendation unknown-status fallback case. - docs/getting-started.md: restore the dropped "hook auto-tags every model dispatch..." line into the new step 1 section.
There was a problem hiding this comment.
Pull request overview
Adds the new “front porch” command /baton:start (plus /baton:init and /baton:initialize) and its supporting PowerShell library/tests, positioning it as the recommended guided entry point for starting or resuming a project and then handing off to /baton:go.
Changes:
- Introduces
scripts/start-lib.ps1with pure resolvers + thin JSON I/O (project record + user profile), plus unit-style tests. - Wires
start-lib.ps1intobootstrap.ps1deploy output and bumps the plugin version to1.5.0-rc.1. - Documents
/baton:startacross command docs and getting-started, and adds design/plan docs for the feature.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/start-lib.ps1 | New shared library for /baton:start (resolvers, templating, and JSON stores). |
| scripts/test-start-lib.ps1 | New unit-style tests covering the new library functions. |
| commands/start.md | New canonical command procedure (“brain”) for /baton:start. |
| commands/init.md | New alias delegator to /baton:start. |
| commands/initialize.md | New alias delegator to /baton:start. |
| scripts/bootstrap.ps1 | Adds start-lib.ps1 to the deployed script list. |
| scripts/test-bootstrap.ps1 | Asserts start-lib.ps1 appears in bootstrap dry-run output. |
| docs/COMMANDS.md | Documents /baton:start as the recommended on-ramp; updates cheat sheet. |
| docs/getting-started.md | Updates the recommended flow to start with /baton:start. |
| docs/superpowers/specs/2026-07-01-baton-start-front-porch-design.md | New design spec for slice 1. |
| docs/superpowers/plans/2026-07-01-baton-start-front-porch.md | New detailed implementation plan. |
| .claude-plugin/plugin.json | Version bump for the new user-facing command(s). |
| $folderFlag = '<FOLDER_FLAG_OR_EMPTY>' | ||
| $targetFolder = if ($folderFlag) { $folderFlag } else { (Get-Location).Path } | ||
|
|
||
| $projectId = if ($name) { ConvertTo-JobSlug $name } else { Resolve-ProjectId -Override $null } |
| [Parameter(Mandatory)][string]$ProjectId, | ||
| [string]$ProjectsRoot = (Join-Path (Get-BatonHome) 'projects') | ||
| ) | ||
| $path = Join-Path (Join-Path $ProjectsRoot $ProjectId) 'project.json' |
| [Parameter(Mandatory)][hashtable]$Record, | ||
| [string]$ProjectsRoot = (Join-Path (Get-BatonHome) 'projects') | ||
| ) | ||
| $dir = Join-Path $ProjectsRoot $Record.id |
Ryfter
added a commit
that referenced
this pull request
Jul 1, 2026
…ook updated PR #71 merged; decisions d061-d065 captured. Also logs the parked GEPA/DSPy prompt-optimization idea (memory-only, not yet spec'd) so it survives to the next session. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
/baton:start — the Conductor front porch (slice 1)
The missing entry point: one guided, teaching, plain-language command to begin or resume a project, for a user who may not know what git is.
/baton:start(aliases/baton:init,/baton:initialize) sits alongside/baton:go(autonomous execution) and/baton:idea(idea → backlog) as the third front door — the one that asks questions instead of assuming you already have a goal.Flow
git initnarrated in plain language → writes a user-ownedCHARTER.mdin the project folder recording the goal and why → hands off to/baton:gofull-auto under its existing two guards (budget cap + destructive action).user-profile.json— the seam slice 2 will grow into a Grimdex-backed learning loop.Surface
scripts/start-lib.ps1(new): pure resolvers (Resolve-StartMode,Resolve-InterviewDepth,Resolve-TeachingLevel,New-CharterContent,Format-ResumeStatus,Get-NextCommandRecommendation) + seamed I/O (Read-/Write-ProjectRecord,Read-/Write-UserProfile).commands/start.md(new): the brain — state machine, onboarding, folder setup,/baton:gohand-off, seam legibility.commands/init.md/commands/initialize.md: thin delegators.scripts/bootstrap.ps1/test-bootstrap.ps1: deploystart-lib.ps1.docs/COMMANDS.md/docs/getting-started.md:/baton:startdocumented as the recommended on-ramp;/baton:job-startremains for manual, phase-driven work.Box-private boundary
project.jsonanduser-profile.jsonlive under$BATON_HOME, never the knowledge repo.CHARTER.mdis the exception — the user's own doc, in their project folder.Review
Final adversarial review → With fixes (0 Critical, 2 Important, 5 Minor). Both Important issues lived in
start.md's interview prose, not the tested library: (1) the flagship no-name onboarding path could reachNew-CharterContentwith an empty, mandatory-Nameand hard-throw — fixed by capturing/deriving a name in the interview; (2)$depthwas unbound on a resume-with-no-prior-profile path, silently writing a null intouser-profile.json— fixed by gating the first-run profile write on the new-project path. Three Minor test-coverage gaps backfilled; one dropped doc line restored. Fix wave self-verified against the diff and both test suites (green).Tests
test-start-lib.ps1(8 sections, all pure resolvers + I/O stores + CHARTER/resume-status templating) andtest-bootstrap.ps1(43 assertions incl.start-lib.ps1deploy) both green.Plugin
1.4.1 → 1.5.0-rc.1(minor bump — new user-facing commands).Design:
docs/superpowers/specs/2026-07-01-baton-start-front-porch-design.mdPlan:
docs/superpowers/plans/2026-07-01-baton-start-front-porch.md🤖 Generated with Claude Code