Project Command Center — Layer 1 (registry + CLI leader) — v1.9.0-rc.1 - #78
Merged
Conversation
….0-rc.1 (M-task7)
…ect resume writes (review)
There was a problem hiding this comment.
Pull request overview
Introduces “Project Command Center — Layer 1” to make Baton a single entry point for working across multiple projects under a D:\dev home base, including a neutral session-marker contract, a scan-seeded registry, and CLIs to list/manage projects and retarget /baton:go to a selected project.
Changes:
- Added session marker + registry libraries to detect active projects, build an Active/Inactive/Archived roster, and resolve a project slug → folder.
- Added harness adapter hooks (SessionStart/SessionEnd) and wired them into
hooks.jsonto stamp/clear markers and capture resume pointers. - Added
/baton:projectCLI plus/baton:go --projectretargeting, and expanded PowerShell test coverage + bootstrap deployment list.
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/test-session-markers-lib.ps1 | New tests for session marker write/read, TTL age-out, and fail-open behavior. |
| scripts/test-session-hooks.ps1 | New integration tests for SessionStart/SessionEnd hooks and resume pointer capture. |
| scripts/test-registry-lib.ps1 | New tests for scan discovery, blurbs, roster grouping, resolution precedence, and slug/id collisions. |
| scripts/test-fleet-project.ps1 | New tests for /baton:project JSON output and registry mutations (archive/unarchive/set-blurb). |
| scripts/test-fleet-go-retarget.ps1 | New tests for fleet-go.ps1 -Project resolution and unknown-project error handling. |
| scripts/test-bootstrap.ps1 | Adds deployment assertions for new registry/marker libs and fleet-project. |
| scripts/session-markers-lib.ps1 | Adds neutral session marker contract: write/clear markers, enumerate active sessions, and folder-active predicate. |
| scripts/registry-lib.ps1 | Adds scan-seeded project registry (discovery, blurbs, roster lifecycle, slug/id resolution, resume commands). |
| scripts/hooks/baton-session-stop.ps1 | Adds SessionEnd adapter to clear marker and write per-project resume pointers. |
| scripts/hooks/baton-session-start.ps1 | Adds SessionStart adapter to stamp session markers on startup. |
| scripts/fleet-project.ps1 | Adds /baton:project CLI for listing and editing registry fields (archive/unarchive/hide/set-blurb). |
| scripts/fleet-go.ps1 | Adds -Project support to resolve a project and run Conductor from that project’s folder. |
| scripts/bootstrap.ps1 | Ensures new scripts are deployed to $BATON_HOME/scripts during bootstrap. |
| hooks/hooks.json | Wires SessionStart and new SessionEnd hook into the Claude plugin hook configuration. |
| commands/start.md | Documents picking a project from the D:\dev home base and resumable sessions. |
| commands/project.md | Adds documentation for /baton:project usage and registry behavior. |
| commands/go.md | Documents running /baton:go from home base via project slug (--project). |
| AGENTS.md | Documents harness-neutral invocation for roster and starting by slug. |
| .claude-plugin/plugin.json | Bumps plugin version to 1.9.0-rc.1. |
Comment on lines
+73
to
+74
| if ($out.Count -eq 0) { return @() } | ||
| return ,([object[]]$out.ToArray()) |
Comment on lines
+30
to
+34
| # Guard: only write resume pointer for actual project folders | ||
| if (-not (Test-IsProjectFolder -Folder $cwd)) { exit 0 } | ||
|
|
||
| $cleared = Clear-SessionMarker -SessionId $sid | ||
| $agent = if ($cleared -and $cleared.agent) { [string]$cleared.agent } else { 'claude' } |
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 Project Command Center — Layer 1 (v1.9.0-rc.1)
Makes Baton the single front door for every project under a
D:\devhome base. Launch Baton inD:\dev, then/baton:go --whimsicalcarving <goal>resolves the name → that project's folder and runs the existing Conductor there;/baton:project listshows a live Active / Inactive / Archived roster; sessions capture a per-project resume pointer automatically.Spec:
docs/superpowers/specs/2026-07-04-baton-project-command-center-design.md(d076). Plan:docs/superpowers/plans/2026-07-04-baton-project-command-center.md.What's in it
session-markers-lib.ps1) — active-project detection via$BATON_HOME/sessions/*.json({agent,session_id,cwd,started_at}), TTL age-out, fully fail-open.registry-lib.ps1) — scansD:\dev(project = has.gitorCHARTER.md), folds the scan overstart-lib's existingproject.jsonrecords (no duplicate store), and resolves a project name → folder. Registry owns blurbs /archived/hidden; scan owns discovery.[resumable]) / archived (manual).{agent,last_session_id,last_ended_at}); the CLI surfacesclaude --resume <id>, resolved per-agent.baton-session-start.ps1(stamp marker) +baton-session-stop.ps1(clear + capture resume); both alwaysexit 0, registered inhooks.json(SessionStart + new SessionEnd).fleet-go.ps1retargeting —--project/--slugresolves +Push-Location; no---projectpath byte-for-byte unchanged./baton:project— registry admin (list [--json] | archive | unarchive | hide | set-blurb).AGENTS.md) as a documented follow-on. Layer 2 (dashboard render + Go-via-broker) is a separate future spec.Quality
--projectpath), fleet-project 7/7, bootstrap 58/58 (+3 deploy asserts, the v1.8.0 coach-lib omission lesson).2b0ff31, two-pass slug-then-id + non-project guard, both with covering tests).Tracked follow-ups (non-blocking, from the review)
unarchive/set-blurb) can't resolve a project whose folder was deleted/moved (record still exists).Commits: base
b1c7b03→2b0ff31. Please do not auto-merge — awaiting Kevin's word.