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:
| Order | Path | When 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.
./seeki.toml always wins over the user-level file.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
- Full config reference — every field, every default.
- Reading the logs — verify what got loaded.