Config locations

SeeKi reads a single TOML file at start-up. It looks in two places, in order, and uses the first one it finds. If neither is present, the binary drops into the first-run setup wizard instead of erroring out.

Lookup order

From top to bottom — the first match wins:

OrderPathWhen to use
1 ./seeki.toml (current working directory) Per-project config. Travels with the folder. Overrides the user-level file.
2 ~/.config/seeki/config.toml (XDG user config) Personal default when you always connect to the same database.

How to read this diagram

The arrow is the search path the binary walks at start-up. The first file that exists is loaded in full. The second is never consulted.

Only one file is read

SeeKi does not merge settings across both locations. The first file found is used in full. If you want to adjust one value for a project, copy the user-level file into the project and edit the copy.

Validate which file is loaded

SeeKi logs the path it opened on the second line of output:

INFO seeki: Loaded config from seeki.toml
INFO seeki: SeeKi listening on http://127.0.0.1:3141

If the path isn't the one you expected, check for a stray seeki.toml in the working directory — it will shadow the user-level file.

Validate the TOML itself

Any TOML parser will flag syntax errors offline. A quick sanity check with Python's standard library:

python3 -c "import tomllib; tomllib.load(open('seeki.toml','rb')); print('ok')"

Or let SeeKi do it — start the binary. An invalid file produces a clear error that names the path and the offending line; see Troubleshooting for the exact message.

Secrets file

Passphrases and passwords never live in seeki.toml. They go in a sibling file named .seeki.secrets in the same working directory. SeeKi loads it automatically if it exists; if it doesn't, SeeKi carries on with no secrets set.

[ssh]
key_passphrase = "…"
password = "…"

Keep it out of version control

Add .seeki.secrets to your .gitignore. The file is deliberately named with a leading dot so most ls commands hide it by default.

Next