Design: migrate panels to coily verbs + cli-web-ops, sunset the Go daemon #4
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally filed by @coilysiren on 2026-05-14T04:25:35Z - https://github.com/coilysiren/personal-dashboard/issues/53
Honest framing
The Go HTTP daemon built in #36 through #48 is a working prototype that confirmed the panel set and shook out the redact-by-default UX. It is also a parallel reimplementation of cli-web-ops, which already exists for this exact purpose: a mobile-first MCP-client web executor with annotation-driven favorites via
tool.Meta["webops.*"]and a Tailscale-only bind by default.The right architecture is:
internal/sources/*package becomes a coily subcommand (e.g.coily inbox list,coily denials list,coily steam recent). Same data, exposed as a CLI tree.webops.favorite=trueMeta annotations. Mobile-first PWA shell for free.Prerequisite chain
This migration is blocked on the lockdown-profile work in flight:
CLAUDE_CODE_SESSION_ID).Architecture already settled:
kai-execution-mode-*skills.~/.coily/audit/sessions/<CLAUDE_CODE_SESSION_ID>/profile.Until coily#150 and cli-guard#32 land, the dashboard's MCP/web-ops integration would lack the per-session profile gate that makes mobile-dictation from a public space safe. That is the prerequisite gate.
Migration plan
Sequence, once prereqs land:
internal/sources/*package becomes a coily subcommand under a new namespace. Suggested:coily inbox,coily denials,coily steam,coily luca,coily social,coily home. Each verb emits structured JSON (kai-tech-prefs JSON-twin pattern).tool.Meta["webops.favorite"] = "true"plus anywebops.icon/webops.titleper panel so cli-web-ops shows them in the mobile favorites list. Annotation surface defined by cli-mcp.internal/session/reveal store andredact-by-defaultCSS class are repackaged as a cli-guard data-security-mode primitive. The dashboard never holds reveal state directly; cli-guard's session sentinel decides which fields a verb's output redacts.coily say <text>) or a cli-web-ops extension. Out of scope for the initial port.What survives the prototype
coily inbox list.coily denials list.coily://URL pattern is exactly what cli-web-ops emits anyway, so the abstraction was correct - just lived in the wrong repo.What dies
cmd/personal-dashboard/main.goHTTP daemon.internal/server/(cli-web-ops handles rendering).internal/dispatcher/(cli-web-ops emits thecoily://URLs).internal/session/(data-security-mode in cli-guard).internal/voice/(migrates to a coily verb).Holding state
The prototype keeps running on
127.0.0.1:31337until prereqs land. Existing panels are useful as a reference implementation while porting. Once the migration begins, the HTTP daemon path is a one-way door - we delete it, not maintain two surfaces.Out of scope here
Action items, deferred until prereqs land
coily inboxnamespace withlist/mark-read/mark-unreadverbs.coily denialsnamespace withlist/propose-allowlist.coily steam recentverb.coily luca digest+ grafana / phoenix deep-link verbs.coily socialnamespace (bluesky / reddit / discord sub-verbs).coily homenamespace (hue / sonos / cast preset verbs).webops.*annotations on each panel-favorite verb.cmd/personal-dashboard/,internal/server/,internal/dispatcher/,internal/session/.