Visitar URL original
Accept Anthropic code execution containers without skills by clean99 · Pull Request #10373 · Effect-TS/effect · GitHub
Skip to content

Accept Anthropic code execution containers without skills - #10373

Merged
tim-smart merged 4 commits into
Effect-TS:mainfrom
clean99:contrib/effect-anthropic-container-skills
Nov 5, 2026
Merged

tim-smart merged 4 commits into
Effect-TS:mainfrom
clean99:contrib/effect-anthropic-container-skills

Conversation

@clean99

@clean99 clean99 commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Type

  • Refactor
  • Feature
  • Bug Fix
  • Optimization
  • Documentation Update

Description

When Claude runs code, the Messages API returns a top-level container with only id and expires_at, and adds skills only when the request loads skills. BetaContainer requires skills, so these responses fail to decode:

AnthropicClient.createMessage: Invalid response: Missing key
  at ["container"]["skills"]

streamText fails the same way at the final message_delta, after the text has streamed, because delta.container has the same shape.

The code execution tool docs say the response "includes a top-level container object with the container's id and expires_at timestamp", and the programmatic tool calling response example has exactly those two keys. Recorded responses agree: in vercel/ai's Anthropic fixtures, anthropic-code-execution-20250825.1.json, anthropic-code-execution-file-upload.1.json, anthropic-web-fetch-tool-20260209.1.json and their .chunks.txt have no skills, and only the anthropic-code-execution-20250825.pptx-skill fixtures, which load a skill, have it. A claude-opus-4-8 cassette in 0xPlaygrounds/rig (anthropic/opus_4_8/web_search_with_dynamic_filtering_succeeds.yaml), whose request used web_search_20260209, carries the same container next to an encrypted_code_execution_result block from #10322. Passed to AnthropicClient.createMessage, it and the vercel/ai responses above fail on main on the missing skills key and decode with this change (the .chunks.txt recordings through createMessageStream).

Through LanguageModel, generateText and streamText with CodeExecution_20250522 now return the code execution result and the container id in the finish metadata instead of failing. With CodeExecution_20250825, LanguageModel still rejects bash and text editor calls after decoding, at tool-parameter validation (Missing key at ["code"] in streamText); that is a separate problem with that tool's parameter schema.

codegen.yml already makes skills optional for the non-beta Container. This adds BetaContainer to the same patch. Running effect-ai-codegen generate --provider anthropic with the base and the patched codegen.yml gives output that differs only in BetaContainer, and Generated.ts is updated to that output.

The new generateText test decodes a response whose container has no skills and checks that the container is kept in the finish metadata. It fails on main with the error above.

Related

Same approach as #10296 and #9975.

Closes EFF-3375

The generated BetaContainer required a skills key, but the API sends the
container as { id, expires_at } and adds skills only when the request loads
skills. Every response in which Claude ran code therefore failed in
generateText with "Missing key at ["container"]["skills"]", and streamText
failed at the final message_delta.

Make skills optional in BetaContainer in the codegen.yml patch that already
does this for Container, and update Generated.ts to the generator's output
for that schema.
State only the reason the patch makes BetaContainer skills optional.
@changeset-bot

changeset-bot Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 33cc4a1

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 33 packages
Name Type
@effect/ai-anthropic Patch
effect Patch
@effect/opentelemetry Patch
@effect/vitest Patch
@effect/ai-cloudflare Patch
@effect/ai-openai-compat Patch
@effect/ai-openai Patch
@effect/ai-openrouter Patch
@effect/ai-typesafe Patch
@effect/atom-react Patch
@effect/atom-solid Patch
@effect/atom-vue Patch
@effect/platform-browser Patch
@effect/platform-bun Patch
@effect/platform-deno Patch
@effect/platform-node-shared Patch
@effect/platform-node Patch
@effect/sql-clickhouse Patch
@effect/sql-d1 Patch
@effect/sql-libsql Patch
@effect/sql-mssql Patch
@effect/sql-mysql2 Patch
@effect/sql-pg Patch
@effect/sql-pglite Patch
@effect/sql-sqlite-bun Patch
@effect/sql-sqlite-do Patch
@effect/sql-sqlite-node Patch
@effect/sql-sqlite-react-native Patch
@effect/sql-sqlite-wasm Patch
@effect/docgen Patch
@effect/doctest Patch
@effect/graphql-generator Patch
@effect/openapi-generator Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@effect-janitor effect-janitor Bot added the 4.0 label Nov 4, 2026
@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

