← Back to Kontasks
Agent Architecture: Konsole → Konui
Design for inverting the dependency - konsole as autonomous agent connecting to konui
Output
🔄 Agent Architecture: Invert the Dependency
You're right. The current model has it backwards. Here's the proper agent architecture:
Current vs Proper Model
| Aspect | Current (Wrong) | Proper Agent Model |
|---|---|---|
| Direction | konui → konsole | konsole → konui |
| Who initiates? | konui spawns Claude subprocess | konsole polls for work |
| State ownership | Split across both | konui owns all state |
| Restart impact | Breaks active sessions | Agent reconnects |
| Multi-agent | Not possible | Natural - multiple agents connect |
Proper Agent Architecture
┌─────────────────────────────────────────────────────────────┐ │ KONUI (Hub) │ │ │ │ Work Queue State Store Event Bus │ │ [prompts] [sessions] [SSE to browser] │ │ [kontasks] [contexts] [webhooks] │ │ │ └──────────────────────────┬──────────────────────────────────┘ │ agents connect TO konui (not the other way) │ ┌───────────────────┼───────────────────┐ │ │ │ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Konsole │ │ Agent 2 │ │ Agent N │ │ (Claude) │ │ (GPT?) │ │ (local?) │ │ │ │ │ │ │ │ GET /work │ │ GET /work │ │ GET /work │ │ POST /event │ │ POST /event │ │ POST /event │ └─────────────┘ └─────────────┘ └─────────────┘
Agent Protocol (konsole → konui)
1. REGISTER POST /api/agents/register { agentId, capabilities: ["claude", "tools"], status: "ready" } 2. POLL FOR WORK GET /api/agents/{agentId}/work (long-poll or WebSocket) → { workId, type: "prompt", sessionId, prompt, context } 3. STREAM EVENTS POST /api/agents/{agentId}/events { workId, type: "text|tool_call|done", content } 4. HEARTBEAT POST /api/agents/{agentId}/heartbeat { status: "working", currentWork: "abc123" }
Benefits
- Restart resilience — Agent reconnects, work queue persists
- Multi-agent ready — Multiple agents can connect to same hub
- Multi-machine — Agents can run anywhere with network access
- State centralized — konui owns all state, no split brain
- Scaling — Add agents to handle more work
💡 Migration Path
Phase 1: Add agent endpoints to konui (work queue, event ingestion)
Phase 2: Refactor konsole to poll konui instead of being called
Phase 3: Remove old konui→konsole code path
Phase 4: Add multi-agent support
What's Next?
Choose an action:
Quick Actions
Original Request
No layout configured
Details
Type
General
Status
Completed
Scope
vibetools
Tags
konsolekonuiarchitectureagent
Created
5 Jan 2026, 3:26 pm
Updated
5 Jan 2026, 3:26 pm
Timing
⏱️ 76.2s
1 tools
● TTFE 7%
● Thinking 92%
● Tools 0%
Created By
claude
Raw Data
{
"id": "df1fcb4f-3405-431b-9a49-854a2793905b",
"type": "general",
"status": "completed",
"title": "Agent Architecture: Konsole → Konui",
"description": "Design for inverting the dependency - konsole as autonomous agent connecting to konui",
"context": {
"output": "<div style=\"background:#1e1e1e;color:#e0e0e0;padding:20px;border-radius:8px;font-family:'Consolas','Monaco',monospace;\">\n<h2 style=\"font-family:sans-serif;color:#fff;margin:0 0 16px 0;\">🔄 Agent Architecture: Invert the Dependency</h2>\n\n<p style=\"color:#9ca3af;font-family:sans-serif;margin:0 0 16px 0;\">You're right. The current model has it backwards. Here's the proper agent architecture:</p>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h3 style=\"color:#e5c07b;margin:0 0 12px 0;font-family:sans-serif;\">Current vs Proper Model</h3>\n\n<table style=\"width:100%;border-collapse:collapse;font-size:0.85rem;\">\n<tr style=\"background:#1a1a1a;\">\n<th style=\"padding:10px;text-align:left;color:#fff;\">Aspect</th>\n<th style=\"padding:10px;text-align:left;color:#e06c75;\">Current (Wrong)</th>\n<th style=\"padding:10px;text-align:left;color:#98c379;\">Proper Agent Model</th>\n</tr>\n<tr style=\"border-bottom:1px solid #444;\">\n<td style=\"padding:10px;color:#e0e0e0;\">Direction</td>\n<td style=\"padding:10px;color:#e06c75;\">konui → konsole</td>\n<td style=\"padding:10px;color:#98c379;\">konsole → konui</td>\n</tr>\n<tr style=\"border-bottom:1px solid #444;\">\n<td style=\"padding:10px;color:#e0e0e0;\">Who initiates?</td>\n<td style=\"padding:10px;color:#e06c75;\">konui spawns Claude subprocess</td>\n<td style=\"padding:10px;color:#98c379;\">konsole polls for work</td>\n</tr>\n<tr style=\"border-bottom:1px solid #444;\">\n<td style=\"padding:10px;color:#e0e0e0;\">State ownership</td>\n<td style=\"padding:10px;color:#e06c75;\">Split across both</td>\n<td style=\"padding:10px;color:#98c379;\">konui owns all state</td>\n</tr>\n<tr style=\"border-bottom:1px solid #444;\">\n<td style=\"padding:10px;color:#e0e0e0;\">Restart impact</td>\n<td style=\"padding:10px;color:#e06c75;\">Breaks active sessions</td>\n<td style=\"padding:10px;color:#98c379;\">Agent reconnects</td>\n</tr>\n<tr>\n<td style=\"padding:10px;color:#e0e0e0;\">Multi-agent</td>\n<td style=\"padding:10px;color:#e06c75;\">Not possible</td>\n<td style=\"padding:10px;color:#98c379;\">Natural - multiple agents connect</td>\n</tr>\n</table>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h3 style=\"color:#e5c07b;margin:0 0 12px 0;font-family:sans-serif;\">Proper Agent Architecture</h3>\n\n<pre style=\"background:#1a1a1a;padding:12px;border-radius:4px;overflow-x:auto;font-size:0.85rem;color:#abb2bf;margin:0;\">\n<span style=\"color:#7f848e;\">┌─────────────────────────────────────────────────────────────┐</span>\n<span style=\"color:#7f848e;\">│</span> <span style=\"color:#e5c07b;\">KONUI (Hub)</span> <span style=\"color:#7f848e;\">│</span>\n<span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span>\n<span style=\"color:#7f848e;\">│</span> <span style=\"color:#61afef;\">Work Queue</span> <span style=\"color:#c678dd;\">State Store</span> <span style=\"color:#98c379;\">Event Bus</span> <span style=\"color:#7f848e;\">│</span>\n<span style=\"color:#7f848e;\">│</span> [prompts] [sessions] [SSE to browser] <span style=\"color:#7f848e;\">│</span>\n<span style=\"color:#7f848e;\">│</span> [kontasks] [contexts] [webhooks] <span style=\"color:#7f848e;\">│</span>\n<span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span>\n<span style=\"color:#7f848e;\">└──────────────────────────┬──────────────────────────────────┘</span>\n <span style=\"color:#7f848e;\">│</span>\n <span style=\"color:#98c379;\">agents connect TO konui</span> (not the other way)\n <span style=\"color:#7f848e;\">│</span>\n <span style=\"color:#7f848e;\">┌───────────────────┼───────────────────┐</span>\n <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span>\n <span style=\"color:#7f848e;\">▼</span> <span style=\"color:#7f848e;\">▼</span> <span style=\"color:#7f848e;\">▼</span>\n<span style=\"color:#7f848e;\">┌─────────────┐</span> <span style=\"color:#7f848e;\">┌─────────────┐</span> <span style=\"color:#7f848e;\">┌─────────────┐</span>\n<span style=\"color:#7f848e;\">│</span> <span style=\"color:#c678dd;\">Konsole</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#c678dd;\">Agent 2</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#c678dd;\">Agent N</span> <span style=\"color:#7f848e;\">│</span>\n<span style=\"color:#7f848e;\">│</span> (Claude) <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> (GPT?) <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> (local?) <span style=\"color:#7f848e;\">│</span>\n<span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span>\n<span style=\"color:#7f848e;\">│</span> <span style=\"color:#98c379;\">GET /work</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#98c379;\">GET /work</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#98c379;\">GET /work</span> <span style=\"color:#7f848e;\">│</span>\n<span style=\"color:#7f848e;\">│</span> <span style=\"color:#61afef;\">POST /event</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#61afef;\">POST /event</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#7f848e;\">│</span> <span style=\"color:#61afef;\">POST /event</span> <span style=\"color:#7f848e;\">│</span>\n<span style=\"color:#7f848e;\">└─────────────┘</span> <span style=\"color:#7f848e;\">└─────────────┘</span> <span style=\"color:#7f848e;\">└─────────────┘</span>\n</pre>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h3 style=\"color:#e5c07b;margin:0 0 12px 0;font-family:sans-serif;\">Agent Protocol (konsole → konui)</h3>\n\n<pre style=\"background:#1a1a1a;padding:12px;border-radius:4px;overflow-x:auto;font-size:0.85rem;color:#abb2bf;margin:0;\">\n<span style=\"color:#c678dd;\">1. REGISTER</span>\n <span style=\"color:#98c379;\">POST /api/agents/register</span>\n { agentId, capabilities: [\"claude\", \"tools\"], status: \"ready\" }\n\n<span style=\"color:#c678dd;\">2. POLL FOR WORK</span>\n <span style=\"color:#98c379;\">GET /api/agents/{agentId}/work</span> <span style=\"color:#7f848e;\">(long-poll or WebSocket)</span>\n → { workId, type: \"prompt\", sessionId, prompt, context }\n\n<span style=\"color:#c678dd;\">3. STREAM EVENTS</span>\n <span style=\"color:#61afef;\">POST /api/agents/{agentId}/events</span>\n { workId, type: \"text|tool_call|done\", content }\n\n<span style=\"color:#c678dd;\">4. HEARTBEAT</span>\n <span style=\"color:#98c379;\">POST /api/agents/{agentId}/heartbeat</span>\n { status: \"working\", currentWork: \"abc123\" }\n</pre>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h3 style=\"color:#e5c07b;margin:0 0 12px 0;font-family:sans-serif;\">Benefits</h3>\n\n<ul style=\"margin:0;padding-left:20px;line-height:1.8;color:#e0e0e0;\">\n<li><strong style=\"color:#98c379;\">Restart resilience</strong> — Agent reconnects, work queue persists</li>\n<li><strong style=\"color:#98c379;\">Multi-agent ready</strong> — Multiple agents can connect to same hub</li>\n<li><strong style=\"color:#98c379;\">Multi-machine</strong> — Agents can run anywhere with network access</li>\n<li><strong style=\"color:#98c379;\">State centralized</strong> — konui owns all state, no split brain</li>\n<li><strong style=\"color:#98c379;\">Scaling</strong> — Add agents to handle more work</li>\n</ul>\n</div>\n\n<div style=\"background:#1a3d1a;border:1px solid #2d5a2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h4 style=\"color:#98c379;margin:0 0 8px 0;font-family:sans-serif;\">💡 Migration Path</h4>\n<p style=\"color:#e0e0e0;margin:0;line-height:1.6;\"><strong>Phase 1:</strong> Add agent endpoints to konui (work queue, event ingestion)<br/>\n<strong>Phase 2:</strong> Refactor konsole to poll konui instead of being called<br/>\n<strong>Phase 3:</strong> Remove old konui→konsole code path<br/>\n<strong>Phase 4:</strong> Add multi-agent support</p>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;\">\n<h4 style=\"margin:0 0 8px 0;color:#fff;font-family:sans-serif;\">What's Next?</h4>\n<p style=\"color:#9ca3af;margin:0;font-family:sans-serif;\">Choose an action:</p>\n</div>\n</div>",
"requestedAt": "2026-01-05T03:40:00.000Z",
"requestId": "a522a02e-4f23-45ca-9bcb-9802f648396c",
"choices": [
{
"label": "Design agent protocol",
"value": "Design the detailed agent protocol API for konui - registration, work queue, event streaming",
"primary": true
},
{
"label": "Add to backlog",
"value": "Add Agent Architecture to VIBE.md backlog as a high priority item"
},
{
"label": "Start Phase 1",
"value": "Start Phase 1: Add agent endpoints to konui"
}
],
"turnTiming": {
"totalMs": 76249,
"ttfeMs": 5408,
"thinkingMs": 70472,
"toolExecutionMs": 367,
"toolCallCount": 1,
"thinkingPct": 92,
"toolsPct": 0,
"ttfePct": 7
}
},
"createdBy": "claude",
"createdAt": "2026-01-05T05:26:03.799Z",
"updatedAt": "2026-01-05T05:26:12.418Z",
"requestId": "a522a02e-4f23-45ca-9bcb-9802f648396c",
"scope": "vibetools",
"tags": [
"konsole",
"konui",
"architecture",
"agent"
],
"targetUser": "claude"
}