Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ summary: Timeline of guardrail helper changes mirrored from Sweetistics and rela

# Changelog

## 2026-09-23: Opus design and review roles
- Use Opus 5.5 for Interrogate at xhigh and optional Claude Autoreview at high; add it to Arena’s cross-judge pool at high, with Claude CLI routing and a 2.1.280 minimum-version check.
- Replace Architect’s Astra low candidate with Opus 5.5 high through `claude -p`; retain GPT-6 Sol high, Fable 5.1 high, and the three-candidate requirement.

## 2026-09-22: GPT-6 Sol and Luna role upgrades
- Require three distinct Architect designs, one per configured runner, before synthesis; verified Sol high, Astra low, and Fable 5.1 high through a complete design-only dry run.
- Set Arena runners to Astra medium, GPT-6 Sol high, GPT-5.6 Sol high, Opus 5.5 high, and Fable 5.1 high; route both Claude candidates through `claude -p` and require Claude Code 2.1.280+ for Opus.
Expand Down
2 changes: 1 addition & 1 deletion skills/architect/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Skip Phase A only when the work is genuinely greenfield with no surrounding syst

Run the **arena** skill with the design-sketch task and the Phase A grounding artifacts. Pass `references/runner-prompt.md` as each runner's prompt. Each candidate produces a design package shaped per `references/rationale-template.md`.

Use `architect runners` from `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present. Otherwise default to one each on `gpt-6-sol` at `high` reasoning, `gpt-6-astra` at `low` reasoning, `claude-fable-5-1` at `high` reasoning. Pass this panel to Arena as the explicit runner list.
Use `architect runners` from `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present. Otherwise default to one each on `gpt-6-sol` at `high` reasoning, `claude-opus-5-5` at `high` reasoning, `claude-fable-5-1` at `high` reasoning. Pass this panel to Arena as the explicit runner list.

Design it three times. Require three structurally distinct candidates before synthesis, one from each configured Architect runner, even when the first looks sufficient. This is the **exhaust-the-design-space** principle skill made concrete. Whole-shape alternatives, not point fixes inside one shape.

Expand Down
2 changes: 1 addition & 1 deletion skills/arena/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ If a candidate fails to produce output, proceed with N-1 and note the dropout in

## Phase C: Cross-judge

After all Phase B candidates complete, choose one model from the `arena cross-judge pool` in `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present. Otherwise use `gpt-6-astra` at `medium` reasoning, `gpt-6-sol` at `high` reasoning. Prefer a different model family from the parent's. Spawn one judge agent on that model and instruct it not to edit files or change repository state. It sees the rubric and the candidates by path label, scores each criterion, and recommends a base with rationale. It runs in parallel with the parent's reading in Phase D, not with the candidates themselves. Don't spawn the judge while candidates are still writing.
After all Phase B candidates complete, choose one model from the `arena cross-judge pool` in `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present. Otherwise use `gpt-6-astra` at `medium` reasoning, `gpt-6-sol` at `high` reasoning, `claude-opus-5-5` at `high` reasoning. Prefer a different model family from the parent's. Launch one judge on that model using the Codex or Claude transport from Phase B; instruct it not to edit files or change repository state. It sees the rubric and the candidates by path label, scores each criterion, and recommends a base with rationale. It runs in parallel with the parent's reading in Phase D, not with the candidates themselves. Don't spawn the judge while candidates are still writing.

## Phase D: Pick a base

Expand Down
16 changes: 8 additions & 8 deletions skills/autoreview/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: "Pre-commit/ship code review: Codex default; optional Claude or Pi.

Run the bundled structured review helper as a closeout check. This is code review, not Guardian `auto_review` approval routing.

Codex review is the default when no engine is set. It uses `gpt-6-astra` with `medium` reasoning. Claude is an optional second reviewer and uses `claude-fable-5-1` with `max` reasoning by default. Use standard mode for Codex reviews (`--codex-speed default`); never use fast mode.
Codex review is the default when no engine is set. It uses `gpt-6-astra` with `medium` reasoning. Opus 5.5 requires Claude Code 2.1.280+. Claude is an optional second reviewer and uses `claude-opus-5-5` with `high` reasoning by default. Use standard mode for Codex reviews (`--codex-speed default`); never use fast mode.

