Claude Modsunofficial directory

Interface·terminal·MIT

firstmate-calm

Hides tool rows and swaps the spinner for a sailboat. Toggle with /calm, zero tokens.

firstmate-calm has no screenshot yet: a placeholder terminal with the band above the prompt highlighted

firstmate-calm turns the Claude Code transcript into a plain conversation. With Calm on, the rows for tool calls and tool results draw at zero height, Claude’s mid-turn working notes disappear, and the stock spinner becomes a two-row animated sailboat while Claude works. Nothing is deleted: the stored transcript, the model’s context and the session file stay as they were. Only the drawing changes, so it costs zero tokens and makes no network calls.

The mod ships inside Firstmate, which its README describes as an agent distro: a cloned repository of instructions, skills and scripts that turns one coding agent into a supervisor that dispatches tasks to a crew of agents in separate git worktrees. The repository’s GitHub stars belong to Firstmate as a whole, not to this plugin. Calm started as a /calm toggle for the Pi harness; this mod brings the same toggle to Claude Code and shares its saved preference. The plugin is now named fm in its manifest, so Claude Code prefixes the mod’s transcript lines with fm:; the folder is still .claude/mods/firstmate-calm.

What it does

  • Hides tool chrome. ToolUse, ToolResult and ToolGroup rows draw as zero-height boxes.
  • Hides operational rows. A user message that Firstmate’s classifier recognizes as one of its own operational inputs (the messages its watcher sends into the session) draws at zero height, and so does a doorbell line that names a current record under the Firstmate home’s state/operational-inbox. Your own messages stay.
  • Hides working notes. Assistant text that Claude wrote mid-turn before calling tools is hidden. Final replies always show.
  • Draws the boat. The spinner becomes a sailboat in your current theme’s colors, repainted in place on its own tick.
  • Shows supervision notes. Whether Calm is on or off, one dim line per outcome the Firstmate supervision session records (⛵ <task>: <summary>, ⚓ [seq N] <task>: <summary>, and the host pausing or recovering) is appended to the transcript as a system notice, never sent to the model.
  • Toggles cleanly. /calm flips the state, redraws every hooked row already on screen and shows a toast. It leaves no row in the transcript, and the choice persists across sessions.

Install

Needs Claude Code 2.1.287 or later. The module also checks the CLAUDE_CODE_ENABLE_FUNCTION_HOOKS variable itself and does nothing unless it equals exactly 1, so export it even though Claude Code no longer needs it: CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude. Firstmate never writes that variable into any settings file. The author verifies the mod on Claude Code 2.1.272, 2.1.280, 2.1.282, 2.1.283 and 2.1.284 and declares no minimum version.

git clone https://github.com/kunchenguid/firstmate
claude --plugin-dir ./firstmate/.claude/mods/firstmate-calm

The README’s own route is to run claude inside the clone, which starts a full Firstmate session and loads the mod through a symlink under the project’s .claude/skills/, no --plugin-dir needed. There is no marketplace, so --plugin-dir is how to load the mod on its own. Run /calm and the toast says Calm on.

How it works

On session.start the module locates the Firstmate home from FM_HOME (or the FM_ROOT_OVERRIDE and FM_CONFIG_OVERRIDE variables, with the plugin’s own folder as fallback), reads the config/calm file there, reads the theme setting to pick a palette, reads the session’s messages to classify rows restored from a resumed transcript, starts the animation clock and registers /calm. The Pi extension reads the same config/calm file.

ui.render does the hiding: for every row listed above the hook returns a Box with display: none, so the row takes no space in the layout. For Spinner it returns a Raster of the boat sized to the viewport, and each clock tick repaints that raster through $.ui.blit without a full redraw.

turn.step is how the mod knows which assistant text is a working note. It passes every streamed chunk through unchanged, collects the text blocks of the main agent’s steps, and once a step ends records each block as a note (the step stopped to call tools) or a final reply. config.set on theme swaps the palette, and command.run for /calm writes the preference file before changing the screen, so a failed write leaves the state unchanged and says so in a toast.

The supervision notes come from a slow timer: every 3 seconds the mod reads the outcome store’s display copy and the supervision host’s latch file in the Firstmate home and appends a line through $.ui.log for each new outcome or latch change. On the first read of a session it replays the outcomes still unread or unprocessed, at most the newest 20, and it remembers in its plugin store how far each session has shown them, so a resumed session replays only what it has not shown.

Privacy: the hook reads your messages and Claude’s text locally to decide what to hide, reads the Firstmate home’s outcome and inbox records, sends nothing anywhere and writes one file, config/calm. It never asks the model anything.

Limitations

  • The boat draws only on the terminal surface. Elsewhere the stock spinner stays. The author documents nothing about the desktop app or mobile.
  • Activation requires the environment variable to be exactly 1. A Claude Code that loads the module without it leaves the mod as a no-op: no /calm, no boat, no notes.
  • Supervision notes appear only in a home that runs the Firstmate supervision host; elsewhere the timer finds nothing.
  • On the main-screen layout a toggle redraws the live screen by clearing and reprinting it, and the terminal’s scrollback keeps the earlier rendering above; the fullscreen layout has no stale copy.
  • The README describes Calm as hiding supported transcript chrome and keeps the list of what it cannot reach in the repository’s docs/calm.md, outside the plugin folder.