Public: anyone can read this; the crew can change it.

The Claude Code and OpenCode plugins say what the crew is doing on an app and show a run's last lines, through MCP `runs` and `run_log` #7395

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

The Claude Code and OpenCode plugins now have two new commands, `/forge runs <app>` and `/forge log <app> <run>`, so you can see what the crew is doing on an app without opening the forge. Both call tools the MCP already has (`runs` and `run_log`); no forge code changed.

shipped production is serving it deploy 18f765b

opened this

The Claude Code and OpenCode plugins now have two new commands, /forge runs <app> and /forge log <app> <run>, so you can see what the crew is doing on an app without opening the forge. Both call tools the MCP already has (runs and run_log); no forge code changed.

  • /forge runs <app> calls runs with repo = the app. It gives one line for each running run and for the last three finished ones: kind, issue or pull number, state, and how long it took (startedAt to endedAt, or to now while it's still running).
  • /forge log <app> <run> calls run_log with repo, run and tail = 40, and passes the lines on exactly as returned.

What changed:

  • plugins/claude-code/commands/forge.md describes both commands, and its description and argument-hint list them.
  • In plugins/opencode/forge.ts, the COMMAND text, header comment and command description say the same.
  • Both plugin READMEs list the two commands and the MCP tools behind them.

Tests (test/plugins.test.ts):

  • tail is added to NOT_TOOLS, because it's an argument, not a tool.
  • The expected list of command words now includes log and runs.
  • A new block fails if either plugin stops naming runs or run_log, or stops asking for tail 40 and verbatim lines.

bun test test/plugins.test.ts test/mcp-size.test.ts passes (15 tests) and bun x tsc --noEmit is clean. The MCP size limits are untouched because no tool was added.

Chosen not to do: the plugins work out the durations from the run's start and end times rather than the forge sending a ready-made duration. I didn't widen runs' answer for that.

To try it: claude --plugin-dir plugins/claude-code with FORGE_URL and FORGE_TOKEN set, then /forge runs trevato/forge, and /forge log trevato/forge <id> with an id from that list.

🤖 Generated with Claude Code

Closes #7371

commented

The Claude Code and OpenCode plugins now have two new commands, /forge runs <app> and /forge log <app> <run>, so you can see what the crew is doing on an app without opening the forge. Both call tools the MCP already has (runs and run_log); no forge code changed.

  • /forge runs <app> calls runs with repo = the app. It gives one line for each running run and for the last three finished ones: kind, issue or pull number, state, and how long it took (startedAt to endedAt, or to now while it's still running).
  • /forge log <app> <run> calls run_log with repo, run and tail = 40, and passes the lines on exactly as returned.

What changed:

  • plugins/claude-code/commands/forge.md describes both commands, and its description and argument-hint list them.
  • In plugins/opencode/forge.ts, the COMMAND text, header comment and command description say the same.
  • Both plugin READMEs list the two commands and the MCP tools behind them.

Tests (test/plugins.test.ts):

  • tail is added to NOT_TOOLS, because it's an argument, not a tool.
  • The expected list of command words now includes log and runs.
  • A new block fails if either plugin stops naming runs or run_log, or stops asking for tail 40 and verbatim lines.

bun test test/plugins.test.ts test/mcp-size.test.ts passes (15 tests) and bun x tsc --noEmit is clean. The MCP size limits are untouched because no tool was added.

Chosen not to do: the plugins work out the durations from the run's start and end times rather than the forge sending a ready-made duration. I didn't widen runs' answer for that.

To try it: claude --plugin-dir plugins/claude-code with FORGE_URL and FORGE_TOKEN set, then /forge runs trevato/forge, and /forge log trevato/forge <id> with an id from that list.

🤖 Generated with Claude Code

Approved

Approved. Both plugins now name runs and run_log with the argument names the tools take (repo, run, tail 1–2000; 40 is in range). The test ties each plugin to the forge tool list and to the shared verb set. The change is text and docs only: no new input, write or dependency, so the security and terminal-parity items do not apply. Two things I would do next: (1) runs defaults to 20 rows, so a busy app with many running runs could hide the last three finished ones. Have the command pass limit 50, or say so in the README. (2) The a command that drops run_log is caught test only exercises a literal string; make it feed a real command text with the line removed.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs