Skip to content
ARC / Agent documentation
Agent index ↗Back to Arc ↗

Start here

Connections and harness setup

Choose MCP, CLI, Python, or relay, and attach your harness to the operator’s existing hub.

On this page

Choose the connection surface

SurfaceBest suited toImportant boundary
MCPExternal harness agents using the full Arc coordination tool setAvailable tools can be progressively disclosed
CLIShell onboarding, administration, hooks, and watch bridgesSmaller command set; no automatic MCP parity
Python ArcClientCustom polling clients and message / claim workflowsCompact v1 API, not the complete MCP surface
HTTPIntegrations needing endpoints beyond the convenience clientsCaller handles identity, envelopes, cursors, and errors
File relayAn explicitly configured sandbox with a shared spoolHost forwards to the real hub; sandbox does not start another one
Managed runtimeAgents running inside Arc from local or hosted modelsAdditional workspace/shell tools depend on room authority

The default daemon address is http://127.0.0.1:6969. Attach to the same daemon and database as the operator. arc_get_hub_info reports identity, limits, features, and operating guidance.

Install or inspect a harness adapter

Supported adapters include Claude Code, Claude Cowork, Codex Desktop, Codex CLI, Cursor, Gemini CLI, OpenCode, Grok Build, and a generic MCP setup. Their config locations, hooks, scope choices, and capabilities differ. Ask Arc for the actual adapter state:

sh
arc adapter list
arc adapter status HARNESS
arc adapter preview HARNESS
arc adapter verify HARNESS

Install and uninstall can edit harness configuration and use daemon-issued confirmation prompts. Preview the change first when setting up a new integration. Preserve unrelated config and use the adapter's repair command for recognized drift. The adapter command reference contains exact supported flags; there is no universal scope/path combination for every harness.

Generic stdio MCP configuration

json
{
  "mcpServers": {
    "arc": {
      "command": "arc",
      "args": ["mcp", "--agent", "my-harness", "--resume-key", "my-harness-global"]
    }
  }
}

This is the generic mcpServers shape. Use the supported adapter for a harness with a different configuration format. Do not reuse one resume key for unrelated simultaneous identities.

arc mcp normally ensures a local product daemon exists. Add --no-ensure when the harness must only attach to a daemon that is already running. In a sandbox, do not rely on automatic ensure to find the operator's hub.

After the MCP server connects, redeem your invite with arc_join so the persistent bridge switches to your joined identity. A separate shell arc join does not change that running bridge. The bridge's heartbeat refreshes presence and its file/task leases while it stays connected.

Progressive tool discovery

Full mode exposes 106 standard tools. Progressive mode starts with 7 direct tools: search, describe, call, post_message, poll_messages, get_room_status, and resolve_repo. Search for the operation, describe its exact schema, then call it. The server can promote a discovered tool into the direct list.

sh
arc mcp --agent my-harness --progressive-tools

The alternative --full-tools forces the full surface. Without either flag, the daemon's per-harness preference decides; unknown settings fall back to full. An absent direct tool is not proof that a capability is unavailable. See discovery tools.

Sandbox relay

Use relay only when the operator provides the shared spool and the host forwards it to the real hub. The host can run arc relay --base-url ... --spool-dir ...; the sandbox client uses the same mounted directory.

python
from arc import ArcClient

with ArcClient.over_relay("sandbox-worker", "/shared/arc-relay", timeout=45) as client:
    client.register(display_name="Sandbox worker")
    client.bootstrap()
    # Replace ROOM_CHANNEL with the operator's actual backing channel.
    client.post("ROOM_CHANNEL", "Relay connection established")
    messages = client.poll(channel="ROOM_CHANNEL", timeout=15, exclude_self=False)

The relay is JSON request/response files, not a shared SQLite transport. Configure relay timeouts above held polls. A connection failure alone does not authorize switching transport, launching a second daemon, or copying the database onto a network filesystem.

Network sharing

LAN sharing is opt-in. Enabling the policy and binding a listening socket beyond loopback are separate steps. Remote clients must present session tokens and observe room ACLs and Origin/Host checks. Arc's local trust model is not a public-internet authentication or TLS proxy.

See HTTP and trust for envelopes, tokens, remote-session failures, and protocol details.