diff --git a/.claude/skills/changelog/watermark b/.claude/skills/changelog/watermark
index 59996da02..8c6b6ee74 100644
--- a/.claude/skills/changelog/watermark
+++ b/.claude/skills/changelog/watermark
@@ -1 +1 @@
-d790d8fc3e5070804bdd1cd1d888d9604057c9b8
+4ab96b9e1470b84f8a7bbcfe9a1543961f044399
diff --git a/docs/changelog/2026-03-08.mdx b/docs/changelog/2026-03-08.mdx
index 7f7b78352..e26ba962a 100644
--- a/docs/changelog/2026-03-08.mdx
+++ b/docs/changelog/2026-03-08.mdx
@@ -44,6 +44,7 @@ To migrate, update any scripts or aliases:
+- Added `--goal-file` flag to `arc run` for reading goal from a file instead of inline text
- MCP servers can now be configured in TOML via `cli.toml` instead of JSON
- `verbose = true` in `cli.toml` defaults to verbose output without needing `-v`
- `goal` is now optional in run config TOML — precedence is CLI `--goal` > TOML `goal` > DOT graph attribute
@@ -52,6 +53,9 @@ To migrate, update any scripts or aliases:
+- Script nodes now execute inside the configured sandbox instead of on the host — fixes issues where agents edited files in the sandbox but lint/test commands ran on the host
+- Asset collection is now opt-in via `[assets]` config with custom include globs, eliminating ~30s file scans per stage when not needed
+- Workflow runs now fail immediately on git checkpoint commit failure instead of silently continuing
- GitHub webhook listener via Tailscale funnel — auto-configures webhook URL on startup
- `[sandbox.env]` support passes environment variables through to sandbox tool execution
- `project_memory` attribute on prompt nodes for persistent context across stages
@@ -64,6 +68,9 @@ To migrate, update any scripts or aliases:
+- Daytona sandboxes now named `arc-{run_id}` for easy correlation with workflow runs
+- Logs directory naming changed from `arc-run-YYYYMMDD-HHMMSS` to `YYYYMMDD-{run_id}`
+- Truncated stage failure error display to show only the last line in `arc run` output
- `apply_patch` error responses now include file contents for better debugging of failed edits
- v4a patch parser/applier rewritten to match canonical OpenAI codex spec
- Accept bare `@@` hunk headers in v4a `apply_patch` parser
@@ -71,6 +78,8 @@ To migrate, update any scripts or aliases:
+- Fixed SSE streaming format mismatch in `/completions` endpoint
+- Exempt `/tmp/` paths from sandbox read-before-write guard
- Fixed sandbox file-write validation incorrectly blocking valid operations
- Fixed stall watchdog killing agent during long LLM reasoning turns
- Added 5-minute stream read timeout with 5-second retry backoff for sandbox connections
diff --git a/docs/changelog/2026-03-09.mdx b/docs/changelog/2026-03-09.mdx
new file mode 100644
index 000000000..0651bbb33
--- /dev/null
+++ b/docs/changelog/2026-03-09.mdx
@@ -0,0 +1,39 @@
+---
+title: "exe.dev git cloning, cancellation, and checkpointing"
+date: "2026-03-09"
+---
+
+## exe.dev sandbox maturation
+
+The exe.dev sandbox provider now supports the full workflow lifecycle. Previously, exe.dev VMs could run agent stages but lacked git integration, cancellation, and checkpointing — making them unusable for real multi-stage workflows. Now, Arc automatically clones the local git repo into exe.dev VMs, supports remote git checkpointing between stages, and wires up cancellation tokens so stopping a run cleanly tears down the VM.
+
+You can also specify a custom container image and connect via SSH:
+
+```toml title="run.toml"
+[execution]
+environment = "exe"
+
+[execution.exe]
+image = "my-custom-image:latest"
+```
+
+```bash
+arc run --ssh my-workflow.dot
+```
+
+## More
+
+
+- Added `[pull_request]` config section in `cli.toml` so auto-PR works with `.dot` files without needing a `run.toml`
+- Workflow run output now shows local time instead of UTC
+- Shortened token and tool count labels in CLI progress output for brevity
+
+
+
+- Subagent status lines now indent deeper than tool calls in CLI progress for clearer hierarchy
+
+
+
+- Fixed pipe deadlock in local sandbox when child process output exceeds 64KB
+- Fixed shell-quoting of script-assembled arguments to prevent word-splitting issues
+
diff --git a/docs/docs.json b/docs/docs.json
index 591134421..b105cb68d 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -266,6 +266,7 @@
"group": "March 2026",
"icon": "clock-rotate-left",
"pages": [
+ "changelog/2026-03-09",
"changelog/2026-03-08",
"changelog/2026-03-07",
"changelog/2026-03-06",