Skip to content

Generated configuration field reference ​

Generated from runtime source and JSON Schema. Do not edit manually. See Configuration for narrative guidance and examples.

  • Generator: pnpm docs:config
  • Drift check: pnpm check:config-reference

Host top-level fields ​

The authoritative contract is packages/im/runtime/src/host-config-schema.json, consumed by the Runtime at basic/cli/src/plugin-runtime/console/configuration-projection.ts.

PathTypeRequiredDefaultDescription
httpobjectno—HTTP, Console, REST/RPC/SSE, and Webhook Host.
http.readinessobjectno—Required runtime components for /pub/ready; no external network probes.
http.readiness.databasebooleannotrueRequire an initialized Database Host (not a live database query).
http.readiness.endpointsarray<object>no—Required Endpoint admission slots, selected by exact plugin owner and stable slot name.
http.readiness.endpoints[].ownerstringyes——
http.readiness.endpoints[].namestringyes——
http.readiness.agentsarray<string>no—Required configured Agent bindings; does not verify model credentials or provider reachability.
http.hoststring | nullno—监听地址。
http.portnumber | string | nullno—监听端口。
http.tokenstring | nullno—HTTP Host 访问令牌。
http.tokensarray | nullno——
http.corsOriginsarray | nullno——
http.basestring | nullno—API 路径前缀。
http.tlsfalse | null | objectno——
http.listenersarray<object>no——
http.listeners[].enabledboolean | stringno—是否启用此监听器。
http.listeners[].hoststringno—监听地址。
http.listeners[].portnumber | stringno—监听端口。
http.listeners[].tlsfalse | null | objectno——
databaseobjectno—Database Host and dialect connection options.
database.dialectstringno—数据库方言。
database.filenamestringno—SQLite 文件路径。
database.modestringno—SQLite 兼容模式字段。
database.hoststringno—数据库主机。
database.portnumber | stringno—网络数据库端口。
database.userstringno—MySQL / PostgreSQL 用户名。
database.usernamestringno—Redis 用户名。
database.passwordstringno—连接密码。
database.databasestring | numberno—MySQL / PostgreSQL 数据库名,或 Redis 数据库索引。
database.uristringno—MySQL 连接 URI(可能含凭据)。
database.connectionStringstringno—PostgreSQL 连接串(可能含凭据)。
database.urlstringno—MongoDB / Redis 连接 URL(可能含凭据)。
database.dbNamestringno—MongoDB 数据库名。
database.poolobject | nullno——
database.pool.minnumber | string | nullno—最少连接数。
database.pool.maxnumber | string | nullno—最多连接数。
database.pool.acquireTimeoutMillisnumber | string | nullno—获取连接超时毫秒。
database.pool.idleTimeoutMillisnumber | string | nullno—空闲连接超时毫秒。
database.socketobjectno——
database.socket.hoststringno—Redis 主机。
database.socket.portnumber | stringno—Redis 端口。
database.socket.pathstringno—Unix socket 路径。
database.socket.connectTimeoutnumber | stringno—连接超时毫秒。
database.socket.tlsboolean | stringno—启用 TLS。
database.socket.keepAlivenumber | stringno—TCP keep-alive 毫秒。
database.socket.noDelayboolean | stringno—TCP noDelay。
database.sslboolean | string | objectno——
database.charsetstringno—MySQL 字符集。
database.timezonestringno—MySQL 时区。
database.connectTimeoutnumber | stringno—MySQL 连接超时毫秒。
database.connectionTimeoutMillisnumber | stringno—PostgreSQL 连接超时毫秒。
database.query_timeoutnumber | stringno—PostgreSQL 查询超时毫秒。
database.statement_timeoutnumber | stringno—PostgreSQL statement 超时毫秒。
database.application_namestringno—PostgreSQL 应用名称。
database.maxPoolSizenumber | stringno—MongoDB 最大连接池大小。
database.minPoolSizenumber | stringno—MongoDB 最小连接池大小。
database.serverSelectionTimeoutMSnumber | stringno—MongoDB server 选择超时毫秒。
database.connectTimeoutMSnumber | stringno—MongoDB 连接超时毫秒。
database.socketTimeoutMSnumber | stringno—MongoDB socket 超时毫秒。
database.authSourcestringno—MongoDB 认证数据库。
database.replicaSetstringno—MongoDB 副本集。
database.authobjectno——
database.auth.usernamestringno—MongoDB 用户名。
database.auth.passwordstringno—MongoDB 密码。
database.disableOfflineQueueboolean | stringno—Redis 禁止离线队列。
database.pingIntervalnumber | stringno—Redis 心跳间隔毫秒。
aiobjectno—Providers, Agents, sessions, memory, tools, and execution security.
ai.decisionsobjectno—Optional structured-decision service. Missing tasks are off; use shadow before active.
ai.decisions.providerstringyes—Exact enabled DecisionProvider Plugin owner, such as root/typesafe.
ai.decisions.skillsobjectno——
ai.decisions.skills.modestring: "off", "shadow", "active"yes——
ai.decisions.skills.timeoutMsintegerno——
ai.decisions.skills.minConfidencenumberno——
ai.decisions.skills.topKintegerno——
ai.decisions.skills.maxCandidatesintegerno——
ai.decisions.skills.maxSelectionsintegerno——
ai.decisions.toolsobjectno——
ai.decisions.tools.modestring: "off", "shadow", "active"yes——
ai.decisions.tools.timeoutMsintegerno——
ai.decisions.tools.minConfidencenumberno——
ai.decisions.tools.topKintegerno——
ai.decisions.tools.maxCandidatesintegerno——
ai.decisions.tools.maxSelectionsintegerno——
ai.decisions.memoryobjectno——
ai.decisions.memory.modestring: "off", "shadow", "active"yes——
ai.decisions.memory.timeoutMsintegerno——
ai.decisions.memory.minConfidencenumberno——
ai.decisions.memory.topKintegerno——
ai.decisions.memory.maxCandidatesintegerno——
ai.decisions.memory.maxSelectionsintegerno——
ai.decisions.agentsobjectno——
ai.decisions.agents.modestring: "off", "shadow", "active"yes——
ai.decisions.agents.timeoutMsintegerno——
ai.decisions.agents.minConfidencenumberno——
ai.decisions.agents.topKintegerno——
ai.decisions.agents.maxCandidatesintegerno——
ai.decisions.agents.maxSelectionsintegerno——
ai.decisions.approvalobjectno——
ai.decisions.approval.modestring: "off", "shadow", "active"yes——
ai.decisions.approval.timeoutMsintegerno——
ai.decisions.approval.minConfidencenumberno——
ai.decisions.approval.topKintegerno——
ai.decisions.approval.maxCandidatesintegerno——
ai.decisions.approval.maxSelectionsintegerno——
ai.workroomobjectno—Process-owned Workroom control-plane policy; Projects remain in the persistent Catalog.
ai.workroom.trustedPackPublishersarray<string>no—Authenticated Console principal ids allowed to publish shared Capability Packs.
ai.workroom.disclosureobjectno—Explicit P12 model processor contracts for Workroom disclosure bootstrap.
ai.workroom.disclosure.tenantIdstringno——
ai.workroom.disclosure.modelProvidersobjectno——
ai.workroom.disclosure.modelProviders.<key>.endpointstringyes——
ai.workroom.disclosure.modelProviders.<key>.ownerstringno——
ai.workroom.disclosure.modelProviders.<key>.trustDomainstringno——
ai.workroom.disclosure.modelProviders.<key>.processingRegionsarray<string>yes——
ai.workroom.disclosure.modelProviders.<key>.maxConfidentialitystring: "public", "project_internal", "confidential", "restricted"yes——
ai.workroom.disclosure.modelProviders.<key>.externalbooleanyes——
ai.workroom.disclosure.modelProviders.<key>.noTrainingbooleanyes——
ai.workroom.disclosure.modelProviders.<key>.loggingModestring: "disabled", "metadata_only", "full"yes——
ai.workroom.disclosure.modelProviders.<key>.maximumRetentionSecondsintegeryes——
ai.workroom.disclosure.modelProviders.<key>.allowsRedisclosurebooleanyes——
ai.workroom.disclosure.modelProviders.<key>.supportsDeletionbooleanyes——
ai.agentobjectno—Agent execution, queueing, tool, and model policies.
ai.agent.inboundQueueobjectno—Inbound turn queue policy.
ai.agent.inboundQueue.groupModestring: "supersede", "fifo"no—supersede (default): a sender's new message replaces their own unanswered turn; fifo: every message waits in arrival order. Other members' messages always queue.
ai.agent.inboundQueue.ttlMsintegerno180000A queued turn that waited longer than this is dropped with a short notice. 0 disables expiry.
ai.agent.inboundQueue.maxQueuedTurnsintegerno5Turns allowed to wait behind the running turn of one conversation; further messages get a short busy reply.
ai.agent.inboundQueue.coalesceWindowMsnumber | stringno——
ai.agent.execSecuritystring: "deny", "allowlist", "full"no—Shell command security boundary.
ai.agent.execPresetstring: "readonly", "network", "development", "custom"no—Command allowlist preset used outside full mode.
ai.agent.networkobjectno—Network access for IM turns (web_fetch / web_search and networked commands). Off by default; enabled allows HTTPS egress, optionally limited to allowedDomains. When enabled is unset, execPreset: network still enables it for compatibility.
ai.agent.network.enabledbooleannofalseAllow HTTPS egress for IM turns.
ai.agent.network.allowedDomainsarray<string>no—When non-empty, only these domains (and their subdomains) are reachable.
ai.agent.masterShellstring: "off", "isolated"no"off"Shell access for the master in IM private chats. off: no bash in IM turns. isolated: master DMs run bash inside a Docker container (workspace writable, no network, development allowlist, approval for anything else); fails closed when Docker is unavailable.
ai.agent.toolBudgetobjectno—Progress-aware tool-call budget. maxIterations is a soft budget extended while the turn makes progress; hard caps always apply.
ai.agent.toolBudget.extendByintegerno10Steps added per extension when progressing; 0 disables.
ai.agent.toolBudget.progressWindowintegerno5Progress must have happened within this many recent steps.
ai.agent.toolBudget.maxTotalIterationsintegerno40Hard step cap per turn segment.
ai.agent.toolBudget.maxSubagentTotalIterationsintegerno30Hard step cap for an in-turn sub-agent.
ai.agent.toolBudget.maxWallClockMsintegerno600000Wall-clock cap for the whole turn in ms; 0 disables.
ai.agent.toolBudget.maxTotalTokensintegerno0Token cap for the whole turn; 0 disables.
ai.agent.toolBudget.failureStreakLimitintegerno3Consecutive tool failures that stop extensions.
ai.agent.toolBudget.repeatLimitintegerno2Consecutive identical repeated calls that stop extensions.
ai.agent.toolBudget.autoContinuestring: "off", "master_dm", "on"no"master_dm"Auto-continue a progressing turn that hit its budget: off, only in the master's private chat, or always. Continuations reuse the same turn (same policy and approvals).
ai.agent.toolBudget.maxContinuationsintegerno2Maximum automatic continuations per turn.
ai.agent.toolBudget.progressUpdatesstring: "off", "private", "all"no"private"Brief natural-language progress updates during long turns: off, private chats only, or all chats (groups opt in).
ai.agent.toolBudget.progressMinIntervalMsintegerno45000Minimum time between progress updates in ms.
ai.agent.toolBudget.progressMaxUpdatesintegerno3Maximum progress updates per turn; 0 disables.
ai.agent.injectionGuardobjectno—Prompt-injection defences. After lower-trust content (tool results, web pages, files, sub-agent reports, background messages) enters a turn, high-risk actions (shell, messaging other conversations, config changes, scheduling) need approval; replies are checked for system-prompt, secret and other-session memory leaks.
ai.agent.injectionGuard.confirmHighRiskstring: "external_content", "off"no"external_content"external_content: high-risk actions after external content always ask for approval (denied in unattended turns). off: disabled.
ai.agent.injectionGuard.outboundCheckstring: "redact", "off"no"redact"redact: mask leaked system-prompt lines, secrets and other sessions' memory in replies and outbound tool messages. off: disabled.
ai.agent.injectionGuard.trustedOutputToolsarray<string>no[]Tools whose results do not count as external content.
ai.agent.usageQuotaobjectno—Per-user and per-group token quotas and a per-group rate limit. All limits are off (0) by default; the owner is exempt by default. Counters are kept in memory.
ai.agent.usageQuota.windowMsintegerno86400000Quota window in ms.
ai.agent.usageQuota.perUserTokensintegerno0Tokens one user may use per window; 0 = unlimited.
ai.agent.usageQuota.perGroupTokensintegerno0Tokens one group may use per window; 0 = unlimited.
ai.agent.usageQuota.perGroupRequestsPerMinuteintegerno0Turns one group may start per minute; 0 = unlimited.
ai.agent.usageQuota.exemptOwnerbooleannotrueThe owner is never limited.
ai.agent.subagentTurnModestring: "off", "sync"no"off"Sub-agents in IM turns. off: no spawn_task. sync: spawn_task runs a sub-agent inside the current turn with at most the parent's permissions (never wider; no bash unless the parent could run it) and approvals routed to the same conversation.
ai.agent.execApprovalModestring: "ask", "bypass", "auto"no—Approval policy for main Agent commands.
ai.agent.subagentExecApprovalModestring: "ask", "bypass", "auto"no—Approval policy for sub-Agent commands.
ai.agent.workerExecApprovalModestring: "ask", "bypass", "auto"no—Approval policy for worker commands.
ai.agent.toolExecutionstring: "parallel", "sequential", "tiered"no—How tool calls in one model step are scheduled.
ai.agent.modelSizeHintstring: "", "small", "medium", "large"no—Optional model-size hint; an empty string clears the hint.
ai.agent.promptCacheRetentionstring: "in_memory", "24h"no—Provider prompt-cache retention policy.
ai.agent.steeringModestring: "one-at-a-time", "all"no—Process steering messages one at a time or drain all pending messages together.
ai.agent.followUpModestring: "one-at-a-time", "all"no—Process follow-up messages one at a time or drain all pending messages together.
ai.agent.outputSchemaboolean | string: "segments" | objectno—Final-output mode: defaults to segments for IM conversations; false for text, true or segments for ordered canonical segments, or a custom JSON Schema object. Detached and non-IM turns do not inherit the IM preset.
ai.agent.scheduleobjectno—Unattended Schedule execution policy.
ai.agent.schedule.securityobjectno—Schedule command security policy.
ai.agent.schedule.security.execPresetstring: "readonly", "network"no—Schedule Jobs may use only the read-only or network preset.
ai.agent.schedule.security.allowedDomainsarray<string>no——
ai.agent.schedule.budgetobjectno——
ai.agent.schedule.budget.maxTokensnumber | stringno——
ai.agent.schedule.budget.maxToolCallsnumber | stringno——
ai.agent.schedule.budget.timeoutMsnumber | stringno——
ai.agent.execAllowlistarray<string>no—allowlist 模式下允许的命令(支持正则字符串,如 "^ls "、"^cat "),与 preset 合并
ai.agent.phaseTraceboolean | stringno—观测主回合阶段日志(或通过 ZHIN_AGENT_PHASE_TRACE=1 开启)
ai.agent.modelHarnessobjectno—按模型 / provider 模式覆盖 model harness
ai.agent.modelHarness.modelsobjectno—模型级覆盖:支持 "gpt-4o" 或 "openai:gpt-4o"
ai.agent.modelHarness.models.<key>.maxIterationsnumber | stringno——
ai.agent.modelHarness.models.<key>.explorationBudgetnumber | stringno—连续只读探索调用达到该次数时注入提示;0 关闭
ai.agent.modelHarness.models.<key>.explorationGuidanceboolean | stringno—在系统提示中加入"先规划、限定目标文件"的探索纪律
ai.agent.modelHarness.models.<key>.iterationExtensionnumber | stringno—每次有进展时延长的步数(覆盖 toolBudget.extendBy)
ai.agent.modelHarness.models.<key>.maxTotalIterationsnumber | stringno—单段回合的硬步数上限(覆盖 toolBudget.maxTotalIterations)
ai.agent.modelHarness.models.<key>.emptyReplyRetriesnumber | stringno—空回复(无文本且无工具调用)时额外重试次数;默认 0
ai.agent.modelHarness.models.<key>.requestTimeoutMsnumber | stringno—单次模型请求超时(毫秒);0 关闭
ai.agent.modelHarness.providerPatternsobjectno—provider 模式覆盖(支持 * 通配符)
ai.agent.modelHarness.providerPatterns.<key>.maxIterationsnumber | stringno——
ai.agent.modelHarness.providerPatterns.<key>.explorationBudgetnumber | stringno—连续只读探索调用达到该次数时注入提示;0 关闭
ai.agent.modelHarness.providerPatterns.<key>.explorationGuidanceboolean | stringno—在系统提示中加入"先规划、限定目标文件"的探索纪律
ai.agent.modelHarness.providerPatterns.<key>.iterationExtensionnumber | stringno—每次有进展时延长的步数(覆盖 toolBudget.extendBy)
ai.agent.modelHarness.providerPatterns.<key>.maxTotalIterationsnumber | stringno—单段回合的硬步数上限(覆盖 toolBudget.maxTotalIterations)
ai.agent.modelHarness.providerPatterns.<key>.emptyReplyRetriesnumber | stringno—空回复(无文本且无工具调用)时额外重试次数;默认 0
ai.agent.modelHarness.providerPatterns.<key>.requestTimeoutMsnumber | stringno—单次模型请求超时(毫秒);0 关闭
ai.agent.providerResilienceobjectno—Provider 韧性:重试 / 退避 / 超时 / fallback(见 ProviderResilienceConfig,默认保守)
ai.agent.providerResilience.maxRetriesnumber | stringno—Retries per model after the first attempt. Default 2. 0 disables retry.
ai.agent.providerResilience.baseDelayMsnumber | stringno—First backoff delay in ms; doubles each retry. Default 1000.
ai.agent.providerResilience.maxDelayMsnumber | stringno—Upper bound for one backoff delay in ms. Default 10000.
ai.agent.providerResilience.maxRetryAfterMsnumber | stringno—A Retry-After longer than this skips retry and goes to fallback. Default 30000.
ai.agent.providerResilience.requestTimeoutMsnumber | stringno—Per-attempt timeout in ms (whole streamed completion). Default 180000. 0 disables.
ai.agent.providerResilience.emptyReplyRetriesnumber | stringno—Extra attempts when the model returns neither text nor tool calls (or a tool call without a name). Default 0: the reply is passed through unchanged. Quirk presets (see model harness) raise this for models known to emit spurious empty replies.
ai.agent.providerResilience.fallbackboolean | stringno—Try the next entry of modelCandidates after retries are exhausted. Default true.
ai.agent.deferredToolsobjectno—工具 schema 按需加载
ai.agent.deferredTools.maxLoadedPerSessionnumber | stringno——
ai.agent.deferredTools.discoverTopKnumber | stringno——
ai.agent.deferredTools.alwaysLoadedToolsarray<string>no—额外常驻工具;默认在内置常驻集合基础上追加
ai.agent.deferredTools.alwaysLoadedModestringno—extend(默认)追加到内置常驻集合;replace 完全替换
ai.agent.deferredTools.mcpServersobjectno——
ai.agent.deferredTools.mcpServers.<key>.alwaysLoadedarray<string>no——
ai.agent.workerBaseToolsarray<string>no—Deferred Worker 基础工具
ai.agent.personastringno——
ai.agent.maxIterationsnumber | stringno——
ai.agent.timeoutnumber | stringno——
ai.agent.preExecTimeoutnumber | stringno——
ai.agent.maxToolsnumber | stringno——
ai.agent.contextTailMessageLimitnumber | stringno——
ai.agent.rateLimitobjectno——
ai.agent.rateLimit.maxRequestsPerMinutenumber | stringno—每分钟最大请求数(默认 20)
ai.agent.rateLimit.cooldownSecondsnumber | stringno—冷却时间(秒),超限后需等待(默认 10)
ai.agent.toneAwarenessboolean | stringno——
ai.agent.contextTokensnumber | stringno——
ai.agent.maxHistorySharenumber | stringno——
ai.agent.compactionobjectno——
ai.agent.compaction.enabledboolean | stringno——
ai.agent.compaction.autoboolean | stringno——
ai.agent.compaction.keepRecentTokensnumber | stringno——
ai.agent.compaction.minKeepCountnumber | stringno——
ai.agent.compaction.thresholdRationumber | stringno—Share of the model context window (system prompt and tools included) at which auto-compaction runs. Default 0.7 (#730).
ai.agent.disabledToolsarray<string>no——
ai.agent.allowedToolsarray<string>no——
ai.agent.maxParallelSubagentsnumber | stringno——
ai.agent.subagentAutoContinueboolean | stringno——
ai.agent.subagentDirectImDeliveryboolean | stringno——
ai.agent.maxSubagentIterationsnumber | stringno——
ai.agent.subagentToolsarray<string>no——
ai.agent.subagentTurnWaitMsnumber | stringno——
ai.agent.skillInstructionMaxCharsnumber | stringno——
ai.agent.promptTraceboolean | stringno——
ai.agent.promptTraceVerboseboolean | stringno——
ai.agent.promptCacheboolean | stringno——
ai.agent.promptCacheKeyPrefixstringno——
ai.agent.deferredAutoContinueboolean | stringno——
ai.agent.deferredAutoContinueMaxDepthnumber | stringno——
ai.agent.gitStatusboolean | stringno—§1 Runtime 注入单行 git 状态摘要(非 git 仓库自动跳过)
ai.agent.contextPathsarray<string>no—追加的上下文文件路径(支持 ~ 与相对路径;默认另加载 ~/.config/zhin/AGENTS.md 等全局路径)
ai.agent.systemPromptMaxCharsnumber | stringno—系统提示词总字符上限;按 retention/order 让出预算,required 内容放不下则失败。
ai.agent.thinkingPreviewboolean | stringno—Activity feedback 展示 LLM 实际 thinking 内容(截断),而非静态 "思考中..."。
ai.agent.thinkingPreviewMaxLengthnumber | stringno—thinkingPreview 展示的最大字符数。
ai.enabledboolean | stringno——
ai.providersobject | nullno—命名 provider 实例
ai.providers.<key>.sdkstringno——
ai.providers.<key>.apiKeystringno——
ai.providers.<key>.authSchemestringno—Authorization 头方案。不写时用各 SDK 默认(OpenAI 系 Bearer,Anthropic x-api-key,Google x-goog-api-key); 设为 '' 时 Authorization: &lt;key&gt;;设为 'Bearer' / 'Token' 等时 Authorization: &lt;scheme&gt; &lt;key&gt;(结尾空格可有可无)。
ai.providers.<key>.baseUrlstringno——
ai.providers.<key>.defaultModelstringno——
ai.providers.<key>.modelsarray<string>no——
ai.providers.<key>.timeoutnumber | stringno—单次请求超时(ms),覆盖 ai.providerResilience.requestTimeoutMs;模型 harness 的 requestTimeoutMs 优先。0 关闭。
ai.providers.<key>.maxRetriesnumber | stringno—每个模型的重试次数,覆盖 ai.providerResilience.maxRetries。
ai.providers.<key>.firstChunkTimeoutMsnumber | stringno—流式请求首个 chunk 超时(ms,含等待响应头),默认关闭;超时按 timeout 重试 / 切换备用模型。
ai.providers.<key>.chunkTimeoutMsnumber | stringno—流式请求两个 chunk 之间的静默超时(ms),默认关闭。
ai.providers.<key>.headersobjectno——
ai.providers.<key>.contextWindownumber | stringno—上下文窗口大小(token 数),各 Provider 映射到自身参数
ai.providers.<key>.maxOutputTokensnumber | stringno—每次请求的输出 token 上限,默认 8192;Gemini/Claude 的思考 token 也计入
ai.providers.<key>.thinkingLevelstringno—思考深度:off | low | medium | high;不填用 provider 默认;providerOptions 里的思考设置优先
ai.providers.<key>.capabilitiesobjectno—Provider 能力声明
ai.providers.<key>.capabilities.inputarray<string>no—Explicit model input modalities. Absence is text-only (fail closed), except Gemini chat models on sdk: google (see defaultModelInput).
ai.providers.<key>.capabilities.streamingboolean | stringno——
ai.providers.<key>.capabilities.toolCallingboolean | stringno——
ai.providers.<key>.capabilities.thinkingboolean | stringno——
ai.providers.<key>.inputarray<string>no—Explicit model input modalities. Prefer this over inferred provider identity.
ai.providers.<key>.providerOptionsobjectno—Extra AI SDK providerOptions, merged into every request of this provider, keyed by SDK provider id. For Gemini: { google: { safetySettings: [...], thinkingConfig: { thinkingLevel: 'low' } } }. See ai.google.dev safety settings.
ai.providers.<key>.contextCacheobjectno—Gemini context caching (sdk: google): { mode: 'explicit', ttlSeconds }. Default implicit.
ai.providers.<key>.contextCache.modestringno—implicit (default) leaves requests untouched. explicit creates cachedContents.
ai.providers.<key>.contextCache.ttlSecondsnumber | stringno—Lifetime of each created cache. Default 600.
ai.providers.<key>.contextCache.minPrefixCharsnumber | stringno—Prefixes shorter than this (characters of JSON) are not worth a cache. Default 8000 (~2k tokens).
ai.providers.<key>.imageGenerationobjectno—文生图默认(zhipu / cloudflare 等支持 generateImage 的 driver)
ai.providers.<key>.imageGeneration.watermarkEnabledboolean | stringno—智谱 API watermark_enabled;默认 true
ai.providers.<key>.imageGeneration.defaultModelstringno——
ai.providers.<key>.imageGeneration.defaultSizestringno—智谱:如 1024x1024、1280x1280
ai.providers.<key>.imageGeneration.numStepsnumber | stringno—Cloudflare Flux:推理步数,默认 4
ai.providers.<key>.imageGeneration.qualitystringno—OpenAI GPT Image:low | medium | high | auto
ai.providers.<key>.imageGeneration.aspectRatiostringno—Gemini:如 1:1、16:9
ai.providers.<key>.imageGeneration.imageSizestringno—Gemini:如 1K、2K、4K
ai.providers.<key>.imageGeneration.promptSuffixstringno—追加到 agent/用户 prompt 末尾的风格约束(如写实摄影)。 需要动漫风时不要配置,或在工具 prompt 里写明即可。
ai.providers.<key>.hoststringno——
ai.providers.<key>.num_ctxnumber | stringno——
ai.agentsobject | nullno—per-agent 绑定(协作角色如 researcher 亦用 agents.<role>);IM 入站总是交给 zhin
ai.agents.<key>.providerstringno——
ai.agents.<key>.modelstringno——
ai.agents.<key>.mcpServersarray | nullno——
ai.agents.<key>.nicknamestringno—Agent 昵称(LLM 自称 + IM 协作展示,ADR 0024)。
ai.sessionsobject | nullno——
ai.sessions.maxHistorynumber | stringno—最大历史消息数(数据库模式默认200,内存模式默认100)
ai.sessions.expireMsnumber | stringno—会话过期时间(毫秒,数据库模式默认7天,内存模式默认24小时)
ai.sessions.useDatabaseboolean | stringno—是否使用数据库持久化存储(默认 true)
ai.sessions.coldStartMaxMessagesnumber | stringno—无摘要时冷启动最多条数(默认 50)
ai.sessions.coldStartMaxAgeMsnumber | stringno—冷启动时间窗(毫秒,默认 24h)
ai.sessions.sessionIdleArchiveMsnumber | stringno—空闲后自动归档 active 会话(毫秒,默认 7 天;0=关闭)
ai.contextobject | nullno——
ai.context.enabledboolean | stringno—是否启用消息记录(默认 true)
ai.context.maxRecentMessagesnumber | stringno—读取的最近消息数量(默认 100)
ai.context.summaryThresholdnumber | stringno—触发总结的消息数量阈值(默认 50)
ai.context.keepAfterSummarynumber | stringno—总结后保留的消息数量(默认 10)
ai.context.maxContextTokensnumber | stringno—上下文最大 token 估算(默认 4000)
ai.context.summaryPromptstringno—自定义总结提示词
ai.imageGenerationobject | nullno—文生图全局默认(可被 providers.&lt;alias&gt;.imageGeneration 覆盖)。 智谱:watermarkEnabled: false 需先在智谱开放平台签署去水印免责声明。
ai.imageGeneration.watermarkEnabledboolean | stringno—智谱 API watermark_enabled;默认 true
ai.imageGeneration.defaultModelstringno——
ai.imageGeneration.defaultSizestringno—智谱:如 1024x1024、1280x1280
ai.imageGeneration.numStepsnumber | stringno—Cloudflare Flux:推理步数,默认 4
ai.imageGeneration.qualitystringno—OpenAI GPT Image:low | medium | high | auto
ai.imageGeneration.aspectRatiostringno—Gemini:如 1:1、16:9
ai.imageGeneration.imageSizestringno—Gemini:如 1K、2K、4K
ai.imageGeneration.promptSuffixstringno—追加到 agent/用户 prompt 末尾的风格约束(如写实摄影)。 需要动漫风时不要配置,或在工具 prompt 里写明即可。
ai.multimodalobject | nullno—入站/出站多模态(base64 契约;平台 adapter 负责编解码与发送)
ai.multimodal.enabledboolean | stringno——
ai.multimodal.maxFileBytesnumber | stringno——
ai.multimodal.inboundDirstringno——
ai.multimodal.outboundDirstringno——
ai.multimodal.imageobjectno——
ai.multimodal.image.maxDimensionnumber | stringno——
ai.multimodal.image.preferNativeVisionboolean | stringno——
ai.multimodal.audioobjectno——
ai.multimodal.audio.strategystringno——
ai.multimodal.videoobjectno——
ai.multimodal.video.strategystringno——
ai.multimodal.video.mcpServerstringno——
ai.multimodal.video.maxFramesnumber | stringno——
ai.multimodal.outboundobjectno——
ai.multimodal.outbound.splitMessagesstringno——
ai.multimodal.perceptionobject | nullno—Perception pre-pass: when the turn's model cannot take an image / video / PDF, this media-capable model describes it and the description is injected as untrusted text ([图片描述] …). Unset = off (placeholders as before).
ai.multimodal.perception.providerstringno—ai.providers alias of the perception model.
ai.multimodal.perception.modelstringno——
ai.multimodal.perception.kindsarray<string>no—Kinds to describe. Default ['image']; file covers PDFs only.
ai.multimodal.perception.maxCharsnumber | stringno—Description length cap in characters. Default 800.
ai.multimodal.perception.timeoutMsnumber | stringno—Per-attempt timeout in ms. Default 30000.
ai.multimodal.perception.maxItemsPerTurnnumber | stringno—Media described per turn; the rest keep the placeholder. Default 4.
ai.multimodal.perception.fallbacksarray<object>no—主识图模型失败、空回答或不支持该媒体时,按顺序尝试;不改变主对话模型。
ai.multimodal.perception.fallbacks[].providerstringyes——
ai.multimodal.perception.fallbacks[].modelstringyes——
ai.memoryobject | nullno—三层 Markdown 文件记忆(global / platform / session)。 默认启用;设 enabled: false 可关闭注入。
ai.memory.enabledboolean | stringno——
ai.memory.semanticobject | nullno—L4 语义记忆:memory_entries 表 + memory_search/upsert 工具
ai.memory.semantic.enabledboolean | stringno——
ai.memory.semantic.autoConsolidateboolean | stringno——
ai.memory.semantic.recallobject | nullno—Per-turn recall (#734): BM25 top-k entries relevant to the current message are added to the turn context. Default on when semantic memory is enabled; topK 5, maxTokens 400.
ai.memory.semantic.recall.enabledboolean | stringno——
ai.memory.semantic.recall.topKnumber | string | nullno——
ai.memory.semantic.recall.maxTokensnumber | string | nullno——
ai.memory.budgetsobjectno——
ai.memory.budgets.sessionnumber | stringno——
ai.memory.budgets.platformnumber | stringno——
ai.memory.budgets.globalnumber | stringno——
ai.memory.budgets.dailynumber | stringno——
ai.knowledgeobjectno—本地知识库(knowledge_search 工具数据源)。 放置 .md / .txt 文件到 baseDir,Agent 可通过 knowledge_search 工具检索。
ai.knowledge.baseDirstringno—项目根目录内的知识库目录路径。配置该段时必须显式声明。
ai.githubMcpobjectno—PAT for adapter-github auto-registered server-github MCP (overrides env when set).
ai.githubMcp.tokenstringno——
ai.githubMcp.enabledboolean | stringno—为 true 时注册 server-github MCP(PAT,人身份);默认 false,Bot 写操作用 adapter github_* 工具
ai.mcpServersarray | nullno—External MCP servers for the Agent MCP client (global, all bots). Listed servers are exposed to ZhinAgent tool pool when connected.
ai.accessobject | nullno—AI 访问控制(平台 AIGC 合规;Endpoint 可用 aiAccess 覆盖)
ai.access.modestringno—open | closed | whitelist,默认 open
ai.access.usersarray<string>no—允许触发 AI 的 sender.id
ai.access.groupsarray<string>no—允许触发 AI 的 group/channel id
ai.access.denyMessagestringno—私聊拒绝时的回复文案
ai.triggerobject | nullno—AI 触发配置
ai.trigger.enabledboolean | stringno—是否启用(默认 true)
ai.trigger.prefixesarray<string>no—触发前缀列表(默认 ['#', 'AI:'])
ai.trigger.respondToAtboolean | stringno—是否响应 @ 机器人(默认 true)
ai.trigger.respondToPrivateboolean | stringno—是否响应私聊(默认 true)
ai.trigger.keywordsarray<string>no—触发关键词(可选)
ai.trigger.ignorePrefixesarray<string>no—忽略的前缀(命令前缀,避免与命令冲突,默认 ['/', '!', '!'])
ai.trigger.timeoutnumber | stringno—超时时间(毫秒,默认 60000)
ai.trigger.thinkingMessagestringno—思考中提示语(可选,设置后会在处理前发送)
ai.trigger.errorTemplatestringno—入口层错误提示模板,{error} 为错误信息(可选;不配置时用聊天口吻说"刚卡了一下",主人额外看到原因)
ai.trigger.ambientobjectno—群聊旁听:群里没人叫机器人时,由判断模型决定是否接话。被 @、引用和私聊不经过这里,总会交给 Agent(Agent 也可以选择不回复)。
ai.trigger.ambient.conversationsarray<string>no—开启旁听的群,格式 platform:groupId;* 表示所有群。默认为空(关闭)
ai.trigger.ambient.judgestring | arrayno—判断模型 providerAlias/model;也可以写成列表,前一个失败或限流时按顺序换下一个(免费额度通常按模型分别计算)。默认用主 Agent 的模型
ai.trigger.ambient.quietMsnumber | stringno—群安静多久后才判断一次(毫秒,默认 4000)
ai.trigger.ambient.cooldownMsnumber | stringno—两次主动插话之间的最短间隔(毫秒,默认 120000);对话进行中不受限制
ai.trigger.ambient.maxPerHournumber | stringno—每个群每小时最多主动插话次数(默认 3);对话进行中不计入
ai.trigger.ambient.conversationWindowMsnumber | stringno—机器人说话后,这段时间内算作对话进行中:群友接它的话只由判断模型决定,不受冷却和每小时次数限制(毫秒,默认 180000)
ai.trigger.ambient.judgeIntervalMsnumber | stringno—没在对话时,同一个群至少隔这么久才判断一次(毫秒,默认 30000),节省判断模型的额度
ai.trigger.ambient.minConfidencenumber | stringno—判断模型置信度门槛 0..1(默认 0.7)
ai.trigger.ambient.modestring: "active", "shadow"no—shadow 只记录判断结果、不回复(默认 active)
ai.usageobject | nullno—结构化用量存储(SQLite、MySQL、PostgreSQL);独立于日志级别,不保存正文或工具参数。
ai.usage.retentionDaysinteger | stringno30用量明细保留天数,正整数,默认 30 天;按回合结束时间清理,子调用与所属回合一起删除。
menuKeywordstring | falseno—Built-in command menu keyword. Defaults to 菜单; false or an empty string disables the menu.
menuStyleobjectno—Command menu appearance when an HTML renderer is available; plain text fallback remains available.
menuStyle.titlestringno—Menu title.
menuStyle.subtitlestringno—Menu subtitle.
menuStyle.accentColorstringno—Six-digit hex accent color; invalid values use the renderer default.
menuStyle.backgroundImagestringno—HTTP(S) image or PNG/JPEG/WebP data URL; unsupported values use the renderer default.
mcpobjectno—Expose Bot tools through an MCP Server.
mcp.enabledboolean | stringno——
mcp.pathstring | nullno——
mcp.tokenstring | nullno——
mcp.allowUnauthenticatedLocalhostboolean | stringno——
a2aobjectno—A2A Agent Card, remote execution, and Workroom callbacks.
a2a.enabledboolean | stringno——
a2a.pathstring | nullno——
a2a.tokenstring | nullno——
a2a.publicUrlstring | nullno——
a2a.workroomCallbacksobject | nullno——
a2a.workroomCallbacks.enabledboolean | stringno——
a2a.workroomCallbacks.pathstringno—Must remain outside the ordinary /a2a/{agent}/* route tree.
a2a.workroomCallbacks.maxBodyBytesnumber | stringno——
a2a.workroomCallbacks.maxSequenceGapnumber | stringno——
a2a.workroomCallbacks.bindingsarray<object>no——
a2a.workroomCallbacks.bindings[].endpointIdstringno——
a2a.workroomCallbacks.bindings[].tenantIdstringno——
a2a.workroomCallbacks.bindings[].cardDigeststringno——
a2a.workroomCallbacks.bindings[].authBindingIdstringno——
a2a.workroomCallbacks.bindings[].trustDomainstringno——
a2a.workroomCallbacks.bindings[].extensionDigeststringno——
a2a.workroomCallbacks.bindings[].credentialIdstringno——
a2a.workroomCallbacks.bindings[].credentialobject | objectno——
a2a.workroomCallbacks.bindings[].enabledboolean | stringno——
a2a.workroomCallbacks.bindings[].expiresAtnumber | stringno——
a2a.workroomRemoteExecutorsobject | nullno—Transport endpoints only. Project/Workroom topology remains in the persistent Catalog.
a2a.workroomRemoteExecutors.enabledboolean | stringno——
a2a.workroomRemoteExecutors.maxResponseBytesnumber | stringno——
a2a.workroomRemoteExecutors.bindingsarray<object>no——
a2a.workroomRemoteExecutors.bindings[].endpointIdstringno——
a2a.workroomRemoteExecutors.bindings[].cardDigeststringno——
a2a.workroomRemoteExecutors.bindings[].authBindingIdstringno——
a2a.workroomRemoteExecutors.bindings[].dispatchUrlstringno——
a2a.workroomRemoteExecutors.bindings[].pollUrlstringno——
a2a.workroomRemoteExecutors.bindings[].credentialobject | objectno——
a2a.workroomRemoteExecutors.bindings[].authorityobjectno——
a2a.workroomRemoteExecutors.bindings[].authority.workroomExtension"https://zhin.dev/extensions/workroom-executor/v1" | stringno——
a2a.workroomRemoteExecutors.bindings[].authority.idempotentDispatchboolean | stringno——
a2a.workroomRemoteExecutors.bindings[].authority.typedCompletionEnvelopeboolean | stringno——
a2a.workroomRemoteExecutors.bindings[].authority.workspaceProvidersarray<string>no——
a2a.workroomRemoteExecutors.bindings[].enabledboolean | stringno——
speechobjectno—Speech-to-text and text-to-speech Host.
speech.sttobject | nullno——
speech.stt.enabledboolean | stringno——
speech.stt.providerstringno——
speech.stt.modelstringno——
speech.stt.hoststringno——
speech.stt.apiKeystringno——
speech.ttsobject | nullno——
speech.tts.enabledboolean | stringno——
speech.tts.providerstringno——
speech.tts.voicestringno——
speech.tts.modelstringno——
speech.tts.hoststringno——
speech.tts.apiKeystringno——
speech.tts.ratestringno—edge-tts
speech.tts.pitchstringno——
speech.tts.edgeTtsCommandstringno——
speech.tts.regionstringno—azure
speech.tts.subscriptionKeystringno——
speech.tts.baseUrlstringno—custom OpenAI-compatible
speech.tts.headersobjectno——
speech.tts.speednumber | stringno——
htmlRendererobjectno—HTML and image rendering options backed by Shotium.
htmlRenderer.widthnumberno—Default layout width in CSS pixels.
htmlRenderer.defaultWidthnumberno—Legacy alias of width.
htmlRenderer.viewportobjectno—Default viewport for Shotium rendering.
htmlRenderer.viewport.widthnumberno—Viewport width in CSS pixels.
htmlRenderer.viewport.heightnumberno—Viewport height in CSS pixels.
htmlRenderer.backgroundColorstringno—Fragment background color.
htmlRenderer.defaultBackgroundColorstringno—Legacy alias of backgroundColor.
htmlRenderer.scalenumberno—Device scale factor.
htmlRenderer.typestring: "png", "jpeg", "webp"no—Default raster output format.
htmlRenderer.qualitynumberno—Quality for jpeg/webp output.
htmlRenderer.timeoutnumberno—Navigation timeout in milliseconds.
htmlRenderer.waitUntilstring: "load", "networkidle"no—Navigation wait strategy.
htmlRenderer.fontFamilystringno—Default font-family for fragments.
htmlRenderer.maxImageHeightnumberno—Split overly tall PNGs above this height; 0 disables splitting.
htmlRenderer.sliceCompressionnumberno—Compression level used when splitting PNGs.
htmlRenderer.allowFileAccessbooleanno—Allow local file subresources.
htmlRenderer.takeOverHtmlSegmentsbooleanno—Take over html/markdown rich-segment image rendering.
htmlRenderer.cacheDirstringno—HTTP cache directory; use off to disable.
htmlRenderer.cacheMaxBytesnumberno—Maximum HTTP cache size in bytes.
htmlRenderer.userAgentstringno—Custom user agent string.
htmlRenderer.idleTimeoutMsnumberno—Daemon idle-exit timeout in milliseconds.
htmlRenderer.logStatsbooleanno—Log render timing statistics.
htmlRenderer.modestring: "inprocess", "daemon"no—Whether Shotium runs in-process or as a daemon.
htmlRenderer.aiTextAsImageboolean | objectno—Optional plain-text to image conversion before send.
assistantobjectno—Scheduled jobs, event ingress, and failure notifications.
assistant.enabledboolean | stringno—启用统一 JobStore(默认 false,Stable 行为不变)
assistant.queueobject | nullno—Schedule execution queue(重试 / 并发 / 死信)
assistant.queue.maxConcurrencynumber | string | nullno—Schedule execution 并发上限
assistant.queue.maxRetriesnumber | string | nullno——
assistant.queue.defaultTimeoutMsnumber | string | nullno——
assistant.defaultsobject | nullno——
assistant.defaults.notifyobject | object | object | object | nullno—未显式指定 notify 时的默认投递目标(M3)
assistant.defaults.notifyOnFailureboolean | stringno—Job 失败时是否通知(默认 false)
assistant.profileobject | nullno——
assistant.profile.enabledboolean | stringno—启用 Profile 覆盖 Bootstrap(默认 false)
assistant.profile.filestring | nullno—相对项目根路径,默认 assistant.profile.yml
assistant.homeobject | nullno——
assistant.home.enabledboolean | stringno——
assistant.home.restUrlstringno—HA REST 基址,如 http://homeassistant.local:8123
assistant.home.restTokenstringno—HA 长期访问令牌
assistant.home.mcpServerstringno—可选:ai.mcpServers 中的名称(REST 为主,MCP 仅校验)
assistant.home.aliasesobject | nullno—中文/友好名 → entity_id
assistant.home.policyobject | nullno——
assistant.home.policy.requireMasterboolean | stringno—仅 master 可调用 home_*(默认 true)
assistant.home.policy.confirmServicesarray | nullno—写操作需 Owner 审批的 HA domain(默认 lock、alarm_control_panel)
assistant.home.policy.allowedServiceDomainsarray | nullno—home_call_service 允许的 domain 白名单(默认 light/climate/scene/cover/script)
assistant.home.watcharray | nullno—要通过 HA WebSocket 订阅状态变化的设备别名列表
assistant.home.debounceMsnumber | string | nullno—同实体状态变化推送的防抖间隔(毫秒,默认 5000)
assistant.eventsobject | nullno——
assistant.events.enabledboolean | stringno—启用 POST /api/assistant/events(需 assistant.enabled)
assistant.events.tokenstringno—可选专用 Bearer;未设时复用 http.token(路由仍在 /api 下受全局鉴权保护)。
assistant.events.allowedSourcesarray<string>no—允许的来源白名单;空数组表示不限制
assistant.events.rateLimitPerMinutenumber | string | nullno—每来源每分钟最大请求数(默认 60)
log_levelstring | numberno—Runtime log level.
pluginobjectno—Root Plugin configuration; replaced by its project schema during composition.

Plugin instance fields ​

These fields use the Runtime schema reader for trusted plugins’ config: Schema.object(...) declarations or schema.json; isolated plugins must use schema.json. Top-level <name> is the default instanceKey; plugins.<name> only stores the package reference.

dingtalk ​

plugins/adapters/dingtalk/schema.json

PathTypeRequiredDefaultDescription
dingtalk.apiBaseUrlstringno"https://oapi.dingtalk.com"—
dingtalk.masterstring | numberno—框架 master(DingTalk userid;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
dingtalk.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
dingtalk.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
dingtalk.endpoints[].masterstring | numberno—本 endpoint 的框架 master(DingTalk userid);覆盖顶层 master
dingtalk.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
dingtalk.endpoints[].appKeystringyes—Dingtalk app key
dingtalk.endpoints[].appSecretstringyes—Dingtalk app secret
dingtalk.endpoints[].webhookPathstringno—Dingtalk webhook path
dingtalk.endpoints[].robotCodestringno—Dingtalk robot code
dingtalk.endpoints[].apiBaseUrlstringno——
dingtalk.endpoints[].commandPrefixstringno——
dingtalk.endpoints[].idstringyes—Dingtalk bot name
dingtalk.endpoints[].modestring: "webhook", "stream"no"webhook"—
dingtalk.endpoints[].cardTemplateIdstringno—Stream interactive card template ID
dingtalk.endpoints[].cardButtonCountintegerno2Fixed button count in the card template
dingtalk.endpoints[].streamProxyobjectno—故障验收专用:TCP固定127.0.0.1,保留真实WSS TLS身份
dingtalk.endpoints[].streamProxy.portintegeryes——
dingtalk.endpoints[].streamProxy.serverNamestringyes——
dingtalk.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖
dingtalk.modestring: "webhook", "stream"no"webhook"—
dingtalk.cardTemplateIdstringno—Stream interactive card template ID
dingtalk.cardButtonCountintegerno2Fixed button count in the card template

discord ​

plugins/adapters/discord/schema.json

PathTypeRequiredDefaultDescription
discord.connectionstring: "gateway", "interactions"no"gateway"Gateway WebSocket (default). interactions uses httpHostToken POST + Ed25519 verify.
discord.intentsarray<number>no——
discord.enableSlashCommandsbooleannofalse—
discord.globalCommandsbooleannofalse—
discord.defaultActivityobjectno——
discord.defaultActivity.namestringyes——
discord.defaultActivity.typestring: "PLAYING", "STREAMING", "LISTENING", "WATCHING", "COMPETING"yes——
discord.defaultActivity.urlstringno——
discord.slashCommandsarray<object>no——
discord.applicationIdstringno—Required when connection is interactions.
discord.publicKeystringno—Required when connection is interactions (hex Ed25519 public key).
discord.interactionsPathstringno"/discord/interactions"POST path on httpHostToken when connection is interactions.
discord.masterstring | numberno—框架 master(Discord user snowflake;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
discord.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
discord.endpointsarray<object>yes—多账号:每项定义一个 endpoint,id/token 必填,其余字段覆盖实例默认值
discord.endpoints[].masterstring | numberno—本 endpoint 的框架 master(Discord user snowflake);覆盖顶层 master
discord.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
discord.endpoints[].tokenstringyes—Discord bot token
discord.endpoints[].connectionstring: "gateway", "interactions"no——
discord.endpoints[].intentsarray<number>no——
discord.endpoints[].enableSlashCommandsbooleanno——
discord.endpoints[].globalCommandsbooleanno——
discord.endpoints[].defaultActivityobjectno——
discord.endpoints[].defaultActivity.namestringyes——
discord.endpoints[].defaultActivity.typestring: "PLAYING", "STREAMING", "LISTENING", "WATCHING", "COMPETING"yes——
discord.endpoints[].defaultActivity.urlstringno——
discord.endpoints[].slashCommandsarray<object>no——
discord.endpoints[].applicationIdstringno——
discord.endpoints[].publicKeystringno——
discord.endpoints[].interactionsPathstringno——
discord.endpoints[].commandPrefixstringno——
discord.endpoints[].idstringyes—Discord bot name
discord.endpoints[].gatewayFaultProxyUrlstringno—Isolated acceptance only: loopback Gateway fault proxy; REST unchanged.
discord.endpoints[].restApiProxyobjectno—Gateway测试实例REST专用故障代理:discord.com:443固定loopback TCP,保留SNI/证书校验,独立于Gateway代理
discord.endpoints[].restApiProxy.portintegeryes——
discord.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖
discord.gatewayFaultProxyUrlstringno—Isolated acceptance only: loopback Gateway fault proxy; REST unchanged.

email ​

plugins/adapters/email/schema.json

PathTypeRequiredDefaultDescription
email.masterstring | numberno—框架 master(email address;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
email.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
email.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
email.endpoints[].masterstring | numberno—本 endpoint 的框架 master(email address);覆盖顶层 master
email.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
email.endpoints[].smtpobjectyes——
email.endpoints[].smtp.hoststringyes——
email.endpoints[].smtp.portnumberyes——
email.endpoints[].smtp.securebooleanyes——
email.endpoints[].smtp.authobjectyes——
email.endpoints[].smtp.auth.userstringyes——
email.endpoints[].smtp.auth.passstringyes——
email.endpoints[].smtp.serverNamestringno—TLS SNI 与证书主机名校验,代理场景保留原服务域名;不改变证书校验策略
email.endpoints[].imapobjectyes——
email.endpoints[].imap.hoststringyes——
email.endpoints[].imap.portnumberyes——
email.endpoints[].imap.tlsbooleanyes——
email.endpoints[].imap.userstringyes——
email.endpoints[].imap.passwordstringyes——
email.endpoints[].imap.checkIntervalnumberno60000—
email.endpoints[].imap.reconnectIntervalnumberno5000—
email.endpoints[].imap.mailboxstringno"INBOX"—
email.endpoints[].imap.markSeenbooleannotrue—
email.endpoints[].imap.serverNamestringno—TLS SNI 与证书主机名校验,代理场景保留原服务域名;不改变证书校验策略
email.endpoints[].attachmentsobjectno——
email.endpoints[].attachments.enabledbooleannofalse—
email.endpoints[].attachments.downloadPathstringno——
email.endpoints[].attachments.maxFileSizenumberno——
email.endpoints[].attachments.allowedTypesarray<string>no——
email.endpoints[].commandPrefixstringno——
email.endpoints[].idstringyes—Email bot name
email.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

github ​

plugins/adapters/github/schema.json

PathTypeRequiredDefaultDescription
github.hoststringno—GitHub Enterprise hostname (default github.com)
github.webhook_pathstringno"/github/webhook"—
github.auto_reply_reposarray<string>no—Repos whose Issue/PR comments auto-trigger AI without @bot
github.bot_loginstringno—Override App bot login (default {slug}[bot])
github.workspace_rootstringno—Managed git workspace root
github.masterstring | numberno—框架 master(GitHub user login or id;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
github.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
github.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint
github.endpoints[].masterstring | numberno—本 endpoint 的框架 master(GitHub user login or id);覆盖顶层 master
github.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
github.endpoints[].app_idstring | numberyes—GitHub App ID
github.endpoints[].private_keystringyes—GitHub App private key (PEM content or file path)
github.endpoints[].webhook_secretstringno—Webhook HMAC secret; enables httpHostToken POST route
github.endpoints[].idstringyes—GitHub App bot name
github.endpoints[].hoststringno—GitHub Enterprise hostname
github.endpoints[].webhook_pathstringno—Webhook route path
github.endpoints[].auto_reply_reposarray<string>no—Repos whose comments auto-trigger AI
github.endpoints[].bot_loginstringno—Override App bot login
github.endpoints[].workspace_rootstringno—Managed git workspace root
github.endpoints[].commandPrefixstringno—本 endpoint 的命令前缀
github.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

icqq ​

plugins/adapters/icqq/schema.json

PathTypeRequiredDefaultDescription
icqq.masterstring | numberyes—框架 master QQ uin(/approve、AI/工具权限);endpoints[i].master 可逐项覆盖
icqq.trustedarray<string | number>no—框架 trusted QQ uin 列表(弱于 master)
icqq.passwordstringno—QQ 密码(可选,不填则扫码登录)
icqq.platformnumber: 1, 2, 3, 4, 5, 6, 7no1登录设备平台:1=Android, 2=aPad, 3=Watch, 4=iMac, 5=iPad, 6=Tim, 7=Custom
icqq.verstringno—协议版本号,仅在对应 platform 有多个版本时有效,不填则使用最新版本
icqq.signApiAddrstringno—签名服务器地址;未配置时若安装了 @icqqjs/qqsign 则自动使用本地签名
icqq.dataDirstringno—数据存储文件夹路径,默认为主模块下的 data 文件夹
icqq.autoReconnectbooleannotrue断线后是否自动重连(默认 true)
icqq.outboundMediastring: "file", "base64"no"file"出站媒体模式:file=落盘本地路径(默认); base64=CQ base64:// 内联
icqq.ignoreSelfbooleannotrue群聊和频道中是否过滤自己的消息(默认 true)
icqq.resendbooleannofalse被风控时是否尝试用分片发送(默认 false)
icqq.cacheGroupMemberbooleannotrue是否缓存群员列表(默认 true);群多时(500+)会多占约 100MB+ 内存
icqq.autoServerbooleannotrue是否自动选择最优服务器(默认 true)
icqq.qqntbooleannotrue是否使用 QQNT 协议(默认 true)
icqq.ntLoginbooleanno—是否使用 NT 登录方式
icqq.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
icqq.endpoints[].idstringyes—QQ uin
icqq.endpoints[].masterstring | numberno—本 endpoint 的 master QQ uin;覆盖顶层 master
icqq.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
icqq.endpoints[].passwordstringno—本 endpoint 的 QQ 密码
icqq.endpoints[].platformnumber: 1, 2, 3, 4, 5, 6, 7no—登录设备平台:1=Android, 2=aPad, 3=Watch, 4=iMac, 5=iPad, 6=Tim, 7=Custom
icqq.endpoints[].verstringno—协议版本号
icqq.endpoints[].signApiAddrstringno—签名服务器地址
icqq.endpoints[].dataDirstringno—数据存储文件夹路径
icqq.endpoints[].autoReconnectbooleanno—断线后是否自动重连
icqq.endpoints[].outboundMediastring: "file", "base64"no—出站媒体模式
icqq.endpoints[].ignoreSelfbooleanno—是否过滤自己的消息
icqq.endpoints[].resendbooleanno—被风控时是否分片发送
icqq.endpoints[].cacheGroupMemberbooleanno—是否缓存群员列表
icqq.endpoints[].autoServerbooleanno—是否自动选择最优服务器
icqq.endpoints[].qqntbooleanno—是否使用 QQNT 协议
icqq.endpoints[].ntLoginbooleanno—是否使用 NT 登录方式
icqq.endpoints[].commandPrefixstringno—本 endpoint 的命令前缀
icqq.commandPrefixstringno""命令前缀(默认 '' 无前缀)。endpoints[i] 可逐项覆盖

kook ​

plugins/adapters/kook/schema.json

PathTypeRequiredDefaultDescription
kook.connectionstring: "websocket", "webhook"no"websocket"WebSocket gateway (default). webhook requires httpHostToken, verify_token, and a public HTTPS callback URL.
kook.webhookPathstringno"/kook/webhook"POST path registered via httpHostToken when connection is webhook.
kook.data_dirstringno——
kook.timeoutnumberno10000—
kook.max_retrynumberno3—
kook.ignorestring: "bot", "self"no"bot"—
kook.logLevelstring: "trace", "debug", "info", "warn", "error", "fatal", "mark", "off"no"info"—
kook.masterstring | numberno—框架 master(KOOK user id;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
kook.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
kook.endpointsarray<object>yes—多账号:每项定义一个 endpoint,id/token 必填,其余字段覆盖实例默认值
kook.endpoints[].masterstring | numberno—本 endpoint 的框架 master(KOOK user id);覆盖顶层 master
kook.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
kook.endpoints[].tokenstringyes—KOOK bot token
kook.endpoints[].connectionstring: "websocket", "webhook"no——
kook.endpoints[].webhookPathstringno——
kook.endpoints[].verify_tokenstringno—KOOK developer console verify token (required for webhook mode).
kook.endpoints[].encrypt_keystringno—Optional Encrypt Key when message encryption is enabled in KOOK console.
kook.endpoints[].data_dirstringno——
kook.endpoints[].timeoutnumberno——
kook.endpoints[].max_retrynumberno——
kook.endpoints[].ignorestring: "bot", "self"no——
kook.endpoints[].logLevelstring: "trace", "debug", "info", "warn", "error", "fatal", "mark", "off"no——
kook.endpoints[].commandPrefixstringno——
kook.endpoints[].idstringyes—KOOK bot name
kook.endpoints[].streamProxyobjectno—WSS故障验收固定loopback,保持真实TLS身份
kook.endpoints[].streamProxy.portintegeryes——
kook.endpoints[].streamProxy.serverNamestringyes——
kook.endpoints[].apiProxyobjectno—Optional fixed loopback TCP route for www.kookapp.cn JSON API only; verified TLS remains enabled.
kook.endpoints[].apiProxy.portintegeryes——
kook.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

lark ​

plugins/adapters/lark/schema.json

PathTypeRequiredDefaultDescription
lark.webhookPathstringno"/lark/webhook"—
lark.apiBaseUrlstringno——
lark.isFeishubooleannotrue—
lark.masterstring | numberno—框架 master(Lark/Feishu open_id or user_id;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
lark.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
lark.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
lark.endpoints[].masterstring | numberno—本 endpoint 的框架 master(Lark/Feishu open_id or user_id);覆盖顶层 master
lark.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
lark.endpoints[].appIdstringyes—Lark app ID
lark.endpoints[].appSecretstringyes—Lark app secret
lark.endpoints[].encryptKeystringno—Lark encrypt key
lark.endpoints[].verificationTokenstringno—Lark verification token
lark.endpoints[].webhookPathstringno——
lark.endpoints[].apiBaseUrlstringno——
lark.endpoints[].isFeishubooleanno——
lark.endpoints[].commandPrefixstringno——
lark.endpoints[].idstringyes—Lark bot name
lark.endpoints[].modestring: "webhook", "websocket"no"webhook"—
lark.endpoints[].streamProxyobjectno—WSS故障验收:仅TCP固定loopback,保留TLS身份
lark.endpoints[].streamProxy.portintegeryes——
lark.endpoints[].streamProxy.serverNamestringyes——
lark.endpoints[].webApiProxyobjectno—默认关闭;仅飞书出站API的loopback TLS故障代理,保留官方Host/SNI和证书校验,与streamProxy独立
lark.endpoints[].webApiProxy.portintegeryes——
lark.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖
lark.modestring: "webhook", "websocket"no"webhook"—
lark.webApiProxyobjectno—默认关闭;仅飞书出站API的loopback TLS故障代理,保留官方Host/SNI和证书校验,与streamProxy独立
lark.webApiProxy.portintegeryes——

line ​

plugins/adapters/line/schema.json

PathTypeRequiredDefaultDescription
line.webhookPathstringno"/line/webhook"—
line.apiBaseUrlstringno"https://api.line.me"—
line.masterstring | numberno—框架 master(LINE user id;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
line.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
line.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
line.endpoints[].masterstring | numberno—本 endpoint 的框架 master(LINE user id);覆盖顶层 master
line.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
line.endpoints[].channelSecretstringyes—LINE channel secret
line.endpoints[].channelAccessTokenstringyes—LINE channel access token
line.endpoints[].webhookPathstringno——
line.endpoints[].apiBaseUrlstringno——
line.endpoints[].commandPrefixstringno——
line.endpoints[].idstringyes—LINE bot name
line.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

milky ​

plugins/adapters/milky/schema.json

PathTypeRequiredDefaultDescription
milky.connectionstring: "ws", "sse", "webhook", "wss"no"ws"ws (default), sse (EventSource client), webhook or wss (webhook/wss via httpHostToken)
milky.reconnect_intervalnumberno5000—
milky.heartbeat_intervalnumberno30000—
milky.masterstring | numberno—框架 master(QQ uin;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
milky.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
milky.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
milky.endpoints[].masterstring | numberno—本 endpoint 的框架 master(QQ uin);覆盖顶层 master
milky.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
milky.endpoints[].connectionstring: "ws", "sse", "webhook", "wss"no——
milky.endpoints[].baseUrlstringyes—Milky HTTP API base URL (required); WS event path is derived as ws(s)😕/host/event
milky.endpoints[].pathstringno—Path for webhook / reverse-wss
milky.endpoints[].access_tokenstringno—Milky access token
milky.endpoints[].reconnect_intervalnumberno——
milky.endpoints[].heartbeat_intervalnumberno——
milky.endpoints[].commandPrefixstringno——
milky.endpoints[].idstringyes—Milky bot name
milky.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

napcat ​

plugins/adapters/napcat/schema.json

PathTypeRequiredDefaultDescription
napcat.connectionstring: "ws", "wss", "http"no"ws"ws (default), wss (reverse WS), or http (POST webhook + HTTP API outbound)
napcat.reconnect_intervalnumberno5000—
napcat.heartbeat_intervalnumberno30000—
napcat.poll_intervalnumberno30000—
napcat.masterstring | numberno—框架 master(QQ uin;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
napcat.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
napcat.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
napcat.endpoints[].masterstring | numberno—本 endpoint 的框架 master(QQ uin);覆盖顶层 master
napcat.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
napcat.endpoints[].connectionstring: "ws", "wss", "http"no——
napcat.endpoints[].urlstringno—NapCat WebSocket URL (required for connection: ws)
napcat.endpoints[].pathstringno—WS path for reverse-wss
napcat.endpoints[].http_urlstringno—HTTP API base URL (connection: http outbound)
napcat.endpoints[].post_pathstringno—HTTP POST event path (connection: http inbound)
napcat.endpoints[].access_tokenstringno—NapCat access token
napcat.endpoints[].reconnect_intervalnumberno——
napcat.endpoints[].heartbeat_intervalnumberno——
napcat.endpoints[].poll_intervalnumberno——
napcat.endpoints[].commandPrefixstringno——
napcat.endpoints[].idstringyes—NapCat bot name
napcat.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

onebot11 ​

plugins/adapters/onebot11/schema.json

PathTypeRequiredDefaultDescription
onebot11.connectionstring: "ws", "wss"no"ws"connection: ws (forward WS client, default) or wss (reverse WS via httpHostToken)
onebot11.reconnect_intervalnumberno5000—
onebot11.heartbeat_intervalnumberno30000—
onebot11.masterstring | numberno—框架 master(platform user id;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
onebot11.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
onebot11.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
onebot11.endpoints[].masterstring | numberno—本 endpoint 的框架 master(platform user id);覆盖顶层 master
onebot11.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
onebot11.endpoints[].connectionstring: "ws", "wss"no——
onebot11.endpoints[].urlstringno—OneBot implementation WebSocket URL (required for connection: ws)
onebot11.endpoints[].pathstringno—WS path for reverse-wss (connection: wss)
onebot11.endpoints[].access_tokenstringno—OneBot access token
onebot11.endpoints[].reconnect_intervalnumberno——
onebot11.endpoints[].heartbeat_intervalnumberno——
onebot11.endpoints[].commandPrefixstringno——
onebot11.endpoints[].idstringyes—OneBot11 bot name
onebot11.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

onebot12 ​

plugins/adapters/onebot12/schema.json

PathTypeRequiredDefaultDescription
onebot12.connectionstring: "ws", "webhook", "wss"no"ws"ws (default), webhook (httpHostToken POST), or wss (reverse WS via httpHostToken)
onebot12.reconnect_intervalnumberno5000—
onebot12.heartbeat_intervalnumberno30000—
onebot12.masterstring | numberno—框架 master(platform user id;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
onebot12.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
onebot12.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
onebot12.endpoints[].masterstring | numberno—本 endpoint 的框架 master(platform user id);覆盖顶层 master
onebot12.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
onebot12.endpoints[].connectionstring: "ws", "webhook", "wss"no——
onebot12.endpoints[].urlstringno—OneBot implementation WebSocket URL (required for connection: ws)
onebot12.endpoints[].pathstringno—HTTP/WS path for webhook or reverse-wss
onebot12.endpoints[].api_urlstringno—HTTP action endpoint for webhook outbound (required for connection: webhook send)
onebot12.endpoints[].access_tokenstringno—OneBot access token
onebot12.endpoints[].reconnect_intervalnumberno——
onebot12.endpoints[].heartbeat_intervalnumberno——
onebot12.endpoints[].commandPrefixstringno——
onebot12.endpoints[].idstringyes—OneBot12 bot name
onebot12.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

qq ​

plugins/adapters/qq/schema.json

PathTypeRequiredDefaultDescription
qq.modestring: "websocket", "webhook", "middleware"no"websocket"WebSocket gateway (default). webhook/middleware use httpHostToken POST.
qq.sandboxbooleannofalse—
qq.botKindstring: "public", "private"no"public"公域/私域:均含 GROUP_AND_C2C_EVENT;频道消息分别为 PUBLIC_GUILD_MESSAGES / GUILD_MESSAGES。未显式配置 intents 时按此展开
qq.masterstring | numberno—框架 master(endpoint 管理命令、AI/工具权限);openid。endpoints[i].master 可逐项覆盖
qq.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
qq.intentsarray<string>no—WebSocket Identify intents;省略时按 botKind 自动生成(public→含 PUBLIC_GUILD_MESSAGES)
qq.accessTokenUrlstringno——
qq.gatewayUrlstringno——
qq.webhookPathstringno"/qq/webhook"POST path on httpHostToken for webhook/middleware modes.
qq.endpointsarray<object>yes—多账号:每项定义一个 endpoint,id/appid/secret 必填,其余字段覆盖实例默认值
qq.endpoints[].appidstringyes—QQ official bot app ID
qq.endpoints[].secretstringyes—QQ official bot secret
qq.endpoints[].modestring: "websocket", "webhook", "middleware"no——
qq.endpoints[].sandboxbooleanno——
qq.endpoints[].masterstring | numberno—本 endpoint 的框架 master(openid);覆盖顶层 master
qq.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
qq.endpoints[].botKindstring: "public", "private"no—覆盖顶层 botKind(公域/私域),用于按 endpoint 生成 intents
qq.endpoints[].intentsarray<string>no—覆盖顶层 intents
qq.endpoints[].accessTokenUrlstringno——
qq.endpoints[].gatewayUrlstringno——
qq.endpoints[].webhookPathstringno——
qq.endpoints[].commandPrefixstringno——
qq.endpoints[].idstringyes—QQ bot name
qq.endpoints[].streamProxyobjectno—Optional fixed loopback TCP fault proxy for WSS only; original gateway TLS identity must match serverName.
qq.endpoints[].streamProxy.portintegeryes——
qq.endpoints[].streamProxy.serverNamestringyes——
qq.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖
qq.streamProxyobjectno—Optional fixed loopback TCP fault proxy for WSS only; original gateway TLS identity must match serverName.
qq.streamProxy.portintegeryes——
qq.streamProxy.serverNamestringyes——

sandbox ​

plugins/adapters/sandbox/schema.json

PathTypeRequiredDefaultDescription
sandbox.masterstring | numberno—框架 master(sandbox client id (distinct from endpoints[].owner);AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
sandbox.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
sandbox.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
sandbox.endpoints[].masterstring | numberno—本 endpoint 的框架 master(sandbox client id (distinct from endpoints[].owner));覆盖顶层 master
sandbox.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
sandbox.endpoints[].ownerstringno—Sandbox owner user ID
sandbox.endpoints[].commandPrefixstringno——
sandbox.endpoints[].idstringyes—Sandbox bot name
sandbox.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

satori ​

plugins/adapters/satori/schema.json

PathTypeRequiredDefaultDescription
satori.connectionstring: "ws", "webhook"no"ws"ws (default) or webhook (httpHostToken POST route)
satori.heartbeat_intervalnumberno10000WS PING interval in milliseconds
satori.masterstring | numberno—框架 master(platform user id;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
satori.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
satori.endpointsarray<object>yes—多账号:每项定义一个 endpoint,id/baseUrl 必填,其余字段覆盖实例默认值
satori.endpoints[].masterstring | numberno—本 endpoint 的框架 master(platform user id);覆盖顶层 master
satori.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
satori.endpoints[].baseUrlstringyes—Satori SDK HTTP/WS base URL (e.g. http://127.0.0.1:5140)
satori.endpoints[].connectionstring: "ws", "webhook"no——
satori.endpoints[].tokenstringno—Bearer token for API and WS IDENTIFY
satori.endpoints[].pathstringno—Webhook POST path (connection: webhook)
satori.endpoints[].heartbeat_intervalnumberno——
satori.endpoints[].commandPrefixstringno——
satori.endpoints[].idstringyes—Satori bot name
satori.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

slack ​

plugins/adapters/slack/schema.json

PathTypeRequiredDefaultDescription
slack.socketModebooleannotruePrefer Socket Mode (default). Set false for HTTP Events via httpHostToken.
slack.webhookPathstringno"/slack/events"—
slack.clientPingTimeoutnumberno15000Socket Mode client ping timeout (ms)
slack.masterstring | numberno—框架 master(Slack user id;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
slack.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
slack.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
slack.endpoints[].masterstring | numberno—本 endpoint 的框架 master(Slack user id);覆盖顶层 master
slack.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
slack.endpoints[].tokenstringyes—Bot User OAuth Token (xoxb-...)
slack.endpoints[].signingSecretstringno—Required for HTTP Events API (socketMode: false)
slack.endpoints[].appTokenstringno—App-Level Token (xapp-...) for Socket Mode
slack.endpoints[].socketModebooleanno——
slack.endpoints[].webhookPathstringno——
slack.endpoints[].clientPingTimeoutnumberno——
slack.endpoints[].commandPrefixstringno——
slack.endpoints[].idstringyes—Slack bot name
slack.endpoints[].streamProxyobjectno—Socket故障验收:WSS固定loopback TCP,API仍标准TLS直连
slack.endpoints[].streamProxy.portintegeryes——
slack.endpoints[].streamProxy.serverNamestringyes——
slack.endpoints[].webApiProxyobjectno—出站JSON Web API专用故障代理:仅slack.com:443,固定loopbackTCP,保留SNI和证书校验,与Socket代理独立;上传域名不适用
slack.endpoints[].webApiProxy.portintegeryes——
slack.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

telegram ​

plugins/adapters/telegram/schema.json

PathTypeRequiredDefaultDescription
telegram.pollingbooleannotrueLong-poll getUpdates (default). Set false for webhook via httpHostToken.
telegram.webhookobjectno—Webhook settings when polling is false.
telegram.webhook.domainstringno——
telegram.webhook.pathstringno"/telegram/webhook"—
telegram.webhook.secretTokenstringno—Verified via X-Telegram-Bot-Api-Secret-Token.
telegram.allowedUpdatesarray<string>no["message","callback_query"]—
telegram.apiBaseUrlstringno"https://api.telegram.org"—
telegram.masterstring | numberno—框架 master(Telegram user id;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
telegram.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
telegram.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
telegram.endpoints[].masterstring | numberno—本 endpoint 的框架 master(Telegram user id);覆盖顶层 master
telegram.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
telegram.endpoints[].tokenstringyes—Telegram bot token
telegram.endpoints[].pollingbooleanno——
telegram.endpoints[].webhookobjectno——
telegram.endpoints[].webhook.domainstringno——
telegram.endpoints[].webhook.pathstringno——
telegram.endpoints[].webhook.secretTokenstringno——
telegram.endpoints[].allowedUpdatesarray<string>no——
telegram.endpoints[].apiBaseUrlstringno——
telegram.endpoints[].commandPrefixstringno——
telegram.endpoints[].idstringyes—Telegram bot name
telegram.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

wechat-mp ​

plugins/adapters/wechat-mp/schema.json

PathTypeRequiredDefaultDescription
wechat-mp.pathstringno"/wechat/webhook"—
wechat-mp.encryptbooleannofalse—
wechat-mp.encryptModestring: "plain", "compatible", "secure"no—Default follows encrypt: 'plain' when encrypt=false, 'compatible' when encrypt=true
wechat-mp.replyModestring: "passive", "customer_service"no"passive"—
wechat-mp.passiveReplyTimeoutMsnumberno4500—
wechat-mp.masterstring | numberno—框架 master(WeChat OpenID;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
wechat-mp.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
wechat-mp.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
wechat-mp.endpoints[].masterstring | numberno—本 endpoint 的框架 master(WeChat OpenID);覆盖顶层 master
wechat-mp.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
wechat-mp.endpoints[].appIdstringyes—WeChat MP app ID
wechat-mp.endpoints[].appSecretstringyes—WeChat MP app secret
wechat-mp.endpoints[].tokenstringyes—WeChat MP callback token
wechat-mp.endpoints[].encodingAESKeystringno—WeChat MP encoding AES key
wechat-mp.endpoints[].pathstringno——
wechat-mp.endpoints[].encryptbooleanno——
wechat-mp.endpoints[].encryptModestring: "plain", "compatible", "secure"no——
wechat-mp.endpoints[].replyModestring: "passive", "customer_service"no——
wechat-mp.endpoints[].passiveReplyTimeoutMsnumberno——
wechat-mp.endpoints[].commandPrefixstringno——
wechat-mp.endpoints[].idstringyes—WeChat MP bot name
wechat-mp.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

wecom ​

plugins/adapters/wecom/schema.json

PathTypeRequiredDefaultDescription
wecom.webhookPathstringno"/wecom/callback"—
wecom.apiBaseUrlstringno"https://qyapi.weixin.qq.com"—
wecom.masterstring | numberno—框架 master(WeCom userid;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
wecom.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
wecom.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
wecom.endpoints[].masterstring | numberno—本 endpoint 的框架 master(WeCom userid);覆盖顶层 master
wecom.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
wecom.endpoints[].corpIdstringyes—WeCom corp ID
wecom.endpoints[].agentSecretstringyes—WeCom agent secret
wecom.endpoints[].tokenstringyes—WeCom callback token
wecom.endpoints[].encodingAESKeystringyes—WeCom encoding AES key
wecom.endpoints[].webhookPathstringno——
wecom.endpoints[].apiBaseUrlstringno——
wecom.endpoints[].commandPrefixstringno——
wecom.endpoints[].idstringyes—WeCom bot name
wecom.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

plugins/adapters/weixin-ilink/schema.json

PathTypeRequiredDefaultDescription
weixin-ilink.botAgentstringno——
weixin-ilink.baseUrlstringno"https://ilinkai.weixin.qq.com"—
weixin-ilink.cdnBaseUrlstringno"https://novac2c.cdn.weixin.qq.com/c2c"—
weixin-ilink.longPollTimeoutMsnumberno35000—
weixin-ilink.dataDirstringno"data/weixin-ilink"Endpoint state root for credentials, cursors, context tokens, and media
weixin-ilink.masterstring | numberno—框架 master(Weixin user id;AI/工具权限、endpoint 管理)。endpoints[i].master 可逐项覆盖
weixin-ilink.trustedarray<string | number>no—框架 trusted 用户列表(弱于 master)。endpoints[i].trusted 可逐项追加
weixin-ilink.endpointsarray<object>yes—多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(id 必填,其余覆盖顶层)
weixin-ilink.endpoints[].masterstring | numberno—本 endpoint 的框架 master(Weixin user id);覆盖顶层 master
weixin-ilink.endpoints[].trustedarray<string | number>no—本 endpoint 的 trusted 列表
weixin-ilink.endpoints[].botTokenstringno—iLink bot token; omit to load endpoint state or start QR login
weixin-ilink.endpoints[].idstringyes—Weixin iLink bot name
weixin-ilink.endpoints[].botAgentstringno——
weixin-ilink.endpoints[].baseUrlstringno——
weixin-ilink.endpoints[].cdnBaseUrlstringno——
weixin-ilink.endpoints[].longPollTimeoutMsnumberno——
weixin-ilink.endpoints[].dataDirstringno—Endpoint state root
weixin-ilink.endpoints[].commandPrefixstringno—本 endpoint 的命令前缀
weixin-ilink.commandPrefixstringno""命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖

process-monitor ​

plugins/features/process-monitor/schema.json

PathTypeRequiredDefaultDescription
process-monitor.enabledbooleannotrue是否启用进程监控
process-monitor.notifyOnStartbooleannotrue首次启动时通知
process-monitor.notifyOnRestartbooleannotrue正常重启时通知
process-monitor.notifyOnCrashbooleannotrue异常崩溃重启时通知
process-monitor.notifyChannelsarray<object>no[]通知渠道(slice-1 仅 webhook 生效)
process-monitor.notifyChannels[].typestring: "webhook"yes——
process-monitor.notifyChannels[].targetstringyes——

blackjack ​

plugins/games/blackjack/schema.json

This Schema declares no fields.

dice-duel ​

plugins/games/dice-duel/schema.json

This Schema declares no fields.

dungeon-expedition ​

plugins/games/dungeon-expedition/schema.json

This Schema declares no fields.

guess-number ​

plugins/games/guess-number/schema.json

This Schema declares no fields.

hub ​

plugins/games/hub/schema.json

This Schema declares no fields.

idiom-chain ​

plugins/games/idiom-chain/schema.json

This Schema declares no fields.

roulette ​

plugins/games/roulette/schema.json

PathTypeRequiredDefaultDescription
roulette.chambersintegerno6弹巢数量,其中一发是实弹
roulette.maxPlayersintegerno6单局最多玩家数
roulette.turnTimeoutSecondsintegerno60轮到的玩家超过这个秒数不开枪,判负
roulette.lobbyTimeoutSecondsintegerno300开局后超过这个秒数仍未开始,自动解散
roulette.muteSecondsintegerno60开启禁言惩罚的群里,输家被禁言的秒数(每个群默认关闭)

rps ​

plugins/games/rps/schema.json

This Schema declares no fields.

text-adventure ​

plugins/games/text-adventure/schema.json

This Schema declares no fields.

tic-tac-toe ​

plugins/games/tic-tac-toe/schema.json

This Schema declares no fields.

word-riddle ​

plugins/games/word-riddle/schema.json

This Schema declares no fields.

activity-feedback ​

plugins/services/activity-feedback/schema.json

PathTypeRequiredDefaultDescription
activity-feedback.enabledbooleannotrueEnable activity feedback for this plugin instance.
activity-feedback.defaultsobjectno—Default policy for all platforms and Endpoints.
activity-feedback.defaults.enabledbooleannotrueEnable this policy layer.
activity-feedback.defaults.phasesobjectno—Feedback policy keyed by lifecycle phase.
activity-feedback.defaults.phases.queuedobjectno——
activity-feedback.defaults.phases.queued.privateobjectno——
activity-feedback.defaults.phases.queued.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.queued.private.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.queued.private.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.queued.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.queued.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.queued.private.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.queued.groupobjectno——
activity-feedback.defaults.phases.queued.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.queued.group.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.queued.group.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.queued.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.queued.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.queued.group.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.queued.channelobjectno——
activity-feedback.defaults.phases.queued.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.queued.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.queued.channel.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.queued.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.queued.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.queued.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.activeobjectno——
activity-feedback.defaults.phases.active.privateobjectno——
activity-feedback.defaults.phases.active.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.active.private.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.active.private.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.active.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.active.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.active.private.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.active.groupobjectno——
activity-feedback.defaults.phases.active.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.active.group.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.active.group.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.active.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.active.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.active.group.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.active.channelobjectno——
activity-feedback.defaults.phases.active.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.active.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.active.channel.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.active.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.active.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.active.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.thinkingobjectno——
activity-feedback.defaults.phases.thinking.privateobjectno——
activity-feedback.defaults.phases.thinking.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.thinking.private.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.thinking.private.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.thinking.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.thinking.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.thinking.private.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.thinking.groupobjectno——
activity-feedback.defaults.phases.thinking.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.thinking.group.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.thinking.group.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.thinking.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.thinking.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.thinking.group.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.thinking.channelobjectno——
activity-feedback.defaults.phases.thinking.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.thinking.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.thinking.channel.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.thinking.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.thinking.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.thinking.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.schedule_startobjectno——
activity-feedback.defaults.phases.schedule_start.privateobjectno——
activity-feedback.defaults.phases.schedule_start.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.schedule_start.private.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.schedule_start.private.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.schedule_start.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.schedule_start.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.schedule_start.private.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.schedule_start.groupobjectno——
activity-feedback.defaults.phases.schedule_start.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.schedule_start.group.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.schedule_start.group.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.schedule_start.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.schedule_start.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.schedule_start.group.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.schedule_start.channelobjectno——
activity-feedback.defaults.phases.schedule_start.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.schedule_start.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.schedule_start.channel.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.schedule_start.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.schedule_start.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.schedule_start.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.schedule_finishobjectno——
activity-feedback.defaults.phases.schedule_finish.privateobjectno——
activity-feedback.defaults.phases.schedule_finish.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.schedule_finish.private.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.schedule_finish.private.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.schedule_finish.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.schedule_finish.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.schedule_finish.private.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.schedule_finish.groupobjectno——
activity-feedback.defaults.phases.schedule_finish.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.schedule_finish.group.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.schedule_finish.group.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.schedule_finish.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.schedule_finish.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.schedule_finish.group.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.schedule_finish.channelobjectno——
activity-feedback.defaults.phases.schedule_finish.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.schedule_finish.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.schedule_finish.channel.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.schedule_finish.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.schedule_finish.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.schedule_finish.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.schedule_errorobjectno——
activity-feedback.defaults.phases.schedule_error.privateobjectno——
activity-feedback.defaults.phases.schedule_error.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.schedule_error.private.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.schedule_error.private.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.schedule_error.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.schedule_error.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.schedule_error.private.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.schedule_error.groupobjectno——
activity-feedback.defaults.phases.schedule_error.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.schedule_error.group.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.schedule_error.group.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.schedule_error.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.schedule_error.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.schedule_error.group.platformConfigobjectno—Platform-specific options.
activity-feedback.defaults.phases.schedule_error.channelobjectno——
activity-feedback.defaults.phases.schedule_error.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.defaults.phases.schedule_error.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.defaults.phases.schedule_error.channel.messagestringno—Status text for type=message.
activity-feedback.defaults.phases.schedule_error.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.defaults.phases.schedule_error.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.defaults.phases.schedule_error.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.platformsobjectno—Platform overrides keyed by platform name; values use the same shape as defaults.
activity-feedback.platforms.<platform>.enabledbooleannotrueEnable this policy layer.
activity-feedback.platforms.<platform>.phasesobjectno—Feedback policy keyed by lifecycle phase.
activity-feedback.platforms.<platform>.phases.queuedobjectno——
activity-feedback.platforms.<platform>.phases.queued.privateobjectno——
activity-feedback.platforms.<platform>.phases.queued.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.queued.private.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.queued.private.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.queued.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.queued.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.queued.private.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.queued.groupobjectno——
activity-feedback.platforms.<platform>.phases.queued.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.queued.group.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.queued.group.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.queued.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.queued.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.queued.group.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.queued.channelobjectno——
activity-feedback.platforms.<platform>.phases.queued.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.queued.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.queued.channel.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.queued.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.queued.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.queued.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.activeobjectno——
activity-feedback.platforms.<platform>.phases.active.privateobjectno——
activity-feedback.platforms.<platform>.phases.active.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.active.private.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.active.private.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.active.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.active.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.active.private.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.active.groupobjectno——
activity-feedback.platforms.<platform>.phases.active.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.active.group.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.active.group.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.active.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.active.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.active.group.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.active.channelobjectno——
activity-feedback.platforms.<platform>.phases.active.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.active.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.active.channel.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.active.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.active.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.active.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.thinkingobjectno——
activity-feedback.platforms.<platform>.phases.thinking.privateobjectno——
activity-feedback.platforms.<platform>.phases.thinking.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.thinking.private.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.thinking.private.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.thinking.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.thinking.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.thinking.private.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.thinking.groupobjectno——
activity-feedback.platforms.<platform>.phases.thinking.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.thinking.group.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.thinking.group.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.thinking.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.thinking.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.thinking.group.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.thinking.channelobjectno——
activity-feedback.platforms.<platform>.phases.thinking.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.thinking.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.thinking.channel.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.thinking.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.thinking.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.thinking.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.schedule_startobjectno——
activity-feedback.platforms.<platform>.phases.schedule_start.privateobjectno——
activity-feedback.platforms.<platform>.phases.schedule_start.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.schedule_start.private.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.schedule_start.private.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.schedule_start.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.schedule_start.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.schedule_start.private.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.schedule_start.groupobjectno——
activity-feedback.platforms.<platform>.phases.schedule_start.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.schedule_start.group.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.schedule_start.group.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.schedule_start.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.schedule_start.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.schedule_start.group.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.schedule_start.channelobjectno——
activity-feedback.platforms.<platform>.phases.schedule_start.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.schedule_start.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.schedule_start.channel.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.schedule_start.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.schedule_start.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.schedule_start.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.schedule_finishobjectno——
activity-feedback.platforms.<platform>.phases.schedule_finish.privateobjectno——
activity-feedback.platforms.<platform>.phases.schedule_finish.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.schedule_finish.private.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.schedule_finish.private.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.schedule_finish.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.schedule_finish.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.schedule_finish.private.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.schedule_finish.groupobjectno——
activity-feedback.platforms.<platform>.phases.schedule_finish.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.schedule_finish.group.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.schedule_finish.group.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.schedule_finish.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.schedule_finish.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.schedule_finish.group.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.schedule_finish.channelobjectno——
activity-feedback.platforms.<platform>.phases.schedule_finish.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.schedule_finish.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.schedule_finish.channel.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.schedule_finish.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.schedule_finish.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.schedule_finish.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.schedule_errorobjectno——
activity-feedback.platforms.<platform>.phases.schedule_error.privateobjectno——
activity-feedback.platforms.<platform>.phases.schedule_error.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.schedule_error.private.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.schedule_error.private.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.schedule_error.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.schedule_error.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.schedule_error.private.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.schedule_error.groupobjectno——
activity-feedback.platforms.<platform>.phases.schedule_error.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.schedule_error.group.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.schedule_error.group.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.schedule_error.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.schedule_error.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.schedule_error.group.platformConfigobjectno—Platform-specific options.
activity-feedback.platforms.<platform>.phases.schedule_error.channelobjectno——
activity-feedback.platforms.<platform>.phases.schedule_error.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.platforms.<platform>.phases.schedule_error.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.platforms.<platform>.phases.schedule_error.channel.messagestringno—Status text for type=message.
activity-feedback.platforms.<platform>.phases.schedule_error.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.platforms.<platform>.phases.schedule_error.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.platforms.<platform>.phases.schedule_error.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.endpointsobjectno—Endpoint overrides keyed by platform:endpointKey; values use the same shape as defaults.
activity-feedback.endpoints.<platform:endpointKey>.enabledbooleannotrueEnable this policy layer.
activity-feedback.endpoints.<platform:endpointKey>.phasesobjectno—Feedback policy keyed by lifecycle phase.
activity-feedback.endpoints.<platform:endpointKey>.phases.queuedobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.privateobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.private.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.private.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.private.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.groupobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.group.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.group.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.group.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.channelobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.channel.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.queued.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.activeobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.active.privateobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.active.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.private.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.private.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.private.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.groupobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.active.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.group.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.group.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.group.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.channelobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.active.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.channel.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.active.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinkingobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.privateobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.private.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.private.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.private.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.groupobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.group.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.group.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.group.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.channelobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.channel.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.thinking.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_startobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.privateobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.private.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.private.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.private.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.groupobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.group.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.group.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.group.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.channelobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.channel.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_start.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finishobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.privateobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.private.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.private.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.private.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.groupobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.group.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.group.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.group.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.channelobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.channel.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_finish.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_errorobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.privateobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.private.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.private.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.private.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.groupobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.group.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.group.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.group.platformConfigobjectno—Platform-specific options.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.channelobjectno——
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.channel.messagestringno—Status text for type=message.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.endpoints.<platform:endpointKey>.phases.schedule_error.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.scheduleobjectno—Schedule-only start, finish, and error feedback.
activity-feedback.schedule.phasesobjectno——
activity-feedback.schedule.phases.startobjectno——
activity-feedback.schedule.phases.start.privateobjectno——
activity-feedback.schedule.phases.start.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.schedule.phases.start.private.emojistringno—Reaction value for type=reaction.
activity-feedback.schedule.phases.start.private.messagestringno—Status text for type=message.
activity-feedback.schedule.phases.start.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.schedule.phases.start.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.schedule.phases.start.private.platformConfigobjectno—Platform-specific options.
activity-feedback.schedule.phases.start.groupobjectno——
activity-feedback.schedule.phases.start.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.schedule.phases.start.group.emojistringno—Reaction value for type=reaction.
activity-feedback.schedule.phases.start.group.messagestringno—Status text for type=message.
activity-feedback.schedule.phases.start.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.schedule.phases.start.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.schedule.phases.start.group.platformConfigobjectno—Platform-specific options.
activity-feedback.schedule.phases.start.channelobjectno——
activity-feedback.schedule.phases.start.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.schedule.phases.start.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.schedule.phases.start.channel.messagestringno—Status text for type=message.
activity-feedback.schedule.phases.start.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.schedule.phases.start.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.schedule.phases.start.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.schedule.phases.finishobjectno——
activity-feedback.schedule.phases.finish.privateobjectno——
activity-feedback.schedule.phases.finish.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.schedule.phases.finish.private.emojistringno—Reaction value for type=reaction.
activity-feedback.schedule.phases.finish.private.messagestringno—Status text for type=message.
activity-feedback.schedule.phases.finish.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.schedule.phases.finish.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.schedule.phases.finish.private.platformConfigobjectno—Platform-specific options.
activity-feedback.schedule.phases.finish.groupobjectno——
activity-feedback.schedule.phases.finish.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.schedule.phases.finish.group.emojistringno—Reaction value for type=reaction.
activity-feedback.schedule.phases.finish.group.messagestringno—Status text for type=message.
activity-feedback.schedule.phases.finish.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.schedule.phases.finish.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.schedule.phases.finish.group.platformConfigobjectno—Platform-specific options.
activity-feedback.schedule.phases.finish.channelobjectno——
activity-feedback.schedule.phases.finish.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.schedule.phases.finish.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.schedule.phases.finish.channel.messagestringno—Status text for type=message.
activity-feedback.schedule.phases.finish.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.schedule.phases.finish.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.schedule.phases.finish.channel.platformConfigobjectno—Platform-specific options.
activity-feedback.schedule.phases.errorobjectno——
activity-feedback.schedule.phases.error.privateobjectno——
activity-feedback.schedule.phases.error.private.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.schedule.phases.error.private.emojistringno—Reaction value for type=reaction.
activity-feedback.schedule.phases.error.private.messagestringno—Status text for type=message.
activity-feedback.schedule.phases.error.private.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.schedule.phases.error.private.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.schedule.phases.error.private.platformConfigobjectno—Platform-specific options.
activity-feedback.schedule.phases.error.groupobjectno——
activity-feedback.schedule.phases.error.group.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.schedule.phases.error.group.emojistringno—Reaction value for type=reaction.
activity-feedback.schedule.phases.error.group.messagestringno—Status text for type=message.
activity-feedback.schedule.phases.error.group.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.schedule.phases.error.group.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.schedule.phases.error.group.platformConfigobjectno—Platform-specific options.
activity-feedback.schedule.phases.error.channelobjectno——
activity-feedback.schedule.phases.error.channel.typestring: "reaction", "message", "typing", "none"no—How the phase is presented.
activity-feedback.schedule.phases.error.channel.emojistringno—Reaction value for type=reaction.
activity-feedback.schedule.phases.error.channel.messagestringno—Status text for type=message.
activity-feedback.schedule.phases.error.channel.autoRemovebooleannotrueRemove the feedback after the phase stops.
activity-feedback.schedule.phases.error.channel.removeDelaynumberno—Delay before removal in milliseconds; negative values are normalized to zero at runtime.
activity-feedback.schedule.phases.error.channel.platformConfigobjectno—Platform-specific options.

typesafe ​

plugins/services/typesafe/schema.json

PathTypeRequiredDefaultDescription
typesafe.enabledbooleannotrueEnable this decision provider.
typesafe.apiKeystringno—TypeSafe API key; reference TYPESAFE_API_KEY from the environment.
typesafe.modelstringno"jev-latest"Model name; pin a model version for calibrated policies.
typesafe.baseUrlstringno"https://api.typesafe.ai"API root URL without query, credentials or fragment.
typesafe.timeoutMsintegerno10000Total budget including all requests and retry delays.
typesafe.maxRetriesintegerno2Maximum SDK retries after the first attempt.

60s ​

plugins/utils/60s/schema.json

PathTypeRequiredDefaultDescription
60s.apiBasestringno"https://60s.viki.moe"60s API base URL

answers ​

plugins/utils/answers/schema.json

PathTypeRequiredDefaultDescription
answers.dailyStablebooleannofalse同一用户同一天问同一个问题时,答案之书给出相同答案
answers.timezonestringno"Asia/Shanghai"dailyStable 判断「同一天」所用的 IANA 时区
answers.quizTimeoutSecondsnumberno120出题后等待作答的秒数,超时题目作废
answers.enableDrivingQuizbooleannotrue启用「科目一」交规小测(原创题面,仅供娱乐参考)

bilibili ​

plugins/utils/bilibili/schema.json

PathTypeRequiredDefaultDescription
bilibili.pollCronstringno"0 * * * * *"轮询频率(6 段 Cron,默认每 60 秒) / Poll schedule (6-field cron, default every 60s)
bilibili.jitterMsnumberno15000每轮轮询前的随机延迟上限(毫秒) / Max random delay before each poll (ms)
bilibili.requestGapMsnumberno1500同一轮内相邻动态请求的间隔(毫秒) / Gap between dynamic requests within one poll (ms)
bilibili.maxBackoffMinutesnumberno30接口失败或风控时指数退避的上限(分钟) / Upper bound of exponential backoff (minutes)
bilibili.maxPerChannelnumberno20每个会话最多订阅的 UP 主数量 / Max UP subscriptions per conversation
bilibili.timeoutnumberno10000单次 HTTP 请求超时(毫秒) / HTTP timeout (ms)
bilibili.livebooleannotrue是否轮询开播状态 / Poll live status
bilibili.dynamicbooleannotrue是否轮询 UP 主动态 / Poll UP dynamics
bilibili.cookiestringno""可选的 B 站 Cookie(如 SESSDATA=...),风控严格时使用,请写成 ${BILIBILI_COOKIE} / Optional cookie, reference it as $

calendar ​

plugins/utils/calendar/schema.json

PathTypeRequiredDefaultDescription
calendar.provider"none" | "caldav" | "google" | "microsoft"no"none"日历后端;none 时工具返回未启用提示
calendar.timezonestringno"Asia/Manila"解释无偏移时间与展示用的 IANA 时区
calendar.work_day_startstringno"09:00"—
calendar.work_day_endstringno"18:00"—
calendar.oauth_redirect_base_urlstringno""聊天授权回调的外部基础地址(如 https://bot.example.com);留空时使用 zhin HTTP Host 的本机地址
calendar.oauth_callback_pathstringno"/calendar/oauth/callback"聊天授权回调路由,挂在 zhin HTTP Host 上;反向代理/隧道只转发部分路径时可调整
calendar.caldavobjectno——
calendar.caldav.enabledbooleannofalse—
calendar.caldav.calendar_urlstringno""日历 collection URL
calendar.caldav.usernamestringno""—
calendar.caldav.passwordstringno""—
calendar.googleobjectno——
calendar.google.enabledbooleannofalse—
calendar.google.client_idstringno""$
calendar.google.client_secretstringno""$
calendar.google.refresh_tokenstringno""${GOOGLE_CALENDAR_REFRESH_TOKEN};用 auth google 获取
calendar.google.calendar_idstringno"primary"日历 ID,默认 primary;可换成其它日历的 id
calendar.google.token_filestringno""可选:持久化轮换后的 refresh_token 的 JSON 路径(如 data/calendar-google-token.json)
calendar.microsoftobjectno——
calendar.microsoft.enabledbooleannofalse—
calendar.microsoft.client_idstringno""$
calendar.microsoft.client_secretstringno""可选;公共客户端可留空。$
calendar.microsoft.refresh_tokenstringno""${MS_GRAPH_REFRESH_TOKEN};用 auth microsoft 获取
calendar.microsoft.tenantstringno"common"Azure tenant,默认 common
calendar.microsoft.calendar_idstringno""留空或 primary/me = 默认日历;否则为 Graph calendar id
calendar.microsoft.token_filestringno""可选:持久化轮换后的 refresh_token 的 JSON 路径(如 data/calendar-ms-token.json)

code-runner ​

plugins/utils/code-runner/schema.json

This Schema declares no fields.

content-moderation ​

plugins/utils/content-moderation/schema.json

PathTypeRequiredDefaultDescription
content-moderation.groupModerationarray<object>no[]自动广告/辱骂审核的精确范围;未配置时关闭。需要 AI、原子持久状态和适配器群管支持。
content-moderation.groupModeration[].adapterstringyes——
content-moderation.groupModeration[].endpointstringyes——
content-moderation.groupModeration[].accountstringyes——
content-moderation.groupModeration[].groupstringyes——
content-moderation.enabledbooleannotrue总开关
content-moderation.onErrorstring: "open", "closed"no"open"审查源失败时的全局默认策略:open=视为通过,closed=视为 critical
content-moderation.maskCharstringno"*"文本打码字符
content-moderation.replyTemplatestringno"消息含不当内容,已拦截。"reply 动作时的提示文案
content-moderation.mastersarray<string>no[]额外视为 master 的 userId(兜底,与 endpoint master 合并)
content-moderation.inboundobjectno——
content-moderation.inbound.enabledbooleannotrue—
content-moderation.inbound.bypassMastersbooleannotruemaster 跳过入站审查
content-moderation.inbound.whitelistobjectno——
content-moderation.inbound.whitelist.userIdsarray<string>no[]—
content-moderation.inbound.whitelist.conversationIdsarray<string>no[]—
content-moderation.outboundobjectno——
content-moderation.outbound.enabledbooleannotrue—
content-moderation.outbound.bypassbooleannofalse为 true 时跳过出站审查
content-moderation.actionsobjectno—severity → 动作(字符串或数组);缺省用偏严默认表
content-moderation.actions.passstring: "allow", "log", "reply", "redact", "drop", "recall" | array<string: "allow", "log", "reply", "redact", "drop", "recall">no——
content-moderation.actions.lowstring: "allow", "log", "reply", "redact", "drop", "recall" | array<string: "allow", "log", "reply", "redact", "drop", "recall">no——
content-moderation.actions.mediumstring: "allow", "log", "reply", "redact", "drop", "recall" | array<string: "allow", "log", "reply", "redact", "drop", "recall">no——
content-moderation.actions.highstring: "allow", "log", "reply", "redact", "drop", "recall" | array<string: "allow", "log", "reply", "redact", "drop", "recall">no——
content-moderation.actions.criticalstring: "allow", "log", "reply", "redact", "drop", "recall" | array<string: "allow", "log", "reply", "redact", "drop", "recall">no——
content-moderation.sourcesarray<object>no[]—
content-moderation.sources[].idstringyes——
content-moderation.sources[].typestring: "local", "http"yes——
content-moderation.sources[].enabledbooleannotrue—
content-moderation.sources[].onErrorstring: "open", "closed"no——
content-moderation.sources[].includeBuiltinbooleannotrue是否合并内置分级违禁词词库
content-moderation.sources[].wordsarray<string | object>no[]自定义词:字符串(用 defaultSeverity)或
content-moderation.sources[].wordFilesarray<string>no[]词库文件;行格式 word / severity:word / word|severity
content-moderation.sources[].defaultSeveritystring: "low", "medium", "high", "critical"no"high"未标注分级的自定义词默认 severity
content-moderation.sources[].severitystring: "low", "medium", "high", "critical"no"high"兼容旧字段,等同 defaultSeverity
content-moderation.sources[].urlstringno——
content-moderation.sources[].headersobjectno——
content-moderation.sources[].timeoutMsnumberno5000—
content-moderation.sources[].forceUploadbooleannofalse强制下载图片后上传,不传 URL

earthquake ​

plugins/utils/earthquake/schema.json

PathTypeRequiredDefaultDescription
earthquake.sourcesarray<string: "cenc", "usgs">no["cenc","usgs"]启用的数据源及优先顺序;合并同一地震时排在前面的数据源提供地点文字,某个数据源失败时由其余数据源兜底
earthquake.cencUrlsarray<string>no["https://api.wolfx.jp/cenc_eqlist.json","https://ceic.ac.cn/data/data.json"]CENC 地震目录地址,按顺序尝试(首个为主源,其余为备用镜像);仅支持 HTTPS,最多 5 个
earthquake.usgsFeedstring: "significant_hour", "significant_day", "4.5_hour", "4.5_day", "2.5_hour", "2.5_day", "1.0_hour", "1.0_day"no"2.5_day"USGS GeoJSON 汇总源名称(震级下限_时间范围)
earthquake.pollCronstringno"0 */2 * * * *"订阅轮询频率(6 段 Cron:秒 分 时 日 月 周)
earthquake.timezonestringno"Asia/Shanghai"显示发震时刻使用的 IANA 时区
earthquake.requestTimeoutMsnumberno10000单次 HTTP 请求超时(毫秒)
earthquake.maxRetriesnumberno2网络错误、超时、429 与 5xx 的重试次数(不含首次请求)
earthquake.retryBaseDelayMsnumberno1000指数退避的首次等待(毫秒),每次重试翻倍并加入随机抖动
earthquake.retryMaxDelayMsnumberno30000单次退避或 Retry-After 等待上限(毫秒);服务端要求更久时本轮放弃并冷却该数据源
earthquake.defaultMinMagnitudenumberno5订阅未指定震级时使用的最小震级
earthquake.queryMinMagnitudenumberno3「地震」查询未指定震级时使用的最小震级
earthquake.queryLimitnumberno5「地震」查询默认列出的条数
earthquake.maxEventAgeMinutesnumberno60只推送发震时间在此分钟数以内的地震,避免推送迟到或重放的旧事件
earthquake.pushLimitnumberno3每个会话在一个限流窗口内最多推送的消息数
earthquake.pushWindowMinutesnumberno10推送限流窗口长度(分钟)
earthquake.maxEventsPerMessagenumberno5单条推送消息最多列出的地震数,其余以数量概括
earthquake.maxSubscriptionsnumberno100本实例所有会话的订阅总数上限(每个会话最多一个订阅)

group-suite ​

plugins/utils/group-suite/schema.json

PathTypeRequiredDefaultDescription
group-suite.keywordReplybooleannofalse—
group-suite.basePointsMinnumberno10—
group-suite.basePointsMaxnumberno30—
group-suite.streakBonusnumberno5—
group-suite.streakCapnumberno50—
group-suite.rankSizenumberno10—
group-suite.teachMaxPerGroupnumberno200—
group-suite.teachCooldownMsnumberno3000—
group-suite.teachAllowRegexbooleannotrue—
group-suite.teachPageSizenumberno10—
group-suite.welcomeMessagestringno""Group welcome text. Empty disables; {name}/{id} refer to the joined member.
group-suite.welcomeConversationsarray<object>no—Exact welcome conversations. Omitted welcomes all groups; [] welcomes none. Missing parent/thread requires their absence; no wildcards.
group-suite.welcomeConversations[].endpointobjectyes——
group-suite.welcomeConversations[].endpoint.adapterstringyes——
group-suite.welcomeConversations[].endpoint.idstringyes——
group-suite.welcomeConversations[].kindstring: "group"yes——
group-suite.welcomeConversations[].idstringyes——
group-suite.welcomeConversations[].parentobjectno——
group-suite.welcomeConversations[].parent.kindstring: "private", "group", "channel"yes——
group-suite.welcomeConversations[].parent.idstringyes——
group-suite.welcomeConversations[].threadIdstringno——
group-suite.ephemeralKeywordsbooleannofalseExplicit volatile keywords. With false, automatic replies require Database Host at startup and keyword management requires its persistent state service when invoked.

ledger ​

plugins/utils/ledger/schema.json

PathTypeRequiredDefaultDescription
ledger.timezonestringno"Asia/Shanghai"计算今日、本周(周一开始)、本月与日报日期所用的 IANA 时区
ledger.reportTimestringno"22:00"记账日报的发送时间(HH:MM,按 timezone);只发给用「记账日报 开启」订阅的用户
ledger.reportWhenEmptybooleannofalse当天没有记账时是否仍发送日报

plugins/utils/link-poster/schema.json

This Schema declares no fields.

lottery ​

plugins/utils/lottery/schema.json

PathTypeRequiredDefaultDescription
lottery.pickCountnumberno5—
lottery.scheduleCronstringno"0 0 18 * * *"—
lottery.historyLimitnumberno500—
lottery.scheduleEnabledbooleannotrue—
lottery.backtestEnabledbooleannotrue—
lottery.backtestWindownumberno50—
lottery.backtestRandomTrialsnumberno64—
lottery.backtestMinHistorynumberno30—
lottery.backtestAdaptivebooleannotrue—
lottery.weightPersistEnabledbooleannotrue—
lottery.weightHoldoutFallbackbooleannotrue—
lottery.gamesarray<string>no["kl8","ssq","dlt","fc3d","pl3","pl5"]—
lottery.pushTargetsarray<object>no[]OutboundHost push destinations for cron/publish reports
lottery.pushTargets[].adapterstringyes——
lottery.pushTargets[].endpointIdstringno——
lottery.pushTargets[].channelTypestringno"private"—
lottery.pushTargets[].channelIdstringyes——
lottery.kl8objectno——
lottery.kl8.pickCountnumberno5—
lottery.kl8.recommendGroupsnumberno3—
lottery.kl8.groupStrategiesarray<string>no["balanced","hot","cold"]—

music ​

plugins/utils/music/schema.json

This Schema declares no fields.

nettools ​

plugins/utils/nettools/schema.json

PathTypeRequiredDefaultDescription
nettools.cooldownSecondsintegerno10Per-user cooldown in seconds, shared by all nettools commands and tools (0 disables)
nettools.requestTimeoutMsintegerno8000Per-attempt timeout for each external HTTP request, in milliseconds
nettools.maxRetriesintegerno2Retries for transient failures (network errors, timeouts, 429, 5xx) with exponential backoff and jitter
nettools.pingMaxNodesintegerno4Number of check-host.net probe nodes used by ping
nettools.pingPollIntervalMsintegerno2000Wait between ping result polls, in milliseconds
nettools.pingMaxPollsintegerno5Maximum number of ping result polls before reporting partial results
nettools.dohProvidersarray<string: "cloudflare", "alidns", "google">no["cloudflare","alidns","google"]DNS-over-HTTPS providers in fallback order
nettools.priceListLimitintegerno8Number of registrars shown in a domain price comparison

qrcode ​

plugins/utils/qrcode/schema.json

This Schema declares no fields.

reminder ​

plugins/utils/reminder/schema.json

PathTypeRequiredDefaultDescription
reminder.timezonestringno"UTC"解释 create 自然时间并显示提醒的 IANA 时区;ISO 绝对时间仍须显式 offset
reminder.maxTasksnumberno20每实例聊天个人提醒池的活跃任务上限;与管理员池独立,降低上限不删除既有任务
reminder.adminMaxTasksnumberno20每实例管理员提醒池的活跃任务上限(待执行、暂停或未确认);与聊天池独立,两池总量可达上限之和
reminder.maxTasksPerSendernumberno10同一发送者在同一会话的任务上限
reminder.batchSizenumberno5每次扫描最多投递的任务数
reminder.missedGraceSecondsnumberno15周期轮次超过此延迟后跳过;停机期间不补历史轮次

repeater ​

plugins/utils/repeater/schema.json

PathTypeRequiredDefaultDescription
repeater.thresholdnumberno3触发复读的最少人数
repeater.cooldownnumberno30000同一群冷却时间 (ms)
repeater.maxLengthnumberno200消息长度上限

rss ​

plugins/utils/rss/schema.json

PathTypeRequiredDefaultDescription
rss.pollCronstringno"0 */5 * * * *"轮询频率 (6 段 Cron 表达式)
rss.maxPerGroupnumberno30—
rss.maxItemsnumberno5—
rss.timeoutnumberno15000—

short-url ​

plugins/utils/short-url/schema.json

This Schema declares no fields.