Interface Layout
The Enki TUI is built with rawcrossterm (not ratatui) and provides a chat-based interface for interacting with the coordinator agent. The layout consists of:
- Title bar: Shows “enki” and your project name
- Chat area: Scrolling message history with markdown rendering
- Worker panel: (toggleable) Real-time status of active workers
- Input area: Pinned at the bottom with a
›prompt
Chat Interface
The chat area displays:- Your messages: Prompts and questions you send to the coordinator
- Coordinator responses: Streamed in real-time with markdown formatting (via
termimad+syntectfor syntax highlighting) - System events: Task spawns, completions, failures, merge status updates
- Tool call indicators: Visual feedback when the coordinator uses MCP tools
Markdown Rendering
The coordinator’s responses are rendered with full markdown support:- Headers, lists, code blocks with syntax highlighting
- Bold, italic, inline code
- Tables (for displaying task lists)
Interacting with the Coordinator
The coordinator agent is your primary interface. You describe work in natural language, and the coordinator:- Explores the codebase to understand context
- Plans the work by decomposing it into steps
- Creates executions using MCP tools
- Tracks progress as workers complete their tasks
- Reports on status, failures, and next steps
Describe your work
Type a natural language request describing what you want to build, fix, or investigate:
Review the plan
The coordinator will explore the relevant code, then present a plan. For complex or ambiguous work, it may ask clarifying questions about:
- Architectural approach (“Should auth use JWT or session tokens?”)
- Scope boundaries (“Should I fix just checkout or the underlying payment abstraction?”)
- Tradeoffs (“Migrate in-place (faster, riskier) or build alongside (slower, safer)?”)
Monitor progress
Once the execution is created, the coordinator spawns workers automatically. You’ll see:
- Worker spawned events:
▶ Worker spawned: Implement JWT middleware (a1b2) - Worker completed events:
✓ Worker completed: Implement JWT middleware (a1b2) - Merge queued/landed events:
⊕ Merge queued: task/task-a1b2c3d4 - Progress narration: The coordinator provides context (“Step 2/4 merged — route handlers are next”)
Address failures
If a worker fails, you’ll see:The coordinator will read the session log excerpt and diagnose the issue. It may:
- Retry automatically (timeouts, no-changes failures get up to 2 retries)
- Retry with enki_task_retry to add another attempt
- Adjust the plan if the original approach was flawed
Worker Status Panel
PressCtrl+W to toggle the worker status panel. When visible, it shows:
- Active worker count
- Each running worker with:
- Task title
- Tier (light/standard/heavy)
- Current activity (tool name or “Thinking”)
Activity Indicators
Worker activity is tracked through ACP session updates:- Tool name: Shows which tool the worker is currently using (e.g., “Read”, “Edit”, “Bash”)
- “Thinking”: The worker is streaming text (reasoning) between tool calls
- Custom status: Workers can report phase updates via
enki_worker_report(e.g., “analyzing codebase”, “running tests”)
Keyboard Shortcuts
| Key | Action |
|---|---|
Ctrl+W | Toggle worker status panel |
Ctrl+C | Interrupt current coordinator response (first press) / Exit (second press within 5s) |
@ | Trigger fuzzy file autocomplete |
Up/Down | Navigate input history |
Autocomplete
Type@ to trigger fuzzy file path completion. The autocomplete:
- Walks your project directory using
.gitignorerules - Performs fuzzy matching with
nucleo-matcher(fzf-style scoring) - Shows top 10 matches sorted by score
- Appends
/to directories
Streaming and Responsiveness
The coordinator’s responses stream in real-time. You’ll see:- Text streaming: Words appear as the agent reasons
- Tool call started: Visual indicator when a tool begins (e.g., ”📋 enki_execution_create”)
- Tool call done: Brief “thinking” indicator after the tool completes
- Turn complete: The coordinator yields control, waiting for your next input
Interrupting
PressCtrl+C once to interrupt the coordinator mid-response. This is useful if:
- The coordinator is pursuing the wrong approach
- You want to provide additional context before it continues
- You need to stop an overly long response
Event Messages
System events appear in the chat with distinct formatting:- Worker spawned:
▶(cyan) — A new agent started working on a task - Worker completed:
✓(green) — Worker finished successfully - Worker failed:
✗(red) — Worker encountered an error - Merge queued:
⊕(cyan) — Task output is queued for merge - Merge landed:
✓(green) — Changes merged to main successfully - Merge conflict:
⚠(yellow, bold) — Manual conflict resolution needed - Merge failed:
✗(red) — Merge failed (conflict or verification) - Mail:
✉(cyan) — Inter-agent message (usually escalations or checkpoint notifications) - All stopped:
■(yellow) — All workers were terminated
Desktop Notifications
The TUI sends desktop notifications for important events:- Coordinator turn complete (“Enki is waiting for input”)
- Merge conflicts (“Merge conflict: task/task-a1b2c3d4”)
- All workers stopped
- Errors
