@kody-ade/kody-engine 0.2.63 → 0.3.1

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.
Files changed (32) hide show
  1. package/README.md +24 -24
  2. package/dist/bin/{kody2.js → kody.js} +270 -164
  3. package/dist/executables/bug/profile.json +6 -6
  4. package/dist/executables/chore/profile.json +6 -6
  5. package/dist/executables/classify/profile.json +1 -1
  6. package/dist/executables/feature/profile.json +6 -6
  7. package/dist/executables/fix/profile.json +20 -3
  8. package/dist/executables/fix/prompt.md +1 -1
  9. package/dist/executables/fix-ci/profile.json +1 -1
  10. package/dist/executables/init/profile.json +1 -1
  11. package/dist/executables/plan/profile.json +23 -3
  12. package/dist/executables/plan/prompt.md +117 -9
  13. package/dist/executables/plan-verify/profile.json +2 -2
  14. package/dist/executables/plan-verify/prompt.md +1 -1
  15. package/dist/executables/research/profile.json +25 -3
  16. package/dist/executables/research/prompt.md +4 -0
  17. package/dist/executables/resolve/profile.json +1 -1
  18. package/dist/executables/review/profile.json +20 -3
  19. package/dist/executables/run/profile.json +1 -1
  20. package/dist/executables/run/prompt.md +2 -2
  21. package/dist/executables/spec/profile.json +4 -4
  22. package/dist/executables/sync/profile.json +1 -1
  23. package/dist/executables/types.ts +3 -3
  24. package/dist/executables/ui-review/profile.json +10 -4
  25. package/dist/executables/ui-review/prompt.md +8 -8
  26. package/dist/plugins/commands/kody-live-probe.md +2 -2
  27. package/dist/plugins/skills/kody-live-marker/SKILL.md +3 -3
  28. package/dist/plugins/test-plugin/.claude-plugin/plugin.json +2 -2
  29. package/dist/plugins/test-plugin/skills/kody-plugin-marker/SKILL.md +2 -2
  30. package/kody.config.schema.json +3 -3
  31. package/package.json +4 -4
  32. package/templates/{kody2.yml → kody.yml} +16 -16
@@ -33,7 +33,7 @@
33
33
  "with": {
34
34
  "label": "kody-flow:bug",
35
35
  "color": "d73a4a",
36
- "description": "kody2 flow: bug / enhancement"
36
+ "description": "kody flow: bug / enhancement"
37
37
  }
38
38
  },
39
39
  {
@@ -41,7 +41,7 @@
41
41
  "with": {
42
42
  "label": "kody:orchestrating",
43
43
  "color": "1d76db",
44
- "description": "kody2: orchestrating a multi-stage flow"
44
+ "description": "kody: orchestrating a multi-stage flow"
45
45
  }
46
46
  },
47
47
  { "script": "loadIssueContext" },
@@ -58,22 +58,22 @@
58
58
  "runWhen": { "data.taskState.core.lastOutcome.type": "RUN_COMPLETED" } },
59
59
 
60
60
  { "script": "finishFlow",
61
- "with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "kody2: PR ready for human review/merge" },
61
+ "with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
62
62
  "runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_PASS" } },
63
63
 
64
64
  { "script": "dispatch", "with": { "next": "fix", "target": "pr" },
65
65
  "runWhen": { "data.taskState.core.lastOutcome.type": ["REVIEW_CONCERNS", "REVIEW_FAIL"] } },
66
66
 
67
67
  { "script": "finishFlow",
68
- "with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "kody2: flow failed" },
68
+ "with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
69
69
  "runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_FAILED" } },
70
70
 
71
71
  { "script": "finishFlow",
72
- "with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "kody2: PR ready for human review/merge" },
72
+ "with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
73
73
  "runWhen": { "data.taskState.core.lastOutcome.type": "FIX_COMPLETED" } },
74
74
 
75
75
  { "script": "finishFlow",
76
- "with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody2: flow failed" },
76
+ "with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
77
77
  "runWhen": { "data.taskState.core.lastOutcome.type": ["PLAN_FAILED", "RUN_FAILED", "FIX_FAILED", "AGENT_NOT_RUN"] } },