For user-visible behavior, pair autoreview with `behavior-validator`. Autoreview is source-aware and judges the change bundle; behavior validation is source-blind and judges the running product or tool against a behavior contract. A clean autoreview is not proof that a UI, CLI, API, or generated artifact works from the user's perspective.

Expand Down Expand Up @@ -268,13 +268,13 @@ Run multiple reviewers against one frozen bundle:
Set reviewer models and thinking/effort explicitly:

```bash
"$AUTOREVIEW" --reviewers codex,claude --model codex=gpt-6-astra --thinking codex=medium --model claude=claude-fable-5-1 --thinking claude=max
"$AUTOREVIEW" --reviewers codex,claude --model codex=gpt-6-astra --thinking codex=medium --model claude=claude-opus-5-5 --thinking claude=high
```

Inline syntax is also supported for simple model IDs:

```bash
"$AUTOREVIEW" --reviewers codex:gpt-6-astra:medium,claude:claude-fable-5-1:max
"$AUTOREVIEW" --reviewers codex:gpt-6-astra:medium,claude:claude-opus-5-5:high
```

For models with slashes or extra colons, prefer keyed form:
Expand All @@ -295,14 +295,14 @@ Recommended model defaults:
| Engine | Default model | Source note |
| ------------------- | -------------------------------------------------- | ----------------------------------------------------- |
| **codex** (default) | `gpt-6-astra` | Primary review model |
| **claude** | `claude-fable-5-1` | Optional independent second reviewer |
| **claude** | `claude-opus-5-5` | Optional independent second reviewer |

CLI flags and environment variables override these defaults. Pi does not get a built-in model default because its provider catalog may vary by installation. Droid, Copilot, Cursor, and OpenCode are currently refused.

| Engine | Model flag | Example model IDs | Thinking flag | Accepted levels |
| ------------------- | -------------------------- | ---------------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------- |
| **codex** (default) | `codex --model X exec ...` | `gpt-6-astra` | `-c model_reasoning_effort=Y` | `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, `max` |
| **claude** | `claude --model X` | `claude-fable-5-1`, `claude-opus-4-8`, `claude-sonnet-4-6`, `claude-haiku-4-5` | `--effort Y` | `low`, `medium`, `high`, `xhigh`, `max` |
| **claude** | `claude --model X` | `claude-opus-5-5`, `claude-fable-5-1`, `claude-opus-4-8`, `claude-sonnet-4-6`, `claude-haiku-4-5` | `--effort Y` | `low`, `medium`, `high`, `xhigh`, `max` |
| **droid** | currently refused | Factory model IDs | `-r, --reasoning-effort Y` | `off`, `none`, `low`, `medium`, `high`, `xhigh`, `max` |
| **copilot** | currently refused | Copilot model aliases | not supported | n/a |
| **pi** | `pi --model X` | `anthropic/claude-sonnet-4`, `openai/gpt-4o` | `--thinking Y` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh` |
Expand All @@ -326,8 +326,8 @@ Examples matching current `main` behavior:
"$AUTOREVIEW" --engine codex --codex-config 'service_tier="default"'

# Claude Code aliases or full model names, with optional availability fallback
"$AUTOREVIEW" --engine claude --model claude-fable-5-1 --thinking max
"$AUTOREVIEW" --engine claude --model claude-fable-5-1 --fallback-model claude-opus-4-8,claude-sonnet-4-6
"$AUTOREVIEW" --engine claude --model claude-opus-5-5 --thinking high
"$AUTOREVIEW" --engine claude --model claude-opus-5-5 --fallback-model claude-opus-4-8,claude-sonnet-4-6