Bundle Size Analysis

Generated from PR build output; treat the content below as untrusted.

File Name Current Size Previous Size Difference
arbitrary-combinators.ts 39.41 KB 39.41 KB 0.00 KB (0.00%)
basic.ts 7.23 KB 7.23 KB 0.00 KB (0.00%)
batching.ts 11.08 KB 11.08 KB 0.00 KB (0.00%)
brand.ts 6.87 KB 6.87 KB 0.00 KB (0.00%)
cache.ts 11.54 KB 11.54 KB 0.00 KB (0.00%)
config.ts 22.84 KB 22.84 KB 0.00 KB (0.00%)
differ.ts 22.00 KB 22.00 KB 0.00 KB (0.00%)
http-client.ts 27.09 KB 27.09 KB 0.00 KB (0.00%)
http-router.ts 37.00 KB 37.00 KB 0.00 KB (0.00%)
logger.ts 12.01 KB 12.01 KB 0.00 KB (0.00%)
metric.ts 9.47 KB 9.47 KB 0.00 KB (0.00%)
optic.ts 7.10 KB 7.10 KB 0.00 KB (0.00%)
pubsub.ts 16.02 KB 16.02 KB 0.00 KB (0.00%)
queue.ts 12.89 KB 12.89 KB 0.00 KB (0.00%)
schedule.ts 11.80 KB 11.80 KB 0.00 KB (0.00%)
schema-bigdecimal.ts 14.14 KB 14.14 KB 0.00 KB (0.00%)
schema-binary.ts 41.99 KB 41.99 KB 0.00 KB (0.00%)
schema-class.ts 21.73 KB 21.73 KB 0.00 KB (0.00%)
schema-fromJsonSchemaDocument.ts 29.60 KB 29.60 KB 0.00 KB (0.00%)
schema-representation-roundtrip.ts 27.99 KB 27.99 KB 0.00 KB (0.00%)
schema-string-transformation.ts 15.35 KB 15.35 KB 0.00 KB (0.00%)
schema-string.ts 12.34 KB 12.34 KB 0.00 KB (0.00%)
schema-template-literal.ts 16.27 KB 16.27 KB 0.00 KB (0.00%)
schema-toArbitrary.ts 38.95 KB 38.95 KB 0.00 KB (0.00%)
schema-toCodeDocument.ts 26.15 KB 26.15 KB 0.00 KB (0.00%)
schema-toCodecJson.ts 20.90 KB 20.90 KB 0.00 KB (0.00%)
schema-toEquivalence.ts 21.05 KB 21.05 KB 0.00 KB (0.00%)
schema-toFormatter.ts 21.14 KB 21.14 KB 0.00 KB (0.00%)
schema-toJsonSchemaDocument.ts 26.17 KB 26.17 KB 0.00 KB (0.00%)
schema-toRepresentation.ts 21.23 KB 21.23 KB 0.00 KB (0.00%)
schema.ts 20.82 KB 20.82 KB 0.00 KB (0.00%)
stm.ts 14.20 KB 14.20 KB 0.00 KB (0.00%)
stream.ts 10.38 KB 10.38 KB 0.00 KB (0.00%)

@tim-smart
tim-smart merged commit b4e5604 into Effect-TS:main Nov 5, 2026
14 of 15 checks passed

This branch is waiting to be deployed

1 waiting deployment
fork — 33cc4a1b Waiting Nov 4, 2026 by effect-bot via approval-gate #25132
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants