Configuration
Pick a provider, set your model, and learn where hara keeps its config — plus env-var overrides and profiles.
Providers
hara is provider-agnostic. It ships with first-class support for Anthropic Claude and Qwen (free OAuth tier), and talks to anything OpenAI-compatible — OpenAI, GLM, DeepSeek, or a local model server.
# Anthropic
export ANTHROPIC_API_KEY=sk-ant-...
hara config set provider anthropic
hara config set model claude-opus-4-8
# Qwen — free device login (no key)
hara login qwen
# Any OpenAI-compatible endpoint
hara config set provider openai
hara config set baseURL https://your-endpoint/v1
hara config set apiKey sk-...
hara config set model your-model-idRun hara doctor any time to check that your provider, auth, and model resolve.
The config file
Global config lives in ~/.hara/config.json (written 0600 — it may hold an API key). A project
can override any key with a .hara/config.json at its root.
hara config set <key> <value> # write a value
hara config get [key] # read config (apiKey masked)
hara config path # print the config file pathKeys worth knowing
| Key | Values | What it does |
|---|---|---|
| provider | anthropic · qwen · openai · hara-gateway | model provider |
| model | model id | the main coding model |
| baseURL / apiKey | string | override endpoint / key |
| approval | suggest · auto-edit · full-auto | how much hara does without asking — see Security & Permissions |
| sandbox | off · workspace-write · read-only | shell sandbox (macOS) |
| visionModel | model id | describer model so text-only models can "see" images |
| embedProvider | off · ollama · qwen · openai | enable semantic search (hara index) |
| routeModel | model id | cheap model for trivial turns; primary stays for coding |
| fallbackModel | model id | retry on this model if the primary errors out |
| autoCompact | true · false | auto-summarize before the context window overflows |
| theme / notify / vimMode | — | UI, notifications, modal input |
Environment overrides
Every config key has an HARA_<KEY> env override (uppercased), which wins over the config file —
handy for CI, cron, and one-offs.
HARA_MODEL=claude-haiku-4-5 HARA_APPROVAL=full-auto hara -p "bump the version"Common ones: HARA_PROVIDER, HARA_MODEL, HARA_API_KEY, HARA_BASE_URL, HARA_APPROVAL,
HARA_SANDBOX, HARA_MAX_CONCURRENCY, HARA_TUI=0 (classic readline), HARA_PROFILE.
Profiles
Stash named bundles of settings in ~/.hara/config.json and switch with --profile (or
HARA_PROFILE):
{
"provider": "anthropic",
"model": "claude-opus-4-8",
"profiles": {
"fast": { "model": "claude-haiku-4-5", "approval": "full-auto" },
"review": { "model": "claude-opus-4-8", "approval": "suggest" }
}
}hara --profile fast -p "regenerate the snapshot tests"Where hara keeps things
| Path | Holds |
|---|---|
| ~/.hara/config.json | global config (0600) |
| ~/.hara/roles/ · .hara/roles/ | role definitions (global · project) |
| ~/.hara/memory/ · .hara/memory/ | durable memory |
| ~/.hara/skills/ · .hara/skills/ | skills |
| ~/.hara/sessions/ | saved, resumable conversations |
| ~/.hara/workspace/ | default gateway working dir (safe, dir-free) |
| ~/.hara/cron/jobs.json | scheduled tasks |
| ~/.hara/checkpoints/ | file-state snapshots (outside your repo) |
| .hara/permissions.json | bash command rules |
| AGENTS.md · MEMORY.md | per-project conventions & memory |