Skip to main content

Config Schema

The main config file is ~/.arc/config.yaml. It is created with defaults by arc setup or automatically on first run.

Full default config

daemon:
auto_start: true
socket_path: ~/.arc/arc.sock
log_level: info
pid_file: ~/.arc/daemon.pid

acpx:
command: acpx
default_agent: claude
session_ttl: 300

ollama:
endpoints:
local:
url: http://localhost:11434/v1

discord:
enabled: false
token_env: DISCORD_BOT_TOKEN
guild_id: ""
thread_mode: false
rate_limit:
messages_per_minute: 5

git:
auto_pull: true

timeouts:
acpx_request: 300
ollama_request: 120
ipc_connect: 5

output:
default_format: raw
color: true

logging:
log_routing: true

daemon

Controls the background daemon process.

daemon.auto_start

TypeDefault
booltrue

When true, running arc ask automatically starts the daemon as a background process if it is not running. The CLI retries the IPC connection once after spawning the daemon.

daemon:
auto_start: true

Set to false if you prefer explicit daemon management.


daemon.socket_path

TypeDefault
string (path)~/.arc/arc.sock

Path to the Unix domain socket used for CLI-to-daemon communication. The ~ is expanded at runtime. The socket file is created when the daemon starts and deleted on shutdown.

daemon:
socket_path: ~/.arc/arc.sock

daemon.log_level

TypeDefault
stringinfo

Python logging level for the daemon and CLI. Valid values: debug, info, warning, error, critical.

daemon:
log_level: info

Set to debug to see verbose dispatch and IPC traces.


daemon.pid_file

TypeDefault
string (path)~/.arc/daemon.pid

Path to the file where the daemon writes its PID. Used by arc daemon stop and arc daemon status to find and signal the process.

daemon:
pid_file: ~/.arc/daemon.pid

The parent directory of pid_file is used as the arc config directory for locating agents/, cron/, and logs/.


acpx

Controls the acpx Claude Code session manager.

acpx.command

TypeDefault
stringacpx

The executable name or path for acpx. Change this if acpx is installed in a non-standard location or you want to use a specific version.

acpx:
command: /usr/local/bin/acpx

acpx.default_agent

TypeDefault
stringclaude

The acpx agent name (the Claude Code agent configuration within acpx). This is the argument passed to acpx after the global flags: acpx ... <default_agent> exec ...

acpx:
default_agent: claude

acpx.session_ttl

TypeDefault
int (seconds)300

How long acpx keeps named sessions alive after the last activity. Used by Discord thread mode: sessions older than this value may be recreated on the next message, losing conversation context.

acpx:
session_ttl: 300

This value is informational in arc; the TTL is enforced by acpx itself.


ollama

Named Ollama endpoints for model routing.

ollama.endpoints

TypeDefault
map[string, object]{local: {url: http://localhost:11434/v1}}

A map of endpoint names to URL objects. The local endpoint is the default for ollama/<model> model strings (without an explicit endpoint). Named endpoints are accessed with ollama/<endpoint>/<model>.

ollama:
endpoints:
local:
url: http://localhost:11434/v1
remote:
url: http://192.168.1.100:11434/v1
kyle:
url: http://kyle-nuc.tailnet:11434/v1

Each endpoint object has a single field:

url

TypeRequired
string (URL)yes

The base URL of the Ollama-compatible API. arc appends /chat/completions to form the full request URL.


discord

Discord bot configuration.

discord.enabled

TypeDefault
boolfalse

Whether to start the Discord bot when the daemon starts. Set to true after configuring token_env and guild_id.


discord.token_env

TypeDefault
stringDISCORD_BOT_TOKEN

The name of the environment variable that holds the Discord bot token. The token itself should be stored in ~/.arc/.env, not in config.yaml.

discord:
token_env: DISCORD_BOT_TOKEN

The daemon loads ~/.arc/.env at startup using a minimal dotenv parser.


discord.guild_id

TypeDefault
string""

Your Discord server's (guild) ID. When set, the bot ignores messages from other servers. Leave empty to allow the bot to operate in any server it is invited to (not recommended for production).

discord:
guild_id: "1234567890123456789"

discord.thread_mode

TypeDefault
boolfalse

When true, the bot creates a new thread for each message that arrives outside a thread. Threads use persistent named acpx sessions so conversation context is preserved across messages in the same thread.

When false, the bot replies inline in the channel and each message is a one-shot dispatch with no conversation memory.


discord.rate_limit.messages_per_minute

TypeDefault
int5

Maximum number of messages the bot will respond to per channel per 60-second sliding window. Messages that arrive after the limit is reached are silently dropped.

discord:
rate_limit:
messages_per_minute: 5

git

Automatic git operations in agent workspaces.

git.auto_pull

TypeDefault
booltrue

When true, the daemon runs git pull in the agent workspace before each dispatch. This keeps the agent's context files (system prompts, programs, etc.) up to date.


timeouts

Request timeout values in seconds.

timeouts.acpx_request

TypeDefault
int (seconds)300

Maximum time to wait for acpx to return a response. If the timeout is exceeded, the subprocess is killed and a DispatchError is raised. Increase this for agents that run complex or long-running Claude Code tasks.

timeouts.ollama_request

TypeDefault
int (seconds)120

Maximum time to wait for an Ollama API response. Increase for large models on slow hardware.

timeouts.ipc_connect

TypeDefault
int (seconds)5

Maximum time to wait when connecting to the daemon socket. If the daemon does not respond within this time, the CLI treats it as not running and falls back.


output

output.default_format

TypeDefault
stringraw

Default output format. Currently raw is the only supported value.

output.color

TypeDefault
booltrue

Reserved for future use.


logging

logging.log_routing

TypeDefault
booltrue

When true, the daemon appends a JSON record to ~/.arc/logs/routing.jsonl for each dispatched prompt. Records include timestamp, agent name, model, dispatch type, source, and a 100-character prompt preview.

Set to false to disable routing logs (e.g., for high-volume deployments where disk I/O is a concern).