Add 2026-03-10 changelog and update docs for new CLI commands

Changelog: MCP servers in workflows, arc init, arc diff.
Docs: arc init, arc diff, arc ssh, arc preview, arc doctor --dry-run,
cli.log per-run tracing, pull_request precedence, SSH/preview pages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Bryan Helmkamp 2026-03-10 14:25:42 -04:00
parent 6db8fd317b
commit d80335e0fc
9 changed files with 163 additions and 11 deletions

View file

@ -1 +1 @@
4a0c61b5fbc35f12bae364f0c669045b8a1d604d
485f2a5718b6d983520aa5cccd39128d99bad7ae

View file

@ -1 +1 @@
2c8ad378e1392f3223860c4df2bfa8e2da370538
485f2a5718b6d983520aa5cccd39128d99bad7ae

View file

@ -0,0 +1,52 @@
---
title: "MCP servers in workflows, arc init, and arc diff"
date: "2026-03-10"
---
## MCP servers in workflows
Agents running inside sandboxes can now access MCP tools during workflow runs. A new `sandbox` transport type starts an MCP server inside the Daytona sandbox, waits for it to listen, and connects automatically — no host-side setup required. This means agents can use tools like Playwright for browser automation, or any other MCP server, directly from within their sandbox environment.
```toml title="workflow.toml"
[mcp_servers.playwright]
type = "sandbox"
command = ["npx", "@playwright/mcp@latest", "--port", "3100", "--headless"]
port = 3100
```
## `arc init` — initialize a new project
Getting started with Arc previously meant creating `arc.toml` and workflow files by hand. Now, `arc init` scaffolds a project with a generated `arc.toml` that includes comments and a link to the docs.
```bash
arc init
```
## `arc diff` — view workflow run diffs
You can now inspect the code changes from any workflow run without digging through log files. `arc diff` surfaces the final patch and per-node diffs from completed runs. For in-progress runs, it reconnects to the sandbox to show a live diff.
```bash
arc diff <run-id>
```
## More
<Accordion title="CLI">
- `arc setup` renamed to `arc install` for clarity
- Added `arc ssh` command for direct SSH access to Daytona sandboxes
- Added `arc preview` command to get preview URLs for ports exposed by Daytona sandboxes
- `arc doctor` now runs live service probes by default; use `--dry-run` to skip
- `arc doctor` now validates GitHub App configuration and private key
- Added `[pull_request]` support to project config (`arc.toml`) for project-level PR defaults
- Per-run data moved from `~/.arc/logs/` to `~/.arc/runs/`; daily CLI logs stay in `~/.arc/logs/`
- Per-run tracing logs now written to `cli.log` inside each run directory
- Asset paths now display full `~/...` paths after workflow run output
- Hidden `arc ps`, `llm`, `exec`, and `parse` from CLI help output
- PR body now includes Arc Details section even when retro is skipped
</Accordion>
<Accordion title="Fixes">
- Fixed LLM provider resolution to check the model catalog before falling back to the default provider
- Fixed verbose mode breaking terminal rendering after many tool calls
</Accordion>

View file

