tuncss-plan-kit 0.4.0 → 0.6.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 +6 -4
- package/bin/cli.js +14 -3
- package/commands/codex/brainstorm.md +1 -1
- package/commands/codex/changelog.md +1 -1
- package/commands/codex/handoff-plan.md +1 -1
- package/commands/codex/plan-universal.md +1 -1
- package/package.json +1 -1
- package/skills/brainstorm/SKILL.md +132 -132
- package/skills/changelog/SKILL.md +95 -95
- package/skills/plan-universal/SKILL.md +4 -16
- package/templates/instructions-block.md +12 -12
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
|
|
|
@@ -70,7 +72,7 @@ You: (review and approve)
|
|
|
70
72
|
You: /plan-universal
|
|
71
73
|
Agent: ↓ writing-plans skill
|
|
72
74
|
writes plan to docs/plans/ with execution contract at the top,
|
|
73
|
-
tasks shaped as Targets /
|
|
75
|
+
tasks shaped as Targets / Implementation Notes /
|
|
74
76
|
Done When / Verification
|
|
75
77
|
|
|
76
78
|
You: do TASK-01
|
|
@@ -96,7 +98,7 @@ Every plan starts with this contract:
|
|
|
96
98
|
> 5. If verification fails, report the failure and stop. Do not attempt fixes outside the task's Targets, and do not write a changelog entry.
|
|
97
99
|
> 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.
|
|
98
100
|
|
|
99
|
-
|
|
101
|
+
Plans carry contracts (types, signatures, commands) and pointers to existing code, not pasted function bodies — the executor writes the code.
|
|
100
102
|
|
|
101
103
|
## Options
|
|
102
104
|
|
|
@@ -106,7 +108,7 @@ npx tuncss-plan-kit init [--target=<list>] [--global] [--force]
|
|
|
106
108
|
|
|
107
109
|
| Flag | Effect |
|
|
108
110
|
|------|--------|
|
|
109
|
-
| `--target=<list>` | Comma-separated. Values: `claude`, `codex`, `antigravity`, `all`. Auto-detected if omitted. |
|
|
111
|
+
| `--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
112
|
| `--global` | Install to user-wide locations instead of the current project. |
|
|
111
113
|
| `--force` | Overwrite existing skill/command files without warning. |
|
|
112
114
|
|
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
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Use the `brainstorm` skill to handle the user's request.
|
|
1
|
+
Use the `brainstorm` skill to handle the user's request.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Use the `changelog` skill to handle the user's request.
|
|
1
|
+
Use the `changelog` skill to handle the user's request.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Use the `handoff-plan` skill to handle the user's request.
|
|
1
|
+
Use the `handoff-plan` skill to handle the user's request.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Use the `plan-universal` skill to handle the user's request.
|
|
1
|
+
Use the `plan-universal` skill to handle the user's request.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tuncss-plan-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.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": {
|
|
@@ -1,132 +1,132 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: brainstorm
|
|
3
|
-
description: Use before any feature, component, or behavior change. Turns an idea into an approved design before any code is written.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Brainstorming
|
|
7
|
-
|
|
8
|
-
Turn an idea into a design the user approves, then hand off to plan-universal. No code, no scaffolding, no implementation skill until the design is approved.
|
|
9
|
-
|
|
10
|
-
<HARD-GATE>
|
|
11
|
-
Do NOT write code, scaffold, edit files for the feature, or invoke an implementation skill until you have presented a design and the user has approved it. This applies to every project regardless of size.
|
|
12
|
-
</HARD-GATE>
|
|
13
|
-
|
|
14
|
-
## "This is too simple to need a design"
|
|
15
|
-
|
|
16
|
-
It isn't. A todo list, a one-file utility, a config tweak — all go through this. Simple-looking projects are where unexamined assumptions cost the most rework. The design can be three sentences for a trivial change. You still present it, you still get approval.
|
|
17
|
-
|
|
18
|
-
## Checklist
|
|
19
|
-
|
|
20
|
-
Work through these in order. Don't skip ahead.
|
|
21
|
-
|
|
22
|
-
1. Explore project context — relevant files, recent commits, any existing docs
|
|
23
|
-
2. Assess scope — if the request is actually several independent projects, decompose before going deeper
|
|
24
|
-
3. Ask clarifying questions — one per message, multiple-choice when you can
|
|
25
|
-
4. Propose 2-3 approaches — trade-offs and your recommendation
|
|
26
|
-
5. Present the design section by section, getting approval after each
|
|
27
|
-
6. Write the spec to `docs/specs/YYYY-MM-DD-<topic>-design.md`
|
|
28
|
-
7. Self-review the spec — placeholders, contradictions, ambiguity, scope
|
|
29
|
-
8. Wait for the user to review the written spec
|
|
30
|
-
9. Hand off — ask the user to run `/plan-universal` (or implement directly only if trivial; see Hand-off)
|
|
31
|
-
|
|
32
|
-
## Scope assessment
|
|
33
|
-
|
|
34
|
-
Before any clarifying questions, look at the request as a whole. If it describes multiple independent subsystems ("a platform with chat, billing, file storage, and analytics"), don't refine details — that's wasted effort on something that needs to be decomposed first.
|
|
35
|
-
|
|
36
|
-
When the request is too large for a single spec:
|
|
37
|
-
- Name the independent pieces and how they relate
|
|
38
|
-
- Suggest a build order
|
|
39
|
-
- Brainstorm only the first sub-project through this flow
|
|
40
|
-
- Each sub-project gets its own spec → plan → implementation cycle
|
|
41
|
-
|
|
42
|
-
## Asking clarifying questions
|
|
43
|
-
|
|
44
|
-
- One question per message. If a topic needs more, break it into multiple turns.
|
|
45
|
-
- Prefer multiple-choice. Open-ended is fine when the space is genuinely open.
|
|
46
|
-
- Focus on purpose, constraints, and what success looks like.
|
|
47
|
-
- Don't ask about anything you can derive from reading the code.
|
|
48
|
-
|
|
49
|
-
**If the user dumps answers in bulk** (numbered list answering several questions at once, or "just go ahead with X, Y, Z"), do NOT take it as permission to skip the gate. Acknowledge the answers, then ask 1-2 follow-ups on what those answers leave open — trade-offs, edge cases, or the next decision their choices imply ("LocalStorage confirmed — should we handle data clearing or schema versioning?"). Only move to approaches once those are resolved.
|
|
50
|
-
|
|
51
|
-
## Proposing approaches
|
|
52
|
-
|
|
53
|
-
Once you understand the goal, lay out 2-3 ways to solve it. Each gets its trade-offs in plain language. Lead with the one you'd pick and say why. Don't hide your recommendation behind false neutrality — but make it easy for the user to override.
|
|
54
|
-
|
|
55
|
-
## Presenting the design
|
|
56
|
-
|
|
57
|
-
Present in sections. Scale each section to its complexity:
|
|
58
|
-
- A few sentences for something straightforward
|
|
59
|
-
- Up to ~300 words when it's nuanced
|
|
60
|
-
|
|
61
|
-
After each section, ask if it looks right before moving on. Cover what's actually relevant: architecture, components, data flow, error handling, testing. Skip what doesn't apply.
|
|
62
|
-
|
|
63
|
-
If something doesn't fit together, go back and clarify. The point of these gates is to catch confusion before it lands in the spec.
|
|
64
|
-
|
|
65
|
-
## Designing for isolation
|
|
66
|
-
|
|
67
|
-
Break the system into small units that each have one purpose, talk to each other through clear interfaces, and can be understood and tested on their own.
|
|
68
|
-
|
|
69
|
-
For each unit, you should be able to answer:
|
|
70
|
-
- What does it do?
|
|
71
|
-
- How do you use it?
|
|
72
|
-
- What does it depend on?
|
|
73
|
-
|
|
74
|
-
If a consumer has to read the internals to use a unit, the boundary is wrong. If you can't change internals without breaking consumers, the boundary is wrong. Smaller, well-bounded units are also easier to work with later — edits get more reliable when files are focused.
|
|
75
|
-
|
|
76
|
-
## Working inside an existing codebase
|
|
77
|
-
|
|
78
|
-
- Read the surrounding code first. Follow the patterns already there.
|
|
79
|
-
- If existing code in the area has real problems that affect this work (an oversized file, tangled responsibilities, unclear boundaries), include the targeted improvement in the design — the way a careful developer cleans up the room they're working in.
|
|
80
|
-
- Don't bundle unrelated refactoring. Stay on what serves the goal.
|
|
81
|
-
|
|
82
|
-
## YAGNI
|
|
83
|
-
|
|
84
|
-
Cut anything the request doesn't need yet. Future-proofing, config options "just in case", an abstraction for a hypothetical second consumer — all out, unless the user has actually named the second consumer.
|
|
85
|
-
|
|
86
|
-
## Writing the spec
|
|
87
|
-
|
|
88
|
-
After every section is approved, write the spec to `docs/specs/YYYY-MM-DD-<topic>-design.md` (override if the user has set a different location). Create `docs/specs/` if it doesn't exist. Commit the file.
|
|
89
|
-
|
|
90
|
-
The spec is the document a future implementer reads. It captures decisions, not your reasoning trail. Keep it tight.
|
|
91
|
-
|
|
92
|
-
## Spec self-review
|
|
93
|
-
|
|
94
|
-
Re-read with fresh eyes. Fix issues inline; no second review pass.
|
|
95
|
-
|
|
96
|
-
1. **Placeholders** — any "TBD", "TODO", or vague requirement? Resolve them.
|
|
97
|
-
2. **Internal consistency** — do sections contradict each other? Does the architecture match the feature description?
|
|
98
|
-
3. **Scope** — is this still a single implementation plan, or did it grow into something that needs decomposing?
|
|
99
|
-
4. **Ambiguity** — could a requirement be read two different ways? Pick one and make it explicit.
|
|
100
|
-
|
|
101
|
-
## User review gate
|
|
102
|
-
|
|
103
|
-
After your self-review, ask the user to read the written spec:
|
|
104
|
-
|
|
105
|
-
> Spec written and committed to `<path>`. Please review it and let me know if you want changes before we move to the implementation plan.
|
|
106
|
-
|
|
107
|
-
Wait for their response. If they ask for changes, make them and re-run the self-review. Only move on once they approve.
|
|
108
|
-
|
|
109
|
-
## Hand-off
|
|
110
|
-
|
|
111
|
-
After the spec is approved, **do NOT start implementing**. The skill ends here. The next step is `/plan-universal`, which turns the spec into an executable plan with
|
|
112
|
-
|
|
113
|
-
End your final turn with this message to the user (paraphrase, but keep all four parts):
|
|
114
|
-
|
|
115
|
-
> Spec is locked at `<path>`. Want me to write the implementation plan via `/plan-universal`? Or, if this is small enough — one file, no new public API, no schema or migration changes, no new dependency — say "implement directly" and I'll do it now.
|
|
116
|
-
|
|
117
|
-
Then **stop and wait** for the user's choice. Default is `/plan-universal`. Implement directly **only** when:
|
|
118
|
-
- The user explicitly says so (the phrase "implement directly" or equivalent)
|
|
119
|
-
- **AND** the change meets every trivial criterion above
|
|
120
|
-
|
|
121
|
-
If you find yourself thinking "the spec is small, I'll just knock it out" — that's the drift this gate exists to catch. Stop. Hand off.
|
|
122
|
-
|
|
123
|
-
Do not invoke any other skill from this skill.
|
|
124
|
-
|
|
125
|
-
## Key principles
|
|
126
|
-
|
|
127
|
-
- One question at a time
|
|
128
|
-
- Multiple choice when you can
|
|
129
|
-
- YAGNI hard
|
|
130
|
-
- Always explore 2-3 approaches before settling
|
|
131
|
-
- Approve as you go — don't drop a wall of design and ask "thoughts?"
|
|
132
|
-
- Be willing to back up when something doesn't fit
|
|
1
|
+
---
|
|
2
|
+
name: brainstorm
|
|
3
|
+
description: Use before any feature, component, or behavior change. Turns an idea into an approved design before any code is written.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Brainstorming
|
|
7
|
+
|
|
8
|
+
Turn an idea into a design the user approves, then hand off to plan-universal. No code, no scaffolding, no implementation skill until the design is approved.
|
|
9
|
+
|
|
10
|
+
<HARD-GATE>
|
|
11
|
+
Do NOT write code, scaffold, edit files for the feature, or invoke an implementation skill until you have presented a design and the user has approved it. This applies to every project regardless of size.
|
|
12
|
+
</HARD-GATE>
|
|
13
|
+
|
|
14
|
+
## "This is too simple to need a design"
|
|
15
|
+
|
|
16
|
+
It isn't. A todo list, a one-file utility, a config tweak — all go through this. Simple-looking projects are where unexamined assumptions cost the most rework. The design can be three sentences for a trivial change. You still present it, you still get approval.
|
|
17
|
+
|
|
18
|
+
## Checklist
|
|
19
|
+
|
|
20
|
+
Work through these in order. Don't skip ahead.
|
|
21
|
+
|
|
22
|
+
1. Explore project context — relevant files, recent commits, any existing docs
|
|
23
|
+
2. Assess scope — if the request is actually several independent projects, decompose before going deeper
|
|
24
|
+
3. Ask clarifying questions — one per message, multiple-choice when you can
|
|
25
|
+
4. Propose 2-3 approaches — trade-offs and your recommendation
|
|
26
|
+
5. Present the design section by section, getting approval after each
|
|
27
|
+
6. Write the spec to `docs/specs/YYYY-MM-DD-<topic>-design.md`
|
|
28
|
+
7. Self-review the spec — placeholders, contradictions, ambiguity, scope
|
|
29
|
+
8. Wait for the user to review the written spec
|
|
30
|
+
9. Hand off — ask the user to run `/plan-universal` (or implement directly only if trivial; see Hand-off)
|
|
31
|
+
|
|
32
|
+
## Scope assessment
|
|
33
|
+
|
|
34
|
+
Before any clarifying questions, look at the request as a whole. If it describes multiple independent subsystems ("a platform with chat, billing, file storage, and analytics"), don't refine details — that's wasted effort on something that needs to be decomposed first.
|
|
35
|
+
|
|
36
|
+
When the request is too large for a single spec:
|
|
37
|
+
- Name the independent pieces and how they relate
|
|
38
|
+
- Suggest a build order
|
|
39
|
+
- Brainstorm only the first sub-project through this flow
|
|
40
|
+
- Each sub-project gets its own spec → plan → implementation cycle
|
|
41
|
+
|
|
42
|
+
## Asking clarifying questions
|
|
43
|
+
|
|
44
|
+
- One question per message. If a topic needs more, break it into multiple turns.
|
|
45
|
+
- Prefer multiple-choice. Open-ended is fine when the space is genuinely open.
|
|
46
|
+
- Focus on purpose, constraints, and what success looks like.
|
|
47
|
+
- Don't ask about anything you can derive from reading the code.
|
|
48
|
+
|
|
49
|
+
**If the user dumps answers in bulk** (numbered list answering several questions at once, or "just go ahead with X, Y, Z"), do NOT take it as permission to skip the gate. Acknowledge the answers, then ask 1-2 follow-ups on what those answers leave open — trade-offs, edge cases, or the next decision their choices imply ("LocalStorage confirmed — should we handle data clearing or schema versioning?"). Only move to approaches once those are resolved.
|
|
50
|
+
|
|
51
|
+
## Proposing approaches
|
|
52
|
+
|
|
53
|
+
Once you understand the goal, lay out 2-3 ways to solve it. Each gets its trade-offs in plain language. Lead with the one you'd pick and say why. Don't hide your recommendation behind false neutrality — but make it easy for the user to override.
|
|
54
|
+
|
|
55
|
+
## Presenting the design
|
|
56
|
+
|
|
57
|
+
Present in sections. Scale each section to its complexity:
|
|
58
|
+
- A few sentences for something straightforward
|
|
59
|
+
- Up to ~300 words when it's nuanced
|
|
60
|
+
|
|
61
|
+
After each section, ask if it looks right before moving on. Cover what's actually relevant: architecture, components, data flow, error handling, testing. Skip what doesn't apply.
|
|
62
|
+
|
|
63
|
+
If something doesn't fit together, go back and clarify. The point of these gates is to catch confusion before it lands in the spec.
|
|
64
|
+
|
|
65
|
+
## Designing for isolation
|
|
66
|
+
|
|
67
|
+
Break the system into small units that each have one purpose, talk to each other through clear interfaces, and can be understood and tested on their own.
|
|
68
|
+
|
|
69
|
+
For each unit, you should be able to answer:
|
|
70
|
+
- What does it do?
|
|
71
|
+
- How do you use it?
|
|
72
|
+
- What does it depend on?
|
|
73
|
+
|
|
74
|
+
If a consumer has to read the internals to use a unit, the boundary is wrong. If you can't change internals without breaking consumers, the boundary is wrong. Smaller, well-bounded units are also easier to work with later — edits get more reliable when files are focused.
|
|
75
|
+
|
|
76
|
+
## Working inside an existing codebase
|
|
77
|
+
|
|
78
|
+
- Read the surrounding code first. Follow the patterns already there.
|
|
79
|
+
- If existing code in the area has real problems that affect this work (an oversized file, tangled responsibilities, unclear boundaries), include the targeted improvement in the design — the way a careful developer cleans up the room they're working in.
|
|
80
|
+
- Don't bundle unrelated refactoring. Stay on what serves the goal.
|
|
81
|
+
|
|
82
|
+
## YAGNI
|
|
83
|
+
|
|
84
|
+
Cut anything the request doesn't need yet. Future-proofing, config options "just in case", an abstraction for a hypothetical second consumer — all out, unless the user has actually named the second consumer.
|
|
85
|
+
|
|
86
|
+
## Writing the spec
|
|
87
|
+
|
|
88
|
+
After every section is approved, write the spec to `docs/specs/YYYY-MM-DD-<topic>-design.md` (override if the user has set a different location). Create `docs/specs/` if it doesn't exist. Commit the file.
|
|
89
|
+
|
|
90
|
+
The spec is the document a future implementer reads. It captures decisions, not your reasoning trail. Keep it tight.
|
|
91
|
+
|
|
92
|
+
## Spec self-review
|
|
93
|
+
|
|
94
|
+
Re-read with fresh eyes. Fix issues inline; no second review pass.
|
|
95
|
+
|
|
96
|
+
1. **Placeholders** — any "TBD", "TODO", or vague requirement? Resolve them.
|
|
97
|
+
2. **Internal consistency** — do sections contradict each other? Does the architecture match the feature description?
|
|
98
|
+
3. **Scope** — is this still a single implementation plan, or did it grow into something that needs decomposing?
|
|
99
|
+
4. **Ambiguity** — could a requirement be read two different ways? Pick one and make it explicit.
|
|
100
|
+
|
|
101
|
+
## User review gate
|
|
102
|
+
|
|
103
|
+
After your self-review, ask the user to read the written spec:
|
|
104
|
+
|
|
105
|
+
> Spec written and committed to `<path>`. Please review it and let me know if you want changes before we move to the implementation plan.
|
|
106
|
+
|
|
107
|
+
Wait for their response. If they ask for changes, make them and re-run the self-review. Only move on once they approve.
|
|
108
|
+
|
|
109
|
+
## Hand-off
|
|
110
|
+
|
|
111
|
+
After the spec is approved, **do NOT start implementing**. The skill ends here. The next step is `/plan-universal`, which turns the spec into an executable plan with per-task verification.
|
|
112
|
+
|
|
113
|
+
End your final turn with this message to the user (paraphrase, but keep all four parts):
|
|
114
|
+
|
|
115
|
+
> Spec is locked at `<path>`. Want me to write the implementation plan via `/plan-universal`? Or, if this is small enough — one file, no new public API, no schema or migration changes, no new dependency — say "implement directly" and I'll do it now.
|
|
116
|
+
|
|
117
|
+
Then **stop and wait** for the user's choice. Default is `/plan-universal`. Implement directly **only** when:
|
|
118
|
+
- The user explicitly says so (the phrase "implement directly" or equivalent)
|
|
119
|
+
- **AND** the change meets every trivial criterion above
|
|
120
|
+
|
|
121
|
+
If you find yourself thinking "the spec is small, I'll just knock it out" — that's the drift this gate exists to catch. Stop. Hand off.
|
|
122
|
+
|
|
123
|
+
Do not invoke any other skill from this skill.
|
|
124
|
+
|
|
125
|
+
## Key principles
|
|
126
|
+
|
|
127
|
+
- One question at a time
|
|
128
|
+
- Multiple choice when you can
|
|
129
|
+
- YAGNI hard
|
|
130
|
+
- Always explore 2-3 approaches before settling
|
|
131
|
+
- Approve as you go — don't drop a wall of design and ask "thoughts?"
|
|
132
|
+
- Be willing to back up when something doesn't fit
|
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: changelog
|
|
3
|
-
description: Use when a plan task has just been completed, or when the user runs /changelog, to append a short entry describing what actually changed to docs/CHANGELOG.md.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Changelog
|
|
7
|
-
|
|
8
|
-
Append a short, concrete record of what changed to `docs/CHANGELOG.md`. The reader is a teammate who did not do the work and wants to know what is different now. Commit messages already failed at this — do not write another one.
|
|
9
|
-
|
|
10
|
-
**Announce at start:** "Writing the changelog entry."
|
|
11
|
-
|
|
12
|
-
## Two ways in
|
|
13
|
-
|
|
14
|
-
**From a completed plan task.** Rule 6 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
|
-
|
|
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
|
-
|
|
18
|
-
If a task's verification failed, do not write an entry at all. That work is usually not merged, and recording it would put a change that did not happen into the log.
|
|
19
|
-
|
|
20
|
-
## Gather the facts first
|
|
21
|
-
|
|
22
|
-
Run these before writing anything. Never write an entry from memory of what you set out to do — write it from what actually landed.
|
|
23
|
-
|
|
24
|
-
- `git diff` and `git diff --staged` — the real change
|
|
25
|
-
- `git config user.name` — the author name
|
|
26
|
-
|
|
27
|
-
The diff is your source, not your content: it tells you what to write about, and none of it is copied into the entry.
|
|
28
|
-
|
|
29
|
-
If both diffs are empty and nothing was just committed for this work, stop and tell the user there is nothing to record.
|
|
30
|
-
|
|
31
|
-
## How to write the bullets
|
|
32
|
-
|
|
33
|
-
This is the whole skill. Everything else is placement.
|
|
34
|
-
|
|
35
|
-
1. Every bullet names the thing that changed.
|
|
36
|
-
2. If a value changed, give **old → new**.
|
|
37
|
-
3. Banned: any phrasing that does not say what became what. "Improved", "refactored", "fixed issues", "optimized", "cleaned up", "enhanced" — and their equivalents in any language.
|
|
38
|
-
4. One to five bullets per entry. If you need more than five, say so in your report to the user: the task was too large. Write the entry anyway.
|
|
39
|
-
5. Write in the language the repository uses. This skill is in English; the entries it produces are not necessarily.
|
|
40
|
-
|
|
41
|
-
Good:
|
|
42
|
-
- `Read threshold lowered from -60 dB to -80 dB`
|
|
43
|
-
- `Token validation moved out of every handler into a single requireAuth middleware`
|
|
44
|
-
- `Session lifetime cut from 24 hours to 2 hours`
|
|
45
|
-
|
|
46
|
-
Bad:
|
|
47
|
-
- `Improved bluetooth reliability` — what became what?
|
|
48
|
-
- `Refactored auth` — same.
|
|
49
|
-
- `Various fixes` — same.
|
|
50
|
-
|
|
51
|
-
## Entry shape
|
|
52
|
-
|
|
53
|
-
For a plan task:
|
|
54
|
-
|
|
55
|
-
```markdown
|
|
56
|
-
### <task name> — TASK-NN · <author> · [plan](<plan path>)
|
|
57
|
-
- <bullet>
|
|
58
|
-
- <bullet>
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
For off-plan work:
|
|
62
|
-
|
|
63
|
-
```markdown
|
|
64
|
-
### <short name> — off-plan · <author>
|
|
65
|
-
- <bullet>
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
The `off-plan` label is written in the repository's language, like the bullets.
|
|
69
|
-
|
|
70
|
-
If `git config user.name` is empty, drop both the author and the `·` that separates it. Never invent a name.
|
|
71
|
-
|
|
72
|
-
## Where it goes
|
|
73
|
-
|
|
74
|
-
The file is `docs/CHANGELOG.md`. Create it if missing, with `# Changelog` as the first line.
|
|
75
|
-
|
|
76
|
-
Entries are grouped under date headings, newest first:
|
|
77
|
-
|
|
78
|
-
```markdown
|
|
79
|
-
# Changelog
|
|
80
|
-
|
|
81
|
-
## 2026-09-04
|
|
82
|
-
|
|
83
|
-
### Auth middleware — TASK-03 · Mustafa TUNÇ · [plan](docs/plans/2026-09-02-auth.md)
|
|
84
|
-
- Token validation moved out of every handler into a single requireAuth middleware
|
|
85
|
-
- Response on an invalid token changed from 200 with an empty body to 401
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
Placement rule — follow it exactly, so that three people's agents do not grow the file from three different places:
|
|
89
|
-
|
|
90
|
-
- If today's date heading already exists, append the entry at the end of that section.
|
|
91
|
-
- If it does not, insert a new date heading immediately after the `# Changelog` line.
|
|
92
|
-
|
|
93
|
-
## Do not commit
|
|
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.
|
|
1
|
+
---
|
|
2
|
+
name: changelog
|
|
3
|
+
description: Use when a plan task has just been completed, or when the user runs /changelog, to append a short entry describing what actually changed to docs/CHANGELOG.md.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Changelog
|
|
7
|
+
|
|
8
|
+
Append a short, concrete record of what changed to `docs/CHANGELOG.md`. The reader is a teammate who did not do the work and wants to know what is different now. Commit messages already failed at this — do not write another one.
|
|
9
|
+
|
|
10
|
+
**Announce at start:** "Writing the changelog entry."
|
|
11
|
+
|
|
12
|
+
## Two ways in
|
|
13
|
+
|
|
14
|
+
**From a completed plan task.** Rule 6 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
|
+
|
|
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
|
+
|
|
18
|
+
If a task's verification failed, do not write an entry at all. That work is usually not merged, and recording it would put a change that did not happen into the log.
|
|
19
|
+
|
|
20
|
+
## Gather the facts first
|
|
21
|
+
|
|
22
|
+
Run these before writing anything. Never write an entry from memory of what you set out to do — write it from what actually landed.
|
|
23
|
+
|
|
24
|
+
- `git diff` and `git diff --staged` — the real change
|
|
25
|
+
- `git config user.name` — the author name
|
|
26
|
+
|
|
27
|
+
The diff is your source, not your content: it tells you what to write about, and none of it is copied into the entry.
|
|
28
|
+
|
|
29
|
+
If both diffs are empty and nothing was just committed for this work, stop and tell the user there is nothing to record.
|
|
30
|
+
|
|
31
|
+
## How to write the bullets
|
|
32
|
+
|
|
33
|
+
This is the whole skill. Everything else is placement.
|
|
34
|
+
|
|
35
|
+
1. Every bullet names the thing that changed.
|
|
36
|
+
2. If a value changed, give **old → new**.
|
|
37
|
+
3. Banned: any phrasing that does not say what became what. "Improved", "refactored", "fixed issues", "optimized", "cleaned up", "enhanced" — and their equivalents in any language.
|
|
38
|
+
4. One to five bullets per entry. If you need more than five, say so in your report to the user: the task was too large. Write the entry anyway.
|
|
39
|
+
5. Write in the language the repository uses. This skill is in English; the entries it produces are not necessarily.
|
|
40
|
+
|
|
41
|
+
Good:
|
|
42
|
+
- `Read threshold lowered from -60 dB to -80 dB`
|
|
43
|
+
- `Token validation moved out of every handler into a single requireAuth middleware`
|
|
44
|
+
- `Session lifetime cut from 24 hours to 2 hours`
|
|
45
|
+
|
|
46
|
+
Bad:
|
|
47
|
+
- `Improved bluetooth reliability` — what became what?
|
|
48
|
+
- `Refactored auth` — same.
|
|
49
|
+
- `Various fixes` — same.
|
|
50
|
+
|
|
51
|
+
## Entry shape
|
|
52
|
+
|
|
53
|
+
For a plan task:
|
|
54
|
+
|
|
55
|
+
```markdown
|
|
56
|
+
### <task name> — TASK-NN · <author> · [plan](<plan path>)
|
|
57
|
+
- <bullet>
|
|
58
|
+
- <bullet>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
For off-plan work:
|
|
62
|
+
|
|
63
|
+
```markdown
|
|
64
|
+
### <short name> — off-plan · <author>
|
|
65
|
+
- <bullet>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The `off-plan` label is written in the repository's language, like the bullets.
|
|
69
|
+
|
|
70
|
+
If `git config user.name` is empty, drop both the author and the `·` that separates it. Never invent a name.
|
|
71
|
+
|
|
72
|
+
## Where it goes
|
|
73
|
+
|
|
74
|
+
The file is `docs/CHANGELOG.md`. Create it if missing, with `# Changelog` as the first line.
|
|
75
|
+
|
|
76
|
+
Entries are grouped under date headings, newest first:
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
# Changelog
|
|
80
|
+
|
|
81
|
+
## 2026-09-04
|
|
82
|
+
|
|
83
|
+
### Auth middleware — TASK-03 · Mustafa TUNÇ · [plan](docs/plans/2026-09-02-auth.md)
|
|
84
|
+
- Token validation moved out of every handler into a single requireAuth middleware
|
|
85
|
+
- Response on an invalid token changed from 200 with an empty body to 401
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Placement rule — follow it exactly, so that three people's agents do not grow the file from three different places:
|
|
89
|
+
|
|
90
|
+
- If today's date heading already exists, append the entry at the end of that section.
|
|
91
|
+
- If it does not, insert a new date heading immediately after the `# Changelog` line.
|
|
92
|
+
|
|
93
|
+
## Do not commit
|
|
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.
|
|
@@ -55,17 +55,6 @@ Every plan starts with this header:
|
|
|
55
55
|
---
|
|
56
56
|
````
|
|
57
57
|
|
|
58
|
-
## Model tiers
|
|
59
|
-
|
|
60
|
-
Every task gets a recommended tier. These are the cost/capability brackets for the model that should execute it:
|
|
61
|
-
|
|
62
|
-
- **T1 — Fast:** trivial edits, renames, formatting, single-file boilerplate
|
|
63
|
-
- **T2 — Balanced:** standard feature work in one component, contained logic
|
|
64
|
-
- **T3 — Power:** multi-file changes, non-trivial logic, refactors with consequence
|
|
65
|
-
- **T4 — Reasoning:** architecture decisions, gnarly debugging, cross-cutting design
|
|
66
|
-
|
|
67
|
-
When in doubt, pick the lower tier. Upgrades are cheap; over-spending isn't.
|
|
68
|
-
|
|
69
58
|
## Task structure
|
|
70
59
|
|
|
71
60
|
Every task uses this shape:
|
|
@@ -77,13 +66,12 @@ Every task uses this shape:
|
|
|
77
66
|
- `exact/path/to/file.ts` (create | modify | delete)
|
|
78
67
|
- `exact/path/to/other.ts` (modify)
|
|
79
68
|
|
|
80
|
-
**Model Tier:** T2 <!-- T1 Fast | T2 Balanced | T3 Power | T4 Reasoning -->
|
|
81
|
-
|
|
82
69
|
**Implementation Notes:**
|
|
83
70
|
- What this task does, in plain language
|
|
84
71
|
- Any non-obvious decision and why
|
|
85
|
-
-
|
|
86
|
-
-
|
|
72
|
+
- The contract the executor can't guess: types, function signatures, commands, config keys. Write code bodies only for logic that is genuinely non-obvious (an algorithm, a regex, a query, a tricky edge case) — the executor writes the rest
|
|
73
|
+
- Point to existing code instead of copying it: "follow the handler pattern in `src/routes/users.ts:40`"
|
|
74
|
+
- If a public interface from an earlier task is consumed here, restate its signature only; don't make the reader page back
|
|
87
75
|
|
|
88
76
|
**Done When:**
|
|
89
77
|
- Bullet list of observable outcomes
|
|
@@ -117,7 +105,7 @@ These are **plan failures**. Never write them:
|
|
|
117
105
|
- "Add appropriate error handling" / "validate input" / "handle edge cases" — name the cases
|
|
118
106
|
- "Write tests for the above" without the actual test names and what they assert
|
|
119
107
|
- "Similar to TASK-N" — repeat what's needed; the executor reads tasks out of order
|
|
120
|
-
- Steps that describe *what* without
|
|
108
|
+
- 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
|
|
121
109
|
- References to types, functions, or files not defined in any task or in the file map
|
|
122
110
|
|
|
123
111
|
## Self-review
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
<!-- tuncss-plan-kit:start -->
|
|
2
|
-
## Plan Kit
|
|
3
|
-
|
|
4
|
-
This project uses tuncss-plan-kit. Four slash commands are available:
|
|
5
|
-
|
|
6
|
-
- `/brainstorm` — turn an idea into an approved spec (writes to `docs/specs/`)
|
|
7
|
-
- `/plan-universal` — turn a spec into an executable plan (writes to `docs/plans/`)
|
|
8
|
-
- `/handoff-plan` — generate a paste-ready handoff for another LLM agent (writes to `docs/handoffs/`)
|
|
9
|
-
- `/changelog` — record what changed, in plain sentences (writes to `docs/CHANGELOG.md`)
|
|
10
|
-
|
|
11
|
-
Plans contain an execution contract at the top. When asked for a specific task ("do TASK-03"), read only that task's block, stay inside its Targets, write the changelog entry, then stop and report when Done When + Verification are satisfied.
|
|
12
|
-
<!-- tuncss-plan-kit:end -->
|
|
1
|
+
<!-- tuncss-plan-kit:start -->
|
|
2
|
+
## Plan Kit
|
|
3
|
+
|
|
4
|
+
This project uses tuncss-plan-kit. Four slash commands are available:
|
|
5
|
+
|
|
6
|
+
- `/brainstorm` — turn an idea into an approved spec (writes to `docs/specs/`)
|
|
7
|
+
- `/plan-universal` — turn a spec into an executable plan (writes to `docs/plans/`)
|
|
8
|
+
- `/handoff-plan` — generate a paste-ready handoff for another LLM agent (writes to `docs/handoffs/`)
|
|
9
|
+
- `/changelog` — record what changed, in plain sentences (writes to `docs/CHANGELOG.md`)
|
|
10
|
+
|
|
11
|
+
Plans contain an execution contract at the top. When asked for a specific task ("do TASK-03"), read only that task's block, stay inside its Targets, write the changelog entry, then stop and report when Done When + Verification are satisfied.
|
|
12
|
+
<!-- tuncss-plan-kit:end -->
|