Inference Atlas · documentation

Configuration

docs/tui/configuration.md Last pushed 7 September 2026

Everything lives in one TOML file:

~/.config/inference-atlas/config.toml

It is written for you on first run, with every default present and commented. Every key is optional — an empty or missing file is a valid configuration, and so is a broken one: if the TOML fails to parse, the app runs on defaults rather than refusing to start.

Set XDG_CONFIG_HOME to move it.

The whole file

# inference-atlas TUI configuration. Every key is optional; these are the defaults.

[data]
# Where the compiled data shards are fetched from (the deployed site).
url = "https://0xbakeer.github.io/inference-atlas"
# Point at a local checkout instead — then nothing is fetched:
# repo = "~/Projects/inference-atlas"
# Background data refresh, in minutes. 0 turns it off.
refresh_minutes = 15

[ui]
# auto | truecolor | 256 | mono
color = "auto"

[recipes]
# Generated recipe files land here.
dir = "~/inference-atlas/recipes"

# Agent targets for "send recipe". {recipe} becomes the recipe file path.
# mode = "copy" copies the command to the clipboard; "run" executes it from the TUI.
[agents.claude]
command = 'claude "$(cat {recipe})"'
mode = "copy"

[agents.opencode]
command = 'opencode run "$(cat {recipe})"'
mode = "copy"

# The box every verdict is judged against. The TUI detects this machine at startup and
# asks you to pick when it cannot recognise it; press 'b' to change it at any time and
# this section is rewritten for you. count is how many of that device you have.
# [target]
# hardware = "nvidia-rtx-6000-ada"
# count = 3

[data]

Key Type Default Means
url string https://0xbakeer.github.io/inference-atlas Base URL of the deployed site. Shards are read from <url>/data/
repo string unset Path to a local checkout. When set, the network is never touched — the app reads app/public/data/ and the raw registries from that directory
refresh_minutes number 15 How often to re-check for new data in the background. 0 disables it; r still refreshes manually

repo accepts ~. Setting it is the offline/development mode; see Data and syncing.

A note on refresh_minutes: the published shards sit behind a CDN with a ten-minute cache, so polling faster than that cannot see fresher data. Fifteen minutes is deliberately just above it.

[ui]

Key Type Default Means
color auto | truecolor | 256 | mono auto Force a colour depth instead of detecting it

auto reads NO_COLOR, TERM and COLORTERM. NO_COLOR wins over an explicit setting. An unrecognised value falls back to auto rather than erroring. See Reading the charts.

[recipes]

Key Type Default Means
dir string ~/inference-atlas/recipes Where generated recipe files are written. Created if missing

[agents.<name>]

Any number of them. The name is yours; it appears in the recipe view, and the numbers 19 select them in the order they appear.

Key Type Default Means
command string Shell command. {recipe} is replaced with the generated file's path. Required — an entry without one is ignored
mode copy | run copy copy puts the command on your clipboard; run executes it and shows the output

Two defaults (claude, opencode) are always present. Defining an agent with the same name replaces it; defining new ones adds to them.

[agents.gpu-box]
command = 'ssh gpu-box "cd ~/work && claude -p \"$(cat {recipe})\""'
mode = "run"

[target]

Key Type Default Means
hardware string unset A hardware registry id. When unset, the app uses whatever it detects
count number 1 How many of that device. Values below 1 are floored to 1

This is the one section the app writes. Selecting a box in the picker (or passing --hardware / --count) rewrites it — and only it. The rewrite is a surgical text replacement, so your comments, key order and every other setting survive byte for byte.

Valid ids are whatever the registry holds; the picker lists them all, or see hardware/ in the repository.

Every path the app touches

Path Written by What
~/.config/inference-atlas/config.toml first run, and target selection This file
~/.cache/inference-atlas/data/ every sync Compiled shards: manifest.json, index.json, registry.json, coverage.json, workloads.json, datasets.json, stats.json, contributors.json, gaps.json
~/.cache/inference-atlas/data/runs/… on demand Full run records, cached permanently (a run id never changes content)
~/.cache/inference-atlas/data/engines/… on demand Engine version parameter tables
~/.cache/inference-atlas/data/.sync.json every sync The ETag of the last manifest fetch
~/inference-atlas/recipes/ pressing g Generated recipes

XDG_CONFIG_HOME and XDG_CACHE_HOME are honoured. Nothing is written outside these.

Precedence

For the target box:

--hardware / --count  >  [target] in config  >  detection

A command-line selection is also persisted, so it becomes the config value for next time.

For data:

--repo  >  [data].repo  >  --url  >  [data].url

Every number here was measured. Open an issue if one looks wrong.

All documentation