← Back to Kontasks
Thread Detection: Inline + Background Curator
Implemented both approaches for thread detection as requested
Output
Thread Detection: Both Approaches Implemented
1. Inline Thread Detection (Real-time)
Added to router.ts kontask creation handler:
- Runs automatically when every kontask is created
- Uses
gv-thread-detection.tsscoring algorithm - Signals: keywords (40%), same files (30%), bug tags (15%), temporal (15%)
- Auto-creates
continuesedge when confidence ≥ 70 - Logs borderline cases (40-69) for visibility
2. Background Curator (Periodic)
New file gv-curator.ts:
- Catches threads missed by inline detection
- Uses lower threshold of 60 (has more context to evaluate)
- Also curates orphan kontasks → links to flows via topic/domain overlap
- Can run periodically or on-demand
API Endpoints
POST /api/gv/curator/run # Run curation now GET /api/gv/curator/status # Get last result POST /api/gv/curator/start # Start periodic (30min default) POST /api/gv/curator/stop # Stop periodic
Files Changed
konui/src/ ├── gv-curator.ts # NEW - Background curation logic ├── router.ts # Inline thread detection + curator endpoints └── gv-edge-types.ts # Added 'curator' agent type
⚠️ Requires konui restart to take effect
Committed: f304dd14
Quick Actions
Original Request
No layout configured
Details
Type
General
Status
Completed
Scope
greatvibe
Tags
kontasksthreadscurator
Created
11 Jan 2026, 6:23 pm
Updated
11 Jan 2026, 6:24 pm
Timing
⏱️ 382.5s
0 tools
● TTFE 0%
● Thinking 100%
● Tools 0%
Created By
claude
📋 Claude's Context
Session
ses_40728090...
🔗 Git Commit
f304dd14
Raw Data
{
"id": "a060a19f-c14e-4b96-be05-9a9c3c87bdd9",
"type": "general",
"status": "completed",
"title": "Thread Detection: Inline + Background Curator",
"description": "Implemented both approaches for thread detection as requested",
"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;\">Thread Detection: Both Approaches Implemented</h2>\n\n<h3 style=\"color:#98c379;margin:20px 0 12px 0;\">1. Inline Thread Detection (Real-time)</h3>\n<p style=\"color:#abb2bf;\">Added to <code style=\"background:#2d2d2d;padding:2px 6px;border-radius:4px;\">router.ts</code> kontask creation handler:</p>\n<ul style=\"color:#e0e0e0;line-height:1.8;\">\n<li>Runs automatically when every kontask is created</li>\n<li>Uses <code style=\"background:#2d2d2d;padding:2px 6px;border-radius:4px;\">gv-thread-detection.ts</code> scoring algorithm</li>\n<li>Signals: <span style=\"color:#61afef;\">keywords (40%)</span>, <span style=\"color:#e5c07b;\">same files (30%)</span>, <span style=\"color:#c678dd;\">bug tags (15%)</span>, <span style=\"color:#56b6c2;\">temporal (15%)</span></li>\n<li>Auto-creates <code style=\"background:#2d2d2d;padding:2px 6px;border-radius:4px;\">continues</code> edge when confidence ≥ <strong>70</strong></li>\n<li>Logs borderline cases (40-69) for visibility</li>\n</ul>\n\n<h3 style=\"color:#98c379;margin:20px 0 12px 0;\">2. Background Curator (Periodic)</h3>\n<p style=\"color:#abb2bf;\">New file <code style=\"background:#2d2d2d;padding:2px 6px;border-radius:4px;\">gv-curator.ts</code>:</p>\n<ul style=\"color:#e0e0e0;line-height:1.8;\">\n<li>Catches threads missed by inline detection</li>\n<li>Uses <strong>lower threshold of 60</strong> (has more context to evaluate)</li>\n<li>Also curates orphan kontasks → links to flows via topic/domain overlap</li>\n<li>Can run periodically or on-demand</li>\n</ul>\n\n<h3 style=\"color:#98c379;margin:20px 0 12px 0;\">API Endpoints</h3>\n<pre style=\"background:#2d2d2d;padding:16px;border-radius:6px;overflow-x:auto;line-height:1.8;\">\n<span style=\"color:#c678dd;\">POST</span> <span style=\"color:#61afef;\">/api/gv/curator/run</span> <span style=\"color:#7f848e;\"># Run curation now</span>\n<span style=\"color:#c678dd;\">GET</span> <span style=\"color:#61afef;\">/api/gv/curator/status</span> <span style=\"color:#7f848e;\"># Get last result</span>\n<span style=\"color:#c678dd;\">POST</span> <span style=\"color:#61afef;\">/api/gv/curator/start</span> <span style=\"color:#7f848e;\"># Start periodic (30min default)</span>\n<span style=\"color:#c678dd;\">POST</span> <span style=\"color:#61afef;\">/api/gv/curator/stop</span> <span style=\"color:#7f848e;\"># Stop periodic</span>\n</pre>\n\n<h3 style=\"color:#98c379;margin:20px 0 12px 0;\">Files Changed</h3>\n<pre style=\"background:#2d2d2d;padding:16px;border-radius:6px;line-height:1.8;\">\n<span style=\"color:#56b6c2;\">konui/src/</span>\n├── <span style=\"color:#98c379;\">gv-curator.ts</span> <span style=\"color:#7f848e;\"># NEW - Background curation logic</span>\n├── <span style=\"color:#e5c07b;\">router.ts</span> <span style=\"color:#7f848e;\"># Inline thread detection + curator endpoints</span>\n└── <span style=\"color:#e5c07b;\">gv-edge-types.ts</span> <span style=\"color:#7f848e;\"># Added 'curator' agent type</span>\n</pre>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-top:20px;\">\n<p style=\"color:#f97316;margin:0 0 8px 0;\">⚠️ Requires konui restart to take effect</p>\n<p style=\"color:#7f848e;margin:0;\">Committed: <code>f304dd14</code></p>\n</div>\n</div>",
"choices": [
{
"label": "Restart konui",
"value": "Restart konui to apply the changes",
"primary": true
},
{
"label": "Run curator now",
"value": "After restarting, run the curator: curl -X POST http://localhost:8666/api/gv/curator/run"
},
{
"label": "Start periodic",
"value": "After restarting, start periodic curation: curl -X POST http://localhost:8666/api/gv/curator/start"
}
],
"commitSha": "f304dd14",
"requestId": "f4f0a7ad-a2d8-4b64-95aa-741621227810",
"turnTiming": {
"totalMs": 382455,
"ttfeMs": 50,
"thinkingMs": 382405,
"toolExecutionMs": 0,
"toolCallCount": 0,
"thinkingPct": 100,
"toolsPct": 0,
"ttfePct": 0
}
},
"createdBy": "claude",
"createdAt": "2026-01-11T08:23:42.857Z",
"updatedAt": "2026-01-11T08:24:16.673Z",
"requestId": "f4f0a7ad-a2d8-4b64-95aa-741621227810",
"scope": "greatvibe",
"tags": [
"kontasks",
"threads",
"curator"
],
"sessionId": "ses_40728090-b86"
}