跳转至

Echo Agent 配置参考

security

字段 snake type default choices 说明
security.profile security.profile Literal personal_cli personal_cli/daemon/public_gateway 整体安全档位预设

channels

字段 snake type default choices 说明
channels.telegram.enabled channels.telegram.enabled bool false 是否启用 Telegram 通道
channels.telegram.token channels.telegram.token str "" Telegram Bot API token
channels.telegram.allowFrom channels.telegram.allow_from list [] 允许与机器人交互的用户白名单(空为不限制)
channels.telegram.proxy channels.telegram.proxy str None null
channels.telegram.groupPolicy channels.telegram.group_policy Literal mention open/mention 群聊响应策略:open 全部响应,mention 仅被@时响应
channels.telegram.reactionsEnabled channels.telegram.reactions_enabled bool true 是否对消息添加表情回应
channels.telegram.dataDir channels.telegram.data_dir str "" Telegram 状态持久化目录(存 long-poll offset,防重启后重复拉取);缺省 ~/.echo-agent/data/telegram
channels.discord.enabled channels.discord.enabled bool false 是否启用 Discord 通道
channels.discord.token channels.discord.token str "" Discord Bot token
channels.discord.allowFrom channels.discord.allow_from list [] 允许与机器人交互的用户白名单(空为不限制)
channels.discord.groupPolicy channels.discord.group_policy Literal mention open/mention 群聊响应策略:open 全部响应,mention 仅被@时响应
channels.discord.reactionsEnabled channels.discord.reactions_enabled bool true 是否对消息添加表情回应
channels.webhook.enabled channels.webhook.enabled bool false 是否启用 Webhook 通道
channels.webhook.host channels.webhook.host str 0.0.0.0 Webhook 服务监听地址
channels.webhook.port channels.webhook.port int 8080 Webhook 服务监听端口
channels.webhook.secret channels.webhook.secret str "" 校验入站请求签名的密钥
channels.webhook.path channels.webhook.path str /webhook Webhook 接收路径
channels.webhook.maxPending channels.webhook.max_pending int 1000 待处理 webhook 请求队列上限
channels.cli.enabled channels.cli.enabled bool true 是否启用命令行通道
channels.cron.enabled channels.cron.enabled bool false 是否启用定时任务通道
channels.slack.enabled channels.slack.enabled bool false 是否启用 Slack 通道
channels.slack.botToken channels.slack.bot_token str "" Slack bot token(xoxb-)
channels.slack.appToken channels.slack.app_token str "" Slack app-level token(xapp-),用于 Socket 模式
channels.slack.allowFrom channels.slack.allow_from list [] 允许与机器人交互的用户白名单(空为不限制)
channels.slack.reactionsEnabled channels.slack.reactions_enabled bool true 是否对消息添加表情回应
channels.whatsapp.enabled channels.whatsapp.enabled bool false 是否启用 WhatsApp 通道
channels.whatsapp.verifyToken channels.whatsapp.verify_token str "" WhatsApp webhook 验证 token
channels.whatsapp.accessToken channels.whatsapp.access_token str "" WhatsApp Cloud API 访问令牌
channels.whatsapp.phoneNumberId channels.whatsapp.phone_number_id str "" WhatsApp 发送号码 ID
channels.whatsapp.webhookPath channels.whatsapp.webhook_path str /whatsapp WhatsApp webhook 接收路径
channels.whatsapp.host channels.whatsapp.host str 0.0.0.0 WhatsApp 服务监听地址
channels.whatsapp.port channels.whatsapp.port int 8081 WhatsApp 服务监听端口
channels.whatsapp.appSecret channels.whatsapp.app_secret str "" WhatsApp App Secret(用于 webhook HMAC 签名验证)
channels.whatsapp.allowFrom channels.whatsapp.allow_from list [] 允许交互的用户白名单(空为不限制)
channels.whatsapp.groupPolicy channels.whatsapp.group_policy str mention 群聊响应策略:all=响应所有消息,mention=仅响应@机器人
channels.weixin.enabled channels.weixin.enabled bool false 是否启用微信(个人客服)通道
channels.weixin.accountId channels.weixin.account_id str "" 微信客服账号 ID
channels.weixin.token channels.weixin.token str "" 微信接入鉴权 token
channels.weixin.baseUrl channels.weixin.base_url str https://ilinkai.weixin.qq.com 微信 API 基础地址
channels.weixin.cdnBaseUrl channels.weixin.cdn_base_url str https://novac2c.cdn.weixin.qq.com/c2c 微信媒体 CDN 基础地址
channels.weixin.allowFrom channels.weixin.allow_from list [] 允许与机器人交互的用户白名单(空为不限制)
channels.weixin.dmPolicy channels.weixin.dm_policy str open 私聊响应策略
channels.weixin.dataDir channels.weixin.data_dir str "" 微信通道本地数据目录
channels.weixin.typingIndicator channels.weixin.typing_indicator bool true 处理消息期间是否向对方下发“对方正在输入”状态
channels.qqbot.enabled channels.qqbot.enabled bool false 是否启用 QQ 机器人通道
channels.qqbot.appId channels.qqbot.app_id str "" QQ 机器人 AppID
channels.qqbot.appSecret channels.qqbot.app_secret str "" QQ 机器人 AppSecret
channels.qqbot.allowFrom channels.qqbot.allow_from list [] 允许与机器人交互的用户白名单(空为不限制)
channels.qqbot.sandbox channels.qqbot.sandbox bool false 是否使用 QQ 沙箱环境
channels.qqbot.markdownSupport channels.qqbot.markdown_support bool true 是否以 QQ 原生 Markdown(msg_type=2)发送并保留加粗/代码等行内标记。默认开启;若机器人未开通原生 Markdown 权限,首条消息会被拒并自动降级为纯文本重发,该会话后续对该目标直接走纯文本(24 小时后重新探测)。无论开关如何,表格/标题/分隔线都会降级为可读纯文本。关闭则始终发纯文本
channels.qqbot.mediaEnabled channels.qqbot.media_enabled bool true 是否启用媒体(图片/文件)收发
channels.qqbot.mediaMaxFileSizeMb channels.qqbot.media_max_file_size_mb int 20 媒体上传单文件大小上限(MB)
channels.qqbot.mediaUploadCacheSize channels.qqbot.media_upload_cache_size int 500 媒体上传结果缓存条目上限
channels.qqbot.mediaParseTags channels.qqbot.media_parse_tags bool true 是否解析消息中的媒体标签
channels.feishu.enabled channels.feishu.enabled bool false 是否启用飞书通道
channels.feishu.appId channels.feishu.app_id str "" 飞书应用 App ID
channels.feishu.appSecret channels.feishu.app_secret str "" 飞书应用 App Secret
channels.feishu.verificationToken channels.feishu.verification_token str "" 飞书事件回调验证 token
channels.feishu.encryptionKey channels.feishu.encryption_key str "" 飞书事件加密密钥
channels.feishu.webhookPath channels.feishu.webhook_path str /feishu 飞书事件接收路径
channels.feishu.host channels.feishu.host str 0.0.0.0 飞书服务监听地址
channels.feishu.port channels.feishu.port int 8083 飞书服务监听端口
channels.feishu.groupPolicy channels.feishu.group_policy str mention 群聊触发策略: mention=仅被@时响应, all=响应所有消息
channels.feishu.botOpenId channels.feishu.bot_open_id str "" 机器人自身的 open_id,用于群聊 @mention 过滤
channels.dingtalk.enabled channels.dingtalk.enabled bool false 是否启用钉钉通道
channels.dingtalk.appKey channels.dingtalk.app_key str "" 钉钉应用 AppKey
channels.dingtalk.appSecret channels.dingtalk.app_secret str "" 钉钉应用 AppSecret
channels.dingtalk.robotCode channels.dingtalk.robot_code str "" 钉钉机器人编码
channels.dingtalk.allowFrom channels.dingtalk.allow_from list [] 允许与机器人交互的用户白名单(空为不限制)
channels.email.enabled channels.email.enabled bool false 是否启用邮件通道
channels.email.imapHost channels.email.imap_host str "" 收信 IMAP 服务器地址
channels.email.imapPort channels.email.imap_port int 993 收信 IMAP 服务器端口
channels.email.smtpHost channels.email.smtp_host str "" 发信 SMTP 服务器地址
channels.email.smtpPort channels.email.smtp_port int 465 发信 SMTP 服务器端口
channels.email.username channels.email.username str "" 邮箱登录用户名
channels.email.password channels.email.password str "" 邮箱登录密码或授权码
channels.email.useSsl channels.email.use_ssl bool true 是否使用 SSL 连接邮件服务器
channels.email.pollIntervalSeconds channels.email.poll_interval_seconds int 30 轮询新邮件的间隔(秒)
channels.email.allowFrom channels.email.allow_from list [] 允许交互的发件人邮箱白名单(空为不限制)
channels.wecom.enabled channels.wecom.enabled bool false 是否启用企业微信通道
channels.wecom.corpId channels.wecom.corp_id str "" 企业微信企业 ID
channels.wecom.agentId channels.wecom.agent_id str "" 企业微信应用 AgentId
channels.wecom.secret channels.wecom.secret str "" 企业微信应用 Secret
channels.wecom.token channels.wecom.token str "" 企业微信回调校验 token
channels.wecom.encodingAesKey channels.wecom.encoding_aes_key str "" 企业微信加密回调的 EncodingAESKey,留空则为明文模式
channels.wecom.webhookPath channels.wecom.webhook_path str /wecom 企业微信事件接收路径
channels.wecom.host channels.wecom.host str 0.0.0.0 企业微信服务监听地址
channels.wecom.port channels.wecom.port int 8084 企业微信服务监听端口
channels.matrix.enabled channels.matrix.enabled bool false 是否启用 Matrix 通道
channels.matrix.homeserver channels.matrix.homeserver str "" Matrix homeserver 地址
channels.matrix.userId channels.matrix.user_id str "" Matrix 机器人用户 ID
channels.matrix.accessToken channels.matrix.access_token str "" Matrix 访问令牌
channels.matrix.allowRooms channels.matrix.allow_rooms list [] 允许响应的房间白名单(空为不限制)
channels.matrix.reactionsEnabled channels.matrix.reactions_enabled bool true 是否对消息添加表情回应
channels.sendProgress channels.send_progress bool true 是否向用户推送处理进度提示
channels.sendToolHints channels.send_tool_hints bool true 是否推送工具调用提示
channels.streamChannels channels.stream_channels list ['cli', 'telegram', 'discord', 'slack', 'gateway:*'] 启用流式增量回复的通道列表
channels.streamFlushChars channels.stream_flush_chars int 180 流式回复累计多少字符后推送一段
channels.streamFlushIntervalMs channels.stream_flush_interval_ms int 1500 流式回复推送的最大时间间隔(毫秒)
channels.streamParagraphMode channels.stream_paragraph_mode bool true 是否按段落边界切分流式推送
channels.streamLocalFlushChars channels.stream_local_flush_chars int 24 本地通道(cli/gateway)流式推送的字符阈值,0 表示复用通用配置
channels.streamLocalFlushIntervalMs channels.stream_local_flush_interval_ms int 100 本地通道(cli/gateway)流式推送的最大时间间隔(毫秒)
channels.streamLocalChannels channels.stream_local_channels list ['cli', 'gateway:*'] 使用本地低延迟流式档位的通道列表(支持 prefix:* 通配)
channels.streamOptimisticChannels channels.stream_optimistic_channels list ['gateway:cli'] 允许乐观流式(工具前草稿先发后撤回)的通道列表;仅限能就地重绘的通道
channels.transcriptionApiKey channels.transcription_api_key str "" 语音转写服务的 API key

