openclaw/schemas/clawdbot.d.ts
CJ Winslow d97d90b10e allow $schema key in config for IDE integration
Users can now add "$schema": "./schemas/clawdbot.schema.json" to their
clawdbot.json for autocomplete without validation errors.
2026-01-26 23:50:35 -08:00

2822 lines
75 KiB
TypeScript

/* eslint-disable */
/**
* This file was automatically generated by json-schema-to-typescript.
* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
* and run json-schema-to-typescript to regenerate this file.
*/
export interface ClawdbotConfig {
$schema?: string;
meta?: {
lastTouchedVersion?: string;
lastTouchedAt?: string;
};
env?: {
shellEnv?: {
enabled?: boolean;
timeoutMs?: number;
};
vars?: {
[k: string]: string;
};
[k: string]: string;
};
wizard?: {
lastRunAt?: string;
lastRunVersion?: string;
lastRunCommit?: string;
lastRunCommand?: string;
lastRunMode?: "local" | "remote";
};
diagnostics?: {
enabled?: boolean;
flags?: string[];
otel?: {
enabled?: boolean;
endpoint?: string;
protocol?: "http/protobuf" | "grpc";
headers?: {
[k: string]: string;
};
serviceName?: string;
traces?: boolean;
metrics?: boolean;
logs?: boolean;
sampleRate?: number;
flushIntervalMs?: number;
};
cacheTrace?: {
enabled?: boolean;
filePath?: string;
includeMessages?: boolean;
includePrompt?: boolean;
includeSystem?: boolean;
};
};
logging?: {
level?: "silent" | "fatal" | "error" | "warn" | "info" | "debug" | "trace";
file?: string;
consoleLevel?: "silent" | "fatal" | "error" | "warn" | "info" | "debug" | "trace";
consoleStyle?: "pretty" | "compact" | "json";
redactSensitive?: "off" | "tools";
redactPatterns?: string[];
};
update?: {
channel?: "stable" | "beta" | "dev";
checkOnStart?: boolean;
};
browser?: {
enabled?: boolean;
evaluateEnabled?: boolean;
cdpUrl?: string;
remoteCdpTimeoutMs?: number;
remoteCdpHandshakeTimeoutMs?: number;
color?: string;
executablePath?: string;
headless?: boolean;
noSandbox?: boolean;
attachOnly?: boolean;
defaultProfile?: string;
snapshotDefaults?: {
mode?: "efficient";
};
profiles?: {
[k: string]: {
cdpPort?: number;
cdpUrl?: string;
driver?: "clawd" | "extension";
color: string;
};
};
};
ui?: {
seamColor?: string;
assistant?: {
name?: string;
avatar?: string;
};
};
auth?: {
profiles?: {
[k: string]: {
provider: string;
mode: "api_key" | "oauth" | "token";
email?: string;
};
};
order?: {
[k: string]: string[];
};
cooldowns?: {
billingBackoffHours?: number;
billingBackoffHoursByProvider?: {
[k: string]: number;
};
billingMaxHours?: number;
failureWindowHours?: number;
};
};
models?: {
mode?: "merge" | "replace";
providers?: {
[k: string]: {
baseUrl: string;
apiKey?: string;
auth?: "api-key" | "aws-sdk" | "oauth" | "token";
api?:
| "openai-completions"
| "openai-responses"
| "anthropic-messages"
| "google-generative-ai"
| "github-copilot"
| "bedrock-converse-stream";
headers?: {
[k: string]: string;
};
authHeader?: boolean;
models: {
id: string;
name: string;
api?:
| "openai-completions"
| "openai-responses"
| "anthropic-messages"
| "google-generative-ai"
| "github-copilot"
| "bedrock-converse-stream";
reasoning?: boolean;
input?: ("text" | "image")[];
cost?: {
input?: number;
output?: number;
cacheRead?: number;
cacheWrite?: number;
};
contextWindow?: number;
maxTokens?: number;
headers?: {
[k: string]: string;
};
compat?: {
supportsStore?: boolean;
supportsDeveloperRole?: boolean;
supportsReasoningEffort?: boolean;
maxTokensField?: "max_completion_tokens" | "max_tokens";
};
}[];
};
};
bedrockDiscovery?: {
enabled?: boolean;
region?: string;
providerFilter?: string[];
refreshInterval?: number;
defaultContextWindow?: number;
defaultMaxTokens?: number;
};
};
nodeHost?: {
browserProxy?: {
enabled?: boolean;
allowProfiles?: string[];
};
};
agents?: {
defaults?: {
model?: {
primary?: string;
fallbacks?: string[];
};
imageModel?: {
primary?: string;
fallbacks?: string[];
};
models?: {
[k: string]: {
alias?: string;
params?: {
[k: string]: unknown;
};
};
};
workspace?: string;
repoRoot?: string;
skipBootstrap?: boolean;
bootstrapMaxChars?: number;
userTimezone?: string;
timeFormat?: "auto" | "12" | "24";
envelopeTimezone?: string;
envelopeTimestamp?: "on" | "off";
envelopeElapsed?: "on" | "off";
contextTokens?: number;
cliBackends?: {
[k: string]: {
command: string;
args?: string[];
output?: "json" | "text" | "jsonl";
resumeOutput?: "json" | "text" | "jsonl";
input?: "arg" | "stdin";
maxPromptArgChars?: number;
env?: {
[k: string]: string;
};
clearEnv?: string[];
modelArg?: string;
modelAliases?: {
[k: string]: string;
};
sessionArg?: string;
sessionArgs?: string[];
resumeArgs?: string[];
sessionMode?: "always" | "existing" | "none";
sessionIdFields?: string[];
systemPromptArg?: string;
systemPromptMode?: "append" | "replace";
systemPromptWhen?: "first" | "always" | "never";
imageArg?: string;
imageMode?: "repeat" | "list";
serialize?: boolean;
};
};
memorySearch?: {
enabled?: boolean;
sources?: ("memory" | "sessions")[];
experimental?: {
sessionMemory?: boolean;
};
provider?: "openai" | "local" | "gemini";
remote?: {
baseUrl?: string;
apiKey?: string;
headers?: {
[k: string]: string;
};
batch?: {
enabled?: boolean;
wait?: boolean;
concurrency?: number;
pollIntervalMs?: number;
timeoutMinutes?: number;
};
};
fallback?: "openai" | "gemini" | "local" | "none";
model?: string;
local?: {
modelPath?: string;
modelCacheDir?: string;
};
store?: {
driver?: "sqlite";
path?: string;
vector?: {
enabled?: boolean;
extensionPath?: string;
};
};
chunking?: {
tokens?: number;
overlap?: number;
};
sync?: {
onSessionStart?: boolean;
onSearch?: boolean;
watch?: boolean;
watchDebounceMs?: number;
intervalMinutes?: number;
sessions?: {
deltaBytes?: number;
deltaMessages?: number;
};
};
query?: {
maxResults?: number;
minScore?: number;
hybrid?: {
enabled?: boolean;
vectorWeight?: number;
textWeight?: number;
candidateMultiplier?: number;
};
};
cache?: {
enabled?: boolean;
maxEntries?: number;
};
};
contextPruning?: {
mode?: "off" | "cache-ttl";
ttl?: string;
keepLastAssistants?: number;
softTrimRatio?: number;
hardClearRatio?: number;
minPrunableToolChars?: number;
tools?: {
allow?: string[];
deny?: string[];
};
softTrim?: {
maxChars?: number;
headChars?: number;
tailChars?: number;
};
hardClear?: {
enabled?: boolean;
placeholder?: string;
};
};
compaction?: {
mode?: "default" | "safeguard";
reserveTokensFloor?: number;
maxHistoryShare?: number;
memoryFlush?: {
enabled?: boolean;
softThresholdTokens?: number;
prompt?: string;
systemPrompt?: string;
};
};
thinkingDefault?: "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
verboseDefault?: "off" | "on" | "full";
elevatedDefault?: "off" | "on" | "ask" | "full";
blockStreamingDefault?: "off" | "on";
blockStreamingBreak?: "text_end" | "message_end";
blockStreamingChunk?: {
minChars?: number;
maxChars?: number;
breakPreference?: "paragraph" | "newline" | "sentence";
};
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
humanDelay?: {
mode?: "off" | "natural" | "custom";
minMs?: number;
maxMs?: number;
};
timeoutSeconds?: number;
mediaMaxMb?: number;
typingIntervalSeconds?: number;
typingMode?: "never" | "instant" | "thinking" | "message";
heartbeat?: {
every?: string;
activeHours?: {
start?: string;
end?: string;
timezone?: string;
};
model?: string;
session?: string;
includeReasoning?: boolean;
target?: string;
to?: string;
prompt?: string;
ackMaxChars?: number;
};
maxConcurrent?: number;
subagents?: {
maxConcurrent?: number;
archiveAfterMinutes?: number;
model?:
| string
| {
primary?: string;
fallbacks?: string[];
};
};
sandbox?: {
mode?: "off" | "non-main" | "all";
workspaceAccess?: "none" | "ro" | "rw";
sessionToolsVisibility?: "spawned" | "all";
scope?: "session" | "agent" | "shared";
perSession?: boolean;
workspaceRoot?: string;
docker?: {
image?: string;
containerPrefix?: string;
workdir?: string;
readOnlyRoot?: boolean;
tmpfs?: string[];
network?: string;
user?: string;
capDrop?: string[];
env?: {
[k: string]: string;
};
setupCommand?: string;
pidsLimit?: number;
memory?: string | number;
memorySwap?: string | number;
cpus?: number;
ulimits?: {
[k: string]:
| string
| number
| {
soft?: number;
hard?: number;
};
};
seccompProfile?: string;
apparmorProfile?: string;
dns?: string[];
extraHosts?: string[];
binds?: string[];
};
browser?: {
enabled?: boolean;
image?: string;
containerPrefix?: string;
cdpPort?: number;
vncPort?: number;
noVncPort?: number;
headless?: boolean;
enableNoVnc?: boolean;
allowHostControl?: boolean;
autoStart?: boolean;
autoStartTimeoutMs?: number;
};
prune?: {
idleHours?: number;
maxAgeDays?: number;
};
};
};
list?: {
id: string;
default?: boolean;
name?: string;
workspace?: string;
agentDir?: string;
model?:
| string
| {
primary?: string;
fallbacks?: string[];
};
memorySearch?: {
enabled?: boolean;
sources?: ("memory" | "sessions")[];
experimental?: {
sessionMemory?: boolean;
};
provider?: "openai" | "local" | "gemini";
remote?: {
baseUrl?: string;
apiKey?: string;
headers?: {
[k: string]: string;
};
batch?: {
enabled?: boolean;
wait?: boolean;
concurrency?: number;
pollIntervalMs?: number;
timeoutMinutes?: number;
};
};
fallback?: "openai" | "gemini" | "local" | "none";
model?: string;
local?: {
modelPath?: string;
modelCacheDir?: string;
};
store?: {
driver?: "sqlite";
path?: string;
vector?: {
enabled?: boolean;
extensionPath?: string;
};
};
chunking?: {
tokens?: number;
overlap?: number;
};
sync?: {
onSessionStart?: boolean;
onSearch?: boolean;
watch?: boolean;
watchDebounceMs?: number;
intervalMinutes?: number;
sessions?: {
deltaBytes?: number;
deltaMessages?: number;
};
};
query?: {
maxResults?: number;
minScore?: number;
hybrid?: {
enabled?: boolean;
vectorWeight?: number;
textWeight?: number;
candidateMultiplier?: number;
};
};
cache?: {
enabled?: boolean;
maxEntries?: number;
};
};
humanDelay?: {
mode?: "off" | "natural" | "custom";
minMs?: number;
maxMs?: number;
};
heartbeat?: {
every?: string;
activeHours?: {
start?: string;
end?: string;
timezone?: string;
};
model?: string;
session?: string;
includeReasoning?: boolean;
target?: string;
to?: string;
prompt?: string;
ackMaxChars?: number;
};
identity?: {
name?: string;
theme?: string;
emoji?: string;
avatar?: string;
};
groupChat?: {
mentionPatterns?: string[];
historyLimit?: number;
};
subagents?: {
allowAgents?: string[];
model?:
| string
| {
primary?: string;
fallbacks?: string[];
};
};
sandbox?: {
mode?: "off" | "non-main" | "all";
workspaceAccess?: "none" | "ro" | "rw";
sessionToolsVisibility?: "spawned" | "all";
scope?: "session" | "agent" | "shared";
perSession?: boolean;
workspaceRoot?: string;
docker?: {
image?: string;
containerPrefix?: string;
workdir?: string;
readOnlyRoot?: boolean;
tmpfs?: string[];
network?: string;
user?: string;
capDrop?: string[];
env?: {
[k: string]: string;
};
setupCommand?: string;
pidsLimit?: number;
memory?: string | number;
memorySwap?: string | number;
cpus?: number;
ulimits?: {
[k: string]:
| string
| number
| {
soft?: number;
hard?: number;
};
};
seccompProfile?: string;
apparmorProfile?: string;
dns?: string[];
extraHosts?: string[];
binds?: string[];
};
browser?: {
enabled?: boolean;
image?: string;
containerPrefix?: string;
cdpPort?: number;
vncPort?: number;
noVncPort?: number;
headless?: boolean;
enableNoVnc?: boolean;
allowHostControl?: boolean;
autoStart?: boolean;
autoStartTimeoutMs?: number;
};
prune?: {
idleHours?: number;
maxAgeDays?: number;
};
};
tools?: {
profile?: "minimal" | "coding" | "messaging" | "full";
allow?: string[];
alsoAllow?: string[];
deny?: string[];
byProvider?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
profile?: "minimal" | "coding" | "messaging" | "full";
};
};
elevated?: {
enabled?: boolean;
allowFrom?: {
[k: string]: (string | number)[];
};
};
exec?: {
host?: "sandbox" | "gateway" | "node";
security?: "deny" | "allowlist" | "full";
ask?: "off" | "on-miss" | "always";
node?: string;
pathPrepend?: string[];
safeBins?: string[];
backgroundMs?: number;
timeoutSec?: number;
approvalRunningNoticeMs?: number;
cleanupMs?: number;
notifyOnExit?: boolean;
applyPatch?: {
enabled?: boolean;
allowModels?: string[];
};
};
sandbox?: {
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
};
}[];
};
tools?: {
profile?: "minimal" | "coding" | "messaging" | "full";
allow?: string[];
alsoAllow?: string[];
deny?: string[];
byProvider?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
profile?: "minimal" | "coding" | "messaging" | "full";
};
};
web?: {
search?: {
enabled?: boolean;
provider?: "brave" | "perplexity";
apiKey?: string;
maxResults?: number;
timeoutSeconds?: number;
cacheTtlMinutes?: number;
perplexity?: {
apiKey?: string;
baseUrl?: string;
model?: string;
};
};
fetch?: {
enabled?: boolean;
maxChars?: number;
timeoutSeconds?: number;
cacheTtlMinutes?: number;
maxRedirects?: number;
userAgent?: string;
};
};
media?: {
models?: {
provider?: string;
model?: string;
capabilities?: ("image" | "audio" | "video")[];
type?: "provider" | "cli";
command?: string;
args?: string[];
prompt?: string;
maxChars?: number;
maxBytes?: number;
timeoutSeconds?: number;
language?: string;
providerOptions?: {
[k: string]: {
[k: string]: string | number | boolean;
};
};
deepgram?: {
detectLanguage?: boolean;
punctuate?: boolean;
smartFormat?: boolean;
};
baseUrl?: string;
headers?: {
[k: string]: string;
};
profile?: string;
preferredProfile?: string;
}[];
concurrency?: number;
image?: {
enabled?: boolean;
scope?: {
default?: "allow" | "deny";
rules?: {
action: "allow" | "deny";
match?: {
channel?: string;
chatType?: "direct" | "group" | "channel";
keyPrefix?: string;
};
}[];
};
maxBytes?: number;
maxChars?: number;
prompt?: string;
timeoutSeconds?: number;
language?: string;
providerOptions?: {
[k: string]: {
[k: string]: string | number | boolean;
};
};
deepgram?: {
detectLanguage?: boolean;
punctuate?: boolean;
smartFormat?: boolean;
};
baseUrl?: string;
headers?: {
[k: string]: string;
};
attachments?: {
mode?: "first" | "all";
maxAttachments?: number;
prefer?: "first" | "last" | "path" | "url";
};
models?: {
provider?: string;
model?: string;
capabilities?: ("image" | "audio" | "video")[];
type?: "provider" | "cli";
command?: string;
args?: string[];
prompt?: string;
maxChars?: number;
maxBytes?: number;
timeoutSeconds?: number;
language?: string;
providerOptions?: {
[k: string]: {
[k: string]: string | number | boolean;
};
};
deepgram?: {
detectLanguage?: boolean;
punctuate?: boolean;
smartFormat?: boolean;
};
baseUrl?: string;
headers?: {
[k: string]: string;
};
profile?: string;
preferredProfile?: string;
}[];
};
audio?: {
enabled?: boolean;
scope?: {
default?: "allow" | "deny";
rules?: {
action: "allow" | "deny";
match?: {
channel?: string;
chatType?: "direct" | "group" | "channel";
keyPrefix?: string;
};
}[];
};
maxBytes?: number;
maxChars?: number;
prompt?: string;
timeoutSeconds?: number;
language?: string;
providerOptions?: {
[k: string]: {
[k: string]: string | number | boolean;
};
};
deepgram?: {
detectLanguage?: boolean;
punctuate?: boolean;
smartFormat?: boolean;
};
baseUrl?: string;
headers?: {
[k: string]: string;
};
attachments?: {
mode?: "first" | "all";
maxAttachments?: number;
prefer?: "first" | "last" | "path" | "url";
};
models?: {
provider?: string;
model?: string;
capabilities?: ("image" | "audio" | "video")[];
type?: "provider" | "cli";
command?: string;
args?: string[];
prompt?: string;
maxChars?: number;
maxBytes?: number;
timeoutSeconds?: number;
language?: string;
providerOptions?: {
[k: string]: {
[k: string]: string | number | boolean;
};
};
deepgram?: {
detectLanguage?: boolean;
punctuate?: boolean;
smartFormat?: boolean;
};
baseUrl?: string;
headers?: {
[k: string]: string;
};
profile?: string;
preferredProfile?: string;
}[];
};
video?: {
enabled?: boolean;
scope?: {
default?: "allow" | "deny";
rules?: {
action: "allow" | "deny";
match?: {
channel?: string;
chatType?: "direct" | "group" | "channel";
keyPrefix?: string;
};
}[];
};
maxBytes?: number;
maxChars?: number;
prompt?: string;
timeoutSeconds?: number;
language?: string;
providerOptions?: {
[k: string]: {
[k: string]: string | number | boolean;
};
};
deepgram?: {
detectLanguage?: boolean;
punctuate?: boolean;
smartFormat?: boolean;
};
baseUrl?: string;
headers?: {
[k: string]: string;
};
attachments?: {
mode?: "first" | "all";
maxAttachments?: number;
prefer?: "first" | "last" | "path" | "url";
};
models?: {
provider?: string;
model?: string;
capabilities?: ("image" | "audio" | "video")[];
type?: "provider" | "cli";
command?: string;
args?: string[];
prompt?: string;
maxChars?: number;
maxBytes?: number;
timeoutSeconds?: number;
language?: string;
providerOptions?: {
[k: string]: {
[k: string]: string | number | boolean;
};
};
deepgram?: {
detectLanguage?: boolean;
punctuate?: boolean;
smartFormat?: boolean;
};
baseUrl?: string;
headers?: {
[k: string]: string;
};
profile?: string;
preferredProfile?: string;
}[];
};
};
links?: {
enabled?: boolean;
scope?: {
default?: "allow" | "deny";
rules?: {
action: "allow" | "deny";
match?: {
channel?: string;
chatType?: "direct" | "group" | "channel";
keyPrefix?: string;
};
}[];
};
maxLinks?: number;
timeoutSeconds?: number;
models?: {
type?: "cli";
command: string;
args?: string[];
timeoutSeconds?: number;
}[];
};
message?: {
allowCrossContextSend?: boolean;
crossContext?: {
allowWithinProvider?: boolean;
allowAcrossProviders?: boolean;
marker?: {
enabled?: boolean;
prefix?: string;
suffix?: string;
};
};
broadcast?: {
enabled?: boolean;
};
};
agentToAgent?: {
enabled?: boolean;
allow?: string[];
};
elevated?: {
enabled?: boolean;
allowFrom?: {
[k: string]: (string | number)[];
};
};
exec?: {
host?: "sandbox" | "gateway" | "node";
security?: "deny" | "allowlist" | "full";
ask?: "off" | "on-miss" | "always";
node?: string;
pathPrepend?: string[];
safeBins?: string[];
backgroundMs?: number;
timeoutSec?: number;
cleanupMs?: number;
notifyOnExit?: boolean;
applyPatch?: {
enabled?: boolean;
allowModels?: string[];
};
};
subagents?: {
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
sandbox?: {
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
};
bindings?: {
agentId: string;
match: {
channel: string;
accountId?: string;
peer?: {
kind: "dm" | "group" | "channel";
id: string;
};
guildId?: string;
teamId?: string;
};
}[];
broadcast?: {
strategy?: "parallel" | "sequential";
[k: string]: string[];
};
audio?: {
transcription?: {
command: string[];
timeoutSeconds?: number;
};
};
media?: {
preserveFilenames?: boolean;
};
messages?: {
messagePrefix?: string;
responsePrefix?: string;
groupChat?: {
mentionPatterns?: string[];
historyLimit?: number;
};
queue?: {
mode?: "steer" | "followup" | "collect" | "steer-backlog" | "steer+backlog" | "queue" | "interrupt";
byChannel?: {
whatsapp?: "steer" | "followup" | "collect" | "steer-backlog" | "steer+backlog" | "queue" | "interrupt";
telegram?: "steer" | "followup" | "collect" | "steer-backlog" | "steer+backlog" | "queue" | "interrupt";
discord?: "steer" | "followup" | "collect" | "steer-backlog" | "steer+backlog" | "queue" | "interrupt";
slack?: "steer" | "followup" | "collect" | "steer-backlog" | "steer+backlog" | "queue" | "interrupt";
mattermost?: "steer" | "followup" | "collect" | "steer-backlog" | "steer+backlog" | "queue" | "interrupt";
signal?: "steer" | "followup" | "collect" | "steer-backlog" | "steer+backlog" | "queue" | "interrupt";
imessage?: "steer" | "followup" | "collect" | "steer-backlog" | "steer+backlog" | "queue" | "interrupt";
msteams?: "steer" | "followup" | "collect" | "steer-backlog" | "steer+backlog" | "queue" | "interrupt";
webchat?: "steer" | "followup" | "collect" | "steer-backlog" | "steer+backlog" | "queue" | "interrupt";
};
debounceMs?: number;
debounceMsByChannel?: {
[k: string]: number;
};
cap?: number;
drop?: "old" | "new" | "summarize";
};
inbound?: {
debounceMs?: number;
byChannel?: {
[k: string]: number;
};
};
ackReaction?: string;
ackReactionScope?: "group-mentions" | "group-all" | "direct" | "all";
removeAckAfterReply?: boolean;
tts?: {
auto?: "off" | "always" | "inbound" | "tagged";
enabled?: boolean;
mode?: "final" | "all";
provider?: "elevenlabs" | "openai" | "edge";
summaryModel?: string;
modelOverrides?: {
enabled?: boolean;
allowText?: boolean;
allowProvider?: boolean;
allowVoice?: boolean;
allowModelId?: boolean;
allowVoiceSettings?: boolean;
allowNormalization?: boolean;
allowSeed?: boolean;
};
elevenlabs?: {
apiKey?: string;
baseUrl?: string;
voiceId?: string;
modelId?: string;
seed?: number;
applyTextNormalization?: "auto" | "on" | "off";
languageCode?: string;
voiceSettings?: {
stability?: number;
similarityBoost?: number;
style?: number;
useSpeakerBoost?: boolean;
speed?: number;
};
};
openai?: {
apiKey?: string;
model?: string;
voice?: string;
};
edge?: {
enabled?: boolean;
voice?: string;
lang?: string;
outputFormat?: string;
pitch?: string;
rate?: string;
volume?: string;
saveSubtitles?: boolean;
proxy?: string;
timeoutMs?: number;
};
prefsPath?: string;
maxTextLength?: number;
timeoutMs?: number;
};
};
commands: {
native: boolean | "auto";
nativeSkills: boolean | "auto";
text?: boolean;
bash?: boolean;
bashForegroundMs?: number;
config?: boolean;
debug?: boolean;
restart?: boolean;
useAccessGroups?: boolean;
};
approvals?: {
exec?: {
enabled?: boolean;
mode?: "session" | "targets" | "both";
agentFilter?: string[];
sessionFilter?: string[];
targets?: {
channel: string;
to: string;
accountId?: string;
threadId?: string | number;
}[];
};
};
session?: {
scope?: "per-sender" | "global";
dmScope?: "main" | "per-peer" | "per-channel-peer";
identityLinks?: {
[k: string]: string[];
};
resetTriggers?: string[];
idleMinutes?: number;
reset?: {
mode?: "daily" | "idle";
atHour?: number;
idleMinutes?: number;
};
resetByType?: {
dm?: {
mode?: "daily" | "idle";
atHour?: number;
idleMinutes?: number;
};
group?: {
mode?: "daily" | "idle";
atHour?: number;
idleMinutes?: number;
};
thread?: {
mode?: "daily" | "idle";
atHour?: number;
idleMinutes?: number;
};
};
resetByChannel?: {
[k: string]: {
mode?: "daily" | "idle";
atHour?: number;
idleMinutes?: number;
};
};
store?: string;
typingIntervalSeconds?: number;
typingMode?: "never" | "instant" | "thinking" | "message";
mainKey?: string;
sendPolicy?: {
default?: "allow" | "deny";
rules?: {
action: "allow" | "deny";
match?: {
channel?: string;
chatType?: "direct" | "group" | "channel";
keyPrefix?: string;
};
}[];
};
agentToAgent?: {
maxPingPongTurns?: number;
};
};
cron?: {
enabled?: boolean;
store?: string;
maxConcurrentRuns?: number;
};
hooks?: {
enabled?: boolean;
path?: string;
token?: string;
maxBodyBytes?: number;
presets?: string[];
transformsDir?: string;
mappings?: {
id?: string;
match?: {
path?: string;
source?: string;
};
action?: "wake" | "agent";
wakeMode?: "now" | "next-heartbeat";
name?: string;
sessionKey?: string;
messageTemplate?: string;
textTemplate?: string;
deliver?: boolean;
allowUnsafeExternalContent?: boolean;
channel?: "last" | "whatsapp" | "telegram" | "discord" | "slack" | "signal" | "imessage" | "msteams";
to?: string;
model?: string;
thinking?: string;
timeoutSeconds?: number;
transform?: {
module: string;
export?: string;
};
}[];
gmail?: {
account?: string;
label?: string;
topic?: string;
subscription?: string;
pushToken?: string;
hookUrl?: string;
includeBody?: boolean;
maxBytes?: number;
renewEveryMinutes?: number;
allowUnsafeExternalContent?: boolean;
serve?: {
bind?: string;
port?: number;
path?: string;
};
tailscale?: {
mode?: "off" | "serve" | "funnel";
path?: string;
target?: string;
};
model?: string;
thinking?: "off" | "minimal" | "low" | "medium" | "high";
};
internal?: {
enabled?: boolean;
handlers?: {
event: string;
module: string;
export?: string;
}[];
entries?: {
[k: string]: {
enabled?: boolean;
env?: {
[k: string]: string;
};
};
};
load?: {
extraDirs?: string[];
};
installs?: {
[k: string]: {
source: "npm" | "archive" | "path";
spec?: string;
sourcePath?: string;
installPath?: string;
version?: string;
installedAt?: string;
hooks?: string[];
};
};
};
};
web?: {
enabled?: boolean;
heartbeatSeconds?: number;
reconnect?: {
initialMs?: number;
maxMs?: number;
factor?: number;
jitter?: number;
maxAttempts?: number;
};
};
channels?: {
defaults?: {
groupPolicy?: "open" | "disabled" | "allowlist";
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
};
whatsapp?: {
accounts?: {
[k: string]: {
name?: string;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
configWrites?: boolean;
enabled?: boolean;
sendReadReceipts?: boolean;
messagePrefix?: string;
authDir?: string;
dmPolicy: "pairing" | "allowlist" | "open" | "disabled";
selfChatMode?: boolean;
allowFrom?: string[];
groupAllowFrom?: string[];
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
mediaMaxMb?: number;
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
groups?: {
[k: string]: {
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
};
};
ackReaction?: {
emoji?: string;
direct: boolean;
group: "always" | "mentions" | "never";
};
debounceMs: number;
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
};
};
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
configWrites?: boolean;
sendReadReceipts?: boolean;
dmPolicy: "pairing" | "allowlist" | "open" | "disabled";
messagePrefix?: string;
selfChatMode?: boolean;
allowFrom?: string[];
groupAllowFrom?: string[];
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
mediaMaxMb: number;
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
actions?: {
reactions?: boolean;
sendMessage?: boolean;
polls?: boolean;
};
groups?: {
[k: string]: {
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
};
};
ackReaction?: {
emoji?: string;
direct: boolean;
group: "always" | "mentions" | "never";
};
debounceMs: number;
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
};
telegram?: {
name?: string;
capabilities?:
| string[]
| {
inlineButtons?: "off" | "dm" | "group" | "all" | "allowlist";
};
markdown?: {
tables?: "off" | "bullets" | "code";
};
enabled?: boolean;
commands?: {
native?: boolean | "auto";
nativeSkills?: boolean | "auto";
};
customCommands?: {
command: unknown;
description: unknown;
}[];
configWrites?: boolean;
dmPolicy: "pairing" | "allowlist" | "open" | "disabled";
botToken?: string;
tokenFile?: string;
replyToMode?: "off" | "first" | "all";
groups?: {
[k: string]: {
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
skills?: string[];
enabled?: boolean;
allowFrom?: (string | number)[];
systemPrompt?: string;
topics?: {
[k: string]: {
requireMention?: boolean;
skills?: string[];
enabled?: boolean;
allowFrom?: (string | number)[];
systemPrompt?: string;
};
};
};
};
allowFrom?: (string | number)[];
groupAllowFrom?: (string | number)[];
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
draftChunk?: {
minChars?: number;
maxChars?: number;
breakPreference?: "paragraph" | "newline" | "sentence";
};
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
streamMode: "off" | "partial" | "block";
mediaMaxMb?: number;
timeoutSeconds?: number;
retry?: {
attempts?: number;
minDelayMs?: number;
maxDelayMs?: number;
jitter?: number;
};
network?: {
autoSelectFamily?: boolean;
};
proxy?: string;
webhookUrl?: string;
webhookSecret?: string;
webhookPath?: string;
actions?: {
reactions?: boolean;
sendMessage?: boolean;
deleteMessage?: boolean;
};
reactionNotifications?: "off" | "own" | "all";
reactionLevel?: "off" | "ack" | "minimal" | "extensive";
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
linkPreview?: boolean;
accounts?: {
[k: string]: {
name?: string;
capabilities?:
| string[]
| {
inlineButtons?: "off" | "dm" | "group" | "all" | "allowlist";
};
markdown?: {
tables?: "off" | "bullets" | "code";
};
enabled?: boolean;
commands?: {
native?: boolean | "auto";
nativeSkills?: boolean | "auto";
};
customCommands?: {
command: unknown;
description: unknown;
}[];
configWrites?: boolean;
dmPolicy: "pairing" | "allowlist" | "open" | "disabled";
botToken?: string;
tokenFile?: string;
replyToMode?: "off" | "first" | "all";
groups?: {
[k: string]: {
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
skills?: string[];
enabled?: boolean;
allowFrom?: (string | number)[];
systemPrompt?: string;
topics?: {
[k: string]: {
requireMention?: boolean;
skills?: string[];
enabled?: boolean;
allowFrom?: (string | number)[];
systemPrompt?: string;
};
};
};
};
allowFrom?: (string | number)[];
groupAllowFrom?: (string | number)[];
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
draftChunk?: {
minChars?: number;
maxChars?: number;
breakPreference?: "paragraph" | "newline" | "sentence";
};
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
streamMode: "off" | "partial" | "block";
mediaMaxMb?: number;
timeoutSeconds?: number;
retry?: {
attempts?: number;
minDelayMs?: number;
maxDelayMs?: number;
jitter?: number;
};
network?: {
autoSelectFamily?: boolean;
};
proxy?: string;
webhookUrl?: string;
webhookSecret?: string;
webhookPath?: string;
actions?: {
reactions?: boolean;
sendMessage?: boolean;
deleteMessage?: boolean;
};
reactionNotifications?: "off" | "own" | "all";
reactionLevel?: "off" | "ack" | "minimal" | "extensive";
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
linkPreview?: boolean;
};
};
};
discord?: {
name?: string;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
enabled?: boolean;
commands?: {
native?: boolean | "auto";
nativeSkills?: boolean | "auto";
};
configWrites?: boolean;
token?: string;
allowBots?: boolean;
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
maxLinesPerMessage?: number;
mediaMaxMb?: number;
retry?: {
attempts?: number;
minDelayMs?: number;
maxDelayMs?: number;
jitter?: number;
};
actions?: {
reactions?: boolean;
stickers?: boolean;
emojiUploads?: boolean;
stickerUploads?: boolean;
polls?: boolean;
permissions?: boolean;
messages?: boolean;
threads?: boolean;
pins?: boolean;
search?: boolean;
memberInfo?: boolean;
roleInfo?: boolean;
roles?: boolean;
channelInfo?: boolean;
voiceStatus?: boolean;
events?: boolean;
moderation?: boolean;
channels?: boolean;
};
replyToMode?: "off" | "first" | "all";
dm?: {
enabled?: boolean;
policy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
groupEnabled?: boolean;
groupChannels?: (string | number)[];
};
guilds?: {
[k: string]: {
slug?: string;
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
reactionNotifications?: "off" | "own" | "all" | "allowlist";
users?: (string | number)[];
channels?: {
[k: string]: {
allow?: boolean;
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
skills?: string[];
enabled?: boolean;
users?: (string | number)[];
systemPrompt?: string;
autoThread?: boolean;
};
};
};
};
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
execApprovals?: {
enabled?: boolean;
approvers?: (string | number)[];
agentFilter?: string[];
sessionFilter?: string[];
};
intents?: {
presence?: boolean;
guildMembers?: boolean;
};
accounts?: {
[k: string]: {
name?: string;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
enabled?: boolean;
commands?: {
native?: boolean | "auto";
nativeSkills?: boolean | "auto";
};
configWrites?: boolean;
token?: string;
allowBots?: boolean;
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
maxLinesPerMessage?: number;
mediaMaxMb?: number;
retry?: {
attempts?: number;
minDelayMs?: number;
maxDelayMs?: number;
jitter?: number;
};
actions?: {
reactions?: boolean;
stickers?: boolean;
emojiUploads?: boolean;
stickerUploads?: boolean;
polls?: boolean;
permissions?: boolean;
messages?: boolean;
threads?: boolean;
pins?: boolean;
search?: boolean;
memberInfo?: boolean;
roleInfo?: boolean;
roles?: boolean;
channelInfo?: boolean;
voiceStatus?: boolean;
events?: boolean;
moderation?: boolean;
channels?: boolean;
};
replyToMode?: "off" | "first" | "all";
dm?: {
enabled?: boolean;
policy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
groupEnabled?: boolean;
groupChannels?: (string | number)[];
};
guilds?: {
[k: string]: {
slug?: string;
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
reactionNotifications?: "off" | "own" | "all" | "allowlist";
users?: (string | number)[];
channels?: {
[k: string]: {
allow?: boolean;
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
skills?: string[];
enabled?: boolean;
users?: (string | number)[];
systemPrompt?: string;
autoThread?: boolean;
};
};
};
};
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
execApprovals?: {
enabled?: boolean;
approvers?: (string | number)[];
agentFilter?: string[];
sessionFilter?: string[];
};
intents?: {
presence?: boolean;
guildMembers?: boolean;
};
};
};
};
googlechat?: {
name?: string;
capabilities?: string[];
enabled?: boolean;
configWrites?: boolean;
allowBots?: boolean;
requireMention?: boolean;
groupPolicy: "open" | "disabled" | "allowlist";
groupAllowFrom?: (string | number)[];
groups?: {
[k: string]: {
enabled?: boolean;
allow?: boolean;
requireMention?: boolean;
users?: (string | number)[];
systemPrompt?: string;
};
};
serviceAccount?:
| string
| {
[k: string]: unknown;
};
serviceAccountFile?: string;
audienceType?: "app-url" | "project-number";
audience?: string;
webhookPath?: string;
webhookUrl?: string;
botUser?: string;
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
mediaMaxMb?: number;
replyToMode?: "off" | "first" | "all";
actions?: {
reactions?: boolean;
};
dm?: {
enabled?: boolean;
policy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
};
typingIndicator?: "none" | "message" | "reaction";
accounts?: {
[k: string]: {
name?: string;
capabilities?: string[];
enabled?: boolean;
configWrites?: boolean;
allowBots?: boolean;
requireMention?: boolean;
groupPolicy: "open" | "disabled" | "allowlist";
groupAllowFrom?: (string | number)[];
groups?: {
[k: string]: {
enabled?: boolean;
allow?: boolean;
requireMention?: boolean;
users?: (string | number)[];
systemPrompt?: string;
};
};
serviceAccount?:
| string
| {
[k: string]: unknown;
};
serviceAccountFile?: string;
audienceType?: "app-url" | "project-number";
audience?: string;
webhookPath?: string;
webhookUrl?: string;
botUser?: string;
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
mediaMaxMb?: number;
replyToMode?: "off" | "first" | "all";
actions?: {
reactions?: boolean;
};
dm?: {
enabled?: boolean;
policy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
};
typingIndicator?: "none" | "message" | "reaction";
};
};
defaultAccount?: string;
};
slack?: {
name?: string;
mode: "socket" | "http";
signingSecret?: string;
webhookPath: string;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
enabled?: boolean;
commands?: {
native?: boolean | "auto";
nativeSkills?: boolean | "auto";
};
configWrites?: boolean;
botToken?: string;
appToken?: string;
userToken?: string;
userTokenReadOnly: boolean;
allowBots?: boolean;
requireMention?: boolean;
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
mediaMaxMb?: number;
reactionNotifications?: "off" | "own" | "all" | "allowlist";
reactionAllowlist?: (string | number)[];
replyToMode?: "off" | "first" | "all";
replyToModeByChatType?: {
direct?: "off" | "first" | "all";
group?: "off" | "first" | "all";
channel?: "off" | "first" | "all";
};
thread?: {
historyScope?: "thread" | "channel";
inheritParent?: boolean;
};
actions?: {
reactions?: boolean;
messages?: boolean;
pins?: boolean;
search?: boolean;
permissions?: boolean;
memberInfo?: boolean;
channelInfo?: boolean;
emojiList?: boolean;
};
slashCommand?: {
enabled?: boolean;
name?: string;
sessionPrefix?: string;
ephemeral?: boolean;
};
dm?: {
enabled?: boolean;
policy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
groupEnabled?: boolean;
groupChannels?: (string | number)[];
replyToMode?: "off" | "first" | "all";
};
channels?: {
[k: string]: {
enabled?: boolean;
allow?: boolean;
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
allowBots?: boolean;
users?: (string | number)[];
skills?: string[];
systemPrompt?: string;
};
};
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
accounts?: {
[k: string]: {
name?: string;
mode?: "socket" | "http";
signingSecret?: string;
webhookPath?: string;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
enabled?: boolean;
commands?: {
native?: boolean | "auto";
nativeSkills?: boolean | "auto";
};
configWrites?: boolean;
botToken?: string;
appToken?: string;
userToken?: string;
userTokenReadOnly: boolean;
allowBots?: boolean;
requireMention?: boolean;
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
mediaMaxMb?: number;
reactionNotifications?: "off" | "own" | "all" | "allowlist";
reactionAllowlist?: (string | number)[];
replyToMode?: "off" | "first" | "all";
replyToModeByChatType?: {
direct?: "off" | "first" | "all";
group?: "off" | "first" | "all";
channel?: "off" | "first" | "all";
};
thread?: {
historyScope?: "thread" | "channel";
inheritParent?: boolean;
};
actions?: {
reactions?: boolean;
messages?: boolean;
pins?: boolean;
search?: boolean;
permissions?: boolean;
memberInfo?: boolean;
channelInfo?: boolean;
emojiList?: boolean;
};
slashCommand?: {
enabled?: boolean;
name?: string;
sessionPrefix?: string;
ephemeral?: boolean;
};
dm?: {
enabled?: boolean;
policy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
groupEnabled?: boolean;
groupChannels?: (string | number)[];
replyToMode?: "off" | "first" | "all";
};
channels?: {
[k: string]: {
enabled?: boolean;
allow?: boolean;
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
allowBots?: boolean;
users?: (string | number)[];
skills?: string[];
systemPrompt?: string;
};
};
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
};
};
};
signal?: {
name?: string;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
enabled?: boolean;
configWrites?: boolean;
account?: string;
httpUrl?: string;
httpHost?: string;
httpPort?: number;
cliPath?: string;
autoStart?: boolean;
startupTimeoutMs?: number;
receiveMode?: "on-start" | "manual";
ignoreAttachments?: boolean;
ignoreStories?: boolean;
sendReadReceipts?: boolean;
dmPolicy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
groupAllowFrom?: (string | number)[];
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
mediaMaxMb?: number;
reactionNotifications?: "off" | "own" | "all" | "allowlist";
reactionAllowlist?: (string | number)[];
actions?: {
reactions?: boolean;
};
reactionLevel?: "off" | "ack" | "minimal" | "extensive";
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
accounts?: {
[k: string]: {
name?: string;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
enabled?: boolean;
configWrites?: boolean;
account?: string;
httpUrl?: string;
httpHost?: string;
httpPort?: number;
cliPath?: string;
autoStart?: boolean;
startupTimeoutMs?: number;
receiveMode?: "on-start" | "manual";
ignoreAttachments?: boolean;
ignoreStories?: boolean;
sendReadReceipts?: boolean;
dmPolicy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
groupAllowFrom?: (string | number)[];
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
mediaMaxMb?: number;
reactionNotifications?: "off" | "own" | "all" | "allowlist";
reactionAllowlist?: (string | number)[];
actions?: {
reactions?: boolean;
};
reactionLevel?: "off" | "ack" | "minimal" | "extensive";
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
};
};
};
imessage?: {
name?: string;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
enabled?: boolean;
configWrites?: boolean;
cliPath?: string;
dbPath?: string;
remoteHost?: string;
service?: "imessage" | "sms" | "auto";
region?: string;
dmPolicy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
groupAllowFrom?: (string | number)[];
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
includeAttachments?: boolean;
mediaMaxMb?: number;
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
groups?: {
[k: string]: {
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
};
};
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
accounts?: {
[k: string]: {
name?: string;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
enabled?: boolean;
configWrites?: boolean;
cliPath?: string;
dbPath?: string;
remoteHost?: string;
service?: "imessage" | "sms" | "auto";
region?: string;
dmPolicy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
groupAllowFrom?: (string | number)[];
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
includeAttachments?: boolean;
mediaMaxMb?: number;
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
groups?: {
[k: string]: {
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
};
};
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
};
};
};
bluebubbles?: {
name?: string;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
configWrites?: boolean;
enabled?: boolean;
serverUrl?: string;
password?: string;
webhookPath?: string;
dmPolicy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
groupAllowFrom?: (string | number)[];
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
mediaMaxMb?: number;
sendReadReceipts?: boolean;
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
groups?: {
[k: string]: {
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
};
};
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
accounts?: {
[k: string]: {
name?: string;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
configWrites?: boolean;
enabled?: boolean;
serverUrl?: string;
password?: string;
webhookPath?: string;
dmPolicy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: (string | number)[];
groupAllowFrom?: (string | number)[];
groupPolicy: "open" | "disabled" | "allowlist";
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
textChunkLimit?: number;
chunkMode?: "length" | "newline";
mediaMaxMb?: number;
sendReadReceipts?: boolean;
blockStreaming?: boolean;
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
groups?: {
[k: string]: {
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
};
};
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
};
};
actions?: {
reactions?: boolean;
edit?: boolean;
unsend?: boolean;
reply?: boolean;
sendWithEffect?: boolean;
renameGroup?: boolean;
setGroupIcon?: boolean;
addParticipant?: boolean;
removeParticipant?: boolean;
leaveGroup?: boolean;
sendAttachment?: boolean;
};
};
msteams?: {
enabled?: boolean;
capabilities?: string[];
markdown?: {
tables?: "off" | "bullets" | "code";
};
configWrites?: boolean;
appId?: string;
appPassword?: string;
tenantId?: string;
webhook?: {
port?: number;
path?: string;
};
dmPolicy: "pairing" | "allowlist" | "open" | "disabled";
allowFrom?: string[];
groupAllowFrom?: string[];
groupPolicy: "open" | "disabled" | "allowlist";
textChunkLimit?: number;
chunkMode?: "length" | "newline";
blockStreamingCoalesce?: {
minChars?: number;
maxChars?: number;
idleMs?: number;
};
mediaAllowHosts?: string[];
requireMention?: boolean;
historyLimit?: number;
dmHistoryLimit?: number;
dms?: {
[k: string]: {
historyLimit?: number;
};
};
replyStyle?: "thread" | "top-level";
teams?: {
[k: string]: {
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
replyStyle?: "thread" | "top-level";
channels?: {
[k: string]: {
requireMention?: boolean;
tools?: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
toolsBySender?: {
[k: string]: {
allow?: string[];
alsoAllow?: string[];
deny?: string[];
};
};
replyStyle?: "thread" | "top-level";
};
};
};
};
mediaMaxMb?: number;
sharePointSiteId?: string;
heartbeat?: {
showOk?: boolean;
showAlerts?: boolean;
useIndicator?: boolean;
};
};
[k: string]: unknown;
};
discovery?: {
wideArea?: {
enabled?: boolean;
};
mdns?: {
mode?: "off" | "minimal" | "full";
};
};
canvasHost?: {
enabled?: boolean;
root?: string;
port?: number;
liveReload?: boolean;
};
talk?: {
voiceId?: string;
voiceAliases?: {
[k: string]: string;
};
modelId?: string;
outputFormat?: string;
apiKey?: string;
interruptOnSpeech?: boolean;
};
gateway?: {
port?: number;
mode?: "local" | "remote";
bind?: "auto" | "lan" | "loopback" | "custom" | "tailnet";
controlUi?: {
enabled?: boolean;
basePath?: string;
allowInsecureAuth?: boolean;
dangerouslyDisableDeviceAuth?: boolean;
};
auth?: {
mode?: "token" | "password";
token?: string;
password?: string;
allowTailscale?: boolean;
};
trustedProxies?: string[];
tailscale?: {
mode?: "off" | "serve" | "funnel";
resetOnExit?: boolean;
};
remote?: {
url?: string;
transport?: "ssh" | "direct";
token?: string;
password?: string;
tlsFingerprint?: string;
sshTarget?: string;
sshIdentity?: string;
};
reload?: {
mode?: "off" | "restart" | "hot" | "hybrid";
debounceMs?: number;
};
tls?: {
enabled?: boolean;
autoGenerate?: boolean;
certPath?: string;
keyPath?: string;
caPath?: string;
};
http?: {
endpoints?: {
chatCompletions?: {
enabled?: boolean;
};
responses?: {
enabled?: boolean;
maxBodyBytes?: number;
files?: {
allowUrl?: boolean;
allowedMimes?: string[];
maxBytes?: number;
maxChars?: number;
maxRedirects?: number;
timeoutMs?: number;
pdf?: {
maxPages?: number;
maxPixels?: number;
minTextChars?: number;
};
};
images?: {
allowUrl?: boolean;
allowedMimes?: string[];
maxBytes?: number;
maxRedirects?: number;
timeoutMs?: number;
};
};
};
};
nodes?: {
browser?: {
mode?: "auto" | "manual" | "off";
node?: string;
};
allowCommands?: string[];
denyCommands?: string[];
};
};
skills?: {
allowBundled?: string[];
load?: {
extraDirs?: string[];
watch?: boolean;
watchDebounceMs?: number;
};
install?: {
preferBrew?: boolean;
nodeManager?: "npm" | "pnpm" | "yarn" | "bun";
};
entries?: {
[k: string]: {
enabled?: boolean;
apiKey?: string;
env?: {
[k: string]: string;
};
config?: {
[k: string]: unknown;
};
};
};
};
plugins?: {
enabled?: boolean;
allow?: string[];
deny?: string[];
load?: {
paths?: string[];
};
slots?: {
memory?: string;
};
entries?: {
[k: string]: {
enabled?: boolean;
config?: {
[k: string]: unknown;
};
};
};
installs?: {
[k: string]: {
source: "npm" | "archive" | "path";
spec?: string;
sourcePath?: string;
installPath?: string;
version?: string;
installedAt?: string;
};
};
};
}