78
78
 
79
79
  { "script": "persistFlowState" }
@@ -33,7 +33,7 @@
33
33
  "with": {
34
34
  "label": "kody-flow:chore",
35
35
  "color": "c5def5",
36
- "description": "kody2 flow: chore / docs / dep-bump"
36
+ "description": "kody flow: chore / docs / dep-bump"
37
37
  }
38
38
  },
39
39
  {
@@ -41,7 +41,7 @@
41
41
  "with": {
42
42
  "label": "kody:orchestrating",
43
43
  "color": "1d76db",
44
- "description": "kody2: orchestrating a multi-stage flow"
44
+ "description": "kody: orchestrating a multi-stage flow"
45
45
  }
46
46
  },
47
47
  { "script": "loadIssueContext" },
@@ -55,22 +55,22 @@
55
55
  "runWhen": { "data.taskState.core.lastOutcome.type": "RUN_COMPLETED" } },
56
56
 
57
57
  { "script": "finishFlow",
58
- "with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "kody2: PR ready for human review/merge" },
58
+ "with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
59
59
  "runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_PASS" } },
60
60
 
61
61
  { "script": "dispatch", "with": { "next": "fix", "target": "pr" },
62
62
  "runWhen": { "data.taskState.core.lastOutcome.type": ["REVIEW_CONCERNS", "REVIEW_FAIL"] } },
63
63
 
64
64
  { "script": "finishFlow",
65
- "with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "kody2: flow failed" },
65
+ "with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
66
66
  "runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_FAILED" } },
67
67
 
68
68
  { "script": "finishFlow",
69
- "with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "kody2: PR ready for human review/merge" },
69
+ "with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
70
70
  "runWhen": { "data.taskState.core.lastOutcome.type": "FIX_COMPLETED" } },
71
71
 
72
72
  { "script": "finishFlow",
73
- "with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody2: flow failed" },
73
+ "with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
74
74
  "runWhen": { "data.taskState.core.lastOutcome.type": ["RUN_FAILED", "FIX_FAILED", "AGENT_NOT_RUN"] } },
75
75
 
76
76
  { "script": "persistFlowState" }
@@ -36,7 +36,7 @@
36
36
  "with": {
37
37
  "label": "kody:classifying",
38
38
  "color": "0e8a16",
39
- "description": "kody2: classifying the issue"
39
+ "description": "kody: classifying the issue"
40
40
  }
41
41
  },
42
42
  { "script": "loadIssueContext" },
@@ -33,7 +33,7 @@
33
33
  "with": {
34
34
  "label": "kody-flow:feature",
35
35
  "color": "a2eeef",
36
- "description": "kody2 flow: feature / refactor"
36
+ "description": "kody flow: feature / refactor"
37
37
  }
38
38
  },
39
39
  {
@@ -41,7 +41,7 @@
41
41
  "with": {
42
42
  "label": "kody:orchestrating",
43
43
  "color": "1d76db",
44
- "description": "kody2: orchestrating a multi-stage flow"
44
+ "description": "kody: orchestrating a multi-stage flow"
45
45
  }
46
46
  },
47
47
  { "script": "loadIssueContext" },
@@ -61,22 +61,22 @@
61
61
  "runWhen": { "data.taskState.core.lastOutcome.type": "RUN_COMPLETED" } },
62
62
 
63
63
  { "script": "finishFlow",
64
- "with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "kody2: PR ready for human review/merge" },
64
+ "with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
65
65
  "runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_PASS" } },
66
66
 
67
67
  { "script": "dispatch", "with": { "next": "fix", "target": "pr" },
68
68
  "runWhen": { "data.taskState.core.lastOutcome.type": ["REVIEW_CONCERNS", "REVIEW_FAIL"] } },
69
69
 
70
70
  { "script": "finishFlow",
71
- "with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "kody2: flow failed" },
71
+ "with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
72
72
  "runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_FAILED" } },
73
73
 
74
74
  { "script": "finishFlow",
75
- "with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "kody2: PR ready for human review/merge" },
75
+ "with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
76
76
  "runWhen": { "data.taskState.core.lastOutcome.type": "FIX_COMPLETED" } },
