Optional$schema?: stringJSON Schema reference for editor completion.
Instance identity and base directory.
Base directory every default path derives from.
Instance name (e.g. acme).
External tools and services.
GitHub CLI.
Optionalaccount?: stringGitHub user or org whose repos the github domain syncs.
Optionalbin?: stringPath to the gh executable. Default: gh on PATH.
OptionalbotUser?: stringGitHub bot user that acts for the instance.
OptionalconfigDir?: stringGH_CONFIG_DIR for gh (auth, hosts). Default: {configDir}/gh-cli.
gog.
Optionalbin?: stringPath to the gog executable. Default: gog on PATH.
Jira.
OptionalapiTokenPath?: stringPath to the file holding the API token. Default: under credentialsDir.
OptionalboardId?: numberAgile board id the backlog jobs work on.
Optionalemail?: stringAccount email the API token belongs to.
OptionalfieldsFilename?: stringFile name of the cached field map at the Jira domain root.
OptionalmaxHistory?: numberMaximum history entries kept per Jira entity file.
OptionalsiteUrl?: stringJira site base URL.
Linear.
OptionalconfigPath?: stringPath to the Linear credential file. Default: under credentialsDir.
OptionalmaxHistory?: numberMaximum history entries kept per Linear entity file.
Notion.
Optionalversion?: stringNotion-Version API header value.
Qdrant.
OptionalapiUrl?: stringQdrant HTTP API base URL. Default: the watcher's vectorStore.url
({configDir}/jeeves-watcher/config.json), else http://localhost:6333.
Set it only when no watcher config names the Qdrant this instance uses.
OptionalserviceName?: stringOS service name the health check restarts (case-sensitive on Windows).
X / Twitter.
Accounts by handle.
Per-job deltas.
Public repo subdirectories mirrored into the content tree (library-sync-mirrors).
The mirrors, run in order (default none: library-sync-mirrors skips).
Optionallocal?: unknownThe instance's own block: core never reads it; the instance plugin's
configSchema validates it and localConfig() returns it.
Path overrides.
OptionalconfigDir?: stringConfig directory. Default: {baseDir}/config.
OptionalcontentDir?: stringContent directory, the default silo's base path. Default: {baseDir}/content.
OptionalcredentialsDir?: stringCredential files. Default: {configDir}/credentials.
OptionalgogHome?: stringgog home (service-account keys, OAuth client credentials, file
keyring). Its own key because it does not sit under configDir on
every instance (some keep it under their credentials dir).
Default: {configDir}/gogcli; GOG_HOME wins.
OptionalscriptsDir?: stringThe instance repo. Default: {baseDir}/jeeves-scripts.
OptionalstateDir?: stringService state. Default: {baseDir}/state.
OptionaltokenMetricsDir?: stringToken metrics output. Default: under stateDir; TOKEN_METRICS_DIR wins.
Which accounts and emails belong to one person (Decision 34).
Optionalpipeline?: {Mail, calendar and refs (the template's pipeline-config.json).
Mail and calendar accounts.
Mail bucket routing.
Domain rules, first match wins.
Bucket names, highest priority first.
Email pipeline settings.
Optionalbackfill?: { accounts: string[]; lookbackDays: number; windowDays: number }Paced historical backfill.
Gmail accounts to backfill.
How far back from now to walk, in days.
Days searched per run, per account.
Email digest.
Slack channel the email digest posts to.
Optionalmeetings?: { archive: boolean }Actions on meeting source emails.
Archive the source email out of INBOX after packaging.
Report Gmail changes (labels, archive) without making them, for every
account. accounts[].reportOnly opts a single account in.
Optionalrespond?: {Assistant-mailbox auto-reply (email-respond).
Senders allowed to trigger a reply: exact addresses or
*@example.com (that domain; not a consumer provider). Must not list
mailbox exactly; a pattern covering it never lets it qualify.
OptionaldryRun?: booleanDiscovery + qualification only: no dispatch, no send, no state writes.
Gmail label applied to a thread after a successful reply.
The mailbox that receives and replies to mail.
Messages processed per run, oldest first (default 3).
Per-thread reply rate limit (default 3/hour).
Mirror each sent reply to Slack (the sender's DM, or a channel the
email asked for). Needs the users:read.email bot scope. Default off.
OptionalgoogleDrive?: unknownGoogle Drive sync block, kept raw here: the google-drive domain validates it, so a mistake in it fails only the Drive job, never every job that loads this config.
Named references (Slack channels, Notion ids, paths) by dotted key.
OptionalpunchList?: {The instance's daily punch list (punch-list-*); absent: both runnables skip.
OptionalcursorFile?: stringHarvest window cursor (default {stateDir}/punch-list/harvest-cursor.json).
Directory of the daily files, harvest/ records and an optional TASK.md.
OptionalinboxDir?: stringWhere the harvest worker writes its report (default {stateDir}/punch-list/inbox).
OptionalinputRoots?: string[]What the harvester's pre-check watches for new input (default: the
default silo's email, slack, meetings and google-drive, plus
{stateDir}/jeeves-watcher/issues.json). {home} and {npmGlobal}
are expanded.
Versioned repos (owner/name) scanned for milestones, with where each component installs (default none).
OptionallockFile?: stringLock held by every runnable write (default {stateDir}/punch-list/punch-list.lock).
OptionalpendingFile?: stringNotifications not yet posted (default {stateDir}/punch-list/status-pending.json).
Days a finished entry stays before it is left off the next day's file (default 30).
This instance's scripts repo: unversioned, so Done means a merged PR.
The deployed clone; a PR is installed once its merge commit is in its HEAD.
owner/name.
Where both runnables post.
Gateway Slack account whose bot token posts (default default).
Conversation id the runnables post to.
OptionalpinnedTs?: stringts of the pinned quick-links message; unset: the harvester leaves it alone.
OptionalspecPath?: stringAbsolute path of the punch-list spec, linked from the pinned message and the harvest task.
The day rolls over in this IANA zone (day boundaries only, not when the runner fires).
Data silos (Decision 28).
OptionaldefaultBasePath?: stringDefault silo base path. Default: paths().contentDir (Decision 28).
Named silos.
OptionalskillReview?: {The daily Skill Workshop review (admin-review-skill-proposals); absent: it skips.
Quiet-day alert threshold, percent of the catalog's character budget.
OptionaloutputDir?: stringReport directory; default slack.channels.<reportChannel>.homeDir, required for a DM or a channel without one.
Gateway Slack account whose bot posts (default default).
Slack conversation the summary and the quiet-day alert go to.
jeeves-server machine key (in the server's own keys) that resolves the report's insider link.
IANA zone of the report date (no default).
What this instance decides about Slack channels (Decision 9).
slack-poll: the most time one channel may take in a run. A channel
with a larger backlog saves its read position and resumes next run, so
it can't starve the channels after it. Keep it well under the job's
timeout.
OptionalchannelMeta?: {slack-refresh-channel-meta (spec 2.6); absent: it skips.
Recent-message window for topics, in days.
Longest description (Slack purpose) the runnable sets.
Channel ids left out.
Channels sent to the worker per run; the rest wait.
OptionaloutputDir?: stringReport directory; default slack.channels.<reportChannel>.homeDir, required when the report goes to a DM.
A written path's first segment to the absolute directory it stands for.
OptionalrelativeRoot?: stringDirectory a back-ticked relative path is resolved against.
OptionalreportAccount?: stringGateway Slack account whose bot posts the summary; default found.
OptionalreportChannel?: stringSummary target: a channel (C/G/D) or a user (U/W, their DM); default the OpenClaw command owner's DM.
OptionalreportTextAccounts?: string[]Gateway Slack accounts whose channels the report may name and quote; default the report target's own.
jeeves-server machine key (in the server's own keys) that resolves the report's insider link.
Regular expressions (case-insensitive) a message must all match to assign a home directory.
IANA zone of the report date (no default).
Longest topic the runnable sets.
false: report only, never set a description.
false: report only, never set a topic.
Per-channel decisions, keyed by channel id.
OptionalnewChannelLookbackDays?: numberslack-poll: how far back to read a channel with no read position yet
(newly joined or discovered). 0 starts from now; unset reads its
full history.
Optionaltranscripts?: { libraryDir?: string; scratchDir?: string; userAgent?: string }Where transcripts-fetch-video files and caches transcripts.
OptionallibraryDir?: stringWhere transcripts are filed (default <default silo>/library/video-transcripts).
OptionalscratchDir?: stringRaw API response cache (default {stateDir}/transcripts).
OptionaluserAgent?: stringUser-Agent sent to the transcript API (default jeeves-scripts/<instance.name>).
Load, validate and cache the instance config. Subsequent calls (without resetConfig) return the cached value regardless of
options.