Added
- Progressive feature disclosure. A feature that ships with a real policy question is raised once, at session start after the upgrade that introduced it, instead of waiting for someone to read a changelog and hand-edit an env var.
config/features.jsonis the manifest;decision: requiredfeatures are offered,decision: nonefeatures ship silently on their default and stay settable by env key. Answers are recorded so a question is asked once and never re-asked, the offer is suppressed in non-interactive sessions, and the prompt budget is bounded so an unanswered offer cannot become nagware./octo:whats-newchanges any answer later. - Selective Claude Fable 5 escalation (
OCTOPUS_FABLE5_ROUTING, defaultoff). Fable 5 can be routed to judgment-heavy work — PRD authoring, definition tradeoffs, cross-vendor tie-breaks — while Opus 5 stays the default everywhere else. At $10/$50 per MTok it is twice Opus 5, so escalation is capped at one dispatch per command and is never automatic. - Authorship-aware review (
OCTOPUS_REVIEWER_FLIP). When Codex writes the code, review can move to a Claude seat so author and reviewer are different vendors. Note the converse limit: Fable 5 is Anthropic-family like Opus 5, so a Fable review of Opus-authored work is not an independent cross-vendor check. - Command Code CLI provider (
commandcode,commandcode-research,commandcode-fast) with an isolated environment, JSON result parsing, and role-scoped permission modes. Thanks to @Jhacarreiro. review.findinglifecycle events, andsynthesis.start/synthesis.endbracketing the design-review reduce step.
Fixed
- Global flags placed after the subcommand were silently read as the prompt.
orchestrate.sh define --timeout 540 "..."ran a workflow whose task was literally--timeout, discarding the real prompt and reporting success. Now fails loud with the correct invocation order. - Helper-shim allowlisting matched the command-string suffix instead of the executable token, so
copilot-exec.shdispatches aborted their phase andagy-exec.shwas rejected whenever dispatch appended arguments. USAGE_FILEwas derived beforeWORKSPACE_DIRwas resolved, producing a read-only-filesystem error that failed agent dispatch. Thanks to @zyclope0.stat-based file-age checks were silently broken on Linux — all probed BSDstat -f %mfirst, but on Linux-fis--file-systemand succeeds, so the GNU fallback never ran.- Two dead provider seats reported themselves as available and were dispatched into instant failure: agy's account-wide
Individual quota reachedand gemini-cli'sIneligibleTierErrorfrom Google's Gemini Code Assist free-tier OAuth sunset. - The quota-dead downgrade now applies to every provider, not four of thirteen, and a quota-dead mark expires (
OCTOPUS_QUOTA_DEAD_TTL, default 3600s) instead of retiring a seat permanently.
Known issue
Under CLAUDE_PLUGIN_DATA, quota dead-marks written by gemini-exec.sh and agy-exec.sh are written where the reader does not look, so gemini can keep advertising as available and re-trigger the macOS keychain prompt. Fix in flight as #714; migration off the sunset Gemini OAuth tracked in #715.
Full changelog: https://github.com/nyldn/claude-octopus/blob/main/CHANGELOG.md