pincer-workflow 0.2.1 → 0.2.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 +13 -21
- package/bin/pincer.js +4 -11
- package/package.json +1 -1
- package/template/{.codex/prompts/pincer-code.md → .agents/skills/pincer-code/SKILL.md} +7 -3
- package/template/{.codex/prompts/pincer-evaluate.md → .agents/skills/pincer-evaluate/SKILL.md} +7 -3
- package/template/{.codex/prompts/pincer-narrow.md → .agents/skills/pincer-narrow/SKILL.md} +8 -4
- package/template/{.codex/prompts/pincer-plan.md → .agents/skills/pincer-plan/SKILL.md} +10 -6
- package/template/{.codex/prompts/pincer-release.md → .agents/skills/pincer-release/SKILL.md} +7 -3
- package/template/{.codex/prompts/pincer-status.md → .agents/skills/pincer-status/SKILL.md} +6 -2
- package/template/.codex/README.md +19 -19
- package/template/AGENTS.md +1 -1
- package/template/docs/dry-run-checklist.md +1 -1
- package/template/scripts/sync-prompts.sh +16 -8
package/README.md
CHANGED
|
@@ -27,10 +27,9 @@ Then follow the chain — the same five steps 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
|
-
On Codex CLI the
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
and `/prompts:pincer-status`.
|
|
30
|
+
On Codex CLI the commands are skills, invoked by mention rather than slash:
|
|
31
|
+
`$pincer-plan <brief>` → `$pincer-narrow` → `$pincer-code` → `$pincer-evaluate`
|
|
32
|
+
→ `$pincer-release`, and `$pincer-status`.
|
|
34
33
|
|
|
35
34
|
### Claude Code
|
|
36
35
|
|
|
@@ -40,20 +39,13 @@ the destructive-command and ticket-guard hooks install to `.claude/`. Start
|
|
|
40
39
|
|
|
41
40
|
### Codex CLI
|
|
42
41
|
|
|
43
|
-
`AGENTS.md` loads natively,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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.
|
|
42
|
+
Works immediately as well: `AGENTS.md` loads natively, and the six commands
|
|
43
|
+
install as skills under `.agents/skills/`, which Codex discovers from the repo
|
|
44
|
+
(no copying into your home directory — Codex removed custom prompts and
|
|
45
|
+
`~/.codex/prompts/` in early 2026). Start `codex` in the repo, then type
|
|
46
|
+
`$pincer-plan <brief>`; `$` opens the skill picker and `/skills` lists what
|
|
47
|
+
loaded. Inside the Codex skills every cross-reference already reads
|
|
48
|
+
`$pincer-narrow`, `$pincer-status` and so on.
|
|
57
49
|
|
|
58
50
|
Codex has no PreToolUse hooks, so the guardrail posture lives in
|
|
59
51
|
`~/.codex/config.toml` instead — `approval_policy = "on-request"` and
|
|
@@ -61,7 +53,7 @@ Codex has no PreToolUse hooks, so the guardrail posture lives in
|
|
|
61
53
|
ticket scripts (`scripts/pincer-ticket.sh`, `scripts/pincer-status.sh`) are
|
|
62
54
|
plain bash and work unchanged; the rule in `AGENTS.md` against hand-editing
|
|
63
55
|
ticket state carries the weight the hook carries on Claude Code, and
|
|
64
|
-
|
|
56
|
+
`$pincer-status` flags any ticket marked done without a receipt.
|
|
65
57
|
Full notes in `.codex/README.md`.
|
|
66
58
|
|
|
67
59
|
### GitHub Copilot (VS Code)
|
|
@@ -94,7 +86,7 @@ want the repo-side rules too can copy `AGENTS.md` from the
|
|
|
94
86
|
npx pincer-workflow@latest update
|
|
95
87
|
```
|
|
96
88
|
|
|
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.
|
|
89
|
+
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.2 replaces the Codex adapter: the commands are now skills in `.agents/skills/` invoked as `$pincer-*`, since Codex no longer loads `~/.codex/prompts/` — you can delete the copies there.) Files you edited are left
|
|
98
90
|
alone — the new version lands next to them as `<file>.new` for a manual merge.
|
|
99
91
|
`npx pincer-workflow doctor` checks the health of an install (hook executable,
|
|
100
92
|
`.gitignore` covering `.env*`, no unmerged `*.new` files, version current).
|
|
@@ -109,7 +101,7 @@ alone — the new version lands next to them as `<file>.new` for a manual merge.
|
|
|
109
101
|
| `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) |
|
|
110
102
|
| `scripts/pincer-status.sh` | Read-only state report: PRD, every ticket with clock-based elapsed time, blocked tickets, build time vs budget, next command |
|
|
111
103
|
| `.claude/hooks/` + `settings.json` | Mechanical guardrails: `.env` files unreadable, destructive commands blocked, ticket state fields writable only through the script |
|
|
112
|
-
| `.codex/` · `.github/` | Generated Codex and Copilot
|
|
104
|
+
| `.agents/skills/` · `.codex/` · `.github/` | Generated Codex skills and Copilot prompt files + platform wiring (`.codex/README.md` covers the Codex posture) |
|
|
113
105
|
| `scripts/sync-prompts.sh` | Regenerates the adapters after you edit a playbook |
|
|
114
106
|
| `scripts/build-plugin.sh` | Regenerates the Claude Code plugin (`plugin/`) from the template |
|
|
115
107
|
| `docs/dry-run-checklist.md` | The workflow's own test — audited by `/pincer-release` |
|
package/bin/pincer.js
CHANGED
|
@@ -23,7 +23,7 @@ const MANIFEST = '.pincer.json';
|
|
|
23
23
|
const PLATFORM_ROOTS = {
|
|
24
24
|
common: ['AGENTS.md', 'docs/dry-run-checklist.md', 'scripts/sync-prompts.sh', 'scripts/pincer-ticket.sh', 'scripts/pincer-status.sh'],
|
|
25
25
|
claude: ['CLAUDE.md', '.claude'],
|
|
26
|
-
codex: ['.codex'],
|
|
26
|
+
codex: ['.codex', '.agents'],
|
|
27
27
|
copilot: ['.github'],
|
|
28
28
|
};
|
|
29
29
|
const EXECUTABLES = ['scripts/sync-prompts.sh', 'scripts/pincer-ticket.sh', 'scripts/pincer-status.sh', '.claude/hooks/block-dangerous.sh', '.claude/hooks/ticket-guard.sh'];
|
|
@@ -123,24 +123,20 @@ 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
|
-
|
|
130
126
|
function nextSteps(platforms) {
|
|
131
127
|
console.log('\nNext steps:');
|
|
132
128
|
if (platforms.includes('claude')) {
|
|
133
129
|
console.log(' Claude Code start `claude` in this repo and run /pincer-plan <brief>');
|
|
134
130
|
}
|
|
135
131
|
if (platforms.includes('codex')) {
|
|
136
|
-
console.log(
|
|
137
|
-
console.log(' (once; Codex has no repo-local prompts) then `codex` and /prompts:pincer-plan <brief> — posture notes in .codex/README.md');
|
|
132
|
+
console.log(' Codex CLI start `codex` in this repo and type $pincer-plan <brief> (skills load from .agents/skills/; posture notes in .codex/README.md)');
|
|
138
133
|
}
|
|
139
134
|
if (platforms.includes('copilot')) {
|
|
140
135
|
console.log(' Copilot enable "chat.promptFiles": true in VS Code settings, then /pincer-plan in chat');
|
|
141
136
|
}
|
|
142
137
|
console.log(' All rules live in AGENTS.md — fill in its Conventions section once you know the stack.');
|
|
143
|
-
|
|
138
|
+
const statusCmd = platforms.every((p) => p === 'codex') ? '$pincer-status' : platforms.includes('codex') ? '/pincer-status, $pincer-status on Codex' : '/pincer-status';
|
|
139
|
+
console.log(` Any session scripts/pincer-status.sh shows where the workflow stands (also ${statusCmd})`);
|
|
144
140
|
}
|
|
145
141
|
|
|
146
142
|
async function askPlatforms() {
|
|
@@ -185,9 +181,6 @@ async function cmdUpdate() {
|
|
|
185
181
|
if (!manifest) fail(`no ${MANIFEST} here — run \`pincer init\` first.`);
|
|
186
182
|
console.log(`\nUpdating PINCER ${manifest.version} -> ${VERSION} for: ${manifest.platforms.join(', ')}\n`);
|
|
187
183
|
report(install(dir, manifest.platforms, manifest.files));
|
|
188
|
-
if (manifest.platforms.includes('codex')) {
|
|
189
|
-
console.log(`\n Codex uses global prompts — re-run: ${CODEX_INSTALL}`);
|
|
190
|
-
}
|
|
191
184
|
}
|
|
192
185
|
|
|
193
186
|
function cmdDoctor() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pincer-workflow",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
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"
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pincer-code
|
|
3
|
+
description: "Implement tickets sequentially with verification and one commit per ticket"
|
|
4
|
+
---
|
|
1
5
|
<!-- Generated from .claude/commands/pincer-code.md by scripts/sync-prompts.sh — edit the source, not this file -->
|
|
2
6
|
|
|
3
7
|
|
|
4
|
-
#
|
|
8
|
+
# $pincer-code — Ticket Implementation
|
|
5
9
|
|
|
6
10
|
You are implementing the tickets in `tickets/` sequentially. Mostly autonomous: after the
|
|
7
11
|
user confirms the starting point, run continuously and report progress between tickets.
|
|
8
12
|
|
|
9
|
-
**Initial request:**
|
|
13
|
+
**Initial request:** the text that follows the `$pincer-code` mention in the user's message (ask for it if there is none)
|
|
10
14
|
|
|
11
15
|
Ticket state lives in the ticket file's frontmatter and is written **only** by
|
|
12
16
|
`scripts/pincer-ticket.sh` (`start` → `verify` → `done`). `verify` runs the ticket's
|
|
@@ -67,4 +71,4 @@ from wherever the receipt says you are. Confirm the starting point with the user
|
|
|
67
71
|
## When all tickets are done
|
|
68
72
|
|
|
69
73
|
Update the PRD to `status: built`, then finish with:
|
|
70
|
-
"All tickets built. Run
|
|
74
|
+
"All tickets built. Run `$pincer-evaluate` for a final quality pass."
|
package/template/{.codex/prompts/pincer-evaluate.md → .agents/skills/pincer-evaluate/SKILL.md}
RENAMED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pincer-evaluate
|
|
3
|
+
description: "Final quality pass over everything built — high-confidence findings only"
|
|
4
|
+
---
|
|
1
5
|
<!-- Generated from .claude/commands/pincer-evaluate.md by scripts/sync-prompts.sh — edit the source, not this file -->
|
|
2
6
|
|
|
3
7
|
|
|
4
|
-
#
|
|
8
|
+
# $pincer-evaluate — Final Quality Pass
|
|
5
9
|
|
|
6
10
|
You are reviewing all work built this session against the PRD and tickets. Autonomous —
|
|
7
11
|
run the pipeline, then present results.
|
|
@@ -10,7 +14,7 @@ run the pipeline, then present results.
|
|
|
10
14
|
|
|
11
15
|
1. Run `scripts/pincer-status.sh`. Every ticket should be `done` with a receipt; if one
|
|
12
16
|
is still open or in progress, stop and ask whether it was cut (then it goes in the
|
|
13
|
-
PRD's Out of Scope) or should be finished first via
|
|
17
|
+
PRD's Out of Scope) or should be finished first via `$pincer-code`. Then get the full
|
|
14
18
|
diff of the session: `git log --oneline` and `git diff <first-commit>..HEAD`.
|
|
15
19
|
2. Dispatch a `code-quality-reviewer` agent with: the diff, the PRD's Success Criteria and
|
|
16
20
|
Scope sections, and the list of tickets. If the diff is large, split by area and
|
|
@@ -44,5 +48,5 @@ run the pipeline, then present results.
|
|
|
44
48
|
its place, and what breaks first as the code ages (the riskiest assumption, the
|
|
45
49
|
least-tested path). Commit it. This is the first document a reviewer of this repo
|
|
46
50
|
should read.
|
|
47
|
-
10. Suggest
|
|
51
|
+
10. Suggest `$pincer-release` as the final step: "Run `$pincer-release` for a pass/fail audit of the
|
|
48
52
|
whole workflow's artifacts."
|
|
@@ -1,19 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pincer-narrow
|
|
3
|
+
description: "Turn the approved PRD into local, AI-ready ticket files"
|
|
4
|
+
---
|
|
1
5
|
<!-- Generated from .claude/commands/pincer-narrow.md by scripts/sync-prompts.sh — edit the source, not this file -->
|
|
2
6
|
|
|
3
7
|
|
|
4
|
-
#
|
|
8
|
+
# $pincer-narrow — PRD to Local Tickets
|
|
5
9
|
|
|
6
10
|
You are decomposing the PRD into small, independently verifiable tickets stored as local
|
|
7
11
|
markdown files (no external tracker needed). Target: 4–7 tickets that fit a ~75-minute
|
|
8
12
|
build window.
|
|
9
13
|
|
|
10
|
-
**Initial request:**
|
|
14
|
+
**Initial request:** the text that follows the `$pincer-narrow` mention in the user's message (ask for it if there is none)
|
|
11
15
|
|
|
12
16
|
## Steps
|
|
13
17
|
|
|
14
18
|
1. Run `scripts/pincer-status.sh`. If tickets already exist, ask before adding to them —
|
|
15
19
|
new tickets continue the numbering, existing ones are never renumbered. Then read the
|
|
16
|
-
PRD (`$
|
|
20
|
+
PRD (`the text that follows the `$pincer-narrow` mention in the user's message (ask for it if there is none)` or the latest `.prd/prd-v*.md`). If its status isn't `draft`, ask
|
|
17
21
|
which PRD to use.
|
|
18
22
|
2. Decompose into tickets. Rules:
|
|
19
23
|
- Each ticket is one coherent unit: sized S or M, never L. Split anything larger.
|
|
@@ -46,4 +50,4 @@ build window.
|
|
|
46
50
|
|
|
47
51
|
5. After approval, update the PRD frontmatter to `status: ticketed`, commit the tickets
|
|
48
52
|
(`git add .prd tickets && git commit`), and finish with:
|
|
49
|
-
"Tickets ready in `tickets/`. Run
|
|
53
|
+
"Tickets ready in `tickets/`. Run `$pincer-code` to start implementing."
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pincer-plan
|
|
3
|
+
description: "Create a PRD through brief discovery, codebase scan, and an architecture gate"
|
|
4
|
+
---
|
|
1
5
|
<!-- Generated from .claude/commands/pincer-plan.md by scripts/sync-prompts.sh — edit the source, not this file -->
|
|
2
6
|
|
|
3
7
|
|
|
4
|
-
#
|
|
8
|
+
# $pincer-plan — PRD Creation
|
|
5
9
|
|
|
6
10
|
You are turning a task brief into a compact PRD. This runs inside a short delivery
|
|
7
11
|
timebox (~2 hours total), so discovery is brief and the PRD is lean. The PRD feeds
|
|
8
|
-
|
|
12
|
+
`$pincer-narrow` next.
|
|
9
13
|
|
|
10
|
-
**Initial request:**
|
|
14
|
+
**Initial request:** the text that follows the `$pincer-plan` mention in the user's message (ask for it if there is none)
|
|
11
15
|
|
|
12
16
|
First run `scripts/pincer-status.sh`. If a PRD already exists, say so and ask whether
|
|
13
17
|
this is a new version of it (`.prd/prd-v{N+1}.md` — old versions are never overwritten)
|
|
14
|
-
or a fresh start; if tickets are in progress, stop and point at
|
|
18
|
+
or a fresh start; if tickets are in progress, stop and point at `$pincer-code` instead.
|
|
15
19
|
|
|
16
20
|
## Phase 1: Discovery (~5 min)
|
|
17
21
|
|
|
18
|
-
1. If `$
|
|
22
|
+
1. If `the text that follows the `$pincer-plan` mention in the user's message (ask for it if there is none)` contains the brief, extract what you can before asking anything.
|
|
19
23
|
Never ask a question the brief already answers.
|
|
20
24
|
2. Ask only the questions whose answers would change the architecture or scope.
|
|
21
25
|
Batch them (max 3–4 at once). Typical ones:
|
|
@@ -74,4 +78,4 @@ Propose the architecture: components, data flow, integration points, and key dec
|
|
|
74
78
|
4. If `.git/` doesn't exist, run `git init` and make an initial commit containing the
|
|
75
79
|
PRD and this `.claude/` setup — planning should be visible in the history.
|
|
76
80
|
|
|
77
|
-
Finish with: "PRD saved to `.prd/prd-v1.md`. Run
|
|
81
|
+
Finish with: "PRD saved to `.prd/prd-v1.md`. Run `$pincer-narrow` to break it into work items."
|
package/template/{.codex/prompts/pincer-release.md → .agents/skills/pincer-release/SKILL.md}
RENAMED
|
@@ -1,18 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pincer-release
|
|
3
|
+
description: "Audit the repo against the workflow checklist — pass/fail per item, no fixes"
|
|
4
|
+
---
|
|
1
5
|
<!-- Generated from .claude/commands/pincer-release.md by scripts/sync-prompts.sh — edit the source, not this file -->
|
|
2
6
|
|
|
3
7
|
|
|
4
|
-
#
|
|
8
|
+
# $pincer-release — Workflow Audit
|
|
5
9
|
|
|
6
10
|
You are auditing the current repo state against `docs/dry-run-checklist.md`. Read-only:
|
|
7
11
|
report pass/fail, never fix anything — fixes belong to the stage commands.
|
|
8
12
|
|
|
9
|
-
**Requested stage:**
|
|
13
|
+
**Requested stage:** the text that follows the `$pincer-release` mention in the user's message (ask for it if there is none)
|
|
10
14
|
|
|
11
15
|
## Steps
|
|
12
16
|
|
|
13
17
|
1. Read `docs/dry-run-checklist.md` — it is the source of truth for what to check.
|
|
14
18
|
2. Run `scripts/pincer-status.sh` to determine which stages have run (it reads `.prd/`,
|
|
15
|
-
`tickets/`, `NOTES.md`; add `git log`). If `$
|
|
19
|
+
`tickets/`, `NOTES.md`; add `git log`). If `the text that follows the `$pincer-release` mention in the user's message (ask for it if there is none)` names a stage, check only up
|
|
16
20
|
to that stage.
|
|
17
21
|
3. Check every applicable item mechanically where possible:
|
|
18
22
|
- File existence and frontmatter: read the files.
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pincer-status
|
|
3
|
+
description: "Where the workflow stands — PRD, tickets, receipts, elapsed time, next action"
|
|
4
|
+
---
|
|
1
5
|
<!-- Generated from .claude/commands/pincer-status.md by scripts/sync-prompts.sh — edit the source, not this file -->
|
|
2
6
|
|
|
3
7
|
|
|
4
|
-
#
|
|
8
|
+
# $pincer-status — Where are we?
|
|
5
9
|
|
|
6
10
|
You are orienting in a repo that uses PINCER, typically after a context reset or at the
|
|
7
11
|
start of a session. Read-only: change nothing.
|
|
@@ -15,5 +19,5 @@ start of a session. Read-only: change nothing.
|
|
|
15
19
|
2. Report in three lines: where the workflow is, what is in progress or blocked, and the
|
|
16
20
|
next command. Quote the `Next` line as-is.
|
|
17
21
|
3. If a ticket is `in_progress`, read it and `git status`, then offer to resume it with
|
|
18
|
-
|
|
22
|
+
`$pincer-code T-{NN}`. If the script printed a warning, surface it — a done ticket
|
|
19
23
|
without a receipt was marked by hand and needs `scripts/pincer-ticket.sh verify T-{NN}`.
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
# PINCER on Codex CLI
|
|
2
2
|
|
|
3
3
|
Codex reads `AGENTS.md` at the repo root natively — the project rules apply
|
|
4
|
-
with no setup. The workflow commands
|
|
5
|
-
|
|
4
|
+
with no setup. The workflow commands ship as **skills** in `.agents/skills/`,
|
|
5
|
+
which Codex discovers from the repo on its own (Codex removed custom prompts
|
|
6
|
+
and `~/.codex/prompts/` in early 2026 — openai/codex#16115 — so there is
|
|
7
|
+
nothing to copy into your home directory).
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
```
|
|
9
|
+
Skills are invoked by mention: type `$` and pick from the list, or write the
|
|
10
|
+
name directly:
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
The playbooks refer to each other by their short names (`/pincer-narrow` etc.);
|
|
17
|
-
read those as `/prompts:pincer-narrow` here.
|
|
12
|
+
```
|
|
13
|
+
$pincer-plan <brief>
|
|
14
|
+
$pincer-narrow → $pincer-code → $pincer-evaluate → $pincer-release
|
|
15
|
+
$pincer-status
|
|
16
|
+
```
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
`/skills` lists what Codex has loaded — the six `pincer-*` entries should be
|
|
19
|
+
there whenever you start `codex` inside this repo. The skills are generated
|
|
20
|
+
from `.claude/commands/` by `scripts/sync-prompts.sh` (cross-references are
|
|
21
|
+
rewritten from `/pincer-*` to `$pincer-*`, and the argument placeholder becomes
|
|
22
|
+
"the text after the mention") — edit the source playbooks, re-run the script,
|
|
23
|
+
commit the result.
|
|
24
24
|
|
|
25
25
|
## Recommended posture (`~/.codex/config.toml`)
|
|
26
26
|
|
|
@@ -35,10 +35,10 @@ sandbox_mode = "workspace-write" # writes confined to the repo; no network by
|
|
|
35
35
|
The ticket scripts are plain bash and work here unchanged:
|
|
36
36
|
`scripts/pincer-ticket.sh start|verify|done T-NN` and `scripts/pincer-status.sh`.
|
|
37
37
|
What Codex lacks is the hook that stops an agent hand-editing ticket state, so the
|
|
38
|
-
rule in `AGENTS.md` carries that weight;
|
|
38
|
+
rule in `AGENTS.md` carries that weight; `$pincer-status` warns about any ticket
|
|
39
39
|
marked done without a receipt.
|
|
40
40
|
|
|
41
41
|
Never run with approvals disabled. The destructive-command rule in `AGENTS.md`
|
|
42
42
|
(no force-pushes, absolute-path deletes, or `curl | sh` by an agent) applies as
|
|
43
|
-
a standing instruction here;
|
|
43
|
+
a standing instruction here; `$pincer-release` audits the git artifacts
|
|
44
44
|
afterwards, which is platform-independent by design.
|
package/template/AGENTS.md
CHANGED
|
@@ -22,7 +22,7 @@ the next command — run it first in any new session. Do not write feature code
|
|
|
22
22
|
a PRD exists and tickets are approved.
|
|
23
23
|
|
|
24
24
|
The commands live as playbooks in `.claude/commands/` (canonical), with
|
|
25
|
-
generated adapters in `.
|
|
25
|
+
generated adapters in `.agents/skills/` (Codex) and `.github/prompts/` (Copilot). If your
|
|
26
26
|
platform has no slash commands, read the playbook file and follow it directly.
|
|
27
27
|
|
|
28
28
|
## Conventions
|
|
@@ -72,7 +72,7 @@ Use a throwaway copy of this repo and a cheap model (`claude --model sonnet`).
|
|
|
72
72
|
- [ ] Brownfield only: untested load-bearing code got a characterization test
|
|
73
73
|
before being modified
|
|
74
74
|
- [ ] Platform adapters in sync: `scripts/sync-prompts.sh` then `git status`
|
|
75
|
-
shows no changes in `.
|
|
75
|
+
shows no changes in `.agents/skills/` or `.github/prompts/`
|
|
76
76
|
- [ ] `scripts/pincer-status.sh` says `Next /pincer-release` and its build elapsed
|
|
77
77
|
figure fit the ~75-minute build budget (note where time went if not)
|
|
78
78
|
- [ ] Total wall-clock time fit the ~2-hour budget
|
|
@@ -3,15 +3,16 @@
|
|
|
3
3
|
# PINCER playbooks in .claude/commands/. The playbooks are the single source
|
|
4
4
|
# of truth: edit them, re-run this script, commit the result.
|
|
5
5
|
#
|
|
6
|
-
# .
|
|
7
|
-
#
|
|
8
|
-
#
|
|
6
|
+
# .agents/skills/pincer-*/SKILL.md — Codex CLI skills (repo-local; Codex
|
|
7
|
+
# removed custom prompts in 0.9x, see
|
|
8
|
+
# openai/codex#16115). Invoke by typing
|
|
9
|
+
# $pincer-plan <brief> in a Codex session.
|
|
9
10
|
# .github/prompts/pincer-*.prompt.md — VS Code Copilot prompt files
|
|
10
11
|
# (enable: "chat.promptFiles": true)
|
|
11
12
|
set -euo pipefail
|
|
12
13
|
cd "$(dirname "$0")/.."
|
|
13
14
|
|
|
14
|
-
mkdir -p .
|
|
15
|
+
mkdir -p .agents/skills .github/prompts
|
|
15
16
|
|
|
16
17
|
count=0
|
|
17
18
|
for src in .claude/commands/pincer-*.md; do
|
|
@@ -19,11 +20,18 @@ for src in .claude/commands/pincer-*.md; do
|
|
|
19
20
|
desc=$(sed -n 's/^description: *"\{0,1\}\([^"]*\)"\{0,1\}$/\1/p' "$src" | head -1)
|
|
20
21
|
body=$(awk 'flag; /^---$/ { if (++c == 2) flag = 1 }' "$src")
|
|
21
22
|
|
|
22
|
-
# Codex:
|
|
23
|
+
# Codex: one skill directory per playbook. Skills have no $ARGUMENTS
|
|
24
|
+
# substitution and are invoked as $name mentions, so the argument placeholder
|
|
25
|
+
# becomes prose and cross-references to /pincer-* become $pincer-* (the
|
|
26
|
+
# leading-context guard keeps paths like scripts/pincer-status.sh intact).
|
|
27
|
+
mkdir -p ".agents/skills/$name"
|
|
23
28
|
{
|
|
29
|
+
printf -- '---\nname: %s\ndescription: "%s"\n---\n' "$name" "$desc"
|
|
24
30
|
printf '<!-- Generated from %s by scripts/sync-prompts.sh — edit the source, not this file -->\n\n' "$src"
|
|
25
|
-
printf '%s\n' "$body"
|
|
26
|
-
|
|
31
|
+
printf '%s\n' "$body" \
|
|
32
|
+
| sed "s/\$ARGUMENTS/the text that follows the \`\$$name\` mention in the user's message (ask for it if there is none)/g" \
|
|
33
|
+
| sed -e 's#^/pincer-\([a-z]*\)#$pincer-\1#' -e 's#\([^A-Za-z0-9_./]\)/pincer-\([a-z]*\)#\1$pincer-\2#g'
|
|
34
|
+
} > ".agents/skills/$name/SKILL.md"
|
|
27
35
|
|
|
28
36
|
# Copilot: prompt-file frontmatter; $ARGUMENTS becomes an input variable.
|
|
29
37
|
{
|
|
@@ -35,4 +43,4 @@ for src in .claude/commands/pincer-*.md; do
|
|
|
35
43
|
count=$((count + 1))
|
|
36
44
|
done
|
|
37
45
|
|
|
38
|
-
echo "Synced $count playbooks -> .
|
|
46
|
+
echo "Synced $count playbooks -> .agents/skills/ and .github/prompts/"
|