配置
配置
这一页介绍 OpenVaala 把配置放在哪里、config.yaml 里每个字段的作用,以及怎么检查和应用你的修改。
不手写任何配置也能运行 OpenVaala:终端界面或 Web 界面的首次引导会帮你添加模型 Provider。想修改默认值、添加 Executor 或扩展,或者在多台机器上运行 OpenVaala 时,再往下看。
配置目录
默认所有配置都在 ~/.config/openvaala/:
~/.config/openvaala/
├── config.yaml 应用设置(本页)
├── agents/ 每个 Agent 一个 <name>.yaml → agents.md
├── models/ 每个 Provider 一个 <provider-id>.yaml → models.md
├── executors/ 每个额外 Executor 一个 <id>.yaml → executors.md
├── mcp_servers/ 每个 MCP server 一个 <id>.yaml → extensions.md
├── hooks/ 任意多个 hook 文件 *.yaml → extensions.md
├── skills/ <name>/SKILL.md → extensions.md
└── plugins/ 每个插件一个目录 → extensions.md这些目录都遵守几条规则:
- 只读取定义目录下直接放着的
.yaml文件。.yml文件和子目录会被忽略(skills/和plugins/例外,它们本来就按目录组织)。 - 文件按严格模式解析。不认识的字段、类型不对或 YAML 写错,都会报错并指出是哪个文件。
- 不存在的目录当作空目录。
- Agent、Provider、Executor 和 MCP server 文件里的
name或id必须和文件名一致。
要用别的配置文件,在任何命令上加 --config-file,或者设置 OPENVAALA_CONFIG:
openvaala --config-file ~/work/openvaala/config.yamlconfig.yaml 里的相对目录以 config.yaml 所在目录为基准,开头的 ~ 表示你的主目录。默认位置没有 config.yaml 没关系(用内置默认值);你明确指定的文件必须存在。
OpenVaala 还会在配置目录以外的几个地方写文件:
| 路径 | 内容 |
|---|---|
~/.local/share/openvaala/ | 对话和它们的索引。见对话。 |
~/.local/state/openvaala/runtime-server.yaml | 本机 Runtime 服务的地址和 token,本机客户端读它来连接。 |
~/.local/state/openvaala/openvaala.log | 默认的日志文件。见遥测。 |
用户缓存目录下的 openvaala/models-dev.json(Linux 是 ~/.cache,macOS 是 ~/Library/Caches) | 添加 Provider 时用的模型目录。 |
每个 Executor 所在机器上的 ~/.cache/openvaala/hooks/、~/.cache/openvaala/plugins/ | 拷过去运行的 hook 脚本和插件文件。见 Hook。 |
完整的 config.yaml
所有字段都可以不写。下面的例子列出每个字段和它的默认值,注释另有说明的除外:
agents:
directory: agents # Agent 定义
models:
directory: models # 模型 Provider 定义
default_model: "" # provider_id/model_id,例如 openai/gpt-5;为空时取按 Provider id、模型 id 排序后的第一个模型
defaults: # 模型没写某个字段时继承的值(见 models.md)
context_window: 256000
max_output_tokens: 32000
thinking: true
reasoning_efforts: []
default_reasoning_effort: ""
merge_message_roles: []
capabilities:
input: [] # 为空表示 [text]
skills:
directory: skills # 你的私有 skill
executors:
directory: executors # 额外的 Executor(ssh、virtual、更多本机目录)
mcp_servers:
directory: mcp_servers
hooks:
directory: hooks
plugins:
directory: plugins
disabled: [] # 完全不加载的插件名
tools:
max_image_kb: 500 # read_file 交给模型的单张图片上限,单位 KB;更大的图片会被压缩
run:
agent_name: default # 终端界面、编辑器和 Codex 用的根 Agent
server:
listen: 127.0.0.1:8790 # `openvaala serve` 的地址
token: "" # 为空时沿用 runtime-server.yaml 里的 token,没有就生成一个
workspace_directory: "" # 为空时用 serve 的启动目录
client:
url: "" # 为空时用本机 Runtime 服务,需要时自动启动
token: ""
path_mappings: [] # 例如 [{client: /Users/me/code, server: /srv/code}]
telemetry:
log_level: info
log_file: "" # 为空时是 ~/.local/state/openvaala/openvaala.log
otlp_endpoint: "" # 例如 http://127.0.0.1:4318;为空时不导出
otlp_headers: {}
capture_content: true字段说明
定义目录
agents.directory、models.directory、skills.directory、executors.directory、mcp_servers.directory、hooks.directory 和 plugins.directory 指向上面介绍的那些目录,都不能为空。--agents-dir 和 --models-dir 可以为单个命令覆盖前两个。
models
default_model:没指定模型的 Agent 用的模型,写成provider_id/model_id,必须在模型目录里存在。为空时,OpenVaala 按 Provider id、再按模型 id 排序,取第一个模型。终端界面(/provider)、Web 界面和桌面端的模型服务设置都可以帮你设置它。defaults:模型没写某个字段时继承的值。各字段见模型。context_window和max_output_tokens必须是正数。
plugins
disabled:完全不加载的插件名,它们的 skill、hook 和 MCP server 都不会加载。写了不存在的名字会被忽略。openvaala plugin disable和enable会帮你改这个列表。
tools
max_image_kb:read_file交给模型的单张图片上限,单位 KB。更大的图片会缩小到这个大小以内。必须大于 0。调大时要保持在 Provider 的单张图片上限以内:比如 Claude 会拒绝 base64 编码后超过约 5 MB 的图片,所以这个值要远小于 3700。
run
agent_name:从终端界面、编辑器(ACP)和 Codex 开始的对话用的根 Agent。--agent可以为单个命令覆盖它。Web 界面和桌面端开始对话时总是用defaultAgent。
server
这些设置属于 openvaala serve,也就是 Runtime 服务。
listen:监听的host:port。默认只接受本机连接。用0.0.0.0:8790可以接受网络里其他机器的连接;改之前先看 Web 界面。token:客户端必须出示的访问 token,以明文保存。为空时,serve 沿用~/.local/state/openvaala/runtime-server.yaml里的 token,第一次启动时随机生成一个。客户端通过Authorization: Bearer <token>请求头或?token=查询参数发送它。本机客户端会从那个文件读取,所以只有想要固定 token 时才需要设置。workspace_directory:新对话没指定工作目录时,localExecutor 用的目录。必须是绝对路径,或者以~/开头。为空时,serve 用它的启动目录。由客户端自动拉起的 Runtime 服务,启动目录是你的主目录。
client
这些设置告诉客户端命令(终端界面、web、acp、app-server 和 codex)连哪个 Runtime 服务。桌面端总是用本机的 Runtime 服务。
url:服务的 WebSocket 地址,例如ws://10.0.0.5:8790/api/v1/openvaala。为空时,客户端连接本机的 Runtime 服务,没在运行就启动它。--url可以为单个命令覆盖它。token:url对应的 token。如果url里带了?token=查询参数,以它为准。两者都为空、url又指向本机 Runtime 服务时,客户端自动用本机的 token。client.token从不读取server.token,两者是故意分开的。path_mappings:在客户端机器和服务器之间转换目录。这样你在笔记本上从/Users/me/code/app打开的对话,会在服务器的/srv/code/app里运行:yamlclient: path_mappings: - client: /Users/me/code server: /srv/code - client: 'C:\Users\me\code' # Windows 客户端:盘符开头的路径,\ 和 / 等价 server: /mnt/c/Users/me/code映射按完整的目录名匹配,多条都匹配时取前缀最长的一条。两边都必须是绝对路径,
server必须是 Unix 路径,同一个client或server目录不能出现两次。盘符写法的映射只对 Windows 客户端生效。编辑器(ACP)和 Codex 客户端在两个方向上转换路径;终端界面只转换它的启动目录。路径映射只能在配置文件里设置。
ws:// 是明文传输。跨机器用 client.url 时,只在可信网络里用,或者把服务放到 HTTPS 反向代理后面,改用 wss://。写在 URL 里的 token 可能留在 shell 历史和代理日志里。
telemetry
log_level、log_file、otlp_endpoint、otlp_headers 和 capture_content 控制日志、trace 和指标。见遥测。
环境变量
所有标量设置都可以用环境变量覆盖,变量名是 OPENVAALA_ 加上大写的字段路径,点换成下划线:
OPENVAALA_SERVER_LISTEN=0.0.0.0:8790 openvaala serve
OPENVAALA_CLIENT_URL=ws://10.0.0.5:8790/api/v1/openvaala openvaala
OPENVAALA_MODELS_DEFAULT_MODEL=openai/gpt-5 openvaala设置按这个顺序生效,后面的覆盖前面的:内置默认值、config.yaml、环境变量、命令行参数(--agents-dir、--models-dir、--agent)。映射和对象列表(telemetry.otlp_headers 和 client.path_mappings)只能在配置文件里设置。
OPENVAALA_CONFIG 用来指定配置文件本身;设置了就不能为空。
检查配置
有三个命令帮你处理配置,都不会连接模型 Provider。
openvaala config init # 缺少时创建 config.yaml 和 agents/、models/、plugins/ 目录
openvaala config show # 打印实际生效的设置,包括默认值和展开后的路径
openvaala config check # 加载所有定义,检查选中的 Agentconfig init 从不覆盖已有文件,它会打印 config.yaml 的路径。config show 会原样打印 token 和 OTLP 请求头,贴出它的输出时要小心。
config check 加载模型、Executor、MCP server、hook、插件和 Agent,校验它们之间的每个引用,然后打印选中的 Agent 和模型:
configuration valid: agent=default provider=openai model=gpt-5它不读取 skill 文件;skills/ 目录里格式错误的 skill,要到 Runtime 服务启动或重新加载时才会报出来。
让改动生效
Runtime 服务在启动时读取配置。改完文件后,让它重新加载:
openvaala serve reload也可以在终端界面用 /reload,或者在 Web 界面点 设置 → 重新加载配置。通过终端界面或 Web 界面的模型服务设置、以及 openvaala plugin 做的修改,会自动重新加载。
重新加载会替换 Agent、模型、Executor、MCP server、hook、skill、插件和 server.workspace_directory。已打开且空闲的对话立即换用新定义,之后打开的对话也用新定义。有 Turn 或后台命令在运行的对话继续用旧定义;命令会列出这些对话,等它们结束后再重新加载一次即可。新配置有错误时,重新加载会失败,服务继续用旧配置;启动时遇到同样的错误,Runtime 服务就启动不了。
有些设置只在启动时读取。要修改 server.listen、server.token、tools.max_image_kb 或 telemetry 下的任何设置,先停掉服务,再让它重新启动:
openvaala serve stop客户端设置(client.* 和 run.agent_name)在每次启动客户端命令时读取。