pincer-workflow 0.2.0 → 0.2.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 +43 -10
- package/bin/pincer.js +7 -2
- package/package.json +1 -1
- package/template/.codex/README.md +12 -3
- package/template/scripts/sync-prompts.sh +2 -1
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ cd your-project
|
|
|
18
18
|
npx pincer-workflow init # asks which platform(s) you use
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
Then follow the chain —
|
|
21
|
+
Then follow the chain — the same five steps on every platform:
|
|
22
22
|
|
|
23
23
|
```
|
|
24
24
|
/pincer-plan <brief> → /pincer-narrow → /pincer-code → /pincer-evaluate → /pincer-release
|
|
@@ -27,14 +27,47 @@ Then follow the chain — identical on every platform:
|
|
|
27
27
|
`/pincer-status` shows where the workflow stands at any point (PRD, tickets,
|
|
28
28
|
receipts, elapsed time, next command) — run it first in a new session.
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
On Codex CLI the same commands carry the `/prompts:` prefix Codex gives every
|
|
31
|
+
custom prompt: `/prompts:pincer-plan <brief>` → `/prompts:pincer-narrow` →
|
|
32
|
+
`/prompts:pincer-code` → `/prompts:pincer-evaluate` → `/prompts:pincer-release`,
|
|
33
|
+
and `/prompts:pincer-status`.
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
### Claude Code
|
|
36
|
+
|
|
37
|
+
Works immediately: the commands, the two subagents, the `.env` deny rules and
|
|
38
|
+
the destructive-command and ticket-guard hooks install to `.claude/`. Start
|
|
39
|
+
`claude` in the repo and run `/pincer-plan <brief>`.
|
|
40
|
+
|
|
41
|
+
### Codex CLI
|
|
42
|
+
|
|
43
|
+
`AGENTS.md` loads natively, so the rules apply with no setup. Codex reads
|
|
44
|
+
custom prompts only from `~/.codex/prompts/` (there is no repo-local location)
|
|
45
|
+
and does not create that directory itself, so install the prompts once:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
mkdir -p ~/.codex/prompts && cp .codex/prompts/*.md ~/.codex/prompts/
|
|
49
|
+
codex
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Then `/prompts:pincer-plan <brief>` and the rest of the chain are available in
|
|
53
|
+
every Codex session. The playbooks refer to each other by their short names
|
|
54
|
+
(`/pincer-narrow` etc.) — read those as `/prompts:pincer-narrow` in Codex.
|
|
55
|
+
Re-run the copy after `npx pincer-workflow@latest update` or after editing a
|
|
56
|
+
playbook; `update` prints the reminder.
|
|
57
|
+
|
|
58
|
+
Codex has no PreToolUse hooks, so the guardrail posture lives in
|
|
59
|
+
`~/.codex/config.toml` instead — `approval_policy = "on-request"` and
|
|
60
|
+
`sandbox_mode = "workspace-write"`; never run with approvals disabled. The
|
|
61
|
+
ticket scripts (`scripts/pincer-ticket.sh`, `scripts/pincer-status.sh`) are
|
|
62
|
+
plain bash and work unchanged; the rule in `AGENTS.md` against hand-editing
|
|
63
|
+
ticket state carries the weight the hook carries on Claude Code, and
|
|
64
|
+
`/prompts:pincer-status` flags any ticket marked done without a receipt.
|
|
65
|
+
Full notes in `.codex/README.md`.
|
|
66
|
+
|
|
67
|
+
### GitHub Copilot (VS Code)
|
|
68
|
+
|
|
69
|
+
Enable `"chat.promptFiles": true` in VS Code settings, then run `/pincer-plan`
|
|
70
|
+
in chat. `.github/copilot-instructions.md` is wired to `AGENTS.md`.
|
|
38
71
|
|
|
39
72
|
## Claude Code plugin (alternative)
|
|
40
73
|
|
|
@@ -61,7 +94,7 @@ want the repo-side rules too can copy `AGENTS.md` from the
|
|
|
61
94
|
npx pincer-workflow@latest update
|
|
62
95
|
```
|
|
63
96
|
|
|
64
|
-
Files you never touched are refreshed in place. (Installs older than v0.2.0 gain the ticket state machine, the status report and the ticket-guard hook on update; `.claude/settings.json` conflicts if you edited it — merge the new hook entry from the `.new` file.) Files you edited are left
|
|
97
|
+
Files you never touched are refreshed in place. (Installs older than v0.2.0 gain the ticket state machine, the status report and the ticket-guard hook on update; `.claude/settings.json` conflicts if you edited it — merge the new hook entry from the `.new` file. v0.2.1 corrects the Codex install step: `~/.codex/prompts/` must be created first, and the commands are invoked as `/prompts:pincer-*`.) Files you edited are left
|
|
65
98
|
alone — the new version lands next to them as `<file>.new` for a manual merge.
|
|
66
99
|
`npx pincer-workflow doctor` checks the health of an install (hook executable,
|
|
67
100
|
`.gitignore` covering `.env*`, no unmerged `*.new` files, version current).
|
|
@@ -76,7 +109,7 @@ alone — the new version lands next to them as `<file>.new` for a manual merge.
|
|
|
76
109
|
| `scripts/pincer-ticket.sh` | The ticket state machine: `start` (enforces dependency order) → `verify` (runs the ticket's check, stamps a receipt only on green) → `done` (refuses without a matching receipt or with unticked criteria) |
|
|
77
110
|
| `scripts/pincer-status.sh` | Read-only state report: PRD, every ticket with clock-based elapsed time, blocked tickets, build time vs budget, next command |
|
|
78
111
|
| `.claude/hooks/` + `settings.json` | Mechanical guardrails: `.env` files unreadable, destructive commands blocked, ticket state fields writable only through the script |
|
|
79
|
-
| `.codex/` · `.github/` | Generated Codex and Copilot adapters + platform wiring |
|
|
112
|
+
| `.codex/` · `.github/` | Generated Codex and Copilot adapters + platform wiring (`.codex/README.md` covers the Codex install and posture) |
|
|
80
113
|
| `scripts/sync-prompts.sh` | Regenerates the adapters after you edit a playbook |
|
|
81
114
|
| `scripts/build-plugin.sh` | Regenerates the Claude Code plugin (`plugin/`) from the template |
|
|
82
115
|
| `docs/dry-run-checklist.md` | The workflow's own test — audited by `/pincer-release` |
|
package/bin/pincer.js
CHANGED
|
@@ -123,13 +123,18 @@ function report({ written, skipped, conflicted }) {
|
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
+
// Codex loads custom prompts from ~/.codex/prompts/ only and never creates that
|
|
127
|
+
// directory itself — a bare `cp` there fails with "Not a directory" on a fresh machine.
|
|
128
|
+
const CODEX_INSTALL = 'mkdir -p ~/.codex/prompts && cp .codex/prompts/*.md ~/.codex/prompts/';
|
|
129
|
+
|
|
126
130
|
function nextSteps(platforms) {
|
|
127
131
|
console.log('\nNext steps:');
|
|
128
132
|
if (platforms.includes('claude')) {
|
|
129
133
|
console.log(' Claude Code start `claude` in this repo and run /pincer-plan <brief>');
|
|
130
134
|
}
|
|
131
135
|
if (platforms.includes('codex')) {
|
|
132
|
-
console.log(
|
|
136
|
+
console.log(` Codex CLI ${CODEX_INSTALL}`);
|
|
137
|
+
console.log(' (once; Codex has no repo-local prompts) then `codex` and /prompts:pincer-plan <brief> — posture notes in .codex/README.md');
|
|
133
138
|
}
|
|
134
139
|
if (platforms.includes('copilot')) {
|
|
135
140
|
console.log(' Copilot enable "chat.promptFiles": true in VS Code settings, then /pincer-plan in chat');
|
|
@@ -181,7 +186,7 @@ async function cmdUpdate() {
|
|
|
181
186
|
console.log(`\nUpdating PINCER ${manifest.version} -> ${VERSION} for: ${manifest.platforms.join(', ')}\n`);
|
|
182
187
|
report(install(dir, manifest.platforms, manifest.files));
|
|
183
188
|
if (manifest.platforms.includes('codex')) {
|
|
184
|
-
console.log(
|
|
189
|
+
console.log(`\n Codex uses global prompts — re-run: ${CODEX_INSTALL}`);
|
|
185
190
|
}
|
|
186
191
|
}
|
|
187
192
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pincer-workflow",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "PINCER — a PRD-driven agentic delivery workflow for Claude Code, Codex CLI, and GitHub Copilot. Plan · Investigate · Narrow · Code · Evaluate · Release.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"pincer": "bin/pincer.js"
|
|
@@ -5,11 +5,20 @@ with no setup. The workflow commands need one install step, because Codex
|
|
|
5
5
|
loads custom prompts from your home directory, not the repo:
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
cp .codex/prompts/*.md ~/.codex/prompts/
|
|
8
|
+
mkdir -p ~/.codex/prompts && cp .codex/prompts/*.md ~/.codex/prompts/
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
(`mkdir -p` matters: Codex does not create `~/.codex/prompts/` on its own, and
|
|
12
|
+
`cp` into a missing directory fails with "Not a directory".) Codex exposes custom
|
|
13
|
+
prompts under a `/prompts:` prefix, so the commands are `/prompts:pincer-plan`,
|
|
14
|
+
`/prompts:pincer-narrow`, `/prompts:pincer-code`, `/prompts:pincer-evaluate`,
|
|
15
|
+
`/prompts:pincer-release` and `/prompts:pincer-status` in any Codex session.
|
|
16
|
+
The playbooks refer to each other by their short names (`/pincer-narrow` etc.);
|
|
17
|
+
read those as `/prompts:pincer-narrow` here.
|
|
18
|
+
|
|
19
|
+
The copy is not tracked by `pincer update`: after `npx pincer-workflow@latest update`
|
|
20
|
+
(or after editing a playbook and re-running `scripts/sync-prompts.sh`), run the
|
|
21
|
+
`mkdir -p … && cp …` line again so `~/.codex/prompts/` matches the repo. These files are
|
|
13
22
|
generated from `.claude/commands/` by `scripts/sync-prompts.sh` — edit the
|
|
14
23
|
source playbooks, not these copies, and re-copy after a re-sync.
|
|
15
24
|
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
# of truth: edit them, re-run this script, commit the result.
|
|
5
5
|
#
|
|
6
6
|
# .codex/prompts/pincer-*.md — Codex CLI custom prompts
|
|
7
|
-
# (install: cp .codex/prompts/*.md ~/.codex/prompts
|
|
7
|
+
# (install: mkdir -p ~/.codex/prompts && cp .codex/prompts/*.md ~/.codex/prompts/;
|
|
8
|
+
# invoked as /prompts:pincer-*)
|
|
8
9
|
# .github/prompts/pincer-*.prompt.md — VS Code Copilot prompt files
|
|
9
10
|
# (enable: "chat.promptFiles": true)
|
|
10
11
|
set -euo pipefail
|