Appearance
配置(第一层:能跑 + 能联调)
Synclax 的配置分两层:
- 应用层配置:
app.yaml+ 环境变量MYAPP_...(影响 Anclax 服务与 Synclax 集成) - Symphony 工作流:
WORKFLOW.md(影响 orchestrator 的 tracker/codex/workspace/polling 等行为)
这页只讲“第一层需要的部分”,目标是让你在本地或开发环境里稳定跑起来并能联调 UI。
A. 应用层配置:app.yaml 与 MYAPP_...
Synclax 使用 Anclax 的配置加载逻辑:
- 如果当前工作目录存在
app.yaml,会读取它(YAML) - 所有
MYAPP_开头的环境变量会覆盖app.yaml的同名配置
映射规则:环境变量使用
_表示层级(会被转成嵌套 key)。 例如MYAPP_ANCLAX_PORT=2910会映射为anclax.port: 2910。
1) 最小可用:API Server + DB
在开发环境里最核心的是 anclax 配置(端口 + PG DSN)。
app.yaml 示例:
yaml
anclax:
port: 2910
pg:
dsn: postgres://postgres:postgres@localhost:5432/synclax环境变量示例(推荐用于本地/CI):
bash
export MYAPP_ANCLAX_PORT=2910
export MYAPP_ANCLAX_PG_DSN='postgres://postgres:postgres@localhost:5432/synclax'TIP
docker-compose.yaml 已经为容器内设置了 MYAPP_ANCLAX_PORT 与 MYAPP_ANCLAX_PG_DSN,你通常不需要再手动设置。
2) Synclax 集成:让 API Server 能控制 Symphony
Synclax 在应用层增加了 symphony 配置块,支持配置多个 workflow:
yaml
symphony:
workflow_paths:
- ./WORKFLOW.md
# 或单个:
# workflow_path: ./WORKFLOW.md
# http_port: 8089 # 可选:开启 Symphony debug server(仅 127.0.0.1)等价环境变量:
bash
export MYAPP_SYMPHONY_HTTP_PORT=8089字段含义:
workflow_paths: Symphony 加载的WORKFLOW.md路径列表(支持多 workflow 并发)workflow_path:单个 workflow 的简写,与workflow_paths: [./WORKFLOW.md]等价http_port:Symphony debug HTTP server 端口(可选)
WARNING
Web UI 不建议依赖 debug server。UI 应该通过主 API Server 的 /api/v1/symphony/snapshot 获取状态。
3) SSH 安全配置
Symphony 通过 SSH 在宿主机上运行 Codex。不要把整个 ~/.ssh 挂进容器,过盅导致所有私钥暴露。
请使用专用密钥 + 命令限制:
bash
# 1. 生成专用密钥
ssh-keygen -t ed25519 -f ~/.ssh/synclax_codex -C "synclax-codex" -N ""
# 2. 把公钥加到 authorized_keys,限制只能执行 codex app-server
echo 'command="codex app-server",no-port-forwarding,no-X11-forwarding,no-agent-forwarding' \
$(cat ~/.ssh/synclax_codex.pub) >> ~/.ssh/authorized_keys
# 3. 验证(必须不提示密码)
ssh -i ~/.ssh/synclax_codex -o BatchMode=yes localhost echo ok然后将 Compose 文件里的 ${HOME}/.ssh:/root/.ssh:ro 改为:
yaml
volumes:
- ${HOME}/.ssh/synclax_codex:/root/.ssh/id_ed25519:ro
- ${HOME}/.ssh/synclax_codex.pub:/root/.ssh/id_ed25519.pub:ro即使容器被攻击者控制,也只能运行 codex app-server,无法获得完整 shell。
B. Symphony 工作流:WORKFLOW.md
WORKFLOW.md 是 Symphony 的“真配置”,文件结构为:
md
---
# YAML front matter(配置)
---
Prompt template(Liquid)你可以先使用仓库自带模板:
bash
cp WORKFLOW.md.example WORKFLOW.md最小可用字段(跑起来必须有)
要让 Symphony 真正能派发任务(从 Linear 拉 issue 并运行 agent),你至少需要:
tracker.project_slugtracker.api_key(推荐写$LINEAR_API_KEY)codex.command(默认是codex app-server,不填也会有默认值,但你要确保运行环境里存在该命令)
并设置:
bash
export LINEAR_API_KEY='你的 Linear API Key'TIP
更完整的字段解释与模板绑定变量见:/reference/workflow(后续我们也会把它完全中文化扩写)。
C. 覆盖策略:UI/联调时怎么切换 Workflow 与端口
主 API Server 暴露了:
POST /api/v1/symphony/start
它允许你在启动时传 JSON 覆盖:
workflow_pathhttp_port
示例:
bash
curl -sS -X POST http://localhost:2910/api/v1/symphony/start \
-H "Content-Type: application/json" \
-d '{"workflow_path":"./WORKFLOW.md","http_port":8089}'重要语义:
http_port: -1:强制关闭 Symphony debug server(即使WORKFLOW.md设置了server.port)- 如果 Symphony 已经在运行,再传“不同的”
workflow_path或http_port,当前实现会返回409 Conflict(避免运行中热切换造成歧义)