Skip to content

feat(bridge): run installed Show Me and Retro with session or item scope - #78

Merged
timeleft-- merged 2 commits into
mainfrom
automation/hermes-helmet-71
Oct 10, 2026
Merged

timeleft-- merged 2 commits into
mainfrom
automation/hermes-helmet-71

Conversation

@yia-mw-agent

Copy link
Copy Markdown
Contributor

Closes #71. Part of #55.

What this does

Show Me and Retro in the Claude Captain's Bridge pane now run only the Captain's own installed commands, in this exact session, with an explicit scope.

  • Availability comes from $.command.list() when the Bridge opens and on each refresh. It accepts the configured showMeCommand / retroCommand name or <plugin>:<name>.
  • Missing command: the action is disabled with "Show Me isn't installed. Install a skill named show-me, or set showMeCommand." (and the Retro equivalent). Nothing is sent. A host rejection naming an unknown command, or a command that has dropped out of command.list, returns to this state.
  • Present command: one $.command.run({command, args}). args is this session, or the selected item's title with its evidence refs and the timestamps of the records they cite. The scope is read from the skeleton view state, so this slice works before the overview/detail slice lands and adds no dependency on it.
  • The host queues the run until the first officer is idle. The mod calls no prompt.submit/prompt.fill, starts no subagent and sends nothing cross-session. Retro asks for suggestions and applies none.
  • pending is claimed atomically; repeat presses (including the other action) are ignored until settlement, which clears it on success or error. A non-unknown failure shows a retryable notice. Navigation and the explanation are untouched.
  • Neither skill is bundled. Both missing states leave the Bridge usable.

CI allowlist parser

claude plugin validate 2.1.296 annotates calls made inside helper functions as $.command.run (via runAction). The existing parser rejected that. It now accepts only that exact annotation and still checks every call name against the #55 allowlist (a forbidden call behind a (via ...) is still rejected; malformed annotations still fail closed). Tests added.

Evidence

  • claude plugin test (pinned 2.1.296, empty HOME): 54 pass, 0 fail across hooks/register.test.tsx and the new hooks/actions.test.tsx. The new tests cover unqualified, namespaced and configured availability; missing disabled state with zero sends; whole-session and selected-item scope with refs and timestamps; one queued call during delayed settlement; repeat suppression; error recovery; unknown-name rejection; and both terminal and desktop trees.
  • Real claude plugin validate call list is within the allowlist: $.command.list, $.command.register, $.command.run, $.session.id, $.session.version, $.state.get, $.state.set, $.ui.open, $.ui.resolve.
  • scripts/verify.sh passes (jj 0.45.1, fava-trails pin).
  • Version policy: 0.8.0 -> 0.9.0 via scripts/mw-version.py; the Python package and both plugin manifests are synchronized.

Not claimed

This is CI/stand-in evidence only, not installed-host acceptance. The $.command.list() result shape is not exposed by the test kit's $, so the mod accepts either an array or {commands: [...]} of {name}/string entries; confirm against a real host during release acceptance. Existing selected-item tests should be re-run through the public pane seam after the overview/detail slice (#69/PR #76) lands.

All fixtures are synthetic. No private paths, sessions or toolkit dependencies.

@timeleft-- timeleft-- left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Reviewed exact head 6a96e31 against #71 and the Show Me/Retro contract in #55. Availability uses the installed command list, missing commands send nothing, invocation preserves session/item scope, and the atomic pending slot suppresses repeats until settlement. The current navigation and explanation remain intact; no prompt, subagent or cross-session API was added.

Independent validation: 54 real mod tests pass with the integrity-checked Claude Code 2.1.296 and with the minimum 2.1.293, and both call reports remain within #55's allowlist. The repository version check passes for 0.8.0 to 0.9.0; all six protected source checks are green on this exact head. The selected-item seam is prepared for #69 integration; that integration must retain public-pane scope and refresh discovery coverage. Installed-host acceptance remains #73.

No material defect or unmet acceptance was found in this slice.

@timeleft--
timeleft-- merged commit fb0e8ef into main Oct 10, 2026
9 of 11 checks passed
@timeleft--
timeleft-- deleted the automation/hermes-helmet-71 branch October 10, 2026 17:46
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.

feat(bridge): run installed Show Me and Retro with session or item scope

2 participants