$npx -y skills add scdenney/open-science-skills --skill model-committeeRun a deliberative two-model committee between GPT-5.6 "Sol" and Claude Opus 4.8. Use when the user needs one consequential decision from multiple defensible options and wants the two model families to propose independently, inspect each other's reasoning, revise, cross-rank, and
| 1 | # Model Committee |
| 2 | |
| 3 | Run GPT-5.6 "Sol" and Claude Opus 4.8 as a deliberating committee. Preserve a clear distinction from `$model-council-voting`: a council measures independent disagreement; this committee deliberately exposes each member to the other's argument and produces one decision. |
| 4 | |
| 5 | Read [`references/protocol.md`](references/protocol.md) completely before running a committee. |
| 6 | |
| 7 | **Chair variant.** This is the **Opus-chaired** member of a three-variant family; all three deliberate a GPT-5.6 tier + Opus 4.8 and differ in which model chairs the synthesis (and, in `model-committee-sol`, in which 5.6 tier deliberates — see that skill's pins note). The chair is not neutral machinery — its validation and compatible-component synthesis carry that model's judgment (the score aggregation and tie rule are mechanical, per the protocol). Siblings: [`model-committee-sol`](../model-committee-sol/SKILL.md) (GPT-5.6 "Sol" chairs) and [`model-committee-fable`](../model-committee-fable/SKILL.md) (Fable 5 chairs). |
| 8 | |
| 9 | ## Gate the workflow |
| 10 | |
| 11 | Run only when the user explicitly invokes `$model-committee` or requests GPT-5.6 Sol and Opus 4.8 to deliberate. The workflow makes external model calls and uses more tokens than a single answer. |
| 12 | |
| 13 | Apply the use-case gate in the protocol first. If the task does not qualify, recommend the correct alternative and do not call either model. |
| 14 | |
| 15 | Before the first call: |
| 16 | |
| 17 | 1. Confirm the task and the decision that must be returned. |
| 18 | 2. Confirm any sensitive material may be sent to both providers. |
| 19 | 3. Explain that both CLIs may consume separate plan credits or API spend; obtain confirmation unless already explicit. |
| 20 | 4. Precommit the evaluation criteria, weights, and tie rule. |
| 21 | |
| 22 | ## Sandbox constraint — read before the first call |
| 23 | |
| 24 | `scripts/codex-member.sh` shells out to a nested `codex exec` process. Confirmed by direct reproduction (July 2026, both hosts this repo runs on): a `codex exec` process running under **any** sandbox mode cannot spawn a working nested `codex exec` child — it fails immediately with `Error: failed to initialize in-process app-server client: Operation not permitted` (macOS) or `Read-only file system` (Linux). This is structural (the OS sandbox applies transitively to the whole process tree) and is not fixed by bypass flags on the nested call. If you are running non-interactively (`approval: never` in your own session banner), this call cannot succeed — report the failure rather than fabricating the GPT member's response yourself. If interactive, request escalation (`sandbox_permissions: require_escalated`) for that one call. |
| 25 | |
| 26 | `scripts/claude-member.sh` shells out to `claude -p` instead — a different binary, so it does not hit the identical `codex exec` IPC failure, but under `workspace-write` sandbox its outbound network call was observed to hang rather than complete (network access is restricted by the sandbox) — less rigorously isolated than the `codex-member.sh` finding, but treat an unresponsive `claude-member.sh` call the same way: do not assume it will resolve on its own, and consider escalation or an unsandboxed session if it hangs. |
| 27 | |
| 28 | ## Preflight both members |
| 29 | |
| 30 | Resolve `SKILL_DIR` as the directory containing this `SKILL.md`, then run: |
| 31 | |
| 32 | ```bash |
| 33 | "$SKILL_DIR/scripts/codex-member.sh" --check |
| 34 | "$SKILL_DIR/scripts/claude-member.sh" --check |
| 35 | ``` |
| 36 | |
| 37 | Default pins: |
| 38 | |
| 39 | - GPT member: `gpt-5.6-sol` (reasoning effort: `xhigh`) |
| 40 | - Claude member: `claude-opus-4-8` (reasoning effort: `max`) |
| 41 | |
| 42 | These are deliberately exact pins, not moving aliases. Do not silently substitute another model. If a pin is unavailable, report it and ask whether to stop or use a named replacement. |
| 43 | |
| 44 | ## Run the committee |
| 45 | |
| 46 | Create a temporary working directory such as `.committee-tmp/<slug>/`. Follow the protocol's prompt contracts and produce these artifacts: |
| 47 | |
| 48 | ```text |
| 49 | brief.md |
| 50 | round-1-gpt.prompt.md round-1-gpt.md |
| 51 | round-1-opus.prompt.md round-1-opus.md |
| 52 | round-2-gpt.prompt.md round-2-gpt.md |
| 53 | round-2-opus.prompt.md round-2-opus.md |
| 54 | round-3-gpt.prompt.md round-3-gpt.md |
| 55 | round-3-opus.prompt.md round-3-opus.md |
| 56 | decision.md |
| 57 | ``` |
| 58 | |
| 59 | Invoke each member through the bundled read-only driver: |
| 60 | |
| 61 | ```bash |
| 62 | "$SKILL_DIR/scripts/codex-member.sh" \ |
| 63 | --prompt-file <prompt.md> --out <output.md> --effort xhigh -C <working-directory> |
| 64 | |
| 65 | "$SKILL_DIR/scripts/claude-member.sh" \ |