@jhongutang0116/claude-skills 1.0.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jhon Gutang
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,114 @@
1
+ # @jhongutang0116/claude-skills
2
+
3
+ Personal [Claude Code](https://docs.claude.com/en/docs/claude-code) skill library.
4
+ Install the package once, run one command, and the skills land in a project's
5
+ `.claude/skills/` (or `~/.claude/skills/` for every project on the machine) — no
6
+ hand-copying.
7
+
8
+ ## Bundled skills
9
+
10
+ | Skill | What it does |
11
+ |---|---|
12
+ | `implementation-workflow` | Gated four-phase build pipeline: SRS → Development → Testing → Documentation. Language/framework-agnostic. |
13
+ | `plan-checklist` | Generates and enforces a single `plan.md` build-and-checklist file from an approved SRS. |
14
+
15
+ Run `npx claude-skills list` to see what a given version ships.
16
+
17
+ ## Install into another project
18
+
19
+ ```sh
20
+ npm install -D @jhongutang0116/claude-skills
21
+ npx claude-skills install # all skills
22
+ npx claude-skills install implementation-workflow # just one (or list several)
23
+ ```
24
+
25
+ This copies each selected skill into `./.claude/skills/<name>/`. Claude Code picks
26
+ them up automatically as project skills. Run `npx claude-skills list` first to see
27
+ the available names.
28
+
29
+ To keep them in sync on every `npm install`, add to that project's `package.json`:
30
+
31
+ ```json
32
+ {
33
+ "scripts": {
34
+ "postinstall": "claude-skills install --force"
35
+ }
36
+ }
37
+ ```
38
+
39
+ Then either commit `.claude/skills/` or add it to that project's `.gitignore`
40
+ and let `postinstall` regenerate it.
41
+
42
+ ## Install once for every project on the machine
43
+
44
+ ```sh
45
+ npm install -g @jhongutang0116/claude-skills
46
+ claude-skills install --global # -> ~/.claude/skills/
47
+ ```
48
+
49
+ Re-run after upgrading the package (`npm update -g @jhongutang0116/claude-skills`).
50
+
51
+ ## Install without publishing to npm
52
+
53
+ Works straight from GitHub — no registry account needed, private repo is fine:
54
+
55
+ ```sh
56
+ npm install -D github:JhonGutang/personal-skill-library
57
+ npx claude-skills install
58
+ ```
59
+
60
+ ## CLI
61
+
62
+ ```
63
+ claude-skills install [skill...] [--dir <path>] [--global] [--force] [--dry-run]
64
+ claude-skills list
65
+ claude-skills --help
66
+ ```
67
+
68
+ - `skill...` — names to install; omit to install every bundled skill. An unknown
69
+ name is rejected with the list of valid ones.
70
+ - `--dir <path>` — target project directory (default: current directory). Skills
71
+ go into `<path>/.claude/skills/`.
72
+ - `--global` — target `~/.claude/skills/` instead of a project.
73
+ - `--force` — overwrite skills that already exist at the destination.
74
+ - `--dry-run` — print the plan without writing.
75
+
76
+ ```sh
77
+ claude-skills install plan-checklist --dir ../other-project --force
78
+ claude-skills install implementation-workflow --global
79
+ ```
80
+
81
+ ## Adding or editing a skill
82
+
83
+ 1. Create `skills/<skill-name>/SKILL.md` with YAML frontmatter (`name`, `description`)
84
+ plus any `references/`, `assets/`, `scripts/` the skill needs.
85
+ 2. `node bin/cli.js list` to confirm it's discovered (a directory counts as a
86
+ skill only if it contains `SKILL.md`).
87
+ 3. Bump the version and publish (below).
88
+
89
+ ## Publishing a new version
90
+
91
+ ```sh
92
+ npm version patch # or minor / major — commits + tags
93
+ npm publish # publishConfig.access=public handles scoped visibility
94
+ git push --follow-tags
95
+ ```
96
+
97
+ Publishing needs 2FA on the npm account: either run `npm publish` and enter the
98
+ authenticator OTP when prompted (`--otp=<code>` to pass it inline), or publish
99
+ with a **granular access token** that has "bypass 2FA" enabled (see
100
+ `~/.npmrc` setup below — required for CI).
101
+
102
+ ```sh
103
+ # token-based auth (put in ~/.npmrc, never commit it):
104
+ //registry.npmjs.org/:_authToken=npm_xxxxxxxxxxxxxxxxxxxx
105
+ ```
106
+
107
+ ## Local testing before publishing
108
+
109
+ ```sh
110
+ npm pack # inspect the .tgz contents
111
+ npm link # then, in another project:
112
+ claude-skills install
113
+ npm rm -g @jhongutang0116/claude-skills
114
+ ```
package/bin/cli.js ADDED
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env node
2
+ // Sync the bundled Claude Code skills into a project's .claude/skills/
3
+ // (or ~/.claude/skills/ with --global). No runtime dependencies.
4
+
5
+ import {
6
+ existsSync,
7
+ mkdirSync,
8
+ readdirSync,
9
+ rmSync,
10
+ cpSync,
11
+ statSync,
12
+ } from "node:fs";
13
+ import { homedir } from "node:os";
14
+ import { dirname, join, resolve } from "node:path";
15
+ import { fileURLToPath } from "node:url";
16
+ import { parseArgs } from "node:util";
17
+
18
+ const here = dirname(fileURLToPath(import.meta.url));
19
+ const SRC = resolve(here, "..", "skills");
20
+
21
+ const HELP = `claude-skills — sync personal Claude Code skills into a project
22
+
23
+ Usage:
24
+ claude-skills install [skill...] [--dir <path>] [--global] [--force] [--dry-run]
25
+ claude-skills list
26
+ claude-skills --help
27
+
28
+ Commands:
29
+ install Copy skills into <path>/.claude/skills/. With no skill names,
30
+ every bundled skill is installed; otherwise only the ones named.
31
+ list Print the names of the bundled skills
32
+
33
+ Flags:
34
+ --dir <path> Target project directory (default: current directory)
35
+ --global Install into ~/.claude/skills/ instead of a project
36
+ --force Overwrite skills that already exist at the destination
37
+ --dry-run Show what would happen without writing anything
38
+
39
+ Examples:
40
+ claude-skills install
41
+ claude-skills install implementation-workflow
42
+ claude-skills install plan-checklist --dir ../other-project --force
43
+ claude-skills install implementation-workflow --global
44
+ `;
45
+
46
+ function bundledSkills() {
47
+ if (!existsSync(SRC)) return [];
48
+ return readdirSync(SRC)
49
+ .filter((name) => {
50
+ const p = join(SRC, name);
51
+ return statSync(p).isDirectory() && existsSync(join(p, "SKILL.md"));
52
+ })
53
+ .sort();
54
+ }
55
+
56
+ let parsed;
57
+ try {
58
+ parsed = parseArgs({
59
+ allowPositionals: true,
60
+ options: {
61
+ dir: { type: "string" },
62
+ global: { type: "boolean", default: false },
63
+ force: { type: "boolean", default: false },
64
+ "dry-run": { type: "boolean", default: false },
65
+ help: { type: "boolean", short: "h", default: false },
66
+ },
67
+ });
68
+ } catch (err) {
69
+ console.error(`${err.message}\n\n${HELP}`);
70
+ process.exit(1);
71
+ }
72
+
73
+ const { values, positionals } = parsed;
74
+ const cmd = positionals[0] ?? "install";
75
+ const requested = positionals.slice(1);
76
+
77
+ if (values.help || cmd === "help") {
78
+ process.stdout.write(HELP);
79
+ process.exit(0);
80
+ }
81
+
82
+ const all = bundledSkills();
83
+ if (all.length === 0) {
84
+ console.error("No bundled skills found next to this CLI.");
85
+ process.exit(1);
86
+ }
87
+
88
+ if (cmd === "list") {
89
+ for (const s of all) console.log(s);
90
+ process.exit(0);
91
+ }
92
+
93
+ if (cmd !== "install") {
94
+ console.error(`Unknown command: ${cmd}\n\n${HELP}`);
95
+ process.exit(1);
96
+ }
97
+
98
+ // --- install ---------------------------------------------------------------
99
+
100
+ let selected;
101
+ if (requested.length === 0) {
102
+ selected = all;
103
+ } else {
104
+ const unknown = requested.filter((s) => !all.includes(s));
105
+ if (unknown.length > 0) {
106
+ console.error(`Unknown skill(s): ${unknown.join(", ")}`);
107
+ console.error(`Available: ${all.join(", ")}`);
108
+ process.exit(1);
109
+ }
110
+ // de-dupe while preserving order
111
+ selected = [...new Set(requested)];
112
+ }
113
+
114
+ const dest = values.global
115
+ ? join(homedir(), ".claude", "skills")
116
+ : join(values.dir ? resolve(values.dir) : process.cwd(), ".claude", "skills");
117
+
118
+ const dry = values["dry-run"];
119
+ const force = values.force;
120
+
121
+ console.log(
122
+ `${dry ? "[dry-run] " : ""}installing ${selected.length} skill(s) -> ${dest}`,
123
+ );
124
+ if (!dry) mkdirSync(dest, { recursive: true });
125
+
126
+ let copied = 0;
127
+ let skipped = 0;
128
+ for (const s of selected) {
129
+ const to = join(dest, s);
130
+ if (existsSync(to) && !force) {
131
+ console.log(` skip ${s} (already exists — pass --force to overwrite)`);
132
+ skipped++;
133
+ continue;
134
+ }
135
+ if (!dry) {
136
+ if (existsSync(to)) rmSync(to, { recursive: true, force: true });
137
+ cpSync(join(SRC, s), to, { recursive: true });
138
+ }
139
+ console.log(` ${force && !dry ? "update" : "copy "} ${s}`);
140
+ copied++;
141
+ }
142
+
143
+ console.log(`done: ${copied} written, ${skipped} skipped`);
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@jhongutang0116/claude-skills",
3
+ "version": "1.0.0",
4
+ "description": "Personal Claude Code skill library — installable into any project's .claude/skills/",
5
+ "type": "module",
6
+ "bin": {
7
+ "claude-skills": "bin/cli.js"
8
+ },
9
+ "files": [
10
+ "bin",
11
+ "skills"
12
+ ],
13
+ "engines": {
14
+ "node": ">=18"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "scripts": {
20
+ "test": "node bin/cli.js list"
21
+ },
22
+ "keywords": [
23
+ "claude",
24
+ "claude-code",
25
+ "skills",
26
+ "agent-skills"
27
+ ],
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/JhonGutang/personal-skill-library.git"
31
+ },
32
+ "author": "Jhon Gutang",
33
+ "license": "MIT"
34
+ }
@@ -0,0 +1,58 @@
1
+ ---
2
+ name: implementation-workflow
3
+ description: Runs a structured four-phase build workflow for new features or systems — SRS (requirements gathering) → Development → Testing → Documentation. Use this skill whenever the user wants to build, implement, add, or ship a new feature or system, says things like "let's build X", "implement Y", "I want to add Z to the app", asks for a requirements doc/SRS/spec, or wants a structured process for going from idea to shipped, tested, documented code. Also trigger when the user wants to establish or look up project conventions or coding standards before writing code, or wants to resume/continue an in-progress build. Do not trigger for small one-off edits, quick bug fixes, or questions that aren't about building something new end-to-end.
4
+ ---
5
+
6
+ # Implementation workflow
7
+
8
+ Four sequential phases, always in this order: **SRS → Development → Testing → Documentation**.
9
+
10
+ Each phase produces a deliverable. Do not move to the next phase until the developer has explicitly signed off on the current one — even if the next step seems obvious. This is a gated pipeline, not a checklist you race through.
11
+
12
+ ## Before doing anything: check for existing work
13
+
14
+ The developer may be resuming a feature started in an earlier session. Before starting the SRS interview, check `docs/srs/` for a folder matching what they're describing. If one exists:
15
+ - Read its `srs.md` and `checklist.md`.
16
+ - Report current status back to the developer ("Found an in-progress SRS for X — phase 2 is 3/7 checked off").
17
+ - Continue from there instead of starting over.
18
+
19
+ ## Document locations
20
+
21
+ These are the defaults this skill writes to. If the developer prefers different paths, use theirs instead and keep using them for the rest of the workflow.
22
+
23
+ | Artifact | Path |
24
+ |---|---|
25
+ | SRS document | `docs/srs/<feature-slug>/srs.md` |
26
+ | Plan + checklist (single file) | `docs/srs/<feature-slug>/plan.md` |
27
+ | Project conventions (fresh repos only) | `docs/conventions/PROJECT-CONVENTIONS.md` |
28
+ | Final feature doc | `docs/features/<YYYY-MM-DD>-<feature-slug>.md` |
29
+
30
+ The plan + checklist file is generated and enforced by the companion **plan-checklist** skill, triggered automatically right after SRS approval, and consulted constantly through Development and Testing. If that skill isn't installed, fall back to the checklist instructions inside `references/srs-phase.md`.
31
+
32
+ `<feature-slug>` is a short kebab-case name for the feature (e.g. `user-notifications`).
33
+
34
+ ## The four phases
35
+
36
+ ### Phase 1 — SRS
37
+ Interview the developer until requirements are genuinely clear on both sides, surface tradeoffs and risks honestly, get explicit approval, then write the SRS. Once approved, the **plan-checklist** skill takes over and turns it into `plan.md` — don't write a separate checklist here if that skill is available.
38
+ Full instructions: `references/srs-phase.md`. Template: `assets/srs-template.md`.
39
+
40
+ ### Phase 2 — Development
41
+ Scan the codebase for existing conventions before writing any code — whatever language or stack it's in. If none exist (fresh repo), interview the developer and record the answers so future features don't repeat the interview. Build against `plan.md`, in order — this is what the plan-checklist skill's enforcement rules apply to.
42
+ Full instructions: `references/development-phase.md`. Template: `assets/conventions-template.md`.
43
+
44
+ ### Phase 3 — Testing
45
+ Same scan-first approach as Development. If no test conventions exist, detect the framework and check current best practices online rather than relying on possibly-stale training data, confirm the approach briefly, then write and actually run tests. Keep working against `plan.md`'s Testing section.
46
+ Full instructions: `references/testing-phase.md`.
47
+
48
+ ### Phase 4 — Documentation
49
+ Write a dated feature doc summarizing what shipped, cross-linked with the SRS. This is the final phase — after this, the workflow for this feature is complete.
50
+ Full instructions: `references/documentation-phase.md`.
51
+
52
+ ## Honesty is part of the job
53
+
54
+ Across all four phases, don't just agree with everything to keep momentum. If a requirement is risky, a shortcut creates real technical debt, a testing gap matters, or an approach conflicts with the project's own conventions, say so plainly and explain the tradeoff — then respect whatever the developer ultimately decides.
55
+
56
+ ## If scope changes mid-build
57
+
58
+ Don't silently rewrite an already-approved SRS. Add a dated "Addendum" section to `srs.md` recording what changed and why, and update `plan.md`'s Deviation log to match (see the plan-checklist skill).
@@ -0,0 +1,35 @@
1
+ # Project conventions
2
+
3
+ **Established:** <YYYY-MM-DD>
4
+
5
+ This file is the source of truth for project conventions. The implementation-workflow skill checks here before ever asking these questions again — update it in place if conventions evolve.
6
+
7
+ ## Architecture
8
+
9
+ <feature-based / layered / monorepo / etc., and why>
10
+
11
+ ## Folder structure
12
+
13
+ <pattern, with an example path>
14
+
15
+ ## Naming conventions
16
+
17
+ <files, components, functions, variables>
18
+
19
+ ## Error handling
20
+
21
+ <philosophy — how errors surface, logging approach, etc.>
22
+
23
+ ## Required / disallowed libraries
24
+
25
+ <anything that must or must not be used>
26
+
27
+ ## Domain-specific conventions
28
+
29
+ <whatever the project type calls for — e.g. state management + styling for a UI app,
30
+ config + logging + migration layout for a service, command/flag structure for a CLI,
31
+ public API and versioning policy for a library. Delete if not applicable.>
32
+
33
+ ## Notes
34
+
35
+ <anything else the developer specified that doesn't fit above>
@@ -0,0 +1,40 @@
1
+ # <Feature title> — SRS
2
+
3
+ **Date:** <YYYY-MM-DD>
4
+ **Status:** Draft | Approved | In progress | Complete
5
+
6
+ ## Summary
7
+
8
+ <2-4 plain-language sentences: what this is and why it's being built.>
9
+
10
+ ## Non-goals
11
+
12
+ - <explicitly out of scope, so it doesn't get assumed back in later>
13
+
14
+ ## Requirements by phase
15
+
16
+ ### Phase 1: <name>
17
+
18
+ - <requirement>
19
+
20
+ ### Phase 2: <name>
21
+
22
+ - <requirement>
23
+
24
+ <add more phase headings as needed — these become the Development phase's roadmap>
25
+
26
+ ## Risks & tradeoffs
27
+
28
+ - <risk or tradeoff surfaced during the requirements discussion, and the decision made about it>
29
+
30
+ ## Plan & checklist
31
+
32
+ See [plan.md](./plan.md) for the build plan and checklist (generated by the plan-checklist skill once this SRS is approved).
33
+
34
+ ## Feature doc
35
+
36
+ <filled in during Phase 4 — link to docs/features/<date>-<slug>.md once it exists>
37
+
38
+ ## Addenda
39
+
40
+ <dated entries added here if scope changes after approval — do not edit the sections above once approved>
@@ -0,0 +1,43 @@
1
+ # Phase 2: Development
2
+
3
+ Goal: write code that looks like it belongs in this codebase, without making the developer re-explain conventions that are already established somewhere in the project.
4
+
5
+ ## 1. Scan first — every time
6
+
7
+ Do this even if the codebase came up earlier in the conversation; conventions can be inconsistent across a repo, and it's cheap to check.
8
+
9
+ Gather the following signals with whatever tools fit the stack (directory listing, grep, reading files). This is language- and framework-agnostic — adapt each check to whatever ecosystem the repo actually uses:
10
+ - **Dependency/build manifests** — read the ones that exist (e.g. `package.json`, `pyproject.toml`, `requirements.txt`, `go.mod`, `Cargo.toml`, `pom.xml`, `build.gradle`, `Gemfile`, `composer.json`, `*.csproj`, `mix.exs`). These name the language, framework, and tooling.
11
+ - **Folder structure** — top 2-3 levels, ignoring vendored/build/VCS directories.
12
+ - **Lint/format/type-check/config presence** — whatever the detected ecosystem uses (linter, formatter, type checker, test runner config).
13
+ - **Existing test setup** — test directory layout, file-naming pattern, and the test framework already in use.
14
+ - Whether `docs/conventions/PROJECT-CONVENTIONS.md` already exists — if it does, read it instead of re-interviewing.
15
+
16
+ Then read 2-3 existing files similar to what you're about to build — declared config isn't always what the code actually does, and the real signal is in the files themselves.
17
+
18
+ ## 2. Branch on what you find
19
+
20
+ **Established codebase (patterns exist):**
21
+ Adopt what's there — folder structure, naming, module boundaries, error-handling style, and whatever domain-specific patterns the stack has (state management and styling for a UI, middleware and migration layout for a service, command structure for a CLI, public API shape for a library). Before writing much code, post a short summary of what you detected and intend to follow, e.g.:
22
+
23
+ > Detected: layered structure under `internal/`, errors wrapped with `fmt.Errorf` and `%w`, table-driven tests in `*_test.go` files alongside sources. Building to match.
24
+
25
+ This gives the developer a cheap chance to correct you before a lot of code exists in the wrong shape.
26
+
27
+ **Fresh/empty repo (nothing meaningful to detect):**
28
+ Interview the developer on:
29
+ - Architecture style (feature-based vs layered vs something else, and why)
30
+ - Folder structure and naming conventions
31
+ - Error-handling philosophy
32
+ - Any libraries that must or must not be used
33
+ - Any domain-specific conventions the project type calls for (e.g. state management and styling for a UI app, config and logging approach for a service)
34
+
35
+ Write the answers to `docs/conventions/PROJECT-CONVENTIONS.md` using `assets/conventions-template.md`. This file gets checked on every future run of this skill — the interview should only happen once per project, not once per feature.
36
+
37
+ ## 3. Build against the plan
38
+
39
+ Work through `plan.md` in order — this file is owned and enforced by the plan-checklist skill, so follow its rules on reading it before every turn, verifying before checking anything off, and logging deviations rather than silently reordering. Don't jump ahead to a later step because it looks easy or more interesting. Flag when a phase-group is done.
40
+
41
+ ## 4. If the SRS turns out to be wrong
42
+
43
+ If something agreed in Phase 1 turns out to be infeasible, harder than expected, or just a bad idea once you're actually building it — stop and say so. Don't quietly deviate from the agreed plan. Propose the change, get agreement, then record it as an SRS addendum (see main SKILL.md).
@@ -0,0 +1,26 @@
1
+ # Phase 4: Documentation
2
+
3
+ Goal: leave a durable, dated record of what was built so future work — including future runs of this skill — can find it without re-reading the whole diff history.
4
+
5
+ This is the final phase. Only start it once every item in `plan.md`'s Testing section is checked off.
6
+
7
+ ## 1. Write the feature doc
8
+
9
+ Create `docs/features/<YYYY-MM-DD>-<feature-slug>.md` containing:
10
+ - Title and date.
11
+ - A one-paragraph summary (the SRS summary is a good starting point, updated for anything that changed along the way).
12
+ - What was actually built, and the key decisions made during development — especially any deviations from the original SRS.
13
+ - How to run or test it.
14
+ - Known limitations or suggested follow-up work.
15
+
16
+ ## 2. Cross-link with the SRS
17
+
18
+ - Add a line in the new feature doc linking back to `docs/srs/<feature-slug>/srs.md`.
19
+ - Add a line in `srs.md` pointing forward to the new feature doc now that it exists.
20
+
21
+ ## 3. Close out
22
+
23
+ - Mark every remaining item in `plan.md` complete, including its own Documentation section, and set its Status line to Complete.
24
+ - Give the developer a short wrap-up: what shipped, across all four phases, and where to find each artifact (SRS, plan, code, tests, docs).
25
+
26
+ Once this is done, the implementation workflow for this feature is complete.
@@ -0,0 +1,50 @@
1
+ # Phase 1: SRS (requirements)
2
+
3
+ Goal: leave this phase with a requirements document both you and the developer actually agree on — not a document you wrote from a single message and hoped was right.
4
+
5
+ ## 1. Interview
6
+
7
+ Ask about, over as many turns as it takes:
8
+ - The core problem/goal — what is this actually for, and who's it for?
9
+ - Must-have scope vs nice-to-have vs explicitly out of scope.
10
+ - Constraints: tech stack limits, deadlines, systems this touches or could break.
11
+ - Edge cases the developer may not have thought through yet.
12
+ - Success criteria — how will you both know this is done and working?
13
+
14
+ Ask one focused question or a small related cluster at a time. Don't front-load fifteen questions in one message — let each answer shape the next question. Keep going until there's genuinely nothing left to clarify, not just until the developer seems to want to move on.
15
+
16
+ Before calling it converged, restate your understanding in plain language and ask the developer to confirm ("Here's what I've got — is that right?"). Treat silence or a vague "sounds good" as insufficient if there are still open questions on your end.
17
+
18
+ ## 2. Be honest about tradeoffs
19
+
20
+ This is not optional. Proactively raise, even if unasked:
21
+ - Simpler alternatives that cost less time but give up something.
22
+ - Technical debt a shortcut would introduce.
23
+ - Anything that risks breaking existing functionality.
24
+ - Scaling, security, or maintenance concerns that aren't obvious from the feature request alone.
25
+
26
+ State the tradeoff and your recommendation, then defer to the developer's call once they've heard it. The goal is an informed decision, not a vetoed one.
27
+
28
+ ## 3. Get explicit approval
29
+
30
+ Don't write the SRS until the developer clearly signs off — "approved," "let's do it," "write it up," or similar. A lukewarm "ok" after a long back-and-forth is worth double-checking: "Should I write this up as the SRS now?"
31
+
32
+ ## 4. Write the document
33
+
34
+ Use `assets/srs-template.md` as the starting structure.
35
+
36
+ `docs/srs/<feature-slug>/srs.md` needs:
37
+ - A summary at the top — 2-4 plain-language sentences on what this is and why.
38
+ - Requirements split into logical build phases (these become the plan's roadmap — order them the way the work should actually happen, not just as a flat feature list).
39
+ - An explicit non-goals section.
40
+ - A risks & tradeoffs section capturing what came up during the interview.
41
+
42
+ ## 5. Hand off to the plan-checklist skill
43
+
44
+ Once `srs.md` is written and approved, that's the end of this phase — don't write a checklist here. The **plan-checklist** skill triggers automatically right after approval, reads `srs.md`, and produces `docs/srs/<feature-slug>/plan.md`: a single file that's both the build plan and the checklist, and the thing Development and Testing check constantly from here on.
45
+
46
+ If that skill isn't installed, fall back to writing a simple checkbox list at the bottom of `srs.md` grouped by phase, so there's still something to track progress against.
47
+
48
+ ## 6. Treat the SRS as source of truth
49
+
50
+ Once written and approved, don't quietly edit it if scope shifts later. Add a dated "Addendum" section instead — see the note in the main SKILL.md.
@@ -0,0 +1,29 @@
1
+ # Phase 3: Testing
2
+
3
+ Goal: tests that match how this project already tests things — or a sound, current default when there's no established pattern yet.
4
+
5
+ ## 1. Scan for existing test conventions
6
+
7
+ Look for: test file naming and location (e.g. a suffix like `*.test.*` / `*_test.*` / `*.spec.*`, or a dedicated `tests/` / `__tests__/` folder), the test framework already declared in the project's dependency manifest, mocking approach, assertion style, coverage tooling/thresholds.
8
+
9
+ ## 2. If a pattern exists
10
+
11
+ Match it exactly — same naming, same structure, same assertion style. Don't introduce a second testing convention into a project that already has one, even if you'd personally prefer a different approach.
12
+
13
+ ## 3. If no pattern exists yet
14
+
15
+ - Detect the framework/language in use from the manifest and folder structure.
16
+ - Web search for that framework's *current* recommended testing setup and best practices before defaulting to what you already know — tooling across every ecosystem moves fast enough that training data can be stale (e.g. search "\<framework\> testing best practices" for the current year rather than assuming).
17
+ - Propose the approach — framework/library choice, file convention, where tests live — to the developer in one short message before writing a large number of tests. This is a lighter check-in than the Phase 1 interview: a quick confirm-or-redirect, not a long back-and-forth.
18
+
19
+ ## 4. Write, then actually run
20
+
21
+ Write the tests, then run them for real and iterate until they pass — don't write tests and assume correctness without executing them.
22
+
23
+ Update `plan.md`'s Testing section as items are covered, following the plan-checklist skill's rules (verify before checking off, update immediately, don't batch).
24
+
25
+ ## 5. Minimum coverage bar
26
+
27
+ At minimum, cover:
28
+ - The happy path implied by the SRS's success criteria.
29
+ - The edge cases that came up during the Phase 1 interview — those were flagged for a reason.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: plan-checklist
3
+ description: >-
4
+ Generates and religiously enforces a single consolidated plan-and-checklist
5
+ markdown file for a feature that already has an approved SRS. Use this
6
+ skill immediately after an SRS/requirements document is approved, to turn
7
+ it into a concrete, ordered, checkable task list. Then use this skill
8
+ again constantly during development — at the start of every coding turn
9
+ on that feature, before marking any task complete, whenever asked to
10
+ check progress or status, and whenever about to write code for a feature
11
+ that has a plan.md file. This is a persistent discipline skill, not a
12
+ one-time step. Consult and update the plan file on every development
13
+ turn for a tracked feature, even for changes that feel too small to
14
+ bother logging. Also trigger when the user says things like "what's
15
+ next", "where are we", "mark that done", "let's continue building", or
16
+ references a plan or checklist by name.
17
+ ---
18
+
19
+ # Plan + checklist
20
+
21
+ One markdown file per feature that is simultaneously the plan (ordered, concrete steps) and the checklist (checkboxes on those same steps) for everything left to do after the SRS is approved: the rest of Development, all of Testing, and all of Documentation.
22
+
23
+ This skill is the enforcement layer between "we agreed what to build" (SRS) and "we're actually building it correctly, in order, without drifting." Its whole value is being consulted constantly, not written once and forgotten.
24
+
25
+ ## Relationship to the implementation-workflow skill
26
+
27
+ If the `implementation-workflow` skill is present, this skill is what its Development, Testing, and Documentation phases read and update instead of a separate checklist file. If it isn't present, this skill still works standalone against any approved SRS-like document, or even a short informal goal description — see "Standalone use" below.
28
+
29
+ ## File location
30
+
31
+ `docs/srs/<feature-slug>/plan.md`, next to that feature's `srs.md`. Same `<feature-slug>` the SRS uses.
32
+
33
+ ## 1. Creating the file (triggers once per feature, right after SRS approval)
34
+
35
+ 1. Read the approved `srs.md` in full — summary, requirements by phase, non-goals, risks.
36
+ 2. Turn each phase's requirements into concrete, individually-checkable tasks — finer-grained than the SRS bullets. A good task is small enough that "done" is unambiguous. Keep tasks in the order they should actually be built, respecting real dependencies.
37
+ 3. Append a **Testing** section and a **Documentation** section at the end, covering the rest of the parent workflow (test tasks per the SRS's success criteria and edge cases; the final feature-doc tasks).
38
+ 4. Write the file using `assets/plan-template.md` as the structure.
39
+ 5. Show the plan to the developer before starting work — not a full re-interview like the SRS phase, just a quick sanity check: "Here's the build order — look right?" Adjust if they push back, then proceed.
40
+
41
+ ## 2. Enforcing the file (triggers on every development turn after that)
42
+
43
+ These rules are the actual point of this skill:
44
+
45
+ - **Read `plan.md` before starting any development work**, every time — even if you read it earlier in this same conversation. It may have changed, especially across sessions or if it was edited outside the conversation.
46
+ - **Work in the order the plan lists.** Don't jump to a later unchecked item because it's more interesting or seems faster, unless the plan itself is wrong (see deviations below).
47
+ - **Never check off a task without verifying it.** "Wrote the function" is not done if it doesn't run; "wrote the test" is not done if it doesn't pass. No rubber-stamping.
48
+ - **Update the file immediately after finishing a task** — check the box, update the `Last updated` line. Don't batch updates for later; batching is exactly how the file goes stale and stops being trustworthy.
49
+ - **State which task you're on at the start of a work turn** — one short line, e.g. "Working on 2.3: wire up notification preferences API" — so the developer can redirect before deep work happens on the wrong thing.
50
+ - **If you're about to write code that isn't tied to any unchecked plan item**, stop. Either the plan is stale and needs a quick update, or this is scope creep — surface it rather than doing invisible off-plan work.
51
+ - **If the developer asks to skip a step or do something not on the plan**, don't silently comply. Ask whether to add it to the plan or treat it as a deliberate one-off, and record whichever it is.
52
+
53
+ Use `scripts/check_plan_status.sh <path-to-plan.md>` for a fast, deterministic read of where things stand (counts of done/remaining, next unchecked task) instead of re-parsing the whole file by eye every time — cheaper and won't miscount.
54
+
55
+ ## 3. Deviations
56
+
57
+ If actual work ends up diverging from the plan — a task turns out to be unnecessary, a new one is needed, the order had to change — don't silently edit the plan as if it always said that. Add a dated entry to the file's **Deviation log** section with what changed and why, then update the task list to match.
58
+
59
+ ## Standalone use (no SRS present)
60
+
61
+ If this skill is triggered without an `implementation-workflow` SRS to draw from, ask the developer for a short goal description and a rough sense of scope, then build the plan directly from that conversation instead of from `srs.md`. Everything else — enforcement, deviations, status script — works the same.
@@ -0,0 +1,37 @@
1
+ # <Feature title> — Plan & checklist
2
+
3
+ **SRS:** [./srs.md](./srs.md)
4
+ **Created:** <YYYY-MM-DD>
5
+ **Status:** Not started | In progress | Blocked | Complete
6
+ **Last updated:** <YYYY-MM-DD> — <what changed>
7
+
8
+ ## How to use this file
9
+
10
+ Read this before starting any development work on this feature. Work top to bottom, in order. Check a box only once the task is actually verified done. Update "Last updated" immediately after every change — don't batch. Log any deviation from this plan in the Deviation log below rather than silently editing it away.
11
+
12
+ ## Plan
13
+
14
+ ### Phase 1: <name>
15
+
16
+ - [ ] 1.1 <concrete, verifiable task>
17
+ - Notes: <implementation details decided along the way, if any>
18
+ - [ ] 1.2 <task>
19
+
20
+ ### Phase 2: <name>
21
+
22
+ - [ ] 2.1 <task>
23
+
24
+ <add more phase headings to match srs.md>
25
+
26
+ ### Testing
27
+
28
+ - [ ] T.1 <test task, derived from SRS success criteria / edge cases>
29
+
30
+ ### Documentation
31
+
32
+ - [ ] D.1 Write `docs/features/<date>-<slug>.md`
33
+ - [ ] D.2 Cross-link the feature doc from `srs.md`
34
+
35
+ ## Deviation log
36
+
37
+ <dated entries — what changed from the original plan, and why>
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env bash
2
+ # Fast, deterministic status snapshot of a plan.md file, so the agent doesn't
3
+ # have to re-read and manually recount checkboxes on every single turn.
4
+ #
5
+ # Usage: scripts/check_plan_status.sh <path-to-plan.md>
6
+ # If no path is given, searches docs/srs/*/plan.md and reports on each found.
7
+
8
+ set -uo pipefail
9
+
10
+ report_one() {
11
+ local file="$1"
12
+ if [ ! -f "$file" ]; then
13
+ echo "Not found: $file"
14
+ return 1
15
+ fi
16
+
17
+ local total done_count next_line next_phase last_updated
18
+ total=$(grep -Ec '^\s*-\s*\[[ xX]\]' "$file")
19
+ done_count=$(grep -Ec '^\s*-\s*\[[xX]\]' "$file")
20
+ local remaining=$((total - done_count))
21
+ local pct=0
22
+ if [ "$total" -gt 0 ]; then
23
+ pct=$(( done_count * 100 / total ))
24
+ fi
25
+
26
+ echo "=== $file ==="
27
+ last_updated=$(grep -m1 '^\*\*Last updated:\*\*' "$file" || echo "no Last updated line found")
28
+ echo "$last_updated"
29
+ echo "Progress: $done_count/$total done ($pct%), $remaining remaining"
30
+
31
+ # Find the current phase heading and first unchecked task under it.
32
+ next_line=$(grep -nE '^\s*-\s*\[\s\]' "$file" | head -1)
33
+ if [ -z "$next_line" ]; then
34
+ echo "Next task: none — all checked off."
35
+ else
36
+ local lineno taskline
37
+ lineno=$(echo "$next_line" | cut -d: -f1)
38
+ taskline=$(echo "$next_line" | cut -d: -f2-)
39
+ next_phase=$(awk -v ln="$lineno" 'NR < ln && /^### / { h=$0 } NR==ln { print h }' "$file")
40
+ echo "Current phase: ${next_phase:-unknown}"
41
+ echo "Next task:$taskline"
42
+ fi
43
+ echo
44
+ }
45
+
46
+ if [ $# -ge 1 ]; then
47
+ report_one "$1"
48
+ else
49
+ found=0
50
+ while IFS= read -r f; do
51
+ found=1
52
+ report_one "$f"
53
+ done < <(find . -path '*/docs/srs/*/plan.md' 2>/dev/null)
54
+ if [ "$found" -eq 0 ]; then
55
+ echo "No plan.md files found under docs/srs/*/. Pass a path explicitly."
56
+ exit 1
57
+ fi
58
+ fi