# Pi with explicit model and thinking level
"$AUTOREVIEW" --engine pi --model anthropic/claude-sonnet-4 --thinking high --pi-bin pi
Expand Down Expand Up @@ -423,7 +423,7 @@ The helper:
- supports `--dry-run`, `--parallel-tests`, `--parallel-tests-shell`, `--prompt`, repo-relative `--prompt-file`, repo-relative `--dataset`, `--no-tools`, `--no-web-search`, repeatable Codex-only safe model/response tuning with `--codex-config key=value`, Codex-only `--codex-speed fast|flex|default`, and commit refs
- supports `--stream-engine-output` or `AUTOREVIEW_STREAM_ENGINE_OUTPUT=1` for live engine text while preserving structured validation; Codex and Claude hide tool/file event details, emit compact activity summaries, and report usage at turn completion
- supports opt-in review panels with `--panel` / `--reviewers`, plus per-engine `--model`, `--thinking`, and Claude `--fallback-model`
- uses built-in defaults `codex=gpt-6-astra` with `medium` reasoning and optional second reviewer `claude=claude-fable-5-1` with `max` reasoning; honors `AUTOREVIEW_MODEL`, `AUTOREVIEW_THINKING`, `AUTOREVIEW_FALLBACK_MODEL`, and per-engine `AUTOREVIEW_<ENGINE>_MODEL` / `AUTOREVIEW_<ENGINE>_THINKING` environment overrides when CLI flags are omitted
- uses built-in defaults `codex=gpt-6-astra` with `medium` reasoning and optional second reviewer `claude=claude-opus-5-5` with `high` reasoning; honors `AUTOREVIEW_MODEL`, `AUTOREVIEW_THINKING`, `AUTOREVIEW_FALLBACK_MODEL`, and per-engine `AUTOREVIEW_<ENGINE>_MODEL` / `AUTOREVIEW_<ENGINE>_THINKING` environment overrides when CLI flags are omitted
- gives Codex the bundle in an empty workspace with web search available; Claude receives the bundle plus WebSearch by default and optional domain-constrained WebFetch, and Pi receives the bundle with no tools
- runs Claude with `--safe-mode` (`v2.1.169+`), `--setting-sources user`, MCP and auto-memory disabled, no filesystem/shell tools, an empty external workspace, and `--fallback-model` when set
- refuses Droid, Copilot, Cursor, and OpenCode reviews until their CLIs expose the required project, filesystem, and network isolation
Expand Down
15 changes: 10 additions & 5 deletions skills/autoreview/scripts/autoreview
Original file line number Diff line number Diff line change
Expand Up @@ -782,11 +782,11 @@ TEST_ENV_ALLOWED_EXACT = {
TEST_ENV_ALLOWED_PREFIXES = ("AUTOREVIEW_FAKE_", "LC_")
DEFAULT_MODEL_BY_ENGINE = {
"codex": "gpt-6-astra",
"claude": "claude-fable-5-1",
"claude": "claude-opus-5-5",
}
DEFAULT_THINKING_BY_ENGINE = {
"codex": "medium",
"claude": "max",
"claude": "high",
}
THINKING_LEVELS_BY_ENGINE = {
"codex": {"none", "minimal", "low", "medium", "high", "xhigh", "max"},
Expand All @@ -799,6 +799,7 @@ THINKING_LEVELS_BY_ENGINE = {
}
CLAUDE_SAFE_MODE_MIN_VERSION = (2, 1, 169)
CLAUDE_FABLE_MIN_VERSION = (2, 1, 170)
CLAUDE_OPUS_55_MIN_VERSION = (2, 1, 280)
# Pi's reviewed-repo trust override first appears in the current
# @earendil-works/pi-coding-agent 0.79.0 CLI line. Older legacy binaries can
# ignore unknown flags, so the Pi engine must fail closed below this floor.
Expand Down Expand Up @@ -9052,8 +9053,12 @@ def ensure_claude_isolation_supported(args: argparse.Namespace, repo: Path) -> N
result = run([claude_bin, "--version"], temp_root, check=False, env=engine_env)
selected_models = [args.model, *(getattr(args, "fallback_model", "") or "").split(",")]
uses_fable = any(model in {"claude-fable-5", "claude-fable-5-1", "fable"} for model in selected_models)
uses_opus_55 = any(model in {"claude-opus-5-5", "opus"} for model in selected_models)
minimum_version = CLAUDE_FABLE_MIN_VERSION if uses_fable else CLAUDE_SAFE_MODE_MIN_VERSION
version_reason = "for Claude Fable" if uses_fable else "for --safe-mode"
if uses_opus_55:
minimum_version = CLAUDE_OPUS_55_MIN_VERSION
version_reason = "for Claude Opus 5.5"
if result.returncode != 0:
raise SystemExit(f"claude engine requires Claude Code >= {format_version(minimum_version)}; --version failed")
version = parse_cli_version(result.stdout or result.stderr)
Expand Down Expand Up @@ -11042,7 +11047,7 @@ def parse_args() -> argparse.Namespace:
parser.add_argument(
"--model",
action="append",
help="Model for all reviewers or engine=model. Repeatable. Defaults: codex=gpt-6-astra, claude=claude-fable-5-1.",
help="Model for all reviewers or engine=model. Repeatable. Defaults: codex=gpt-6-astra, claude=claude-opus-5-5.",
)
parser.add_argument("--thinking", action="append", help="Thinking/effort for all reviewers or engine=level. Repeatable. Codex: none, minimal, low, medium, high, xhigh, max. Claude: low, medium, high, xhigh, max. Droid: off, none, low, medium, high. Pi: off, minimal, low, medium, high, xhigh. OpenCode: minimal, low, medium, high, max. Cursor: none.")
parser.add_argument(
Expand Down Expand Up @@ -11497,9 +11502,9 @@ def self_test_config_defaults() -> None:
if max_effort.thinking != "max":
raise SystemExit("self-test config defaults failed: Codex max thinking should be accepted")
default_claude = reviewer_args(reviewer_test_args(engine="claude"))[0]
if default_claude.model != "claude-fable-5-1":
if default_claude.model != "claude-opus-5-5":
raise SystemExit(f"self-test config defaults failed: default claude model={default_claude.model!r}")
if default_claude.thinking != "max":
if default_claude.thinking != "high":
raise SystemExit(f"self-test config defaults failed: default claude thinking={default_claude.thinking!r}")
os.environ["AUTOREVIEW_MODEL"] = "env-global-model"
os.environ["AUTOREVIEW_CODEX_MODEL"] = "env-codex-model"
Expand Down
20 changes: 20 additions & 0 deletions skills/autoreview/tests/test_autoreview_hardening.py
Original file line number Diff line number Diff line change
Expand Up @@ -5291,6 +5291,26 @@ def test_claude_fable_alias_requires_fable_safe_mode_version(self) -> None:
):
self.helper["ensure_claude_isolation_supported"](args, repo)

def test_opus_55_requires_current_cli_for_primary_and_fallback(self) -> None:
for model, fallback in [("claude-opus-5-5", None), ("opus", None), ("fable", "claude-opus-5-5")]:
for version, rejected in [("2.1.279", True), ("2.1.280", False)]:
with self.subTest(model=model, fallback=fallback, version=version), tempfile.TemporaryDirectory() as tempdir:
args = argparse.Namespace(claude_bin="claude", model=model, fallback_model=fallback)
def fake_run(command, *_args, **_kwargs):
output = version if "--version" in command else "--safe-mode --setting-sources --strict-mcp-config --disallowedTools --tools"
return subprocess.CompletedProcess(command, 0, output, "")
with mock.patch.dict(self.helper["ensure_claude_isolation_supported"].__globals__, {
"resolve_command": lambda *_args: "/usr/bin/claude",
"safe_engine_env": lambda *_args, **_kwargs: {},
"safe_temp_root": lambda _repo: Path(tempdir),
"run": fake_run,
}):
if rejected:
with self.assertRaisesRegex(SystemExit, "2.1.280.*Opus 5.5"):
self.helper["ensure_claude_isolation_supported"](args, Path(tempdir))
else:
self.helper["ensure_claude_isolation_supported"](args, Path(tempdir))

def test_claude_runs_outside_repo_with_auto_memory_disabled(self) -> None:
args = argparse.Namespace(
claude_allowed_tools=None,
Expand Down
4 changes: 2 additions & 2 deletions skills/interrogate/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ Write one clear paragraph. If you're unsure about the intent, ask the user befor

## Step 3, Spawn Reviewers

Launch all reviewers as Codex collaboration agents. Use the `interrogate reviewers` list from `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present, one reviewer per entry, extending or shrinking the Reviewer A/B/C/D labels below to the configured entry count. Otherwise use the table defaults.
Launch Codex reviewers as collaboration agents with their model and reasoning effort. Launch Claude reviewers through `claude -p --model <slug> --effort <effort>`; Opus 5.5 requires Claude Code 2.1.280+. Use the `interrogate reviewers` list from `${CODEX_HOME:-$HOME/.codex}/skills/poteto-mode/references/models.md` when present, one reviewer per entry, extending or shrinking the Reviewer A/B/C/D labels below to the configured entry count. Otherwise use the table defaults.

| Subagent | Default model |
|----------|---------------|
| Reviewer A | `gpt-6-astra` at `high` reasoning |
| Reviewer B | `gpt-6-sol` at `high` reasoning |
| Reviewer C | `claude -p --model claude-fable-5-1 --effort xhigh` |
| Reviewer C | `claude -p --model claude-opus-5-5 --effort xhigh` |

For each reviewer:
- `model`: the configured `interrogate reviewers` entry, or the table default with no configured line
Expand Down
6 changes: 3 additions & 3 deletions skills/poteto-mode/references/models.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ One line per role. Delete a line to fall back to the skill default.
- reflect tooling: `gpt-6-sol` at `high`
- reflect judgment, divergent, synthesizer: `gpt-6-astra` at `medium`
- arena runners: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high`, `gpt-5.6-sol` at `high`, `claude-opus-5-5` at `high`, `claude-fable-5-1` at `high`
- arena cross-judge pool: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high`
- arena cross-judge pool: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high`, `claude-opus-5-5` at `high`
- swarm workers: `gpt-6-luna` at `high`
- architect runners: `gpt-6-sol` at `high`, `gpt-6-astra` at `low`, `claude-fable-5-1` at `high`
- interrogate reviewers: `gpt-6-astra` at `high`, `gpt-6-sol` at `high`, `claude-fable-5-1` at `xhigh`
- architect runners: `gpt-6-sol` at `high`, `claude-opus-5-5` at `high`, `claude-fable-5-1` at `high`
- interrogate reviewers: `gpt-6-astra` at `high`, `gpt-6-sol` at `high`, `claude-opus-5-5` at `xhigh`
- Comment Sicko: `gpt-6-luna` at `high`
6 changes: 3 additions & 3 deletions skills/setup-pstack/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ One line per role. Delete a line to fall back to the skill default.
- reflect tooling: `gpt-6-sol` at `high`
- reflect judgment, divergent, synthesizer: `gpt-6-astra` at `medium`
- arena runners: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high`, `gpt-5.6-sol` at `high`, `claude-opus-5-5` at `high`, `claude-fable-5-1` at `high`
- arena cross-judge pool: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high`
- arena cross-judge pool: `gpt-6-astra` at `medium`, `gpt-6-sol` at `high`, `claude-opus-5-5` at `high`
- swarm workers: `gpt-6-luna` at `high`
- architect runners: `gpt-6-sol` at `high`, `gpt-6-astra` at `low`, `claude-fable-5-1` at `high`
- interrogate reviewers: `gpt-6-astra` at `high`, `gpt-6-sol` at `high`, `claude-fable-5-1` at `xhigh`
- architect runners: `gpt-6-sol` at `high`, `claude-opus-5-5` at `high`, `claude-fable-5-1` at `high`
- interrogate reviewers: `gpt-6-astra` at `high`, `gpt-6-sol` at `high`, `claude-opus-5-5` at `xhigh`
- Comment Sicko: `gpt-6-luna` at `high`
```

Expand Down
Loading