models

字段 snake type default choices 说明
models.defaultModel models.default_model str "" 无匹配路由时使用的默认模型
models.providers models.providers list [] 模型提供商配置列表
models.providers[].name models.providers[].name str "" 提供商名称(路由引用此名)
models.providers[].apiKey models.providers[].api_key str "" 提供商 API 密钥
models.providers[].apiKeyEnv models.providers[].api_key_env str "" 从指定环境变量读取 API 密钥;用于宿主进程临时注入,避免密钥写入配置文件
models.providers[].apiBase models.providers[].api_base str "" 提供商 API 基础地址
models.providers[].models models.providers[].models list [] 该提供商支持的模型列表
models.providers[].extraHeaders models.providers[].extra_headers dict {} 附加到请求的自定义 HTTP 头
models.providers[].maxRetries models.providers[].max_retries int 3 瞬时错误时的最大重试次数(指数退避)
models.providers[].timeoutSeconds models.providers[].timeout_seconds int 120 单次请求超时(秒)
models.providers[].streamIncludeUsage models.providers[].stream_include_usage bool true 流式请求是否附带 stream_options.include_usage(用于统计 token/成本);个别不支持该字段的 OpenAI 兼容端点需设为 false
models.providers[].rateLimitRpm models.providers[].rate_limit_rpm int 0 该提供商每分钟请求上限(0 为不限)
models.providers[].credentialPool models.providers[].credential_pool list [] 轮换使用的多个 API 密钥池
models.routes models.routes list [] 任务到模型的路由规则列表
models.routes[].model models.routes[].model str "" 该路由使用的模型名
models.routes[].provider models.routes[].provider str "" 该路由绑定的提供商名
models.routes[].taskTypes models.routes[].task_types list [] 命中此路由的任务类型列表
models.routes[].fallbackModels models.routes[].fallback_models list [] 主模型失败时的回退模型列表
models.routes[].maxTokens models.routes[].max_tokens int 8192 该路由生成的最大 token 数
models.routes[].temperature models.routes[].temperature float 0.7 该路由的采样温度
models.routes[].contextWindow models.routes[].context_window int 0 该路由模型的上下文窗口显式覆盖(0 为不指定,自动按模型解析);优先级高于内置注册表与全局兜底
models.fallbackModel models.fallback_model str "" 全局兜底模型
models.modelWindows models.model_windows dict {} 模型 ID 到上下文窗口 token 数的映射(setup 从提供商元数据自动捕获,也可手填);解析窗口时优先级低于路由显式覆盖、高于内置注册表

tools

