← Back to Kontasks
Quick Turn Phase 2: Architecture Decision - Via Konsole
Design proposal for Quick Turn routing through konsole with multi-session support
Output
🏗️ Quick Turn Phase 2: Architecture Decision
Original Design (Rejected)
konui → direct Claude API (bypassing konsole)
❌ Won't scale when konui moves to dedicated server
New Design: Konsole as Local Agent
┌─────────────────────────────────────────────────────────────┐
│ konui (UI Server) │
│ (can move to dedicated server) │
└──────────────────────┬──────────────────────────────────────┘
│ HTTP API
▼
┌─────────────────────────────────────────────────────────────┐
│ konsole (Agent Server) │
│ (runs on compute server) │
├─────────────────────────────────────────────────────────────┤
│ Session Manager │
│ ┌─────────────────┬─────────────────┬─────────────────┐ │
│ │ Session A │ Session B │ Session C │ │
│ │ (main Claude) │ (quick turn) │ (background) │ │
│ │ 🔵 Full tools │ ⚡ Chat-only │ 🔧 Worker │ │
│ └─────────────────┴─────────────────┴─────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Provider Adapters │
│ ┌─────────┬─────────┬─────────┬─────────┐ │
│ │ Claude │ OpenAI │ Gemini │ OpenWeb │ │
│ │ (tools) │ (chat) │ (chat) │ (chat) │ │
│ └─────────┴─────────┴─────────┴─────────┘ │
└─────────────────────────────────────────────────────────────┘Key Architectural Changes
| Component | Change |
|---|---|
| konsole | Multi-session manager, provider abstraction layer |
| Session types | full (Claude+tools), chat (any model, no tools), worker (background) |
| Quick Turn | Separate session ID, type: chat, routes to model API |
| konui | Pure UI, all AI via konsole HTTP API |
Session Types
| Type | Provider | Tools | Context | Use Case |
|---|---|---|---|---|
full | Claude Code CLI | ✅ All | Persistent | Main work session |
chat | Any (API) | ❌ None | Stateless | Quick Turn, Q&A |
worker | Claude Code CLI | ✅ All | Isolated | Background tasks |
API Design
POST /api/session { "type": "chat", // full | chat | worker "provider": "claude", // claude | openai | gemini | openwebui "model": "claude-3-5-sonnet" } → { "sessionId": "qt-abc123" } POST /api/session/{id}/prompt { "prompt": "What time in Sydney?" } → SSE stream DELETE /api/session/{id} → Session closed
Implementation Plan
- Phase 2a: Multi-session support in konsole (session manager, parallel sessions)
- Phase 2b: Chat session type (stateless, no tools)
- Phase 2c: Provider abstraction layer (Claude → adapter pattern)
- Phase 2d: konui Quick Turn routes through konsole API
- Phase 3: Add OpenAI/Gemini providers
🤔 Design Questions for You
- Session lifecycle: Should Quick Turn sessions be ephemeral (create/destroy per request) or pooled (reuse)?
- Provider config: Where should API keys live? konsole .env or new config service?
- Chat session context: Truly stateless (no history), or short-term memory (last N turns)?
Quick Actions
Original Request
No layout configured
Details
Type
General
Status
Completed
Scope
vibetools
Tags
quick-turnkonsolearchitecturemulti-model
Created
5 Jan 2026, 11:23 am
Updated
5 Jan 2026, 11:23 am
Timing
⏱️ 60.8s
1 tools
● TTFE 9%
● Thinking 91%
● Tools 1%
Created By
claude
Raw Data
{
"id": "34a43965-9514-43b6-bb92-5ba807cf52d0",
"type": "general",
"status": "completed",
"title": "Quick Turn Phase 2: Architecture Decision - Via Konsole",
"description": "Design proposal for Quick Turn routing through konsole with multi-session support",
"context": {
"output": "<div style=\"background:#1e1e1e;color:#e0e0e0;padding:20px;border-radius:8px;font-family:'Consolas','Monaco',monospace;\"><h2 style=\"font-family:sans-serif;color:#fff;margin:0 0 16px 0;\">🏗️ Quick Turn Phase 2: Architecture Decision</h2><div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\"><h3 style=\"color:#f44336;margin:0 0 12px 0;\">Original Design (Rejected)</h3><pre style=\"margin:0;color:#888;font-size:0.85em;\">konui → direct Claude API (bypassing konsole)</pre><p style=\"color:#ff6b6b;margin:8px 0 0 0;\">❌ Won't scale when konui moves to dedicated server</p></div><div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\"><h3 style=\"color:#4caf50;margin:0 0 12px 0;\">New Design: Konsole as Local Agent</h3><pre style=\"margin:0;color:#e0e0e0;font-size:0.85em;line-height:1.6;\">┌─────────────────────────────────────────────────────────────┐\n│ konui (UI Server) │\n│ (can move to dedicated server) │\n└──────────────────────┬──────────────────────────────────────┘\n │ HTTP API\n ▼\n┌─────────────────────────────────────────────────────────────┐\n│ konsole (Agent Server) │\n│ (runs on compute server) │\n├─────────────────────────────────────────────────────────────┤\n│ Session Manager │\n│ ┌─────────────────┬─────────────────┬─────────────────┐ │\n│ │ Session A │ Session B │ Session C │ │\n│ │ (main Claude) │ (quick turn) │ (background) │ │\n│ │ 🔵 Full tools │ ⚡ Chat-only │ 🔧 Worker │ │\n│ └─────────────────┴─────────────────┴─────────────────┘ │\n├─────────────────────────────────────────────────────────────┤\n│ Provider Adapters │\n│ ┌─────────┬─────────┬─────────┬─────────┐ │\n│ │ Claude │ OpenAI │ Gemini │ OpenWeb │ │\n│ │ (tools) │ (chat) │ (chat) │ (chat) │ │\n│ └─────────┴─────────┴─────────┴─────────┘ │\n└─────────────────────────────────────────────────────────────┘</pre></div><div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\"><h3 style=\"color:#daa520;margin:0 0 12px 0;\">Key Architectural Changes</h3><table style=\"width:100%;border-collapse:collapse;font-size:0.9em;\"><tr style=\"background:#1e1e1e;\"><th style=\"padding:10px;text-align:left;border-bottom:1px solid #444;\">Component</th><th style=\"padding:10px;text-align:left;border-bottom:1px solid #444;\">Change</th></tr><tr><td style=\"padding:10px;border-bottom:1px solid #333;color:#61afef;\">konsole</td><td style=\"padding:10px;border-bottom:1px solid #333;\">Multi-session manager, provider abstraction layer</td></tr><tr><td style=\"padding:10px;border-bottom:1px solid #333;color:#61afef;\">Session types</td><td style=\"padding:10px;border-bottom:1px solid #333;\"><code>full</code> (Claude+tools), <code>chat</code> (any model, no tools), <code>worker</code> (background)</td></tr><tr><td style=\"padding:10px;border-bottom:1px solid #333;color:#61afef;\">Quick Turn</td><td style=\"padding:10px;border-bottom:1px solid #333;\">Separate session ID, <code>type: chat</code>, routes to model API</td></tr><tr><td style=\"padding:10px;border-bottom:1px solid #333;color:#61afef;\">konui</td><td style=\"padding:10px;border-bottom:1px solid #333;\">Pure UI, all AI via konsole HTTP API</td></tr></table></div><div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\"><h3 style=\"color:#9c27b0;margin:0 0 12px 0;\">Session Types</h3><table style=\"width:100%;border-collapse:collapse;font-size:0.9em;\"><tr style=\"background:#1e1e1e;\"><th style=\"padding:8px;text-align:left;border-bottom:1px solid #444;\">Type</th><th style=\"padding:8px;text-align:left;border-bottom:1px solid #444;\">Provider</th><th style=\"padding:8px;text-align:left;border-bottom:1px solid #444;\">Tools</th><th style=\"padding:8px;text-align:left;border-bottom:1px solid #444;\">Context</th><th style=\"padding:8px;text-align:left;border-bottom:1px solid #444;\">Use Case</th></tr><tr><td style=\"padding:8px;border-bottom:1px solid #333;\"><code>full</code></td><td style=\"padding:8px;border-bottom:1px solid #333;\">Claude Code CLI</td><td style=\"padding:8px;border-bottom:1px solid #333;\">✅ All</td><td style=\"padding:8px;border-bottom:1px solid #333;\">Persistent</td><td style=\"padding:8px;border-bottom:1px solid #333;\">Main work session</td></tr><tr><td style=\"padding:8px;border-bottom:1px solid #333;\"><code>chat</code></td><td style=\"padding:8px;border-bottom:1px solid #333;\">Any (API)</td><td style=\"padding:8px;border-bottom:1px solid #333;\">❌ None</td><td style=\"padding:8px;border-bottom:1px solid #333;\">Stateless</td><td style=\"padding:8px;border-bottom:1px solid #333;\">Quick Turn, Q&A</td></tr><tr><td style=\"padding:8px;border-bottom:1px solid #333;\"><code>worker</code></td><td style=\"padding:8px;border-bottom:1px solid #333;\">Claude Code CLI</td><td style=\"padding:8px;border-bottom:1px solid #333;\">✅ All</td><td style=\"padding:8px;border-bottom:1px solid #333;\">Isolated</td><td style=\"padding:8px;border-bottom:1px solid #333;\">Background tasks</td></tr></table></div><div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\"><h3 style=\"color:#2196f3;margin:0 0 12px 0;\">API Design</h3><pre style=\"margin:0;color:#e0e0e0;font-size:0.85em;line-height:1.6;\"><span style=\"color:#c678dd;\">POST</span> /api/session\n{\n \"type\": \"chat\", <span style=\"color:#7f848e;\">// full | chat | worker</span>\n \"provider\": \"claude\", <span style=\"color:#7f848e;\">// claude | openai | gemini | openwebui</span>\n \"model\": \"claude-3-5-sonnet\"\n}\n<span style=\"color:#7f848e;\">→ { \"sessionId\": \"qt-abc123\" }</span>\n\n<span style=\"color:#c678dd;\">POST</span> /api/session/{id}/prompt\n{\n \"prompt\": \"What time in Sydney?\"\n}\n<span style=\"color:#7f848e;\">→ SSE stream</span>\n\n<span style=\"color:#c678dd;\">DELETE</span> /api/session/{id}\n<span style=\"color:#7f848e;\">→ Session closed</span></pre></div><div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\"><h3 style=\"color:#ff9800;margin:0 0 12px 0;\">Implementation Plan</h3><ol style=\"margin:0;padding-left:20px;line-height:1.8;\"><li><strong>Phase 2a:</strong> Multi-session support in konsole (session manager, parallel sessions)</li><li><strong>Phase 2b:</strong> Chat session type (stateless, no tools)</li><li><strong>Phase 2c:</strong> Provider abstraction layer (Claude → adapter pattern)</li><li><strong>Phase 2d:</strong> konui Quick Turn routes through konsole API</li><li><strong>Phase 3:</strong> Add OpenAI/Gemini providers</li></ol></div><div style=\"background:rgba(156,39,176,0.15);border:1px solid rgba(156,39,176,0.3);padding:12px;border-radius:6px;\"><h4 style=\"margin:0 0 8px 0;color:#ce93d8;\">🤔 Design Questions for You</h4><ol style=\"margin:0;padding-left:20px;color:#e1bee7;line-height:1.8;\"><li><strong>Session lifecycle:</strong> Should Quick Turn sessions be ephemeral (create/destroy per request) or pooled (reuse)?</li><li><strong>Provider config:</strong> Where should API keys live? konsole .env or new config service?</li><li><strong>Chat session context:</strong> Truly stateless (no history), or short-term memory (last N turns)?</li></ol></div></div>",
"requestedAt": "2026-01-05T12:15:00Z",
"requestId": "83bb388a-6479-4c50-85cf-972366d7c82b",
"choices": [
{
"label": "Proceed with design",
"value": "Proceed with the multi-session konsole architecture. Quick Turn sessions should be ephemeral, API keys in konsole .env, chat sessions are stateless.",
"primary": true
},
{
"label": "Ephemeral + pooled",
"value": "Use pooled sessions for Quick Turn (warm pool of 2-3 ready sessions for low latency)"
},
{
"label": "Discuss further",
"value": "I have questions about the architecture before we proceed"
}
],
"turnTiming": {
"totalMs": 60786,
"ttfeMs": 5255,
"thinkingMs": 55167,
"toolExecutionMs": 362,
"toolCallCount": 1,
"thinkingPct": 91,
"toolsPct": 1,
"ttfePct": 9
}
},
"createdBy": "claude",
"createdAt": "2026-01-05T01:23:14.693Z",
"updatedAt": "2026-01-05T01:23:23.679Z",
"requestId": "83bb388a-6479-4c50-85cf-972366d7c82b",
"scope": "vibetools",
"tags": [
"quick-turn",
"konsole",
"architecture",
"multi-model"
],
"targetUser": "claude"
}