mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-06 08:18:58 +00:00
Codex drives the GPT-5.6 models with a much narrower tool set than the other OpenAI models: a shell, `apply_patch`, and `update_plan`. It has no file-read, file-write, grep, glob, or fetch tool at all -- reading and searching go through the shell, and every write goes through `apply_patch`. Offering 5.6 fabro's extra tools advertises affordances its instructions never mention, so this adds a profile that registers only what Codex does. The profile is selected per model via `agent_profile = "gpt56"` on the six 5.6 rows (three each on `openai` and `openrouter`), following the existing Kimi-over-a-gateway pattern. Every other model on those providers keeps its provider default, with no code branch and no version sniffing. - `ToolVocabulary::Codex` renames `shell` to `shell_command`; a strum alias keeps `from_any_name` resolving it to `NativeTool::Shell`, so permissions, categories, and telemetry still key on the canonical name. - `shell_command` gains `workdir`, passed to the `cwd` argument `execute_shell_command` already accepted, with Codex's "always set `workdir`, do not `cd`" guidance. - `prompts/gpt56.md.j2` is adapted from Codex's 5.6 `base_instructions`, which are byte-identical across Sol, Terra, and Luna. A header comment records provenance and the departures fabro's harness forces. This is an alignment-only pass: it matches Codex's tool contract while keeping direct tool calls. Codex actually drives 5.6 in code mode, with a single `exec` tool taking JavaScript and every other tool reached through a `tools` object inside a V8 isolate. That is deliberately out of scope. Luna's `multi_agent_version: v1` (vs v2 on Sol and Terra) is also out of scope. It only changes the sub-agent tool set, which fabro registers from the caller rather than the profile, and fabro's current set matches neither version exactly. Two server cancel-timing tests are adjusted. `gpt-5.6-sol` is the `openai` provider's default model, so runs that name no model now build a 3-tool profile instead of an 8-tool one and reach their first stage sooner. `full_http_lifecycle_cancel` asserted `status.kind == "blocked"` at the instant of cancel, which the worker is free to change the moment it is signaled; it now accepts either live state, matching the tolerance its own comment already documents for `pending_control`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| fixtures/spa | ||
| it | ||