soloship 0.1.0 → 0.1.2
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 +94 -40
- package/dist/cli.js +19 -1
- package/dist/hooks.js +41 -6
- package/dist/manifest.js +0 -6
- package/dist/rules.d.ts +3 -1
- package/dist/rules.js +5 -1
- package/dist/scaffold.d.ts +1 -0
- package/dist/scaffold.js +26 -0
- package/dist/templates.js +4 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -2,33 +2,55 @@
|
|
|
2
2
|
|
|
3
3
|
> Ship solo, safely.
|
|
4
4
|
|
|
5
|
-
Soloship is guardrails for non-coders building software through AI agents. It's a Claude Code plugin that gives you three things a traditional engineering team would: **mechanical enforcement** that fires automatically (9 hooks, 4 rules, CI checks — no judgment calls required), **
|
|
5
|
+
Soloship is guardrails for non-coders building software through AI agents. It's a Claude Code plugin that gives you three things a traditional engineering team would: **mechanical enforcement** that fires automatically (9 hooks, 4 rules, CI checks — no judgment calls required), **15 Soloship-native workflow skills + 36 vendored skills from five best-in-class plugins** that guide you through the steps a professional would take (each with enforcement gates and anti-rationalization tables so the agent can't cut corners), and **a one-command setup** that detects your stack and wires everything into the project.
|
|
6
6
|
|
|
7
7
|
**Quick reference:** [aifoundationlevels.com/soloship-cheatsheet](https://aifoundationlevels.com/soloship-cheatsheet)
|
|
8
8
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
### Prerequisites
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
You need two things before you start:
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
1. **[Claude Code](https://claude.com/claude-code)** — install it if you haven't yet. Soloship runs inside it.
|
|
16
|
+
2. **Node.js 18 or newer** — `npx` ships with Node and is how Soloship's CLI runs. Check by running `node -v` in a terminal. If you don't have it, install from [nodejs.org](https://nodejs.org).
|
|
17
|
+
|
|
18
|
+
You don't need to install anything from npm by hand. `npx` downloads `soloship` on demand and caches it. Soloship is [live on npm](https://www.npmjs.com/package/soloship) — you can verify with `npm view soloship`.
|
|
19
|
+
|
|
20
|
+
### How Soloship is structured
|
|
21
|
+
|
|
22
|
+
Soloship has two parts that work together:
|
|
23
|
+
|
|
24
|
+
| Part | What it gives you | How it's installed | When it runs |
|
|
25
|
+
|------|-------------------|--------------------|--------------|
|
|
26
|
+
| **Plugin** (`thedigitalorganizer/soloship`) | The `/soloship:*` slash commands (audit, bootstrap, brainstorm, plan, etc.) | Claude Code plugin marketplace | Once per machine |
|
|
27
|
+
| **npm CLI** (`soloship` on npm) | The `init` / `upgrade` / `doctor` / `rollback` commands that install hooks, rules, CI, and `CLAUDE.md` into a project | Auto-downloaded by `npx` (no manual install) | Once per project, then `upgrade` whenever a new version ships |
|
|
28
|
+
|
|
29
|
+
You need both for the full experience. The plugin gives you the slash commands. The npm CLI installs the project-level guardrails. The plugin's `/soloship:bootstrap` calls `npx soloship init` for you, so in practice you only ever type slash commands.
|
|
30
|
+
|
|
31
|
+
### Step 1 — Install the plugin (once per machine)
|
|
32
|
+
|
|
33
|
+
Inside any Claude Code session, run these two slash commands **one at a time** — run the first, wait for it to finish, then run the second.
|
|
34
|
+
|
|
35
|
+
**1a. Add the marketplace:**
|
|
16
36
|
|
|
17
37
|
```
|
|
18
38
|
/plugin marketplace add thedigitalorganizer/soloship
|
|
19
39
|
```
|
|
20
40
|
|
|
21
|
-
|
|
41
|
+
This points Claude Code at the Soloship marketplace on GitHub. Nothing is installed yet — this just registers where to find the plugin.
|
|
42
|
+
|
|
43
|
+
**1b. Install the plugin:**
|
|
22
44
|
|
|
23
45
|
```
|
|
24
46
|
/plugin install soloship@soloship
|
|
25
47
|
```
|
|
26
48
|
|
|
27
|
-
|
|
49
|
+
The syntax is `<plugin-name>@<marketplace-name>` — both happen to be `soloship`, which is why it reads twice. Once this finishes, every `/soloship:*` slash command is available in every project you open in Claude Code.
|
|
28
50
|
|
|
29
|
-
###
|
|
51
|
+
### Step 2 — Set up a project (once per project)
|
|
30
52
|
|
|
31
|
-
Open the project you want to use Soloship in — a brand-new empty folder or an existing codebase, either works — then run one of these in Claude Code
|
|
53
|
+
Open the project you want to use Soloship in — a brand-new empty folder or an existing codebase, either works — then run one of these in Claude Code. **You don't need to open a terminal.** The bootstrap skill calls `npx soloship init` for you.
|
|
32
54
|
|
|
33
55
|
**Brand-new project (no code yet):**
|
|
34
56
|
|
|
@@ -49,6 +71,18 @@ Bootstrap asks four questions about your project, then sets up the guardrails (h
|
|
|
49
71
|
|
|
50
72
|
After bootstrap, the daily loop is `/soloship:brainstorm` → `/soloship:plan` → `/soloship:implement` → `/soloship:shipthorough`.
|
|
51
73
|
|
|
74
|
+
### Keeping Soloship up to date
|
|
75
|
+
|
|
76
|
+
After install, every Claude Code session checks once a day whether a new Soloship version has been published. When one is, you'll see a single line at the top of the session:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
Soloship update available: 0.1.0 → 0.1.2. Run: npx soloship upgrade
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Run that command from your project root whenever you see it. It refreshes hooks, rules, and CI, then re-stamps the version. Your project docs (`CLAUDE.md`, `AGENTS.md`, `CHANGELOG.md`) are preserved.
|
|
83
|
+
|
|
84
|
+
To update the plugin itself (the slash commands), Claude Code handles it via `/plugin update soloship@soloship`.
|
|
85
|
+
|
|
52
86
|
## How we got here
|
|
53
87
|
|
|
54
88
|
Soloship didn't start as a project. It started as a frustration.
|
|
@@ -93,7 +127,8 @@ Others are routers — Soloship adds enforcement and routing logic, then dispatc
|
|
|
93
127
|
| Skill | Routes to | What Soloship adds |
|
|
94
128
|
|-------|-----------|-------------------|
|
|
95
129
|
| `/brainstorm` | `office-hours` (product) / `superpowers:brainstorming` (technical) | Product-vs-technical routing, mandatory design-first nudge |
|
|
96
|
-
| `/
|
|
130
|
+
| `/grill-me` | (self-contained, adapted from Matt Pocock's `grill-me`) | Pre-plan interview that refuses to write a plan until user + agent share a complete mental model. Walks the design tree exhaustively. |
|
|
131
|
+
| `/plan` | `superpowers:writing-plans` / `plan-eng-review` | Solution search before planning, 7-point enforcement gate, artifact contracts, checks for `/grill-me` rationale on non-trivial work |
|
|
97
132
|
| `/implement` | `superpowers:subagent-driven-development` / `superpowers:dispatching-parallel-agents` | Plan-first enforcement, execution strategy routing |
|
|
98
133
|
| `/debug` | `superpowers:systematic-debugging` | Solution search for prior art, root-cause iron law |
|
|
99
134
|
| `/learn` | `compound-engineering:workflows:compound` (Step 1) | Solution doc via CE, then own protocols: JSONL logging, registry audit, AGENTS.md propagation + creation |
|
|
@@ -122,38 +157,36 @@ Run bootstrap once per project. For existing code, run `/soloship:audit` first s
|
|
|
122
157
|
|
|
123
158
|
### The skills
|
|
124
159
|
|
|
125
|
-
|
|
160
|
+
**15 Soloship-native workflow skills** invoked as `/soloship:*` slash commands. Each one handles orchestration, enforcement, and artifact contracts; the heavy lifting is often delegated to a vendored skill (see the next section).
|
|
126
161
|
|
|
127
162
|
**Setup & orientation**
|
|
128
163
|
|
|
129
164
|
- `/soloship:audit` — Deep 2-phase codebase investigation. Phase 1 launches 4 parallel agents to map architecture, conventions, decisions, and infrastructure. Phase 2 launches 6 more to assess quality, entanglement, security, dependencies, gaps, and leverage points. Human checkpoint between phases prevents building assessment on wrong assumptions. Produces `docs/audit/AUDIT-YYYY-MM-DD.md` + `audit-findings.json`.
|
|
130
165
|
- `/soloship:bootstrap` — Configures governance from audit findings or interactive questions. Creates CLAUDE.md, AGENTS.md files (3+ source file threshold), installs 4 core rules, and wires up hooks. Never overwrites existing files. Anti-rationalization table blocks "I'll set up governance later."
|
|
131
166
|
- `/soloship:onboard` — Reads CLAUDE.md, AGENTS.md, audit reports, and recent git history to produce a 7-section orientation briefing. Flags stale audit reports. No external routing — fully self-contained.
|
|
132
|
-
- `/soloship:checkpoint` — Saves working state (git status, decisions, remaining work) so any future session can resume cleanly. Routes to gstack `checkpoint`. Pairs with `/soloship:onboard` for `/clear` recovery.
|
|
133
167
|
|
|
134
168
|
**Daily work**
|
|
135
169
|
|
|
136
|
-
- `/soloship:brainstorm` — Detects whether the question is
|
|
170
|
+
- `/soloship:brainstorm` — Detects whether the question is demand-validation (should this exist?) or feature-shaping (what should this do?) and routes accordingly: `gs-office-hours` for demand, `ce-brainstorm` for feature. Ends with a mandatory design-first nudge — sketch before you plan.
|
|
171
|
+
- `/soloship:grill-me` — Relentless pre-plan interview that walks every branch of the design tree until user and agent share a complete mental model. Refuses to produce a plan or any code until alignment is explicit. Triggered explicitly ("grill me", "interview me") or by `/soloship:plan` on medium-to-large work. Adapted from Matt Pocock's `grill-me` (MIT).
|
|
137
172
|
- `/soloship:spec` — Writes formal specifications with numbered acceptance criteria, data models, API contracts, user flows (including error states), and explicit out-of-scope boundaries. 8-point verification checklist. Fully self-contained.
|
|
138
|
-
- `/soloship:plan` — Searches `docs/solutions/` for prior art, reads architecture context, then
|
|
139
|
-
- `/soloship:implement` — Finds the most recent plan in `docs/plans/`,
|
|
140
|
-
- `/soloship:debug` — Iron law: no fixes without root cause investigation. Searches solutions for prior art first, then
|
|
141
|
-
- `/soloship:learn` — Captures knowledge from non-obvious work.
|
|
142
|
-
- `/soloship:cleanup` — Knowledge system maintenance. Launches 5 parallel audit agents (solution health, overlap detection, plan lifecycle, AGENTS.md staleness, index sync), presents findings interactively, then executes approved changes in a single atomic commit. Merge candidates require 2-of-3 signal threshold.
|
|
173
|
+
- `/soloship:plan` — Searches `docs/solutions/` for prior art, reads architecture context, then invokes `ce-plan` to produce the plan. 7-point enforcement gate validates: Why lines, Key Decisions, Execution Strategy, Handoff section, no unaddressed pitfalls, and that non-trivial work was preceded by `/soloship:grill-me`. Review is separate — handled by `/soloship:review`.
|
|
174
|
+
- `/soloship:implement` — Finds the most recent plan in `docs/plans/`, invokes `ce-work` for execution with branching and QC. Freshness check warns on stale plans.
|
|
175
|
+
- `/soloship:debug` — Iron law: no fixes without root cause investigation. Searches solutions for prior art first, then invokes `sp-systematic-debugging` for 4-phase discipline (Investigate → Analyze → Hypothesize → Implement). Nudges `/learn` for non-obvious fixes.
|
|
176
|
+
- `/soloship:learn` — Captures knowledge from non-obvious work. Invokes `ce-compound` for solution doc creation. Adds Soloship protocols: JSONL logging for cross-session search, architecture registry drift checking, and distributed AGENTS.md propagation (pitfalls into existing AGENTS.md files, new ones for directories above the 3-file governance threshold). Anti-rationalization table blocks "this fix was straightforward, not worth documenting."
|
|
177
|
+
- `/soloship:cleanup` — Knowledge system maintenance. Launches 5 parallel audit agents (solution health, overlap detection, plan lifecycle, AGENTS.md staleness, index sync), presents findings interactively, then executes approved changes in a single atomic commit. Merge candidates require 2-of-3 signal threshold.
|
|
143
178
|
|
|
144
179
|
**Shipping**
|
|
145
180
|
|
|
146
181
|
- `/soloship:shipfast` — Emergency deploy pipeline. Lint (with auto-fix tolerance), test (pre-existing failures allowed), build (must pass), commit, push, deploy. Auto-detects platform. Minimum viable safety, maximum speed.
|
|
147
|
-
- `/soloship:shipthorough` — Full due diligence: preflight checks, base branch merge, lint, test, coverage audit, 3-pass code review (via `/review`), registry update, CHANGELOG enforcement, plan lifecycle cleanup, bisectable commits, PR with structured body, verification gate, deploy.
|
|
182
|
+
- `/soloship:shipthorough` — Full due diligence: preflight checks, base branch merge, lint, test, inline quality gate (TypeScript + linter + dead code + shellcheck), coverage audit, 3-pass code review (via `/review`), registry update, CHANGELOG enforcement, plan lifecycle cleanup, bisectable commits, PR with structured body, verification gate, deploy.
|
|
148
183
|
|
|
149
184
|
**Quality**
|
|
150
185
|
|
|
151
|
-
- `/soloship:review` — Detects whether the target is a plan or code. Plans route to `plan-eng-review`, `plan-ceo-review`,
|
|
152
|
-
- `/soloship:
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
- `/soloship:health` — Routes to gstack `health` for a composite 0-10 codebase quality score (type check, lint, tests, dead code) with trend tracking across runs. Intended as a pre-ship gate inside `/soloship:shipthorough`.
|
|
156
|
-
- `/soloship:autoplan` — Routes to gstack `autoplan` to run the full plan-review gauntlet (CEO, design, engineering, DX) in a single pass with auto-decisions. Use when you want every review lens applied without stepping through them individually.
|
|
186
|
+
- `/soloship:review` — Detects whether the target is a plan or code. **Plans** route to `gs-plan-eng-review`, `gs-plan-ceo-review`, `gs-plan-design-review` individually, or `gs-autoplan` for all four (adds DX review) in one auto-decided pass. **Code** routes to `ce-review` for PR-scale multi-agent analysis, or runs three inline passes (structural, adversarial, design slop lens) for quick local checks.
|
|
187
|
+
- `/soloship:design-review` — Two-pass visual audit. Pass 1 invokes `gs-design-review` for spacing, hierarchy, and consistency. Pass 2 is Soloship's own AI slop detection (inspired by Impeccable) — flags generic gradients, default shadows, "Welcome to" copy, 3-column feature grids, and other patterns that mark AI-generated design. Each fix committed atomically with before/after screenshots.
|
|
188
|
+
|
|
189
|
+
**Note:** Skills that were previously thin wrappers over vendored gstack skills (`/soloship:qa`, `/soloship:security`, `/soloship:checkpoint`, `/soloship:autoplan`, `/soloship:health`) have been removed. Use the vendored originals directly: `/gs-qa`, `/gs-cso`, `/gs-context-save` / `/gs-context-restore`, `/gs-autoplan`. Health has no replacement — its core checks were inlined into `/soloship:shipthorough`'s quality gate.
|
|
157
190
|
|
|
158
191
|
## Quick start
|
|
159
192
|
|
|
@@ -174,15 +207,18 @@ See the [Install](#install) section above for the two commands to install the pl
|
|
|
174
207
|
/soloship:plan → /soloship:implement → /soloship:shipthorough
|
|
175
208
|
```
|
|
176
209
|
|
|
177
|
-
###
|
|
210
|
+
### Running the npm CLI directly
|
|
178
211
|
|
|
179
|
-
|
|
212
|
+
`/soloship:bootstrap` calls `npx soloship init` under the hood, so you don't usually need to think about the npm CLI. But it's there if you want to script setup, run it in CI, or skip the slash command entirely. Run any of these from your project root:
|
|
180
213
|
|
|
181
214
|
```bash
|
|
182
|
-
npx soloship init
|
|
215
|
+
npx soloship init # initial setup — creates docs, hooks, rules, CI, CLAUDE.md
|
|
216
|
+
npx soloship upgrade # refresh hooks, rules, CI, and the .soloship/version stamp
|
|
217
|
+
npx soloship doctor # check Claude Code environment for missing companions
|
|
218
|
+
npx soloship rollback # restore the last safety snapshot
|
|
183
219
|
```
|
|
184
220
|
|
|
185
|
-
|
|
221
|
+
`npx` auto-downloads the latest Soloship from npm the first time you run it, and caches it after that. There's no separate `npm install -g` step.
|
|
186
222
|
|
|
187
223
|
## Design decisions
|
|
188
224
|
|
|
@@ -202,23 +238,29 @@ Most people should use `/soloship:bootstrap` — it's the supported path and it
|
|
|
202
238
|
| 7 | Not started | Safety floor hardening, surface simplification, CLAUDE.md governance |
|
|
203
239
|
| 8 | Not started | Graduation system, methodology documentation |
|
|
204
240
|
|
|
205
|
-
Phases 1-6 are shipped and usable today. Phases 7-8 were restructured after a 3-round adversarial review that identified rationalization traps in the original design. Phase 7 adds mechanical safety enforcement (Semgrep scanning, automated rollback, phone-a-friend triggers) and consolidates the
|
|
241
|
+
Phases 1-6 are shipped and usable today. Phases 7-8 were restructured after a 3-round adversarial review that identified rationalization traps in the original design. Phase 7 adds mechanical safety enforcement (Semgrep scanning, automated rollback, phone-a-friend triggers) and consolidates the native skills into 3-4 meta-workflows. Phase 8 adds a graduation system with calibrated thresholds that tell you when your project has outgrown solo mode.
|
|
242
|
+
|
|
243
|
+
## Built on the shoulders of
|
|
244
|
+
|
|
245
|
+
Soloship curates and vendors skills from five outstanding Claude Code plugins. One plugin install for the user; full credit and install links for the authors. Full attribution and version pins live in [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md).
|
|
206
246
|
|
|
207
|
-
|
|
247
|
+
[**Compound Engineering**](https://github.com/EveryInc/compound-engineering-plugin) — Kieran Klaassen (Every). The brainstorm → plan → work → compound loop is the spine of how Soloship thinks about engineering. Also: `/review` inherits CE's multi-agent review pattern.
|
|
208
248
|
|
|
209
|
-
|
|
249
|
+
[**Superpowers**](https://github.com/obra/superpowers) — Jesse Vincent. The discipline skills: `systematic-debugging`'s "no fixes without root cause," `verification-before-completion`'s "evidence before claims," `test-driven-development`, `writing-plans`, `executing-plans`, `subagent-driven-development`, `dispatching-parallel-agents` (via `using-git-worktrees`), `finishing-a-development-branch`, `brainstorming`. Nine skills total.
|
|
210
250
|
|
|
211
|
-
[
|
|
251
|
+
[**Impeccable**](https://impeccable.style) — Paul Bakaus (extending Anthropic's original `frontend-design`). Design vocabulary and steering commands that let non-coders ship work that doesn't look AI-generated. Soloship vendors `frontend-design` and five `/i-*` commands; 12 more are in the full plugin.
|
|
212
252
|
|
|
213
|
-
[
|
|
253
|
+
[**ui-ux-pro-max**](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) — nextlevelbuilder. The design reference library: styles, palettes, font pairings, UX guidelines, chart patterns, across every stack the agent might target.
|
|
214
254
|
|
|
215
|
-
[gstack](https://github.com/garrytan/gstack) —
|
|
255
|
+
[**gstack**](https://github.com/garrytan/gstack) — Garry Tan (YC). The solo builder toolkit. Soloship vendors 12 of the most non-coder-friendly skills — `autoplan` (chains CEO + design + eng + DX reviews), `context-save` / `context-restore` (the checkpoint pair), `browse` (headless browser daemon, re-vendored from gstack v1.31.1.0 with Soloship-native paths so it works standalone), `qa`, `design-review`, the four plan-review skills (eng, ceo, design, devex), `office-hours`, `cso`. Full gstack has ~25 more.
|
|
216
256
|
|
|
217
|
-
|
|
257
|
+
If any of these are useful to you, please install the full upstream plugin — each `THIRD_PARTY_NOTICES.md` section has the one-line install command, and you'll get everything the author built, not just Soloship's selection.
|
|
218
258
|
|
|
219
|
-
|
|
259
|
+
Also influential but not vendored:
|
|
220
260
|
|
|
221
|
-
[
|
|
261
|
+
[**intent-layer**](https://github.com/crafter-station/skills/tree/main/context-engineering/intent-layer) (crafter-station/skills, built on [The Intent Layer](https://www.intent-systems.com/learn/intent-layer) by Tyler Brandt) — `/learn` Steps 4-5 adapt the concept of distributed per-directory `AGENTS.md` files for codebase navigation. Soloship's version is continuous (updates on every `/learn` pass, not one-shot), threshold-gated (3+ source files before creating), append-only with dated attribution, and scoped to solution-doc evidence rather than speculative. `/bootstrap` and `/cleanup` also maintain the AGENTS.md network.
|
|
262
|
+
|
|
263
|
+
[**Serena**](https://github.com/oraios/serena) — symbol-level LSP code navigation. Optional. Worth adding once a codebase outgrows file-level tools; see Serena's README for install instructions.
|
|
222
264
|
|
|
223
265
|
The broader design traces back to a research pass across: Ousterhout on strategic vs tactical programming (you are the architect, the agent implements), Hickey on simple vs easy, Metz on dependency awareness and sizing rules, Meadows on leverage points in systems, the BCG "AI Brain Fry" finding that productivity drops past three tools, Kathy Sierra on the collapse zone (only automated process survives when things break), and the Codified Context paper that validated the CLAUDE.md + AGENTS.md + docs/ three-tier pattern.
|
|
224
266
|
|
|
@@ -237,10 +279,22 @@ src/ # TypeScript source for the installer
|
|
|
237
279
|
ci.ts # GitHub Actions + architecture fitness
|
|
238
280
|
templates.ts # CLAUDE.md / AGENTS.md / CHANGELOG / SOLUTION_GUIDE generators
|
|
239
281
|
skills/ # Claude Code skills shipped by the plugin
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
282
|
+
# 15 Soloship-native workflows:
|
|
283
|
+
audit/ bootstrap/ brainstorm/ cleanup/ debug/ design-review/
|
|
284
|
+
grill-me/ implement/ learn/ onboard/ plan/ review/
|
|
285
|
+
shipfast/ shipthorough/ spec/
|
|
286
|
+
|
|
287
|
+
# 36 vendored skills (full attribution in THIRD_PARTY_NOTICES.md):
|
|
288
|
+
ce-* # 8 from Compound Engineering (Kieran Klaassen, MIT)
|
|
289
|
+
sp-* # 9 from Superpowers (Jesse Vincent, MIT)
|
|
290
|
+
im-* # 6 from Impeccable (Paul Bakaus, Apache 2.0)
|
|
291
|
+
uiux-* # 1 from ui-ux-pro-max (nextlevelbuilder, MIT)
|
|
292
|
+
gs-* # 12 from gstack (Garry Tan, MIT) — includes the gs-browse
|
|
293
|
+
# headless browser daemon, re-vendored at v1.31.1.0 with
|
|
294
|
+
# Soloship-native paths so it works without gstack installed
|
|
295
|
+
|
|
243
296
|
references/ # Shared checklists (a11y, code review, perf, security, testing)
|
|
297
|
+
vendored/ # Per-source LICENSE / NOTICE / VERSION / README (attribution archive)
|
|
244
298
|
```
|
|
245
299
|
|
|
246
300
|
## License
|
package/dist/cli.js
CHANGED
|
@@ -3,11 +3,13 @@ import chalk from "chalk";
|
|
|
3
3
|
import { runInit } from "./init.js";
|
|
4
4
|
import { runRollback } from "./rollback.js";
|
|
5
5
|
import { runDoctor } from "./doctor.js";
|
|
6
|
+
import { runUpgrade } from "./upgrade.js";
|
|
7
|
+
import { getVersion } from "./pkg.js";
|
|
6
8
|
const program = new Command();
|
|
7
9
|
program
|
|
8
10
|
.name("soloship")
|
|
9
11
|
.description("Ship solo, safely — guardrails for AI-assisted development")
|
|
10
|
-
.version(
|
|
12
|
+
.version(getVersion());
|
|
11
13
|
program
|
|
12
14
|
.command("init")
|
|
13
15
|
.description("Initialize Soloship in the current project")
|
|
@@ -32,6 +34,22 @@ program
|
|
|
32
34
|
process.exit(1);
|
|
33
35
|
}
|
|
34
36
|
});
|
|
37
|
+
program
|
|
38
|
+
.command("upgrade")
|
|
39
|
+
.description("Refresh hooks, rules, and CI to the version of Soloship being run via npx")
|
|
40
|
+
.action(async () => {
|
|
41
|
+
console.log("");
|
|
42
|
+
console.log(chalk.bold("Soloship Upgrade"));
|
|
43
|
+
console.log(chalk.dim("Refreshing project hooks, rules, and CI. Project docs are preserved."));
|
|
44
|
+
console.log("");
|
|
45
|
+
try {
|
|
46
|
+
await runUpgrade();
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
console.error(chalk.red("Upgrade failed:"), err);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
35
53
|
program
|
|
36
54
|
.command("rollback")
|
|
37
55
|
.description("Roll back to the last Soloship safety snapshot")
|
package/dist/hooks.js
CHANGED
|
@@ -99,7 +99,7 @@ export async function installHooks(root, project) {
|
|
|
99
99
|
},
|
|
100
100
|
];
|
|
101
101
|
results.push("Stop: plan validation + workflow navigator + handoff reminder");
|
|
102
|
-
// SessionStart: Checkpoint commit +
|
|
102
|
+
// SessionStart: Checkpoint commit + Soloship update check
|
|
103
103
|
hooks.SessionStart = [
|
|
104
104
|
{
|
|
105
105
|
matcher: "",
|
|
@@ -116,14 +116,14 @@ export async function installHooks(root, project) {
|
|
|
116
116
|
hooks: [
|
|
117
117
|
{
|
|
118
118
|
type: "command",
|
|
119
|
-
command:
|
|
120
|
-
timeout:
|
|
119
|
+
command: buildUpgradeCheckScript(),
|
|
120
|
+
timeout: 5000,
|
|
121
121
|
},
|
|
122
122
|
],
|
|
123
123
|
},
|
|
124
124
|
];
|
|
125
125
|
results.push("SessionStart: checkpoint commit before agent session");
|
|
126
|
-
results.push("SessionStart:
|
|
126
|
+
results.push("SessionStart: daily check for Soloship updates on npm");
|
|
127
127
|
// Merge hooks into settings (don't overwrite other settings)
|
|
128
128
|
settings.hooks = hooks;
|
|
129
129
|
writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
@@ -295,9 +295,44 @@ else
|
|
|
295
295
|
fi
|
|
296
296
|
'`;
|
|
297
297
|
}
|
|
298
|
-
function
|
|
298
|
+
function buildUpgradeCheckScript() {
|
|
299
|
+
// Once-per-day check for newer Soloship npm releases. Silent if up-to-date,
|
|
300
|
+
// network unavailable, or no version stamp exists. Cached to avoid hammering
|
|
301
|
+
// the npm registry on every session start.
|
|
299
302
|
return `bash -c '
|
|
300
|
-
|
|
303
|
+
SOLOSHIP_DIR=".soloship"
|
|
304
|
+
VERSION_FILE="$SOLOSHIP_DIR/version"
|
|
305
|
+
CACHE_FILE="$SOLOSHIP_DIR/.last-update-check"
|
|
306
|
+
|
|
307
|
+
[ -f "$VERSION_FILE" ] || exit 0
|
|
308
|
+
INSTALLED=$(cat "$VERSION_FILE" 2>/dev/null | head -n1 | tr -d "[:space:]")
|
|
309
|
+
[ -z "$INSTALLED" ] && exit 0
|
|
310
|
+
|
|
311
|
+
NOW=$(date +%s)
|
|
312
|
+
LATEST=""
|
|
313
|
+
if [ -f "$CACHE_FILE" ]; then
|
|
314
|
+
CACHED_TS=$(sed -n 1p "$CACHE_FILE" 2>/dev/null)
|
|
315
|
+
CACHED_VER=$(sed -n 2p "$CACHE_FILE" 2>/dev/null)
|
|
316
|
+
if [ -n "$CACHED_TS" ] && [ $((NOW - CACHED_TS)) -lt 86400 ]; then
|
|
317
|
+
LATEST="$CACHED_VER"
|
|
318
|
+
fi
|
|
319
|
+
fi
|
|
320
|
+
|
|
321
|
+
if [ -z "$LATEST" ]; then
|
|
322
|
+
LATEST=$(timeout 3 npm view soloship version 2>/dev/null | tr -d "[:space:]")
|
|
323
|
+
[ -z "$LATEST" ] && exit 0
|
|
324
|
+
mkdir -p "$SOLOSHIP_DIR"
|
|
325
|
+
printf "%s\\n%s\\n" "$NOW" "$LATEST" > "$CACHE_FILE" 2>/dev/null
|
|
326
|
+
fi
|
|
327
|
+
|
|
328
|
+
if [ "$INSTALLED" != "$LATEST" ]; then
|
|
329
|
+
NEWEST=$(printf "%s\\n%s\\n" "$INSTALLED" "$LATEST" | sort -V | tail -n1)
|
|
330
|
+
if [ "$NEWEST" = "$LATEST" ]; then
|
|
331
|
+
echo "{\\"systemMessage\\": \\"Soloship update available: $INSTALLED → $LATEST. Run: npx soloship upgrade\\"}"
|
|
332
|
+
fi
|
|
333
|
+
fi
|
|
334
|
+
|
|
335
|
+
exit 0
|
|
301
336
|
'`;
|
|
302
337
|
}
|
|
303
338
|
function buildPhoneAFriendScript() {
|
package/dist/manifest.js
CHANGED
|
@@ -58,12 +58,6 @@ export const SOLOSHIP_MANIFEST = {
|
|
|
58
58
|
},
|
|
59
59
|
],
|
|
60
60
|
skills: [
|
|
61
|
-
{
|
|
62
|
-
name: "gstack",
|
|
63
|
-
severity: "recommended",
|
|
64
|
-
purpose: "Command bundle that provides office-hours, plan reviews (eng/CEO/design), QA, CSO, design-review, retro, and others. Soloship skills delegate to gstack for review and QA workflows.",
|
|
65
|
-
install: "gstack has its own install path — check its README. It typically deploys as a directory under ~/.claude/skills/gstack plus individual symlinked skills (office-hours, plan-eng-review, qa, cso, etc.).",
|
|
66
|
-
},
|
|
67
61
|
{
|
|
68
62
|
name: "log",
|
|
69
63
|
severity: "recommended",
|
package/dist/rules.d.ts
CHANGED
package/dist/rules.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
export async function installRules(root) {
|
|
3
|
+
export async function installRules(root, options = {}) {
|
|
4
4
|
const results = [];
|
|
5
5
|
const rulesDir = join(root, ".claude", "rules");
|
|
6
6
|
if (!existsSync(rulesDir)) {
|
|
@@ -18,6 +18,10 @@ export async function installRules(root) {
|
|
|
18
18
|
writeFileSync(path, content);
|
|
19
19
|
results.push(filename);
|
|
20
20
|
}
|
|
21
|
+
else if (options.force) {
|
|
22
|
+
writeFileSync(path, content);
|
|
23
|
+
results.push(`${filename} (refreshed)`);
|
|
24
|
+
}
|
|
21
25
|
else {
|
|
22
26
|
results.push(`${filename} (exists, skipped)`);
|
|
23
27
|
}
|
package/dist/scaffold.d.ts
CHANGED
package/dist/scaffold.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
import { getVersion } from "./pkg.js";
|
|
3
4
|
import { generateClaudeMd, generateAgentsMd, generateSolutionGuide, generateChangelog, } from "./templates.js";
|
|
4
5
|
export async function scaffoldDocs(root, project) {
|
|
5
6
|
const results = [];
|
|
@@ -67,6 +68,31 @@ export async function scaffoldDocs(root, project) {
|
|
|
67
68
|
else {
|
|
68
69
|
results.push({ path: ".semgrep.yml", action: "exists" });
|
|
69
70
|
}
|
|
71
|
+
// Soloship version stamp + per-clone cache directory
|
|
72
|
+
const stampResults = writeVersionStamp(root);
|
|
73
|
+
results.push(...stampResults);
|
|
74
|
+
return results;
|
|
75
|
+
}
|
|
76
|
+
export function writeVersionStamp(root) {
|
|
77
|
+
const results = [];
|
|
78
|
+
const soloshipDir = join(root, ".soloship");
|
|
79
|
+
if (!existsSync(soloshipDir)) {
|
|
80
|
+
mkdirSync(soloshipDir, { recursive: true });
|
|
81
|
+
}
|
|
82
|
+
const versionPath = join(soloshipDir, "version");
|
|
83
|
+
const exists = existsSync(versionPath);
|
|
84
|
+
writeFileSync(versionPath, getVersion() + "\n");
|
|
85
|
+
results.push({
|
|
86
|
+
path: ".soloship/version",
|
|
87
|
+
action: exists ? "updated" : "created",
|
|
88
|
+
});
|
|
89
|
+
// Local-only cache file is gitignored; the version stamp itself is committed
|
|
90
|
+
// so collaborators see the same pinned version.
|
|
91
|
+
const gitignorePath = join(soloshipDir, ".gitignore");
|
|
92
|
+
if (!existsSync(gitignorePath)) {
|
|
93
|
+
writeFileSync(gitignorePath, ".last-update-check\n");
|
|
94
|
+
results.push({ path: ".soloship/.gitignore", action: "created" });
|
|
95
|
+
}
|
|
70
96
|
return results;
|
|
71
97
|
}
|
|
72
98
|
function generateSemgrepConfig() {
|
package/dist/templates.js
CHANGED
|
@@ -16,6 +16,10 @@ export function generateClaudeMd(project) {
|
|
|
16
16
|
**${project.name}**${project.description ? ` — ${project.description}` : ""}
|
|
17
17
|
|
|
18
18
|
${stackLine ? `**Stack:** ${stackLine}\n` : ""}
|
|
19
|
+
> **Audience note:** The maintainer of this project may not be a traditional coder — Soloship is built for people who ship software through AI agents. When explaining anything technical (architecture, protocols, tooling, tradeoffs), lead with a plain-English analogy before introducing jargon. Define a technical term once with its meaning, then use it freely. Default to recommendations with tradeoffs, not term-paper breakdowns.
|
|
20
|
+
>
|
|
21
|
+
> If the maintainer signals they want the technical version ("go deeper," "show me the code"), switch registers. Otherwise, keep it concrete.
|
|
22
|
+
|
|
19
23
|
## Related Documentation
|
|
20
24
|
|
|
21
25
|
| Document | Location | Purpose |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "soloship",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Systematic programming methodology for AI-assisted development",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"build": "tsc",
|
|
11
11
|
"dev": "tsc --watch",
|
|
12
12
|
"start": "node dist/cli.js",
|
|
13
|
-
"prepare": "tsc"
|
|
13
|
+
"prepare": "tsc",
|
|
14
|
+
"prepublishOnly": "node scripts/check-version.js"
|
|
14
15
|
},
|
|
15
16
|
"keywords": [
|
|
16
17
|
"claude-code",
|