OAKEN CORE
Alpha

Settings, storage and the event log

Everything here is a command on the running core. It edits one table of config.toml and leaves your comments alone, and it tells you what a change needs before it takes effect.

Examples use the real CLI. A change asks first: without --yes it prints what would change and exits 5. Add --json for the original data.

1

Core settings

oaken settings get                                   # the sections, with a summary each
oaken settings get --section log --json              # one section: every key, value, default, editable, effect
oaken settings set --section log --values '{"level":"DEBUG"}'          # shows the change, exit 5
oaken settings set --section log --values '{"level":"DEBUG"}' --yes    # saves it
oaken reload                                         # core re-reads config.toml in place

Only some keys are editable here. Anything that changes where core listens or keeps data, or that hands text to an outside worker or a LAN backend, is set by hand in config.toml. get --json marks it editable: false with the note set by hand in config.toml, and set refuses it:

log.file cannot be changed here (set by hand in config.toml)
Section Table Holds By hand
log [log] Level, per-logger levels, format, keep days, enabled. file, file_max_bytes, file_backups, events_file
jobs [jobs] Leases, retries, backoff, timeouts, per-kind limits, store and embed defaults. none
swarm [swarm] Agent limits and lease time. enabled, allowed_kinds
router [router] Shortcuts, confidence, token limits, waits, embedder and vector store. lan_allowlist
console [console] palette and mode. port

[api], [queues], [labels], [extensions] and each plugin's table are not here. Plugin settings have their own commands: see Plugins.

What a change costs

Each key has an effect, and the answer to set names it:

Safe by construction

2

The whole file

oaken config validate --text "$(cat config.toml)"    # ok: true, or the error; warnings name plugins that will stay disabled
oaken config save --text "$(cat config.toml)" --yes  # checked first; the old file is kept as config.toml.bak

save writes nothing for a file core would not start on. The backup is one level: the file as it was before this save. A plugin table that does not fit its plugin loads anyway, and comes back as a warning, because that plugin stays disabled until you fix it. The console's /config page does the same as text.

3

Storage

oaken storage info          # data dir, core.db and its write-ahead log, other databases there
oaken storage vacuum --yes  # queue a vacuum job

Sizes are read from the files. vacuum queues the job maintenance.vacuum and returns its job_id. Only one runs at a time (asking again returns the one queued or running, created: false). It refuses when free disk is under 1.1 times the database's size. While it works the database is write-locked: writers wait and readers carry on. Watch it with oaken job (see Jobs).

4

The answer cache

oaken cache stats                         # entries, bytes, entries per analyzer, oldest
oaken cache clear --yes                   # all of it
oaken cache clear --analyzer triager.llm --yes   # one analyzer's answers

The cache holds model answers keyed by what produced them. Clearing costs only the calls it had saved. See The model router.

5

What happened: events, the log and the change log

oaken events tail --limit 20                    # recent events, including from before core's last restart
oaken events tail --kinds JobStateChanged --since 2026-11-07T09:00:00
oaken watch                                     # follow events live
oaken log tail --level warning --limit 50       # the log; also --plugin KIND/NAME or --stage QUEUE
oaken log list --limit 20                       # the change log: who changed what
6

Is it healthy?

oaken status prints the version, each queue (queued, running, failed, paused, oldest wait) and how many plugins are healthy. It exits 3 when core is not running.