sdlc-harness
A DeepSeek Harness bundle that runs one engineering practice, its skills and its rules, against a model you serve yourself. It is a bundle, not a fork: the substrate is pinned and never modified, and this repo adds one patch layer that supplies a persona plus one command that installs the practice's skills from their upstreams at pinned releases.
The practice is a fixed build flow. Every step is a skill, invoked by its bare name:
flowchart TB
subgraph spec ["Spec"]
direction LR
A["/grill-with-docs"] --> B["/to-spec"] --> C["/to-tickets"]
end
subgraph ticket ["Each ticket, in its own context"]
direction LR
D["/to-cases"] --> E["/to-tests"] --> F["/implement"] --> G["/code-review"]
end
subgraph ship ["Ship"]
I["/build-pr"]
end
spec --> ticket --> shipQuickstart
Six steps, in order. No prior Claude Code experience is assumed.
1. Serve a model. Any OpenAI-compatible endpoint whose chat template advertises tool support. The substrate always sends the native tools field and has no text-parsing fallback, so a model without declared tools cannot run here.
2. Install the substrate and pnpm. Node 22 or newer; pnpm is required because dsh plugin shells out to it.
npm i -g @deepseek-ai/dsh@0.1.0-rc.7 pnpmThe version is pinned on purpose: this bundle is verified against rc.7, and the installer warns when it finds any other release.
3. Clone this repo and add it to the browser profile.
git clone https://github.com/brunodantas/sdlc-harness.git ~/sdlc-harnessdsh plugin --profile web add file:$HOME/sdlc-harnessUse the web profile (created on first use) rather than building your own: it already composes the browser surface, which is not installable on its own.
4. Install the practice.
node ~/sdlc-harness/bin/install.jsThis fetches every skill at its pinned release into ~/.dsh/skills, writes the practice's rules to ~/.dsh/AGENTS.md with their on-demand reference beside them as ~/.dsh/practice-reference.md, records what it resolved in ~/.dsh/skills.lock.json, and generates an agent preset named SDLC Harness.
5. Boot. A key is required even for a local server, and any non-empty string satisfies it.
DEEPSEEK_API_KEY=local-none DEEPSEEK_BASE_URL=http://localhost:8080/v1 dsh --profile web --port 77776. Select the preset. Open the printed URL and, in the session's mode menu, choose SDLC Harness in place of Standard mode. This does not persist: a session started without it runs the substrate's own persona and rules, and looks identical until the agent's behaviour tells you otherwise.
Then invoke a skill by its bare name, for example /to-cases path/to/spec.md, and send it with the send button (Enter does not send while the skill autocomplete is open).
What gets installed
Forty skills, flattened into one unnamespaced root:
- brunodantas/skills at
v0.2.0(cc6da61):build-pr,harden-tests,
ilities, to-cases, to-tests
- mattpocock/skills at
v1.2.3(6acc160): 35 skills; the full roster is
in [skills.manifest.json](skills.manifest.json)
Both sources are MIT licensed and installed unmodified. Their licences travel with the skills and apply to your copies; this repo's own MIT licence covers only the bundle.
Known gaps
The biggest gap is judgment, not structure. The structure is all here: skills load, rules are read, the flow runs in the order the practice prescribes. But in the acceptance run, a locally served 24B ran the whole chain to completion and froze a test file that contained no assertions. Read [docs/worked-example.md](docs/worked-example.md) before trusting anything this harness produces unattended.
The rest, including everything else the acceptance run found, lives in [docs/dsh-parity-delta.md](docs/dsh-parity-delta.md). The headlines:
- Skill tool restrictions do nothing. The frontmatter parser silently drops
allowed-tools, so every skill runs with the full tool set.
- The hook bridge is not composed. No
PostToolUseor similar automation
runs here.
- Permission behaviour is the profile's defaults. No equivalent of
acceptEdits, and plan mode is advisory rather than enforced.
Where the rest lives
| Vocabulary | [CONTEXT.md](CONTEXT.md) |
| Ranked architectural characteristics | [docs/architecture.md](docs/architecture.md) |
| Decisions that bind | [docs/adr/](docs/adr/) |
| Feature-by-feature map | [docs/dsh-parity-map.md](docs/dsh-parity-map.md) |
| The measured gap | [docs/dsh-parity-delta.md](docs/dsh-parity-delta.md) |
| One ticket, start to finish | [docs/worked-example.md](docs/worked-example.md) |
Licence
MIT. See [LICENSE](LICENSE).