@kennethsolomon/shipkit 3.0.1 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Kenneth Solomon
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 CHANGED
@@ -1,8 +1,13 @@
1
+ <div align="center">
2
+
1
3
  # SHIPKIT
2
4
 
3
- A structured, quality-gated workflow system for Claude Code.
5
+ **A structured, quality-gated workflow system for Claude Code.**
6
+
7
+ Stop winging it. Ship features with TDD, auto-detecting linters, security audits,<br>
8
+ and AI-powered code review — all wired into a single repeatable workflow.
4
9
 
5
- Ship features with TDD, auto-detecting linters, security audits, and AI-powered code review all wired into a single repeatable workflow.
10
+ **Every gate must pass. Quality isn't optionalit's structural.**
6
11
 
7
12
  [![npm](https://img.shields.io/npm/v/@kennethsolomon%2Fshipkit)](https://www.npmjs.com/package/@kennethsolomon/shipkit)
8
13
  [![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
@@ -14,78 +19,54 @@ npm install -g @kennethsolomon/shipkit && shipkit
14
19
 
15
20
  Works on Mac, Linux, and Windows.
16
21
 
17
- ```
18
- ~ $ shipkit
19
-
20
-
21
- |
22
- /|\
23
- / | \
24
- / | \
25
- / | \
26
- / ☠ | ☠ \
27
- / | \
28
- /______|______\
29
- ▄████████████████▄
30
- █ ◉ ◉ █
31
- ▀██████████████▀
32
- ≋ ≋ ≋ ≋ ≋
33
-
34
- ShipKit v3.0.1
35
- A structured workflow toolkit for Claude Code.
36
- by Kenneth Solomon
37
-
38
- ✓ Installed commands/sk (15 commands)
39
- ✓ Installed skills (19 skills)
40
-
41
- Done! Run /sk:help to get started.
42
-
43
- ~ $
44
- ```
22
+ </div>
45
23
 
46
- ---
24
+ <div align="center">
47
25
 
48
- > "Stop winging it. Ship with a system."
26
+ ![ShipKit terminal demo](assets/shipkit-terminal.png)
27
+
28
+ </div>
49
29
 
50
30
  ---
51
31
 
52
- ## How It Works
32
+ <div align="center">
33
+
34
+ *"Ran `/sk:review` on what I thought was done. It found 3 things I would have caught in production. Now it's in every merge."*
53
35
 
54
- ShipKit installs a set of slash commands and skills into your Claude Code config (`~/.claude/`). Each command is a focused instruction set that Claude follows — no magic, just structured prompts that enforce quality gates.
36
+ *"Every other Claude workflow I tried was either too rigid or too vague. ShipKit is the first one that actually ships."*
55
37
 
56
- The workflow is linear: **Explore Design Plan Branch Test Implement Lint → Verify → Security → Review → Ship.**
38
+ *"The gates feel annoying until the day they catch something real. Now I don't merge without them."*
57
39
 
58
- Every gate must pass before the next step. If lint fails, you fix it. If tests don't cover new code, you write them. Security issues block the PR. This isn't optional — it's the whole point.
40
+ </div>
59
41
 
60
42
  ---
61
43
 
62
- ## Installation
44
+ ## Quick Start
63
45
 
64
46
  ```bash
47
+ # 1. Install ShipKit globally
65
48
  npm install -g @kennethsolomon/shipkit && shipkit
66
- ```
67
49
 
68
- Or clone and install locally (symlinks changes reflect immediately):
50
+ # 2. Bootstrap your project (run inside your project directory)
51
+ /sk:setup-claude
69
52
 
70
- ```bash
71
- git clone https://github.com/kennethsolomon/shipkit.git
72
- cd shipkit
73
- ./install.sh
53
+ # 3. Start your first feature
54
+ /sk:brainstorm
74
55
  ```
75
56
 
76
- ### Update
57
+ `/sk:setup-claude` creates `tasks/todo.md`, `tasks/lessons.md`, and a project-specific `CLAUDE.md` with the full workflow baked in. Run it once per project.
77
58
 
78
- ```bash
79
- npm install -g @kennethsolomon/shipkit && shipkit
80
- ```
59
+ ---
81
60
 
82
- Re-running always installs the latest version.
61
+ ## How It Works
83
62
 
84
- ### Uninstall
63
+ ShipKit installs slash commands and skills into `~/.claude/`. Each command is a focused instruction set that Claude follows — no magic, just structured prompts that enforce quality gates.
85
64
 
86
- ```bash
87
- shipkit --uninstall
88
- ```
65
+ The workflow is linear: **Brainstorm → Plan → Branch → Test → Implement → Lint → Security → Review → Ship.**
66
+
67
+ Every gate must pass before the next step. If lint fails, fix it. If tests don't cover new code, write them. Security issues block the PR. This isn't optional — it's the whole point.
68
+
69
+ **Requirements change mid-workflow?** Run `/sk:change`. It assesses the scope and tells you exactly where to re-enter — no guessing, no skipping steps.
89
70
 
90
71
  ---
91
72
 
@@ -164,6 +145,22 @@ Debug → Branch → Fix → Smoke Test → Lint ✓ → Test ✓ → Security
164
145
 
165
146
  After merging: add a regression test and a lesson to `tasks/lessons.md`.
166
147
 
148
+ ### Requirement Change Flow
149
+
150
+ Requirements change mid-workflow all the time. Run `/sk:change` whenever something shifts — it classifies the scope and routes you back to the right step automatically.
151
+
152
+ ```
153
+ Requirement changes → /sk:change → re-enter at correct step
154
+ ```
155
+
156
+ | Tier | What changed | Re-entry point |
157
+ |------|-------------|----------------|
158
+ | **Tier 1** — Behavior Tweak | Logic changes, scope stays the same *(e.g. delete all → delete users only)* | `/sk:write-tests` |
159
+ | **Tier 2** — New Requirements | New scope, new constraints, new acceptance criteria | `/sk:write-plan` |
160
+ | **Tier 3** — Scope Shift | Fundamental rethinking of approach or architecture | `/sk:brainstorm` |
161
+
162
+ `/sk:change` logs the change to `tasks/todo.md` and `tasks/progress.md`, marks invalidated tasks, and tells you exactly what to carry forward.
163
+
167
164
  ---
168
165
 
169
166
  ## Commands
@@ -189,6 +186,7 @@ After merging: add a regression test and a lesson to `tasks/lessons.md`.
189
186
  | `/sk:schema-migrate` | Analyze pending schema changes (Prisma, Drizzle, Eloquent, SQLAlchemy, ActiveRecord) |
190
187
  | `/sk:write-tests` | TDD: write failing tests before implementation |
191
188
  | `/sk:execute-plan` | Implement the plan in small batches |
189
+ | `/sk:change` | Handle a mid-workflow requirement change — assess scope and re-enter at the right step |
192
190
  | `/sk:debug` | Structured bug investigation: reproduce → isolate → fix |
193
191
  | `/sk:hotfix` | Emergency fix workflow — skips design and TDD |
194
192
 
@@ -238,8 +236,14 @@ After merging: add a regression test and a lesson to `tasks/lessons.md`.
238
236
 
239
237
  ## Model Routing Profiles
240
238
 
241
- ShipKit routes each skill to the right model automatically based on your project profile.
242
- Set it once with `/sk:set-profile <name>` — config is saved to `.shipkit/config.json`.
239
+ ShipKit routes each skill to the right model automatically. Set it once per project:
240
+
241
+ ```bash
242
+ /sk:set-profile balanced # default
243
+ /sk:set-profile quality # most projects
244
+ /sk:set-profile full-sail # high-stakes / client work
245
+ /sk:set-profile budget # side projects / exploration
246
+ ```
243
247
 
244
248
  | Profile | Philosophy | Best for |
245
249
  |---------|-----------|---------|
@@ -252,13 +256,14 @@ Set it once with `/sk:set-profile <name>` — config is saved to `.shipkit/confi
252
256
  |-------------|-----------|---------|----------|--------|
253
257
  | brainstorm, write-plan, debug, execute-plan, review | opus | opus | sonnet | sonnet |
254
258
  | write-tests, frontend-design, api-design, security-check | opus | sonnet | sonnet | sonnet |
259
+ | change | opus | sonnet | sonnet | sonnet |
255
260
  | perf, schema-migrate, accessibility | opus | sonnet | sonnet | haiku |
256
261
  | lint, test | sonnet | sonnet | haiku | haiku |
257
262
  | smart-commit, branch, update-task | haiku | haiku | haiku | haiku |
258
263
 
259
- `opus` = inherit (uses your current session model).
264
+ `opus` = inherit (uses your current session model). Config lives in `.shipkit/config.json` — per project, gitignored by default.
260
265
 
261
- ### Other config settings
266
+ ### Config Reference
262
267
 
263
268
  ```json
264
269
  {
@@ -296,26 +301,41 @@ ShipKit auto-detects your stack — no configuration needed.
296
301
 
297
302
  ---
298
303
 
299
- ## Project Setup
304
+ ## Security
300
305
 
301
- To wire ShipKit into a new project:
306
+ ShipKit instructs Claude to audit your code — but Claude also has access to your filesystem. Protect sensitive files by adding a deny list to `.claude/settings.json` in your project:
302
307
 
303
- ```
304
- /sk:setup-claude
308
+ ```json
309
+ {
310
+ "permissions": {
311
+ "deny": [
312
+ "Read(.env)",
313
+ "Read(.env.*)",
314
+ "Read(**/*.pem)",
315
+ "Read(**/*.key)",
316
+ "Read(**/*.p12)",
317
+ "Read(**/credentials*)"
318
+ ]
319
+ }
320
+ }
305
321
  ```
306
322
 
307
- This creates `tasks/todo.md`, `tasks/lessons.md`, and a project-specific `CLAUDE.md` with the full workflow baked in.
323
+ This prevents Claude from reading secrets even if a prompt tries to access them. Pair this with your `.gitignore` never commit `.env` files.
324
+
325
+ If you discover a security issue in ShipKit itself, please open a [GitHub issue](https://github.com/kennethsolomon/shipkit/issues) or email directly rather than posting publicly.
308
326
 
309
327
  ---
310
328
 
311
- ## Why ShipKit
329
+ ## License
312
330
 
313
- Claude Code is powerful but context degrades as the window fills. Unstructured sessions lead to skipped tests, no lint, missing security review, and PRs that broke things in ways nobody caught.
331
+ MIT see [LICENSE](LICENSE) for details.
314
332
 
315
- ShipKit fixes that with a repeatable system: every feature goes through the same gates in the same order. Quality isn't optional — it's structural.
333
+ Built by [Kenneth Solomon](https://github.com/kennethsolomon).
316
334
 
317
335
  ---
318
336
 
319
- ## License
337
+ <div align="center">
338
+
339
+ **Claude Code is powerful. ShipKit makes it reliable.**
320
340
 
321
- MIT — by [Kenneth Solomon](https://github.com/kennethsolomon)
341
+ </div>
package/bin/shipkit.js CHANGED
@@ -32,7 +32,8 @@ ${cyan} ▀██████████████▀${reset}
32
32
  ${cyan} ≋ ≋ ≋ ≋ ≋${reset}
33
33
 
34
34
  ${bold}ShipKit${reset} ${dim}v${pkg.version}${reset}
35
- A structured workflow toolkit for Claude Code.
35
+ Quality-gated workflow toolkit for Claude Code.
36
+ TDD · Lint · Security · Review · Ship.
36
37
  by Kenneth Solomon
37
38
 
38
39
  `;
@@ -0,0 +1,135 @@
1
+ ---
2
+ description: "Handle a mid-workflow requirement change — assess scope and re-enter at the right step."
3
+ ---
4
+
5
+ # /sk:change
6
+
7
+ Handle a requirement change that was discovered mid-workflow. Assesses the scope of the change and routes you back to the correct step — no over-restarting, no skipping.
8
+
9
+ ## Hard Rules
10
+
11
+ - **DO NOT modify code or tests until this command completes.** The re-entry point must be determined first.
12
+ - **DO NOT guess the scope.** Ask explicitly if unclear.
13
+ - **Always update `tasks/todo.md` and `tasks/progress.md`** to record what changed and why before routing forward.
14
+
15
+ ## Steps
16
+
17
+ ### 1. Understand the Change
18
+
19
+ Ask the user:
20
+ - What changed? (describe the old behavior and the new behavior)
21
+ - What triggered this change? (review finding, stakeholder feedback, edge case discovered, etc.)
22
+ - Is this change isolated to one area, or does it affect multiple parts of the system?
23
+
24
+ Do not proceed until you have clear answers.
25
+
26
+ ### 2. Assess the Scope
27
+
28
+ Based on the answers, classify the change into one of three tiers:
29
+
30
+ ---
31
+
32
+ **Tier 1 — Behavior Tweak**
33
+
34
+ The logic changes but the scope and plan stay the same. Examples:
35
+ - Delete all tables → delete only users table
36
+ - Return 404 → return 403 on unauthorized access
37
+ - Sort ascending → sort descending
38
+
39
+ Re-entry point: **`/sk:write-tests`**
40
+
41
+ Action: Update or replace the affected tests to reflect the new behavior. The existing plan is still valid — only the test assertions and implementation need to change.
42
+
43
+ ---
44
+
45
+ **Tier 2 — New Requirements**
46
+
47
+ New scope, new constraints, or new acceptance criteria that the current plan doesn't cover. Examples:
48
+ - Simple delete → soft-delete with audit log
49
+ - Basic auth → role-based permissions
50
+ - Single endpoint → paginated + filterable endpoint
51
+
52
+ Re-entry point: **`/sk:write-plan`**
53
+
54
+ Action: Update `tasks/todo.md` with revised tasks. The brainstorm findings are still valid but the plan needs new steps. After plan approval, proceed to `/sk:write-tests`.
55
+
56
+ ---
57
+
58
+ **Tier 3 — Scope Shift**
59
+
60
+ Fundamental rethinking of the approach, user flow, or architecture. Examples:
61
+ - Rethinking the entire delete flow and who can trigger it
62
+ - Changing the data model the feature is built on
63
+ - New understanding of the problem that invalidates prior decisions
64
+
65
+ Re-entry point: **`/sk:brainstorm`**
66
+
67
+ Action: The existing findings and plan may be partially or fully invalid. Start fresh from brainstorm, record new decisions in `tasks/findings.md`, then proceed through write-plan → write-tests → execute-plan.
68
+
69
+ ---
70
+
71
+ ### 3. Confirm the Tier
72
+
73
+ Present your classification to the user:
74
+
75
+ ```
76
+ Change detected: <1-line summary of what changed>
77
+ Scope tier: Tier <1|2|3> — <Behavior Tweak|New Requirements|Scope Shift>
78
+ Re-entry point: /sk:<command>
79
+
80
+ Reason: <1-2 sentences explaining why this tier was chosen>
81
+
82
+ Proceed? (yes / no / different tier)
83
+ ```
84
+
85
+ Wait for explicit confirmation before logging or routing.
86
+
87
+ ### 4. Log the Change
88
+
89
+ Once confirmed, update the planning files:
90
+
91
+ **`tasks/todo.md`** — Add a `## Change Log` section at the top (or append to existing):
92
+ ```
93
+ ## Change Log
94
+ - [<date>] <summary of change> — re-entered at /sk:<command>
95
+ ```
96
+
97
+ Mark any tasks that are now invalidated with `~~strikethrough~~` and a note: `(invalidated by requirement change — see change log)`.
98
+
99
+ **`tasks/progress.md`** — Append:
100
+ ```
101
+ ## Requirement Change — <date>
102
+ - What changed: <description>
103
+ - Trigger: <what caused the change>
104
+ - Scope tier: <1|2|3>
105
+ - Re-entry point: /sk:<command>
106
+ - Invalidated tasks: <list or "none">
107
+ ```
108
+
109
+ ### 5. Route Forward
110
+
111
+ Tell the user exactly where to go next:
112
+
113
+ > "Change logged. Re-enter the workflow at `/sk:<command>`.
114
+ > Carry forward: <what's still valid — plan steps, findings, etc.>
115
+ > Discard: <what's no longer valid>"
116
+
117
+ **Do not proceed to the next step yourself.** The user must explicitly invoke it.
118
+
119
+ ---
120
+
121
+ ## Model Routing
122
+
123
+ Read `.shipkit/config.json` from the project root if it exists.
124
+
125
+ - If `model_overrides["sk:change"]` is set, use that model — it takes precedence.
126
+ - Otherwise use the `profile` field. Default: `balanced`.
127
+
128
+ | Profile | Model |
129
+ |---------|-------|
130
+ | `full-sail` | opus (inherit) |
131
+ | `quality` | opus (inherit) |
132
+ | `balanced` | sonnet |
133
+ | `budget` | sonnet |
134
+
135
+ > `opus` = inherit. When spawning sub-agents via the Agent tool, pass `model: "<resolved-model>"`.
@@ -52,6 +52,12 @@ Execute the plan in `tasks/todo.md` in small batches with clear checkpoints.
52
52
  - Do not repeat the same failing action; change approach.
53
53
  - After 3 failed attempts, stop and ask the user with details.
54
54
 
55
+ ## Requirement Changes Mid-Execution
56
+
57
+ If the user indicates that requirements have changed during execution, **stop immediately** — do not continue implementing the old behavior.
58
+
59
+ Run `/sk:change` to assess the scope and re-enter at the correct step.
60
+
55
61
  ## On User Correction
56
62
 
57
63
  If the user corrects your approach during execution, immediately append to
@@ -19,6 +19,7 @@ Run these commands in order for a complete, quality-gated feature build.
19
19
  | `/sk:schema-migrate` | Analyze schema changes *(skip if no DB changes)* |
20
20
  | `/sk:write-tests` | TDD red: write failing tests first |
21
21
  | `/sk:execute-plan` | TDD green: implement until tests pass |
22
+ | `/sk:change` | Requirements changed? Re-enter at the right step |
22
23
  | `/sk:smart-commit` | Conventional commit with approval |
23
24
  | `/sk:lint` | **GATE** — all linters must pass |
24
25
  | `/sk:test` | **GATE** — 100% coverage on new code |
@@ -27,6 +28,16 @@ Run these commands in order for a complete, quality-gated feature build.
27
28
  | `/sk:update-task` | Mark task done, log completion |
28
29
  | `/sk:finish-feature` | Changelog + PR creation |
29
30
 
31
+ ## Requirement Change Flow
32
+
33
+ Requirements change mid-workflow? Run `/sk:change` — it classifies the scope and routes you back to the right step.
34
+
35
+ | Tier | Scope | Re-entry |
36
+ |------|-------|---------|
37
+ | Tier 1 | Behavior tweak *(logic changes, plan stays)* | `/sk:write-tests` |
38
+ | Tier 2 | New requirements *(new scope or constraints)* | `/sk:write-plan` |
39
+ | Tier 3 | Scope shift *(rethinking the approach)* | `/sk:brainstorm` |
40
+
30
41
  ## Bug Fix Workflow
31
42
 
32
43
  | Command | Purpose |
@@ -47,6 +58,7 @@ Run these commands in order for a complete, quality-gated feature build.
47
58
  | `/sk:api-design` | Design REST/GraphQL contracts before implementation |
48
59
  | `/sk:brainstorm` | Explore requirements, no code |
49
60
  | `/sk:branch` | Create branch from current task |
61
+ | `/sk:change` | Handle mid-workflow requirement change — re-enter at the right step |
50
62
  | `/sk:debug` | Structured bug investigation |
51
63
  | `/sk:execute-plan` | Implement plan in batches |
52
64
  | `/sk:features` | Sync docs/sk:features/ specs with codebase |
@@ -91,6 +103,7 @@ ShipKit routes each skill to the right model automatically. Set once per project
91
103
  |-------------|-----------|---------|----------|--------|
92
104
  | brainstorm, write-plan, debug, execute-plan, review | opus | opus | sonnet | sonnet |
93
105
  | write-tests, frontend-design, api-design, security-check | opus | sonnet | sonnet | sonnet |
106
+ | change | opus | sonnet | sonnet | sonnet |
94
107
  | perf, schema-migrate, accessibility | opus | sonnet | sonnet | haiku |
95
108
  | lint, test | sonnet | sonnet | haiku | haiku |
96
109
  | smart-commit, branch, update-task | haiku | haiku | haiku | haiku |
@@ -100,4 +113,4 @@ Config lives in `.shipkit/config.json` — per project, gitignored by default.
100
113
 
101
114
  ---
102
115
 
103
- **ShipKit** by Kenneth Solomon · `npx @kennethsolomon/shipkit` to install/update
116
+ **ShipKit** by Kenneth Solomon · `npm install -g @kennethsolomon/shipkit` to install/update
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kennethsolomon/shipkit",
3
- "version": "3.0.1",
3
+ "version": "3.0.3",
4
4
  "description": "A structured workflow toolkit for Claude Code.",
5
5
  "keywords": [
6
6
  "claude",
@@ -117,6 +117,8 @@ Progress is tracked in `tasks/workflow-status.md`. This file persists across con
117
117
 
118
118
  6. **Never skip steps without confirmation.** Steps cannot run out of order. Hard gate steps (12, 14, 16, 20) can NEVER be skipped. Optional gate step (18) requires explicit confirmation to skip.
119
119
 
120
+ 7. **Requirements change mid-workflow?** Stop the current step and run `/change` immediately. It will classify the scope (behavior tweak / new requirements / scope shift) and tell you exactly where to re-enter the workflow. Never continue implementing stale requirements.
121
+
120
122
  7. **Never auto-advance.** When one step completes, stop and tell the user which step is next. Do not proceed automatically.
121
123
 
122
124
  8. **Never write code during design or plan phases.** Steps 1-6 are reading/exploring/planning/design only — no code, no file edits (except `tasks/` files).
@@ -9,6 +9,8 @@ description: "TDD: Auto-detect BE + FE testing stacks, write failing tests befor
9
9
 
10
10
  Auto-detect the project's backend AND frontend testing frameworks, read the plan from `tasks/todo.md`, and write comprehensive failing tests BEFORE implementation. Tests define the expected behavior — implementation makes them pass.
11
11
 
12
+ > **Requirements changed mid-workflow?** Run `/sk:change` first. It will classify the scope and tell you whether to update tests (Tier 1), revise the plan (Tier 2), or re-brainstorm (Tier 3). Never update tests based on a changed requirement without going through `/sk:change` first.
13
+
12
14
  ## Allowed Tools
13
15
 
14
16
  Bash, Read, Write, Edit, Glob, Grep