Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
the same 64 KiB pipe boundary.

### Changed
- **Claude runs no longer inherit the host's user settings, and that is a default
change.** `claude -p` loads `user`, `project`, and `local` settings unless told
otherwise, which handed every spawned session the caller's hooks. On a machine
with a real hook stack those hooks dominate the call. A one-word prompt to
`claude-haiku-4-5` measured 63s with the host's hooks against 6s without, and
the session exited printing `SessionEnd hook … failed`. Non-isolated runs now
plan `--setting-sources project`; isolated runs keep the `--setting-sources ""`
they already passed. The new `ClaudeConfig.setting_sources` (Go
`SettingSources`) names the sources instead, on isolated runs too. Pass
`("user", "project", "local")` to restore what non-isolated runs did before, or
`()` to load none. `--settings` is no substitute, because settings merge: a
`{"hooks":{}}` payload leaves the inherited hooks in place.
- **The Apple backend no longer needs the `apple` extra, `apple-fm-sdk`, or
Xcode.** A prebuilt Swift sidecar ships inside the macOS platform wheel
(`macosx_26_0_arm64`), so installing spawnllm on an Apple-Intelligence-capable
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-append-system-prompt.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": null,
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-disallowed-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": null,
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-explicit-max-budget.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": "acceptEdits",
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": null,
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-full-explicit-agent.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"mcp_config": "{\"mcpServers\":{}}",
"output_format": null,
"permission_mode": "bypassPermissions",
"setting_sources": null,
"settings": "{\"model\":\"opus\"}",
"strict_mcp": true,
"system_prompt": "terse",
Expand Down
2 changes: 2 additions & 0 deletions conformance/vectors/plan/claude-isolated-false.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
"--no-session-persistence",
"--model",
"haiku",
"--setting-sources",
"project",
"--system-prompt",
""
],
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-max-turns.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": null,
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-mcp-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": "{\"mcpServers\":{}}",
"output_format": null,
"permission_mode": null,
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": null,
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-output-format.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": "stream-json",
"permission_mode": null,
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": null,
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-permission-mode.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": "bypassPermissions",
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": null,
Expand Down
70 changes: 70 additions & 0 deletions conformance/vectors/plan/claude-setting-sources-empty.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
{
"name": "claude-setting-sources-empty",
"op": "plan",
"input": {
"provider": "claude",
"spec": {
"prompt": "hi",
"model": "haiku",
"agent": false,
"isolated": false,
"timeout": 180,
"max_attempts": 5,
"api_auth": false,
"schema": null,
"apple": null,
"claude": {
"append_system_prompt": null,
"disable_slash_commands": false,
"disallowed_tools": [],
"max_budget_usd": null,
"max_turns": null,
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": [],
"settings": null,
"strict_mcp": false,
"system_prompt": null,
"tools": null,
"verbose": false
},
"codex": null,
"gemini": null,
"openai_endpoint": null
},
"host": {
"platform": "darwin"
}
},
"expected": {
"kind": "exec",
"argv": [
"claude",
"-p",
"--no-session-persistence",
"--model",
"haiku",
"--setting-sources",
"",
"--system-prompt",
""
],
"stdin": "hi",
"files": [
{
"id": "stdout",
"suffix": ".json",
"content": null
}
],
"stdout_to_file": true,
"read_result_from": "stdout",
"env": {},
"env_unset": [
"ANTHROPIC_API_KEY",
"ANTHROPIC_AUTH_TOKEN"
],
"needs_claude_isolation": false
}
}
74 changes: 74 additions & 0 deletions conformance/vectors/plan/claude-setting-sources-host.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{
"name": "claude-setting-sources-host",
"op": "plan",
"input": {
"provider": "claude",
"spec": {
"prompt": "hi",
"model": "haiku",
"agent": false,
"isolated": false,
"timeout": 180,
"max_attempts": 5,
"api_auth": false,
"schema": null,
"apple": null,
"claude": {
"append_system_prompt": null,
"disable_slash_commands": false,
"disallowed_tools": [],
"max_budget_usd": null,
"max_turns": null,
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": [
"user",
"project",
"local"
],
"settings": null,
"strict_mcp": false,
"system_prompt": null,
"tools": null,
"verbose": false
},
"codex": null,
"gemini": null,
"openai_endpoint": null
},
"host": {
"platform": "darwin"
}
},
"expected": {
"kind": "exec",
"argv": [
"claude",
"-p",
"--no-session-persistence",
"--model",
"haiku",
"--setting-sources",
"user,project,local",
"--system-prompt",
""
],
"stdin": "hi",
"files": [
{
"id": "stdout",
"suffix": ".json",
"content": null
}
],
"stdout_to_file": true,
"read_result_from": "stdout",
"env": {},
"env_unset": [
"ANTHROPIC_API_KEY",
"ANTHROPIC_AUTH_TOKEN"
],
"needs_claude_isolation": false
}
}
75 changes: 75 additions & 0 deletions conformance/vectors/plan/claude-setting-sources-isolated.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{
"name": "claude-setting-sources-isolated",
"op": "plan",
"input": {
"provider": "claude",
"spec": {
"prompt": "hi",
"model": "haiku",
"agent": false,
"isolated": true,
"timeout": 180,
"max_attempts": 5,
"api_auth": false,
"schema": null,
"apple": null,
"claude": {
"append_system_prompt": null,
"disable_slash_commands": false,
"disallowed_tools": [],
"max_budget_usd": null,
"max_turns": null,
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": [
"project"
],
"settings": null,
"strict_mcp": false,
"system_prompt": null,
"tools": null,
"verbose": false
},
"codex": null,
"gemini": null,
"openai_endpoint": null
},
"host": {
"platform": "darwin"
}
},
"expected": {
"kind": "exec",
"argv": [
"claude",
"-p",
"--no-session-persistence",
"--model",
"haiku",
"--setting-sources",
"project",
"--strict-mcp-config",
"--system-prompt",
""
],
"stdin": "hi",
"files": [
{
"id": "stdout",
"suffix": ".json",
"content": null
}
],
"stdout_to_file": true,
"read_result_from": "stdout",
"env": {
"CLAUDE_CONFIG_DIR": "${isolated_config_dir}"
},
"env_unset": [
"ANTHROPIC_API_KEY",
"ANTHROPIC_AUTH_TOKEN"
],
"needs_claude_isolation": true
}
}
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": null,
"settings": "{\"model\":\"opus\"}",
"strict_mcp": false,
"system_prompt": null,
Expand Down
3 changes: 3 additions & 0 deletions conformance/vectors/plan/claude-strict-mcp.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": null,
"settings": null,
"strict_mcp": true,
"system_prompt": null,
Expand All @@ -44,6 +45,8 @@
"--no-session-persistence",
"--model",
"haiku",
"--setting-sources",
"project",
"--strict-mcp-config"
],
"stdin": "hi",
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-system-prompt.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": "You are terse.",
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-tools-empty.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": null,
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-tools-list.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": null,
Expand Down
1 change: 1 addition & 0 deletions conformance/vectors/plan/claude-verbose.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"mcp_config": null,
"output_format": null,
"permission_mode": null,
"setting_sources": null,
"settings": null,
"strict_mcp": false,
"system_prompt": null,
Expand Down
Loading
Loading