diff --git a/.changeset/calm-codex-flags.md b/.changeset/calm-codex-flags.md new file mode 100644 index 00000000..ea350353 --- /dev/null +++ b/.changeset/calm-codex-flags.md @@ -0,0 +1,5 @@ +--- +"@stoneforge/smithy": patch +--- + +Update Codex interactive sessions to use the documented workspace-write sandbox flag. diff --git a/.changeset/current-agent-protocols.md b/.changeset/current-agent-protocols.md new file mode 100644 index 00000000..a6832836 --- /dev/null +++ b/.changeset/current-agent-protocols.md @@ -0,0 +1,7 @@ +--- +"@stoneforge/smithy": patch +--- + +Update Claude Agent SDK to 0.3.282 and terminate SDK processes when sessions close. Sanitize the environment for Claude model discovery as well as session launches. + +Align Codex app-server integration with the current model catalog, paginated model discovery, turn cancellation IDs, nested turn completion status, error notifications and command output. Terminate failed headless sessions with a non-zero exit instead of leaving their message queues open. Preserve resume IDs reported during graceful shutdown without marking stopped agents as running. diff --git a/.changeset/quiet-codex-resume.md b/.changeset/quiet-codex-resume.md new file mode 100644 index 00000000..f4f3c69b --- /dev/null +++ b/.changeset/quiet-codex-resume.md @@ -0,0 +1,5 @@ +--- +"@stoneforge/smithy": patch +--- + +Fix Codex interactive resume so only UUID session IDs from the Codex continuation footer are persisted. Stopping an interactive Codex session now requests a clean `/exit` shutdown, allowing Stoneforge to capture the resume ID and avoid offering invalid resume targets from ordinary terminal text. diff --git a/.changeset/strip-claudecode-from-spawn-env.md b/.changeset/strip-claudecode-from-spawn-env.md new file mode 100644 index 00000000..6c22fe52 --- /dev/null +++ b/.changeset/strip-claudecode-from-spawn-env.md @@ -0,0 +1,9 @@ +--- +"@stoneforge/smithy": patch +--- + +fix: strip CLAUDECODE from spawned-claude env to allow nested spawns + +When stoneforge runs from inside a Claude Code session (any user invoking `sf` from Claude Code's bash tool, or a director orchestrating workers from a Claude Code session), the spawned claude subprocess inherits `CLAUDECODE=1` from `process.env`. The previous explicit `CLAUDECODE: '1'` in the env spread re-asserted it. Modern claude versions read `CLAUDECODE` and refuse to start with "Claude Code cannot be launched inside another Claude Code session", which the spawner surfaced as the cryptic "Session exited before init". + +Strip `CLAUDECODE` from the env passed to both headless (SDK) and interactive (PTY) provider spawns. Stoneforge IS the parent; the spawned claude is a fresh top-level session, not nested. diff --git a/.changeset/thread-agent-environment.md b/.changeset/thread-agent-environment.md new file mode 100644 index 00000000..f0220b61 --- /dev/null +++ b/.changeset/thread-agent-environment.md @@ -0,0 +1,7 @@ +--- +"@stoneforge/smithy": patch +--- + +Pass agent environment overrides and the Stoneforge workspace root to each Codex thread, including resumed threads. This preserves SF_ENTITY_ID for task commands without leaking another agent's identity through the shared app-server. + +Add an opt-in live Director → Worker → Merge Steward check using production services, both Codex and Claude Code, immutable acceptance tests and a local Git origin. diff --git a/apps/docs/src/content/docs/guides/multi-provider.mdx b/apps/docs/src/content/docs/guides/multi-provider.mdx index cb574a86..b16adfd5 100644 --- a/apps/docs/src/content/docs/guides/multi-provider.mdx +++ b/apps/docs/src/content/docs/guides/multi-provider.mdx @@ -14,7 +14,7 @@ Stoneforge supports multiple LLM providers. You can assign different providers t |----------|-------|----------|---------| | Claude Code | | `claude` | Yes | | OpenCode | | `opencode` | No | -| OpenAI Codex | | Built-in (JSON-RPC over stdio) | No | +| OpenAI Codex | | `codex` (app-server over stdio for headless sessions) | No |