@kanon-pm/setup 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/agents/kanon.md +39 -0
- package/assets/skills/kanon-create-issue/SKILL.md +63 -267
- package/assets/skills/kanon-init/SKILL.md +57 -175
- package/assets/skills/kanon-mcp/SKILL.md +34 -114
- package/assets/skills/kanon-orchestrator-hooks/SKILL.md +26 -11
- package/assets/skills/kanon-roadmap/SKILL.md +84 -332
- package/dist/agents.d.ts +12 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +61 -0
- package/dist/agents.js.map +1 -0
- package/dist/auth.d.ts +22 -8
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +162 -18
- package/dist/auth.js.map +1 -1
- package/dist/index.d.ts +20 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +96 -42
- package/dist/index.js.map +1 -1
- package/dist/mcp-config.d.ts +15 -0
- package/dist/mcp-config.d.ts.map +1 -1
- package/dist/mcp-config.js +66 -0
- package/dist/mcp-config.js.map +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +8 -0
- package/dist/registry.js.map +1 -1
- package/dist/types.d.ts +24 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -3,13 +3,27 @@ name: kanon-orchestrator-hooks
|
|
|
3
3
|
description: Kanon-specific hooks for the SDD orchestrator — ROADMAP injection into sub-agent prompts and post-phase deferred_items processing
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
tags: [kanon, sdd, orchestrator, roadmap]
|
|
6
|
+
allowed-tools:
|
|
7
|
+
- kanon_*
|
|
8
|
+
- mem_save
|
|
9
|
+
- mem_search
|
|
10
|
+
- mem_get_observation
|
|
6
11
|
---
|
|
7
12
|
|
|
8
13
|
# Kanon Orchestrator Hooks
|
|
9
14
|
|
|
10
15
|
This skill is loaded by the orchestrator when launching SDD phases or processing phase results in the kanon project. It provides kanon-specific behavior that extends the generic SDD workflow.
|
|
11
16
|
|
|
12
|
-
## Hook 1:
|
|
17
|
+
## Hook 1: SessionStart — Project Detection
|
|
18
|
+
|
|
19
|
+
When a session starts in a kanon-managed project:
|
|
20
|
+
|
|
21
|
+
1. Infer project from `cwd` basename, resolve via `kanon_list_projects`.
|
|
22
|
+
2. Call `kanon_list_issues(projectKey, state: "apply")` to find active work.
|
|
23
|
+
3. If active issues exist, show the user: "Active issues: KAN-42 [Auth] Fix OAuth redirect (apply)".
|
|
24
|
+
4. Cache the `projectKey` for the session.
|
|
25
|
+
|
|
26
|
+
## Hook 2: ROADMAP Injection for Sub-Agent Launches
|
|
13
27
|
|
|
14
28
|
When launching phases `sdd-explore`, `sdd-propose`, `sdd-design`, or `sdd-spec`, include this block in the sub-agent prompt:
|
|
15
29
|
|
|
@@ -19,25 +33,26 @@ ROADMAP: When you identify out-of-scope or deferred work, list it in your return
|
|
|
19
33
|
The orchestrator handles roadmap capture — do NOT create roadmap items yourself.
|
|
20
34
|
```
|
|
21
35
|
|
|
22
|
-
## Hook
|
|
36
|
+
## Hook 3: Post-Phase Roadmap Processing
|
|
23
37
|
|
|
24
38
|
After receiving results from `sdd-explore`, `sdd-propose`, `sdd-design`, or `sdd-spec`:
|
|
25
39
|
|
|
26
40
|
1. Check if `deferred_items` is present and non-empty in the return envelope.
|
|
27
41
|
2. If yes, present to user: "This phase identified {N} items as out of scope. Add any to the roadmap?"
|
|
28
|
-
3. For each confirmed item:
|
|
29
|
-
4. If `kanon-roadmap` skill is not loaded, load it from `.claude/skills/kanon-roadmap/SKILL.md`.
|
|
42
|
+
3. For each confirmed item: check duplicates via `kanon_list_roadmap`, create via `kanon_create_roadmap_item`, save to engram.
|
|
30
43
|
|
|
31
|
-
## Hook
|
|
44
|
+
## Hook 4: Roadmap Capture During Conversation
|
|
32
45
|
|
|
33
46
|
Detect these signals during any conversation in the kanon project:
|
|
34
47
|
- "We should eventually...", "down the road", "someday", "not now but later"
|
|
35
48
|
- User describes friction, workarounds, or missing features they defer
|
|
36
|
-
- Out-of-scope items identified during any analysis
|
|
37
49
|
|
|
38
|
-
Action:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
50
|
+
Action: Acknowledge -> confirm -> create roadmap item if user agrees.
|
|
51
|
+
|
|
52
|
+
## Hook 5: PreCompact — Save Session State
|
|
53
|
+
|
|
54
|
+
Before context compaction, save the current work session state:
|
|
42
55
|
|
|
43
|
-
|
|
56
|
+
1. For each active issue (from SessionStart cache), call `kanon_update_issue` to append current progress to the description.
|
|
57
|
+
2. Call `mem_session_summary` to persist session context to engram.
|
|
58
|
+
3. This ensures no work-in-progress context is lost during compaction.
|
|
@@ -3,6 +3,11 @@ name: kanon-roadmap
|
|
|
3
3
|
description: Proactive roadmap capture — recognize future work during conversations and SDD workflows, create and enrich roadmap items automatically
|
|
4
4
|
version: 2.0.0
|
|
5
5
|
tags: [kanon, roadmap, planning, proactive-capture]
|
|
6
|
+
allowed-tools:
|
|
7
|
+
- kanon_*
|
|
8
|
+
- mem_save
|
|
9
|
+
- mem_search
|
|
10
|
+
- mem_get_observation
|
|
6
11
|
---
|
|
7
12
|
|
|
8
13
|
# Kanon Roadmap — Proactive Capture Guide
|
|
@@ -15,10 +20,10 @@ Kanon's roadmap is where **future work lives before it becomes actionable**. Roa
|
|
|
15
20
|
|
|
16
21
|
| Layer | Purpose | Audience |
|
|
17
22
|
|-------|---------|----------|
|
|
18
|
-
| **Roadmap items** | Track future work that is not yet actionable | Humans
|
|
23
|
+
| **Roadmap items** | Track future work that is not yet actionable | Humans |
|
|
19
24
|
| **Issues** | Track actionable work currently in progress or ready to start | Humans |
|
|
20
|
-
| **Engram** | Store technical memory, SDD artifacts, decisions | Agents
|
|
21
|
-
| **The agent** | Bridge all three — capture future work to roadmap, promote to issues when ready
|
|
25
|
+
| **Engram** | Store technical memory, SDD artifacts, decisions | Agents |
|
|
26
|
+
| **The agent** | Bridge all three — capture future work to roadmap, promote to issues when ready | Both |
|
|
22
27
|
|
|
23
28
|
**Roadmap is not a backlog.** It is a planning tool organized by time horizons. Items move from vague ideas (someday) toward concrete plans (now), and when ready, get promoted to actionable issues.
|
|
24
29
|
|
|
@@ -26,111 +31,72 @@ Kanon's roadmap is where **future work lives before it becomes actionable**. Roa
|
|
|
26
31
|
|
|
27
32
|
## Project Resolution (mandatory)
|
|
28
33
|
|
|
29
|
-
The user should never need to know or type a project key
|
|
34
|
+
The user should never need to know or type a project key. The agent infers it internally.
|
|
30
35
|
|
|
31
|
-
|
|
36
|
+
1. Infer the project name from `cwd` basename (e.g., `/home/user/workspace/micro-claw` -> `micro-claw`).
|
|
37
|
+
2. Resolve the project key via `kanon_list_projects(workspaceId)` — match name case-insensitively.
|
|
38
|
+
3. If no match: tell the user and suggest `/kanon-init`.
|
|
39
|
+
4. If multiple matches: present options and let the user choose.
|
|
40
|
+
5. Cache the resolved `projectKey` for the session.
|
|
32
41
|
|
|
33
|
-
|
|
34
|
-
2. **Resolve the project key** by calling `kanon_list_projects(workspaceId)` and matching the inferred name against the `name` field of returned projects (case-insensitive, normalize hyphens/underscores/spaces). If there is exactly one match, use its `key` as the `projectKey` for all subsequent tool calls.
|
|
35
|
-
3. **If no match is found**: Tell the user — "I couldn't find a Kanon project matching '{inferred-name}'. You can create one with `/kanon-init` or tell me the project name to use."
|
|
36
|
-
4. **If multiple matches are found**: Present the options using human-readable names and let the user choose.
|
|
37
|
-
5. **Cache the resolved `projectKey`** for the rest of the session. Do not re-resolve on every call.
|
|
38
|
-
|
|
39
|
-
### User-facing communication
|
|
40
|
-
|
|
41
|
-
- Always refer to the project by its human-readable name (e.g. "micro-claw"), never by its key (e.g. "MCLAW").
|
|
42
|
-
- The project key is an internal implementation detail passed to tool calls only.
|
|
43
|
-
- In examples below, `projectKey` parameters show placeholder values like `"PROJ"` — the agent resolves the real key at runtime using the steps above.
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Available Tools
|
|
48
|
-
|
|
49
|
-
### Roadmap Management
|
|
50
|
-
|
|
51
|
-
| Tool | Purpose | Key Parameters |
|
|
52
|
-
|------|---------|----------------|
|
|
53
|
-
| `kanon_list_roadmap(projectKey, ...)` | List roadmap items with optional filters | `projectKey` (required); filters: `horizon`, `status`, `label` |
|
|
54
|
-
| `kanon_create_roadmap_item(projectKey, title, ...)` | Create a new roadmap item | `projectKey`, `title` (required); optional: `description`, `horizon`, `status`, `effort`, `impact`, `labels`, `targetDate` |
|
|
55
|
-
| `kanon_update_roadmap_item(projectKey, itemId, ...)` | Update a roadmap item | `projectKey`, `itemId` (required); optional: `title`, `description`, `horizon`, `status`, `effort`, `impact`, `labels`, `targetDate`, `sortOrder` |
|
|
56
|
-
| `kanon_delete_roadmap_item(projectKey, itemId)` | Permanently delete a roadmap item | `projectKey`, `itemId` (required) |
|
|
57
|
-
| `kanon_promote_roadmap_item(projectKey, itemId, ...)` | Promote a roadmap item to an actionable issue | `projectKey`, `itemId` (required); optional: `title`, `type`, `priority`, `labels`, `groupKey` |
|
|
58
|
-
|
|
59
|
-
### Dependency Management
|
|
60
|
-
|
|
61
|
-
| Tool | Purpose | Key Parameters |
|
|
62
|
-
|------|---------|----------------|
|
|
63
|
-
| `kanon_add_dependency(projectKey, sourceItemId, targetItemId, ...)` | Add a blocks relationship between two roadmap items | `projectKey`, `sourceItemId`, `targetItemId` (required); optional: `type` (only `"blocks"` supported) |
|
|
64
|
-
| `kanon_remove_dependency(projectKey, sourceItemId, dependencyId)` | Remove a dependency | `projectKey`, `sourceItemId`, `dependencyId` (required — the dependency's own UUID, not the target item's ID) |
|
|
65
|
-
|
|
66
|
-
**Parameter note**: All tools that reference a roadmap item use `itemId` (UUID), NOT `id`. This is the exact parameter name the MCP tools expect.
|
|
42
|
+
Always refer to the project by its human-readable name, never by its key.
|
|
67
43
|
|
|
68
44
|
---
|
|
69
45
|
|
|
70
46
|
## Horizons
|
|
71
47
|
|
|
72
|
-
Horizon answers **when** — where this item sits in the planning timeline.
|
|
73
|
-
|
|
74
48
|
| Horizon | Meaning | Typical items |
|
|
75
49
|
|---------|---------|---------------|
|
|
76
|
-
| **now** | Ready to promote — team could start
|
|
77
|
-
| **next** | Planned for
|
|
78
|
-
| **later** | Valuable but not urgent — will revisit
|
|
79
|
-
| **someday** | Ideas, wishes, long-term dreams
|
|
50
|
+
| **now** | Ready to promote — team could start soon | Well-understood, clear scope |
|
|
51
|
+
| **next** | Planned for near future — needs more definition | Known value, some open questions |
|
|
52
|
+
| **later** | Valuable but not urgent — will revisit | Good ideas that need time to mature |
|
|
53
|
+
| **someday** | Ideas, wishes, long-term dreams | Brainstorms, speculative concepts |
|
|
80
54
|
|
|
81
|
-
**Default horizon**: `later
|
|
55
|
+
**Default horizon**: `later`. Items naturally move left as they gain clarity and urgency.
|
|
82
56
|
|
|
83
57
|
---
|
|
84
58
|
|
|
85
59
|
## Status
|
|
86
60
|
|
|
87
|
-
Status answers **what state** the item is in — independent of horizon.
|
|
88
|
-
|
|
89
61
|
| Status | Meaning |
|
|
90
62
|
|--------|---------|
|
|
91
63
|
| **idea** | Default. Not yet evaluated or committed to |
|
|
92
|
-
| **planned** | Committed to — decision made
|
|
93
|
-
| **in_progress** | Actively being worked on
|
|
64
|
+
| **planned** | Committed to — decision made, but not started |
|
|
65
|
+
| **in_progress** | Actively being worked on |
|
|
94
66
|
| **done** | Completed — kept for historical reference |
|
|
95
67
|
|
|
96
|
-
**Horizon vs Status**: Horizon = when (timeline
|
|
68
|
+
**Horizon vs Status**: Horizon = when (timeline). Status = what state (lifecycle). An item can be `horizon: now, status: planned`.
|
|
97
69
|
|
|
98
70
|
---
|
|
99
71
|
|
|
100
72
|
## Effort and Impact Scoring
|
|
101
73
|
|
|
102
|
-
Both use a 1-5 integer scale.
|
|
74
|
+
Both use a 1-5 integer scale. Optional but help prioritize.
|
|
103
75
|
|
|
104
|
-
| Score | Effort
|
|
105
|
-
|
|
76
|
+
| Score | Effort | Impact |
|
|
77
|
+
|-------|--------|--------|
|
|
106
78
|
| 1 | Trivial — an hour or less | Marginal improvement |
|
|
107
79
|
| 2 | Small — a day or less | Nice to have |
|
|
108
80
|
| 3 | Medium — a few days | Meaningful improvement |
|
|
109
81
|
| 4 | Large — a week or more | Significant value |
|
|
110
|
-
| 5 | Massive — multi-week
|
|
82
|
+
| 5 | Massive — multi-week | Transformative |
|
|
111
83
|
|
|
112
|
-
**High impact + low effort** items are strong candidates for
|
|
113
|
-
|
|
114
|
-
---
|
|
115
|
-
|
|
116
|
-
## Target Date
|
|
117
|
-
|
|
118
|
-
Use `targetDate` (ISO 8601, e.g. `"2026-06-01"`) when an item has a known external deadline or milestone dependency. This is optional and distinct from horizon — a `later` item can still have a target date (e.g., "before Q3 review").
|
|
84
|
+
**High impact + low effort** items are strong candidates for `now` or `next`.
|
|
119
85
|
|
|
120
86
|
---
|
|
121
87
|
|
|
122
88
|
## Roadmap Item vs Issue — When to Use Which
|
|
123
89
|
|
|
124
|
-
| Signal | Create a... |
|
|
125
|
-
|
|
126
|
-
| "We should do X someday" | **Roadmap item** |
|
|
127
|
-
| "This would be nice
|
|
128
|
-
| SDD explore/propose identifies out-of-scope work | **Roadmap item** |
|
|
129
|
-
| "Let's fix this now" / "This is blocking" | **Issue** |
|
|
130
|
-
| Bug found during implementation | **Issue** |
|
|
131
|
-
| Roadmap item reaches `now` and team is ready | **Promote** the roadmap item |
|
|
90
|
+
| Signal | Create a... |
|
|
91
|
+
|--------|-------------|
|
|
92
|
+
| "We should do X someday" | **Roadmap item** |
|
|
93
|
+
| "This would be nice eventually" | **Roadmap item** |
|
|
94
|
+
| SDD explore/propose identifies out-of-scope work | **Roadmap item** |
|
|
95
|
+
| "Let's fix this now" / "This is blocking" | **Issue** |
|
|
96
|
+
| Bug found during implementation | **Issue** |
|
|
97
|
+
| Roadmap item reaches `now` and team is ready | **Promote** the roadmap item |
|
|
132
98
|
|
|
133
|
-
**Rule of thumb**: If someone could start working on it tomorrow with
|
|
99
|
+
**Rule of thumb**: If someone could start working on it tomorrow with clear scope, it is an issue. If it needs more thought or is deferred, it is a roadmap item.
|
|
134
100
|
|
|
135
101
|
---
|
|
136
102
|
|
|
@@ -140,278 +106,77 @@ These are situations where the agent MUST consider creating or updating a roadma
|
|
|
140
106
|
|
|
141
107
|
### Trigger 1: Problem Capture During Conversations
|
|
142
108
|
|
|
143
|
-
**When**: The user discusses a problem
|
|
144
|
-
|
|
145
|
-
**Detection signals**:
|
|
146
|
-
- "We should eventually..."
|
|
147
|
-
- "It would be nice if..."
|
|
148
|
-
- "That's a problem but not urgent"
|
|
149
|
-
- "Let's deal with that later"
|
|
150
|
-
- "Down the road we could..."
|
|
151
|
-
- User describes friction, workarounds, or manual processes
|
|
152
|
-
- User mentions a feature they wish existed
|
|
153
|
-
|
|
154
|
-
**Action**:
|
|
155
|
-
1. Acknowledge the idea: "That sounds like a good candidate for the roadmap."
|
|
156
|
-
2. Ask for confirmation: "Want me to add it as a roadmap item?"
|
|
157
|
-
3. If yes, create with appropriate horizon:
|
|
158
|
-
- User says "not urgent" / "eventually" / "someday" -> `someday` or `later`
|
|
159
|
-
- User says "soon" / "next sprint" / "after this" -> `next`
|
|
160
|
-
- User says "ready to go" / "we should start soon" -> `now`
|
|
161
|
-
4. Use a clear, human-readable title (same `[Area] Description` pattern as issues).
|
|
162
|
-
|
|
163
|
-
**Example**:
|
|
164
|
-
```
|
|
165
|
-
User (cwd: /home/user/workspace/micro-claw):
|
|
166
|
-
"The API doesn't have rate limiting. It hasn't been a problem yet but we should add it before we go public."
|
|
167
|
-
|
|
168
|
-
Agent (internally resolves micro-claw -> projectKey "MCLAW" via kanon_list_projects):
|
|
169
|
-
"That sounds like a good roadmap item for micro-claw — rate limiting before public launch. Want me to add it?"
|
|
170
|
-
|
|
171
|
-
User: "Yeah, go ahead."
|
|
172
|
-
|
|
173
|
-
-> kanon_create_roadmap_item(
|
|
174
|
-
projectKey: "MCLAW", // resolved internally, never shown to user
|
|
175
|
-
title: "[API] Add rate limiting for public endpoints",
|
|
176
|
-
description: "No rate limiting currently. Need to add before public launch to prevent abuse. Consider per-endpoint limits and API key tiers.",
|
|
177
|
-
horizon: "next",
|
|
178
|
-
impact: 4,
|
|
179
|
-
labels: ["api", "security"]
|
|
180
|
-
)
|
|
181
|
-
```
|
|
109
|
+
**When**: The user discusses a problem or improvement opportunity not being addressed now.
|
|
182
110
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
title: "Roadmap item: [API] Add rate limiting",
|
|
187
|
-
type: "discovery",
|
|
188
|
-
topic_key: "kanon/roadmap/api-rate-limiting",
|
|
189
|
-
content: "itemId: {returned-uuid}\nTitle: [API] Add rate limiting for public endpoints\nHorizon: next"
|
|
190
|
-
)
|
|
191
|
-
```
|
|
111
|
+
**Signals**: "We should eventually...", "It would be nice if...", "Let's deal with that later", "Down the road we could...", user describes friction or workarounds.
|
|
112
|
+
|
|
113
|
+
**Action**: Acknowledge -> confirm -> create with appropriate horizon. Save item ID to engram with `topic_key: kanon/roadmap/{item-slug}`.
|
|
192
114
|
|
|
193
115
|
### Trigger 2: SDD Exploration and Proposal Capture
|
|
194
116
|
|
|
195
|
-
**When**: During SDD workflows
|
|
196
|
-
|
|
197
|
-
**This is the orchestrator's responsibility** — not the sub-agent's. The orchestrator reviews deferred items after
|
|
198
|
-
|
|
199
|
-
**Detection signals**:
|
|
200
|
-
- Proposal says "out of scope: X, Y, Z"
|
|
201
|
-
- Exploration surfaces related problems not covered by the current change
|
|
202
|
-
- Design document mentions "future enhancement"
|
|
203
|
-
- Spec excludes scenarios with "deferred to future work"
|
|
204
|
-
|
|
205
|
-
**Action**:
|
|
206
|
-
1. After the SDD phase returns, extract the list of deferred/out-of-scope items from the executive summary.
|
|
207
|
-
2. Present the list to the user: "The proposal identified these items as out of scope. Want me to add any to the roadmap?"
|
|
208
|
-
3. For each confirmed item:
|
|
209
|
-
- Check for duplicates first: `kanon_list_roadmap(projectKey, ...)` with relevant filters.
|
|
210
|
-
- If no existing item, create one:
|
|
211
|
-
- Horizon: `later` (known value, intentionally deferred) or `someday` (vague, needs more thought)
|
|
212
|
-
- Status: `idea` (not yet committed)
|
|
213
|
-
- Description: Reference the SDD change name that surfaced it
|
|
214
|
-
- Labels: Include the SDD change area for traceability
|
|
215
|
-
- If an existing item covers this, update it with the new context.
|
|
216
|
-
4. Save each created item's ID to engram (see Trigger 1 pattern above).
|
|
217
|
-
|
|
218
|
-
**Injection block for sub-agents** — include this in SDD phase prompts so sub-agents surface deferred items clearly:
|
|
219
|
-
```
|
|
220
|
-
ROADMAP: When you identify out-of-scope or deferred work in your output, list it explicitly
|
|
221
|
-
under a "Deferred Items" heading in your executive_summary. Include: item title, why it was
|
|
222
|
-
deferred, and suggested horizon (later/someday). The orchestrator will handle roadmap capture.
|
|
223
|
-
```
|
|
117
|
+
**When**: During SDD workflows, the orchestrator identifies deferred or out-of-scope items.
|
|
118
|
+
|
|
119
|
+
**This is the orchestrator's responsibility** — not the sub-agent's. The orchestrator reviews deferred items after phases complete.
|
|
224
120
|
|
|
225
|
-
**
|
|
121
|
+
**Action**: Extract deferred items from the executive summary, present to user, create confirmed items with horizon `later` (intentionally deferred) or `someday` (vague). Reference the SDD change name in the description.
|
|
122
|
+
|
|
123
|
+
**Injection block for sub-agents**:
|
|
226
124
|
```
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
Orchestrator presents to user:
|
|
231
|
-
"The auth-redesign proposal deferred 3 items. Add any to roadmap?
|
|
232
|
-
1. SSO integration for enterprise users
|
|
233
|
-
2. API key management
|
|
234
|
-
3. Audit logging"
|
|
235
|
-
|
|
236
|
-
User: "Add 1 and 3."
|
|
237
|
-
|
|
238
|
-
-> kanon_create_roadmap_item(
|
|
239
|
-
projectKey: "{resolved-key}", // resolved internally from cwd project name
|
|
240
|
-
title: "[Auth] SSO integration for enterprise users",
|
|
241
|
-
description: "Identified during auth-redesign (sdd/auth-redesign/proposal). Deferred from current scope. Would need SAML/OIDC provider support.",
|
|
242
|
-
horizon: "later",
|
|
243
|
-
impact: 4,
|
|
244
|
-
effort: 4,
|
|
245
|
-
labels: ["auth", "enterprise"]
|
|
246
|
-
)
|
|
247
|
-
|
|
248
|
-
-> kanon_create_roadmap_item(
|
|
249
|
-
projectKey: "{resolved-key}", // resolved internally from cwd project name
|
|
250
|
-
title: "[Auth] Audit logging for auth events",
|
|
251
|
-
description: "Identified during auth-redesign (sdd/auth-redesign/proposal). Deferred from current scope.",
|
|
252
|
-
horizon: "later",
|
|
253
|
-
impact: 3,
|
|
254
|
-
effort: 2,
|
|
255
|
-
labels: ["auth", "security"]
|
|
256
|
-
)
|
|
125
|
+
ROADMAP: When you identify out-of-scope or deferred work, list it under "Deferred Items"
|
|
126
|
+
in your executive_summary. Include: title, reason deferred, suggested horizon (later/someday).
|
|
127
|
+
The orchestrator handles roadmap capture — do NOT create roadmap items yourself.
|
|
257
128
|
```
|
|
258
129
|
|
|
259
130
|
### Trigger 3: Progressive Enrichment
|
|
260
131
|
|
|
261
132
|
**When**: The agent learns new information about an existing roadmap item across sessions or during related work.
|
|
262
133
|
|
|
263
|
-
**
|
|
264
|
-
- Working on something related to an existing roadmap item
|
|
265
|
-
- User mentions updated priorities or timelines
|
|
266
|
-
- New technical context changes the effort/impact estimate
|
|
267
|
-
- A dependency is resolved that unblocks a roadmap item
|
|
268
|
-
- User says "actually that X thing is more urgent now"
|
|
269
|
-
|
|
270
|
-
**Action**:
|
|
271
|
-
1. Search for the existing item — first check engram (`mem_search` with `kanon/roadmap/{slug}`), then fall back to `kanon_list_roadmap(projectKey, ...)`.
|
|
272
|
-
2. Update the relevant fields:
|
|
273
|
-
- New context learned -> update `description` (append, do not overwrite)
|
|
274
|
-
- Priority changed -> update `horizon` (e.g., `later` -> `next`) and/or `status`
|
|
275
|
-
- Better understanding of scope -> update `effort` and/or `impact`
|
|
276
|
-
- Known deadline identified -> set `targetDate`
|
|
277
|
-
- Related work completed -> note it in `description`
|
|
278
|
-
3. Use `kanon_update_roadmap_item` with only the changed fields.
|
|
279
|
-
|
|
280
|
-
**Cross-session lookup pattern**: When creating a roadmap item, always save its ID to engram so future agents can find it without scanning the full roadmap:
|
|
281
|
-
```
|
|
282
|
-
mem_save(
|
|
283
|
-
title: "Roadmap item ID: {slugified-title}",
|
|
284
|
-
type: "discovery",
|
|
285
|
-
scope: "project",
|
|
286
|
-
topic_key: "kanon/roadmap/{item-slug}",
|
|
287
|
-
content: "itemId: {uuid}\nTitle: {title}\nProjectKey: {projectKey}\nHorizon: {horizon}"
|
|
288
|
-
)
|
|
289
|
-
```
|
|
290
|
-
On future sessions, do `mem_search(query: "kanon/roadmap/{slug}")` → `mem_get_observation(id)` → use the stored `itemId` directly.
|
|
134
|
+
**Signals**: Working on something related, user mentions updated priorities, new technical context changes estimates, a dependency is resolved.
|
|
291
135
|
|
|
292
|
-
**
|
|
293
|
-
```
|
|
294
|
-
Agent is working on database optimization. Finds that the "full-text search" roadmap item
|
|
295
|
-
would benefit from the new indexes being added.
|
|
296
|
-
|
|
297
|
-
First, look up the item ID from engram:
|
|
298
|
-
mem_search(query: "kanon/roadmap/full-text-search") -> get itemId
|
|
299
|
-
|
|
300
|
-
-> kanon_update_roadmap_item(
|
|
301
|
-
projectKey: "{resolved-key}", // resolved internally from cwd project name
|
|
302
|
-
itemId: "{item-uuid}",
|
|
303
|
-
description: "{existing description}\n\n---\nUpdate 2026-03-24: Database optimization work added indexes that would support this. Effort estimate reduced.",
|
|
304
|
-
effort: 2 // was 4, now easier because of new indexes
|
|
305
|
-
)
|
|
306
|
-
```
|
|
136
|
+
**Action**: Search engram for the item ID (`mem_search` with `kanon/roadmap/{slug}`), then update via `kanon_update_roadmap_item` with only the changed fields. Append to description, do not overwrite.
|
|
307
137
|
|
|
308
138
|
---
|
|
309
139
|
|
|
310
140
|
## Dependencies
|
|
311
141
|
|
|
312
|
-
Dependencies express **blocks** relationships between roadmap items.
|
|
313
|
-
|
|
314
|
-
### When to Use Dependencies
|
|
315
|
-
|
|
316
|
-
- One item requires infrastructure or foundation work from another (e.g., "API versioning" blocks "Deprecate v1 endpoints")
|
|
317
|
-
- A feature depends on a prerequisite feature being in place
|
|
318
|
-
- You want to make sequencing visible on the roadmap
|
|
319
|
-
|
|
320
|
-
### How Dependencies Work
|
|
321
|
-
|
|
322
|
-
```
|
|
323
|
-
kanon_add_dependency(
|
|
324
|
-
projectKey: "{resolved-key}",
|
|
325
|
-
sourceItemId: "{blocker-item-uuid}", // the item that must complete first
|
|
326
|
-
targetItemId: "{blocked-item-uuid}", // the item waiting on the blocker
|
|
327
|
-
type: "blocks" // only "blocks" is currently supported
|
|
328
|
-
)
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
The API enforces **cycle prevention** — if adding the dependency would create a circular chain, it returns an error. Do not retry; resolve the modeling issue instead.
|
|
332
|
-
|
|
333
|
-
To remove a dependency, you need the `dependencyId` (the dependency record's own UUID, returned when the dependency was created), not the target item's ID:
|
|
334
|
-
|
|
335
|
-
```
|
|
336
|
-
kanon_remove_dependency(
|
|
337
|
-
projectKey: "{resolved-key}",
|
|
338
|
-
sourceItemId: "{blocker-item-uuid}",
|
|
339
|
-
dependencyId: "{dependency-record-uuid}"
|
|
340
|
-
)
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
### Dependency Guidance
|
|
142
|
+
Dependencies express **blocks** relationships between roadmap items. Use `kanon_add_dependency` to create them.
|
|
344
143
|
|
|
345
|
-
- Use sparingly — only
|
|
346
|
-
-
|
|
347
|
-
-
|
|
144
|
+
- Use sparingly — only for real sequencing constraints, not topical similarity.
|
|
145
|
+
- The API enforces cycle prevention. Do not retry on cycle errors; resolve the modeling issue.
|
|
146
|
+
- To remove, you need the `dependencyId` (the dependency record's UUID, not the target item's ID).
|
|
348
147
|
|
|
349
148
|
---
|
|
350
149
|
|
|
351
150
|
## Deletion
|
|
352
151
|
|
|
353
|
-
Use `kanon_delete_roadmap_item` to permanently remove an item.
|
|
354
|
-
|
|
355
|
-
**When deletion is appropriate**:
|
|
356
|
-
- Duplicate item created in error
|
|
357
|
-
- Idea explicitly rejected and no historical value in keeping it
|
|
358
|
-
- Item was merged into another item (update the surviving item's description first to capture any unique context from the deleted one)
|
|
152
|
+
Use `kanon_delete_roadmap_item` to permanently remove an item. Irreversible.
|
|
359
153
|
|
|
360
|
-
**
|
|
361
|
-
|
|
362
|
-
- Item was deprioritized — use `horizon: "someday"` or `status: "idea"`
|
|
363
|
-
- Item was promoted to an issue — it is automatically marked `promoted: true`, leave it
|
|
364
|
-
|
|
365
|
-
```
|
|
366
|
-
kanon_delete_roadmap_item(
|
|
367
|
-
projectKey: "{resolved-key}",
|
|
368
|
-
itemId: "{item-uuid}"
|
|
369
|
-
)
|
|
370
|
-
```
|
|
154
|
+
**Appropriate**: Duplicate created in error, idea explicitly rejected, item merged into another.
|
|
155
|
+
**Not appropriate**: Completed (use `status: "done"`), deprioritized (use `horizon: "someday"`), promoted (already marked automatically).
|
|
371
156
|
|
|
372
157
|
---
|
|
373
158
|
|
|
374
159
|
## Promotion — When and How
|
|
375
160
|
|
|
376
|
-
Promotion converts a roadmap item into an actionable Kanon issue. The roadmap item is marked as `promoted
|
|
377
|
-
|
|
378
|
-
### When to Promote
|
|
161
|
+
Promotion converts a roadmap item into an actionable Kanon issue. The roadmap item is marked as `promoted`.
|
|
379
162
|
|
|
380
|
-
|
|
381
|
-
- The team/user explicitly says "let's do this"
|
|
382
|
-
- An SDD workflow is about to start for this item
|
|
383
|
-
- A dependency was resolved that makes the item actionable
|
|
163
|
+
**When**: Item reaches `now`, team says "let's do this", an SDD workflow starts for it, or a blocking dependency is resolved.
|
|
384
164
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
```
|
|
388
|
-
kanon_promote_roadmap_item(
|
|
389
|
-
projectKey: "{resolved-key}",
|
|
390
|
-
itemId: "{roadmap-item-uuid}",
|
|
391
|
-
title: "[Area] Clear action title", // optional — defaults to roadmap item title
|
|
392
|
-
type: "feature", // optional — defaults based on content
|
|
393
|
-
priority: "medium", // optional
|
|
394
|
-
groupKey: "sprint-4" // optional — assign to a sprint/group
|
|
395
|
-
)
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
**After promotion**: The new issue is created with the roadmap item's description as initial context. The roadmap item gets `promoted: true` and retains its history. Multiple issues can be promoted from a single roadmap item (e.g., a large feature broken into phases).
|
|
165
|
+
Use `kanon_promote_roadmap_item` — optionally override title, type, priority, and groupKey. The new issue inherits the roadmap item's description. Multiple issues can be promoted from a single roadmap item.
|
|
399
166
|
|
|
400
167
|
---
|
|
401
168
|
|
|
402
169
|
## Cross-Skill Coordination
|
|
403
170
|
|
|
404
|
-
When both `kanon-mcp` and `kanon-roadmap` skills are active in the same session, responsibilities are split:
|
|
405
|
-
|
|
406
171
|
| Responsibility | Handled by |
|
|
407
172
|
|----------------|------------|
|
|
408
|
-
| Issue creation and enrichment during SDD
|
|
409
|
-
| Roadmap deferred-item capture after
|
|
173
|
+
| Issue creation and enrichment during SDD | Sub-agents (per kanon-mcp) |
|
|
174
|
+
| Roadmap deferred-item capture after SDD phases | Orchestrator (Trigger 2) |
|
|
410
175
|
| Issue state transitions per SDD phase | Sub-agents |
|
|
411
|
-
| Roadmap item lifecycle
|
|
412
|
-
| Saving roadmap item IDs to engram | Whoever creates the item — immediately
|
|
176
|
+
| Roadmap item lifecycle updates | Orchestrator or agent responding to user signals |
|
|
177
|
+
| Saving roadmap item IDs to engram | Whoever creates the item — immediately |
|
|
413
178
|
|
|
414
|
-
|
|
179
|
+
Do NOT ask sub-agents to create roadmap items for out-of-scope work. That is the orchestrator's job.
|
|
415
180
|
|
|
416
181
|
---
|
|
417
182
|
|
|
@@ -419,48 +184,35 @@ When both `kanon-mcp` and `kanon-roadmap` skills are active in the same session,
|
|
|
419
184
|
|
|
420
185
|
Follow the same pattern as Kanon issues: `[Area] Clear action description`
|
|
421
186
|
|
|
422
|
-
**Good
|
|
423
|
-
|
|
424
|
-
- `[UI] Dark mode support across all pages`
|
|
425
|
-
- `[Infra] Migrate from Heroku to Fly.io`
|
|
426
|
-
- `[DX] Automated database seeding for local dev`
|
|
427
|
-
|
|
428
|
-
**Bad titles (never do this)**:
|
|
429
|
-
- `Rate limiting` (too vague, no area)
|
|
430
|
-
- `TODO: maybe add dark mode?` (not a clear description)
|
|
431
|
-
- `sdd/auth/future-work-1` (internal jargon)
|
|
432
|
-
- `Feature request from user` (meaningless on a board)
|
|
187
|
+
**Good**: `[API] Rate limiting for public endpoints`, `[UI] Dark mode support across all pages`
|
|
188
|
+
**Bad**: `Rate limiting` (too vague), `sdd/auth/future-work-1` (internal jargon)
|
|
433
189
|
|
|
434
190
|
---
|
|
435
191
|
|
|
436
192
|
## Labels for Categorization
|
|
437
193
|
|
|
438
|
-
Use labels to make the roadmap scannable and filterable:
|
|
439
|
-
|
|
440
194
|
| Label | When to use |
|
|
441
195
|
|-------|-------------|
|
|
442
|
-
| `performance` | Speed, caching, optimization
|
|
196
|
+
| `performance` | Speed, caching, optimization |
|
|
443
197
|
| `security` | Auth, encryption, access control |
|
|
444
198
|
| `ux` | User experience improvements |
|
|
445
|
-
| `dx` | Developer experience, tooling
|
|
446
|
-
| `infra` | Infrastructure, deployment
|
|
447
|
-
| `tech-debt` | Known shortcuts
|
|
448
|
-
| `integration` | Third-party services, APIs
|
|
199
|
+
| `dx` | Developer experience, tooling |
|
|
200
|
+
| `infra` | Infrastructure, deployment |
|
|
201
|
+
| `tech-debt` | Known shortcuts to revisit |
|
|
202
|
+
| `integration` | Third-party services, APIs |
|
|
449
203
|
|
|
450
|
-
Use domain-specific labels
|
|
204
|
+
Use domain-specific labels alongside category labels for cross-referencing.
|
|
451
205
|
|
|
452
206
|
---
|
|
453
207
|
|
|
454
208
|
## Best Practices
|
|
455
209
|
|
|
456
|
-
1. **Confirm before creating** — Always ask the user before adding a roadmap item.
|
|
457
|
-
2. **Titles are for humans** — Write every title as if a stakeholder will scan it
|
|
458
|
-
3. **Descriptions tell the story** — Include why it matters, what problem it solves,
|
|
459
|
-
4. **Start vague, refine over time** — Items in `someday` can
|
|
460
|
-
5. **Check for duplicates** —
|
|
461
|
-
6. **Link to context** —
|
|
462
|
-
7. **
|
|
463
|
-
8. **
|
|
464
|
-
9. **
|
|
465
|
-
10. **Promote at the right time** — Do not promote items in `later` or `someday` unless the user explicitly asks. Promotion means "ready to work on."
|
|
466
|
-
11. **One roadmap item can spawn multiple issues** — Large features may be promoted in phases. Each promotion creates a separate issue linked back to the same roadmap item.
|
|
210
|
+
1. **Confirm before creating** — Always ask the user before adding a roadmap item.
|
|
211
|
+
2. **Titles are for humans** — Write every title as if a stakeholder will scan it.
|
|
212
|
+
3. **Descriptions tell the story** — Include why it matters, what problem it solves, known constraints.
|
|
213
|
+
4. **Start vague, refine over time** — Items in `someday` can be minimal. Enrich as they move toward `now`.
|
|
214
|
+
5. **Check for duplicates** — Call `kanon_list_roadmap` before creating.
|
|
215
|
+
6. **Link to context** — Reference the SDD change name when surfaced by SDD work.
|
|
216
|
+
7. **Save IDs to engram** — After creating, save `itemId` with `topic_key: kanon/roadmap/{slug}`.
|
|
217
|
+
8. **Effort and impact are living estimates** — Update as understanding grows.
|
|
218
|
+
9. **Promote at the right time** — Do not promote `later`/`someday` items unless user explicitly asks.
|
package/dist/agents.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install agent files from assets to the tool's agent directory.
|
|
3
|
+
* Only for tools that support agents (have an agentDest).
|
|
4
|
+
* Creates parent directories if needed. Idempotent — overwrites on re-run.
|
|
5
|
+
*/
|
|
6
|
+
export declare function installAgents(agentDest: string, assetsDir: string): string[];
|
|
7
|
+
/**
|
|
8
|
+
* Remove Kanon agent files from the tool's agent directory.
|
|
9
|
+
* Returns the list of agent files that were removed.
|
|
10
|
+
*/
|
|
11
|
+
export declare function removeAgents(agentDest: string): string[];
|
|
12
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,EAAE,CAwCV;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBxD"}
|