Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 38 additions & 3 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,48 @@
{
"name": "hermes-helmet",
"displayName": "Hermes Helmet",
"version": "0.7.0",
"description": "First-officer skills for Hermes Helmet: setup, single-issue delivery, and dependent-issue coordination.",
"version": "0.8.0",
"description": "First-officer skills for Hermes Helmet: setup, single-issue delivery, and dependent-issue coordination, plus the Captain's Bridge mod, which opens a pane bound to the current conversation with /captains-bridge.",
"author": {
"name": "Machine Wisdom",
"url": "https://machine-wisdom.ai"
},
"homepage": "https://github.com/MachineWisdomAI/hermes-helmet",
"repository": "https://github.com/MachineWisdomAI/hermes-helmet",
"license": "Apache-2.0"
"license": "Apache-2.0",
"types": "./types/index.d.ts",
"userConfig": {
"helmetCommand": {
"type": "string",
"title": "helmet command",
"description": "Executable that reads session records. An absolute path is accepted, for sessions that do not inherit the shell PATH.",
"default": "helmet"
},
"explanationModel": {
"type": "string",
"title": "Explanation model",
"description": "Model alias or ID used when the explanation is updated.",
"default": "sonnet"
},
"explanationTimeoutSeconds": {
"type": "number",
"title": "Explanation time limit (seconds)",
"description": "Time limit for one explanation update.",
"default": 180,
"min": 10,
"max": 900
},
"showMeCommand": {
"type": "string",
"title": "Show Me command",
"description": "Name of the slash command for Show Me.",
"default": "show-me"
},
"retroCommand": {
"type": "string",
"title": "Retro command",
"description": "Name of the slash command for Retro.",
"default": "retro"
}
}
}
2 changes: 1 addition & 1 deletion .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "hermes-helmet",
"version": "0.7.0",
"version": "0.8.0",
"description": "First-officer skills for Hermes Helmet: setup, single-issue delivery, and dependent-issue coordination.",
"author": {
"name": "Machine Wisdom",
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ jobs:
echo "$RUNNER_TEMP/bin" >> "$GITHUB_PATH"
- name: Verify Jujutsu version
run: PYTHONPATH=src python -m hermes_helmet.jj_toolchain --check-binary "$(command -v jj)"
- name: Install checked Claude Code CLI
run: |
PYTHONPATH=src python -m hermes_helmet.claude_mod_toolchain --bin-dir "$RUNNER_TEMP/claude-bin"
echo "$RUNNER_TEMP/claude-bin" >> "$GITHUB_PATH"
- name: Verify Claude Code CLI version
run: PYTHONPATH=src python -m hermes_helmet.claude_mod_toolchain --check-binary "$(command -v claude)"
- name: Run product verification
run: scripts/verify.sh
- name: Run minimum quickstart and setup profiles
Expand Down
48 changes: 34 additions & 14 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,25 @@ All notable changes to Hermes Helmet are recorded here. The project follows

## Unreleased

### 0.6.0

- Captain’s Bridge can prepare an updated walkthrough in the background. The
panel captures the originating chat and a verifiable snapshot (delivery is
rejected if captured records changed or digests are inconsistent), asks the first
officer to dispatch one bounded read-only agent without waiting, and keeps the
current walkthrough visible. A timeout asks the first officer to stop the agent
and reports the stop as requested, not confirmed. Cancel, supersession, timeout, failure, duplicate
submission and late completion preserve the last useful view. Verified with
synthetic protocol and panel tests only; acceptance in an installed Codex host
is recorded separately in the pull request. Measured Codex limit: after the
parent turn finishes, the originating panel does not render a delivery, so a
request on the installed host now ends with an unsupported-boundary message
(no capture, dispatch or timer) unless the host advertises background delivery.
### 0.8.0

- Add the Captain’s Bridge mod skeleton to the Claude plugin
([#68](https://github.com/MachineWisdomAI/hermes-helmet/issues/68), part of
[#55](https://github.com/MachineWisdomAI/hermes-helmet/issues/55)). A hooks
module registers `/captains-bridge` (immediate) and opens a pane bound to the
exact `$.session.id()` without starting a turn or messaging the first
officer; non-drawing surfaces get a text status. `clear`, `resume`, `fork`
and session end end the binding and show “This conversation changed. Run
/captains-bridge to open the Bridge for it.” Claude Code older than 2.1.293
is told which version is needed. The manifest names a `PluginState`/
`BridgeState` type contract and `userConfig` (`helmetCommand`,
`explanationModel`, `explanationTimeoutSeconds`, `showMeCommand`,
`retroCommand`). CI installs an exact, checksum-verified Claude Code 2.1.296,
runs `claude plugin validate` and `claude plugin test` without credentials,
and fails on any call outside the read-only allowlist. MCP packaging and the skills
are unchanged. The version moves to 0.8.0 in `pyproject.toml`, the Python
package and both plugin manifests (the Codex manifest changes only its
version field), synchronized by `scripts/mw-version.py`.

### 0.7.0

Expand All @@ -43,6 +48,21 @@ Claude Code record reader.
into several output records, the first keeps the UUID and later blocks get a
deterministic 32-hex identity from the UUID and block index.

### 0.6.0

- Captain’s Bridge can prepare an updated walkthrough in the background. The
panel captures the originating chat and a verifiable snapshot (delivery is
rejected if captured records changed or digests are inconsistent), asks the first
officer to dispatch one bounded read-only agent without waiting, and keeps the
current walkthrough visible. A timeout asks the first officer to stop the agent
and reports the stop as requested, not confirmed. Cancel, supersession, timeout, failure, duplicate
submission and late completion preserve the last useful view. Verified with
synthetic protocol and panel tests only; acceptance in an installed Codex host
is recorded separately in the pull request. Measured Codex limit: after the
parent turn finishes, the originating panel does not render a delivery, so a
request on the installed host now ends with an unsupported-boundary message
(no capture, dispatch or timer) unless the host advertises background delivery.

### 0.5.0

- Captain’s Bridge Refresh records now rereads the exact bound chat directly
Expand Down
58 changes: 56 additions & 2 deletions docs/first-officer-plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,9 @@ first officer to start one read-only background preparation, cancellable from th
panel; see the lifecycle in the Bridge guide. See the
[source and test guide](../mcp/captains-bridge/README.md). The Claude Code port
is tracked in
[issue #55](https://github.com/MachineWisdomAI/hermes-helmet/issues/55); the
Claude plugin does not load the Bridge.
[issue #55](https://github.com/MachineWisdomAI/hermes-helmet/issues/55); see
[Captain's Bridge in Claude Code](#captains-bridge-in-claude-code) for what the
Claude plugin ships so far.

### Claude Code session records

Expand Down Expand Up @@ -66,6 +67,59 @@ reload plugins in an existing session, invoke them as
`/hermes-helmet:setup-helmet`, `/hermes-helmet:helmet-issue`, and
`/hermes-helmet:helmet-epic`.

### Captain's Bridge in Claude Code

The Claude plugin now includes the Captain's Bridge mod. A mod runs code inside
your Claude Code sessions, unlike the Codex plugin, which still copies
instructions (and its own MCP server) only. The skills above are unchanged and
keep working if your organization policy disables mods; only the Bridge is
skipped.

This release is the mod skeleton. Run `/captains-bridge` in any session to open
the Captain's Bridge pane beside the conversation. It is bound to that exact
session ID, starts no turn and messages no one, so it can be opened while the
first officer is working and at narrow terminal widths. It never opens by
itself and runs no timers. In VS Code and headless or SDK sessions, where no
pane draws, the command returns a short text status instead. The walkthrough,
refresh, background explanation, Show Me and Retro arrive in later releases
under the same state contract.

If the conversation changes (`/clear`, `/resume`, a fork, or the session
ends), the Bridge ends its binding and shows exactly: "This conversation
changed. Run /captains-bridge to open the Bridge for it." It never rebinds the
open pane on its own; run `/captains-bridge` again.

Requirements:

- Claude Code 2.1.293 or newer. An older host names the required version in
the command and the pane. Mods are early access and their API can change
between Claude Code releases; this release is verified on Claude Code
2.1.296 by an exact, checksum-pinned CLI in CI (`claude plugin validate` and
`claude plugin test`, with no account credentials). Re-verify when the
minimum changes. CI is not an installed-host check: the Terminal and Desktop
Code tab are confirmed by hand before a release.
- An organization policy that allows mods.
- The `helmet` CLI reachable from Claude Code. Sessions started by Claude
Desktop may not inherit your shell `PATH`; set `helmetCommand` to an absolute
path then.

Settings (plugin `userConfig`, defaults in parentheses): `helmetCommand`
(`helmet`), `explanationModel` (`sonnet`), `explanationTimeoutSeconds` (`180`),
`showMeCommand` (`show-me`), `retroCommand` (`retro`). The last four take
effect with later releases.

Update with `claude plugin update hermes-helmet@hermes-helmet`, then
`/reload-plugins` or start a new session. Third-party marketplaces do not
auto-update, so each release carries a version bump.

The mod's calls are limited in CI to a read-only allowlist: `$.session.id`,
`$.session.version`, `$.process.run`, `$.model.complete`, `$.command.register`,
`$.command.list`, `$.command.run`, `$.ui.open`, `$.ui.resolve`, `$.ui.status`,
`$.ui.toast`, `$.state.get`, `$.state.set` and `$.clock.after`. It cannot write
files, spawn agents, submit prompts, send messages or reach the network. This
slice uses only `$.command.register`, `$.session.id`, `$.session.version`,
`$.state.get`, `$.state.set`, `$.ui.open` and `$.ui.resolve`.

### Codex

```sh
Expand Down
3 changes: 3 additions & 0 deletions hooks/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"modules": ["./register.tsx"]
}
Loading
Loading