Originally created by: kumaakh
Evolve the fleet status line from a passive display into an active, LLM-callable pub/sub system. Any skill, LLM, or user can publish named topic segments to the status line (and eventually other channels like Slack/Teams) without knowing about other topics or the full layout.
Two specific problems this solves:
The tool is general-purpose — publish_status can be called by any skill, by the LLM directly, or by the user to keep a short note permanently in front of their eyes. MCP does not know or care who the caller is.
publish_statuspublish_status(topic, value?, channel?, size?)
topic — a caller-chosen name reserving a segment. Callers are responsible for picking names unlikely to collide (e.g. pm stores its topic name in projects.md; a user can use a GUID or any memorable string). MCP does not enforce uniqueness — callers own their namespace.value — the string to display. Truncated to size characters. Omitting value (or passing empty) clears and forgets the topic immediately — no need for a separate clear_status tool.channel — optional, defaults to "statusline". Future values: "slack", "teams", "log". Same tool, multiple destinations — no skill changes needed when new channels are added.size — optional, defaults to 16 characters. Set on first publish; resizable on subsequent calls.MCP maintains a topic registry persisted to a JSON file so topics survive MCP restarts. Skills re-publishing on their next update naturally refresh the registry; no explicit re-registration needed.
| topic | value | size | last_updated |
|---|---|---|---|
| fleet | 2↑ 1↓ idle |
16 | 2026-04-17T10:00:00Z |
| pm-odm | ODM→DDDVI..o..o |
20 | 2026-04-17T10:01:00Z |
| pm-avms | AVMS→██░░░░ |
20 | 2026-04-17T09:58:00Z |
| note | deploy after 5pm |
20 | 2026-04-17T09:55:00Z |
Topics render left-to-right ordered by recency. Because each topic's value includes its own identity (e.g. ODM→..., AVMS→...), positional shifts are not disorienting — the label travels with the value. Topics not updated in 24 hours are automatically forgotten.
fleet is the default topic, always registered at startup.
Callers decide their own format. Examples:
ODM→DDDVI..o..o where D=done, V=verified, I=in-progress, o=pendingAVMS→██░░░░ 3/6✓ Release x64deploy after 5pmlm: 4/7 testsMCP does not enforce topic name uniqueness or ownership. The tool description nudges callers to pick names unlikely to collide:
pm skill stores its per-project topic name in projects.md (e.g. pm-odm, pm-avms)publish_status("pm-odm") # no value = clear and forget immediately
No separate clear_status tool needed.
channel param future-proofs for Slack/Teams routingpublish_status tool: new MCP tool in fleet-mcppm skill: call publish_status("pm-<project>", "PROJECT→<progress>") on task state changes; call publish_status("pm-<project>") on sprint completionfleet-status tool: becomes a topic publisher (publish_status("fleet", ...))channel param reserved for future)
Originally posted by: kumaakh
Technical direction: The design in the issue body is well-thought-out. Implementation sequence:
The channel routing (Slack/Teams) can be wired up later by adding a channel dispatch layer in publish-status.ts — the tool interface is already future-proofed for it.