fix: shorten Claude Code Calm supervision note label - #6086
Merged
Merged
Conversation
…ead "fm: " Claude Code labels every mod transcript line with the plugin name, so the notes rendered as "firstmate-calm: ⚓ ...". Rename the plugin to fm, update the live guard to assert the fm: label, and document the one-time replay for sessions resumed across the rename.
|
andrewesweet
pushed a commit
to andrewesweet/firstmate
that referenced
this pull request
Sep 30, 2026
* fix(calm): name the Claude Code Calm plugin fm so supervision notes read "fm: " Claude Code labels every mod transcript line with the plugin name, so the notes rendered as "firstmate-calm: ⚓ ...". Rename the plugin to fm, update the live guard to assert the fm: label, and document the one-time replay for sessions resumed across the rename. * no-mistakes(document): Clarify Calm plugin rename in documentation
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.
Intent
The firstmate-calm supervision notes shown in Claude Code should not start with "firstmate-calm: ".
Context: today each note renders as "firstmate-calm: ⛵ mini-default: ..." in Claude Code. The notes come from the merged #6039, which draws Firstmate's supervision notes in Claude Code through the Calm mod (.claude/mods/firstmate-calm/, lib/fm-branch-notes.ts, and hooks/register.ts, which emits each line with $.ui.log(line)). The intended note text starts with its glyph (⛵ or ⚓), so the "firstmate-calm: " label is probably added by Claude Code's mod runtime when a mod logs.
Later decision on the label, from the options in data/fm-calm-note-no-prefix-r1/prefix-decision.md: use "fm"
Context: that is option C with the Claude Code mod plugin renamed to exactly "fm", so each note's transcript label reads "fm: " instead of "firstmate-calm: ". "fm/calm" was rejected by plugin validation as not kebab-case; "fm" passes
claude plugin validate. Calm must keep working, including the config/calm preference.What Changed
firstmate-calmtofm, so Claude Code displays supervision notes with anfm:label.Upgrade note
Claude Code keeps a mod's
$.storein one file per plugin name, so the rename starts thefmplugin with an empty store. A session that already showed supervision notes before this lands and is then resumed withclaude --continuereplays its still-due notes once (unprocessed captain anchors and unread routine notes, capped at the newest 20 plus a count); after that the new store records them and nothing repeats. New sessions are unaffected. No migration reads Claude Code's private store files.Risk Assessment
✅ Low: The plugin-name change is narrow, matches the required fm label, and retains the Calm preference path and behavior.
Testing
Targeted checks and two isolated Claude Code 2.1.284 TUI runs passed. The captured terminal shows supervision notes labeled
fm:, notfirstmate-calm:; the live runs also verified flag-off behavior,/calmpreference toggling, and resume. Reviewer-visible evidence is rendered HTML of the captured TUI rather than a bitmap screenshot.fm:rather than the old label/calmand resumes Claude Code; the shared preference and hidden-row behavior remain intacttests/fm-calm-claude-mod-live-e2e.test.shagainst Claude Code 2.1.284tests/fm-calm-claude-mod-live-e2e.test.shagainst Claude Code 2.1.284claude plugin validate --strictviatests/fm-calm-claude-mod-plugin.test.sh; live TUI autoload and/calmchecksEvidence: Rendered Claude Code supervision-notes screen
Source: Rendered Claude Code supervision-notes screen
Evidence: Captured Claude Code terminal pane
Source: Captured Claude Code terminal pane
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
✅ **Review** - passed
✅ No issues found.
✅ **Test** - passed
✅ No issues found.
fm:rather than the old label/calmand resumes Claude Code; the shared preference and hidden-row behavior remain intacttests/fm-calm-claude-mod-live-e2e.test.shagainst Claude Code 2.1.284tests/fm-calm-claude-mod-live-e2e.test.shagainst Claude Code 2.1.284claude plugin validate --strictviatests/fm-calm-claude-mod-plugin.test.sh; live TUI autoload and/calmchecksTMPDIR="$PWD/.test-tmp" bash tests/fm-calm-claude-mod.test.shclaude plugin validate .claude/mods/firstmate-calmTMPDIR="$PWD/.test-tmp" bash tests/fm-calm-claude-mod-plugin.test.shFM_CLAUDE_CALM_LIVE_E2E=1 TMPDIR="$PWD/.test-tmp" bash tests/fm-calm-claude-mod-live-e2e.test.sh(twice; captured the real tmux pane on the second run)✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.