| name | statusline |
| description | Configure the CGG acoustic statusline — a read-only conformation radar with soft-toggle modes (OFF/LITE/FULL).
CENTROID:
read-only observability configuration surface for ambient conformation display
IS:
- statusline script install and uninstall under user or project scope
- mode toggle across OFF | LITE | FULL
- cache clear and current-configuration inspection
IS NOT:
collapse_zones:
- governance runtime (never emits signals, advances tics, or mints warrants)
- truth reconstructor (never scans raw JSONL ledgers for state inference)
- cadence participant (statusline observes; cadence writes)
- CogPR extractor (never captures lessons from display context)
- summary author (reads conformation snapshots; never produces them)
sibling_overlaps:
- /governance-check (same read axis — poll-triggered instead of ambient)
- /init-governance (runtime surface installer)
- conformation write path (produces the summaries statusline consumes)
WHEN:
- after /init-governance when conformation surface exists and ambient radar is desired
- when statusline mode needs toggling between OFF / LITE / FULL
- when verifying current statusline configuration or clearing its cache
NOT WHEN:
- as a source of truth for governance decisions (reads summaries — never authoritative)
- inside an enterprise managed-policy environment where statusLine is administrator-pinned
- during /cadence or /review (mutation surfaces; statusline is pure observability)
RELATES TO:
- /governance-check (both observability — statusline is ambient, governance-check is on-demand poll)
- /init-governance (bootstrap — init-governance sets up the surfaces statusline reads)
- /cadence (statusline consumes conformation; cadence helps produce it)
ARGS:
stance: dispatch
off_envelope: ask
# off_envelope rationale: /statusline mutates settings files under `install`
# and toggles per-project state. An undeclared sub-command could land in
# the wrong scope or write unintended global config — ask prevents misfire.
core_dispatch_rays:
- "" → show current configuration
- "install" → install into project-local settings
- "install --global" → install into ~/.claude/settings.json
- "uninstall" → remove from scope-appropriate settings
- "mode OFF|LITE|FULL" → toggle display mode
- "clear" → delete per-project cache files
secondary_modulation_axes:
- scope: project | global
|
| user-invocable | true |
/statusline — CGG Acoustic Statusline
A live conformation radar for the current estate. Pure observability surface.
It shows:
- where you are (project, branch)
- how full the session is (cost, duration)
- what the estate's last known conformation looks like (from canonical snapshots)
It does NOT:
- decide or infer canon from raw ledgers
- mutate governance state (no signal emission, no audit entries, no mandates)
- run cadence machinery or participate in the promotion pipeline
- scan raw JSONL event stores for truth reconstruction
Architecture invariant: Statusline reads summaries. Governance produces summaries. Statusline never becomes governance.
Modes
| Mode | Output | Performance |
|---|
| OFF | Nothing | Zero cost |
| LITE | [Opus] my-project (main) | tic 208 | ~5ms (cached) |
| FULL | Line 1: same as LITE | ~10ms cached |
| Line 2: conformation: clean | sig 0 | wrn 0 | cpr 2 | $0.47 | 12m | |
Fallback Ladder
The statusline degrades gracefully based on what canonical surfaces exist:
- Conformation snapshot exists — show full conformation counts (sig/wrn/cpr) + status
- Only tic counter exists — show tic count, skip conformation fields
- Neither exists — show model + project + branch only
The statusline never compensates for missing summaries by scanning raw ledgers.
Sub-commands
/statusline install
Install into the current project's .claude/settings.local.json (project-scoped).
Steps:
- Read
.claude/settings.local.json (create if absent)
- Set the
statusLine key:
{
"statusLine": {
"type": "command",
"command": "bash \"$CLAUDE_PROJECT_DIR\"/vendor/context-grapple-gun/cgg-runtime/scripts/cgg-statusline.sh"
}
}
- If
~/.claude/settings.json has a statusLine key, warn:
"Global statusLine in ~/.claude/settings.json will be overridden by project-local setting."
- Confirm installation.
Do NOT modify ~/.claude/settings.json unless --global is explicitly passed.
/statusline install --global
Install to ~/.claude/settings.json instead of project-local. Warn that this affects all projects.
/statusline uninstall
Remove the statusLine key from .claude/settings.local.json. If --global, remove from ~/.claude/settings.json.
/statusline mode <OFF|LITE|FULL>
Toggle the display mode:
- Compute the project hash: first 8 chars of
md5(workspace.project_dir)
- Write the mode string to
/tmp/cgg-sl-<hash>-mode
- Confirm: "Status line mode set to FULL. Takes effect on next refresh."
Default mode (no flag file) is LITE.
/statusline clear
Delete all cache files for the current project:
/tmp/cgg-sl-<hash>-{mode,git,tic,conf}
/statusline (no args) — toggle LITE ↔ FULL
Toggle the display mode between the two everyday modes (LITE and FULL):
- Compute the project hash: first 8 chars of
md5(workspace.project_dir)
- Read the current mode from
/tmp/cgg-sl-<hash>-mode (absent = LITE default)
- If current is
FULL → write LITE; otherwise (LITE / OFF / absent) → write FULL
- Confirm the new mode, then show a one-line config summary (configured surface + cache ages)
OFF remains reachable explicitly via /statusline mode OFF. The toggle only flips the
per-project mode flag file in /tmp/ — it never touches governance state.
Data Sources
Allowed (observability layer)
| Metric | Source | Method |
|---|
| Model name | Claude Code stdin JSON | Direct read |
| Cost | cost.total_cost_usd from stdin JSON | Direct read |
| Duration | cost.total_duration_ms from stdin JSON | ms to formatted |
| Tic count | ~/.claude/cgg-tic-counter.json | Scalar read from canonical counter |
| Conformation counts | audit-logs/conformations/tic-N.json | Read .counts from latest snapshot |
| Git branch/dirty | git symbolic-ref / git diff --quiet | Cached 5s |
Disallowed (governance runtime — never touch)
| Source | Why |
|---|
audit-logs/signals/*.jsonl | Raw event ledger. Truth reconstruction is governance work. |
audit-logs/cprs/queue.jsonl | Raw queue ledger. Latest-per-ID resolution is governance work. |
Inline <!-- --> blocks | Not authoritative. Scanning them conflates observation with inference. |
audit-logs/tics/*.jsonl | Raw tic ledger. Use the canonical counter scalar instead. |
Cache Strategy
All caches are namespaced per project via hash of workspace.project_dir:
| Cache | TTL | Key |
|---|
| Git branch + dirty | 5s | /tmp/cgg-sl-<hash>-git |
| Tic count | 30s | /tmp/cgg-sl-<hash>-tic |
| Conformation summary | 30s | /tmp/cgg-sl-<hash>-conf |
Script Location
Canonical: vendor/context-grapple-gun/cgg-runtime/scripts/cgg-statusline.sh
Referenced in-place from the submodule — not copied to .claude/. This avoids drift between canonical and installed copies.
Separation of Concerns
| Layer | Responsibility | Statusline's role |
|---|
| Observability | Display conformation state | This layer. Read-only radar. |
| Governance runtime | Produce conformations, advance signals, mint warrants | Not this layer. Never. |
| Review / promotion | Adjudicate CogPRs, promote lessons to law | Not this layer. Never. |
Safety
- No writes to
audit-logs/, no signal emission, no state mutation
- No cadence participation, no mandate creation
- Cache writes go to
/tmp/ only (ephemeral, OS-managed)
- Mode toggle is per-project namespaced — one project cannot toggle another
- If canonical summary surfaces are missing, degrades to smaller display — never compensates