@@ -87,68 +87,24 @@ Sketch to design out later (a real mechanism-design + security effort, not built
8787 token/RBAC model, how "less-restricted browsing" stays contained, and where the line
8888 sits between "draft for review" and "act."
8989
90- ## Haku Console risky-tool broker
90+ ## Future: broaden conversational Haku
9191
92- Haku Console is the MCP/HTTP policy and approval boundary: calls that pass reviewed auto-approval
93- policy execute immediately, while all others become operator approval requests. The invariant stays
94- the same: exact call reviewed, trusted console approval, console-owned audit/result state, and
95- credentials scoped or proxied rather than trusted to Haku's restraint.
92+ The concrete milestone—one conversation-scoped sandbox waking from a durable ` haku-state ` checkout—is
93+ tracked in [ ` plans/claude_sandbox_haku_runtime.md ` ] ( plans/claude_sandbox_haku_runtime.md ) .
9694
97- ## Future: a conversational interface with Haku (operator, 2026-07-06)
95+ After that path is reliable, possible extensions are named conversations and handoff/fork, scheduled
96+ or event-driven wakes, and alternate message surfaces. All should reuse the same bounded runtime,
97+ shared Haku identity, Console-owned policy/approval path, and Git concurrency rules rather than
98+ introducing a second privileged execution path.
9899
99- Today the only way to reach Haku mid-stream is the console's capability tier: fire the
100- claude-code-web routine (optionally with per-run ` text ` ) and get one fresh, fire-and-forget
101- ` run.md ` pass — no back-and-forth, no memory of the exchange beyond what lands in
102- ` haku-state ` . The operator wants something more like chatting with Haku directly, plus
103- richer push notifications. ** Chat is the higher-priority half of this; notifications are a
104- nice-to-have.** Nothing below is designed yet — this is the shape of the ask, to work through
105- in a follow-up design pass.
106-
107- - ** A chat-like surface** — a Telegram bot and/or a web UI — where Haku reads messages and
108- replies, as an easier and richer affordance than the console's launch dialog for:
109- - ** Quick dispatch** : send Haku a task in a message, superseding the console's
110- "canned per-fire instructions" TODO (` TODO.md ` → _ Console_ ) with a lower-friction
111- version of the same idea.
112- - ** An ongoing, longer conversation** — not just one-shot fire-and-forget: follow-ups,
113- clarifying questions, iterating on a task, without re-stating context each time.
114- - ** Multiple conversation threads** , à la ChatGPT/claude.ai — separate topics or tasks
115- kept apart rather than one running transcript.
116- - ** Inline action affordances** — clickable prebaked answers/actions in Haku's messages,
117- not just prose. Conceptually the same idea as ` haku-ui ` 's markdown affordance widgets
118- (` <signal-toggle> ` , ` <handoff> ` , ` <launch> ` , ` <feedback> ` ) but rendered in a chat surface
119- (e.g. Telegram inline-keyboard buttons with ` callback_data ` , which is a different wire
120- shape than a link-based affordance).
121- - ** Richer mobile notifications** — push notifications (today: one-way ntfy, no replies, no
122- buttons — see _ Open questions_ below) that carry action buttons, so the operator can act
123- from the lock screen instead of opening a dashboard.
124-
125- Open design questions to work through before building anything:
126-
127- - How a chat surface reconciles with Haku's run-based execution model: today each web-home
128- invocation is one bounded ` run.md ` pass, not a standing process. Does "ongoing
129- conversation" mean a live conversational loop (a new runtime shape), or per-message dispatch
130- against a conversation thread/log kept in ` haku-state ` that each run picks up and appends to
131- (closer to today's model, but not a live chat)?
132- - Where conversation threads live and who owns them — ` haku-state ` (consistent with "state is
133- Haku's only memory") or a separate store, and how threads relate to ` items/ ` and ` runs/ ` .
134- - How action-button clicks get enforced: a chat message and click-to-action carries the same
135- shape of risk as ` requestLaunch ` , but a bot API has no equivalent of "trusted-rendered
136- chrome" to confirm against — worth a hard look before wiring any button to a mutating
137- action.
138- - Bot/webhook identity and perimeter: a Telegram bot needs a public inbound route and its own
139- credential, same class of new capability surface as ` haku-ui ` /the console — it inherits
140- Haku's security doctrine (` docs/security.md ` ), not a chat SDK trusting the model to behave.
141- - Whether chat-dispatched one-off tasks run at Haku's own orchestrator privilege (like today's
142- launch-routine) or can ever route through the dispatch plane's worker zones
143- (` plans/multi_agent.md ` ).
100+ Agent-authored transcript content remains untrusted UI. Any inline executable action needs a
101+ Console-owned schema, trusted rendering, actor checks, and the same audit path as an ordinary Console
102+ action.
144103
145104## Open questions
146105
147106- ** Value scoring** : single curator-owned 0–100 plus deadline is probably enough; resist
148107 building an expected-utility framework before the queue has real traffic.
149- - ** Notification thresholds** : ntfy is the channel; when to ping vs. wait for a dashboard
150- visit is a ` memory/ ` matter, tuned via intake. See _ Future: a conversational interface
151- with Haku_ above for the fuller chat/rich-notification direction this was gesturing at.
152108- ** Git as item store at scale** : a repo gives auditability, trivial backup, and
153109 human-editable state, but no queries or concurrent-writer safety. Fine at personal
154110 volumes with effectively serialized writers. If volume/concurrency ever outgrows it,
0 commit comments