77
77
 
78
78
  { "script": "finishFlow",
79
- "with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody2: flow failed" },
79
+ "with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
80
80
  "runWhen": { "data.taskState.core.lastOutcome.type": ["RESEARCH_FAILED", "PLAN_FAILED", "RUN_FAILED", "FIX_FAILED", "AGENT_NOT_RUN"] } },
81
81
 
82
82
  { "script": "persistFlowState" }
@@ -36,9 +36,26 @@
36
36
  "commands": [],
37
37
  "subagents": [],
38
38
  "plugins": [],
39
- "mcpServers": []
39
+ "mcpServers": [
40
+ {
41
+ "name": "playwright",
42
+ "command": "npx",
43
+ "args": ["-y", "@playwright/mcp@latest"]
44
+ }
45
+ ]
40
46
  },
41
- "cliTools": [],
47
+ "cliTools": [
48
+ {
49
+ "name": "playwright",
50
+ "install": {
51
+ "required": false,
52
+ "checkCommand": "npx --no-install playwright --version",
53
+ "installCommand": "npx --yes playwright install --with-deps chromium"
54
+ },
55
+ "verify": "npx --no-install playwright --version",
56
+ "usage": ""
57
+ }
58
+ ],
42
59
  "scripts": {
43
60
  "preflight": [
44
61
  {
@@ -46,7 +63,7 @@
46
63
  "with": {
47
64
  "label": "kody:fixing",
48
65
  "color": "e99695",
49
- "description": "kody2: applying review feedback"
66
+ "description": "kody: applying review feedback"
50
67
  }
51
68
  },
52
69
  { "script": "fixFlow" },
@@ -42,6 +42,6 @@ You are Kody, an autonomous engineer. Apply the feedback below to the existing P
42
42
  - **"Already satisfied" (i.e. skipping the edit because the code already does what's asked) is only allowed when you can cite the exact file:line that already implements it.** If in doubt, make the edit — under `fixed`.
43
43
  - Do NOT run git/gh commands. The wrapper handles it.
44
44
  - Stay on `{{branch}}`.
45
- - Do not modify files under `.kody/`, `.kody-engine/`, `.kody2/`, `node_modules/`, `dist/`, `build/`, `.env`, `*.log`.
45
+ - Do not modify files under `.kody/`, `.kody-engine/`, `.kody/`, `node_modules/`, `dist/`, `build/`, `.env`, `*.log`.
46
46
  - If the feedback is ambiguous or conflicts with the issue, err toward what the feedback says.
47
47
  {{systemPromptAppend}}
@@ -46,7 +46,7 @@
46
46
  "with": {
47
47
  "label": "kody:fixing",
48
48
  "color": "e99695",
49
- "description": "kody2: applying review feedback"
49
+ "description": "kody: applying review feedback"
50
50
  }
51
51
  },
52
52
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "init",
3
3
  "role": "utility",
4
- "describe": "Scaffold a consumer repo with kody.config.json and the @kody2 workflow. No agent.",
4
+ "describe": "Scaffold a consumer repo with kody.config.json and the @kody workflow. No agent.",
5
5
  "inputs": [
6
6
  {
7
7
  "name": "force",
@@ -27,9 +27,26 @@
27
27
  "commands": [],
28
28
  "subagents": [],
29
29
  "plugins": [],
30
- "mcpServers": []
30
+ "mcpServers": [
31
+ {
32
+ "name": "playwright",
33
+ "command": "npx",
34
+ "args": ["-y", "@playwright/mcp@latest"]
35
+ }
36
+ ]
31
37
  },
32
- "cliTools": [],
38
+ "cliTools": [
39
+ {
40
+ "name": "playwright",
41
+ "install": {
42
+ "required": false,
43
+ "checkCommand": "npx --no-install playwright --version",
44
+ "installCommand": "npx --yes playwright install --with-deps chromium"
45
+ },
46
+ "verify": "npx --no-install playwright --version",
47
+ "usage": ""
48
+ }
49
+ ],
33
50
  "scripts": {
34
51
  "preflight": [
35
52
  {
@@ -37,7 +54,7 @@
37
54
  "with": {
38
55
  "label": "kody:planning",
39
56
  "color": "5319e7",
40
- "description": "kody2: producing an implementation plan"
57
+ "description": "kody: producing an implementation plan"
41
58
  }
42
59
  },
43
60
  {
@@ -49,6 +66,9 @@
49
66
  {
50
67
  "script": "loadConventions"
51
68
  },
69
+ {
70
+ "script": "loadPriorArt"
71
+ },
52
72
  {
53
73
  "script": "composePrompt"
54
74
  }
@@ -1,6 +1,6 @@
1
- You are a senior engineer producing an **implementation plan** for the GitHub issue below. You will NOT write code. You will NOT run git or gh commands. You will NOT modify files. Your only outputs are:
1
+ You are a senior engineer producing a **deep, detailed implementation plan** for the GitHub issue below. The plan must be thorough enough that another engineer can implement the feature without re-doing research — file locations, function signatures, algorithms, edge cases, and tests are all specified. You will NOT write code. You will NOT run git or gh commands. You will NOT modify files.
2
2
 
3
- 1. Use Read / Grep / Glob / Bash (read-only) to study the codebase as much as needed.
3
+ 1. Use Read / Grep / Glob / Bash (read-only) to study the codebase as much as needed. Depth matters more than speed — invest turns in understanding before writing.
4
4
  2. Emit a final message with the plan wrapped in the required markers (see "Required output").
5
5
 
6
6
  ---
@@ -17,6 +17,43 @@ Recent comments (most recent first, truncated):
17
17
 
18
18
  {{conventionsBlock}}
19
19
 
20
+ {{priorArt}}
21
+
22
+ ---
23
+
24
+ # Delta mode — if a prior plan comment exists
25
+
26
+ Before writing the plan, scan the "Recent comments" block above for a previous
27
+ comment whose body starts with `## Plan for issue`. If one exists, you are in
28
+ **delta mode**:
29
+
30
+ 1. Treat the prior plan as the baseline. Do NOT regenerate unchanged sections
31
+ from scratch.
32
+ 2. Integrate the signal from comments posted AFTER the prior plan: user
33
+ answers, correction directives, new clarifying info, closed/merged PRs that
34
+ appeared since.
35
+ 3. In each section, mark changed bullets with `(updated)`, new bullets with
36
+ `(new)`, and removed items with `(removed — <reason>)`. Preserve unchanged
37
+ bullets verbatim so reviewers can diff.
38
+ 4. If nothing material has changed since the prior plan, output
39
+ `FAILED: no new information since last plan` instead of a duplicate.
40
+
41
+ If no prior `## Plan for issue` comment exists, produce a full first-pass
42
+ plan under the Required output structure below.
43
+
44
+ ---
45
+
46
+ # Research floor (MUST be done before writing the plan)
47
+
48
+ Before producing the final plan, you MUST have read:
49
+
50
+ - Every file you intend to change (the full file, not just a grep hit).
51
+ - The tests for each file you intend to change, if tests exist for that module.
52
+ - At least one sibling module that already implements the same pattern you're about to follow (reference implementations).
53
+ - The full prior-art diffs above (if any) — not just titles. Those represent failed solutions; understanding why they failed is part of the plan.
54
+
55
+ If a file you need to read does not exist, say so explicitly in the plan under "Ambiguities" — do NOT guess at its contents.
56
+
20
57
  ---
21
58
 
22
59
  # Required output
@@ -27,16 +64,87 @@ Your FINAL message must be exactly this shape (no extra text before or after):
27
64
  DONE
28
65
  COMMIT_MSG: plan: <very short title>
29
66
  PR_SUMMARY:
30
- <A concrete implementation plan in markdown. Include:
31
- - Files to change (with paths), and the change in each.
32
- - New files to create, with their purpose and rough shape.
33
- - Any ambiguities that need the human to resolve first.
34
- - Verification checklist (typecheck / tests / lint expectations).
35
- Keep to ~60 lines or less. No filler. No marketing language.>
67
+ <A deep, detailed implementation plan in markdown with the following sections, in order. Omit a section only if its trigger condition is not met — do not leave placeholders. Depth is expected; brevity for its own sake is not a goal.
68
+
69
+ ## Existing patterns found
70
+ For each major part of the change, name the sibling module in this repo that
71
+ already solves a similar problem and state how this plan reuses it.
72
+ - Pattern: <what kind of pattern e.g. "admin field with custom React component", "fetch-then-group client hook", "JSON strings module">
73
+ - Reference: <exact path in this repo, e.g. `src/ui/admin/LessonBlocksField/index.tsx`>
74
+ - Reuse: <how this plan follows it — which hooks/APIs/idioms are mirrored, what deviates and why>
75
+ If you searched and found nothing applicable, say so explicitly: "Searched
76
+ for X / Y / Z — no existing pattern; proposing new convention because …".
77
+ Proposing a new pattern when an existing one covers the use case is a
78
+ planning failure — fall back to reuse unless you name a concrete reason.
79
+
80
+ ## Changes (per file)
81
+ For EACH file you will change or create, include:
82
+ - Path (exact).
83
+ - Why this file — one sentence tying the change to the issue.
84
+ - Current state — what's there today (function/class/export names, relevant line ranges). Skip for new files.
85
+ - Target state — what will be there after the change, at the same level of specificity.
86
+ - Exact locations of edits (function name, line range if stable, or anchor like "after the `meta` group field, before the closing `fields: []`").
87
+ - For new files: rough shape including exports, key functions with signatures, and top-level module comment.
88
+ - Dependencies touched (imports added/removed, new packages) — call out if anything needs installing.
89
+
90
+ ## Algorithms & pseudocode
91
+ REQUIRED for any non-trivial logic (sorting, diffing, state transitions, concurrency, batching, caching, conflict resolution).
92
+ - Write pseudocode (not production code) showing the actual algorithm — inputs, steps, outputs.
93
+ - Call out invariants the algorithm preserves.
94
+ - Call out complexity (N swaps vs N-squared recalc vs single-batch write).
95
+ - If there's a choice between two algorithms, explain why you picked this one.
96
+
97
+ ## How clarifying answers shape the plan
98
+ REQUIRED if research asked clarifying questions and the issue comments contain user answers.
99
+ - For each answered question: name the concrete design choice the answer forces — not a restatement of the answer.
100
+ - "Answer: yes → init orders 10/20/30 on first interaction" → spell out: which function performs the init, when it runs (mount vs first-swap), how it detects the "first use" state, what happens on re-entry.
101
+
102
+ ## Why this will work
103
+ REQUIRED if research cites a prior failed attempt (closed PR, reverted commit, previous run that didn't land), or if prior-art above contains a diff.
104
+ - Root-cause hypothesis — what specifically went wrong in the prior attempt (cite lines from the prior diff above).
105
+ - The specific change in THIS plan that addresses the root cause — name the file/line/hook/config that differs from the prior attempt.
106
+ - How you will verify the fix works — a concrete behavioral check (URL + action + expected UI, or API call + expected response, or a test case). Not "typecheck passes."
107
+
108
+ ## API surface verification
109
+ REQUIRED for every hook, import, SDK method, framework primitive, or config key the plan names.
110
+ - Build a table or list. For each named symbol: the file path where it's defined, or the exact package + export (with a `node_modules/...` path you actually read), or the mark `UNVERIFIED`.
111
+ - Do not guess. If you could not find it with Read / Grep / Glob, it is UNVERIFIED. Do not rely on UNVERIFIED symbols in the plan — flag them as blockers.
112
+ - Include negative evidence too: "Searched for `useXxx` in `@payloadcms/ui` exports — not found; planner assumed `useDocumentInfo` instead."
113
+
114
+ ## Initial data state → transition → steady state
115
+ REQUIRED if the feature mutates existing data (reorder, migrate, backfill, rename, enable).
116
+ - Initial state: describe the data as it is in production today, including edge cases (rows with NULL, rows with default zero, orphan rows, etc).
117
+ - Transition: the exact step(s) that move data from initial → steady, including who triggers them (user action, migration script, on-mount hook), idempotency, and rollback behavior.
118
+ - Steady state: what invariants hold after transition.
119
+ - Failure modes during transition: partial-apply, race conditions, concurrent writers.
120
+
121
+ ## Error paths & failure handling
122
+ For each external call or mutation in the plan (API request, DB write, file op, SDK call), enumerate:
123
+ - What can fail (network, validation, auth, not-found, conflict, rate limit).
124
+ - What the UI/caller does on each failure — retry, surface error, rollback, log-and-continue.
125
+ - What state the system is left in if the op fails mid-way.
126
+
127
+ ## Test plan
128
+ - Specific test cases by name, with inputs and expected outputs. Not "add unit tests."
129
+ - Unit tests: one line per test naming what it asserts.
130
+ - Integration / behavioral tests: one line each, naming the flow covered and the assertion.
131
+ - Regression tests for the prior-art failure mode (if applicable) — a test that would have caught the prior bug.
132
+ - Manual verification steps: URL + click sequence + expected UI, or API call + expected response.
133
+
134
+ ## Ambiguities & assumptions
135
+ - List anything still unresolved that needs human input before implementation.
136
+ - List every assumption the plan makes that was NOT confirmed by the issue, comments, or code (e.g. "assumed `usePayload` hook exists — UNVERIFIED").
137
+
138
+ ## Verification checklist
139
+ - Build / typecheck / test / lint commands expected to pass after implementation.
140
+ - Each concrete behavioral check from "Test plan" restated as a pass/fail gate.
141
+
142
+ No filler. No marketing language. Depth over brevity.>
36
143
  ```
37
144
 
38
145
  # Rules
39
146
  - Read-only. Do NOT modify any file.
40
147
  - Do NOT run git or gh commands.
41
- - No speculative scope — plan only what the issue asks for.
148
+ - No speculative scope — plan only what the issue asks for, but plan it THOROUGHLY.
42
149
  - If the issue is ambiguous and you cannot make progress without input, output `FAILED: <what's unclear>` instead of a plan.
150
+ - If the Research floor cannot be met because required files are missing or unreadable, output `FAILED: <what could not be read>` instead of a half-blind plan.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "plan-verify",
3
3
  "role": "utility",
4
- "describe": "Live-test executable. Loads kody-live-marker skill, /kody-live-probe command, kody-live-trace hook, and the bundled test-plugin. Asks the agent to emit confirmation tokens for each feature so Kody2 can validate plugin wiring end-to-end.",
4
+ "describe": "Live-test executable. Loads kody-live-marker skill, /kody-live-probe command, kody-live-trace hook, and the bundled test-plugin. Asks the agent to emit confirmation tokens for each feature so Kody can validate plugin wiring end-to-end.",
5
5
  "inputs": [
6
6
  { "name": "issue", "flag": "--issue", "type": "int", "required": true, "describe": "GitHub issue number to verify against." }
7
7
  ],
@@ -9,7 +9,7 @@
9
9
  "model": "inherit",
10
10
  "permissionMode": "default",
11
11
  "maxTurns": 15,
12
- "systemPromptAppend": "You are running Kody2's plugin-wiring live verification. Emit confirmation tokens exactly as the prompt instructs.",
12
+ "systemPromptAppend": "You are running Kody's plugin-wiring live verification. Emit confirmation tokens exactly as the prompt instructs.",
13
13
  "tools": ["Read", "Grep", "Glob", "Bash"],
14
14
  "hooks": ["kody-live-trace"],
15
15
  "skills": ["kody-live-marker"],
@@ -1,4 +1,4 @@
1
- You are Kody2's plugin-wiring live verification agent. Your ONLY job is to prove that each of the four extension mechanisms (plugins, skills, commands, hooks) is successfully loaded into your session. Do NOT address the issue's actual work.
1
+ You are Kody's plugin-wiring live verification agent. Your ONLY job is to prove that each of the four extension mechanisms (plugins, skills, commands, hooks) is successfully loaded into your session. Do NOT address the issue's actual work.
2
2
 
3
3
  Issue #{{issue.number}}: {{issue.title}}
4
4
 
@@ -27,9 +27,26 @@
27
27
  "commands": [],
28
28
  "subagents": [],
29
29
  "plugins": [],
30
- "mcpServers": []
30
+ "mcpServers": [
31
+ {
32
+ "name": "playwright",
33
+ "command": "npx",
34
+ "args": ["-y", "@playwright/mcp@latest"]
35
+ }
36
+ ]
31
37
  },
32
- "cliTools": [],
38
+ "cliTools": [
39
+ {
40
+ "name": "playwright",
41
+ "install": {
42
+ "required": false,
43
+ "checkCommand": "npx --no-install playwright --version",
44
+ "installCommand": "npx --yes playwright install --with-deps chromium"
45
+ },
46
+ "verify": "npx --no-install playwright --version",
47
+ "usage": ""
48
+ }
49
+ ],
33
50
  "scripts": {
34
51
  "preflight": [
35
52
  {
@@ -37,7 +54,7 @@
37
54
  "with": {
38
55
  "label": "kody:researching",
39
56
  "color": "1d76db",
40
- "description": "kody2: researching the issue"
57
+ "description": "kody: researching the issue"
41
58
  }
42
59
  },
43
60
  {
@@ -84,6 +101,11 @@
84
101
  "name": "research",
85
102
  "format": "markdown",
86
103
  "from": "prSummary"
104
+ },
105
+ {
106
+ "name": "priorArt",
107
+ "format": "json",
108
+ "from": "priorArt"
87
109
  }
88
110
  ]
89
111
  }
@@ -25,6 +25,7 @@ Your FINAL message must be exactly this shape (no extra text before or after):
25
25
  ```
26
26
  DONE
27
27
  COMMIT_MSG: research: <very short title>
28
+ PRIOR_ART: <JSON array of closed or merged PR numbers from this repo that are prior attempts at THIS issue, or [] if none. Include only PRs that actually touched the same feature/area — not every PR your research happens to mention. Example: [1086] or []. Must be valid JSON parseable as number[].>
28
29
  PR_SUMMARY:
29
30
  <A research doc in markdown with EXACTLY these sections, in order:
30
31
 
@@ -82,6 +83,9 @@ Gaps & assumptions — they live in the prior comment. Keep the whole delta
82
83
  under 25 lines. If nothing has changed since the prior research, output
83
84
  `FAILED: no new information since last research` instead.
84
85
 
86
+ `PRIOR_ART:` is still required in delta mode (carry forward the prior list,
87
+ or update it if new PRs became relevant since).
88
+
85
89
  If no prior `## Research for issue` comment exists in the thread, produce
86
90
  the full first-pass structure below.
87
91
 
@@ -39,7 +39,7 @@
39
39
  "with": {
40
40
  "label": "kody:resolving",
41
41
  "color": "b60205",
42
- "description": "kody2: resolving merge conflicts"
42
+ "description": "kody: resolving merge conflicts"
43
43
  }
44
44
  },
45
45
  {
@@ -28,9 +28,26 @@
28
28
  "commands": [],
29
29
  "subagents": [],
30
30
  "plugins": [],
31
- "mcpServers": []
31
+ "mcpServers": [
32
+ {
33
+ "name": "playwright",
34
+ "command": "npx",
35
+ "args": ["-y", "@playwright/mcp@latest"]
36
+ }
37
+ ]
32
38
  },
33
- "cliTools": [],
39
+ "cliTools": [
40
+ {
41
+ "name": "playwright",
42
+ "install": {
43
+ "required": false,
44
+ "checkCommand": "npx --no-install playwright --version",
45
+ "installCommand": "npx --yes playwright install --with-deps chromium"
46
+ },
47
+ "verify": "npx --no-install playwright --version",
48
+ "usage": ""
49
+ }
50
+ ],
34
51
  "scripts": {
35
52
  "preflight": [
36
53
  {
@@ -38,7 +55,7 @@
38
55
  "with": {
39
56
  "label": "kody:reviewing",
40
57
  "color": "d93f0b",
41
- "description": "kody2: reviewing a PR"
58
+ "description": "kody: reviewing a PR"
42
59
  }
43
60
  },
44
61
  {
@@ -39,7 +39,7 @@
39
39
  "with": {
40
40
  "label": "kody:running",
41
41
  "color": "fbca04",
42
- "description": "kody2: implementing the change"
42
+ "description": "kody: implementing the change"
43
43
  }
44
44
  },
45
45
  { "script": "runFlow" },
@@ -7,7 +7,7 @@ You are Kody, an autonomous engineer. Take a GitHub issue from spec to a tested
7
7
  {{conventionsBlock}}{{coverageBlock}}{{toolsUsage}}# Issue #{{issue.number}}: {{issue.title}}
8
8
  {{issue.body}}
9
9
 
10
- # Existing plan (produced by `@kody2 plan`, if present)
10
+ # Existing plan (produced by `@kody plan`, if present)
11
11
  {{artifacts.plan}}
12
12
 
13
13
  If the plan above is non-empty, TREAT IT AS AUTHORITATIVE — follow its file list and approach rather than inventing your own. Deviate only if the plan is wrong; if you do, you MUST declare each deviation in the `PLAN_DEVIATIONS:` block of your final message (format below). Silent deviations are a hard failure, even if the code works. If the plan is empty, proceed from first principles and emit `PLAN_DEVIATIONS: none` in the final message.
@@ -32,7 +32,7 @@ If the plan above is non-empty, TREAT IT AS AUTHORITATIVE — follow its file li
32
32
  # Rules
33
33
  - Do NOT run **any** `git` or `gh` commands. The wrapper handles all git/gh operations. If a quality gate fails, that's the failure — do not investigate it via git.
34
34
  - Stay on the current branch (`{{branch}}`). It is already checked out for you.
35
- - Do NOT modify files under: `.kody/`, `.kody-engine/`, `.kody-lean/`, `.kody2/`, `node_modules/`, `dist/`, `build/`, `.env`, or any `*.log`.
35
+ - Do NOT modify files under: `.kody/`, `.kody-engine/`, `.kody-lean/`, `.kody/`, `node_modules/`, `dist/`, `build/`, `.env`, or any `*.log`.
36
36
  - Do NOT post issue comments — the wrapper handles that.
37
37
  - Pre-existing quality-gate failures: assume they are NOT your responsibility unless your edits touched related code.
38
38
  - Keep the plan and reasoning concise. Long monologues waste turns.
@@ -33,7 +33,7 @@
33
33
  "with": {
34
34
  "label": "kody-flow:spec",
35
35
  "color": "7057ff",
36
- "description": "kody2 flow: spec / RFC / design-doc"
36
+ "description": "kody flow: spec / RFC / design-doc"
37
37
  }
38
38
  },
39
39
  {
@@ -41,7 +41,7 @@
41
41
  "with": {
42
42
  "label": "kody:orchestrating",
43
43
  "color": "1d76db",
44
- "description": "kody2: orchestrating a multi-stage flow"
44
+ "description": "kody: orchestrating a multi-stage flow"
45
45
  }
46
46
  },
47
47
  { "script": "loadIssueContext" },
@@ -55,11 +55,11 @@
55
55
  "runWhen": { "data.taskState.core.lastOutcome.type": "RESEARCH_COMPLETED" } },
56
56
 
57
57
  { "script": "finishFlow",
58
- "with": { "reason": "spec-ready", "label": "kody:done", "color": "0e8a16", "description": "kody2: spec/plan artifact ready" },
58
+ "with": { "reason": "spec-ready", "label": "kody:done", "color": "0e8a16", "description": "kody: spec/plan artifact ready" },
59
59
  "runWhen": { "data.taskState.core.lastOutcome.type": "PLAN_COMPLETED" } },
60
60
 
61
61
  { "script": "finishFlow",
62
- "with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody2: flow failed" },
62
+ "with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
63
63
  "runWhen": { "data.taskState.core.lastOutcome.type": ["RESEARCH_FAILED", "PLAN_FAILED", "AGENT_NOT_RUN"] } },
64
64
 
65
65
  { "script": "persistFlowState" }
@@ -32,7 +32,7 @@
32
32
  "with": {
33
33
  "label": "kody:syncing",
34
34
  "color": "c5def5",
35
- "description": "kody2: syncing PR with base"
35
+ "description": "kody: syncing PR with base"
36
36
  }
37
37
  },
38
38
  {