One TOML file governs everything, versioned by the
kp-config/v1 contract.
A complete, working example ships at the repo root as
curator.example.toml;
curator init scaffolds from it.
Three binding rules:
Versioned via the top-level schema key.
Unknown keys warn, never fail — a config written for a newer
minor version loads on an older binary.
Secrets only via env indirection — *_env keys name an
environment variable; secret values never appear in the file.
Discovery
Every command takes --config <path>. Without it, Curator looks in
order:
$CURATOR_CONFIG (preferred) or $KP_CONFIG — an explicit path;
./curator.toml;
./kp.toml — the legacy name, still accepted; loading it warns and
suggests renaming. It is deprecated, not removed: existing setups
keep working.
Curator's original env names carry the KP_ prefix; every one has a
preferred CURATOR_ alias. CURATOR_<X> wins when both are set;
KP_<X> keeps working — existing deployments never break.
purpose
preferred
legacy (still honored)
explicit config path
CURATOR_CONFIG
KP_CONFIG
Zotero API key (default api_key_env)
CURATOR_ZOTERO_KEY
KP_ZOTERO_KEY
MCP bearer token (default bearer_token_env)
CURATOR_MCP_TOKEN
KP_MCP_TOKEN
The *_env config keys name a variable of your choosing; the alias
pairing applies to whatever name you configure, in both directions — a
KP_<X>-named variable is also looked up as CURATOR_<X> (preferred)
and vice versa. RUST_LOG additionally controls log verbosity
(default warn, stderr).