← Back to Kontasks
Plan Threading: Linking Kontasks to Active Plans
Design for tying kontask responses back to specific Claude plans/threads
Output
Plan Threading: The Synchronization Problem
Keeping human and Claude aligned when working on multiple threads
The Scenario You Described
- Claude creates kontask with plan: "Steps 1-6, start with tags?"
- You ask follow-up questions (new kontasks created)
- Claude is now thinking about the follow-ups
- You scroll back and click "Yes, start with tags" from step 1
- Problem: Claude's context has moved on - your click is out of sync
Proposed Solution: Plan Objects
New Concept: Plans
A Plan is a named thread of work that kontasks can belong to:
interface Plan {
id: string;
name: string; // "Kontask Tags Implementation"
status: "active" | "paused" | "completed" | "abandoned";
steps: PlanStep[]; // Ordered list of steps
currentStep: number; // Which step Claude is on
scope: "product" | "vibetools";
createdAt: string;
updatedAt: string;
}
interface PlanStep {
id: string;
description: string;
status: "pending" | "in_progress" | "completed" | "skipped";
kontaskIds: string[]; // Kontasks related to this step
}
Kontasks Link to Plans
interface Kontask {
// ... existing fields
planId?: string; // Which plan this belongs to
planStepId?: string; // Which step specifically
}
How It Would Work
Scenario: Implementing Tags
- Claude creates Plan: "Kontask Tags Implementation" with 6 steps
- Claude creates Kontask: "Ready to start?" linked to Plan step 1
- You ask follow-up → new kontask (unlinked or linked to "research")
- You click "Yes" on original kontask
- System knows: This click is for Plan X, Step 1
- Claude receives: "User approved Plan 'Kontask Tags' Step 1: Start with tags"
UI Implications
Kontask Card Shows Plan Context
VIBETOOLS
→
Plan: Kontask Tags
→
Step 1/6
Ready to start with tags?
Plan Status Widget
Active Plans
● Kontask Tags (Step 1/6)
○ Two Worlds Analysis (paused)
Stale Kontask Handling
When you click a choice on an old kontask:
| Plan still active, same step: | Execute normally |
| Plan active, different step: | Warn: "Claude is now on Step 3. Continue anyway?" |
| Plan completed: | Warn: "This plan was completed. Reopen?" |
| Plan abandoned: | Warn: "This plan was abandoned. Start new?" |
Implementation Complexity
| Component | Effort | Notes |
|---|---|---|
| Plan data model | ~50 lines | New plan-types.ts, plan-db.ts |
| MCP tools for plans | ~60 lines | create_plan, update_plan_step |
| Link kontasks to plans | ~20 lines | Add planId, planStepId fields |
| Plan status widget | ~80 lines | Dashboard sidebar or header |
| Stale kontask warnings | ~40 lines | Check plan state before executing |
| CLAUDE.md guidance | Config | Teach Claude to use plans |
Total: ~250 lines + configuration
Alternative: Simpler Approach
Just Use Timestamps + Warnings
Instead of full Plan objects, simpler approach:
- Kontask stores
createdAttimestamp - When clicking old kontask, check if newer kontasks exist
- If yes: "This kontask is from 5 messages ago. Respond anyway?"
- Relies on Claude's context to understand what you're responding to
Pros: Much simpler. Cons: No explicit plan tracking.
Recommendation
Phased approach:
- Now: Add tags + scope + choices (foundational)
- Next: Add simple staleness warnings for old kontask clicks
- Later: Full Plan objects if the simple approach isn't enough
This lets us validate the interaction pattern before building complex plan infrastructure.
Ready to start? I recommend implementing in this order:
- Tags + scope (keeps kontasks organized)
- Inline choices (makes kontasks interactive)
- Staleness check (prevents out-of-sync responses)
- Full Plans (if needed after using the above)
Quick Actions
Original Request
No layout configured
Details
Type
General
Status
Completed
Created
2 Jan 2026, 6:49 am
Updated
2 Jan 2026, 3:10 pm
Created By
claude
Raw Data
{
"id": "21fce0df-436b-4152-8070-c3bff7ec005c",
"type": "general",
"status": "completed",
"title": "Plan Threading: Linking Kontasks to Active Plans",
"description": "Design for tying kontask responses back to specific Claude plans/threads",
"context": {
"output": "<div style=\"background:#1e1e1e;color:#e0e0e0;padding:20px;border-radius:8px;font-family:system-ui,-apple-system,sans-serif;\">\n<h2 style=\"color:#fff;margin:0 0 16px 0;\">Plan Threading: The Synchronization Problem</h2>\n<p style=\"color:#7f848e;margin:0 0 20px 0;\">Keeping human and Claude aligned when working on multiple threads</p>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:20px;border-left:4px solid #f97316;\">\n<h3 style=\"color:#f97316;margin:0 0 8px 0;\">The Scenario You Described</h3>\n<ol style=\"margin:0;padding-left:20px;color:#e0e0e0;line-height:1.8;\">\n<li>Claude creates kontask with plan: \"Steps 1-6, start with tags?\"</li>\n<li>You ask follow-up questions (new kontasks created)</li>\n<li>Claude is now thinking about the follow-ups</li>\n<li>You scroll back and click \"Yes, start with tags\" from step 1</li>\n<li><span style=\"color:#f97316;\"><strong>Problem:</strong></span> Claude's context has moved on - your click is out of sync</li>\n</ol>\n</div>\n\n<h3 style=\"color:#fff;margin:20px 0 12px 0;\">Proposed Solution: Plan Objects</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h4 style=\"color:#61afef;margin:0 0 12px 0;\">New Concept: Plans</h4>\n<p style=\"margin:0 0 12px 0;color:#e0e0e0;\">A <strong>Plan</strong> is a named thread of work that kontasks can belong to:</p>\n<pre style=\"background:#1a1b2e;padding:12px;border-radius:4px;overflow-x:auto;color:#98c379;font-size:0.85rem;\">interface Plan {\n id: string;\n name: string; <span style=\"color:#7f848e;\">// \"Kontask Tags Implementation\"</span>\n status: \"active\" | \"paused\" | \"completed\" | \"abandoned\";\n steps: PlanStep[]; <span style=\"color:#7f848e;\">// Ordered list of steps</span>\n currentStep: number; <span style=\"color:#7f848e;\">// Which step Claude is on</span>\n scope: \"product\" | \"vibetools\";\n createdAt: string;\n updatedAt: string;\n}\n\ninterface PlanStep {\n id: string;\n description: string;\n status: \"pending\" | \"in_progress\" | \"completed\" | \"skipped\";\n kontaskIds: string[]; <span style=\"color:#7f848e;\">// Kontasks related to this step</span>\n}</pre>\n</div>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<h4 style=\"color:#61afef;margin:0 0 12px 0;\">Kontasks Link to Plans</h4>\n<pre style=\"background:#1a1b2e;padding:12px;border-radius:4px;overflow-x:auto;color:#98c379;font-size:0.85rem;\">interface Kontask {\n // ... existing fields\n <span style=\"color:#c678dd;\">planId</span>?: string; <span style=\"color:#7f848e;\">// Which plan this belongs to</span>\n <span style=\"color:#c678dd;\">planStepId</span>?: string; <span style=\"color:#7f848e;\">// Which step specifically</span>\n}</pre>\n</div>\n\n<h3 style=\"color:#fff;margin:20px 0 12px 0;\">How It Would Work</h3>\n\n<div style=\"background:#1a3a1a;padding:16px;border-radius:6px;margin-bottom:16px;border:1px solid #22c55e;\">\n<h4 style=\"color:#22c55e;margin:0 0 8px 0;\">Scenario: Implementing Tags</h4>\n<ol style=\"margin:0;padding-left:20px;color:#e0e0e0;line-height:1.8;\">\n<li>Claude creates <strong>Plan</strong>: \"Kontask Tags Implementation\" with 6 steps</li>\n<li>Claude creates <strong>Kontask</strong>: \"Ready to start?\" linked to Plan step 1</li>\n<li>You ask follow-up → new kontask (unlinked or linked to \"research\")</li>\n<li>You click \"Yes\" on original kontask</li>\n<li><span style=\"color:#98c379;\"><strong>System knows:</strong></span> This click is for Plan X, Step 1</li>\n<li>Claude receives: \"User approved Plan 'Kontask Tags' Step 1: Start with tags\"</li>\n</ol>\n</div>\n\n<h3 style=\"color:#fff;margin:20px 0 12px 0;\">UI Implications</h3>\n\n<div style=\"display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px;\">\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;\">\n<h4 style=\"color:#c99542;margin:0 0 8px 0;\">Kontask Card Shows Plan Context</h4>\n<div style=\"background:#1a1b2e;padding:12px;border-radius:4px;font-size:0.85rem;\">\n<div style=\"display:flex;align-items:center;gap:8px;margin-bottom:8px;\">\n<span style=\"background:#c678dd;color:#fff;padding:2px 6px;border-radius:3px;font-size:0.75rem;\">VIBETOOLS</span>\n<span style=\"color:#7f848e;\">→</span>\n<span style=\"color:#61afef;\">Plan: Kontask Tags</span>\n<span style=\"color:#7f848e;\">→</span>\n<span style=\"color:#98c379;\">Step 1/6</span>\n</div>\n<p style=\"margin:0;color:#e0e0e0;\">Ready to start with tags?</p>\n</div>\n</div>\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;\">\n<h4 style=\"color:#c99542;margin:0 0 8px 0;\">Plan Status Widget</h4>\n<div style=\"background:#1a1b2e;padding:12px;border-radius:4px;font-size:0.85rem;\">\n<p style=\"margin:0 0 8px 0;color:#61afef;font-weight:bold;\">Active Plans</p>\n<div style=\"margin-bottom:6px;\">\n<span style=\"color:#98c379;\">●</span> Kontask Tags <span style=\"color:#7f848e;\">(Step 1/6)</span>\n</div>\n<div>\n<span style=\"color:#e5c07b;\">○</span> Two Worlds Analysis <span style=\"color:#7f848e;\">(paused)</span>\n</div>\n</div>\n</div>\n</div>\n\n<h3 style=\"color:#fff;margin:20px 0 12px 0;\">Stale Kontask Handling</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<p style=\"margin:0 0 12px 0;color:#e0e0e0;\">When you click a choice on an old kontask:</p>\n<table style=\"width:100%;border-collapse:collapse;font-size:0.9rem;\">\n<tr><td style=\"padding:8px 0;color:#7f848e;width:40%;\">Plan still active, same step:</td><td style=\"padding:8px 0;color:#98c379;\">Execute normally</td></tr>\n<tr><td style=\"padding:8px 0;color:#7f848e;\">Plan active, different step:</td><td style=\"padding:8px 0;color:#e5c07b;\">Warn: \"Claude is now on Step 3. Continue anyway?\"</td></tr>\n<tr><td style=\"padding:8px 0;color:#7f848e;\">Plan completed:</td><td style=\"padding:8px 0;color:#f97316;\">Warn: \"This plan was completed. Reopen?\"</td></tr>\n<tr><td style=\"padding:8px 0;color:#7f848e;\">Plan abandoned:</td><td style=\"padding:8px 0;color:#f97316;\">Warn: \"This plan was abandoned. Start new?\"</td></tr>\n</table>\n</div>\n\n<h3 style=\"color:#fff;margin:20px 0 12px 0;\">Implementation Complexity</h3>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin-bottom:16px;\">\n<table style=\"width:100%;border-collapse:collapse;font-size:0.9rem;\">\n<tr style=\"background:#363636;\"><th style=\"text-align:left;padding:10px;color:#fff;\">Component</th><th style=\"text-align:left;padding:10px;color:#fff;\">Effort</th><th style=\"text-align:left;padding:10px;color:#fff;\">Notes</th></tr>\n<tr><td style=\"padding:10px;color:#e0e0e0;\">Plan data model</td><td style=\"padding:10px;color:#98c379;\">~50 lines</td><td style=\"padding:10px;color:#7f848e;\">New plan-types.ts, plan-db.ts</td></tr>\n<tr style=\"background:#333;\"><td style=\"padding:10px;color:#e0e0e0;\">MCP tools for plans</td><td style=\"padding:10px;color:#98c379;\">~60 lines</td><td style=\"padding:10px;color:#7f848e;\">create_plan, update_plan_step</td></tr>\n<tr><td style=\"padding:10px;color:#e0e0e0;\">Link kontasks to plans</td><td style=\"padding:10px;color:#98c379;\">~20 lines</td><td style=\"padding:10px;color:#7f848e;\">Add planId, planStepId fields</td></tr>\n<tr style=\"background:#333;\"><td style=\"padding:10px;color:#e0e0e0;\">Plan status widget</td><td style=\"padding:10px;color:#e5c07b;\">~80 lines</td><td style=\"padding:10px;color:#7f848e;\">Dashboard sidebar or header</td></tr>\n<tr><td style=\"padding:10px;color:#e0e0e0;\">Stale kontask warnings</td><td style=\"padding:10px;color:#e5c07b;\">~40 lines</td><td style=\"padding:10px;color:#7f848e;\">Check plan state before executing</td></tr>\n<tr style=\"background:#333;\"><td style=\"padding:10px;color:#e0e0e0;\">CLAUDE.md guidance</td><td style=\"padding:10px;color:#98c379;\">Config</td><td style=\"padding:10px;color:#7f848e;\">Teach Claude to use plans</td></tr>\n</table>\n<p style=\"margin:12px 0 0 0;color:#7f848e;\"><strong>Total:</strong> ~250 lines + configuration</p>\n</div>\n\n<h3 style=\"color:#fff;margin:20px 0 12px 0;\">Alternative: Simpler Approach</h3>\n\n<div style=\"background:#2d1a3a;padding:16px;border-radius:6px;margin-bottom:16px;border:1px solid #c678dd;\">\n<h4 style=\"color:#c678dd;margin:0 0 8px 0;\">Just Use Timestamps + Warnings</h4>\n<p style=\"margin:0 0 12px 0;color:#e0e0e0;\">Instead of full Plan objects, simpler approach:</p>\n<ul style=\"margin:0;padding-left:20px;color:#7f848e;line-height:1.8;\">\n<li>Kontask stores <code>createdAt</code> timestamp</li>\n<li>When clicking old kontask, check if newer kontasks exist</li>\n<li>If yes: \"This kontask is from 5 messages ago. Respond anyway?\"</li>\n<li>Relies on Claude's context to understand what you're responding to</li>\n</ul>\n<p style=\"margin:12px 0 0 0;color:#c678dd;\"><strong>Pros:</strong> Much simpler. <strong>Cons:</strong> No explicit plan tracking.</p>\n</div>\n\n<h3 style=\"color:#fff;margin:20px 0 12px 0;\">Recommendation</h3>\n\n<div style=\"background:#1a2a3a;padding:16px;border-radius:6px;border:1px solid #61afef;\">\n<p style=\"margin:0 0 12px 0;color:#61afef;\"><strong>Phased approach:</strong></p>\n<ol style=\"margin:0;padding-left:20px;color:#e0e0e0;line-height:1.8;\">\n<li><strong style=\"color:#98c379;\">Now:</strong> Add tags + scope + choices (foundational)</li>\n<li><strong style=\"color:#e5c07b;\">Next:</strong> Add simple staleness warnings for old kontask clicks</li>\n<li><strong style=\"color:#c678dd;\">Later:</strong> Full Plan objects if the simple approach isn't enough</li>\n</ol>\n<p style=\"margin:12px 0 0 0;color:#7f848e;\">This lets us validate the interaction pattern before building complex plan infrastructure.</p>\n</div>\n\n<div style=\"background:#1a3a1a;padding:12px;border-radius:6px;margin-top:20px;border:1px solid #22c55e;\">\n<p style=\"margin:0;color:#22c55e;\"><strong>Ready to start?</strong> I recommend implementing in this order:</p>\n<ol style=\"margin:8px 0 0 0;padding-left:20px;color:#e0e0e0;\">\n<li>Tags + scope (keeps kontasks organized)</li>\n<li>Inline choices (makes kontasks interactive)</li>\n<li>Staleness check (prevents out-of-sync responses)</li>\n<li>Full Plans (if needed after using the above)</li>\n</ol>\n</div>\n</div>",
"requestedAt": "2026-01-02T20:35:00.000Z",
"requestId": "0605798c-5042-4661-9eb1-afa448dc44d6"
},
"createdBy": "claude",
"createdAt": "2026-01-01T20:49:23.850Z",
"updatedAt": "2026-01-02T05:10:54.075Z",
"requestId": "0605798c-5042-4661-9eb1-afa448dc44d6"
}