kyro-ai 3.2.2 → 3.2.3
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/.claude-plugin/plugin.json +4 -2
- package/WORKFLOW.yaml +1 -1
- package/agents/orchestrator.md +3 -3
- package/commands/status.md +2 -2
- package/dist/cli/commands/token-audit.d.ts.map +1 -1
- package/dist/cli/commands/token-audit.js +124 -2
- package/dist/cli/commands/token-audit.js.map +1 -1
- package/docs/cli.md +8 -3
- package/package.json +1 -1
- package/skills/sprint-forge/SKILL.md +2 -2
- package/skills/sprint-forge/assets/README.md +15 -4
- package/skills/sprint-forge/assets/fixtures/subcommands-and-reports.sizingDecision.json +17 -0
- package/skills/sprint-forge/assets/helpers/analysis/audit.md +18 -0
- package/skills/sprint-forge/assets/helpers/analysis/bugfix.md +19 -0
- package/skills/sprint-forge/assets/helpers/analysis/feature.md +28 -0
- package/skills/sprint-forge/assets/helpers/analysis/new-project.md +18 -0
- package/skills/sprint-forge/assets/helpers/analysis/refactor.md +18 -0
- package/skills/sprint-forge/assets/helpers/analysis/tech-debt.md +18 -0
- package/skills/sprint-forge/assets/modes/INIT.md +33 -64
- package/skills/sprint-forge/assets/templates/PROJECT-README.md +16 -60
- package/skills/sprint-forge/assets/templates/REENTRY-PROMPTS.md +18 -87
- package/skills/sprint-forge/assets/templates/ROADMAP.md +16 -65
- package/skills/sprint-forge/assets/templates/ROADMAP.summary.json +9 -0
- package/skills/sprint-forge/assets/templates/index.json +9 -0
- package/skills/sprint-forge/assets/helpers/analysis-guide.md +0 -207
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kyro-ai",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.3",
|
|
4
4
|
"description": "Claude Code adapter for Kyro, a portable sprint workflow kit for AI coding agents",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "SynapSync",
|
|
@@ -36,5 +36,7 @@
|
|
|
36
36
|
"agents": [
|
|
37
37
|
"./agents/orchestrator.md"
|
|
38
38
|
],
|
|
39
|
-
"commands": [
|
|
39
|
+
"commands": [
|
|
40
|
+
"./commands/"
|
|
41
|
+
]
|
|
40
42
|
}
|
package/WORKFLOW.yaml
CHANGED
package/agents/orchestrator.md
CHANGED
|
@@ -98,15 +98,15 @@ The `skills` declaration in frontmatter is metadata only — it does NOT auto-in
|
|
|
98
98
|
|
|
99
99
|
1. Read `skills/sprint-forge/SKILL.md` — sprint-forge orchestration logic, critical rules, mode detection, capabilities matrix
|
|
100
100
|
2. Load mode-gated assets based on the current phase:
|
|
101
|
-
- **INIT phase**: Read `skills/sprint-forge/assets/modes/INIT.md`, `skills/sprint-forge/assets/helpers/analysis
|
|
101
|
+
- **INIT phase**: Read `skills/sprint-forge/assets/modes/INIT.md`, then exactly one routed `skills/sprint-forge/assets/helpers/analysis/{workType}.md` helper
|
|
102
102
|
- **SPRINT phase**: Read `skills/sprint-forge/assets/modes/SPRINT.md`, `skills/sprint-forge/assets/helpers/sprint-generator.md`, `skills/sprint-forge/assets/helpers/debt-tracker.md`, `skills/sprint-forge/assets/helpers/reentry-generator.md`
|
|
103
103
|
- **STATUS phase**: Read `skills/sprint-forge/assets/modes/STATUS.md`, `skills/sprint-forge/assets/helpers/debt-tracker.md`
|
|
104
104
|
3. Load templates **on-demand** as each workflow step references them (not upfront)
|
|
105
105
|
|
|
106
106
|
**Helpers** (loaded on-demand per phase):
|
|
107
107
|
|
|
108
|
-
1. Read `skills/sprint-forge/assets/helpers/analyzer.md` — work type detection
|
|
109
|
-
2. Read `skills/sprint-forge/assets/helpers/analysis
|
|
108
|
+
1. Read `skills/sprint-forge/assets/helpers/analyzer.md` — work type detection when INIT cannot classify the request cheaply
|
|
109
|
+
2. Read one `skills/sprint-forge/assets/helpers/analysis/{workType}.md` helper — work-type analysis and sizing signals (INIT phase)
|
|
110
110
|
3. Read `skills/sprint-forge/assets/helpers/reviewer.md` — checklist tiers, validation commands, output format (SPRINT phase)
|
|
111
111
|
|
|
112
112
|
**All skill paths are relative to the workflow root (the plugin installation directory).**
|
package/commands/status.md
CHANGED
|
@@ -12,13 +12,13 @@ Report Kyro progress without loading all sprint Markdown by default.
|
|
|
12
12
|
1. Read `.agents/kyro/kyro.json`.
|
|
13
13
|
2. Resolve scope from `$ARGUMENTS`, `activeScope`, or `.agents/kyro/scopes/`.
|
|
14
14
|
3. Read `.agents/kyro/scopes/{scope}/state.json` and `index.json` first.
|
|
15
|
-
4. Prefer `ROADMAP.summary.json`, `SPRINT-*.summary.json`, and `DEBT.summary.json` when present.
|
|
15
|
+
4. Prefer `ROADMAP.summary.json`, `SPRINT-*.summary.json`, and `DEBT.summary.json` when present. Use `sizingDecision` from summaries to explain sprint count without opening roadmap Markdown.
|
|
16
16
|
|
|
17
17
|
## Route
|
|
18
18
|
|
|
19
19
|
| Request | Load next |
|
|
20
20
|
|---------|-----------|
|
|
21
|
-
| `brief` or empty | Summaries only; open Markdown only for missing critical fields. |
|
|
21
|
+
| `brief` or empty | Summaries only; include sprint count rationale from `sizingDecision`; open Markdown only for missing critical fields. |
|
|
22
22
|
| `full` | `skills/sprint-forge/assets/modes/STATUS.md`, then summaries, then Markdown fallbacks. |
|
|
23
23
|
| `debt` | `skills/sprint-forge/assets/helpers/debt-tracker.md` plus debt summary/table. |
|
|
24
24
|
| `debt-add`, `debt-resolve`, `debt-escalate` | `debt-tracker.md`, then update Markdown and summaries. |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/token-audit.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"token-audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/token-audit.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAwC5C,wBAAgB,mBAAmB,IAAI,WAAW,EAAE,CAgBnD"}
|
|
@@ -10,17 +10,33 @@ const TOKEN_BUDGET = {
|
|
|
10
10
|
projectedSkillWords: 200,
|
|
11
11
|
commandRouterWords: 500,
|
|
12
12
|
modeFileWords: 900,
|
|
13
|
+
initModeWords: 500,
|
|
14
|
+
analysisHelperWords: 450,
|
|
15
|
+
roadmapTemplateWords: 450,
|
|
16
|
+
reentryTemplateWords: 350,
|
|
13
17
|
startupTokens: 1500,
|
|
14
18
|
statusBriefTokens: 2000,
|
|
19
|
+
initHappyPathTokens: 2000,
|
|
20
|
+
};
|
|
21
|
+
const RISK_LEVEL = {
|
|
22
|
+
LOW: 'low',
|
|
23
|
+
MEDIUM: 'medium',
|
|
24
|
+
HIGH: 'high',
|
|
15
25
|
};
|
|
16
26
|
function runTokenAuditChecks() {
|
|
17
27
|
const checks = [];
|
|
18
28
|
checks.push(...checkCommandRouters());
|
|
19
29
|
checks.push(...checkModeFiles());
|
|
30
|
+
checks.push(checkInitModeBudget());
|
|
31
|
+
checks.push(...checkAnalysisHelperBudgets());
|
|
32
|
+
checks.push(checkTemplateBudget('skills/sprint-forge/assets/templates/ROADMAP.md', TOKEN_BUDGET.roadmapTemplateWords, 'ROADMAP template'));
|
|
33
|
+
checks.push(checkTemplateBudget('skills/sprint-forge/assets/templates/REENTRY-PROMPTS.md', TOKEN_BUDGET.reentryTemplateWords, 'REENTRY template'));
|
|
20
34
|
checks.push(checkProjectedSkills());
|
|
21
35
|
checks.push(checkAgentsBlockBudget());
|
|
22
36
|
checks.push(checkStartupBudget());
|
|
23
37
|
checks.push(checkStatusBriefBudget());
|
|
38
|
+
checks.push(checkInitHappyPathBudget());
|
|
39
|
+
checks.push(checkSizingDecisionFixture());
|
|
24
40
|
checks.push(reportHeaviestFiles());
|
|
25
41
|
return checks;
|
|
26
42
|
}
|
|
@@ -42,6 +58,30 @@ function checkModeFiles() {
|
|
|
42
58
|
return pass('token budget: mode file', `${file} ${weighted.words}/${TOKEN_BUDGET.modeFileWords} words`);
|
|
43
59
|
});
|
|
44
60
|
}
|
|
61
|
+
function checkInitModeBudget() {
|
|
62
|
+
const file = 'skills/sprint-forge/assets/modes/INIT.md';
|
|
63
|
+
const weighted = weightPackageFile(file);
|
|
64
|
+
if (weighted.words > TOKEN_BUDGET.initModeWords) {
|
|
65
|
+
return warn('token budget: INIT mode', `${file} has ${weighted.words} words`, 'Keep INIT as a router; move work-type guidance into analysis helpers.');
|
|
66
|
+
}
|
|
67
|
+
return pass('token budget: INIT mode', `${weighted.words}/${TOKEN_BUDGET.initModeWords} words`);
|
|
68
|
+
}
|
|
69
|
+
function checkAnalysisHelperBudgets() {
|
|
70
|
+
return listPackageFiles('skills/sprint-forge/assets/helpers/analysis', '.md').map((file) => {
|
|
71
|
+
const weighted = weightPackageFile(file);
|
|
72
|
+
if (weighted.words > TOKEN_BUDGET.analysisHelperWords) {
|
|
73
|
+
return warn('token budget: analysis helper', `${file} has ${weighted.words} words`, 'Keep each work-type helper focused on routing, findings, and sizing signals.');
|
|
74
|
+
}
|
|
75
|
+
return pass('token budget: analysis helper', `${file} ${weighted.words}/${TOKEN_BUDGET.analysisHelperWords} words`);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function checkTemplateBudget(file, budget, label) {
|
|
79
|
+
const weighted = weightPackageFile(file);
|
|
80
|
+
if (weighted.words > budget) {
|
|
81
|
+
return warn(`token budget: ${label}`, `${file} has ${weighted.words} words`, 'Keep templates lean; avoid copying lifecycle rules already defined in modes/helpers.');
|
|
82
|
+
}
|
|
83
|
+
return pass(`token budget: ${label}`, `${weighted.words}/${budget} words`);
|
|
84
|
+
}
|
|
45
85
|
function checkProjectedSkills() {
|
|
46
86
|
const skillFiles = ['kyro-forge/SKILL.md', 'kyro-status/SKILL.md', 'kyro-wrap-up/SKILL.md'].map((file) => `${constants_1.AGENT_SKILLS_ROOT}/${file}`);
|
|
47
87
|
const existing = skillFiles.filter((file) => (0, node_fs_1.existsSync)((0, fs_1.resolveManagedPath)(file)));
|
|
@@ -72,7 +112,7 @@ function checkAgentsBlockBudget() {
|
|
|
72
112
|
}
|
|
73
113
|
function checkStartupBudget() {
|
|
74
114
|
const files = ['commands/forge.md', 'skills/sprint-forge/assets/modes/SPRINT.md'];
|
|
75
|
-
const total = files.map(weightPackageFile)
|
|
115
|
+
const total = sumEstimatedTokens(files.map(weightPackageFile));
|
|
76
116
|
if (total > TOKEN_BUDGET.startupTokens) {
|
|
77
117
|
return warn('token budget: startup path', `${total}/${TOKEN_BUDGET.startupTokens} estimated tokens`, 'Reduce forge router or sprint router startup instructions.');
|
|
78
118
|
}
|
|
@@ -80,12 +120,88 @@ function checkStartupBudget() {
|
|
|
80
120
|
}
|
|
81
121
|
function checkStatusBriefBudget() {
|
|
82
122
|
const files = ['commands/status.md'];
|
|
83
|
-
const total = files.map(weightPackageFile)
|
|
123
|
+
const total = sumEstimatedTokens(files.map(weightPackageFile));
|
|
84
124
|
if (total > TOKEN_BUDGET.statusBriefTokens) {
|
|
85
125
|
return warn('token budget: status brief path', `${total}/${TOKEN_BUDGET.statusBriefTokens} estimated tokens`, 'Keep status brief summary-first.');
|
|
86
126
|
}
|
|
87
127
|
return pass('token budget: status brief path', `${total}/${TOKEN_BUDGET.statusBriefTokens} estimated tokens`);
|
|
88
128
|
}
|
|
129
|
+
function checkInitHappyPathBudget() {
|
|
130
|
+
const baseFiles = [
|
|
131
|
+
'commands/forge.md',
|
|
132
|
+
'skills/sprint-forge/assets/modes/INIT.md',
|
|
133
|
+
'skills/sprint-forge/assets/templates/ROADMAP.md',
|
|
134
|
+
'skills/sprint-forge/assets/templates/PROJECT-README.md',
|
|
135
|
+
'skills/sprint-forge/assets/templates/REENTRY-PROMPTS.md',
|
|
136
|
+
].map(weightPackageFile);
|
|
137
|
+
const heaviestHelper = listPackageFiles('skills/sprint-forge/assets/helpers/analysis', '.md').map(weightPackageFile).sort((a, b) => b.estimatedTokens - a.estimatedTokens)[0];
|
|
138
|
+
const files = heaviestHelper ? [...baseFiles, heaviestHelper] : baseFiles;
|
|
139
|
+
const total = sumEstimatedTokens(files);
|
|
140
|
+
if (total > TOKEN_BUDGET.initHappyPathTokens) {
|
|
141
|
+
return warn('token budget: INIT happy path', `${total}/${TOKEN_BUDGET.initHappyPathTokens} estimated tokens`, 'Reduce INIT, routed analysis helper, or scoped templates.');
|
|
142
|
+
}
|
|
143
|
+
return pass('token budget: INIT happy path', `${total}/${TOKEN_BUDGET.initHappyPathTokens} estimated tokens`);
|
|
144
|
+
}
|
|
145
|
+
function checkSizingDecisionFixture() {
|
|
146
|
+
const file = 'skills/sprint-forge/assets/fixtures/subcommands-and-reports.sizingDecision.json';
|
|
147
|
+
const absolutePath = (0, node_path_1.resolve)(constants_1.PACKAGE_ROOT, file);
|
|
148
|
+
if (!(0, node_fs_1.existsSync)(absolutePath)) {
|
|
149
|
+
return fail('sizingDecision fixture', `${file} missing`, 'Add the subcommands-and-reports regression fixture.');
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
const parsed = JSON.parse((0, node_fs_1.readFileSync)(absolutePath, 'utf-8'));
|
|
153
|
+
if (!isSizingDecisionFixture(parsed)) {
|
|
154
|
+
return fail('sizingDecision fixture', `${file} has invalid shape`, 'Keep recommendedSprintCount, splitTriggers, whyNotFewer, whyNotMore, and sprintProofs consistent.');
|
|
155
|
+
}
|
|
156
|
+
const consistencyError = validateSizingDecision(parsed);
|
|
157
|
+
if (consistencyError) {
|
|
158
|
+
return fail('sizingDecision fixture', consistencyError, 'Fix the fixture so sprint boundaries are explicit and justified.');
|
|
159
|
+
}
|
|
160
|
+
return pass('sizingDecision fixture', `subcommands-and-reports validates ${parsed.recommendedSprintCount} justified sprints`);
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
const message = error instanceof Error ? error.message : 'unknown parse error';
|
|
164
|
+
return fail('sizingDecision fixture', `${file}: ${message}`, 'Keep the fixture as valid JSON.');
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function validateSizingDecision(decision) {
|
|
168
|
+
if (decision.recommendedSprintCount !== decision.sprintProofs.length) {
|
|
169
|
+
return `recommendedSprintCount=${decision.recommendedSprintCount} but sprintProofs.length=${decision.sprintProofs.length}`;
|
|
170
|
+
}
|
|
171
|
+
if (decision.recommendedSprintCount > 1 && decision.splitTriggers.length === 0) {
|
|
172
|
+
return 'multi-sprint sizing requires non-empty splitTriggers';
|
|
173
|
+
}
|
|
174
|
+
if (decision.whyNotFewer.trim().length === 0) {
|
|
175
|
+
return 'whyNotFewer must be non-empty';
|
|
176
|
+
}
|
|
177
|
+
if (decision.whyNotMore.trim().length === 0) {
|
|
178
|
+
return 'whyNotMore must be non-empty';
|
|
179
|
+
}
|
|
180
|
+
if (decision.sprintProofs.some((proof) => proof.trim().length === 0)) {
|
|
181
|
+
return 'every planned sprint needs a non-empty proof';
|
|
182
|
+
}
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
function isSizingDecisionFixture(value) {
|
|
186
|
+
if (!isRecord(value))
|
|
187
|
+
return false;
|
|
188
|
+
return (typeof value.recommendedSprintCount === 'number' &&
|
|
189
|
+
isRiskLevel(value.riskLevel) &&
|
|
190
|
+
typeof value.rationale === 'string' &&
|
|
191
|
+
isStringArray(value.splitTriggers) &&
|
|
192
|
+
typeof value.whyNotFewer === 'string' &&
|
|
193
|
+
typeof value.whyNotMore === 'string' &&
|
|
194
|
+
isStringArray(value.sprintProofs));
|
|
195
|
+
}
|
|
196
|
+
function isRecord(value) {
|
|
197
|
+
return typeof value === 'object' && value !== null;
|
|
198
|
+
}
|
|
199
|
+
function isRiskLevel(value) {
|
|
200
|
+
return value === RISK_LEVEL.LOW || value === RISK_LEVEL.MEDIUM || value === RISK_LEVEL.HIGH;
|
|
201
|
+
}
|
|
202
|
+
function isStringArray(value) {
|
|
203
|
+
return Array.isArray(value) && value.every((item) => typeof item === 'string');
|
|
204
|
+
}
|
|
89
205
|
function reportHeaviestFiles() {
|
|
90
206
|
const files = [
|
|
91
207
|
...listPackageFiles('commands', '.md'),
|
|
@@ -129,6 +245,9 @@ function countWords(text) {
|
|
|
129
245
|
function estimateTokens(words) {
|
|
130
246
|
return Math.ceil(words * 1.33);
|
|
131
247
|
}
|
|
248
|
+
function sumEstimatedTokens(files) {
|
|
249
|
+
return files.reduce((sum, file) => sum + file.estimatedTokens, 0);
|
|
250
|
+
}
|
|
132
251
|
function formatWeightedList(files) {
|
|
133
252
|
return files.map((file) => `${file.path}=${file.words}w/~${file.estimatedTokens}t`).join(', ');
|
|
134
253
|
}
|
|
@@ -138,4 +257,7 @@ function pass(name, detail) {
|
|
|
138
257
|
function warn(name, detail, remedy) {
|
|
139
258
|
return { status: 'warn', name, detail, remedy };
|
|
140
259
|
}
|
|
260
|
+
function fail(name, detail, remedy) {
|
|
261
|
+
return { status: 'fail', name, detail, remedy };
|
|
262
|
+
}
|
|
141
263
|
//# sourceMappingURL=token-audit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-audit.js","sourceRoot":"","sources":["../../../src/cli/commands/token-audit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"token-audit.js","sourceRoot":"","sources":["../../../src/cli/commands/token-audit.ts"],"names":[],"mappings":"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"}
|
package/docs/cli.md
CHANGED
|
@@ -126,9 +126,14 @@ Use `kyro doctor --tokens` to verify progressive-disclosure budgets:
|
|
|
126
126
|
- projected command skill <= 200 words
|
|
127
127
|
- command router <= 500 words
|
|
128
128
|
- mode file <= 900 words
|
|
129
|
-
-
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
- INIT mode <= 500 words
|
|
130
|
+
- each analysis helper <= 450 words
|
|
131
|
+
- ROADMAP template <= 450 words
|
|
132
|
+
- REENTRY template <= 350 words
|
|
133
|
+
- startup, status brief, and INIT happy paths stay under their estimated token budgets
|
|
134
|
+
- `sizingDecision` regression fixture stays internally consistent
|
|
135
|
+
|
|
136
|
+
Warnings mean Kyro still works, but the harness is becoming expensive to load. Failing sizing checks mean INIT can no longer prove its sprint boundaries.
|
|
132
137
|
|
|
133
138
|
## Sync Semantics
|
|
134
139
|
|
package/package.json
CHANGED
|
@@ -149,9 +149,9 @@ After detecting the mode, read ONLY the assets listed for that mode. Do NOT read
|
|
|
149
149
|
|
|
150
150
|
| Mode | Read These Assets | Do NOT Read |
|
|
151
151
|
|------|-------------------|-------------|
|
|
152
|
-
| **INIT** | `INIT.md`, `analysis
|
|
152
|
+
| **INIT** | `INIT.md`, then one routed `helpers/analysis/{workType}.md` helper | SPRINT.md, STATUS.md, sprint-generator.md, debt-tracker.md, unrelated analysis helpers |
|
|
153
153
|
| **SPRINT** | `SPRINT.md`, then exactly one routed mode: `plan-sprint.md`, `execute-task.md`, `review-task.md`, `close-sprint.md`, or `recover.md` | INIT.md, STATUS.md, unrelated modes/helpers/templates |
|
|
154
|
-
| **STATUS** | `STATUS.md`, `debt-tracker.md` | INIT.md, SPRINT.md, analysis
|
|
154
|
+
| **STATUS** | `STATUS.md`, `debt-tracker.md` | INIT.md, SPRINT.md, analysis helpers, sprint-generator.md, reentry-generator.md, all templates |
|
|
155
155
|
|
|
156
156
|
**On-demand assets**: Templates are loaded as each workflow step references them, not upfront.
|
|
157
157
|
|
|
@@ -6,7 +6,7 @@ Kyro assets are designed for progressive disclosure: load the router first, then
|
|
|
6
6
|
|
|
7
7
|
| File | Description |
|
|
8
8
|
|------|-------------|
|
|
9
|
-
| [INIT.md](modes/INIT.md) |
|
|
9
|
+
| [INIT.md](modes/INIT.md) | Lean analysis, justified sprint sizing, roadmap, scoped state, and summaries |
|
|
10
10
|
| [SPRINT.md](modes/SPRINT.md) | Lightweight sprint router |
|
|
11
11
|
| [plan-sprint.md](modes/plan-sprint.md) | Generate the next sprint |
|
|
12
12
|
| [execute-task.md](modes/execute-task.md) | Execute active sprint tasks |
|
|
@@ -19,7 +19,12 @@ Kyro assets are designed for progressive disclosure: load the router first, then
|
|
|
19
19
|
|
|
20
20
|
| File | Description |
|
|
21
21
|
|------|-------------|
|
|
22
|
-
| [analysis
|
|
22
|
+
| [analysis/feature.md](helpers/analysis/feature.md) | Feature analysis and sizing signals |
|
|
23
|
+
| [analysis/bugfix.md](helpers/analysis/bugfix.md) | Bugfix analysis and sizing signals |
|
|
24
|
+
| [analysis/audit.md](helpers/analysis/audit.md) | Audit analysis and sizing signals |
|
|
25
|
+
| [analysis/refactor.md](helpers/analysis/refactor.md) | Refactor analysis and sizing signals |
|
|
26
|
+
| [analysis/new-project.md](helpers/analysis/new-project.md) | New project analysis and sizing signals |
|
|
27
|
+
| [analysis/tech-debt.md](helpers/analysis/tech-debt.md) | Tech debt analysis and sizing signals |
|
|
23
28
|
| [sprint-generator.md](helpers/sprint-generator.md) | Sprint generation algorithm |
|
|
24
29
|
| [debt-tracker.md](helpers/debt-tracker.md) | Accumulated debt rules |
|
|
25
30
|
| [reentry-generator.md](helpers/reentry-generator.md) | Re-entry prompt updates |
|
|
@@ -30,12 +35,18 @@ Kyro assets are designed for progressive disclosure: load the router first, then
|
|
|
30
35
|
|
|
31
36
|
| File | Description |
|
|
32
37
|
|------|-------------|
|
|
33
|
-
| [ROADMAP.md](templates/ROADMAP.md) | Human roadmap evidence |
|
|
38
|
+
| [ROADMAP.md](templates/ROADMAP.md) | Human roadmap evidence with sizingDecision |
|
|
34
39
|
| [SPRINT.md](templates/SPRINT.md) | Human sprint evidence |
|
|
35
40
|
| [PROJECT-README.md](templates/PROJECT-README.md) | Scope README |
|
|
36
|
-
| [REENTRY-PROMPTS.md](templates/REENTRY-PROMPTS.md) |
|
|
41
|
+
| [REENTRY-PROMPTS.md](templates/REENTRY-PROMPTS.md) | Summary-first recovery prompts |
|
|
37
42
|
| [state.json](templates/state.json) | Scoped routing state |
|
|
38
43
|
| [index.json](templates/index.json) | Fast agent routing index |
|
|
39
44
|
| [ROADMAP.summary.json](templates/ROADMAP.summary.json) | Roadmap summary cache |
|
|
40
45
|
| [SPRINT.summary.json](templates/SPRINT.summary.json) | Sprint summary cache |
|
|
41
46
|
| [DEBT.summary.json](templates/DEBT.summary.json) | Debt summary cache |
|
|
47
|
+
|
|
48
|
+
## fixtures/
|
|
49
|
+
|
|
50
|
+
| File | Description |
|
|
51
|
+
|------|-------------|
|
|
52
|
+
| [subcommands-and-reports.sizingDecision.json](fixtures/subcommands-and-reports.sizingDecision.json) | Regression fixture proving 3 justified sprints can be valid |
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"recommendedSprintCount": 3,
|
|
3
|
+
"riskLevel": "medium",
|
|
4
|
+
"rationale": "The work has a dependency chain: CLI subcommands first, metadata reading second, removal reporting third.",
|
|
5
|
+
"splitTriggers": [
|
|
6
|
+
"public CLI behavior change",
|
|
7
|
+
"shared metadata reader dependency",
|
|
8
|
+
"cleanup reporting depends on metadata reading"
|
|
9
|
+
],
|
|
10
|
+
"whyNotFewer": "Combining all changes would mix CLI refactor, metadata parsing, formatting, and reporting behavior in one review unit.",
|
|
11
|
+
"whyNotMore": "No additional subsystem boundaries or migrations were found.",
|
|
12
|
+
"sprintProofs": [
|
|
13
|
+
"Sprint 1 proves CLI subcommand architecture without changing metadata behavior.",
|
|
14
|
+
"Sprint 2 proves metadata reading and formatting independently.",
|
|
15
|
+
"Sprint 3 proves cleanup reporting built on metadata reading."
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Audit Analysis
|
|
2
|
+
|
|
3
|
+
Use for broad quality, architecture, security, performance, or maintainability reviews.
|
|
4
|
+
|
|
5
|
+
## Inspect
|
|
6
|
+
|
|
7
|
+
1. Map entry points, package metadata, tests, and docs.
|
|
8
|
+
2. Sample each major subsystem enough to identify real patterns.
|
|
9
|
+
3. Let findings emerge from evidence; do not force a fixed checklist.
|
|
10
|
+
4. Group findings by independent remediation area.
|
|
11
|
+
|
|
12
|
+
## Findings
|
|
13
|
+
|
|
14
|
+
Each finding needs severity, evidence, affected files, impact, and recommended remediation.
|
|
15
|
+
|
|
16
|
+
## Sizing signals
|
|
17
|
+
|
|
18
|
+
Audits commonly produce multiple sprints when findings affect independent subsystems or risk classes. Avoid over-splitting cosmetic issues that can be resolved together.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Bugfix Analysis
|
|
2
|
+
|
|
3
|
+
Use for broken behavior, regressions, or incorrect outputs.
|
|
4
|
+
|
|
5
|
+
## Inspect
|
|
6
|
+
|
|
7
|
+
1. Reproduce or restate the failure precisely.
|
|
8
|
+
2. Trace the failing path from input to output.
|
|
9
|
+
3. Identify root cause and blast radius.
|
|
10
|
+
4. Search for the same pattern in nearby code.
|
|
11
|
+
5. Find the narrowest verification that proves the fix.
|
|
12
|
+
|
|
13
|
+
## Findings
|
|
14
|
+
|
|
15
|
+
Document root cause, affected files, reproduction, expected behavior, proposed fix, and tests.
|
|
16
|
+
|
|
17
|
+
## Sizing signals
|
|
18
|
+
|
|
19
|
+
Use one sprint for localized fixes. Split only when reproduction, infrastructure, migration, or broad duplicated patterns require independent proof.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Feature Analysis
|
|
2
|
+
|
|
3
|
+
Use for new user-visible behavior or capability changes.
|
|
4
|
+
|
|
5
|
+
## Inspect
|
|
6
|
+
|
|
7
|
+
1. Identify the public interface affected: command, API, UI, config, or artifact.
|
|
8
|
+
2. Trace the smallest existing path that owns similar behavior.
|
|
9
|
+
3. Read only the files needed to understand integration points, tests, and docs.
|
|
10
|
+
4. Capture risks from compatibility, persistence, validation, or missing tests.
|
|
11
|
+
|
|
12
|
+
## Findings
|
|
13
|
+
|
|
14
|
+
Write findings only for distinct implementation concerns. Do not split by task labels alone.
|
|
15
|
+
|
|
16
|
+
Each finding must include:
|
|
17
|
+
|
|
18
|
+
- summary
|
|
19
|
+
- affected files or modules
|
|
20
|
+
- user-visible behavior
|
|
21
|
+
- implementation recommendation
|
|
22
|
+
- validation approach
|
|
23
|
+
|
|
24
|
+
## Sizing signals
|
|
25
|
+
|
|
26
|
+
Multiple sprints are justified when the feature has a dependency chain, public interface change, reusable foundation, separate review units, or risk that should be proven independently.
|
|
27
|
+
|
|
28
|
+
One sprint is acceptable when the change is cohesive, low risk, and can be reviewed end-to-end safely.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# New Project Analysis
|
|
2
|
+
|
|
3
|
+
Use when creating a new package, app, CLI, or workflow from scratch.
|
|
4
|
+
|
|
5
|
+
## Inspect
|
|
6
|
+
|
|
7
|
+
1. Clarify the user goal, target audience, and first usable slice.
|
|
8
|
+
2. Identify comparable local patterns or repo conventions.
|
|
9
|
+
3. Choose the minimum architecture needed for the first release.
|
|
10
|
+
4. List unknowns that block implementation.
|
|
11
|
+
|
|
12
|
+
## Findings
|
|
13
|
+
|
|
14
|
+
Document scope, non-goals, interfaces, stack decisions, risks, and first milestone.
|
|
15
|
+
|
|
16
|
+
## Sizing signals
|
|
17
|
+
|
|
18
|
+
Multiple sprints are justified for scaffolding, core behavior, publishing, or integration phases that prove independently valuable milestones. Avoid planning speculative future features.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Refactor Analysis
|
|
2
|
+
|
|
3
|
+
Use for structural changes that preserve intended behavior.
|
|
4
|
+
|
|
5
|
+
## Inspect
|
|
6
|
+
|
|
7
|
+
1. Identify the behavior that must remain stable.
|
|
8
|
+
2. Map coupling, ownership boundaries, and current tests.
|
|
9
|
+
3. Find the smallest safe sequence of changes.
|
|
10
|
+
4. Note compatibility or migration constraints.
|
|
11
|
+
|
|
12
|
+
## Findings
|
|
13
|
+
|
|
14
|
+
Document current structure, target structure, affected modules, risks, and verification gates.
|
|
15
|
+
|
|
16
|
+
## Sizing signals
|
|
17
|
+
|
|
18
|
+
Split when a foundation must land before consumers, when compatibility must be preserved, or when review units would otherwise mix unrelated concerns. Keep as one sprint for local cleanups with strong tests.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Tech Debt Analysis
|
|
2
|
+
|
|
3
|
+
Use for cleanup, modernization, dependency, or maintainability work.
|
|
4
|
+
|
|
5
|
+
## Inspect
|
|
6
|
+
|
|
7
|
+
1. Identify debt symptoms and the behavior they affect.
|
|
8
|
+
2. Separate blocking debt from cosmetic cleanup.
|
|
9
|
+
3. Check tests, build health, and known constraints.
|
|
10
|
+
4. Prioritize by risk reduction and unblock value.
|
|
11
|
+
|
|
12
|
+
## Findings
|
|
13
|
+
|
|
14
|
+
Document debt item, impact, affected files, remediation, and validation.
|
|
15
|
+
|
|
16
|
+
## Sizing signals
|
|
17
|
+
|
|
18
|
+
Split debt work when items have different risk profiles, owners, or dependency order. Group small related cleanups when they share the same verification path.
|
|
@@ -1,103 +1,72 @@
|
|
|
1
|
-
# INIT Mode — Analysis, Roadmap & Scoped State
|
|
1
|
+
# INIT Mode — Lean Analysis, Roadmap & Scoped State
|
|
2
2
|
|
|
3
|
-
Use INIT when a scope has no Kyro roadmap
|
|
3
|
+
Use INIT when a scope has no Kyro roadmap. Optimize for justified sprint boundaries, not fewer sprints.
|
|
4
4
|
|
|
5
5
|
## Inputs
|
|
6
6
|
|
|
7
7
|
- User request and current repository path.
|
|
8
8
|
- `.agents/kyro/kyro.json` if present.
|
|
9
|
-
- `../helpers/analysis
|
|
9
|
+
- One work-type helper under `../helpers/analysis/` after routing.
|
|
10
10
|
- Templates only when writing their artifact.
|
|
11
11
|
|
|
12
12
|
## Step 1 — Resolve scope
|
|
13
13
|
|
|
14
|
-
Determine
|
|
15
|
-
|
|
16
|
-
| Field | Rule |
|
|
17
|
-
|-------|------|
|
|
18
|
-
| scope | Short kebab-case work topic, not the repo name. |
|
|
19
|
-
| codebasePath | Usually current working directory. |
|
|
20
|
-
| outputDir | Default `.agents/kyro/scopes/{scope}/`. |
|
|
21
|
-
|
|
22
|
-
If scope or output directory is ambiguous, ask once. Then create the scoped directory structure.
|
|
14
|
+
Determine `scope`, `codebasePath`, and `outputDir` (`.agents/kyro/scopes/{scope}/`). If scope or output directory is ambiguous, ask once. If the output directory exists, ask whether to resume or choose a different scope.
|
|
23
15
|
|
|
24
16
|
## Step 2 — Detect work type
|
|
25
17
|
|
|
26
|
-
Classify
|
|
18
|
+
Classify as `feature`, `bugfix`, `audit`, `refactor`, `new-project`, or `tech-debt`. Load only the matching helper:
|
|
27
19
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
```text
|
|
21
|
+
../helpers/analysis/{workType}.md
|
|
22
|
+
```
|
|
31
23
|
|
|
32
|
-
|
|
33
|
-
- Feature: integration points and missing behavior.
|
|
34
|
-
- Bugfix: reproduce, root cause, blast radius.
|
|
35
|
-
- New project: requirements and comparable patterns.
|
|
36
|
-
- Tech debt: debt indicators and cleanup targets.
|
|
24
|
+
## Step 3 — Analyze
|
|
37
25
|
|
|
38
|
-
Let evidence determine findings. Do not force
|
|
26
|
+
Use project search/read tools only for the detected work type. Let evidence determine findings. Do not force category counts or split work by labels alone.
|
|
39
27
|
|
|
40
28
|
## Step 4 — Write findings
|
|
41
29
|
|
|
42
|
-
Write each distinct finding to `{outputDir}/findings/NN-descriptive-slug.md
|
|
30
|
+
Write each distinct finding to `{outputDir}/findings/NN-descriptive-slug.md` with summary, severity, affected files, details, recommendation, and validation.
|
|
43
31
|
|
|
44
|
-
|
|
32
|
+
## Step 5 — Decide sprint sizing
|
|
45
33
|
|
|
46
|
-
|
|
34
|
+
Before writing the roadmap, produce `sizingDecision`:
|
|
47
35
|
|
|
48
|
-
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"recommendedSprintCount": 1,
|
|
39
|
+
"riskLevel": "low | medium | high",
|
|
40
|
+
"rationale": "...",
|
|
41
|
+
"splitTriggers": [],
|
|
42
|
+
"whyNotFewer": "...",
|
|
43
|
+
"whyNotMore": "...",
|
|
44
|
+
"sprintProofs": []
|
|
45
|
+
}
|
|
46
|
+
```
|
|
49
47
|
|
|
50
|
-
-
|
|
51
|
-
- finding-to-sprint map
|
|
52
|
-
- sprint dependencies
|
|
53
|
-
- sprint title/focus/type/version target
|
|
54
|
-
- suggested phases
|
|
55
|
-
- sprint summary table
|
|
48
|
+
Consistency rules: count must match planned sprints; `sprintProofs.length` must match count; every sprint needs one proof; multi-sprint plans need non-empty `splitTriggers`; `whyNotFewer` and `whyNotMore` cannot be empty.
|
|
56
49
|
|
|
57
|
-
## Step 6 —
|
|
50
|
+
## Step 6 — Write artifacts
|
|
58
51
|
|
|
59
52
|
Load templates only when writing:
|
|
60
53
|
|
|
61
|
-
- `../templates/
|
|
62
|
-
- `../templates/
|
|
54
|
+
- `../templates/ROADMAP.md` with paths, `sizingDecision`, dependency map, sprint summary, and sprint definitions.
|
|
55
|
+
- `../templates/PROJECT-README.md` for scope overview.
|
|
56
|
+
- `../templates/REENTRY-PROMPTS.md` for summary-first recovery.
|
|
63
57
|
|
|
64
|
-
Create `{outputDir}/phases/` empty.
|
|
58
|
+
Create `{outputDir}/phases/` empty.
|
|
65
59
|
|
|
66
60
|
## Step 7 — Write structured routing files
|
|
67
61
|
|
|
68
|
-
Create
|
|
69
|
-
|
|
70
|
-
- `{outputDir}/state.json` from `../templates/state.json`
|
|
71
|
-
- `{outputDir}/index.json` from `../templates/index.json`
|
|
72
|
-
- `{outputDir}/ROADMAP.summary.json` from `../templates/ROADMAP.summary.json`
|
|
73
|
-
|
|
74
|
-
Initial values:
|
|
75
|
-
|
|
76
|
-
```json
|
|
77
|
-
{
|
|
78
|
-
"status": "planning",
|
|
79
|
-
"activeSprint": null,
|
|
80
|
-
"currentPhase": "init",
|
|
81
|
-
"nextAction": "plan_sprint"
|
|
82
|
-
}
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
Update `.agents/kyro/kyro.json` so `scopes` includes this scope and `activeScope` points to it when appropriate.
|
|
62
|
+
Create `state.json`, `index.json`, and `ROADMAP.summary.json`. Include `sizingDecision` in `index.json` and `ROADMAP.summary.json`. Update `.agents/kyro/kyro.json` with the scope and activeScope when appropriate.
|
|
86
63
|
|
|
87
64
|
## Output
|
|
88
65
|
|
|
89
|
-
Report:
|
|
90
|
-
|
|
91
|
-
- scope
|
|
92
|
-
- work type
|
|
93
|
-
- number of findings
|
|
94
|
-
- planned sprint count
|
|
95
|
-
- files created
|
|
96
|
-
- next action: run `kyro-forge` to plan Sprint 1
|
|
66
|
+
Report scope, work type, finding count, sprint count, sizing rationale, files created, and next action: run `kyro-forge` to plan Sprint 1.
|
|
97
67
|
|
|
98
68
|
## Rules
|
|
99
69
|
|
|
100
70
|
- `kyro install` never creates scoped `state.json`; INIT does.
|
|
101
71
|
- Markdown is durable evidence; JSON is the fast routing index.
|
|
102
|
-
- Do not load sprint templates, debt tracker,
|
|
103
|
-
- If the output directory already exists, ask whether to resume or choose a different scope.
|
|
72
|
+
- Do not load sprint templates, debt tracker, execution modes, or unrelated analysis helpers during INIT.
|
|
@@ -27,45 +27,16 @@ related:
|
|
|
27
27
|
> Created: {date}
|
|
28
28
|
> Codebase: `{codebase_path}`
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
## What Is This
|
|
33
|
-
|
|
34
|
-
This directory contains the working artifacts for {description_of_work}. It is managed by the `kyro-ai` skill and follows an adaptive sprint workflow.
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## For AI Agents — Mandatory Reading Order
|
|
39
|
-
|
|
40
|
-
If you are an AI agent resuming work on this project, read these files in order:
|
|
41
|
-
|
|
42
|
-
1. **This README** — You are here. Understand the project structure.
|
|
43
|
-
2. **ROADMAP.md** — The adaptive roadmap with all planned sprints and execution rules.
|
|
44
|
-
3. **Last completed sprint** — The most recent sprint file in `phases/`. Read its retro, recommendations, and debt table.
|
|
45
|
-
4. **RE-ENTRY-PROMPTS.md** — Pre-written prompts for common actions. Copy the appropriate one.
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## Directory Structure
|
|
30
|
+
This directory stores Kyro artifacts for `{scope}`. Use structured summaries first; open Markdown only when a router needs durable evidence.
|
|
50
31
|
|
|
51
|
-
|
|
52
|
-
{output_kyro_dir}/
|
|
53
|
-
├── README.md ← This file
|
|
54
|
-
├── ROADMAP.md ← Adaptive roadmap (living document)
|
|
55
|
-
├── RE-ENTRY-PROMPTS.md ← Context recovery prompts
|
|
56
|
-
├── findings/ ← Analysis findings (one file per area)
|
|
57
|
-
│ ├── 01-{slug}.md
|
|
58
|
-
│ ├── 02-{slug}.md
|
|
59
|
-
│ └── ...
|
|
60
|
-
└── phases/ ← Sprint documents (generated one at a time)
|
|
61
|
-
├── SPRINT-1-{slug}.md
|
|
62
|
-
├── SPRINT-2-{slug}.md
|
|
63
|
-
└── ...
|
|
64
|
-
```
|
|
32
|
+
## Quick Resume
|
|
65
33
|
|
|
66
|
-
|
|
34
|
+
1. Read `state.json`.
|
|
35
|
+
2. Read `index.json`.
|
|
36
|
+
3. Read `ROADMAP.summary.json`.
|
|
37
|
+
4. Run `kyro-forge`, `kyro-status`, or `kyro-wrap-up`.
|
|
67
38
|
|
|
68
|
-
##
|
|
39
|
+
## Paths
|
|
69
40
|
|
|
70
41
|
| Resource | Path |
|
|
71
42
|
|----------|------|
|
|
@@ -74,34 +45,19 @@ If you are an AI agent resuming work on this project, read these files in order:
|
|
|
74
45
|
| Findings | `{output_kyro_dir}/findings/` |
|
|
75
46
|
| Sprints | `{output_kyro_dir}/phases/` |
|
|
76
47
|
| Roadmap | `{output_kyro_dir}/ROADMAP.md` |
|
|
77
|
-
| Re-entry
|
|
78
|
-
|
|
79
|
-
---
|
|
48
|
+
| Re-entry | `{output_kyro_dir}/RE-ENTRY-PROMPTS.md` |
|
|
80
49
|
|
|
81
|
-
##
|
|
82
|
-
|
|
83
|
-
1. Sprints are generated **one at a time** — never pre-generated
|
|
84
|
-
2. Each sprint feeds from the previous sprint's retro and recommendations
|
|
85
|
-
3. The accumulated debt table passes from sprint to sprint, never losing items
|
|
86
|
-
4. The roadmap adapts based on what execution reveals
|
|
87
|
-
5. Re-entry prompts are updated after each sprint for context persistence
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
## Current State — Baseline
|
|
92
|
-
|
|
93
|
-
<!-- Filled during INIT with baseline metrics -->
|
|
50
|
+
## Current State
|
|
94
51
|
|
|
95
52
|
| Metric | Value |
|
|
96
53
|
|--------|-------|
|
|
97
|
-
|
|
|
98
|
-
|
|
99
|
-
|
|
54
|
+
| Work type | {work_type} |
|
|
55
|
+
| Planned sprints | {planned_sprint_count} |
|
|
56
|
+
| Active sprint | {active_sprint} |
|
|
57
|
+
| Next action | {next_action} |
|
|
100
58
|
|
|
101
59
|
## Sprint Map
|
|
102
60
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
|
106
|
-
|--------|--------|-------|-----------------|
|
|
107
|
-
| 1 | {status} | {focus} | {deliverables} |
|
|
61
|
+
| Sprint | Status | Focus | Proof |
|
|
62
|
+
|--------|--------|-------|-------|
|
|
63
|
+
| 1 | {status} | {focus} | {sprint_proof} |
|
|
@@ -27,106 +27,37 @@ related:
|
|
|
27
27
|
> Last updated: {date}
|
|
28
28
|
> Current sprint: {current_sprint_number}
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
Use these prompts to resume through summary-first routing. Open long Markdown only when a router asks for it.
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
## Output Directory
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
{output_kyro_dir}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
This is where all kyro-ai documents for this project live. All file paths below are relative to this directory.
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
## Quick Reference
|
|
45
|
-
|
|
46
|
-
| Sprint | File | Status |
|
|
47
|
-
|--------|------|--------|
|
|
48
|
-
| 1 | `phases/SPRINT-1-{slug}.md` | {status} |
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## Dynamic Paths
|
|
32
|
+
## Fast Context
|
|
53
33
|
|
|
54
34
|
| Resource | Path |
|
|
55
35
|
|----------|------|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
| Roadmap | `{output_kyro_dir}/ROADMAP.
|
|
59
|
-
|
|
|
60
|
-
|
|
61
|
-
---
|
|
36
|
+
| State | `{output_kyro_dir}/state.json` |
|
|
37
|
+
| Index | `{output_kyro_dir}/index.json` |
|
|
38
|
+
| Roadmap Summary | `{output_kyro_dir}/ROADMAP.summary.json` |
|
|
39
|
+
| Sprints | `{output_kyro_dir}/phases/` |
|
|
62
40
|
|
|
63
|
-
##
|
|
64
|
-
|
|
65
|
-
Use this prompt when INIT has been completed and you need to generate Sprint 1.
|
|
41
|
+
## Resume Planning
|
|
66
42
|
|
|
43
|
+
```text
|
|
44
|
+
Continue Kyro scope `{scope}`. Read `{output_kyro_dir}/state.json`, `{output_kyro_dir}/index.json`, and `{output_kyro_dir}/ROADMAP.summary.json` first. Then use kyro-forge to plan the next sprint. Open ROADMAP.md or finding Markdown only if the router requests missing details.
|
|
67
45
|
```
|
|
68
|
-
I'm working on the {scope} project. The analysis and roadmap have been created.
|
|
69
46
|
|
|
70
|
-
|
|
71
|
-
1. {output_kyro_dir}/README.md
|
|
72
|
-
2. {output_kyro_dir}/ROADMAP.md
|
|
73
|
-
3. The finding files in {output_kyro_dir}/findings/
|
|
47
|
+
## Resume Execution
|
|
74
48
|
|
|
75
|
-
|
|
76
|
-
and the
|
|
49
|
+
```text
|
|
50
|
+
Continue active Kyro sprint for `{scope}`. Read state.json and index.json first, then the active SPRINT summary JSON if present. Use kyro-forge to route to execution, review, close, or recover. Open sprint Markdown only when required for the active task.
|
|
77
51
|
```
|
|
78
52
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
## Scenario 2 — Next Sprint (Sprint N)
|
|
82
|
-
|
|
83
|
-
Use this prompt when Sprint N-1 is complete and you need to generate Sprint N.
|
|
84
|
-
|
|
85
|
-
```
|
|
86
|
-
I'm continuing work on the {scope} project. Sprint {N-1} has been completed.
|
|
87
|
-
|
|
88
|
-
Read these files in order:
|
|
89
|
-
1. {output_kyro_dir}/README.md
|
|
90
|
-
2. {output_kyro_dir}/ROADMAP.md
|
|
91
|
-
3. {output_kyro_dir}/phases/{last_sprint_file} (pay attention to Retro, Recommendations, and Debt table)
|
|
92
|
-
4. The finding file(s) for Sprint {N}: {output_kyro_dir}/findings/{next_finding_file}
|
|
93
|
-
|
|
94
|
-
Then use /kyro:forge to generate Sprint {N}. Ensure all recommendations from Sprint {N-1}
|
|
95
|
-
are addressed in the Disposition table.
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## Scenario 3 — Execute Current Sprint
|
|
101
|
-
|
|
102
|
-
Use this prompt when a sprint has been generated but not yet executed.
|
|
103
|
-
|
|
104
|
-
```
|
|
105
|
-
I'm working on the {scope} project. Sprint {N} has been generated and needs execution.
|
|
106
|
-
|
|
107
|
-
Read these files in order:
|
|
108
|
-
1. {output_kyro_dir}/README.md
|
|
109
|
-
2. {output_kyro_dir}/ROADMAP.md
|
|
110
|
-
3. {output_kyro_dir}/phases/{current_sprint_file}
|
|
111
|
-
|
|
112
|
-
Then use /kyro:forge to execute Sprint {N}. Work through each phase and task,
|
|
113
|
-
marking progress as you go. Add emergent phases if new work is discovered.
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## Scenario 4 — Check Project Status
|
|
119
|
-
|
|
120
|
-
Use this prompt to get a progress report.
|
|
53
|
+
## Status
|
|
121
54
|
|
|
55
|
+
```text
|
|
56
|
+
Report Kyro status for `{scope}`. Read state.json, index.json, ROADMAP.summary.json, SPRINT summaries, and DEBT.summary.json first. Use kyro-status brief unless full evidence is requested.
|
|
122
57
|
```
|
|
123
|
-
I need a status report on the {scope} project.
|
|
124
58
|
|
|
125
|
-
|
|
126
|
-
1. {output_kyro_dir}/README.md
|
|
127
|
-
2. {output_kyro_dir}/ROADMAP.md
|
|
128
|
-
3. All sprint files in {output_kyro_dir}/phases/
|
|
59
|
+
## Closeout
|
|
129
60
|
|
|
130
|
-
|
|
131
|
-
|
|
61
|
+
```text
|
|
62
|
+
Close the Kyro session for `{scope}`. Read state.json and index.json first, then use kyro-wrap-up. Update summaries and re-entry prompts after any Markdown changes.
|
|
132
63
|
```
|
|
@@ -26,8 +26,6 @@ related:
|
|
|
26
26
|
|
|
27
27
|
> Generated by `kyro-ai` on {date}
|
|
28
28
|
|
|
29
|
-
---
|
|
30
|
-
|
|
31
29
|
## Project Paths
|
|
32
30
|
|
|
33
31
|
| Path | Value |
|
|
@@ -37,80 +35,32 @@ related:
|
|
|
37
35
|
| Findings | `{output_kyro_dir}/findings/` |
|
|
38
36
|
| Sprints | `{output_kyro_dir}/phases/` |
|
|
39
37
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
## Execution Rules
|
|
43
|
-
|
|
44
|
-
These rules govern the entire sprint lifecycle. They are non-negotiable.
|
|
45
|
-
|
|
46
|
-
1. **Sprint-by-Sprint** — Sprints are generated ONE AT A TIME. Never pre-generate all sprints. Each sprint is informed by the results of the previous one.
|
|
47
|
-
2. **Retro Feeds Forward** — The retrospective and recommendations of Sprint N-1 are formal inputs for Sprint N. They cannot be ignored.
|
|
48
|
-
3. **Recommendations are Dispositioned** — Every recommendation from the previous sprint must either become a task or have its deferral justified in the Disposition table.
|
|
49
|
-
4. **Debt is Inherited** — The Accumulated Technical Debt table passes from sprint to sprint in full. Items are never deleted, only resolved.
|
|
50
|
-
5. **Phases are Suggested** — The roadmap defines suggested phases per sprint. During execution, emergent phases MUST be added when new work is discovered.
|
|
51
|
-
6. **Emergent Findings Generate Phases** — If execution reveals issues not covered by the plan, new phases are added to the current sprint.
|
|
52
|
-
7. **Re-entry Prompts are Updated** — After INIT and after each executed sprint, re-entry prompts are refreshed to reflect current state.
|
|
53
|
-
8. **Roadmap Adapts** — If execution reveals that planned sprints need modification, this roadmap is updated. The plan serves execution, not the reverse.
|
|
54
|
-
9. **Definition of Done** — Each sprint has explicit completion criteria. A sprint is not done until all DoD items are checked.
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Task States
|
|
59
|
-
|
|
60
|
-
| Symbol | State | Meaning |
|
|
61
|
-
|--------|-------|---------|
|
|
62
|
-
| `[ ]` | Pending | Not started |
|
|
63
|
-
| `[~]` | In Progress | Currently being worked on |
|
|
64
|
-
| `[x]` | Done | Completed and verified |
|
|
65
|
-
| `[!]` | Blocked | Cannot proceed — blocker documented |
|
|
66
|
-
| `[-]` | Skipped | Intentionally skipped with justification |
|
|
67
|
-
| `[>]` | Carry-over | Not completed — carried over to next sprint |
|
|
68
|
-
|
|
69
|
-
---
|
|
38
|
+
## Sprint Sizing Decision
|
|
70
39
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
40
|
+
```json
|
|
41
|
+
{sizing_decision_json}
|
|
42
|
+
```
|
|
74
43
|
|
|
75
|
-
|
|
76
|
-
|-------|-------------|
|
|
77
|
-
| Sprint # | Sequential number |
|
|
78
|
-
| Finding Source | Which finding file(s) this sprint addresses |
|
|
79
|
-
| Version Target | Target version after this sprint (if applicable) |
|
|
80
|
-
| Type | audit / refactor / feature / bugfix / debt |
|
|
81
|
-
| Focus | One-line description of the sprint's primary goal |
|
|
82
|
-
| Suggested Phases | Initial phases suggested by this roadmap (may expand during execution) |
|
|
83
|
-
| Dependencies | Which sprints must complete before this one |
|
|
44
|
+
Acceptance:
|
|
84
45
|
|
|
85
|
-
|
|
46
|
+
- `recommendedSprintCount` equals the sprint rows below.
|
|
47
|
+
- Each sprint has exactly one `sprintProofs` entry.
|
|
48
|
+
- Multi-sprint plans include at least one `splitTriggers` entry.
|
|
49
|
+
- `whyNotFewer` and `whyNotMore` are non-empty.
|
|
86
50
|
|
|
87
51
|
## Dependency Map
|
|
88
52
|
|
|
89
|
-
|
|
90
|
-
<!-- Example:
|
|
91
|
-
Sprint 1 → Sprint 2 → Sprint 3
|
|
92
|
-
↘ Sprint 4 → Sprint 5
|
|
93
|
-
-->
|
|
94
|
-
|
|
95
|
-
```
|
|
53
|
+
```text
|
|
96
54
|
{dependency_diagram}
|
|
97
55
|
```
|
|
98
56
|
|
|
99
|
-
---
|
|
100
|
-
|
|
101
57
|
## Sprint Summary
|
|
102
58
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
|
106
|
-
|--------|--------------|---------|------|-------|-------------|--------|
|
|
107
|
-
| 1 | `{finding_file}` | {version} | {type} | {focus} | — | pending |
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Detailed Sprint Definitions
|
|
59
|
+
| Sprint | Finding Source | Version | Type | Focus | Dependencies | Proof | Status |
|
|
60
|
+
|--------|----------------|---------|------|-------|--------------|-------|--------|
|
|
61
|
+
| 1 | `{finding_file}` | {version} | {type} | {focus} | — | {sprint_proof} | pending |
|
|
112
62
|
|
|
113
|
-
|
|
63
|
+
## Sprint Definitions
|
|
114
64
|
|
|
115
65
|
### Sprint 1 — {title}
|
|
116
66
|
|
|
@@ -119,8 +69,9 @@ Sprint 1 → Sprint 2 → Sprint 3
|
|
|
119
69
|
- **Type**: {type}
|
|
120
70
|
- **Focus**: {focus}
|
|
121
71
|
- **Dependencies**: None
|
|
72
|
+
- **Proof**: {sprint_proof}
|
|
122
73
|
- **Suggested Phases**:
|
|
123
74
|
1. {phase_1_name} — {phase_1_description}
|
|
124
75
|
2. {phase_2_name} — {phase_2_description}
|
|
125
76
|
|
|
126
|
-
<!-- Add
|
|
77
|
+
<!-- Add only justified sprints. Optimize for justified boundaries, not fewer sprints. -->
|
|
@@ -6,6 +6,15 @@
|
|
|
6
6
|
"plannedSprintCount": 0,
|
|
7
7
|
"completedSprintCount": 0,
|
|
8
8
|
"adaptationCount": 0,
|
|
9
|
+
"sizingDecision": {
|
|
10
|
+
"recommendedSprintCount": 0,
|
|
11
|
+
"riskLevel": "low",
|
|
12
|
+
"rationale": "{sizing_rationale}",
|
|
13
|
+
"splitTriggers": [],
|
|
14
|
+
"whyNotFewer": "{why_not_fewer}",
|
|
15
|
+
"whyNotMore": "{why_not_more}",
|
|
16
|
+
"sprintProofs": []
|
|
17
|
+
},
|
|
9
18
|
"nextRecommendedAction": "plan_sprint",
|
|
10
19
|
"openDecisions": [],
|
|
11
20
|
"relevantArtifactPaths": [
|
|
@@ -5,6 +5,15 @@
|
|
|
5
5
|
"activeSprintSummary": null,
|
|
6
6
|
"openDebtCount": 0,
|
|
7
7
|
"nextTask": null,
|
|
8
|
+
"sizingDecision": {
|
|
9
|
+
"recommendedSprintCount": 0,
|
|
10
|
+
"riskLevel": "low",
|
|
11
|
+
"rationale": "{sizing_rationale}",
|
|
12
|
+
"splitTriggers": [],
|
|
13
|
+
"whyNotFewer": "{why_not_fewer}",
|
|
14
|
+
"whyNotMore": "{why_not_more}",
|
|
15
|
+
"sprintProofs": []
|
|
16
|
+
},
|
|
8
17
|
"relevantArtifactPaths": {
|
|
9
18
|
"roadmap": ".agents/kyro/scopes/{scope}/ROADMAP.md",
|
|
10
19
|
"roadmapSummary": ".agents/kyro/scopes/{scope}/ROADMAP.summary.json",
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
# Analysis Guide
|
|
2
|
-
|
|
3
|
-
This helper guides the agent through deep analysis for different types of work. The analysis phase is the foundation of the entire sprint workflow — thoroughness here determines the quality of everything that follows.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Core Principle
|
|
8
|
-
|
|
9
|
-
> **The analysis dictates the structure, not the reverse.**
|
|
10
|
-
>
|
|
11
|
-
> Do NOT start with a fixed list of categories. Explore the project first, then let the findings define the categories. If the project has 3 problem areas, there are 3 finding files. If it has 15, there are 15.
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Step 1 — Detect Work Type
|
|
16
|
-
|
|
17
|
-
Before analyzing, identify what kind of work this is:
|
|
18
|
-
|
|
19
|
-
| Work Type | Signals | Focus |
|
|
20
|
-
|-----------|---------|-------|
|
|
21
|
-
| **Audit / Refactor** | "analyze", "audit", "refactor", "review" | Comprehensive codebase exploration |
|
|
22
|
-
| **New Feature** | "add", "implement", "create feature" | Current state + gap analysis |
|
|
23
|
-
| **Bugfix** | "fix", "broken", "error", "regression" | Root cause analysis |
|
|
24
|
-
| **New Project** | "start from scratch", "new project", "build" | Scope definition + planning |
|
|
25
|
-
| **Tech Debt** | "clean up", "deprecated", "missing tests" | Debt inventory + prioritization |
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Step 2 — Analysis by Work Type
|
|
30
|
-
|
|
31
|
-
### Audit / Refactor
|
|
32
|
-
|
|
33
|
-
This is the most comprehensive analysis type. Explore the **entire** codebase systematically.
|
|
34
|
-
|
|
35
|
-
**Exploration Strategy**:
|
|
36
|
-
1. Start with the project root: directory structure, configuration files, entry points
|
|
37
|
-
2. Read key architectural files: main entry, routing, state management, data layer
|
|
38
|
-
3. Explore each major directory/module
|
|
39
|
-
4. Check test coverage and quality
|
|
40
|
-
5. Review dependencies and their versions
|
|
41
|
-
6. Look for patterns and anti-patterns
|
|
42
|
-
|
|
43
|
-
**What to look for** (examples — the actual areas emerge from the project):
|
|
44
|
-
- Architecture: layer separation, dependency direction, coupling
|
|
45
|
-
- API surface: public interfaces, consistency, documentation
|
|
46
|
-
- Component quality: reuse, composition, prop drilling, state management
|
|
47
|
-
- Type safety: any usage, missing types, type assertions
|
|
48
|
-
- Error handling: consistency, coverage, user-facing messages
|
|
49
|
-
- Testing: coverage, quality, missing tests, test patterns
|
|
50
|
-
- Documentation: inline docs, README, API docs
|
|
51
|
-
- Dependencies: outdated, unused, security vulnerabilities
|
|
52
|
-
- Performance: obvious bottlenecks, unnecessary re-renders, heavy computations
|
|
53
|
-
- Accessibility: semantic HTML, ARIA, keyboard navigation
|
|
54
|
-
|
|
55
|
-
**DO NOT** use this list as a checklist. Let the project tell you what matters.
|
|
56
|
-
|
|
57
|
-
### New Feature
|
|
58
|
-
|
|
59
|
-
Focus on understanding what exists and what needs to change.
|
|
60
|
-
|
|
61
|
-
**Exploration Strategy**:
|
|
62
|
-
1. Understand the current architecture relevant to the feature
|
|
63
|
-
2. Identify where the feature will integrate
|
|
64
|
-
3. Map existing patterns the feature should follow
|
|
65
|
-
4. Identify gaps between current state and requirements
|
|
66
|
-
|
|
67
|
-
**What to document**:
|
|
68
|
-
- Current state of related functionality
|
|
69
|
-
- Integration points (APIs, components, data flows)
|
|
70
|
-
- Patterns to follow (existing conventions)
|
|
71
|
-
- Requirements and acceptance criteria
|
|
72
|
-
- Technical risks and unknowns
|
|
73
|
-
|
|
74
|
-
### Bugfix
|
|
75
|
-
|
|
76
|
-
Focus on reproducing, understanding, and scoping the fix.
|
|
77
|
-
|
|
78
|
-
**Exploration Strategy**:
|
|
79
|
-
1. Reproduce the bug (or understand the reproduction steps)
|
|
80
|
-
2. Trace the code path involved
|
|
81
|
-
3. Identify the root cause
|
|
82
|
-
4. Assess blast radius (what else could be affected)
|
|
83
|
-
|
|
84
|
-
**What to document**:
|
|
85
|
-
- Bug description and reproduction steps
|
|
86
|
-
- Root cause analysis
|
|
87
|
-
- Affected code paths and files
|
|
88
|
-
- Related code that may have the same pattern (similar bugs)
|
|
89
|
-
- Proposed fix approach
|
|
90
|
-
- Testing strategy
|
|
91
|
-
|
|
92
|
-
### New Project
|
|
93
|
-
|
|
94
|
-
Focus on defining what will be built and how.
|
|
95
|
-
|
|
96
|
-
**Exploration Strategy**:
|
|
97
|
-
1. Understand the requirements / product idea
|
|
98
|
-
2. Research comparable projects or solutions
|
|
99
|
-
3. Define the technical stack
|
|
100
|
-
4. Plan the project structure
|
|
101
|
-
|
|
102
|
-
**What to document**:
|
|
103
|
-
- Project scope and boundaries
|
|
104
|
-
- Technical stack decisions (with justification)
|
|
105
|
-
- Proposed architecture
|
|
106
|
-
- Key design decisions
|
|
107
|
-
- Risks and unknowns
|
|
108
|
-
- Initial structure / scaffolding plan
|
|
109
|
-
|
|
110
|
-
### Tech Debt
|
|
111
|
-
|
|
112
|
-
Focus on inventorying and prioritizing existing debt.
|
|
113
|
-
|
|
114
|
-
**Exploration Strategy**:
|
|
115
|
-
1. Scan the codebase for debt indicators
|
|
116
|
-
2. Categorize debt by type and location
|
|
117
|
-
3. Assess impact of each debt item
|
|
118
|
-
4. Prioritize by impact vs effort
|
|
119
|
-
|
|
120
|
-
**What to document**:
|
|
121
|
-
- Debt inventory (categorized)
|
|
122
|
-
- Impact assessment per item
|
|
123
|
-
- Dependency relationships (which debt blocks other work)
|
|
124
|
-
- Prioritized resolution order
|
|
125
|
-
- Quick wins vs long-term refactors
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## Step 3 — Document Findings
|
|
130
|
-
|
|
131
|
-
Each finding becomes a separate file. This is important for:
|
|
132
|
-
- **Granularity**: Each area can be addressed independently
|
|
133
|
-
- **Sprint mapping**: Each finding maps to one or more sprints
|
|
134
|
-
- **Progress tracking**: As sprints complete, findings are resolved
|
|
135
|
-
|
|
136
|
-
### Finding File Format
|
|
137
|
-
|
|
138
|
-
**Filename**: `NN-descriptive-slug.md` (e.g., `01-architecture-layers.md`, `02-api-inconsistencies.md`)
|
|
139
|
-
|
|
140
|
-
**Content**:
|
|
141
|
-
|
|
142
|
-
```
|
|
143
|
-
---
|
|
144
|
-
title: "Finding: {Title}"
|
|
145
|
-
date: "{date}"
|
|
146
|
-
updated: "{date}"
|
|
147
|
-
scope: "{scope}"
|
|
148
|
-
type: "analysis"
|
|
149
|
-
status: "active"
|
|
150
|
-
version: "1.0"
|
|
151
|
-
severity: "{critical | high | medium | low}"
|
|
152
|
-
agents:
|
|
153
|
-
- "{agent_model}"
|
|
154
|
-
tags:
|
|
155
|
-
- "{scope}"
|
|
156
|
-
- "analysis"
|
|
157
|
-
- "finding"
|
|
158
|
-
changelog:
|
|
159
|
-
- version: "1.0"
|
|
160
|
-
date: "{date}"
|
|
161
|
-
changes: ["Finding documented"]
|
|
162
|
-
related:
|
|
163
|
-
- "[[ROADMAP]]"
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
# Finding: {Title}
|
|
167
|
-
|
|
168
|
-
## Summary
|
|
169
|
-
|
|
170
|
-
{2-3 sentence summary of the finding}
|
|
171
|
-
|
|
172
|
-
## Severity / Impact
|
|
173
|
-
|
|
174
|
-
{critical | high | medium | low} — {Why this level}
|
|
175
|
-
|
|
176
|
-
## Details
|
|
177
|
-
|
|
178
|
-
{Detailed description of the finding. Include specific examples from the code.}
|
|
179
|
-
|
|
180
|
-
## Affected Files
|
|
181
|
-
|
|
182
|
-
- `path/to/file1.dart`
|
|
183
|
-
- `path/to/file2.dart`
|
|
184
|
-
|
|
185
|
-
## Recommendations
|
|
186
|
-
|
|
187
|
-
1. {Specific, actionable recommendation}
|
|
188
|
-
2. {Another recommendation}
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### Numbering
|
|
192
|
-
|
|
193
|
-
- Use sequential numbering: `01-`, `02-`, `03-`, ...
|
|
194
|
-
- The number determines the default sprint order (finding 01 → Sprint 1)
|
|
195
|
-
- This is a suggestion, not a rule — the roadmap may reorder based on dependencies
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## Step 4 — Determine Sprint Count
|
|
200
|
-
|
|
201
|
-
The number of sprints emerges from the number of distinct finding areas:
|
|
202
|
-
|
|
203
|
-
- **Small project / bugfix**: 1-3 findings → 1-3 sprints
|
|
204
|
-
- **Medium refactor**: 5-8 findings → 5-8 sprints
|
|
205
|
-
- **Major audit**: 10-20 findings → 10-20 sprints
|
|
206
|
-
|
|
207
|
-
Some findings may be grouped into a single sprint if they are small and related. Some large findings may be split across multiple sprints. The roadmap makes these decisions.
|