pincer-workflow 0.7.0 → 1.0.1
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 +161 -193
- package/bin/pincer.js +189 -166
- package/package.json +4 -3
- package/template/.agents/skills/pincer-blueprint/SKILL.md +70 -0
- package/template/.agents/skills/pincer-status/SKILL.md +29 -55
- package/template/.claude/commands/pincer-blueprint.md +7 -0
- package/template/.claude/commands/pincer-status.md +4 -59
- package/template/.claude/hooks/hook-policy.cjs +60 -25
- package/template/.claude/hooks/ticket-guard.sh +6 -3
- package/template/.claude/pincer/library/agents/accessibility-reviewer.md +27 -0
- package/template/.claude/pincer/library/agents/code-quality-reviewer.md +25 -0
- package/template/.claude/pincer/library/agents/codebase-explorer.md +23 -0
- package/template/.claude/pincer/library/agents/fix-agent.md +23 -0
- package/template/.claude/pincer/library/agents/history-reviewer.md +26 -0
- package/template/.claude/pincer/library/agents/implementer.md +24 -0
- package/template/.claude/pincer/library/agents/security-reviewer.md +26 -0
- package/template/.claude/pincer/library/agents/silent-failure-hunter.md +27 -0
- package/template/.claude/pincer/library/agents/standards-reviewer.md +25 -0
- package/template/.claude/pincer/library/agents/test-coverage-reviewer.md +26 -0
- package/template/.claude/pincer/library/agents-skeleton.md +89 -0
- package/template/.claude/pincer/library/agreement.md +46 -0
- package/template/.claude/pincer/library/models.json +6 -0
- package/template/.claude/pincer/library/stages/blueprint/SKILL.md +69 -0
- package/template/.claude/pincer/library/stages/blueprint/formats/harness.md +82 -0
- package/template/.claude/pincer/library/stages/blueprint/formats/roster-rules.md +61 -0
- package/template/.claude/pincer/library/stages/blueprint/prompts/confirm-kind.md +19 -0
- package/template/.claude/pincer/library/stages/blueprint/prompts/first-job.md +18 -0
- package/template/.claude/pincer/library/stages/blueprint/prompts/q-handoffs.md +21 -0
- package/template/.claude/pincer/library/stages/blueprint/prompts/q-models.md +20 -0
- package/template/.claude/pincer/library/stages/blueprint/prompts/q-pipeline.md +27 -0
- package/template/.claude/pincer/library/stages/blueprint/prompts/q-repo.md +21 -0
- package/template/.claude/pincer/library/stages/blueprint/prompts/q-responsibility.md +30 -0
- package/template/.claude/pincer/library/stages/blueprint/prompts/q-roster.md +20 -0
- package/template/.claude/pincer/library/stages/blueprint/prompts/q-simplify.md +26 -0
- package/template/.claude/pincer/library/stages/blueprint/prompts/q-systems.md +28 -0
- package/template/.claude/pincer/library/stages/code/SKILL.md +59 -0
- package/template/.claude/pincer/library/stages/code/formats/pr.md +55 -0
- package/template/.claude/pincer/library/stages/code/prompts/implement.md +25 -0
- package/template/.claude/pincer/library/stages/evaluate/SKILL.md +51 -0
- package/template/.claude/pincer/library/stages/evaluate/formats/evidence.md +49 -0
- package/template/.claude/pincer/library/stages/evaluate/formats/finding-report.md +72 -0
- package/template/.claude/pincer/library/stages/evaluate/formats/finding.md +35 -0
- package/template/.claude/pincer/library/stages/evaluate/prompts/review.md +25 -0
- package/template/.claude/pincer/library/stages/narrow/SKILL.md +47 -0
- package/template/.claude/pincer/library/stages/narrow/formats/ticket.md +126 -0
- package/template/.claude/pincer/library/stages/narrow/prompts/explore.md +19 -0
- package/template/.claude/pincer/library/stages/plan/SKILL.md +46 -0
- package/template/.claude/pincer/library/stages/plan/formats/spec.md +100 -0
- package/template/.claude/pincer/library/stages/plan/prompts/explore.md +20 -0
- package/template/.claude/pincer/library/stages/release/SKILL.md +51 -0
- package/template/.claude/pincer/library/stages/status/SKILL.md +37 -0
- package/template/.claude/skills/pincer-blueprint/SKILL.md +69 -0
- package/template/.claude/skills/pincer-blueprint/formats/harness.md +82 -0
- package/template/.claude/skills/pincer-blueprint/formats/roster-rules.md +61 -0
- package/template/.claude/skills/pincer-blueprint/prompts/confirm-kind.md +19 -0
- package/template/.claude/skills/pincer-blueprint/prompts/first-job.md +18 -0
- package/template/.claude/skills/pincer-blueprint/prompts/q-handoffs.md +21 -0
- package/template/.claude/skills/pincer-blueprint/prompts/q-models.md +20 -0
- package/template/.claude/skills/pincer-blueprint/prompts/q-pipeline.md +27 -0
- package/template/.claude/skills/pincer-blueprint/prompts/q-repo.md +21 -0
- package/template/.claude/skills/pincer-blueprint/prompts/q-responsibility.md +30 -0
- package/template/.claude/skills/pincer-blueprint/prompts/q-roster.md +20 -0
- package/template/.claude/skills/pincer-blueprint/prompts/q-simplify.md +26 -0
- package/template/.claude/skills/pincer-blueprint/prompts/q-systems.md +28 -0
- package/template/.claude/skills/pincer-status/SKILL.md +37 -0
- package/template/.codex/README.md +39 -35
- package/template/.github/copilot-instructions.md +19 -14
- package/template/.github/prompts/pincer-blueprint.prompt.md +70 -0
- package/template/.github/prompts/pincer-status.prompt.md +29 -55
- package/template/AGENTS.md +34 -67
- package/template/docs/engine.md +249 -0
- package/template/docs/release-checklist.md +27 -28
- package/template/scripts/pincer/blueprint.cjs +137 -0
- package/template/scripts/pincer/cli.cjs +233 -0
- package/template/scripts/pincer/evidence.cjs +142 -0
- package/template/scripts/pincer/generate.cjs +375 -0
- package/template/scripts/pincer/harness.cjs +269 -0
- package/template/scripts/pincer/models.cjs +121 -0
- package/template/scripts/{pincer-runtime → pincer}/parse.cjs +83 -133
- package/template/scripts/pincer/recon.cjs +205 -0
- package/template/scripts/pincer/status.cjs +173 -0
- package/template/scripts/pincer/ticket.cjs +204 -0
- package/template/scripts/pincer/util.cjs +104 -0
- package/template/scripts/pincer-blueprint.cjs +7 -0
- package/template/scripts/pincer-evidence.cjs +5 -73
- package/template/scripts/pincer-status.sh +10 -12
- package/template/scripts/pincer-ticket.sh +15 -18
- package/template/scripts/sync-prompts.sh +2 -50
- package/template/.agents/skills/pincer-code/SKILL.md +0 -240
- package/template/.agents/skills/pincer-evaluate/SKILL.md +0 -178
- package/template/.agents/skills/pincer-narrow/SKILL.md +0 -148
- package/template/.agents/skills/pincer-plan/SKILL.md +0 -134
- package/template/.agents/skills/pincer-release/SKILL.md +0 -82
- package/template/.claude/agents/code-quality-reviewer.md +0 -38
- package/template/.claude/agents/codebase-explorer.md +0 -23
- package/template/.claude/commands/pincer-code.md +0 -238
- package/template/.claude/commands/pincer-evaluate.md +0 -176
- package/template/.claude/commands/pincer-narrow.md +0 -146
- package/template/.claude/commands/pincer-plan.md +0 -132
- package/template/.claude/commands/pincer-release.md +0 -80
- package/template/.claude/references/prd-template.md +0 -108
- package/template/.claude/references/ticket-template.md +0 -86
- package/template/.github/prompts/pincer-code.prompt.md +0 -240
- package/template/.github/prompts/pincer-evaluate.prompt.md +0 -178
- package/template/.github/prompts/pincer-narrow.prompt.md +0 -148
- package/template/.github/prompts/pincer-plan.prompt.md +0 -134
- package/template/.github/prompts/pincer-release.prompt.md +0 -82
- package/template/docs/dry-run-checklist.md +0 -264
- package/template/docs/runtime-contracts.md +0 -1769
- package/template/scripts/pincer-runtime/adopt.cjs +0 -132
- package/template/scripts/pincer-runtime/agreement.cjs +0 -240
- package/template/scripts/pincer-runtime/authorization.cjs +0 -167
- package/template/scripts/pincer-runtime/changes.cjs +0 -517
- package/template/scripts/pincer-runtime/checks.cjs +0 -48
- package/template/scripts/pincer-runtime/coverage.cjs +0 -361
- package/template/scripts/pincer-runtime/dispositions.cjs +0 -95
- package/template/scripts/pincer-runtime/evidence.cjs +0 -676
- package/template/scripts/pincer-runtime/fsutil.cjs +0 -37
- package/template/scripts/pincer-runtime/gates.cjs +0 -73
- package/template/scripts/pincer-runtime/identity.cjs +0 -163
- package/template/scripts/pincer-runtime/impact.cjs +0 -177
- package/template/scripts/pincer-runtime/io.cjs +0 -41
- package/template/scripts/pincer-runtime/lifecycle.cjs +0 -311
- package/template/scripts/pincer-runtime/locator.cjs +0 -158
- package/template/scripts/pincer-runtime/migrate.cjs +0 -204
- package/template/scripts/pincer-runtime/phases.cjs +0 -245
- package/template/scripts/pincer-runtime/readiness.cjs +0 -102
- package/template/scripts/pincer-runtime/requirements.cjs +0 -255
- package/template/scripts/pincer-runtime/resume.cjs +0 -273
- package/template/scripts/pincer-runtime/routing.cjs +0 -54
- package/template/scripts/pincer-runtime/runner.cjs +0 -242
- package/template/scripts/pincer-runtime/sanitize.cjs +0 -63
- package/template/scripts/pincer-runtime/scaffold.cjs +0 -254
- package/template/scripts/pincer-runtime/source.cjs +0 -129
- package/template/scripts/pincer-runtime/state.cjs +0 -314
- package/template/scripts/pincer-runtime/status.cjs +0 -514
- package/template/scripts/pincer-runtime/transaction.cjs +0 -200
- package/template/scripts/pincer-runtime/transitions.cjs +0 -134
- package/template/scripts/pincer-runtime.cjs +0 -686
package/README.md
CHANGED
|
@@ -1,223 +1,191 @@
|
|
|
1
|
-
# PINCER —
|
|
1
|
+
# PINCER — a harness builder for AI coding agents
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
**Website:** [orchestratedbyalex.github.io/pincer-workflow](https://orchestratedbyalex.github.io/pincer-workflow/) —
|
|
11
|
-
a twelve-sheet walkthrough of the workflow: why it exists, each command, the
|
|
12
|
-
safety guardrails, and installation.
|
|
3
|
+
PINCER looks at your project, interviews you, and writes the agreement under which an
|
|
4
|
+
AI coding agent works there: which stages run, where the artifacts live, who accepts.
|
|
5
|
+
Then it runs the pipeline that agreement describes, with one floor that never bends:
|
|
6
|
+
a ticket is done only on a script-stamped passing check, and accepted only when a
|
|
7
|
+
named person said so, in their words. It works on Claude Code, Codex CLI and GitHub
|
|
8
|
+
Copilot from one kit, and it has no dependencies.
|
|
13
9
|
|
|
14
10
|
## Install
|
|
15
11
|
|
|
12
|
+
PINCER 1.0 is live on [npm](https://www.npmjs.com/package/pincer-workflow).
|
|
13
|
+
Install it in your project:
|
|
14
|
+
|
|
16
15
|
```bash
|
|
17
|
-
|
|
18
|
-
npx pincer-workflow init # asks which platform(s) you use
|
|
16
|
+
npx pincer-workflow@latest init --platform all
|
|
19
17
|
```
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
The same package is also attached to the [GitHub release](https://github.com/orchestratedbyalex/pincer-workflow/releases/tag/v1.0.1).
|
|
20
|
+
|
|
21
|
+
Node.js 22+, git and bash are required. PINCER uses your coding tool's own
|
|
22
|
+
authentication; it does not require a provider API key.
|
|
23
|
+
|
|
24
|
+
Then start your agent in the repository and run the blueprint:
|
|
22
25
|
|
|
23
26
|
```
|
|
24
|
-
/pincer-
|
|
27
|
+
/pincer-blueprint # Claude Code and Copilot
|
|
28
|
+
$pincer-blueprint # Codex CLI
|
|
25
29
|
```
|
|
26
30
|
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
Until the blueprint has run there is no agreement, and every other stage refuses.
|
|
32
|
+
Codex-only installs point to `$pincer-blueprint`; Claude Code, Copilot and mixed
|
|
33
|
+
installs use `/pincer-blueprint`. A draft spec stays at the plan approval step. `scripts/pincer-status.sh` works in any
|
|
34
|
+
shell from the first minute and always ends with the next command.
|
|
35
|
+
|
|
36
|
+
## The journey
|
|
37
|
+
|
|
38
|
+
**Blueprint** reads the repository first (git history, CI, deploy configuration, tests,
|
|
39
|
+
the forge when `gh` is available) and says whether the project is greenfield or
|
|
40
|
+
brownfield, and why; you confirm. Then it interviews you, one question at a time,
|
|
41
|
+
through the six sections of a harness agreement: Systems, Current pipeline, Handoff
|
|
42
|
+
artifacts, Simplify, Responsibility, Repo. Every answer it could pre-fill is shown as
|
|
43
|
+
"I see X; is that right?", and `open` is always an allowed answer. It proposes the
|
|
44
|
+
roster of review agents from your answers, writes `harness.json` and the agreement at
|
|
45
|
+
the top of `AGENTS.md`, generates the project's copies of the stages you kept, and
|
|
46
|
+
names the first real job. The first run through the pipeline is the trace you revisit
|
|
47
|
+
the agreement with.
|
|
48
|
+
|
|
49
|
+
The stages the agreement keeps, and what the interview can bend:
|
|
50
|
+
|
|
51
|
+
| Stage | Command | Default role | What the interview can bend |
|
|
52
|
+
|---|---|---|---|
|
|
53
|
+
| blueprint | `/pincer-blueprint` | the interview above | nothing; always on |
|
|
54
|
+
| plan | `/pincer-plan` | brief to a written spec with stable `R-NN` IDs | off for small changes; the spec can be a forge issue instead of a file |
|
|
55
|
+
| narrow | `/pincer-narrow` | spec to tickets with runnable checks | tickets as local files or as forge issues; one ticket per change |
|
|
56
|
+
| code | `/pincer-code` | build tickets in order, one commit each, verify, done | branch per ticket or commit to main; PR or no PR; implementer agent or the main session |
|
|
57
|
+
| evaluate | `/pincer-evaluate` | review the diff with the roster, run the checks, save evidence | review in the PR instead of a local report; evidence on or off; the roster |
|
|
58
|
+
| release | `/pincer-release` | read-only audit, then acceptance recorded and committed | audit a merged PR and a deploy instead of a clean tree; who accepts |
|
|
59
|
+
| status | `/pincer-status` | where the work stands, the next command | nothing; always on |
|
|
60
|
+
|
|
61
|
+
Each stage is a short skill with the same six sections (Reads, Steps, Checks, Writes,
|
|
62
|
+
Without subagents, When this stage is off). It reads `harness.json` first and refuses
|
|
63
|
+
when the agreement switched it off. The project copies under `.claude/skills/` are
|
|
64
|
+
yours to edit; the Codex skills and Copilot prompts are generated from them.
|
|
65
|
+
|
|
66
|
+
## The floor
|
|
67
|
+
|
|
68
|
+
- `scripts/pincer-ticket.sh verify T-NN` runs the ticket's Verification block and
|
|
69
|
+
stamps a receipt only on exit 0. `done` refuses without a receipt for the current
|
|
70
|
+
check, or with an unticked criterion.
|
|
71
|
+
- `scripts/pincer-ticket.sh accept T-NN --by "<name>" --words "<their words>"` records
|
|
72
|
+
the acceptance of a done ticket: a person named in the agreement, quoted. The agent
|
|
73
|
+
runs it only after the person said so. Release commits those three acceptance
|
|
74
|
+
fields separately, checks the final tree is clean, and keeps the evaluated
|
|
75
|
+
candidate distinct from the acceptance commit.
|
|
76
|
+
- The eight lifecycle fields of a ticket are written only by that script. On Claude
|
|
77
|
+
Code a hook enforces it; on Codex and Copilot it is a standing rule, and status flags
|
|
78
|
+
a missing, failed or stale receipt and every done ticket without acceptance.
|
|
79
|
+
- Evidence, when the agreement keeps it, is a validated manifest under the evidence
|
|
80
|
+
home that release reads instead of trusting chat.
|
|
81
|
+
- Nothing is restored from git to clear a warning. A failed check is fixed and run
|
|
82
|
+
again; a hand-edited ticket is repaired by the person, then verified again.
|
|
83
|
+
|
|
84
|
+
`docs/engine.md` in the installed kit is the full contract: fields, receipts, exit
|
|
85
|
+
codes, the gate, the manifest, generation, recovery.
|
|
29
86
|
|
|
30
|
-
|
|
31
|
-
`$pincer-plan <brief>` → `$pincer-narrow` → `$pincer-code` → `$pincer-evaluate`
|
|
32
|
-
→ `$pincer-release`, and `$pincer-status`.
|
|
87
|
+
## What you get
|
|
33
88
|
|
|
34
|
-
|
|
89
|
+
| Path | What it is |
|
|
90
|
+
|---|---|
|
|
91
|
+
| `AGENTS.md` | the agreement between two markers, then the standing rules and your conventions |
|
|
92
|
+
| `harness.json` | the machine-readable agreement, written by the blueprint, read by every stage |
|
|
93
|
+
| `scripts/pincer-ticket.sh` | `start`, `verify`, `done`, `accept`: the only writer of ticket lifecycle fields |
|
|
94
|
+
| `scripts/pincer-status.sh` | the report, `--json`, and the stage gate `--stage <name>` |
|
|
95
|
+
| `scripts/pincer-blueprint.cjs` | `recon`, `write`, `generate` |
|
|
96
|
+
| `scripts/pincer-evidence.cjs` | `validate` and `digest` for evidence manifests |
|
|
97
|
+
| `scripts/sync-prompts.sh` | regenerates the project copies, Codex skills and Copilot prompts |
|
|
98
|
+
| `scripts/pincer/` | the dependency-free Node core behind the four entry points |
|
|
99
|
+
| `.claude/pincer/library/` | the library: every stage skill, prompt, format and agent |
|
|
100
|
+
| `.claude/skills/pincer-<stage>/` | the project's editable copy of each stage that is on |
|
|
101
|
+
| `.claude/commands/`, `.agents/skills/`, `.github/prompts/` | the thin commands, the Codex skills, the Copilot prompts, generated |
|
|
102
|
+
| `.claude/agents/` | the review agents the roster names, with the model of their tier |
|
|
103
|
+
| `.codex/agents/` | the same agents as Codex agent files, generated when Codex is installed |
|
|
104
|
+
| `.claude/pincer/library/models.json` | the tier table: the model each platform runs a tier on |
|
|
105
|
+
| `docs/engine.md`, `docs/release-checklist.md` | the engine contract and the release audit |
|
|
106
|
+
| `specs/`, `tickets/`, `evidence/` | the default homes, all overridable in `harness.json` |
|
|
107
|
+
|
|
108
|
+
Secrets never enter the kit: `init` adds `.env`, `.env.*` and `!.env.example` to
|
|
109
|
+
`.gitignore`, and the standing rules in `AGENTS.md` say the rest.
|
|
110
|
+
|
|
111
|
+
## Platforms
|
|
112
|
+
|
|
113
|
+
| | Claude Code | Codex CLI | GitHub Copilot |
|
|
114
|
+
|---|---|---|---|
|
|
115
|
+
| Agreement | `AGENTS.md` via the `CLAUDE.md` import | `AGENTS.md` natively | pointed at by `.github/copilot-instructions.md` |
|
|
116
|
+
| Stages | `.claude/skills/` plus `/pincer-*` commands | `.agents/skills/`, invoked as `$pincer-*` | `.github/prompts/`, invoked as `/pincer-*` with prompt files enabled |
|
|
117
|
+
| Agents | subagents | subagents from `.codex/agents/` | the Claude agent files, read by VS Code |
|
|
118
|
+
| Floor | script plus hook | script plus status warning | script plus status warning |
|
|
119
|
+
|
|
120
|
+
The hook exists only on Claude Code. On the other platforms the rule in `AGENTS.md`
|
|
121
|
+
carries the weight, `scripts/pincer-status.sh` reports what the rule would have
|
|
122
|
+
stopped, and the posture notes in `.codex/README.md` apply. Node 22 or newer, git and
|
|
123
|
+
bash are needed everywhere; `gh` only for the forge-facing steps the agreement chose.
|
|
124
|
+
|
|
125
|
+
## Model tiers
|
|
126
|
+
|
|
127
|
+
The agreement says which tier each stage and each roster agent runs on: `strong`,
|
|
128
|
+
`standard`, `fast`, or `inherit` for the session's model, with an optional effort
|
|
129
|
+
(`low`, `medium`, `high`). The blueprint proposes the tiers right after the roster
|
|
130
|
+
(reviewers strong, the implementer and the explorer standard, every stage as run) and
|
|
131
|
+
writes what you confirm under `models` in `harness.json`; nothing moves to a stronger
|
|
132
|
+
tier unless you said so. One table in the library, `.claude/pincer/library/models.json`,
|
|
133
|
+
maps a tier to each platform's model name, and the generator writes the platform's own
|
|
134
|
+
field: Claude Code agent and skill frontmatter, Codex agent files, the Copilot prompt
|
|
135
|
+
files. `harness.json` never names a vendor's model; a project that must pin one sets
|
|
136
|
+
`models.map.<platform>.<tier>`. When a vendor ships a new model the table changes by one
|
|
137
|
+
row and `npx pincer-workflow update` carries it into every project; `doctor` shows what
|
|
138
|
+
each installed platform will run.
|
|
35
139
|
|
|
36
|
-
|
|
37
|
-
change on a project that wants strict requirement coverage — the path most of the
|
|
38
|
-
runtime exists to support. Every step is a real command; none of them is optional
|
|
39
|
-
ceremony, and the two read-only reports (`coverage scaffold`, `resume --brief`) write
|
|
40
|
-
nothing.
|
|
140
|
+
## Update
|
|
41
141
|
|
|
42
142
|
```bash
|
|
43
|
-
|
|
44
|
-
npx pincer-workflow
|
|
45
|
-
# /pincer-plan <brief> → .prd/prd-v1.md with R-NN requirements and S-NN scenarios
|
|
46
|
-
# /pincer-narrow → tickets/T-*.md, one per unit of work
|
|
47
|
-
|
|
48
|
-
# 2. Register the change and select it in this worktree.
|
|
49
|
-
node scripts/pincer-runtime.cjs register --prd .prd/prd-v1.md
|
|
50
|
-
node scripts/pincer-runtime.cjs change select prd-v1
|
|
51
|
-
|
|
52
|
-
# 3. Choose your coverage. Default is fine: tickets, checks and evidence work without
|
|
53
|
-
# this step. Strict coverage additionally binds every S-NN to a ticket and a check.
|
|
54
|
-
# Start the map from the draft — it lists every scenario and ticket for you:
|
|
55
|
-
node scripts/pincer-runtime.cjs coverage scaffold --change prd-v1
|
|
56
|
-
|
|
57
|
-
# 4. Author .prd/coverage/prd-v1.json yourself from that draft, then review the links.
|
|
58
|
-
# The draft never invents a link, a check command or a scope disposition, and it is
|
|
59
|
-
# not a map: `coverage adopt` refuses it. Working through its Unresolved list is the
|
|
60
|
-
# authoring step.
|
|
61
|
-
|
|
62
|
-
# 5. Adopt strict coverage explicitly, then record the user's actual approval.
|
|
63
|
-
node scripts/pincer-runtime.cjs coverage adopt --preview --change prd-v1
|
|
64
|
-
node scripts/pincer-runtime.cjs coverage adopt --apply --change prd-v1
|
|
65
|
-
node scripts/pincer-runtime.cjs change authorize prd-v1 --agreement <digest> \
|
|
66
|
-
--reference "<where the user said it>" --excerpt "<the user's approval, quoted>"
|
|
67
|
-
node scripts/pincer-runtime.cjs change activate prd-v1
|
|
68
|
-
|
|
69
|
-
# 6. Implement. One commit per ticket; `done` refuses without a current passing check.
|
|
70
|
-
# /pincer-code
|
|
71
|
-
|
|
72
|
-
# 7. Come back tomorrow, or in a fresh session with no memory of any of this:
|
|
73
|
-
node scripts/pincer-runtime.cjs resume --brief
|
|
74
|
-
# → one screen: the change, the authorization verdict, the coverage label, the
|
|
75
|
-
# blocker categories with counts, and the exact next command. `resume` (no
|
|
76
|
-
# --brief) prints every row; the brief names the command that shows them.
|
|
77
|
-
|
|
78
|
-
# 8. Evaluate and audit.
|
|
79
|
-
# /pincer-evaluate → validated evidence under .prd/evidence/
|
|
80
|
-
# /pincer-release → read-only pass/fail audit
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Adoption grants no approval, and approval is never inferred: `coverage adopt` records
|
|
84
|
-
the agreement, `change authorize` records what the user actually said about it, and a
|
|
85
|
-
generic "continue" authorizes no revised scope. Edit the PRD, the tickets or the map
|
|
86
|
-
afterwards and the agreement changes — the runtime reports `AGREEMENT_CHANGED` and
|
|
87
|
-
waits for a fresh decision rather than carrying the old approval forward.
|
|
88
|
-
|
|
89
|
-
### Pinning a management kit
|
|
90
|
-
|
|
91
|
-
The kit under `scripts/` is code that the workflow also runs *on* the project. When you
|
|
92
|
-
are changing that code, manage the work with a pinned released copy from outside the
|
|
93
|
-
tree rather than with the version you are editing — extract the scripts from a release
|
|
94
|
-
tag into a directory outside the repository, record its digest, and run the lifecycle
|
|
95
|
-
commands from there. A project that only uses PINCER never needs this; a project that
|
|
96
|
-
develops it does.
|
|
97
|
-
|
|
98
|
-
### Claude Code
|
|
99
|
-
|
|
100
|
-
Installs complete: the commands, the two subagents, the `.env` deny rules and
|
|
101
|
-
the destructive-command and ticket-guard hooks install to `.claude/`. Start
|
|
102
|
-
`claude` in the repo and run `/pincer-plan <brief>`. See
|
|
103
|
-
[platform support](#platform-support) for what that install has been observed to do.
|
|
104
|
-
|
|
105
|
-
### Codex CLI
|
|
106
|
-
|
|
107
|
-
Installs complete as well: `AGENTS.md` loads natively, and the six commands
|
|
108
|
-
install as skills under `.agents/skills/`, which Codex discovers from the repo
|
|
109
|
-
(no copying into your home directory — Codex removed custom prompts and
|
|
110
|
-
`~/.codex/prompts/` in early 2026). Start `codex` in the repo, then type
|
|
111
|
-
`$pincer-plan <brief>`; `$` opens the skill picker and `/skills` lists what
|
|
112
|
-
loaded. Inside the Codex skills every cross-reference already reads
|
|
113
|
-
`$pincer-narrow`, `$pincer-status` and so on.
|
|
114
|
-
|
|
115
|
-
Pincer does not currently install a Codex hook adapter, so its Codex guardrail
|
|
116
|
-
posture uses `~/.codex/config.toml` — `approval_policy = "on-request"` and
|
|
117
|
-
`sandbox_mode = "workspace-write"`; never run with approvals disabled. The
|
|
118
|
-
ticket scripts (`scripts/pincer-ticket.sh`, `scripts/pincer-status.sh`) are
|
|
119
|
-
plain bash and work unchanged; the rule in `AGENTS.md` against hand-editing
|
|
120
|
-
ticket state carries the weight the hook carries on Claude Code, and
|
|
121
|
-
`$pincer-status` flags missing, failed, or stale ticket readiness.
|
|
122
|
-
Full notes in `.codex/README.md`.
|
|
123
|
-
|
|
124
|
-
### GitHub Copilot (VS Code)
|
|
125
|
-
|
|
126
|
-
Enable `"chat.promptFiles": true` in VS Code settings, then run `/pincer-plan`
|
|
127
|
-
in chat. `.github/copilot-instructions.md` is wired to `AGENTS.md`.
|
|
128
|
-
|
|
129
|
-
## Platform support
|
|
130
|
-
|
|
131
|
-
Two different claims, kept apart on purpose. **Installation-tested** means the packed
|
|
132
|
-
artifact installs and its files land where they should, proven by the suites in this
|
|
133
|
-
repository on every push. **Live-observed** means a real agent session carried a real
|
|
134
|
-
change through the workflow on that surface and the artifacts were reviewed. An
|
|
135
|
-
installation check is not a platform trial, and packaged parity is not live success.
|
|
136
|
-
|
|
137
|
-
| Surface | Installation-tested | Live-observed |
|
|
138
|
-
| --- | --- | --- |
|
|
139
|
-
| Claude Code (`npx pincer-workflow init`) | yes — packed install, layout and generated parity | not for this release |
|
|
140
|
-
| Codex CLI (`.agents/skills/`) | yes — packed install and skill layout | not for this release |
|
|
141
|
-
| GitHub Copilot (VS Code prompts) | yes — packed install and prompt layout | no |
|
|
142
|
-
| Claude Code plugin (marketplace) | yes — plugin build parity | no |
|
|
143
|
-
| Windows (native, no POSIX shell) | no | no |
|
|
144
|
-
|
|
145
|
-
No live platform trial has been observed for the current release. The work that would
|
|
146
|
-
produce one — a full strict journey on Claude Code and on Codex, plus a real cross-agent
|
|
147
|
-
handoff resumed from files — is open, and until it reports, every "live-observed" cell
|
|
148
|
-
above stays as it reads. Earlier releases have their own recorded trials under `docs/`;
|
|
149
|
-
those describe the versions they were run against, not this one.
|
|
150
|
-
|
|
151
|
-
## Claude Code plugin (alternative)
|
|
152
|
-
|
|
153
|
-
Claude users can install PINCER as a plugin instead — commands arrive
|
|
154
|
-
namespaced (`/pincer:plan` … `/pincer:release`) and update automatically
|
|
155
|
-
through the marketplace. The plugin's structured hook parser requires Node.js 22+:
|
|
156
|
-
|
|
143
|
+
npx pincer-workflow@latest update # edited files get a .new sidecar
|
|
144
|
+
npx pincer-workflow@latest doctor # checks the install and agreement
|
|
157
145
|
```
|
|
158
|
-
/plugin marketplace add orchestratedbyalex/pincer-workflow
|
|
159
|
-
/plugin install pincer@pincer-workflow
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
Pick one channel per project: the plugin makes the commands, subagents, and
|
|
163
|
-
the guardrail hook available everywhere, while `npx pincer-workflow init`
|
|
164
|
-
installs everything project-locally *plus* the repo-side files (`AGENTS.md`
|
|
165
|
-
rules, `.env` deny rules in `.claude/settings.json`, the adapters for Codex
|
|
166
|
-
and Copilot). Installing both gives you duplicate commands. Plugin users who
|
|
167
|
-
want the repo-side rules too can copy `AGENTS.md` from the
|
|
168
|
-
[template](template/AGENTS.md).
|
|
169
146
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
| --- | --- |
|
|
174
|
-
| `AGENTS.md` | Project rules, single cross-platform source (workflow order, security defaults, secrets, untrusted-content and dependency rules) |
|
|
175
|
-
| `.claude/commands/` | The five playbooks plus `/pincer-status` (canonical — adapters are generated from them; ships on every platform together with `agents/` and `references/`) |
|
|
176
|
-
| `.claude/agents/` | `codebase-explorer` and `code-quality-reviewer` subagents, with inline fallbacks for platforms without subagents |
|
|
177
|
-
| `scripts/pincer-runtime.cjs` + `scripts/pincer-runtime/` | The runtime (Node.js 22+, no dependencies): one implementation of the ticket lifecycle, readiness, status (`--json` too), change records with lifecycle, agreements, authorization and decisions (`change list|show|select|activate|pause|resume|complete|reopen|cancel|supersede|revise|authorize|decide`), the read-only `resume` report, source identity, verification attempts with sanitized captured logs, migration with backups, candidate checks and evidence export; `docs/runtime-contracts.md` is its contract. Local attempts and the worktree's selection live in the ignored `.pincer/runtime/`, change records in `.prd/changes/`, evaluation locators in `.prd/evidence/changes/`; all are written only by the runtime |
|
|
178
|
-
| `scripts/pincer-ticket.sh` | Wrapper for the lifecycle: `start` (enforces dependency order) → `verify` (runs the ticket's check; before migration it stamps a receipt only on green, after migration it records an attempt bound to the current source) → `done` (refuses without a current pass or with unticked criteria; after migration it consumes the attempt without re-running the check) |
|
|
179
|
-
| `scripts/pincer-status.sh` | Wrapper for the read-only state report: current PRD and profile, `Runtime` mode, associated tickets, wall-clock elapsed time while work is active or against an explicit budget, evidence verdict and `Provenance`, warnings with reason codes, and next command |
|
|
180
|
-
| `scripts/pincer-evidence.cjs` | Read-only validator for candidate evidence (schema 1 authored, schema 2 exported from runtime attempts): `/pincer-evaluate` writes `.prd/evidence/prd-vN/<candidate>/manifest.json` plus logs and screenshots; status and release validate schema, references, candidate association, required results, provenance, file containment and SHA-256 digests. Legacy `NOTES.md` without a manifest is readable but never release-ready; an older runtime does not enforce this contract |
|
|
181
|
-
| `docs/runtime-contracts.md` | The runtime contract: modes (legacy, migrated, changes), commands and exit codes, supported grammar, change records, selection, lifecycle, agreements and authorization, command gates, identities, source manifest, attempts, transactions, capture limits, reason codes, evidence schema 2, the evaluation locator, the resume report, migration and rollback, worktrees |
|
|
182
|
-
| `.claude/hooks/` + `settings.json` | Claude guardrails for documented destructive command forms and for writes to ticket state, `.pincer/`, `.prd/changes/` and `.prd/evidence/changes/`; Node.js 22+ parses hook payloads structurally |
|
|
183
|
-
| `.agents/skills/` · `.codex/` · `.github/` | Generated Codex skills and Copilot prompt files + platform wiring (`.codex/README.md` covers the Codex posture) |
|
|
184
|
-
| `scripts/sync-prompts.sh` | Regenerates the adapters after you edit a playbook |
|
|
185
|
-
| `scripts/build-plugin.sh` (maintainers of this repository only — not installed into your project) | Regenerates the Claude Code plugin (`plugin/`) from the template |
|
|
186
|
-
| `docs/release-checklist.md` | General, read-only candidate audit used by `/pincer-release` |
|
|
187
|
-
| `docs/dry-run-checklist.md` | Separate manual platform trial for the Pincer kit |
|
|
147
|
+
With an agreement in place, `update` also refreshes the library and regenerates the
|
|
148
|
+
project copies you did not edit; an edited copy stays and gets the new version beside
|
|
149
|
+
it as `<file>.new`.
|
|
188
150
|
|
|
189
|
-
##
|
|
151
|
+
## Trying it locally before release
|
|
190
152
|
|
|
191
153
|
```bash
|
|
192
|
-
|
|
154
|
+
npm pack # in this repository: pincer-workflow-1.0.1.tgz
|
|
155
|
+
cp pincer-workflow-1.0.1.tgz ../some-project/ && cd ../some-project
|
|
156
|
+
npx ./pincer-workflow-1.0.1.tgz init --platform all # the ./ matters: npx treats a bare path as a command
|
|
157
|
+
scripts/pincer-status.sh # prints "no agreement yet" and "Next: /pincer-blueprint"
|
|
193
158
|
```
|
|
194
159
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
160
|
+
## Status of the older channels
|
|
161
|
+
|
|
162
|
+
- The Claude Code plugin channel is paused; the kit installs with `npx` on every platform.
|
|
163
|
+
- The wiki under `docs/wiki/` is frozen at 0.7 and kept for history.
|
|
164
|
+
- PRD v8 is superseded by the harness-builder design; its open tickets are marked so.
|
|
165
|
+
- The GitHub Pages site describes 1.0. See [CHANGELOG.md](CHANGELOG.md) before upgrading from 0.7.
|
|
199
166
|
|
|
200
167
|
## Design principles
|
|
201
168
|
|
|
202
|
-
- **
|
|
203
|
-
and
|
|
204
|
-
|
|
205
|
-
- **Nothing is done while its verification fails** — every ticket carries a
|
|
206
|
-
|
|
207
|
-
|
|
169
|
+
- **A person owns the decisions** — scope, direction, acceptance, anything that leaves
|
|
170
|
+
the machine (pushing, merging) and the rules; the agent does the work and writes
|
|
171
|
+
down the technical decisions it takes.
|
|
172
|
+
- **Nothing is done while its verification fails** — every ticket carries a runnable
|
|
173
|
+
check, and "done" is a state only a passing run of that check can unlock: the
|
|
174
|
+
receipt is stamped by the script, never typed by the agent.
|
|
175
|
+
- **Accepted means a named person said so** — acceptance is recorded with the
|
|
176
|
+
person's name and their words, per ticket, and release passes only with it.
|
|
208
177
|
- **State lives in files, not in the conversation** — a new session runs
|
|
209
|
-
`/pincer-status` and knows exactly where to resume
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
- **
|
|
215
|
-
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
-
|
|
219
|
-
|
|
220
|
-
boundary. Other platforms use their native controls plus `/pincer-release`.
|
|
178
|
+
`/pincer-status` and knows exactly where to resume.
|
|
179
|
+
- **Evidence is saved, not narrated** — requirements carry stable IDs from the spec
|
|
180
|
+
to the tickets, and the evaluation writes a validated manifest that release reads.
|
|
181
|
+
- **Scope is a first-class artifact** — cuts are recorded in the spec, never silent;
|
|
182
|
+
stages switched off carry their reason in the agreement.
|
|
183
|
+
- **Security is threaded through every stage** — designed in at plan, specified as
|
|
184
|
+
reject-path criteria at narrow, swept before every commit at code, audited at
|
|
185
|
+
evaluate and release.
|
|
186
|
+
- **Layered guardrails** — the Claude Code hooks cover documented high-risk command
|
|
187
|
+
and ticket-state forms while sandbox and approval controls remain the security
|
|
188
|
+
boundary; other platforms use their native controls plus the standing rules.
|
|
221
189
|
|
|
222
190
|
## License
|
|
223
191
|
|