Configuration

September 20, 2026 ยท View on GitHub

Settings resolve in this order: command-line flag, WEBCTL_* environment variable, ~/webctl/config.yaml, built-in default. API keys live in a separate file.

Settings

settingenvdefaultmeaning
providerWEBCTL_PROVIDER(auto)provider to put first in the chain
sourcesWEBCTL_SOURCES3providers queried and fused per search
numWEBCTL_NUM20results requested per provider; Jev removes the noise
min_scoreWEBCTL_MIN_SCORE6relevance cut on the 0โ€“10 score
jev.base_urlWEBCTL_JEV_BASE_URLhttps://api.typesafe.aiJev API root
jev.modelWEBCTL_JEV_MODELjev-latestJev model
searxng_urlSEARXNG_URL(none)SearXNG instance; the keys file's searxng_url wins
(keys file) degoog_urlDEGOOG_URL(none)Degoog instance
keys_fileWEBCTL_KEYS_FILE~/secrets/keys.jsonwhere keys live
cooldown.enabledWEBCTL_COOLDOWN_ENABLEDtrueskip rate-limited providers
cooldown.stepsWEBCTL_COOLDOWN_STEPS15m,1h,4h,12h,24h,72hwindow per consecutive failure
cooldown.probe_intervalWEBCTL_COOLDOWN_PROBE_INTERVAL24hone probe this often at the top step
cooldown.quota_startWEBCTL_COOLDOWN_QUOTA_START3step a 402 starts at

config.yaml uses the same names, nested for dots:

provider: parallel
sources: 2
min_score: 2.0
jev:
  model: jev-1.13.0
cooldown:
  steps: [30m, 2h, 8h, 24h, 72h]

Commands

webctl config show            # every setting, effective value, and source
webctl config get sources
webctl config set sources 2   # validated, written to config.yaml
webctl config unset sources
webctl config list            # settings and their meanings
webctl config path

Keys

~/secrets/keys.json (mode 0600), shared with other tools; fields this tool does not know are preserved. Fields: jev_api_key, exa_api_key, parallel_api_key, sonar_api_key, youcom_api_key, brave_api_key, tavily_api_key, firecrawl_api_key, keenable_api_key, serpbase_api_key, serply_api_key, searxng_url, degoog_url. Environment overrides: the same names upper-cased without the _api (JEV_API_KEY, EXA_API_KEY, ... SEARXNG_URL, DEGOOG_URL); see providers for the full table.

webctl setup                  # interactive wizard, validates each key
webctl keys list              # what is set and where it came from
webctl keys set exa           # masked prompt; --value for scripts
webctl keys unset exa
webctl keys validate          # one lightweight call per key

Setting a key clears that provider's cooldown. The Jev key is required; without it only --no-filter searches work. Search keys are optional.

Files

pathcontents
~/webctl/config.yamlsettings
~/webctl/cooldown.jsonprovider cooldown state
~/secrets/keys.jsonAPI keys
~/webctl/evals/*.jsoneval runs (one file each)