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 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 — identical on every platform:
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
- Per-platform notes printed by `init`:
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
- - **Claude Code** — works immediately; commands, subagents, permission deny
33
- rules, and a destructive-command hook install to `.claude/`.
34
- - **Codex CLI** rules load natively from `AGENTS.md`; copy the prompts once:
35
- `cp .codex/prompts/*.md ~/.codex/prompts/` (posture notes in `.codex/README.md`).
36
- - **Copilot (VS Code)** enable `"chat.promptFiles": true`, then run
37
- `/pincer-plan` in chat; `.github/copilot-instructions.md` is wired to `AGENTS.md`.
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(' Codex CLI cp .codex/prompts/*.md ~/.codex/prompts/ (once; posture notes in .codex/README.md)');
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('\n Codex uses global prompts — re-run: cp .codex/prompts/*.md ~/.codex/prompts/');
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.0",
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
- Then `/pincer-plan`, `/pincer-narrow`, `/pincer-code`, `/pincer-evaluate`,
12
- and `/pincer-release` are available in any Codex session. These files are
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