Agent-first human orchestration
A control plane for the human bottleneck.
Humans are scarce reviewers with tiny context windows and slow response times. humanctl gives agents a better way to show work, ask the smallest useful question, collect answers outside the chat thread, and resume without losing state.
.humanctl/local-firstopen source
Let's be real: humans are the bottleneck. humanctl helps them not be.
Escalation level
nudge
A lightweight interruption when a quick glance is probably enough. Better than silent idling, cheaper than a full context reload.
- Opens a preview, note, or comparison without derailing the rest of the run
- Keeps files, context, and artifacts attached to the same object
- Still lands in the event queue if the active session misses the live steer
What it replacesthread archaeology and idle waiting
What it keepsstate, files, answers, and context
What it optimizesthe human handoff, not the agent
01
Agents move fast. Humans context-switch slowly.
The problem is not intelligence. The problem is the handoff surface. Chat is linear, lossy, and thread-local.
02
The answer is not another generic dashboard.
humanctl is a local-first coordination layer where agents decide what to show, what to ask, and how strongly to escalate.
03
Files back the state. Events carry the steer.
Live updates are a convenience. Durable storage is the truth. That is what makes future sessions coherent.
The job
Package blockers into the smallest possible unit of human attention.
`humanctl` is not another generic agent dashboard. It is an async escalation layer where agents can surface context, attach artifacts, ask one focused question, and pick up again later from the exact same state.
The shared store is the source of truth. Live steer delivery is a convenience on top of the persisted queue, not a fragile dependency on whether a thread stayed alive.
Show
Put anything on the surface
HTML previews, markdown docs, screenshots, diffs, forms, file views, and any renderable artifact an agent wants a human to inspect.
Ask
Ask better questions
Turn a fuzzy blocker into a compact decision packet with attachments, context, and a clear response shape.
Resume
Resume without archaeology
The shared store is the truth. New sessions read durable files and events instead of reconstructing lost context from chat.
Local-first model
One workspace. Durable files. An append-only queue.
.humanctl/
manifest.json
inbox/
events.jsonl
tabs/
main/
manifest.json
things/
artifacts/
state/
ui.json
Things are the atomic objects agents create or update.
Events are the steer queue: created, updated, answered,approved, closed.
Tabs are navigation and focus, not a hard schema for content.
Open source infrastructure for human-in-the-loop agents
Your human is busy. Keep them useful.
Start with a local workspace, a tiny CLI, and a better escalation surface than chat alone.