Everything lives in ~/.antares/config.yaml. Four ways to change it, all
writing the same file:
antares config get model.default
antares config set model.default anthropic/claude-sonnet-4.5
antares config path # where the file is
antares config edit # open it in $EDITOR- The Settings page in the dashboard is a form built from the schema, so it always matches the binary.
/config model.defaultreads and/config model.default <value>writes, from any conversation.- Environment variables override the file.
~/.antares/.envis loaded first.
Settings are grouped into three tiers so the Settings page opens on what matters: essential (a handful you will set on day one), common, and advanced.
~/.antares/
config.yaml settings
.env secrets, loaded automatically
antares.db sessions, messages, memory, vectors, schedules
skills/ the skill library
browser/ the browser profile
ANTARES_HOME relocates the lot — the way to run two instances on one machine.
model:
default: anthropic/claude-sonnet-4.5
provider: openrouter
auxiliary: "" # cheap model for titles, summaries, verification
temperature: 0.7
max_tokens: 8192
context_window: 0 # 0 asks the provider
reasoning_effort: medium
providers:
openrouter:
kind: openai-compatible
base_url: https://openrouter.ai/api/v1
api_key: sk-or-…
anthropic:
kind: anthropic
base_url: https://api.anthropic.com/v1
api_key: sk-ant-…
ollama:
kind: openai-compatible
base_url: http://127.0.0.1:11434/v1kind |
Behaviour |
|---|---|
openai-compatible |
The default shape. OpenRouter, Together, Groq, Ollama, LM Studio, vLLM |
openai |
OpenAI proper |
anthropic |
Extended thinking and prompt caching |
gemini |
Thinking budgets |
custom |
Anything else with a base_url |
model.auxiliary is worth setting. Titles, compaction summaries, verification,
and goal judging all use it, and a small model does those as well as a large one
for a fraction of the cost.
Keys can come from the environment instead:
ANTHROPIC_API_KEY=…
OPENAI_API_KEY=…
OPENROUTER_API_KEY=…
GEMINI_API_KEY=…database:
driver: sqlite # sqlite | postgres | memory
dsn: ~/.antares/antares.db
wal: truedatabase:
driver: postgres
dsn: postgres://user:pass@localhost:5432/antares?sslmode=disable
max_conns: 10Both schemas are created on first run. SQLite searches conversations with FTS5,
Postgres with tsvector. memory keeps everything in RAM and is for tests.
tools:
toolset: default # minimal | coding | research | browser | default | all
enabled: [] # add to the toolset
disabled: [] # remove from it
approval_mode: auto # auto | prompt | deny
max_output_chars: 30000
timeouts:
terminal: 120See Tools for what is in each toolset.
Web search:
tools:
web_search:
provider: duckduckgo # duckduckgo | brave | tavily | searxng | none
api_key: ""
max_results: 8DuckDuckGo needs no key. The others do, and are better.
Browser: see Browser.
terminal:
backend: local # local | docker | ssh
cwd: ~/antares-workspace
timeout: 120
shell: "" # empty picks the platform default
blocked_commands: []
allow_network: true
docker_image: ""
ssh_host: ""The shell is persistent: cd, exported variables, and activated environments
survive between calls within a session.
agent:
max_turns: 200
workspace: ~/antares-workspace
personality: default
system_prompt_extra: ""
timezone: Local
language: auto
repeat_limit: 3
verify_replies: false
verify_max: 2
goal_max_iterations: 10system_prompt_extra is appended to every system prompt — the place for
standing instructions about how you want it to work.
The last four are the harness. See Harness.
memory:
memory_enabled: true
user_profile_enabled: true
memory_char_limit: 4000
search_limit: 10
rag:
enabled: false
provider: builtin # builtin | enowx
embed_model: text-embedding-3-small
chunk_size: 1200
chunk_overlap: 150
top_k: 8
hybrid: trueSee Memory and RAG.
compression:
enabled: true
threshold: 0.75 # fraction of the context window
target_ratio: 0.5
protect_last_n: 6
protect_first_n: 2As a conversation approaches the context window, older turns are summarised while recent ones stay verbatim. A tool call is never separated from its result, which would leave the model reading a call with no answer.
skills:
enabled: true
dirs: [~/.antares/skills]
auto_create: true
creation_nudge_interval: 20dirs is searched in order and later directories win, so a personal copy can
override a shared one. See Skills.
server:
host: 0.0.0.0
port: 8787
auth_token: "" # empty leaves the dashboard open
cors_origins: []
public_url: ""
trust_proxy: falseSet auth_token for anything reachable beyond a private network. Set
public_url when behind a reverse proxy so generated links are right.
cron:
enabled: true
timezone: Local
max_concurrent: 2
gateway:
enabled: false
telegram:
enabled: false
bot_token: ""
require_pairing: true
discord:
enabled: false
bot_token: ""
mcp:
enabled: false
servers: {}See Scheduling, Channels, and MCP.
| Variable | Overrides |
|---|---|
ANTARES_HOME |
Where everything lives |
ANTARES_CONFIG |
The config file path |
ANTARES_MODEL |
model.default |
ANTARES_PROVIDER |
model.provider |
ANTARES_API_KEY |
model.api_key |
ANTARES_HOST / ANTARES_PORT |
server.host / server.port |
ANTARES_AUTH_TOKEN |
server.auth_token |
ANTARES_DB_DRIVER / ANTARES_DB_DSN |
database.* |
DATABASE_URL |
database.dsn |
ANTARES_LOG_LEVEL |
logging.level |
ANTARES_WORKSPACE |
agent.workspace |
ANTARES_RAG_ENABLED / ANTARES_RAG_PROVIDER |
rag.* |
GITHUB_TOKEN |
Raises the hub's GitHub rate limit |
antares doctorOne pass over the config file, workspace, database, provider credentials, and retrieval backend, reporting what is wrong and what to do about it.