Add Opus 4.8 migration guide and model updates to claude-api skill (#1216)

* Add Managed Agents self-hosted sandboxes + mid-session agent updates + MCP tool-output offload to claude-api skill

Self-hosted sandboxes: new shared/managed-agents-self-hosted-sandboxes.md for config:{type:"self_hosted"} — agent loop on Anthropic's orchestration, tool execution on customer infra via outbound-polling worker. Covers EnvironmentWorker.run()/.run_one() (Py/TS), ant beta:worker poll/run, mid-level work.poller()/WorkPoller (Py/TS/Go only; Go has no auto_stop opt-out), AgentToolContext/beta_agent_toolset/tool_runner(), monitoring (environments.work.stats/stop — x-api-key, call from outside worker host), runtime deps, cloud-vs-self_hosted delta table, credentials, security ownership split. Cross-refs in environments.md, overview.md (Reading Guide + rewrote cloud-only pitfall), api-reference.md (SDK row + naming-quirks + schema + work REST rows), tools.md (Who-runs-it carve-out), onboarding.md, live-sources.md.

Mid-session agent updates: sessions.update(session_id, agent={tools, mcp_servers}, vault_ids=[...]) — session-local override (doesn't bump agent version), full-replacement semantics, session must be idle. New core.md section + pointers in tools.md, api-reference.md (UpdateSession row), overview.md.

Large MCP tool outputs → files: >100K tokens → automatic offload to sandbox file; agent gets truncated preview + path. Plus: invalid vault credentials don't block sessions.create() — session.error event fires, auth retries on next idle→running. Both in tools.md.

* Point ant CLI install ref to live-sources.md (OSS has no anthropic-cli.md)

* Add Opus 4.8 model migration guide to claude-api skill

* Add prescriptive tool-description guidance for Opus 4.8 to claude-api skill
This commit is contained in:
Lance Martin
2026-05-28 19:02:26 -07:00
committed by GitHub
parent 690f15cac7
commit da20c92503
34 changed files with 296 additions and 192 deletions
+10 -10
View File
@@ -56,7 +56,7 @@ $client = Foundry\Client::withCredentials(
```php
$message = $client->messages->create(
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
maxTokens: 16000,
messages: [
['role' => 'user', 'content' => 'What is the capital of France?'],
@@ -96,7 +96,7 @@ use Anthropic\Messages\RawContentBlockDeltaEvent;
use Anthropic\Messages\TextDelta;
$stream = $client->messages->createStream(
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
maxTokens: 64000,
messages: [
['role' => 'user', 'content' => 'Write a haiku'],
@@ -141,7 +141,7 @@ $weatherTool = new BetaRunnableTool(
$runner = $client->beta->messages->toolRunner(
maxTokens: 16000,
messages: [['role' => 'user', 'content' => 'What is the weather in Paris?']],
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
tools: [$weatherTool],
);
@@ -178,7 +178,7 @@ $tools = [
$messages = [['role' => 'user', 'content' => 'What is the weather in SF?']];
$response = $client->messages->create(
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
maxTokens: 16000,
tools: $tools,
messages: $messages,
@@ -205,7 +205,7 @@ while ($response->stopReason === 'tool_use') { // camelCase property
$messages[] = ['role' => 'user', 'content' => $toolResults];
$response = $client->messages->create(
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
maxTokens: 16000,
tools: $tools,
messages: $messages,
@@ -233,7 +233,7 @@ foreach ($response->content as $block) {
use Anthropic\Messages\ThinkingBlock;
$message = $client->messages->create(
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
maxTokens: 16000,
thinking: ['type' => 'adaptive'],
messages: [
@@ -265,7 +265,7 @@ foreach ($message->content as $block) {
```php
$message = $client->messages->create(
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
maxTokens: 16000,
system: [
['type' => 'text', 'text' => $longSystemPrompt, 'cacheControl' => ['type' => 'ephemeral']],
@@ -304,7 +304,7 @@ class Person implements StructuredOutputModel
}
$message = $client->messages->create(
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
maxTokens: 16000,
messages: [['role' => 'user', 'content' => 'Generate a profile for Alice, age 30']],
outputConfig: ['format' => Person::class],
@@ -320,7 +320,7 @@ Types are inferred from PHP type hints. Use `#[Constrained(description: '...')]`
```php
$message = $client->messages->create(
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
maxTokens: 16000,
messages: [['role' => 'user', 'content' => 'Extract: John (john@co.com), Enterprise plan']],
outputConfig: [
@@ -359,7 +359,7 @@ foreach ($message->content as $block) {
use Anthropic\Beta\Messages\BetaRequestMCPServerURLDefinition;
$response = $client->beta->messages->create(
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
maxTokens: 16000,
mcpServers: [
BetaRequestMCPServerURLDefinition::with(
@@ -48,7 +48,7 @@ use Anthropic\Beta\Agents\BetaManagedAgentsAgentToolset20260401Params;
// 1. Create the agent (reusable, versioned)
$agent = $client->beta->agents->create(
name: 'Coding Assistant',
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
system: 'You are a helpful coding assistant.',
tools: [
BetaManagedAgentsAgentToolset20260401Params::with(
@@ -299,7 +299,7 @@ use Anthropic\Beta\Sessions\BetaManagedAgentsAgentParams;
// Agent declares MCP server (no auth here — auth goes in a vault)
$agent = $client->beta->agents->create(
name: 'GitHub Assistant',
model: 'claude-opus-4-7',
model: 'claude-opus-4-8',
mcpServers: [
BetaManagedAgentsUrlmcpServerParams::with(
type: 'url',