配置参考

Holon 把运行时配置保存在 ~/.holon/ 下的 JSON 文件中:

文件用途
~/.holon/config.json提供商、默认模型、TUI、Web 与运行时设置
~/.holon/credentials.json受权限保护的凭据存储(通过 config credentials 管理)

配置键

用 holon config get/set/unset/list 读写配置键。本地 daemon 运行时,这些命令优先走 daemon 的运行时配置 API;无法连接 daemon 时,回退到离线配置存储。set 和 unset 会在 stderr 打印 applied_via=daemon_api 或 applied_via=offline_store,stdout 仍是脚本 使用的 JSON 值或状态。不被支持的 daemon 更新会失败,并给出 daemon 返回的拒绝原因。被 接受的 daemon 更新会持久化到 config.json;在支持重启或重载之前,运行中的 daemon 可能 继续使用当前生效的配置,CLI 会在 stderr 上提示这一点。 用 holon config schema 查看所有可用的键及其类型、默认值和说明。

模型与提供商设置

键类型说明
vision.defaultmodel_route_ref_or_autoViewImage 视觉观测的路由引用。未设置时自动发现支持图像的提供商
image_generation.defaultmodel_route_ref_or_autoGenerateImage 请求的路由引用。未设置时选择第一个支持图像生成的轮次模型
model.defaultmodel_route_ref默认可执行路由,例如 "anthropic@default/claude-sonnet-4-6"
model.fallbacksmodel_route_ref_list有序的可执行回退路由
runtime.disable_provider_fallbackboolean禁用提供商/模型回退,要求确定性的单提供商执行
# 设置默认模型
holon config set model.default "deepseek-anthropic@default/deepseek-v4-pro"

# 添加回退模型(JSON 数组)
holon config set model.fallbacks '["anthropic@default/claude-sonnet-4-6","minimax@default/MiniMax-M2.7"]'

# 读取当前默认值
holon config get model.default

# 查看全部当前配置
holon config list

# 删除配置键(恢复默认值)
holon config unset model.fallbacks

按模型策略

models.catalog 键用于覆盖特定提供商/模型引用的运行时元数据。model.unknown_fallback.* 下的键控制缺少内置元数据的模型的策略。

模型元数据与可执行选择使用不同的身份:

旧的 provider/model 选择值仍被接受,但所有新的写入都会带上 endpoint。用以下命令检查 或显式重写现有配置与 Agent 状态:

holon config migrate-model-routes          # 试运行
holon config migrate-model-routes --write  # 经校验的规范化重写

写入会创建一次性配置备份,并在一个 SQLite 事务中更新所有 Agent 状态。无效或有歧义的 引用会阻止部分写入。

认证与 Session 设置

Holon 控制平面支持基于 Cookie 的 Session 认证(适用于浏览器和 Web UI 客户端)以及 Bearer Token 认证。

