marketplace/bundles/plan-marshall/skills/manage-terminal-title/SKILL.md
Pure platform-agnostic terminal-title composition consumed by platform-runtime via PYTHONPATH
npx skillsauth add cuioss/plan-marshall manage-terminal-titleInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Pure, platform-agnostic terminal-title composition. This is a library skill
with no user-facing workflow and no CLI entry point — its single module is
imported via PYTHONPATH by platform-runtime, mirroring how script-shared
modules are consumed.
manage_terminal_title.py owns the title-composition contract: the body-format
function, the TITLE_TOKEN_GLYPHS lock-state glyph map, the icon palette +
event→icon resolver, and the pure compose(state_dict, event) function. It is a
leaf library — it imports NEITHER manage-status NOR platform-runtime.
platform-runtime imports it one-directionally to render the title string after
it has read status.json.
Execution mode: script-deterministic library — no LLM, no CLI dispatch.
The composer is a pure function imported and called by platform-runtime.
Prohibited actions:
compose and
its helpers operate solely on the passed state_dict. The caller
(platform-runtime) owns all reads of status.json and all emission.manage-status or platform-runtime — the module is a leaf in
the dependency graph; the only permitted direction is platform-runtime →
manage-terminal-title.execute-script.py.Constraints:
platform-runtime) MUST consume them via import rather than
re-declaring them.dev-agent-behavior-rules.compose(state_dict, event, icon_override=None, tool_name=None) -> str | None
composes '{icon} {glyph} {body}'. It is pure — no I/O. The three inputs are
independent:
_compose_body(state_dict) renders the body from current_phase and the
optional short_description:
| Condition | Body |
|-----------|------|
| Active phase, short_description present | pm:{phase}:{short} |
| Active phase, no short_description | pm:{phase} |
| Terminal phase (complete / archived), short present | pm:Completed:{short} |
| Terminal phase, no short | pm:Completed |
| current_phase empty / missing | None (true no-op) |
A terminal phase renders the Completed body — NOT None — so a finished plan
still shows in the title (with the ✅ override below).
TITLE_TOKEN_GLYPHS)The title_token lock-state glyph, prepended when the field is set:
| State | Glyph |
|-------|-------|
| lock-waiting | ⏳ |
| lock-owned | 🔒 |
manage-status persists only the bare state string in the title_token field;
this map is the single owner of the state→glyph rendering. The glyph is omitted
('{icon} {body}') in two cases:
title_token is set in the plan state.current_phase is a terminal phase (complete / archived) — a finished
plan holds no live lock state, so the glyph is suppressed regardless of
any persisted title_token value. The suppression is token-agnostic: both
TITLE_TOKEN_GLYPHS states (⏳/🔒) are uniformly suppressed for a terminal
plan.resolve_icon + terminal override)resolve_icon(event, tool_name=None) maps the hook event to the process icon:
| Event | Icon |
|-------|------|
| UserPromptSubmit / SessionStart / PostToolUse (any tool) / default | ➤ active |
| Notification / PreToolUse:AskUserQuestion | ? waiting |
| Stop | ✓ done |
Terminal-state override: when state_dict['current_phase'] is complete or
archived, compose forces the icon to ✅ (_ICON_TERMINAL, U+2705 — the thick
check-mark, distinct from the thin ✓ _ICON_DONE) regardless of the hook event
or icon_override. The process icons ➤ (active) and ? (waiting) MUST NOT appear
for a finished plan.
For non-terminal phases, icon_override (push-mode) supersedes the event-resolved
icon when provided.
The module is imported via PYTHONPATH the same way script-shared modules are
(the executor's PYTHONPATH generation scans immediate subdirectories of each
scripts/ directory). platform-runtime imports it as:
from manage_terminal_title import compose, resolve_icon, TITLE_TOKEN_GLYPHS
This skill is registered in plugin.json per the library-skill convention (same
as script-shared): user-invocable: false, context-loaded / library, no 3-part
script notation.
plan-marshall:platform-runtime — the one-directional consumer: resolves
session→plan, reads status.json, calls compose, and emits per platform.plan-marshall:script-shared — the analogous PYTHONPATH-imported library skill.development
The single append-only change-ledger — one worktree_sha-stamped substrate for kind=build and kind=change entries — plus the first-class worktree-sha freshness API
development
Authoring standards for ASCII box diagrams in skill and doc source — box-drawing conventions, right-border alignment, and a deterministic check/fix validator over fenced/literal code blocks in .md and .adoc files
testing
Recipe for verifying and fixing alignment of ASCII box diagrams across .md skill source and .adoc documentation, one deliverable per offending file
development
Cross-session coordination primitives — the unified file-based merge mutex and the build-queue concurrency limiter on one shared, TOCTOU-safe, main-anchored core