$npx -y skills add scdenney/open-science-skills --skill model-committee-fableRun a deliberative two-model committee between GPT-5.6 "Sol" and Claude Opus 4.8, chaired by Fable 5. Same two deliberating members as model-committee; the difference is the chair — Fable 5 aggregates the scores, applies the tie rule, and synthesizes the decision, so a lightweigh
| 1 | # Model Committee (Fable-chaired) |
| 2 | |
| 3 | Run GPT-5.6 "Sol" and Claude Opus 4.8 as a deliberating committee, with **Fable 5 as the chair**. 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 **Fable-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). Fable's value here is a **lightweight, fast, procedurally disciplined** chair: the heavy reasoning is already spent inside the two members' three rounds, and the chair's remaining job is mostly mechanical, so a lean chair is a deliberate cost choice — and, being neither member, it cannot vote its own prior a third time. Because Fable is a Claude-family model, running under Codex delegates the chair step to it via the bundled `claude-member.sh`. Siblings: [`model-committee`](../model-committee/SKILL.md) (Opus 4.8 chairs) and [`model-committee-sol`](../model-committee-sol/SKILL.md) (GPT-5.6 "Sol" chairs). |
| 8 | |
| 9 | ## Gate the workflow |
| 10 | |
| 11 | Run only when the user explicitly invokes `$model-committee-fable` or requests a Fable-chaired GPT-5.6 Sol / Opus 4.8 deliberation. 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 any 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 (used for both the Opus member and the Fable chair here) — 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 members and chair |
| 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 | - Chair: `claude-fable-5` (Fable 5), reached through `claude-member.sh` |
| 42 | |
| 43 | 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. |
| 44 | |
| 45 | ## Run the committee |
| 46 | |
| 47 | Create a temporary working directory such as `.committee-tmp/<slug> |