tuncss-plan-kit 0.5.0 → 0.7.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/README.md +38 -13
- package/bin/cli.js +14 -3
- package/package.json +1 -1
- package/skills/changelog/SKILL.md +2 -2
- package/skills/handoff-plan/SKILL.md +32 -12
- package/skills/plan-universal/SKILL.md +33 -11
- package/templates/instructions-block.md +1 -1
package/README.md
CHANGED
|
@@ -54,7 +54,9 @@ Note: `agy changelog` is Antigravity's own built-in subcommand for release notes
|
|
|
54
54
|
|
|
55
55
|
With `--global` the same files go to user-wide locations (`~/.claude/`, `~/.agents/`, `~/.codex/`, `~/.gemini/config/`).
|
|
56
56
|
|
|
57
|
-
**Antigravity `--global` is a plain file copy to `~/.gemini/config/`** — a single location the desktop app, the `agy` CLI, and the IDE all read, so one install covers them all.
|
|
57
|
+
**Antigravity `--global` is a plain file copy to `~/.gemini/config/`** — a single location the desktop app, the `agy` CLI, and the IDE all read, so one install covers them all. (Antigravity's docs list `~/.gemini/antigravity-cli/skills/` for the CLI, but in practice `agy` reads `~/.gemini/config/skills/` and ignores that folder, so the kit writes only the one.)
|
|
58
|
+
|
|
59
|
+
`npx tuncss-plan-kit init --global` with no `--target` looks at your home directory instead of the current one and installs for every agent it finds: `~/.claude/` → Claude Code, `~/.codex/` → Codex CLI, `~/.gemini/config/` → Antigravity.
|
|
58
60
|
|
|
59
61
|
Project-local is still the default for all three — recommended unless you specifically want the kit available everywhere.
|
|
60
62
|
|
|
@@ -73,28 +75,51 @@ Agent: ↓ writing-plans skill
|
|
|
73
75
|
tasks shaped as Targets / Implementation Notes /
|
|
74
76
|
Done When / Verification
|
|
75
77
|
|
|
76
|
-
You:
|
|
77
|
-
Agent:
|
|
78
|
-
|
|
78
|
+
You: run the plan
|
|
79
|
+
Agent: runs every task in order; after each one it writes the changelog
|
|
80
|
+
entry to docs/CHANGELOG.md and commits; stops only on a stop
|
|
81
|
+
condition (S1–S4) and reports where and why
|
|
79
82
|
|
|
80
83
|
— or —
|
|
81
84
|
|
|
82
85
|
You: /handoff-plan
|
|
83
86
|
Agent: ↓ handoff skill
|
|
84
|
-
writes a
|
|
85
|
-
|
|
87
|
+
writes a briefing to docs/handoffs/ — the execution contract on
|
|
88
|
+
top — that you can paste into another agent
|
|
86
89
|
```
|
|
87
90
|
|
|
88
91
|
## What's in a plan
|
|
89
92
|
|
|
90
93
|
Every plan starts with this contract:
|
|
91
94
|
|
|
92
|
-
>
|
|
93
|
-
>
|
|
94
|
-
>
|
|
95
|
-
>
|
|
96
|
-
>
|
|
97
|
-
>
|
|
95
|
+
> **Default: run every task in order, from TASK-01 to the last, without stopping between tasks.**
|
|
96
|
+
> If the user names a single task ("do TASK-03"), do only that task, then stop.
|
|
97
|
+
> If the user names a starting task ("run from TASK-04"), start there and continue in order.
|
|
98
|
+
> This plan is already approved. Do not write your own plan or task list — execute this one.
|
|
99
|
+
>
|
|
100
|
+
> **Before the first task:** run `git status`. If the working tree is not clean, stop (S4).
|
|
101
|
+
>
|
|
102
|
+
> **For each task:**
|
|
103
|
+
> 1. Read only that task's block. Do not preview later tasks.
|
|
104
|
+
> 2. Edit only the files in its **Targets**.
|
|
105
|
+
> 3. Follow its **Implementation Notes**; add no extra scope.
|
|
106
|
+
> 4. Run its **Verification**. If it fails, make one fix attempt inside Targets and run it again.
|
|
107
|
+
> 5. When **Done When** and **Verification** pass: append the changelog entry with the `changelog`
|
|
108
|
+
> skill (from the actual diff), then commit the task's changes and the entry together.
|
|
109
|
+
> 6. **Commit message:** Turkish, ASCII only — write c, s, i, g, o, u instead of ç, ş, ı, ğ, ö, ü.
|
|
110
|
+
> First line `TASK-NN: <what changed>`, under 72 characters. Say what changed, not "dosyalar guncellendi".
|
|
111
|
+
> Example: `TASK-03: Oturum suresi 24 saatten 2 saate dusuruldu`
|
|
112
|
+
>
|
|
113
|
+
> **Stop and report when:**
|
|
114
|
+
> - S1: Verification fails a second time.
|
|
115
|
+
> - S2: A file, function, API, flag, or command the task names does not exist or differs from the description. Do not guess.
|
|
116
|
+
> - S3: Finishing the task requires editing a file outside its Targets.
|
|
117
|
+
> - S4: The working tree was not clean before the first task.
|
|
118
|
+
>
|
|
119
|
+
> On stop: no changelog entry and no commit for that task; earlier commits stay. Report the task id, the condition (S1–S4), and what you saw.
|
|
120
|
+
> After the last task: report the list of commits made.
|
|
121
|
+
|
|
122
|
+
Commit messages are Turkish, ASCII only — the kit's team writes them that way.
|
|
98
123
|
|
|
99
124
|
Plans carry contracts (types, signatures, commands) and pointers to existing code, not pasted function bodies — the executor writes the code.
|
|
100
125
|
|
|
@@ -106,7 +131,7 @@ npx tuncss-plan-kit init [--target=<list>] [--global] [--force]
|
|
|
106
131
|
|
|
107
132
|
| Flag | Effect |
|
|
108
133
|
|------|--------|
|
|
109
|
-
| `--target=<list>` | Comma-separated. Values: `claude`, `codex`, `antigravity`, `all`. Auto-detected if omitted. |
|
|
134
|
+
| `--target=<list>` | Comma-separated. Values: `claude`, `codex`, `antigravity`, `all`. Auto-detected if omitted (from the current directory, or from your home directory with `--global`). |
|
|
110
135
|
| `--global` | Install to user-wide locations instead of the current project. |
|
|
111
136
|
| `--force` | Overwrite existing skill/command files without warning. |
|
|
112
137
|
|
package/bin/cli.js
CHANGED
|
@@ -101,7 +101,8 @@ Commands:
|
|
|
101
101
|
Options:
|
|
102
102
|
--target Comma-separated platforms to install for. Supported:
|
|
103
103
|
claude, codex, antigravity, all
|
|
104
|
-
If omitted, auto-detects from the current directory
|
|
104
|
+
If omitted, auto-detects from the current directory
|
|
105
|
+
(or from your home directory with --global).
|
|
105
106
|
--global Install to user-wide locations.
|
|
106
107
|
--force Overwrite existing skill/command files without warning.
|
|
107
108
|
(Instruction-file marker blocks are always idempotent.)
|
|
@@ -139,6 +140,16 @@ function detectTargets(cwd) {
|
|
|
139
140
|
return [...found];
|
|
140
141
|
}
|
|
141
142
|
|
|
143
|
+
// With --global the project directory says nothing about which agents the user
|
|
144
|
+
// runs; their home directory does.
|
|
145
|
+
function detectGlobalTargets(home) {
|
|
146
|
+
const found = [];
|
|
147
|
+
if (exists(path.join(home, ".claude"))) found.push("claude");
|
|
148
|
+
if (exists(path.join(home, ".codex"))) found.push("codex");
|
|
149
|
+
if (exists(path.join(home, ".gemini", "config"))) found.push("antigravity");
|
|
150
|
+
return found;
|
|
151
|
+
}
|
|
152
|
+
|
|
142
153
|
function ensureDir(dir) {
|
|
143
154
|
fs.mkdirSync(dir, { recursive: true });
|
|
144
155
|
}
|
|
@@ -284,10 +295,10 @@ function init(args) {
|
|
|
284
295
|
targets = SUPPORTED.slice();
|
|
285
296
|
}
|
|
286
297
|
if (!targets) {
|
|
287
|
-
targets = detectTargets(cwd);
|
|
298
|
+
targets = args.global ? detectGlobalTargets(os.homedir()) : detectTargets(cwd);
|
|
288
299
|
if (targets.length === 0) {
|
|
289
300
|
console.error(
|
|
290
|
-
|
|
301
|
+
`No supported platform detected in ${args.global ? "your home directory" : "this directory"}.\n` +
|
|
291
302
|
"Specify one explicitly, e.g.: npx tuncss-plan-kit init --target=claude\n" +
|
|
292
303
|
"Or install for all three: npx tuncss-plan-kit init --target=all"
|
|
293
304
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tuncss-plan-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Four-skill kit for spec-driven development: brainstorm an idea into a spec, turn the spec into an executable plan, hand the plan off to another LLM agent, and record what changed.",
|
|
6
6
|
"bin": {
|
|
@@ -11,7 +11,7 @@ Append a short, concrete record of what changed to `docs/CHANGELOG.md`. The read
|
|
|
11
11
|
|
|
12
12
|
## Two ways in
|
|
13
13
|
|
|
14
|
-
**From a completed plan task.**
|
|
14
|
+
**From a completed plan task.** Step 5 of the plan's execution contract sends you here once Done When and Verification are satisfied. You have the task id, the task name, and the plan path.
|
|
15
15
|
|
|
16
16
|
**From `/changelog`.** The user invoked it directly for work done outside the plan flow. There is no task id and no plan path.
|
|
17
17
|
|
|
@@ -92,4 +92,4 @@ Placement rule — follow it exactly, so that three people's agents do not grow
|
|
|
92
92
|
|
|
93
93
|
## Do not commit
|
|
94
94
|
|
|
95
|
-
Leave the entry in the working tree next to the change. Whoever commits the work commits the entry with it, so `git log -p docs/CHANGELOG.md` always pairs a line with the change that produced it.
|
|
95
|
+
Leave the entry in the working tree next to the change. Whoever commits the work commits the entry with it, so `git log -p docs/CHANGELOG.md` always pairs a line with the change that produced it. In a plan run, the execution contract commits the task's changes and this entry together right after you finish.
|
|
@@ -43,7 +43,35 @@ Do not echo the message contents — the user will open the file.
|
|
|
43
43
|
## Message template
|
|
44
44
|
|
|
45
45
|
````text
|
|
46
|
-
You're
|
|
46
|
+
You're executing an approved implementation plan in this repo.
|
|
47
|
+
|
|
48
|
+
<!-- EXECUTION CONTRACT — read before touching any task -->
|
|
49
|
+
> **Default: run every task in order, from TASK-01 to the last, without stopping between tasks.**
|
|
50
|
+
> If the user names a single task ("do TASK-03"), do only that task, then stop.
|
|
51
|
+
> If the user names a starting task ("run from TASK-04"), start there and continue in order.
|
|
52
|
+
> This plan is already approved. Do not write your own plan or task list — execute this one.
|
|
53
|
+
>
|
|
54
|
+
> **Before the first task:** run `git status`. If the working tree is not clean, stop (S4).
|
|
55
|
+
>
|
|
56
|
+
> **For each task:**
|
|
57
|
+
> 1. Read only that task's block. Do not preview later tasks.
|
|
58
|
+
> 2. Edit only the files in its **Targets**.
|
|
59
|
+
> 3. Follow its **Implementation Notes**; add no extra scope.
|
|
60
|
+
> 4. Run its **Verification**. If it fails, make one fix attempt inside Targets and run it again.
|
|
61
|
+
> 5. When **Done When** and **Verification** pass: append the changelog entry with the `changelog`
|
|
62
|
+
> skill (from the actual diff), then commit the task's changes and the entry together.
|
|
63
|
+
> 6. **Commit message:** Turkish, ASCII only — write c, s, i, g, o, u instead of ç, ş, ı, ğ, ö, ü.
|
|
64
|
+
> First line `TASK-NN: <what changed>`, under 72 characters. Say what changed, not "dosyalar guncellendi".
|
|
65
|
+
> Example: `TASK-03: Oturum suresi 24 saatten 2 saate dusuruldu`
|
|
66
|
+
>
|
|
67
|
+
> **Stop and report when:**
|
|
68
|
+
> - S1: Verification fails a second time.
|
|
69
|
+
> - S2: A file, function, API, flag, or command the task names does not exist or differs from the description. Do not guess.
|
|
70
|
+
> - S3: Finishing the task requires editing a file outside its Targets.
|
|
71
|
+
> - S4: The working tree was not clean before the first task.
|
|
72
|
+
>
|
|
73
|
+
> On stop: no changelog entry and no commit for that task; earlier commits stay. Report the task id, the condition (S1–S4), and what you saw.
|
|
74
|
+
> After the last task: report the list of commits made.
|
|
47
75
|
|
|
48
76
|
**Project:** <project name> — <one-line description>
|
|
49
77
|
|
|
@@ -59,20 +87,12 @@ You're picking up an implementation plan in this repo.
|
|
|
59
87
|
- TASK-02: <name>
|
|
60
88
|
- ...
|
|
61
89
|
|
|
62
|
-
|
|
63
|
-
1. When I ask for a task ("do TASK-03"), read **only** that task's block in the plan.
|
|
64
|
-
2. Stay strictly inside its **Targets** — don't edit files outside that list.
|
|
65
|
-
3. Follow the **Implementation Notes**; don't invent extra scope.
|
|
66
|
-
4. When **Done When** and **Verification** are satisfied, write the changelog entry (rule 6), then **stop and report**. Wait for my approval before moving on.
|
|
67
|
-
5. If verification fails, report and stop. Don't attempt fixes outside the task's Targets, and don't write a changelog entry.
|
|
68
|
-
6. **Changelog entry:** use the `changelog` skill to append this task's entry to `docs/CHANGELOG.md`. Base it on the actual diff, not on what you set out to do.
|
|
69
|
-
|
|
70
|
-
Start by reading `<plan path>` end-to-end, then wait for me to ask for the first task. Don't begin TASK-01 until I ask.
|
|
90
|
+
Start now: open `<plan path>`, read the header and TASK-01's block, and begin. Continue through every task in order until the last one is done or a stop condition (S1–S4) is hit.
|
|
71
91
|
````
|
|
72
92
|
|
|
73
93
|
## Rules
|
|
74
94
|
|
|
75
95
|
- Don't summarize task bodies. The receiving agent reads the plan file itself.
|
|
76
|
-
- Don't reformat the execution contract
|
|
77
|
-
- Keep the message under ~
|
|
96
|
+
- Don't reformat the execution contract. It is copied verbatim from the plan-universal header; the plan file is the source of truth.
|
|
97
|
+
- Keep the message under ~60 lines, not counting the task list. If you're tempted to add more context, you're inlining the plan — stop.
|
|
78
98
|
- Don't include this skill's name, your model name, or any Claude-specific framing in the output. The receiver doesn't need to know how the message was generated.
|
|
@@ -33,13 +33,32 @@ Every plan starts with this header:
|
|
|
33
33
|
# <Feature Name> — Implementation Plan
|
|
34
34
|
|
|
35
35
|
<!-- EXECUTION CONTRACT — read before touching any task -->
|
|
36
|
-
>
|
|
37
|
-
>
|
|
38
|
-
>
|
|
39
|
-
>
|
|
40
|
-
>
|
|
41
|
-
>
|
|
42
|
-
>
|
|
36
|
+
> **Default: run every task in order, from TASK-01 to the last, without stopping between tasks.**
|
|
37
|
+
> If the user names a single task ("do TASK-03"), do only that task, then stop.
|
|
38
|
+
> If the user names a starting task ("run from TASK-04"), start there and continue in order.
|
|
39
|
+
> This plan is already approved. Do not write your own plan or task list — execute this one.
|
|
40
|
+
>
|
|
41
|
+
> **Before the first task:** run `git status`. If the working tree is not clean, stop (S4).
|
|
42
|
+
>
|
|
43
|
+
> **For each task:**
|
|
44
|
+
> 1. Read only that task's block. Do not preview later tasks.
|
|
45
|
+
> 2. Edit only the files in its **Targets**.
|
|
46
|
+
> 3. Follow its **Implementation Notes**; add no extra scope.
|
|
47
|
+
> 4. Run its **Verification**. If it fails, make one fix attempt inside Targets and run it again.
|
|
48
|
+
> 5. When **Done When** and **Verification** pass: append the changelog entry with the `changelog`
|
|
49
|
+
> skill (from the actual diff), then commit the task's changes and the entry together.
|
|
50
|
+
> 6. **Commit message:** Turkish, ASCII only — write c, s, i, g, o, u instead of ç, ş, ı, ğ, ö, ü.
|
|
51
|
+
> First line `TASK-NN: <what changed>`, under 72 characters. Say what changed, not "dosyalar guncellendi".
|
|
52
|
+
> Example: `TASK-03: Oturum suresi 24 saatten 2 saate dusuruldu`
|
|
53
|
+
>
|
|
54
|
+
> **Stop and report when:**
|
|
55
|
+
> - S1: Verification fails a second time.
|
|
56
|
+
> - S2: A file, function, API, flag, or command the task names does not exist or differs from the description. Do not guess.
|
|
57
|
+
> - S3: Finishing the task requires editing a file outside its Targets.
|
|
58
|
+
> - S4: The working tree was not clean before the first task.
|
|
59
|
+
>
|
|
60
|
+
> On stop: no changelog entry and no commit for that task; earlier commits stay. Report the task id, the condition (S1–S4), and what you saw.
|
|
61
|
+
> After the last task: report the list of commits made.
|
|
43
62
|
|
|
44
63
|
**Goal:** <one sentence>
|
|
45
64
|
|
|
@@ -83,7 +102,7 @@ Every task uses this shape:
|
|
|
83
102
|
- Automated (optional): <test files, scripts, or `npm test -- foo` commands and expected output, only if automated coverage genuinely belongs here>
|
|
84
103
|
````
|
|
85
104
|
|
|
86
|
-
Tasks are self-contained because the executor reads exactly one block
|
|
105
|
+
Tasks are self-contained because the executor reads exactly one block at a time (see the Execution Contract). If TASK-07 needs the shape of something defined in TASK-02, restate it in TASK-07 — don't make the reader scroll.
|
|
87
106
|
|
|
88
107
|
## Granularity
|
|
89
108
|
|
|
@@ -107,6 +126,7 @@ These are **plan failures**. Never write them:
|
|
|
107
126
|
- "Similar to TASK-N" — repeat what's needed; the executor reads tasks out of order
|
|
108
127
|
- Steps that describe *what* without pointing to *how* — name the existing file to follow, the signature, or the exact command; don't paste whole function bodies the executor can write itself
|
|
109
128
|
- References to types, functions, or files not defined in any task or in the file map
|
|
129
|
+
- References you haven't verified — every file, function, command, flag, and config key in Implementation Notes either exists in the repo (open it and check while writing the plan) or is created by an earlier task's Targets. If you can't confirm it, don't write it.
|
|
110
130
|
|
|
111
131
|
## Self-review
|
|
112
132
|
|
|
@@ -116,12 +136,14 @@ After the plan is written, re-read it against the spec with fresh eyes. Fix issu
|
|
|
116
136
|
2. **Placeholder scan** — anything from the "No placeholders" list? Fix.
|
|
117
137
|
3. **Name and type consistency** — a function called `clearLayers()` in TASK-03 but `clearFullLayers()` in TASK-07 is a bug. Same for types, file paths, env vars, table names.
|
|
118
138
|
4. **Targets isolation** — does any task's Targets list overlap awkwardly with another in a way that will force out-of-order edits? If so, resequence or merge.
|
|
119
|
-
5. **Verification reality** — every Done When has a corresponding Verification step that an engineer can actually run.
|
|
139
|
+
5. **Verification reality** — every Done When has a corresponding Verification step that an engineer can actually run. Every Verification command terminates on its own — no watch mode, no dev server left running; the executor runs tasks back to back and a hung command blocks the whole run.
|
|
140
|
+
6. **Order** — each task may assume only that earlier tasks are done. The executor runs them top to bottom.
|
|
141
|
+
7. **References exist** — every path, function, and command named in a task exists in the repo or is created by an earlier task.
|
|
120
142
|
|
|
121
143
|
## After the plan
|
|
122
144
|
|
|
123
145
|
Save the plan, commit it, and tell the user:
|
|
124
146
|
|
|
125
|
-
> Plan saved to `<path>` and committed. To execute
|
|
147
|
+
> Plan saved to `<path>` and committed. To execute every task in order, say "run the plan" — I'll commit after each task and stop only on a stop condition (S1–S4). To run a single task, say "do TASK-01". To hand it to another LLM agent, run `/handoff-plan`.
|
|
126
148
|
|
|
127
|
-
Do not start implementing in the same turn. Wait for the user to
|
|
149
|
+
Do not start implementing in the same turn. Wait for the user to say how to run it.
|
|
@@ -8,5 +8,5 @@ This project uses tuncss-plan-kit. Four slash commands are available:
|
|
|
8
8
|
- `/handoff-plan` — generate a paste-ready handoff for another LLM agent (writes to `docs/handoffs/`)
|
|
9
9
|
- `/changelog` — record what changed, in plain sentences (writes to `docs/CHANGELOG.md`)
|
|
10
10
|
|
|
11
|
-
Plans contain an execution contract at the top.
|
|
11
|
+
Plans contain an execution contract at the top. By default, run every task in order: after each task passes its Verification, write the changelog entry and commit; stop only on a stop condition (S1–S4). "do TASK-03" runs only that task.
|
|
12
12
|
<!-- tuncss-plan-kit:end -->
|