Assessment notes dated 2026-10-09 tracking three moving parts of the coding-agent stack: yoagent 0.25.0 (a breaking pricing-default change that affects downstream CLIs like yoyo), the public launch of OpenAI GPT-6.1 Sol (gpt-6.1-sol) on 2026-09-29, and Claude Code 2.1.295 / 2.1.290 (fail-closed hooks, output and skill limits, tightened settings/shell restrictions). The through-line is that each release shifts a default — pricing, model availability, or failure semantics — and downstream tooling must be updated deliberately rather than by naive version bump.
Key Points
yoagent 0.25.0 is breaking for costing: no model is priced by default; every constructor and preset returns ModelConfig::cost = None until the process explicitly enables a price source at startup.
A yoyo-style CLI that bumps the dependency without adding the enable call will silently fall through to yoyo's substring pricing table and misbill.
yoagent also renames AgentMessage::Extension → AgentMessage::Custom and adds a sub-agent–reaching extension mechanism plus RunHooks::take_failure.
GPT-6.1 Sol is the new OpenAI flagship price point ($2/$10 per 1M in/out up to 272K input) and is the default in Codex 0.161; yoyo as of 2026-10-09 has no knowledge of any GPT-6 id, so its context window and pricing are unknown to it.
Claude Code 2.1.295 introduces opt-in fail-closed hooks (onFailure: "block"), an stderr signal for hung -p runs, a 16384-char cap on MCP tool descriptions, and a 32-skill subagent preload cap.
Claude Code 2.1.290 hardens the surface: shell-command control characters rejected, repo settings can no longer disable attachments, symlinked managed settings warn, and more tooling paths lose read-only status.
Concepts
yoagent — Rust agent library; versioned CHANGELOG at github.com/yologdev/yoagent.
ModelConfig::cost — optional per-model pricing field; None means unpriced.
provider::prices::enable_bundled() / enable_live(&PriceSource::ModelsDev) — the two opt-in price sources (offline snapshot vs. live lookup).
format/cost.rs / builtin_model_pricing — yoyo's pricing path; reads anthropic_preset(model).cost first, then falls back to a substring table.
AgentMessage::Custom / CustomMessage — renamed from Extension / ExtensionMessage; the old name remains a deprecated alias.
Agent::with_extension, with_tree_extension — extensions applied to an agent, and to a whole sub-agent tree.
RunHooks::take_failure — new run-hook accessor.
gpt-6.1-sol (GPT-6.1 Sol) — OpenAI model, released 2026-09-29, multi-agent beta, default in Codex 0.161.
onFailure: "block" — Claude Code hook setting that makes hook failure fail-closed.
CLAUDE_CODE_DISABLE_ATTACHMENTS — env-style setting no longer settable from a repo's .claude/settings.json.
Details
yoagent 0.25.0 (2026-10-08) — pricing is opt-in
The headline change is that nothing is priced by default. ModelConfig::cost is None from every constructor and preset until the process makes an explicit call:
yoagent::provider::prices::enable_bundled() — use an offline price snapshot.
prices::enable_live(&PriceSource::ModelsDev) — pull live prices from Models.dev.
The changelog states plainly that a yoyo-style CLI must add one of these calls at startup. The failure mode is subtle: yoyo's format/cost.rs::builtin_model_pricing reads anthropic_preset(model).costfirst and only falls through to its own substring table when that value is None. So after a naive dependency bump, pricing does not break loudly — it quietly resolves via the substring table and misbills.
Other changes in 0.25.0:
Rename AgentMessage::Extension → AgentMessage::Custom, and ExtensionMessage → CustomMessage (the old name kept as a deprecated alias).
New Extensions capability: Agent::with_extension for a single agent, with_tree_extension to reach sub-agents.
New RunHooks::take_failure.
In 0.24.3 (2026-10-05), Anthropic 529 / overloaded_error was reclassified as a retried RateLimited rather than a hard failure.
Rendering diagram…
OpenAI GPT-6.1 Sol (released 2026-09-29)
Standard pricing per 1M tokens, for prompts up to 272K input:
Item
Price
Input
$2.00
Cached input
$0.10
Cache write
$2.50
Output
$10.00
Additional facts: it supports a multi-agent beta, and it is the default model in Codex 0.161.
The actionable gap is on the yoyo side: as of 2026-10-09 yoyo knows no GPT-6 id, so both context window and pricing for this model are unknown to it — meaning any request routed to gpt-6.1-sol is unaccounted for.
Claude Code 2.1.295 (2026-10-08)
Fail-closed hooks (opt-in): hooks gain onFailure: "block". A hook that cannot start, times out, or exits unexpectedly will block the action instead of being skipped.
A stderr line is emitted in -p mode when the run stays open after its last turn.
MCP tool descriptions are cut at 16384 characters.
Subagents preload at most 32 skills.
Claude Code 2.1.290 (2026-10-05)
Skills and custom commands refuse a ! shell command containing raw control characters.
A repo's .claude/settings.jsoncan no longer set CLAUDE_CODE_DISABLE_ATTACHMENTS.
A warning is raised when a managed settings file is a symlink pointing outside its own folder.
pyright and additional ps forms are no longer treated as read-only.