Skip to content

Commit 84ff690

Browse files
authored
fix(debate/consult): add External Tool Quick Reference, update provider model names (#232) (#242)
* fix(consult): update stale model names in consult skill (#232) - Claude: haiku/sonnet/opus -> claude-haiku-4-5/claude-sonnet-4-6/claude-opus-4-6 - Gemini: gemini-3-flash/gemini-3-pro -> gemini-3-flash-preview/gemini-3-pro-preview/gemini-3.1-pro-preview - Codex: gpt-5.x-codex-* -> o4-mini/o3 - Copilot: claude-sonnet-4-5 -> claude-sonnet-4-6, remove stale claude-sonnet-4 - OpenCode: update top picks to match current model names * fix(debate): add External Tool Quick Reference to all debate skill copies (#232) Replace the brief "Consult Skill Integration" section with a comprehensive "External Tool Quick Reference" that documents safe command patterns, effort-to-model mappings, and output parsing for all five providers. Applied to: - plugins/debate/skills/debate/SKILL.md (canonical) - adapters/opencode/skills/debate/SKILL.md - adapters/codex/skills/debate/SKILL.md * fix(debate): add quick reference pointers in debate orchestrator agents (#232) Add pointer lines after each Skill:consult invocation block directing the reader to the debate skill's External Tool Quick Reference section for command patterns, model mappings, and output parsing per provider. Applied to both canonical and opencode adapter orchestrator agents. * test(debate): add tests for External Tool Quick Reference section (#232) New describe block verifying all three debate skill copies contain: - External Tool Quick Reference section header - All five providers (claude, gemini, codex, opencode, copilot) - Effort-to-Model Mapping table - Output Parsing table - Canonical source note referencing the consult skill * fix(consult): sync model name updates to opencode adapter consult skill (#232) Apply the same model name updates from the canonical consult skill to the opencode adapter copy: - Claude: haiku/sonnet/opus -> claude-haiku-4-5/claude-sonnet-4-6/claude-opus-4-6 - Gemini: gemini-3-flash/gemini-3-pro -> gemini-3-flash-preview/gemini-3-pro-preview/gemini-3.1-pro-preview - Codex: gpt-5.x-codex-* -> o4-mini/o3 - Copilot: claude-sonnet-4-5 -> claude-sonnet-4-6 - OpenCode: update top picks to current model names * fix(debate): add External Tool Quick Reference to debate command (#232) Add the quick reference section to the canonical debate command file so that the Codex adapter (generated from command) and OpenCode command adapter both get the section via gen-adapters. * fix(#232): clarify quick reference note, add model-name and consult-adapter tests * docs: sync README and CHANGELOG for issue #232 model updates and quick reference * fix(#232): update command source for clarified planning-reference note, regenerate adapters * fix(#232): strengthen quick reference pointer to reinforce Skill:consult delegation
1 parent d8505f5 commit 84ff690

File tree

12 files changed

+300
-60
lines changed

12 files changed

+300
-60
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1717

1818
- **`/debate` command inline orchestration** — The `/debate` command now manages the full debate workflow directly (parse → resolve → execute → verdict), following the `/consult` pattern. The `debate-orchestrator` agent is now the programmatic entry point for other agents/workflows that need to spawn a debate via `Task()`. Fixes issue #231.
1919

20+
- **`/debate` External Tool Quick Reference** — Added a "External Tool Quick Reference" section to all copies of the debate skill (`plugins/debate/skills/debate/SKILL.md`, OpenCode and Codex adapters) with safe command patterns, effort-to-model mapping tables, and output parsing expressions. The section includes a canonical-source pointer to `plugins/consult/skills/consult/SKILL.md` so the debate orchestrator doesn't duplicate provider logic. Added pointer notes in `debate-orchestrator` agents. Fixes issue #232.
21+
22+
- **`/consult` model name updates** — Updated stale model names in the consult skill: Codex models are now `o4-mini` (low/medium) and `o3` (high/max); Gemini models include `gemini-3-flash-preview`, `gemini-3-pro-preview`, and `gemini-3.1-pro-preview`. Synced to OpenCode adapter consult skill. Fixes issue #232.
23+
2024
- **`/next-task` Phase 12 ship invocation** — Phase 12 now invokes `ship:ship` via `await Skill({ name: "ship:ship", args: ... })` instead of `Task({ subagent_type: "ship:ship", ... })`. `ship:ship` is a skill, not an agent; the previous `Task()` call silently failed, leaving the workflow stuck after delivery validation with no PR created. The Codex adapter is updated in parity and regression tests are added. Fixes issue #230.
2125

2226
## [5.1.0] - 2026-02-18

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -650,10 +650,10 @@ agent-knowledge/
650650

651651
| Tool | Default Model (high) | Reasoning Control |
652652
|------|---------------------|-------------------|
653-
| Claude | opus | max-turns |
654-
| Gemini | gemini-3-pro | built-in |
655-
| Codex | gpt-5.3-codex | model_reasoning_effort |
656-
| OpenCode | github-copilot/claude-opus-4-6 | --variant |
653+
| Claude | claude-opus-4-6 | max-turns |
654+
| Gemini | gemini-3-pro-preview | built-in |
655+
| Codex | o3 | model_reasoning_effort |
656+
| OpenCode | (user-selected or default) | --variant |
657657
| Copilot | (default) | none |
658658

659659
**Usage:**

__tests__/debate-command.test.js

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@ const codexSkillPath = path.join(adaptersDir, 'codex', 'skills', 'debate', 'SKIL
2323
const openCodeCommandPath = path.join(adaptersDir, 'opencode', 'commands', 'debate.md');
2424
const openCodeSkillPath = path.join(adaptersDir, 'opencode', 'skills', 'debate', 'SKILL.md');
2525
const openCodeAgentPath = path.join(adaptersDir, 'opencode', 'agents', 'debate-orchestrator.md');
26+
const openCodeConsultSkillPath = path.join(adaptersDir, 'opencode', 'skills', 'consult', 'SKILL.md');
27+
const consultSkillPath = path.join(__dirname, '..', 'plugins', 'consult', 'skills', 'consult', 'SKILL.md');
2628

2729
// Load all files once
2830
let commandContent, skillContent, agentContent, pluginJson;
2931
let codexSkillContent, openCodeCommandContent, openCodeSkillContent, openCodeAgentContent;
32+
let openCodeConsultSkillContent, consultSkillContent;
3033

3134
beforeAll(() => {
3235
commandContent = fs.readFileSync(commandPath, 'utf8');
@@ -37,6 +40,8 @@ beforeAll(() => {
3740
openCodeCommandContent = fs.readFileSync(openCodeCommandPath, 'utf8');
3841
openCodeSkillContent = fs.readFileSync(openCodeSkillPath, 'utf8');
3942
openCodeAgentContent = fs.readFileSync(openCodeAgentPath, 'utf8');
43+
openCodeConsultSkillContent = fs.readFileSync(openCodeConsultSkillPath, 'utf8');
44+
consultSkillContent = fs.readFileSync(consultSkillPath, 'utf8');
4045
});
4146

4247
// ─── Helpers ────────────────────────────────────────────────────────
@@ -650,3 +655,83 @@ describe('adapter consistency', () => {
650655
expect(openCodeAgentContent).toMatch(/240.second timeout|Track invocation start time/i);
651656
});
652657
});
658+
659+
// ─── 14. External Tool Quick Reference (#232) ────────────────────
660+
describe('external tool quick reference (#232)', () => {
661+
// Use pre-loaded content (no redundant file reads)
662+
const allDebateSkillContents = () => [skillContent, openCodeSkillContent, codexSkillContent];
663+
664+
test('all three debate skill copies contain the External Tool Quick Reference section', () => {
665+
for (const content of allDebateSkillContents()) {
666+
expect(content).toContain('## External Tool Quick Reference');
667+
}
668+
});
669+
670+
test('all five providers mentioned in quick reference of each skill copy', () => {
671+
for (const content of allDebateSkillContents()) {
672+
expect(content).toMatch(/External Tool Quick Reference[\s\S]*claude/i);
673+
expect(content).toMatch(/External Tool Quick Reference[\s\S]*gemini/i);
674+
expect(content).toMatch(/External Tool Quick Reference[\s\S]*codex/i);
675+
expect(content).toMatch(/External Tool Quick Reference[\s\S]*opencode/i);
676+
expect(content).toMatch(/External Tool Quick Reference[\s\S]*copilot/i);
677+
}
678+
});
679+
680+
test('effort-to-model mapping table present in each skill copy', () => {
681+
for (const content of allDebateSkillContents()) {
682+
expect(content).toContain('Effort-to-Model Mapping');
683+
}
684+
});
685+
686+
test('output parsing table present in each skill copy', () => {
687+
for (const content of allDebateSkillContents()) {
688+
expect(content).toContain('Output Parsing');
689+
}
690+
});
691+
692+
test('canonical source note present in each skill copy', () => {
693+
for (const content of allDebateSkillContents()) {
694+
expect(content).toMatch(/canonical source.*consult/i);
695+
}
696+
});
697+
698+
test('current model names present in effort-to-model mapping of each skill copy', () => {
699+
const expectedModels = ['claude-haiku-4-5', 'claude-sonnet-4-6', 'claude-opus-4-6', 'o4-mini', 'o3', 'gemini-2.5-flash'];
700+
for (const content of allDebateSkillContents()) {
701+
for (const model of expectedModels) {
702+
expect(content).toMatch(new RegExp(`Effort-to-Model Mapping[\\s\\S]*${model}`));
703+
}
704+
}
705+
});
706+
});
707+
708+
// ─── 15. Consult skill adapter sync (#232) ───────────────────────
709+
describe('consult skill opencode adapter sync (#232)', () => {
710+
test('opencode consult adapter contains all 5 providers', () => {
711+
for (const provider of ['claude', 'gemini', 'codex', 'opencode', 'copilot']) {
712+
expect(openCodeConsultSkillContent.toLowerCase()).toContain(provider);
713+
}
714+
});
715+
716+
test('opencode consult adapter has updated claude model names', () => {
717+
expect(openCodeConsultSkillContent).toContain('claude-haiku-4-5');
718+
expect(openCodeConsultSkillContent).toContain('claude-sonnet-4-6');
719+
expect(openCodeConsultSkillContent).toContain('claude-opus-4-6');
720+
});
721+
722+
test('opencode consult adapter has updated codex model names (no speculative gpt-5.x)', () => {
723+
expect(openCodeConsultSkillContent).not.toContain('gpt-5.3-codex');
724+
expect(openCodeConsultSkillContent).not.toContain('gpt-5.2-codex');
725+
expect(openCodeConsultSkillContent).toContain('o4-mini');
726+
expect(openCodeConsultSkillContent).toContain('o3');
727+
});
728+
729+
test('canonical consult skill has updated model names', () => {
730+
expect(consultSkillContent).toContain('claude-haiku-4-5');
731+
expect(consultSkillContent).toContain('claude-sonnet-4-6');
732+
expect(consultSkillContent).toContain('claude-opus-4-6');
733+
expect(consultSkillContent).not.toContain('gpt-5.3-codex');
734+
expect(consultSkillContent).toContain('o4-mini');
735+
expect(consultSkillContent).toContain('o3');
736+
});
737+
});

adapters/codex/skills/debate/SKILL.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,39 @@ The consult skill's table covers: Anthropic keys (`sk-*`, `sk-ant-*`), OpenAI pr
271271

272272
Read the consult skill file to get the exact patterns and replacements.
273273

274+
## External Tool Quick Reference
275+
276+
> Canonical source: `plugins/consult/skills/consult/SKILL.md`. This table is for **planning reference only** -- always invoke via `Skill: consult`, which handles safe question passing, temp file creation, and cleanup. Do NOT execute these commands directly.
277+
278+
### Safe Command Patterns
279+
280+
| Provider | Safe Command Pattern |
281+
|----------|---------------------|
282+
| Claude | `claude -p - --output-format json --model "MODEL" --max-turns TURNS --allowedTools "Read,Glob,Grep" < "{AI_STATE_DIR}/consult/question.tmp"` |
283+
| Gemini | `gemini -p - --output-format json -m "MODEL" < "{AI_STATE_DIR}/consult/question.tmp"` |
284+
| Codex | `codex exec "$(cat "{AI_STATE_DIR}/consult/question.tmp")" --json -m "MODEL" -c model_reasoning_effort="LEVEL"` |
285+
| OpenCode | `opencode run - --format json --model "MODEL" --variant "VARIANT" < "{AI_STATE_DIR}/consult/question.tmp"` |
286+
| Copilot | `copilot -p - < "{AI_STATE_DIR}/consult/question.tmp"` |
287+
288+
### Effort-to-Model Mapping
289+
290+
| Effort | Claude | Gemini | Codex | OpenCode | Copilot |
291+
|--------|--------|--------|-------|----------|---------|
292+
| low | claude-haiku-4-5 (1 turn) | gemini-2.5-flash | o4-mini (low) | default (low) | no control |
293+
| medium | claude-sonnet-4-6 (3 turns) | gemini-3-flash-preview | o4-mini (medium) | default (medium) | no control |
294+
| high | claude-opus-4-6 (5 turns) | gemini-3-pro-preview | o3 (high) | default (high) | no control |
295+
| max | claude-opus-4-6 (10 turns) | gemini-3.1-pro-preview | o3 (high) | default + --thinking | no control |
296+
297+
### Output Parsing
298+
299+
| Provider | Parse Expression |
300+
|----------|-----------------|
301+
| Claude | `JSON.parse(stdout).result` |
302+
| Gemini | `JSON.parse(stdout).response` |
303+
| Codex | `JSON.parse(stdout).message` or raw text |
304+
| OpenCode | Parse JSON events, extract final text block |
305+
| Copilot | Raw stdout text |
306+
274307
## Error Handling
275308

276309
| Error | Output |

adapters/opencode/agents/debate-orchestrator.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ Args: "{proposer_prompt}" --tool=[proposer] --effort=[effort] [--model=[model_pr
8080

8181
Track invocation start time. If the invocation takes longer than 240 seconds to complete, treat it as a tool failure for this round (external tools can hang indefinitely).
8282

83+
> For planning reference on command patterns, model mappings, and output parsing per provider, see the debate skill's **External Tool Quick Reference** section. Always invoke via `Skill: consult` — never construct commands directly.
84+
8385
Parse the JSON result. Extract the response text. Record: round, role="proposer", tool, response, duration_ms.
8486

8587
Display to user immediately:
@@ -109,6 +111,8 @@ Args: "{challenger_prompt}" --tool=[challenger] --effort=[effort] [--model=[mode
109111

110112
Track invocation start time. If the invocation takes longer than 240 seconds to complete, treat it as a tool failure for this round (external tools can hang indefinitely).
111113

114+
> For planning reference on command patterns, model mappings, and output parsing per provider, see the debate skill's **External Tool Quick Reference** section. Always invoke via `Skill: consult` — never construct commands directly.
115+
112116
Parse the JSON result. Record: round, role="challenger", tool, response, duration_ms.
113117

114118
Display to user immediately:

adapters/opencode/commands/debate.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,39 @@ The consult skill's table covers: Anthropic keys (`sk-*`, `sk-ant-*`), OpenAI pr
275275

276276
Read the consult skill file to get the exact patterns and replacements.
277277

278+
## External Tool Quick Reference
279+
280+
> Canonical source: `plugins/consult/skills/consult/SKILL.md`. This table is for **planning reference only** -- always invoke via `Skill: consult`, which handles safe question passing, temp file creation, and cleanup. Do NOT execute these commands directly.
281+
282+
### Safe Command Patterns
283+
284+
| Provider | Safe Command Pattern |
285+
|----------|---------------------|
286+
| Claude | `claude -p - --output-format json --model "MODEL" --max-turns TURNS --allowedTools "Read,Glob,Grep" < "{AI_STATE_DIR}/consult/question.tmp"` |
287+
| Gemini | `gemini -p - --output-format json -m "MODEL" < "{AI_STATE_DIR}/consult/question.tmp"` |
288+
| Codex | `codex exec "$(cat "{AI_STATE_DIR}/consult/question.tmp")" --json -m "MODEL" -c model_reasoning_effort="LEVEL"` |
289+
| OpenCode | `opencode run - --format json --model "MODEL" --variant "VARIANT" < "{AI_STATE_DIR}/consult/question.tmp"` |
290+
| Copilot | `copilot -p - < "{AI_STATE_DIR}/consult/question.tmp"` |
291+
292+
### Effort-to-Model Mapping
293+
294+
| Effort | Claude | Gemini | Codex | OpenCode | Copilot |
295+
|--------|--------|--------|-------|----------|---------|
296+
| low | claude-haiku-4-5 (1 turn) | gemini-2.5-flash | o4-mini (low) | default (low) | no control |
297+
| medium | claude-sonnet-4-6 (3 turns) | gemini-3-flash-preview | o4-mini (medium) | default (medium) | no control |
298+
| high | claude-opus-4-6 (5 turns) | gemini-3-pro-preview | o3 (high) | default (high) | no control |
299+
| max | claude-opus-4-6 (10 turns) | gemini-3.1-pro-preview | o3 (high) | default + --thinking | no control |
300+
301+
### Output Parsing
302+
303+
| Provider | Parse Expression |
304+
|----------|-----------------|
305+
| Claude | `JSON.parse(stdout).result` |
306+
| Gemini | `JSON.parse(stdout).response` |
307+
| Codex | `JSON.parse(stdout).message` or raw text |
308+
| OpenCode | Parse JSON events, extract final text block |
309+
| Copilot | Raw stdout text |
310+
278311
## Error Handling
279312

280313
| Error | Output |

adapters/opencode/skills/consult/SKILL.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ Command: claude -p "QUESTION" --output-format json --model "MODEL" --max-turns T
4646
Session resume: --resume "SESSION_ID"
4747
```
4848

49-
Models: haiku, sonnet, opus
49+
Models: claude-haiku-4-5, claude-sonnet-4-6, claude-opus-4-6
5050

5151
| Effort | Model | Max Turns |
5252
|--------|-------|-----------|
53-
| low | haiku | 1 |
54-
| medium | sonnet | 3 |
55-
| high | opus | 5 |
56-
| max | opus | 10 |
53+
| low | claude-haiku-4-5 | 1 |
54+
| medium | claude-sonnet-4-6 | 3 |
55+
| high | claude-opus-4-6 | 5 |
56+
| max | claude-opus-4-6 | 10 |
5757

5858
**Parse output**: `JSON.parse(stdout).result`
5959
**Session ID**: `JSON.parse(stdout).session_id`
@@ -66,14 +66,14 @@ Command: gemini -p "QUESTION" --output-format json -m "MODEL"
6666
Session resume: --resume "SESSION_ID"
6767
```
6868

69-
Models: gemini-2.5-flash, gemini-2.5-pro, gemini-3-flash, gemini-3-pro
69+
Models: gemini-2.5-flash, gemini-2.5-pro, gemini-3-flash-preview, gemini-3-pro-preview, gemini-3.1-pro-preview
7070

7171
| Effort | Model |
7272
|--------|-------|
7373
| low | gemini-2.5-flash |
74-
| medium | gemini-3-flash |
75-
| high | gemini-3-pro |
76-
| max | gemini-3-pro |
74+
| medium | gemini-3-flash-preview |
75+
| high | gemini-3-pro-preview |
76+
| max | gemini-3.1-pro-preview |
7777

7878
**Parse output**: `JSON.parse(stdout).response`
7979
**Session ID**: `JSON.parse(stdout).session_id`
@@ -89,14 +89,14 @@ Session resume (latest): codex exec resume --last "QUESTION" --json
8989

9090
Note: `codex exec` is the non-interactive/headless mode. There is no `-q` flag. The TUI mode is `codex` (no subcommand).
9191

92-
Models: gpt-5.3-codex-spark, gpt-5-codex, gpt-5.1-codex, gpt-5.2-codex, gpt-5.3-codex, gpt-5.1-codex-max
92+
Models: o4-mini, o3
9393

9494
| Effort | Model | Reasoning |
9595
|--------|-------|-----------|
96-
| low | gpt-5.3-codex-spark | low |
97-
| medium | gpt-5.2-codex | medium |
98-
| high | gpt-5.3-codex | high |
99-
| max | gpt-5.3-codex | xhigh |
96+
| low | o4-mini | low |
97+
| medium | o4-mini | medium |
98+
| high | o3 | high |
99+
| max | o3 | high |
100100

101101
**Parse output**: `JSON.parse(stdout).message` or raw text
102102
**Session ID**: Codex prints a resume hint at session end (e.g., `codex resume SESSION_ID`). Extract the session ID from stdout or from `JSON.parse(stdout).session_id` if available.
@@ -110,7 +110,7 @@ Session resume: opencode run "QUESTION" --format json --model "MODEL" --variant
110110
With thinking: add --thinking flag
111111
```
112112

113-
Models: 75+ via providers (format: provider/model). Top picks: claude-sonnet-4-5, claude-opus-4-5, gpt-5.2, gpt-5.1-codex, gemini-3-pro, minimax-m2.1
113+
Models: 75+ via providers (format: provider/model). Top picks: claude-sonnet-4-6, claude-opus-4-6, gpt-5.2, o3, gemini-3-pro-preview, minimax-m2.1
114114

115115
| Effort | Model | Variant |
116116
|--------|-------|---------|
@@ -129,7 +129,7 @@ Models: 75+ via providers (format: provider/model). Top picks: claude-sonnet-4-5
129129
Command: copilot -p "QUESTION"
130130
```
131131

132-
Models: claude-sonnet-4-5 (default), claude-opus-4-6, claude-haiku-4-5, claude-sonnet-4, gpt-5
132+
Models: claude-sonnet-4-6 (default), claude-opus-4-6, claude-haiku-4-5, gpt-5
133133

134134
| Effort | Notes |
135135
|--------|-------|
@@ -277,7 +277,7 @@ Return a plain JSON object to stdout (no markers or wrappers):
277277
```json
278278
{
279279
"tool": "gemini",
280-
"model": "gemini-3-pro",
280+
"model": "gemini-3-pro-preview",
281281
"effort": "high",
282282
"duration_ms": 12300,
283283
"response": "The AI's response text here...",
@@ -315,4 +315,4 @@ This skill is invoked by:
315315
- `consult-agent` for `/consult` command
316316
- Direct invocation: `Skill('consult', '"question" --tool=gemini --effort=high')`
317317

318-
Example: `Skill('consult', '"Is this approach correct?" --tool=gemini --effort=high --model=gemini-3-pro')`
318+
Example: `Skill('consult', '"Is this approach correct?" --tool=gemini --effort=high --model=gemini-3-pro-preview')`

adapters/opencode/skills/debate/SKILL.md

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -259,13 +259,35 @@ Platform state directory:
259259
| Tool invocation timeout (>240s) | Round 1 proposer: abort. Round 1 challenger: proceed with uncontested. Round 2+: synthesize from completed rounds with timeout note. |
260260
| All rounds timeout | "[ERROR] Debate failed: all tool invocations timed out." |
261261

262-
## Consult Skill Integration
263-
264-
Each tool invocation uses the existing `consult` skill from the consult plugin. The orchestrator invokes it as:
265-
266-
```
267-
Skill: consult
268-
Args: "{debate prompt with context}" --tool={tool} --effort={effort} --model={model}
269-
```
270-
271-
The consult skill handles: provider command building, safe question passing (temp file), output parsing, and secret redaction. The debate skill does NOT duplicate this logic.
262+
## External Tool Quick Reference
263+
264+
> Canonical source: consult skill (`consult/SKILL.md`). This table is for **planning reference only** -- always invoke via `Skill: consult`, which handles safe question passing, temp file creation, and cleanup. Do NOT execute these commands directly.
265+
266+
### Safe Command Patterns
267+
268+
| Provider | Safe Command Pattern |
269+
|----------|---------------------|
270+
| Claude | `claude -p - --output-format json --model "MODEL" --max-turns TURNS --allowedTools "Read,Glob,Grep" < "{AI_STATE_DIR}/consult/question.tmp"` |
271+
| Gemini | `gemini -p - --output-format json -m "MODEL" < "{AI_STATE_DIR}/consult/question.tmp"` |
272+
| Codex | `codex exec "$(cat "{AI_STATE_DIR}/consult/question.tmp")" --json -m "MODEL" -c model_reasoning_effort="LEVEL"` |
273+
| OpenCode | `opencode run - --format json --model "MODEL" --variant "VARIANT" < "{AI_STATE_DIR}/consult/question.tmp"` |
274+
| Copilot | `copilot -p - < "{AI_STATE_DIR}/consult/question.tmp"` |
275+
276+
### Effort-to-Model Mapping
277+
278+
| Effort | Claude | Gemini | Codex | OpenCode | Copilot |
279+
|--------|--------|--------|-------|----------|---------|
280+
| low | claude-haiku-4-5 (1 turn) | gemini-2.5-flash | o4-mini (low) | default (low) | no control |
281+
| medium | claude-sonnet-4-6 (3 turns) | gemini-3-flash-preview | o4-mini (medium) | default (medium) | no control |
282+
| high | claude-opus-4-6 (5 turns) | gemini-3-pro-preview | o3 (high) | default (high) | no control |
283+
| max | claude-opus-4-6 (10 turns) | gemini-3.1-pro-preview | o3 (high) | default + --thinking | no control |
284+
285+
### Output Parsing
286+
287+
| Provider | Parse Expression |
288+
|----------|-----------------|
289+
| Claude | `JSON.parse(stdout).result` |
290+
| Gemini | `JSON.parse(stdout).response` |
291+
| Codex | `JSON.parse(stdout).message` or raw text |
292+
| OpenCode | Parse JSON events, extract final text block |
293+
| Copilot | Raw stdout text |

0 commit comments

Comments
 (0)