键类型默认值说明
auth.modestring ("local" | "oidc")"local"认证模式。"local" 支持 Bearer Token 与本地 Cookie Session;"oidc" 启用 OpenID Connect 登录流程。变更需重启 daemon 生效。
auth.oidc.issuer_urlstringunsetOIDC Issuer 发现 URL(如 https://auth.example.com/realms/holon)
auth.oidc.client_idstringunset向 Issuer 注册的 OIDC 客户端 ID
auth.oidc.client_secret_envstringunset包含 OIDC 客户端密钥的环境变量名
auth.oidc.redirect_uristringunset回调重定向 URI(如 http://localhost:7878/api/auth/oidc/callback)
auth.session.absolute_ttl_secondspositive_integer_or_nullunset (null)绝对 Session 生命周期(秒,null 表示无绝对上限)
auth.session.idle_ttl_secondspositive_integer86400(24小时)空闲超时时间(秒),无交互超过该时长后 Session 失效

有关从 IdP 注册到会话验证的完整步骤,请参阅配置 OIDC 身份认证。

Session 生命周期约束:

  • 配置 auth.session.absolute_ttl_seconds 时,其数值必须大于或等于 auth.session.idle_ttl_seconds。
  • 将 auth.session.absolute_ttl_seconds 设为 null(或不设置)表示不限制绝对超时,活跃会话将持续有效。为保持兼容性,配置中的 0 会被自动归一化为 null。
  • 生产环境下 Issuer URL 与回调地址必须使用 HTTPS(仅本地测试允许 localhost 使用 HTTP)。
  • 变更 auth.mode 或 OIDC 参数后需要重启 daemon 生效。
# 配置 Session 超时
holon config set auth.session.idle_ttl_seconds 43200

# 启用 OIDC 认证
holon config set auth.mode "oidc"
holon config set auth.oidc.issuer_url "https://auth.example.com/realms/holon"
holon config set auth.oidc.client_id "holon-client"
holon config set auth.oidc.client_secret_env "HOLON_OIDC_CLIENT_SECRET"

HTTP API CORS

CORS 默认对任意端口的 localhost/loopback 浏览器来源启用: http://localhost:<port>、https://localhost:<port>、 http://127.0.0.1:<port> 和 http://[::1]:<port>。这样本地 Web UI 在提供所需的 Authorization: Bearer <token> 请求头时,就能调用本地或远程的 Holon HTTP/控制 API。

配置 api.cors.allowed_origins 可以添加非本地的浏览器来源,例如局域网托管的 Web UI。 这些来源会追加到内置的 localhost/loopback 白名单。局域网访问还要求 API 绑定到可达的 地址,例如 0.0.0.0:7878 或特定的局域网 IP;绑定到 127.0.0.1 时其他设备无法访问。 设置 api.cors.enabled=false 可完全禁用 CORS。

holon config set api.cors.allowed_origins '["http://192.168.1.10:5173"]'
holon config set api.cors.allowed_methods '["GET","POST","PATCH","DELETE","OPTIONS"]'
holon config set api.cors.allowed_headers '["content-type","authorization"]'
holon config set api.cors.allow_credentials false
holon config set api.cors.max_age_seconds 600

不要同时设置 api.cors.allow_credentials=true 和 api.cors.allowed_origins=["*"];Holon 会拒绝这个不安全的组合。

Projection Gate

键类型默认值说明
api.projection.max_leadersinteger16并发 projection 构建的上限;在 leader 释放前,更多不同 key 会得到 429 projection_busy
api.projection.cache_ttl_msinteger500已完成的 projection 构建被缓存并复用的毫秒数

调度器

规范调度器始终启用。runtime.scheduler 不再是可配置的键。为兼容一个次版本,已有的 持久化值 runtime.scheduler=canonical 或环境变量值 HOLON_SCHEDULER=canonical 会被 接受,并给出弃用警告。legacy 及其他所有值都会导致启动失败。请从部署配置中移除这个 过时的选择器。

迁移 40 把 rollout 表标记为已废弃的兼容数据。后续清理迁移会在恢复到达固定点后删除这些 表。它们不参与启动、常规调度器事务或类型化修复中的权限判定。

当存在未结束的规范执行、在途的执行工作项或已出队的队列条目时,后续清理迁移会失败关闭。 错误信息会列出受影响的 Agent ID。停止 Holon,运行 holon debug scheduler-recovery --agent <agent> 进行报告、应用类型化恢复,然后再次 报告。该命令可以在不触发清理的情况下打开紧邻的前一个 schema;当前二进制的其他命令做 不到。

对于仍需要旧调度器的部署,Holon v0.31.1 是回滚版本。仅在拥有迁移前数据库备份时使用它; 经后续 schema 清理迁移过的数据库不支持降级。

Decision 子系统配置

键类型默认值说明
decision.enabledbooleanfalse启用可选的 Decision 提供者子系统
decision.modelmodel_route_refunsetDecision 使用的共享提供者模型路由;所选模型必须显式声明 Decision 能力
decision.local_onnx.enabledbooleanfalse启用嵌入式本地 ONNX 决策提供者
decision.local_onnx.presetstringjev-selector-q4f16内置本地 ONNX 模型预设名称
decision.local_onnx.model_dirstringunset包含 ONNX 模型文件和 manifest 的本地目录
decision.local_onnx.variantstringq4f16模型量化或变体标识
decision.local_onnx.num_threadsinteger1本地 ONNX 推理使用的 CPU 线程数
decision.local_onnx.checksumstringunset模型目录的可选 SHA-256 校验和
decision.timeout_msintegerunset提供者请求超时时间(毫秒)
decision.max_tokensintegerunsetDecision 响应的最大输出 Token 数
decision.concurrencyintegerunset最大并发 Decision 请求数
decision.queue_capacityintegerunset最大排队 Decision 请求数
decision.tools.enabledbooleanfalse向 Agent 暴露非权威决策工具(AdvisoryDecision)
decision.tools.max_calls_per_turnintegerunset单轮对话允许的最大咨询工具调用次数(未设置表示不限)
decision.tools.timeout_msintegerunset咨询工具超时时间(毫秒)
decision.tools.min_confidencefloatunset最小置信度阈值(0.0 至 1.0);低于该阈值时显式弃权(abstain)
# 启用 Decision 子系统与咨询工具
holon config set decision.enabled true
holon config set decision.tools.enabled true

# 将决策路由至专用模型
holon config set decision.model "typesafe@default/typesafe-ai/jev"

# 或启用零外发的本地 ONNX 决策提供者
holon config set decision.local_onnx.enabled true
holon config set decision.local_onnx.preset "jev-selector-q4f16"

# 设置安全防护上限
holon config set decision.tools.max_calls_per_turn 3
holon config set decision.tools.min_confidence 0.65

凭据管理

凭据安全存储在 ~/.holon/credentials.json。使用 config credentials 子命令,不要直接编辑这个文件。

设置凭据

# 推荐:用 --stdin 避免 shell 历史泄露
holon config credentials set --kind api_key --stdin deepseek
# 粘贴 API key 后回车(Ctrl+D 结束)

# 备选:--material(会出现在 shell 历史中,不推荐)
holon config credentials set --kind api_key --material "sk-..." deepseek

<PROFILE> 参数是你自选的标签(例如 deepseek、bigmodel、openai)。

列出与删除

holon config credentials list
holon config credentials remove deepseek

环境变量

作为凭据存储的替代方案,Holon 从环境变量读取 API key:

提供商环境变量
AnthropicANTHROPIC_AUTH_TOKEN
DeepSeekDEEPSEEK_API_KEY
OpenAIOPENAI_API_KEY
BigModel (Zhipu)BIGMODEL_API_KEY
MiniMaxMINIMAX_API_KEY
Xiaomi MiMoXIAOMI_API_KEY
OpenRouterOPENROUTER_API_KEY
FireworksFIREWORKS_API_KEY
TogetherTOGETHER_API_KEY
MistralMISTRAL_API_KEY
xAIXAI_API_KEY
MoonshotMOONSHOT_API_KEY
NEAR AI Cloud(TEE 推理)NEARAI_API_KEY
VolcengineVOLCENGINE_API_KEY 或 ARK_API_KEY
StepFunSTEPFUN_API_KEY
QwenQWEN_API_KEY 或 DASHSCOPE_API_KEY
HuggingFaceHUGGINGFACE_API_KEY 或 HF_TOKEN
VeniceVENICE_API_KEY
ChutesCHUTES_API_KEY
NVIDIANVIDIA_API_KEY

完整且最新的列表请运行 holon config providers list。

凭据来源

来源说明
none不需要凭据(仅本地提供商)
env从环境变量读取凭据
credential_profile按 profile 名从 ~/.holon/credentials.json 读取凭据
external_cli运行外部 CLI(例如 codex)获取凭据

提供商配置

Holon 内置 40+ 个提供商的定义。你可以在 config.json 中添加或覆盖提供商。

列出已注册提供商

holon config providers list

每个提供商条目会显示它的 transport 协议(anthropic_messages、openai_chat_completions 等)、base URL 和凭据要求。

Ollama(本地)

Holon 内置 ollama 提供商,用于通过 Ollama 在本地运行模型。它不需要 API key,通过 Anthropic Messages transport 连接本地 Ollama 服务器 http://127.0.0.1:11434。

  1. 安装并启动 Ollama,然后拉取模型,例如 ollama pull qwen3.8:latest。
  2. 在 holon onboard 中选择 Ollama,或直接设置:
holon config set model.default "ollama/qwen3.8:latest"

Web GUI 无需任何凭据配置即可发现本地运行的 Ollama 模型,ViewImage 也会自动发现 Ollama 视觉模型用于图像分析。

添加自定义提供商

holon config providers set my-proxy \
  --transport openai_chat_completions \
  --base-url "https://my-proxy.example.com/v1" \
  --credential-source env \
  --credential-env "MY_PROXY_API_KEY" \
  --credential-kind api_key

选项:

提供商端点与 Plan

提供商配置把提供商账号与其具体端点分开。旧版提供商键仍用于配置默认端点:

holon config set providers.openai.transport openai_responses
holon config set providers.openai.base_url "https://api.openai.com/v1"

它们是 providers.openai.endpoints.default.transport 和 providers.openai.endpoints.default.base_url 的快捷方式。当同一提供商账号需要另一个 transport、base URL 或凭据策略时,使用端点键:

holon config set providers.volcengine.endpoints.image-openai.transport openai_chat_completions
holon config set providers.volcengine.endpoints.image-openai.base_url "https://ark.cn-beijing.volces.com/api/plan/v3"
holon config set providers.volcengine.plans.image-openai.endpoint image-openai

plan 把稳定的提供商别名(例如 volcengine-image-openai)映射到具名端点。规范化选择会 显式持久化该路由,例如 volcengine@image-openai/model-id。已有的内置别名和更旧的 provider/model 引用继续作为兼容输入可用。

删除提供商

holon config providers remove my-proxy

提供商 OAuth 与登录流程

部分提供商使用 OAuth 或浏览器登录,而不是静态 API key。Holon 支持两种 OAuth 风格流程:

OpenAI Codex OAuth

Codex 支持两种 OAuth 流程:

浏览器 OAuth 使用 credential_source: external_cli 和 credential_kind: oauth;设备 OAuth 则通过引导向导完成。

如果凭据过期,再次运行 holon onboard:向导会检测到过期并引导你重新认证。

Vercel AI Gateway OIDC

Vercel AI Gateway 使用 OpenID Connect(OIDC)进行认证。当选择 Vercel 作为提供商时, 引导向导支持这一流程。

对于 OAuth 和 OIDC 流程,推荐的设置路径是:

holon onboard

向导会处理整个 OAuth 流程并安全存储凭据。除非你在编写无头部署脚本,否则不要尝试在 config.json 中手动配置 OAuth 提供商。

列出可用模型

holon config models list

它会显示每个模型的可用性、凭据状态、提供商、transport 和策略(上下文窗口、最大输出 token 数、能力)。

Agent 级模型覆盖

每个 Agent 都可以覆盖默认模型:

holon agent model set "anthropic@default/claude-sonnet-4-6" reviewer

该覆盖存储在 Agent 自己的配置中,而不是全局的 model.default。

诊断

# 完整系统健康检查,包括模型可用性
holon config doctor

# 列出所有配置键及其类型和默认值
holon config schema

config doctor 报告:默认模型、回退模型、逐模型可用性、提供商设置和重试策略。

配置文件位置

Holon 按以下顺序解析配置目录:

  1. $HOLON_HOME/config.json(设置了 HOLON_HOME 时)
  2. ~/.holon/config.json(回退)

凭据遵循同样的规则,使用 credentials.json。

TUI 设置

键取值默认值说明
tui.alternate_screenauto、always、neverauto备用屏幕缓冲区行为

TUI 调试探针由环境变量控制:

环境变量取值默认值说明
HOLON_TUI_PRESENTATION_LOG1、true、yes、on、debugunset为流驱动的呈现决策启用 <HOLON_HOME>/logs/tui/presentation.jsonl 调试日志
HOLON_TUI_PRESENTATION_LOG_MAX_BYTES正整数,单位字节5242880当呈现调试日志达到该大小时轮转

运行时可观测性

OTLP trace 导出是可选的,默认关闭。控制 API 运行时,OpenMetrics 通过受保护的 /api/control/runtime/metrics 端点暴露。

键类型默认值说明
runtime.observability.otlp.enabledbooleanfalse启用有界的 OTLP/HTTP JSON trace 导出器
runtime.observability.otlp.endpointstringunset完整的 HTTP 或 HTTPS OTLP trace 端点,通常以 /v1/traces 结尾
runtime.observability.otlp.headersjson_object{}静态的非机密请求头
runtime.observability.otlp.credential_profilestringunset作为 bearer authorization 头注入的凭据 profile
runtime.observability.otlp.queue_capacitypositive integer1024非阻塞导出器队列中等待的最大 span 数
runtime.observability.otlp.batch_sizepositive integer128单个导出请求中的最大 span 数
runtime.observability.otlp.batch_interval_mspositive integer1000最大批处理延迟
runtime.observability.otlp.timeout_mspositive integer5000每个请求的导出超时

OTLP 设置在 daemon 启动时生效。Collector、Prometheus、Grafana、告警和故障排查示例见 运行时可观测性指南。

Web 抓取/搜索设置

键类型默认值说明
web.fetch.enabledbooleantrue启用 WebFetch 工具
web.fetch.max_charsinteger20000返回给模型的最大字符数
web.fetch.max_response_bytesinteger750000截断前的最大响应字节数
web.fetch.timeout_secondsinteger20每个请求的超时
web.fetch.max_redirectsinteger5最大重定向跳数
web.fetch.allowed_hostsstring_list[]允许的主机(为空表示全部)
web.fetch.denied_hostsstring_list[]被屏蔽的主机
web.search.enabledbooleantrue启用 WebSearch 工具
web.search.builtin_provider.enabledbooleantrue当活跃模型提供商支持时,默认启用提供商声明的内置网页搜索
web.search.providerstring"auto"默认搜索提供商,或 auto
web.search.modeenum"fallback"路由模式:single、fallback 或 aggregate
web.search.providersstring_list[]auto 模式下显式的提供商尝试顺序
web.search.max_resultsinteger5返回的最大结果数
web.search.max_provider_attemptsinteger3fallback/aggregate 路由尝试的最大提供商数
x_search.enabledbooleantrue有 xAI 凭据时自动启用 XSearch;设为 false 可隐藏它
x_search.modelmodel_ref—用于隔离 XSearch 请求的可选 xAI 模型路由
x_search.timeout_secondsinteger60隔离 xAI XSearch 请求的超时
web.providers.<name>.kindstringrequired提供商类型:duck_duck_go、searxng、brave、tencent_cloud_wsa、bocha、tavily、exa、perplexity、firecrawl、open_ai_native、anthropic_native、gemini_native 或 command
web.providers.<name>.base_urlstringunset自定义提供商端点
web.providers.<name>.credential_profilestringunsetAPI 型提供商的凭据 profile
web.providers.<name>.capabilitiesjson_objectderivedholon config get 和路由诊断暴露的只读能力元数据
web.providers.<name>.command.argvstring_listunsetkind=command WebSearch 提供商的命令参数模板(支持 {{query}} 和 {{max_results}})
web.providers.<name>.output.formatenum"json"命令提供商 stdout 格式
web.providers.<name>.output.mapping.titlestringunset用于映射结果标题的 JSON 路径
web.providers.<name>.output.mapping.urlstringunset用于映射结果 URL 的 JSON 路径
web.providers.<name>.output.mapping.snippetstringunset用于映射结果摘要的可选 JSON 路径
web.providers.<name>.output.mapping.published_atstringunset用于映射发布时间戳的可选 JSON 路径
web.providers.<name>.limits.timeout_msinteger10000命令提供商执行超时(毫秒)
web.providers.<name>.limits.max_output_bytesinteger200000命令提供商 stdout 字节数上限

运行时数据库保留策略(Retention)

为 SQLite 运行时事件、对话记录和工具执行配置自动保留清理:

键类型默认值说明
runtime.retention.enabledbooleanfalse启用有界运行时 SQLite 保留清理。除非显式配置,否则默认禁用。
runtime.retention.interval_hourspositive integer6启用保留时,daemon 执行保留清理轮次的间隔小时数。
runtime.retention.audit_events_dayspositive integer30审计事件保留的天数窗口。
runtime.retention.audit_events_min_rows_per_scopepositive integer4096每个 Agent 或 host scope 独立保留的最小审计事件行数。
runtime.retention.transcript_entries_dayspositive integer90对话记录保留的天数窗口。
runtime.retention.transcript_entries_min_rowspositive integer20000全局保留的最小对话记录行数。
runtime.retention.tool_executions_dayspositive integer90工具执行保留的天数窗口。
runtime.retention.tool_executions_min_rowspositive integer15000全局保留的最小工具执行行数。
runtime.retention.incremental_vacuum_pagespositive integer256保留清理后向 SQLite 增量 vacuum 请求的最大页数。

命令任务输出安全

为后台命令任务配置磁盘输出上限、执行配额以及文件系统剩余空间水位:

键类型默认值说明
runtime.command_task_output_retention_bytesinteger bytes8388608 (8 MiB)单个命令任务在磁盘上保留的最大 stdout/stderr 合并字节数。超出后保留有界的头部和尾部,并插入显式截断标记。最小 4096 字节。
runtime.command_task_output_quota_bytesinteger bytes67108864 (64 MiB)命令任务 stdout/stderr 累计输出的总字节数硬性执行配额。超出此配额将终止该命令任务以防失控。必须 $\ge$ 保留字节数。
runtime.command_task_min_free_disk_bytesinteger bytes536870912 (512 MiB)任务产物文件系统所需保留的最小磁盘空闲字节数。低于此限制时任务终止以保护宿主磁盘。
runtime.command_task_min_free_disk_percentinteger (0-100)5任务产物文件系统所需保留的最小磁盘空闲百分比(0–100)。

环境变量

每个命令任务输出安全配置均可通过环境变量覆盖:

环境变量说明
HOLON_COMMAND_TASK_OUTPUT_RETENTION_BYTES覆盖 runtime.command_task_output_retention_bytes
HOLON_COMMAND_TASK_OUTPUT_QUOTA_BYTES覆盖 runtime.command_task_output_quota_bytes
HOLON_COMMAND_TASK_MIN_FREE_DISK_BYTES覆盖 runtime.command_task_min_free_disk_bytes
HOLON_COMMAND_TASK_MIN_FREE_DISK_PERCENT覆盖 runtime.command_task_min_free_disk_percent

Agent 模板远程源

配置 Holon 同步以填充 Agent 模板目录的远程 Git 仓库:

键类型默认值说明
agent_templates.remote_sourcesjson_object{}源 ID 到远程源配置的映射
agent_templates.remote_sources.<id>.urlstringrequiredGit 仓库 URL(HTTPS)
agent_templates.remote_sources.<id>.refstringunsetGit ref(分支、标签或提交);默认为仓库的默认分支
agent_templates.remote_sources.<id>.enabledbooleantrue该源是否启用同步
agent_templates.remote_sources.<id>.credential_profilestringunset私有仓库的凭据 profile

daemon 在启动时运行同步任务,把远程源模板拉取到本地模板库(~/.agents/agent_templates)。 重新同步会复用已记录安装映射,并拒绝覆盖本地编辑过的模板。

HTTP 寻址

Holon 把监听地址和通告地址分开:

键类型默认值说明
http_addrstring127.0.0.1:7878HTTP/控制 API 的 TCP 监听地址
advertise_urlstringunset向客户端通告的公网可达 URL(例如 https://holon.example.com)
callback_base_urlstringderived同主机 webhook 回调使用的本地 loopback URL

advertise_url 是远程客户端(CLI、Web GUI)用来访问 daemon 的 URL。当 daemon 位于 反向代理、隧道之后,或使用的网络接口不是默认 localhost 地址时,需要设置它。

callback_base_url 始终由监听端口推导为 http://127.0.0.1:<port>,除非通过 HOLON_CALLBACK_BASE_URL 环境变量覆盖。这样即便 advertise_url 指向远程地址,同主机 webhook 回调仍可正常工作。

Decision 子系统

Decision 子系统在 Agent 面临高歧义选择时提供非权威的咨询性第二意见(advisory second opinion),并与主对话模型解耦:

另请参阅