字段 snake type default choices 说明
tools.profile tools.profile Literal full minimal/messaging/coding/full 工具集预设档位
tools.allow tools.allow list [] 覆盖档位、显式允许的工具列表
tools.alsoAllow tools.also_allow list [] 在档位基础上额外允许的工具
tools.deny tools.deny list [] 显式禁用的工具列表
tools.exec.enabled tools.exec.enabled bool true 是否启用 shell/进程执行工具
tools.exec.maxOutputChars tools.exec.max_output_chars int 2000000 命令输出的采集上限字符数(不是模型可见上限——后者由 spill.maxInlineChars 决定)
tools.exec.host tools.exec.host Literal sandbox auto/local/sandbox/container/remote 命令执行所在的宿主环境
tools.exec.security tools.exec.security Literal allowlist deny/allowlist/full 命令执行安全模式
tools.exec.ask tools.exec.ask Literal on_miss off/on_miss/always 命令执行前的审批询问策略
tools.exec.safeBins tools.exec.safe_bins list ['awk', 'cat', 'date', 'echo', 'find', 'grep', 'head', 'ls', 'pwd', 'rg', 'sed', 'sort', 'tail', 'tr', 'uniq', 'wc'] allowlist 模式下免审批直接放行的安全命令
tools.exec.allowedCommands tools.exec.allowed_commands list [] 额外允许执行的命令白名单
tools.exec.blockedCommands tools.exec.blocked_commands list [] 禁止执行的命令黑名单
tools.web.enabled tools.web.enabled bool false 是否启用网络访问工具
tools.web.proxy tools.web.proxy str None null
tools.web.timeoutSeconds tools.web.timeout_seconds int 30 网络请求超时(秒)
tools.web.searchApiKey tools.web.search_api_key str "" 搜索服务 API key
tools.web.searchProvider tools.web.search_provider Literal brave brave/tavily/serpapi/searxng/serply 网络搜索服务提供商 (serply 使用 Serply SERP API: https://serply.io, 文档 https://serply.io/docs)
tools.web.searchApiBase tools.web.search_api_base str "" 搜索服务 API 基础地址
tools.web.allowPrivateAddresses tools.web.allow_private_addresses bool false 是否允许 web_fetch 访问私有/回环地址(SSRF 风险)
tools.browser.enabled tools.browser.enabled bool true 是否开启浏览器自动化工具(默认开,未装 playwright/chromium 时 is_ready 探测自动降级不装配)
tools.browser.maxSessions tools.browser.max_sessions int 3 单个会话方(owner)的并发浏览器会话上限
tools.browser.maxTotalSessions tools.browser.max_total_sessions int 10 全实例并发浏览器会话总上限(每个会话都是独立 Chromium context,占用真实内存);<=0 表示不限制
tools.browser.sessionIdleTimeoutSec tools.browser.session_idle_timeout_sec int 300 浏览器会话空闲多久(秒)后自动回收
tools.browser.maxSnapshotChars tools.browser.max_snapshot_chars int 8000 可访问性快照文本截断上限(字符)
tools.browser.headless tools.browser.headless bool true 无头模式(服务器环境必需)
tools.browser.navTimeoutSec tools.browser.nav_timeout_sec int 30 单次页面导航超时(秒)
tools.browser.allowPrivateAddresses tools.browser.allow_private_addresses bool false 是否允许导航到内网地址(默认拦截,复用 SSRF 口径)
tools.browser.dialogPolicy tools.browser.dialog_policy str dismiss 原生弹窗(alert/confirm/prompt)自动处理策略:dismiss 取消 / accept 确认。不处理会导致页面阻塞
tools.browser.allowEvaluate tools.browser.allow_evaluate bool true 是否允许 evaluate 动作在页面内执行 JS。表达式黑名单只能拦住粗糙用法,无法对抗刻意混淆;不能接受页内任意代码执行的部署应关掉此项
tools.browser.allowUnsafeEvaluate tools.browser.allow_unsafe_evaluate bool false 是否跳过 evaluate 的敏感表达式检查(读取 cookie/localStorage、脚本跳转等),默认拒绝以防注入外泄
tools.browser.persistLoginState tools.browser.persist_login_state bool false 是否持久化浏览器登录态(cookie/localStorage)到工作区,供后续会话复用
tools.browser.viewportWidth tools.browser.viewport_width int 1280 浏览器视口宽度(像素)
tools.browser.viewportHeight tools.browser.viewport_height int 800 浏览器视口高度(像素)
tools.browser.userAgent tools.browser.user_agent str "" 自定义 User-Agent,留空用 Chromium 默认值
tools.restrictToWorkspace tools.restrict_to_workspace bool false 是否将文件操作限制在工作区内
tools.safeWriteRoot tools.safe_write_root str "" 允许写入的根目录
tools.inboundDocumentEnabled tools.inbound_document_enabled bool true 是否自动下载、解密并解析入站文档附件(docx/xlsx/pptx/pdf)
tools.inboundDocumentMaxChars tools.inbound_document_max_chars int 8000 入站文档自动注入正文的字符上限,超出则注入摘要并提示用 read_document 读全文
tools.mcpServers tools.mcp_servers dict {} MCP 服务配置(键为服务名;该键会参与工具名与凭据文件名,只允许字母数字与 . - _)
tools.mcpServers{}.command tools.mcp_servers{}.command str "" stdio 传输方式下启动 MCP 服务的命令(与 url 二选一)
tools.mcpServers{}.args tools.mcp_servers{}.args list [] 启动 MCP 服务命令的参数
tools.mcpServers{}.env tools.mcp_servers{}.env dict {} MCP 服务进程的环境变量,支持 ${VAR} 与 $VAR 展开(变量缺失即报错)
tools.mcpServers{}.url tools.mcp_servers{}.url str "" Streamable HTTP 传输方式下 MCP 服务地址(与 command 二选一)
tools.mcpServers{}.headers tools.mcp_servers{}.headers dict {} HTTP 连接 MCP 服务的自定义头,支持 ${VAR} 展开
tools.mcpServers{}.auth tools.mcp_servers{}.auth Literal "" /oauth 认证模式:留空为不认证(或自带 headers),oauth 为 OAuth 2.1 PKCE 浏览器授权
tools.mcpServers{}.trustLevel tools.mcp_servers{}.trust_level Literal untrusted untrusted/trusted 该 MCP 服务的信任级别。untrusted(默认):其工具至少按 exec 审批,服务端声明的 readOnlyHint 不能降低审批等级;trusted:采信 annotations。MCP 规范明确 annotations 仅为提示,不可作为安全判据 —— 只有你自己掌控的服务才应设为 trusted。
tools.mcpServers{}.enabled tools.mcp_servers{}.enabled bool true 是否启用该 MCP 服务
tools.mcpServers{}.timeout tools.mcp_servers{}.timeout int 120 MCP 工具调用超时(秒)
tools.mcpServers{}.connectTimeout tools.mcp_servers{}.connect_timeout int 60 连接与初始化握手的超时(秒)
tools.mcpServers{}.toolsInclude tools.mcp_servers{}.tools_include list [] 仅暴露的 MCP 工具白名单(空为全部)
tools.mcpServers{}.toolsExclude tools.mcp_servers{}.tools_exclude list [] 排除的 MCP 工具黑名单
tools.mcpSecurityPolicy tools.mcp_security_policy Literal block warn/block MCP 工具注入扫描策略:block 拒绝可疑工具,warn 仅告警放行。扫描覆盖工具名、描述与 inputSchema 内的描述/标题
tools.imageGen.enabled tools.image_gen.enabled bool true 是否启用图像生成工具(取消后即使填了 key 也不注册)
tools.imageGen.backend tools.image_gen.backend str openai 图像生成后端
tools.imageGen.apiKey tools.image_gen.api_key str "" OpenAI 兼容后端 API key
tools.imageGen.apiBase tools.image_gen.api_base str "" OpenAI 兼容后端 API 基础地址
tools.imageGen.model tools.image_gen.model str "" 图像生成模型名
tools.imageGen.falKey tools.image_gen.fal_key str "" FAL.ai 后端访问密钥
tools.imageGen.falModel tools.image_gen.fal_model str "" FAL.ai 图像生成模型名
tools.tts.enabled tools.tts.enabled bool true 是否启用 TTS 语音合成工具(取消后不注册,保留已填凭证)
tools.tts.openaiApiKey tools.tts.openai_api_key str "" OpenAI TTS API key
tools.tts.openaiApiBase tools.tts.openai_api_base str "" OpenAI TTS API 基础地址
tools.tts.model tools.tts.model str "" TTS 模型名
tools.tts.defaultBackend tools.tts.default_backend str edge 默认语音合成后端
tools.tts.defaultVoice tools.tts.default_voice str "" 默认语音音色
tools.codeExec.enabled tools.code_exec.enabled bool true 是否启用代码执行工具
tools.codeExec.timeoutSeconds tools.code_exec.timeout_seconds int 30 代码执行超时(秒)
tools.codeExec.allowedLanguages tools.code_exec.allowed_languages list ['python', 'javascript', 'bash'] 允许执行的代码语言列表
tools.mcp.enabled tools.mcp.enabled bool true 是否启用 MCP 工具接入(设为 false 时不加载任何 MCP 服务,即使 mcp_servers 里仍有配置)

execution

字段 snake type default choices 说明
execution.defaultExecutor execution.default_executor Literal sandbox local/sandbox/container/remote 默认命令执行器类型
execution.sandboxRoot execution.sandbox_root str /tmp/echo-agent-sandbox sandbox 执行器的根目录
execution.containerImage execution.container_image str "" container 执行器使用的镜像
execution.remoteHost execution.remote_host str "" remote 执行器的目标主机
execution.remoteUser execution.remote_user str root remote 执行器登录用户名
execution.remoteKeyPath execution.remote_key_path str "" remote 执行器 SSH 私钥路径
execution.remoteStrictHostKey execution.remote_strict_host_key Literal accept-new no/accept-new/yes SSH 主机密钥严格校验策略
execution.remoteConnectTimeout execution.remote_connect_timeout int 10 remote 执行器连接超时(秒)
execution.networkPolicy execution.network_policy Literal deny allow/deny/restricted 执行环境的网络访问策略
execution.maxBackgroundTasks execution.max_background_tasks int 64 后台任务并发上限,超限时可丢弃任务被丢、不可丢任务排队

permissions

字段 snake type default choices 说明
permissions.adminUsers permissions.admin_users list [] 全局管理员用户列表
permissions.approval.requireApproval permissions.approval.require_approval list ['cronjob', 'delegate_task', 'dep_install', 'exec', 'execute_code', 'process', 'skill_install', 'skill_manage', 'spawn_task'] 执行前必须审批的工具/动作列表。风险等级(EXEC/DANGEROUS)本身即要求审批,本列表用于额外追加,不能反向豁免;delegate_task/spawn_task 在列是因为它们派发的 worker 可以调用 exec,派发处是调用方权限仍然已知的最后一环
permissions.approval.autoApprove permissions.approval.auto_approve list [] 自动批准的工具/动作列表
permissions.approval.autoDeny permissions.approval.auto_deny list [] 自动拒绝的工具/动作列表
permissions.approval.defaultPolicy permissions.approval.default_policy Literal approve approve/deny/ask 未命中规则时的默认审批策略
permissions.approval.waitTimeoutSeconds permissions.approval.wait_timeout_seconds int 300 等待人工审批的超时(秒)
permissions.approval.cliAutoApprove permissions.approval.cli_auto_approve bool true CLI 通道是否自动批准
permissions.approval.trustedChannels permissions.approval.trusted_channels list [] 免审批的可信通道列表
permissions.approval.mode permissions.approval.mode Literal smart manual/smart/off 审批模式:manual 全人工,smart 智能判定,off 关闭
permissions.approval.smartModel permissions.approval.smart_model str "" smart 模式判定审批所用模型
permissions.approval.unattendedPolicy permissions.approval.unattended_policy Literal deny deny/allow_safe 无人值守时的审批策略
permissions.elevated.enabled permissions.elevated.enabled bool false 是否启用提权操作机制
permissions.elevated.allowFrom permissions.elevated.allow_from dict {} 各通道允许提权的用户映射

credentials

字段 snake type default choices 说明
credentials.encryptionKeyEnv credentials.encryption_key_env str ECHO_AGENT_CREDENTIAL_KEY 存放凭据加密密钥的环境变量名
credentials.requireEncryption credentials.require_encryption bool true 是否强制要求凭据加密

session

字段 snake type default choices 说明
session.maxHistoryMessages session.max_history_messages int 500 单会话保留的最大历史消息数
session.expiryHours session.expiry_hours int 72 会话过期时间(小时)
session.contextWindowTokens session.context_window_tokens int 0 上下文窗口 token 上限的全局兜底值(0=不设,让未知模型落到 256K 现代基线;仅当你为某些无法动态解析的私有/本地模型显式设成正数时才生效,优先级低于 models.dev/内置注册表)
session.compressionWindowCap session.compression_window_cap int 200000 压缩预算上限(0 为不封顶):模型真实窗口用于显示,但压缩触发按 min(真实窗口, 此上限) 计算,避免大窗口模型让上下文膨胀到很大才压缩、抬高单请求成本与延迟
session.introductionEnabled session.introduction_enabled bool true 是否在新会话发送自我介绍
session.imClarifyPendingTtlSeconds session.im_clarify_pending_ttl_seconds int 300 IM 通道追问续接的待答有效期(秒);agent 发出追问后超过此时长,下一条消息不再当作答案而按新消息处理
session.introductionTemplate session.introduction_template str "" 自我介绍模板
session.historyImageTtlMinutes session.history_image_ttl_minutes int 30 历史图片保留时长(分钟)
session.historyImageLimit session.history_image_limit int 4 历史中保留的最大图片数
session.historyImageSkipIfCurrent session.history_image_skip_if_current bool true 当前轮已带图时是否跳过历史图片
session.groupSessionScope session.group_session_scope Literal per_user per_user/shared 群聊会话隔离策略:per_user 每人独立会话(默认,防群内串话),shared 整群共享一个会话

memory

字段 snake type default choices 说明
memory.enabled memory.enabled bool true 是否启用认知记忆
memory.scopePolicy memory.scope_policy Literal session legacy/session 记忆作用域策略
memory.crossChannelOwner memory.cross_channel_owner bool true 跨通道主人记忆归一:开启时,principal_bindings 列入的 sender 在各通道 1:1 私聊共享 owner 记忆;未列入者与群聊均按会话隔离。关闭则全部按会话隔离
memory.ownerKey memory.owner_key str owner 主人记忆作用域键(单主体默认 owner,一般无需修改)
memory.allowModelEnvironmentWrites memory.allow_model_environment_writes bool false 是否允许模型记忆工具写 ENVIRONMENT 记忆或带 global 标签(这类绕过 scope、全局可见);默认关闭,模型只能写自己 scope 的 USER 记忆,避免任意通道模型污染全局
memory.principalBindings memory.principal_bindings list [] 主人身份绑定表:每项 "通道:sender_id",列入者的 1:1 私聊归一到 owner 记忆域实现跨通道互通;未列入者按会话隔离。安全前提:仅对 sender_id 由平台保证不可伪造的通道(如 Telegram/Slack)启用,否则冒充该 id 者可读主人记忆;仅在 cross_channel_owner 开启时生效
memory.retrievalOnMiss memory.retrieval_on_miss Literal degrade degrade/sync 检索缓存未命中时的行为:degrade=有界同步检索(超时回退关键词),sync=完整同步检索
memory.retrievalMissTimeoutSeconds memory.retrieval_miss_timeout_seconds float 0.8 degrade 模式下缓存未命中时的同步检索时间预算(秒),超时回退本地关键词检索;0=完全跳过(旧行为)
memory.cacheTtlSeconds memory.cache_ttl_seconds float 60.0 检索预取缓存新鲜度 TTL(秒),超时即视为未命中
memory.cacheJaccardMin memory.cache_jaccard_min float 0.3 当前查询与缓存查询的最小 Jaccard 相似度,低于则视为话题突变未命中
memory.consolidationThreshold memory.consolidation_threshold int 20 触发记忆整合的条目阈值
memory.narrativeEpisodeCount memory.narrative_episode_count int 3 快照叙事层注入的最近 episode.summary 条数(承载跨条目时序/因果,补结构化事实层缺失)
memory.vectorEnabled memory.vector_enabled bool true 是否启用向量检索记忆
memory.vectorDimensions memory.vector_dimensions int 0 记忆向量维度,0=自动跟随当前嵌入模型的实际维度
memory.maxUserMemories memory.max_user_memories int 1000 单用户记忆条目上限
memory.maxEnvMemories memory.max_env_memories int 500 环境记忆条目上限
memory.memoryNudgeInterval memory.memory_nudge_interval int 10 提示模型记录记忆的轮次间隔
memory.importanceDecayDays memory.importance_decay_days float 30.0 记忆重要性衰减周期(天)
memory.snapshotEnabled memory.snapshot_enabled bool true 是否启用记忆快照注入上下文
memory.snapshotLayering memory.snapshot_layering bool true 快照分层:常驻核心只保留 top-K(按有效重要度)+ 显式 pinned 条目,长尾不再每轮无条件注入 system prompt,改由 query 驱动的召回按需带出。关闭则回退旧行为(USER≤50/ENV≤30 全量注入)。解决'常驻画像与当前问题无关'的注入路径
memory.snapshotUserCoreMax memory.snapshot_user_core_max int 12 分层开启时 USER 常驻核心的最大条目数(top-K + pinned)。长尾靠召回带出
memory.snapshotEnvCoreMax memory.snapshot_env_core_max int 8 分层开启时 ENVIRONMENT 常驻核心的最大条目数(top-K + pinned)
memory.contradictionDetection memory.contradiction_detection bool true 是否启用记忆矛盾检测
memory.sleepConsolidation memory.sleep_consolidation bool true 是否启用空闲期记忆整合
memory.archivalThreshold memory.archival_threshold float 0.05 记忆归档分数阈值,低于此值进入归档层
memory.forgetThreshold memory.forget_threshold float 0.01 记忆遗忘分数阈值,低于此值被遗忘
memory.lineageMaxVersions memory.lineage_max_versions int 3 同 key 世系保留的 superseded 版本数上限,超出的最旧版本转归档待遗忘
memory.lineageRetentionDays memory.lineage_retention_days int 90 superseded 版本保留天数,超期即转归档待遗忘(即便未超版本数上限)
memory.maxWorkingMemory memory.max_working_memory int 20 工作记忆条目上限
memory.embeddingBackend memory.embedding_backend Literal auto auto/local/provider 嵌入后端: auto=启动探测provider,失败静默回退fastembed; local=直接用本地fastembed免探测; provider=强制provider,探测失败报错不回退
memory.embeddingModel memory.embedding_model str "" 记忆向量化使用的嵌入模型
memory.localEmbeddingModel memory.local_embedding_model str BAAI/bge-small-zh-v1.5 无embed能力provider时的本地嵌入兜底模型(fastembed),空串禁用兜底
memory.hfEmbeddingEndpoint memory.hf_embedding_endpoint str https://hf-mirror.com 本地嵌入模型(fastembed)的 HuggingFace 下载源,默认走 hf-mirror.com 镜像以适配国内网络;设为官方源填 https://huggingface.co,空串则不覆盖已有 HF_ENDPOINT 环境变量
memory.embedTimeoutSeconds memory.embed_timeout_seconds float 1.5 查询向量化的单次超时(秒),超时降级为关键词检索
memory.rrfMinSimilarity memory.rrf_min_similarity float 0.3 RRF 向量召回相似度下限(可调)。向量命中余弦低于该值则不占 rank 槽、不贡献 RRF 分,且不构成'向量达标'准入通路——避免低相似度命中污染真实候选。对归一化句向量,0.25 基本是'勉强沾边',0.30 是更稳的下限;BM25 侧改用判别性 token 门控(单个常见汉字命中不准入),不设分数下限(量纲不同)
memory.rerankEnabled memory.rerank_enabled bool true 是否启用 cross-encoder 精排。RRF 只融合两路顺序、不懂'到底多相关',cross-encoder 对 (query,doc) 联合打分是相关性金标准。开启后对融合 top-K 重排(仅 top-K,开销小),超时/失败回退 RRF 原序。默认开:重排模型(约 941MB,sha256 校验后离线命中)在安装期就从自建镜像预取(Gitee 分卷优先,再 GitHub 整包),安装期漏下时运行期按退避重下;模型未就绪时本轮自动降级为 RRF 原序,不阻塞回复。关闭可完全省去该模型与每轮数十~上百 ms 精排延迟
memory.rerankModel memory.rerank_model str BAAI/bge-reranker-base cross-encoder 精排模型(fastembed TextCrossEncoder 支持的模型名)。中文/多语可选 BAAI/bge-reranker-base 或 jinaai/jina-reranker-v2-base-multilingual
memory.rerankTopK memory.rerank_top_k int 10 精排作用的融合 top-K 数量。只对 RRF 融合后的前 K 条重排,其余保持原序,控制精排开销。默认 10:精排是纯 CPU 的 cross-encoder,base 规模模型每对 (query,doc) 打分在数十毫秒量级,K=20 常态就会撞满推理预算而整轮白跑降级;而召回配额本身只有 5 条记忆+3 条 episode,K=10 已覆盖两倍配额,再往上是花延迟买不到名次变化
memory.rerankMinScore memory.rerank_min_score float 0.0 精排绝对相关性下限(0=只重排不剔除)。>0 时重排分低于该值的候选被丢弃(仅在重排 top-K 内,且全被丢时回退不过滤,防止误配阈值清空召回)
memory.rerankTimeoutSeconds memory.rerank_timeout_seconds float 5.0 精排单次推理的等待预算(秒),超时本轮回退 RRF 原序。仅管推理:模型加载/下载走 rerank_load_timeout_seconds(两者共用一个值时,2s 既等不到 1GB 模型加载完,也不够 base 模型在纯 CPU 上给 top-K 打完分,结果是常态降级)
memory.rerankLoadTimeoutSeconds memory.rerank_load_timeout_seconds float 60.0 精排模型加载/下载的单次等待预算(秒),与 embed_load_timeout_seconds 对称。超时不算失败:后台加载继续,本轮回退 RRF 原序,模型就绪后自动接管。设得太小(如按推理预算的 2s)会让每次等待都超时,启动预热也白跑
memory.embedLoadTimeoutSeconds memory.embed_load_timeout_seconds float 60.0 本地嵌入模型首次加载/下载的超时(秒),超时即标记失败并降级为关键词检索,避免下载挂起拖垮进程
memory.localEmbeddingCacheDir memory.local_embedding_cache_dir str ~/.echo-agent/models/fastembed 本地嵌入模型(fastembed)的缓存目录,安装期预取与运行期共用同一目录以实现离线命中;默认落在 echo-home 下的稳定位置(而非易被系统清理的临时目录),空串则用 fastembed 默认(FASTEMBED_CACHE_PATH 或临时目录)
memory.localEmbeddingMaxLoadAttempts memory.local_embedding_max_load_attempts int 5 本地嵌入模型加载失败后的最大重试次数,超过则本进程保持关键词检索直到重启;避免一次网络抖动就永久降级
memory.localEmbeddingRetryBackoffSeconds memory.local_embedding_retry_backoff_seconds float 30.0 本地嵌入模型加载失败后再次尝试前的退避等待(秒),避免失败后每条消息都反复触发加载
memory.contradictionScanOnStore memory.contradiction_scan_on_store bool false 是否在写入记忆时即时扫描矛盾
memory.autoResolveContradictions memory.auto_resolve_contradictions bool false 睡眠整合时自动消解同 key 矛盾(newest-wins),默认关闭只检测不消解
memory.reflectionEnabled memory.reflection_enabled bool true 是否启用睡眠反思(归纳提炼+LLM矛盾裁决),随睡眠整合运行

knowledge

字段 snake type default choices 说明
knowledge.enabled knowledge.enabled bool true 是否启用知识库检索
knowledge.docsDir knowledge.docs_dir str data/knowledge 知识库文档目录
knowledge.indexPath knowledge.index_path str data/knowledge_index.json 知识库索引文件路径
knowledge.autoIndex knowledge.auto_index bool true 是否自动索引文档目录
knowledge.chunkSize knowledge.chunk_size int 1200 文档切块大小(字符)
knowledge.chunkOverlap knowledge.chunk_overlap int 120 相邻切块重叠大小(字符)
knowledge.maxResults knowledge.max_results int 5 知识检索返回的最大结果数
knowledge.allowedExtensions knowledge.allowed_extensions list ['.md', '.txt', '.rst', '.json', '.yaml', '.yml', '.py', '.pdf', '.docx', '.xlsx', '.pptx'] 允许索引的文档扩展名

multiAgent

字段 snake type default choices 说明
multiAgent.enabled multi_agent.enabled bool true 是否启用多代理委派
multiAgent.maxDepth multi_agent.max_depth int 3 委派嵌套最大深度
multiAgent.maxParallelWorkers multi_agent.max_parallel_workers int 4 并行子代理数上限
multiAgent.maxIterations multi_agent.max_iterations int 12 子代理默认最大迭代数
multiAgent.auditPath multi_agent.audit_path str data/delegation_audit.jsonl 委派审计日志路径
multiAgent.workerProfiles multi_agent.worker_profiles list [] 子代理画像配置列表
multiAgent.workerProfiles[].id multi_agent.worker_profiles[].id str "" 子代理画像 ID
multiAgent.workerProfiles[].name multi_agent.worker_profiles[].name str "" 子代理名称
multiAgent.workerProfiles[].description multi_agent.worker_profiles[].description str "" 子代理用途描述
multiAgent.workerProfiles[].instructions multi_agent.worker_profiles[].instructions str "" 子代理系统指令
multiAgent.workerProfiles[].defaultTools multi_agent.worker_profiles[].default_tools list [] 子代理默认可用工具
multiAgent.workerProfiles[].model multi_agent.worker_profiles[].model str "" 子代理使用的模型
multiAgent.workerProfiles[].maxIterations multi_agent.worker_profiles[].max_iterations int 12 子代理单任务最大迭代数
multiAgent.workerProfiles[].maxTokens multi_agent.worker_profiles[].max_tokens int 8192 子代理生成最大 token 数
multiAgent.workerProfiles[].temperature multi_agent.worker_profiles[].temperature float 0.4 子代理采样温度

scheduler

字段 snake type default choices 说明
scheduler.enabled scheduler.enabled bool true 是否启用任务调度器
scheduler.maxConcurrentJobs scheduler.max_concurrent_jobs int 10 并发任务数上限

checkpoint

字段 snake type default choices 说明
checkpoint.enabled checkpoint.enabled bool true 是否开启编辑前影子git快照安全网(探测不到git时自动降级)
checkpoint.storePath checkpoint.store_path str ~/.echo-agent/checkpoints/store 影子git仓库存放路径
checkpoint.maxSnapshotsPerWorkspace checkpoint.max_snapshots_per_workspace int 20 每个工作区保留的最大快照数量
checkpoint.maxTotalSizeMb checkpoint.max_total_size_mb int 500 整个store的总大小上限(MB),超出触发gc
checkpoint.maxFileSizeMb checkpoint.max_file_size_mb int 10 单文件超过此大小(MB)不纳入快照

validation

字段 snake type default choices 说明
validation.enabled validation.enabled bool true 是否开启写后增量校验反馈(检查器探测不到时自动降级)
validation.timeoutSec validation.timeout_sec float 5.0 单个文件校验的超时上限(秒),超时静默跳过
validation.maxDiagnostics validation.max_diagnostics int 10 追加到工具结果的诊断条数上限
validation.maxFileSizeKb validation.max_file_size_kb int 512 超过此大小(KB)的文件跳过校验

mediaUnderstanding

字段 snake type default choices 说明
mediaUnderstanding.audioEnabled media_understanding.audio_enabled bool true 是否开启入站音频/语音转写(provider 探测不到时自动降级)
mediaUnderstanding.audioProvider media_understanding.audio_provider str auto 转写后端:auto(探测) / cloud(云) / local(本地 faster-whisper)
mediaUnderstanding.minAudioSizeKb media_understanding.min_audio_size_kb float 1.0 小于此大小(KB)的音频跳过转写(噪音/误触)
mediaUnderstanding.maxAudioSizeKb media_understanding.max_audio_size_kb int 25000 大于此大小(KB)的音频跳过转写(控成本)
mediaUnderstanding.localModelSize media_understanding.local_model_size str base 本地 faster-whisper 模型规格(tiny/base/small/...)
mediaUnderstanding.videoEnabled media_understanding.video_enabled bool true 是否开启入站视频理解(抽帧+音轨;provider/ffmpeg 探测不到自动降级)
mediaUnderstanding.videoFrameCount media_understanding.video_frame_count int 4 视频均匀抽帧数(喂 vision 模型)
mediaUnderstanding.videoVisionModel media_understanding.video_vision_model str "" 视频画面描述的 vision 模型覆盖(空=用 provider 默认模型)
mediaUnderstanding.videoVisionPrompt media_understanding.video_vision_prompt str 简要描述这段视频的画面内容。 视频抽帧描述的提示词
mediaUnderstanding.minVideoSizeKb media_understanding.min_video_size_kb float 1.0 小于此大小(KB)的视频跳过理解
mediaUnderstanding.maxVideoSizeKb media_understanding.max_video_size_kb int 204800 大于此大小(KB)的视频跳过理解(≈200MB,成本护栏)
mediaUnderstanding.videoFfmpegConcurrency media_understanding.video_ffmpeg_concurrency int 2 同时运行的 ffmpeg 抽帧/抽音轨进程数上限(防多视频打爆 CPU)
mediaUnderstanding.transcriptionBaseUrl media_understanding.transcription_base_url str https://api.groq.com/openai/v1 云转写端点 base_url(OpenAI 兼容 /audio/transcriptions)
mediaUnderstanding.transcriptionModel media_understanding.transcription_model str whisper-large-v3 云转写模型名

runtime

字段 snake type default choices 说明
runtime.singleInstance runtime.single_instance bool true 同一 workspace 是否只允许运行一个消费通道的实例(防止后台服务与前台 run 重复消费、重复回复);用 --force 可临时越过

storage

字段 snake type default choices 说明
storage.databasePath storage.database_path str data/echo_agent.db SQLite 数据库文件路径
storage.sessionsDir storage.sessions_dir str data/sessions 会话数据存储目录
storage.memoryDir storage.memory_dir str data/memory 记忆数据存储目录
storage.logsDir storage.logs_dir str data/logs 日志文件存储目录
storage.spillDir storage.spill_dir str data/spill 工具输出溢出产物的存储目录(必须是工作区内的相对路径专用子目录)

spill

字段 snake type default choices 说明
spill.enabled spill.enabled bool true 是否把超长工具输出落盘并只给模型预览(关闭则回退旧行为:输出由下游按 16000 字符哑截断,尾部结论丢失且无取回路径)
spill.maxInlineChars spill.max_inline_chars int 6000 模型可见的工具输出字符上限,超出则落盘并替换为首尾预览加取回路径
spill.retentionDays spill.retention_days int 7 spill 产物保留天数,超期删除
spill.maxTotalMb spill.max_total_mb int 512 spill 产物总体积上限(MB),超出按最旧优先删除
spill.sweepIntervalHours spill.sweep_interval_hours int 6 spill 产物清扫间隔(小时)

artifacts

字段 snake type default choices 说明
artifacts.enabled artifacts.enabled bool true 启用会话隔离的用户产物工具
artifacts.rootDir artifacts.root_dir str data/artifacts 用户产物目录(必须是工作区内的专用相对目录)
artifacts.maxChunkChars artifacts.max_chunk_chars int 3000 单次追加到产物的最大字符数
artifacts.maxArtifactMb artifacts.max_artifact_mb int 50 单个产物最大体积(MB)
artifacts.textFallbackMaxChars artifacts.text_fallback_max_chars int 100000 通道不支持附件时,允许自动分段发送的最大产物字符数
artifacts.textFallbackChunkChars artifacts.text_fallback_chunk_chars int 1700 文本降级交付的单段字符数(默认兼容 Discord 2000 字符限制)
artifacts.retentionDays artifacts.retention_days int 30 已完成用户产物的建议保留天数
artifacts.maxTotalMb artifacts.max_total_mb int 1024 全部用户产物的总体积上限(MB,超出时最旧优先清理)
artifacts.sweepIntervalHours artifacts.sweep_interval_hours int 24 用户产物清理周期(小时)
artifacts.allowedExtensions artifacts.allowed_extensions list ['.md', '.txt', '.json', '.csv'] 允许模型创建的文本产物扩展名

observability

字段 snake type default choices 说明
observability.logLevel observability.log_level str INFO 日志级别
observability.traceEnabled observability.trace_enabled bool true 是否记录执行轨迹(关闭则不写 trace 文件)
observability.maxTraceFiles observability.max_trace_files int 500 trace 文件保留数量上限,超出按最旧优先轮转删除;<=0 表示不限制(禁用轮转)
observability.healthCheckIntervalSeconds observability.health_check_interval_seconds int 60 健康检查间隔(秒)
observability.otelEnabled observability.otel_enabled bool true 是否启用 OpenTelemetry 指标导出
observability.otelEndpoint observability.otel_endpoint str "" OpenTelemetry 导出端点
observability.otelServiceName observability.otel_service_name str echo-agent OpenTelemetry 服务名
observability.otelExportIntervalMs observability.otel_export_interval_ms int 5000 OpenTelemetry 指标导出间隔(毫秒)
observability.loopWatchdogEnabled observability.loop_watchdog_enabled bool true 是否启用事件循环看门狗(检测 loop 冻结并自杀重启)
observability.loopWatchdogWarnSeconds observability.loop_watchdog_warn_seconds float 5.0 事件循环停滞多少秒后告警并转储线程栈
observability.loopWatchdogKillSeconds observability.loop_watchdog_kill_seconds float 30.0 事件循环冻结多少秒后自杀退出以便 supervisor 重启
observability.loopWatchdogCheckIntervalSeconds observability.loop_watchdog_check_interval_seconds float 5.0 看门狗线程检查心跳的间隔(秒)
observability.loopWatchdogMaxRestartsPerHour observability.loop_watchdog_max_restarts_per_hour int 5 一小时内看门狗自杀重启次数上限,超过则熔断不再自杀

skills

字段 snake type default choices 说明
skills.enabled skills.enabled bool true 是否启用技能系统
skills.skillsDir skills.skills_dir str skills 技能脚本目录
skills.creationNudgeInterval skills.creation_nudge_interval int 10 提示创建技能的轮次间隔
skills.disabled skills.disabled list [] 禁用的技能列表
skills.externalDirs skills.external_dirs list [] 额外加载技能的外部目录
skills.allowLazyInstalls skills.allow_lazy_installs bool true 是否允许技能运行时按需安装依赖
skills.admissionPolicy skills.admission_policy Literal stage_for_review auto_write/stage_for_review/manual_only 技能自动沉淀准入策略:auto_write 按风险自动写 / stage_for_review 低风险自动高风险暂存 / manual_only 一律暂存
skills.autoWriteRisk skills.auto_write_risk Literal low low/high auto_write 档下允许自动写盘的最高风险等级

compression

字段 snake type default choices 说明
compression.enabled compression.enabled bool true 是否启用上下文压缩
compression.triggerRatio compression.trigger_ratio float 0.7 上下文占用达到该比例时触发压缩
compression.tailBudgetRatio compression.tail_budget_ratio float 0.4 压缩后保留尾部消息的预算比例
compression.headProtectCount compression.head_protect_count int 3 压缩时保护不动的头部消息数
compression.summaryTargetRatio compression.summary_target_ratio float 0.2 摘要相对原文的目标长度比例
compression.summaryMinTokens compression.summary_min_tokens int 2000 摘要最小 token 数
compression.summaryMaxTokens compression.summary_max_tokens int 12000 摘要最大 token 数
compression.summaryModel compression.summary_model str "" 生成摘要使用的模型
compression.summaryCooldownSeconds compression.summary_cooldown_seconds int 600 两次压缩之间的冷却时间(秒)
compression.toolPruningEnabled compression.tool_pruning_enabled bool true 是否启用工具结果剪枝
compression.toolPruningTailBudgetRatio compression.tool_pruning_tail_budget_ratio float 0.3 工具结果剪枝保留尾部的预算比例
compression.maxCompressionCount compression.max_compression_count int 10 单会话最大压缩次数

gateway

字段 snake type default choices 说明
gateway.enabled gateway.enabled bool false 是否启用网关服务
gateway.host gateway.host str 127.0.0.1 网关监听地址。默认 127.0.0.1 仅本机可达;要对外提供服务改为 0.0.0.0 并同时配置 auth.apiTokens(无 token 绑非回环地址会被拒绝启动),反代场景还需在 auth.allowedHosts 列出代理域名。注意留空不等于本机:空字符串与 :: 一样是通配绑定(等同 0.0.0.0),同样受上述限制
gateway.port gateway.port int 58123 网关监听端口(0 表示动态分配,真实端口写入 workspace/.echo-agent/gateway.json)
gateway.apiPrefix gateway.api_prefix str /api/v1 网关 API 路径前缀
gateway.wsPath gateway.ws_path str /ws 网关 WebSocket 路径
gateway.wsHeartbeatSeconds gateway.ws_heartbeat_seconds float 30.0 服务端 WebSocket 主动心跳间隔(秒,0 为关闭):服务端定期 ping 客户端并要求 pong,避免长回合期间连接单边失效而无人察觉导致回复投递不到 CLI
gateway.sessionPolicy.mode gateway.session_policy.mode Literal idle daily/idle/both/none 网关会话重置策略
gateway.sessionPolicy.dailyResetHour gateway.session_policy.daily_reset_hour int 4 每日重置会话的小时(0-23)
gateway.sessionPolicy.idleTimeoutMinutes gateway.session_policy.idle_timeout_minutes int 1440 会话空闲超时(分钟)
gateway.auth.mode gateway.auth.mode Literal allowlist open/allowlist/pairing 网关鉴权模式
gateway.auth.allowedUsers gateway.auth.allowed_users list [] 允许访问网关的用户白名单
gateway.auth.adminUsers gateway.auth.admin_users list [] 网关管理员用户列表
gateway.auth.apiTokens gateway.auth.api_tokens list [] 网关 API 访问令牌列表
gateway.auth.adminTokens gateway.auth.admin_tokens list [] 高危管理接口(技能导入安装删除/知识库上传删除)专用令牌;为空时回退到 api_tokens
gateway.auth.allowedOrigins gateway.auth.allowed_origins list [] 浏览器 Origin 白名单(跨站放行入口);留空不等于关闭 CSRF 防护——WS 握手、POST /message 与管理接口默认即拦截明确的跨站浏览器请求,本项用于额外放行指定 Origin(如 webview、开发用的前端端口);非浏览器客户端始终不受影响
gateway.auth.tokenHeader gateway.auth.token_header str X-Echo-Agent-Token 携带 API 令牌的请求头名
gateway.auth.pairingTtlSeconds gateway.auth.pairing_ttl_seconds int 300 配对模式令牌有效期(秒)
gateway.auth.allowedHosts gateway.auth.allowed_hosts list [] 可接受的 Host 头列表。DNS rebinding 攻击中 Origin 与 Host 都是攻击者控制的字符串,比对二者无效;唯一可信信号是 Host 是否为本网关预期被访问的名字。绑 loopback 时留空默认接受 localhost/127.0.0.1/[::1];绑 0.0.0.0/:: 时留空会启动告警,且管理端点(会话/配置/记忆写入/任务/定时/知识库)会拒绝一切浏览器请求;反代时显式列出代理域名。条目会规范化后比较(忽略大小写、去端口、IPv6 方括号),通配符(0.0.0.0 / ::)不是有效条目,会被丢弃
gateway.knownPlatforms gateway.known_platforms list ['cli', 'ws', 'api', 'cron', 'dingtalk', 'discord', 'email', 'feishu', 'matrix', 'qqbot', 'slack', 'telegram', 'webhook', 'wechat', 'wecom', 'weixin', 'whatsapp'] 网关认可的 platform 取值。客户端自报的 platform 会拼进通道名 gateway:{platform},而通道名在别处承载能力判定(如 channels.stream_optimistic_channels 断言该通道可就地重绘),所以不在此列表的取值会被折叠为 ws,而不是直接拒绝——避免打断已有的第三方接入。留空表示不做折叠(回到旧的完全自报行为)
gateway.platforms gateway.platforms dict {} 各接入平台的网关配置(键为平台名)
gateway.platforms{}.rateLimitRpm gateway.platforms{}.rate_limit_rpm int 30 该平台每分钟请求上限
gateway.mediaCacheDir gateway.media_cache_dir str data/media_cache 网关媒体缓存目录
gateway.mediaCacheMaxMb gateway.media_cache_max_mb int 500 媒体缓存大小上限(MB)
gateway.mediaMaxFileMb gateway.media_max_file_mb int 25 单个媒体文件下载大小上限(MB)。Content-Length 与实际字节流都会校验,超限即中止并删除临时文件
gateway.mediaMaxUrlsPerMessage gateway.media_max_urls_per_message int 10 单条消息允许携带的媒体 URL 数量上限,超出的部分被拒绝
gateway.mediaDownloadConcurrency gateway.media_download_concurrency int 4 媒体并行下载数上限,避免一条消息打满出站连接与内存
gateway.mediaAllowPrivateAddresses gateway.media_allow_private_addresses bool false 是否允许媒体下载访问私有/回环地址(SSRF 风险)。与 tools.web.allowPrivateAddresses 同口径但独立开关:内网自建 CDN 可能需要开启,默认拦截。即使开启也仍然只允许 http/https
gateway.hooksDir gateway.hooks_dir str "" 网关钩子脚本目录

planning

字段 snake type default choices 说明
planning.enabled planning.enabled bool true 是否启用任务规划
planning.defaultStrategy planning.default_strategy str auto 默认规划策略
planning.maxBranches planning.max_branches int 3 思维树(ToT)策略探索的候选分支数
planning.reflectionEnabled planning.reflection_enabled bool true 是否启用规划反思

a2A

字段 snake type default choices 说明
a2A.enabled a2a.enabled bool true 是否启用 A2A(agent-to-agent)接口
a2A.agentName a2a.agent_name str echo-agent 对外暴露的 A2A 代理名
a2A.agentDescription a2a.agent_description str A modular AI agent framework 对外暴露的 A2A 代理描述
a2A.capabilities a2a.capabilities list ['chat', 'tool_use'] A2A AgentCard 对外声明的能力标签
a2A.taskTtlSeconds a2a.task_ttl_seconds float 3600.0 A2A 终态任务保留时长(秒),超时后回收;tasks/get 在此窗口内仍可取回结果
a2A.maxTasks a2a.max_tasks int 1000 A2A 任务仓库容量上限,超出时淘汰最老的终态任务
a2A.activeTaskTtlSeconds a2a.active_task_ttl_seconds float 86400.0 未达终态任务的兜底保留时长(秒),防卡住的任务永久占用;非任务超时

evaluation

字段 snake type default choices 说明
evaluation.datasetPath evaluation.dataset_path str data/eval 评测数据集路径
evaluation.timeoutPerCase evaluation.timeout_per_case int 120 单条评测用例超时(秒)

bus

字段 snake type default choices 说明
bus.maxQueueSize bus.max_queue_size int 1000 事件总线队列容量上限
bus.maxConcurrency bus.max_concurrency int 50 事件总线并发处理上限

rateLimit

字段 snake type default choices 说明
rateLimit.sessionRpm rate_limit.session_rpm int 20 单会话每分钟请求上限
rateLimit.sessionBurst rate_limit.session_burst int 5 单会话突发请求上限

circuitBreaker

字段 snake type default choices 说明
circuitBreaker.failureThreshold circuit_breaker.failure_threshold int 5 触发熔断的连续失败次数
circuitBreaker.recoverySeconds circuit_breaker.recovery_seconds float 60.0 熔断后尝试恢复的等待时间(秒)
circuitBreaker.halfOpenMax circuit_breaker.half_open_max int 2 半开状态允许的试探请求数

plugins

字段 snake type default choices 说明
plugins.enabled plugins.enabled bool true 是否启用插件系统
plugins.allow plugins.allow list [] 允许加载的插件白名单
plugins.deny plugins.deny list [] 禁止加载的插件黑名单
plugins.extraDirs plugins.extra_dirs list [] 额外的插件搜索目录
plugins.config plugins.config dict {} 各插件的自定义配置(键为插件名)
plugins.trustedPlugins plugins.trusted_plugins list [] 免权限校验的可信插件列表
plugins.permissionMode plugins.permission_mode Literal compat compat/strict 插件权限模式

ui

字段 snake type default choices 说明
ui.locale ui.locale Literal auto en/zh/auto 界面语言

agent

字段 snake type default choices 说明
agent.maxIterations agent.max_iterations int 40 agent 主循环最大迭代数
agent.maxOutputContinuations agent.max_output_continuations int 3 模型命中单次输出上限后自动续写的最大次数
agent.continuationOverlapChars agent.continuation_overlap_chars int 2000 自动续写时用于检测并去除重复文本的窗口字符数
agent.toolConcurrency.enabled agent.tool_concurrency.enabled bool true 是否对只读、路径不冲突的工具并发执行
agent.toolConcurrency.maxConcurrent agent.tool_concurrency.max_concurrent int 4 工具并发上限(1 等价关闭并发,退化为串行)
agent.heartbeat.enabled agent.heartbeat.enabled bool true 长任务静默时是否定时播报进度心跳
agent.heartbeat.firstDelaySec agent.heartbeat.first_delay_sec int 30 首条心跳前的静默阈值(秒),短任务不触发
agent.heartbeat.minIntervalSec agent.heartbeat.min_interval_sec int 60 两次可见反馈之间的最小间隔(秒),压制高频里程碑
agent.heartbeat.verbosity agent.heartbeat.verbosity Literal key_milestones key_milestones/every_tool/silent 心跳详细度:仅关键里程碑/每个工具/不发文字
agent.heartbeat.template agent.heartbeat.template str ⏳ {activity}(已用时 {elapsed}) 心跳文案模板,支持 {elapsed} 与 {activity} 占位
agent.inspection.enabled agent.inspection.enabled bool false 是否开启主动巡检(默认关;需在 INSPECT.md 声明巡检项)
agent.inspection.tickIntervalSec agent.inspection.tick_interval_sec int 300 巡检节拍器扫描到期项的间隔(秒),非每项巡检频率
agent.inspection.inspectFile agent.inspection.inspect_file str INSPECT.md 巡检清单文件名(workspace 相对路径)
agent.inspection.maxItemsPerTick agent.inspection.max_items_per_tick int 5 单次节拍最多投给 agent 的到期巡检项数
agent.inspection.deliverChannel agent.inspection.deliver_channel str "" 巡检告警投递通道(空则用注册时的 session 兜底)
agent.inspection.deliverChatId agent.inspection.deliver_chat_id str "" 巡检告警投递会话 id(空则用注册时的 session 兜底)

evolution

字段 snake type default choices 说明
evolution.enabled evolution.enabled bool false 是否启用自进化技能引擎
evolution.triggerMode evolution.trigger_mode Literal manual manual/threshold/scheduled 进化触发模式
evolution.thresholdTrajectories evolution.threshold_trajectories int 50 threshold 模式触发所需轨迹数
evolution.cronExpression evolution.cron_expression str 0 4 * * * scheduled 模式的 cron 表达式
evolution.maxCandidatesPerRun evolution.max_candidates_per_run int 3 单次进化生成的候选上限
evolution.maxTrajectoriesPerRun evolution.max_trajectories_per_run int 200 单次进化处理的轨迹上限
evolution.evalDatasetPath evolution.eval_dataset_path str data/eval/baseline.yaml 进化评测基线数据集路径
evolution.regressionThreshold evolution.regression_threshold float 0.05 判定回归的分数下降阈值
evolution.requireStrictImprovement evolution.require_strict_improvement bool true 是否要求严格改进才晋升
evolution.minEvalCases evolution.min_eval_cases int 3 晋升所需的最小评测用例数,样本不足则判定不确定不晋升
evolution.recordTrajectories evolution.record_trajectories bool true 是否记录执行轨迹用于进化
evolution.trajectoryRetentionDays evolution.trajectory_retention_days int 30 轨迹保留天数
evolution.evolverModel evolution.evolver_model str "" 执行进化所用模型
evolution.skillSizeLimitBytes evolution.skill_size_limit_bytes int 50000 进化产出技能的大小上限(字节)
evolution.redactArgs evolution.redact_args bool true 记录轨迹时是否脱敏工具参数
evolution.evalParallel evolution.eval_parallel int 2 进化评测并发度
evolution.evalTimeoutSeconds evolution.eval_timeout_seconds int 60 进化评测单用例超时(秒)
evolution.cooldownSecondsAfterPromote evolution.cooldown_seconds_after_promote int 86400 晋升后再次进化的冷却时间(秒)
evolution.autoPromote evolution.auto_promote bool true 是否自动晋升通过评测的候选
evolution.candidateReviewRequired evolution.candidate_review_required bool false 晋升前是否需要人工审查候选

cost

字段 snake type default choices 说明
cost.enabled cost.enabled bool false 是否启用成本追踪与预算控制
cost.dailyBudgetUsd cost.daily_budget_usd float 0.0 每日成本预算(美元,0 为不限)
cost.softThresholdRatio cost.soft_threshold_ratio float 0.8 达到预算该比例时发出软告警
cost.pricingOverrides cost.pricing_overrides dict {} 模型定价覆盖表

workspace

字段 snake type default choices 说明
workspace workspace str ~/.echo-agent agent 工作区根目录