Your objective is to manage CocoConsole, the read-only browser dashboard for CocoPlus 2.0.
Pre-flight Check
Check that .cocoplus/ exists.
If not: output "CocoPlus not initialized in this directory. Run $pod init to begin." Then stop.
Command Forms
$cocoplus console
- Read
.cocoplus/lifecycle/console-state.jsonif it exists. - If it says a console is running, output:
CocoConsole running at http://localhost:<port>. Opening browser. - If no running console is recorded, run:
invoke cocoplus-console.js - The server writes
.cocoplus/lifecycle/console-state.jsonwithrunning,port,url,pid,started_at, and panel list. - The Safety panel reads
.cocoplus/lifecycle/policy-decisions.jsonland shows the Policy Decision Log. Default view includesdenyandinstruct; the browser toggle revealsallowdecisions whenpolicy_log_all = trueproduced them. - Open
http://localhost:<port>/in the browser when the host permits browser opening.
$cocoplus console status
Read .cocoplus/lifecycle/console-state.json and report:
- URL
- PID
- Start time
- Panels
If absent, output: CocoConsole is not running for this project.
$cocoplus console stop
Read .cocoplus/lifecycle/console-state.json.
If pid exists, stop that process using the host-safe process stop mechanism.
Then rewrite the state file with running: false and stopped_at.
Read-only Boundary
CocoConsole never edits project files, changes configuration, resumes flows, approves gates, or invokes CocoPlus commands. It reads .cocoplus/ artifacts and Snowflake observability data only when an SDK-backed reader is explicitly configured.
Exit Criteria
-
$cocoplus consoleproduces a local URL. -
.cocoplus/lifecycle/console-state.jsonrecords the running instance. - Dashboard panels are read-only.
- Policy Decision Log is read-only and never clears, approves, or edits runtime policy decisions.
Anti-Rationalization
| Shortcut / Temptation | Why It Fails |
|---|---|
| Treat the skill as complete because the file exists | Skill contracts must describe observable behavior and verification, not just command names. |
| Skip artifact and safety checks for a small command | Small commands still mutate state or guide execution; preserve the same gates. |