pincer-workflow 0.2.0 → 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 +35 -10
- package/bin/pincer.js +4 -6
- 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 -10
- package/template/AGENTS.md +1 -1
- package/template/docs/dry-run-checklist.md +1 -1
- package/template/scripts/sync-prompts.sh +16 -7
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,39 @@ 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 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`.
|
|
31
33
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
### Claude Code
|
|
35
|
+
|
|
36
|
+
Works immediately: the commands, the two subagents, the `.env` deny rules and
|
|
37
|
+
the destructive-command and ticket-guard hooks install to `.claude/`. Start
|
|
38
|
+
`claude` in the repo and run `/pincer-plan <brief>`.
|
|
39
|
+
|
|
40
|
+
### Codex CLI
|
|
41
|
+
|
|
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.
|
|
49
|
+
|
|
50
|
+
Codex has no PreToolUse hooks, so the guardrail posture lives in
|
|
51
|
+
`~/.codex/config.toml` instead — `approval_policy = "on-request"` and
|
|
52
|
+
`sandbox_mode = "workspace-write"`; never run with approvals disabled. The
|
|
53
|
+
ticket scripts (`scripts/pincer-ticket.sh`, `scripts/pincer-status.sh`) are
|
|
54
|
+
plain bash and work unchanged; the rule in `AGENTS.md` against hand-editing
|
|
55
|
+
ticket state carries the weight the hook carries on Claude Code, and
|
|
56
|
+
`$pincer-status` flags any ticket marked done without a receipt.
|
|
57
|
+
Full notes in `.codex/README.md`.
|
|
58
|
+
|
|
59
|
+
### GitHub Copilot (VS Code)
|
|
60
|
+
|
|
61
|
+
Enable `"chat.promptFiles": true` in VS Code settings, then run `/pincer-plan`
|
|
62
|
+
in chat. `.github/copilot-instructions.md` is wired to `AGENTS.md`.
|
|
38
63
|
|
|
39
64
|
## Claude Code plugin (alternative)
|
|
40
65
|
|
|
@@ -61,7 +86,7 @@ want the repo-side rules too can copy `AGENTS.md` from the
|
|
|
61
86
|
npx pincer-workflow@latest update
|
|
62
87
|
```
|
|
63
88
|
|
|
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
|
|
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
|
|
65
90
|
alone — the new version lands next to them as `<file>.new` for a manual merge.
|
|
66
91
|
`npx pincer-workflow doctor` checks the health of an install (hook executable,
|
|
67
92
|
`.gitignore` covering `.env*`, no unmerged `*.new` files, version current).
|
|
@@ -76,7 +101,7 @@ alone — the new version lands next to them as `<file>.new` for a manual merge.
|
|
|
76
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) |
|
|
77
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 |
|
|
78
103
|
| `.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
|
|
104
|
+
| `.agents/skills/` · `.codex/` · `.github/` | Generated Codex skills and Copilot prompt files + platform wiring (`.codex/README.md` covers the Codex posture) |
|
|
80
105
|
| `scripts/sync-prompts.sh` | Regenerates the adapters after you edit a playbook |
|
|
81
106
|
| `scripts/build-plugin.sh` | Regenerates the Claude Code plugin (`plugin/`) from the template |
|
|
82
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'];
|
|
@@ -129,13 +129,14 @@ function nextSteps(platforms) {
|
|
|
129
129
|
console.log(' Claude Code start `claude` in this repo and run /pincer-plan <brief>');
|
|
130
130
|
}
|
|
131
131
|
if (platforms.includes('codex')) {
|
|
132
|
-
console.log(' Codex CLI
|
|
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)');
|
|
133
133
|
}
|
|
134
134
|
if (platforms.includes('copilot')) {
|
|
135
135
|
console.log(' Copilot enable "chat.promptFiles": true in VS Code settings, then /pincer-plan in chat');
|
|
136
136
|
}
|
|
137
137
|
console.log(' All rules live in AGENTS.md — fill in its Conventions section once you know the stack.');
|
|
138
|
-
|
|
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})`);
|
|
139
140
|
}
|
|
140
141
|
|
|
141
142
|
async function askPlatforms() {
|
|
@@ -180,9 +181,6 @@ async function cmdUpdate() {
|
|
|
180
181
|
if (!manifest) fail(`no ${MANIFEST} here — run \`pincer init\` first.`);
|
|
181
182
|
console.log(`\nUpdating PINCER ${manifest.version} -> ${VERSION} for: ${manifest.platforms.join(', ')}\n`);
|
|
182
183
|
report(install(dir, manifest.platforms, manifest.files));
|
|
183
|
-
if (manifest.platforms.includes('codex')) {
|
|
184
|
-
console.log('\n Codex uses global prompts — re-run: cp .codex/prompts/*.md ~/.codex/prompts/');
|
|
185
|
-
}
|
|
186
184
|
}
|
|
187
185
|
|
|
188
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,17 +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
|
+
Skills are invoked by mention: type `$` and pick from the list, or write the
|
|
10
|
+
name directly:
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
$pincer-plan <brief>
|
|
14
|
+
$pincer-narrow → $pincer-code → $pincer-evaluate → $pincer-release
|
|
15
|
+
$pincer-status
|
|
9
16
|
```
|
|
10
17
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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.
|
|
15
24
|
|
|
16
25
|
## Recommended posture (`~/.codex/config.toml`)
|
|
17
26
|
|
|
@@ -26,10 +35,10 @@ sandbox_mode = "workspace-write" # writes confined to the repo; no network by
|
|
|
26
35
|
The ticket scripts are plain bash and work here unchanged:
|
|
27
36
|
`scripts/pincer-ticket.sh start|verify|done T-NN` and `scripts/pincer-status.sh`.
|
|
28
37
|
What Codex lacks is the hook that stops an agent hand-editing ticket state, so the
|
|
29
|
-
rule in `AGENTS.md` carries that weight;
|
|
38
|
+
rule in `AGENTS.md` carries that weight; `$pincer-status` warns about any ticket
|
|
30
39
|
marked done without a receipt.
|
|
31
40
|
|
|
32
41
|
Never run with approvals disabled. The destructive-command rule in `AGENTS.md`
|
|
33
42
|
(no force-pushes, absolute-path deletes, or `curl | sh` by an agent) applies as
|
|
34
|
-
a standing instruction here;
|
|
43
|
+
a standing instruction here; `$pincer-release` audits the git artifacts
|
|
35
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,14 +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
|
-
#
|
|
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.
|
|
8
10
|
# .github/prompts/pincer-*.prompt.md — VS Code Copilot prompt files
|
|
9
11
|
# (enable: "chat.promptFiles": true)
|
|
10
12
|
set -euo pipefail
|
|
11
13
|
cd "$(dirname "$0")/.."
|
|
12
14
|
|
|
13
|
-
mkdir -p .
|
|
15
|
+
mkdir -p .agents/skills .github/prompts
|
|
14
16
|
|
|
15
17
|
count=0
|
|
16
18
|
for src in .claude/commands/pincer-*.md; do
|
|
@@ -18,11 +20,18 @@ for src in .claude/commands/pincer-*.md; do
|
|
|
18
20
|
desc=$(sed -n 's/^description: *"\{0,1\}\([^"]*\)"\{0,1\}$/\1/p' "$src" | head -1)
|
|
19
21
|
body=$(awk 'flag; /^---$/ { if (++c == 2) flag = 1 }' "$src")
|
|
20
22
|
|
|
21
|
-
# 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"
|
|
22
28
|
{
|
|
29
|
+
printf -- '---\nname: %s\ndescription: "%s"\n---\n' "$name" "$desc"
|
|
23
30
|
printf '<!-- Generated from %s by scripts/sync-prompts.sh — edit the source, not this file -->\n\n' "$src"
|
|
24
|
-
printf '%s\n' "$body"
|
|
25
|
-
|
|
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"
|
|
26
35
|
|
|
27
36
|
# Copilot: prompt-file frontmatter; $ARGUMENTS becomes an input variable.
|
|
28
37
|
{
|
|
@@ -34,4 +43,4 @@ for src in .claude/commands/pincer-*.md; do
|
|
|
34
43
|
count=$((count + 1))
|
|
35
44
|
done
|
|
36
45
|
|
|
37
|
-
echo "Synced $count playbooks -> .
|
|
46
|
+
echo "Synced $count playbooks -> .agents/skills/ and .github/prompts/"
|