@ -267,6 +267,7 @@
"group": "March 2026",
"icon": "clock-rotate-left",
"pages": [
"changelog/2026-03-10",
"changelog/2026-03-09",
"changelog/2026-03-08",
"changelog/2026-03-07",

View file

@ -18,6 +18,18 @@ When you request a preview, Arc generates a time-limited, token-authenticated UR
3. Arc returns a signed URL that you open in your browser
4. The URL expires after the configured TTL (up to 24 hours), after which a new one must be generated
## Using preview from the CLI
Use `arc preview` to generate a preview URL for any run with an active Daytona sandbox:
```bash
arc preview <run-id> 3000 # URL + token + curl example
arc preview <run-id> 3000 --signed # self-contained signed URL
arc preview <run-id> 3000 --open # open in browser (implies --signed)
```
See [`arc preview`](/reference/cli#arc-preview) for the full flag reference.
## Using preview from the web UI
When viewing a run with an active sandbox, the run detail page shows a **Preview** button in the toolbar. Clicking it generates a preview URL for port 3000 with a 1-hour TTL and opens it in a new browser tab.

View file

@ -9,9 +9,24 @@ When a workflow runs in a [Daytona sandbox](/execution/environments#daytona), yo
SSH access is only available with the Daytona sandbox provider. Local, Docker, and exe.dev sandboxes do not support SSH access.
</Note>
## Enabling SSH access
## Connecting to a run's sandbox
Pass the `--ssh` flag to `arc run`:
Use `arc ssh` to connect to the Daytona sandbox from any completed or in-progress run:
```bash
arc ssh <run-id>
```
Arc creates temporary SSH credentials and connects directly. Use `--print` to print the SSH command instead of connecting, or `--ttl` to set the credential expiry:
```bash
arc ssh <run-id> --print
arc ssh <run-id> --ttl 120
```
## Enabling SSH access during `arc run`
Pass the `--ssh` flag to `arc run` to create SSH credentials at the start of the run:
```bash
arc run workflow.dot --sandbox daytona --ssh
@ -58,10 +73,9 @@ Once connected, you have a full shell inside the sandbox VM:
## Credential lifetime
SSH credentials are temporary and expire after **60 minutes**. If your session expires, you'll need to start a new run with `--ssh` to get fresh credentials.
SSH credentials are temporary and expire after **60 minutes** by default. With `arc ssh`, you can set a custom TTL with `--ttl <MINUTES>`. If your session expires, run `arc ssh` again or start a new run with `--ssh` to get fresh credentials.
## Limitations
- SSH access is **Daytona-only**. Passing `--ssh` with other sandbox providers prints a warning and is ignored.
- SSH access is currently available only from the **CLI**. The API server and web UI do not yet expose an SSH endpoint.
- Credentials cannot be refreshed — once the 60-minute window expires, a new run is needed.

View file

@ -196,7 +196,7 @@ enabled = true
|---|---|---|
| `enabled` | Automatically create a PR after successful runs | `false` |
Precedence: `run.toml` > `cli.toml` > `server.toml` > built-in default (`false`).
Precedence: `run.toml` > `arc.toml` (project config) > `cli.toml` > `server.toml` > built-in default (`false`).
## `[mcp_servers]` section

View file

@ -311,24 +311,95 @@ arc parse workflow.dot
---
## `arc init`
Initialize a new Arc project in the current git repository. Creates an `arc.toml` project config and a sample `hello` workflow.
```bash
arc init
```
The command must be run inside a git repository. It creates:
- `arc.toml` — project configuration with comments and a link to docs
- `arc/workflows/hello/workflow.dot` — a simple greeting workflow
- `arc/workflows/hello/workflow.toml` — run config for the hello workflow
## `arc diff`
Show the diff from a workflow run. Displays the `final.patch` for completed runs, or connects to the sandbox for a live diff from in-progress runs.
```bash
arc diff <run-id>
arc diff <run-id> --node work
arc diff <run-id> --stat
```
| Argument / Flag | Description |
|---|---|
| `<RUN>` | Run ID or prefix (required) |
| `--node <NODE>` | Show diff for a specific node instead of the full run |
| `--stat` | Show diffstat instead of full patch (live diffs only) |
Output is colorized when writing to a terminal.
## `arc ssh`
SSH into a Daytona sandbox from a completed or in-progress run. Creates temporary SSH credentials and connects directly, or prints the command with `--print`.
```bash
arc ssh <run-id>
arc ssh <run-id> --print
arc ssh <run-id> --ttl 120
```
| Argument / Flag | Description |
|---|---|
| `<RUN>` | Run ID or prefix (required) |
| `--ttl <MINUTES>` | SSH credential expiry in minutes (default: 60) |
| `--print` | Print the SSH command instead of connecting |
See [SSH Access](/human-tools/ssh-access) for more details on SSH workflows.
## `arc preview`
Generate a preview URL for a port exposed by a Daytona sandbox. Useful for accessing web servers, dev tools, or APIs running inside the sandbox.
```bash
arc preview <run-id> <port>
arc preview <run-id> 3000 --signed
arc preview <run-id> 3000 --open
```
| Argument / Flag | Description |
|---|---|
| `<RUN>` | Run ID or prefix (required) |
| `<PORT>` | Port number to preview (required) |
| `--signed` | Generate a signed URL (self-contained, no headers needed) |
| `--ttl <SECONDS>` | Signed URL expiry in seconds (default: 3600, requires `--signed`) |
| `--open` | Open the URL in a browser (implies `--signed`) |
Without `--signed`, the command prints the URL, token, and a `curl` example. See [Preview](/human-tools/preview) for more details.
---
## `arc doctor`
Check environment and integration health. Verifies system dependencies, API keys, and optional services.
Check environment and integration health. Verifies system dependencies, API keys, and optional services. Probes live services (LLM providers, sandbox, GitHub App) by default.
```bash
arc doctor
arc doctor -v
arc doctor --live
arc doctor --dry-run
```
| Flag | Description |
|---|---|
| `-v, --verbose` | Show detailed information for each check |
| `-l, --live` | Probe live services (LLM providers, sandbox, API server, web frontend, Brave Search) |
| `--dry-run` | Skip live service probes (LLM, sandbox, API, web, Brave Search) |
## `arc install`
Interactive setup wizard that walks you through configuring API keys and validating your environment. Run this after a fresh install.
Interactive setup wizard that walks you through configuring API keys and validating your environment. Runs `arc doctor` with live probes after setup to validate the configuration.
```bash
arc install

View file

@ -42,6 +42,7 @@ The naming format is `YYYYMMDD-{run_id}`, where `run_id` is the ULID assigned to
| `conclusion.json` | JSON | Run end | Final result — `status`, `duration_ms`, `failure_reason`, `final_git_commit_sha`. Only present when the run completes (not for crashed or interrupted runs). |
| `final.patch` | Diff | Run end | Git diff from `base_sha` to final HEAD. Only present in git checkpoint mode. |
| `retro.json` | JSON | Run end | Post-run retrospective analysis — `smoothness_rating`, `learnings`, `friction_points`, `stages`. Omitted if `--no-retro` is passed. See [Retros](/execution/retros). |
| `cli.log` | Text | Continuous | Per-run tracing log. Contains the same tracing output as the daily log file, scoped to this run. |
### `nodes/` subdirectory
@ -110,6 +111,7 @@ arc ps --filter workflow=my-workflow
│ ├── conclusion.json
│ ├── final.patch
│ ├── retro.json
│ ├── cli.log
│ ├── nodes/
│ │ ├── plan/
│ │ │ ├── prompt.md