OpenClaw 的安全优先、本地优先控制中心。
语言: English | 中文
总览:系统状态、待处理事项、关键风险和运营摘要用量:用量、花费、订阅窗口和连接状态员工:谁真的在工作,谁只是排队待命任务:当前任务、审批、执行链和运行证据文档 与 记忆:按活跃 OpenClaw agent 范围展示的源文件工作台以下截图来自一个本地 OpenClaw 环境:
|
|
| Token 消耗归因 直接看定时任务 token 是被哪些任务吃掉的,占比一眼可见。 | 员工页 直接看谁在工作、谁待命、最近产出和排班状态。 |
npm install
cp .env.example .env
npm run build
npm test
npm run smoke:ui
UI_MODE=true npm run dev
然后打开:
http://127.0.0.1:4310/?section=overview&lang=zhhttp://127.0.0.1:4310/?section=overview&lang=enOpenClaw 现在整体正常吗?openclaw.json 里的活跃 agent,不会把已删除 agent 继续显示出来。control-center/ 目录内的文件READONLY_MODE=trueLOCAL_TOKEN_AUTH_REQUIRED=trueIMPORT_MUTATION_ENABLED=falseIMPORT_MUTATION_DRY_RUN=falseAPPROVAL_ACTIONS_ENABLED=falseAPPROVAL_ACTIONS_DRY_RUN=true~/.openclaw/openclaw.json你最好已经有:
node 和 npm如果你希望 用量 / 订阅 信息更完整,当前机器最好还能读到:
~/.openclaw~/.codexgit clone https://github.com/TianyiDataScience/openclaw-control-center.git
cd control-center
npm install
cp .env.example .env
如果你的 OpenClaw 说“仓库缺少 src/runtime”或“缺少核心源码”,先不要改代码。这个仓库的标准结构本来就包含:
package.jsonsrc/runtimesrc/ui.env.example这类报错通常意味着:
openclaw-control-center 仓库根目录最推荐的接入方式,不是你手动一项项配,而是直接把下面这段安装指令交给你自己的 OpenClaw。
如果你想直接复制独立文件,用这个:
它应该一次性帮你做完这些事:
.envbuild / test / smoke这段安装指令已经考虑了这些常见情况:
~/.openclaw、~/.codex、Gateway 地址、端口都不是默认值node / npm、没有 npm registry 网络、或者仓库目录没有写权限直接把下面整段原样交给 OpenClaw:
你现在要帮我把 OpenClaw Control Center 安装并接到这台机器自己的 OpenClaw 环境上。 你的目标不是解释原理,而是直接完成一次安全的首次接入。 严格约束: 1. 只允许在 control-center 仓库里工作。 2. 除非我明确要求,否则不要修改应用源码。 3. 不要修改 OpenClaw 自己的配置文件。 4. 不要开启 live import,不要开启 approval mutation。 5. 所有高风险写操作保持关闭。 6. 不要假设这台机器使用默认 agent 名称、默认路径、默认订阅方式,必须以实际探测结果为准。 7. 不要把“缺少订阅数据 / 缺少 Codex 数据 / 缺少账单快照”当成安装失败;只要 UI 能安全跑起来,就应当继续并明确哪些面板会降级。 8. 不要伪造、生成、改写任何 provider API key、token、cookie 或外部凭证;如果 OpenClaw 本身缺少这些前置条件,只能报告,不要替用户猜。 请按这个顺序执行: 第一阶段:确认环境 1. 检查 OpenClaw Gateway 是否可达,并确认正确的 `GATEWAY_URL`。 2. 确认这台机器上正确的 `OPENCLAW_HOME` 和 `CODEX_HOME`。 3. 如果订阅或账单快照文件不在默认位置,找到正确的 `OPENCLAW_SUBSCRIPTION_SNAPSHOT_PATH`。 4. 确认这台机器上有哪些前提是真正存在的,哪些是缺失但允许降级的。至少分别判断: - `node` - `npm` - 仓库目录写权限 - npm registry 网络连通性(如果本机还没安装依赖) - OpenClaw Gateway - `openclaw.json` - OpenClaw 会话 / 运行时数据 - `CODEX_HOME` - 订阅 / 账单快照 - OpenClaw 当前依赖的 provider / 凭证是否已经由 OpenClaw 自己配置妥当(只检查是否存在,不要打印 secret) 5. 如果机器上存在多个候选 `OPENCLAW_HOME`、多个可能的 Gateway,或多个 workspace,不要猜。优先选择“当前正在运行的 Gateway + 可读 `openclaw.json` + 与当前项目最匹配”的组合;如果仍然无法确定,就停止并把候选项列出来。 6. 如果缺少会导致“完全无法启动控制中心”的必要路径、进程或文件,例如 `node` / `npm` 缺失、npm 无法下载依赖、仓库不可写、OpenClaw 根目录不可读,不要猜,直接停止并明确告诉我缺什么。 7. 如果缺少的只是增强型数据源,例如订阅快照、Codex telemetry、部分运行时文件,或者机器根本不是用订阅而是 API key/provider 方式运行,不要停止安装;继续并把这些项标记为“安装可继续,但相关页面会部分缺失”。 8. 不要假设任何固定 agent 名称。若 `openclaw.json` 可读,就以它为准;若不可读,再回退到运行时可见 agent,并明确说明可信度下降。 第二阶段:安装项目 9. 确认当前目录是 control-center 仓库根目录。 10. 先确认仓库本体完整。至少检查这些路径真实存在: - `package.json` - `src/runtime` - `src/ui` - `.env.example` 11. 如果缺少 `src/runtime`、`src/ui` 或 `package.json`,不要继续安装,也不要猜源码去哪了。直接把它判定为“错误仓库 / 不完整 checkout / 错误工作目录”,并执行: - 退出当前错误目录 - 重新 clone:`https://github.com/TianyiDataScience/openclaw-control-center.git` - 进入新 clone 的仓库根目录后再继续 12. 运行依赖安装。 13. 如果 `.env` 不存在,就从 `.env.example` 创建;如果存在,就在保留安全默认值的前提下修正它。不要删除用户已有的无关安全配置,只改这次接线真正需要的项。 第三阶段:配置安全首次接入 14. 保持这些值: - READONLY_MODE=true - LOCAL_TOKEN_AUTH_REQUIRED=true - APPROVAL_ACTIONS_ENABLED=false - APPROVAL_ACTIONS_DRY_RUN=true - IMPORT_MUTATION_ENABLED=false - IMPORT_MUTATION_DRY_RUN=false - UI_MODE=false 15. 只有在本机环境确实不同的时候,才修改: - GATEWAY_URL - OPENCLAW_HOME - CODEX_HOME - OPENCLAW_SUBSCRIPTION_SNAPSHOT_PATH - UI_PORT 16. 如果这台机器是通过 provider API key / 自定义 LLM 提供商运行 OpenClaw,而不是通过 Codex / GPT 订阅运行,不要把这当成错误;只要 OpenClaw 自己能工作,就继续安装,并明确说明订阅额度与部分 provider-specific 卡片可能不可见。 17. 如果 `CODEX_HOME` 不存在,或者这台机器根本没有 Codex / GPT 订阅数据,不要强行填假路径;保留为空,并在结果里明确说明“Usage / Subscription 将部分可见或不可见”。 18. 如果订阅快照不存在,不要伪造 `OPENCLAW_SUBSCRIPTION_SNAPSHOT_PATH`;继续安装,并明确说明订阅额度相关卡片会显示未连接或估算状态。 19. 如果 `4310` 被占用,选择一个空闲本地端口并写入 `UI_PORT`,然后把新地址明确告诉我。 20. 不要因为我的 agent roster 和示例仓库不同就改应用逻辑;控制中心应该根据我机器自己的 OpenClaw 配置和运行时数据来显示 agent。 第四阶段:验证安装 21. 运行: - npm run build - npm test - npm run smoke:ui 22. 如果有任何一步失败,停止并告诉我: - 哪一步失败了 - 原因是什么 - 我下一步该怎么修 23. 如果 build / test / smoke 通过,但 live Gateway 仍不可达,也不要把这次接入判定为失败;要把结果归类为“本地 UI 已可用,但 live 观测尚未接通”。 24. 如果 OpenClaw 自己因为外部 provider 凭证缺失而无法产出实时数据,也不要误判为 control-center 安装失败;要单独归类为“控制中心已装好,但上游 OpenClaw 前置条件未满足”。 第五阶段:交付可启动结果 25. 如果验证通过,输出: - 你实际修改了哪些 env 值 - 最终 `.env` 中哪些值沿用了默认值 - 我下一步启动 UI 的准确命令 - 我应该先打开的 3 个页面 - 哪些信号如果为空,属于“正常但未接线完全” - 哪些能力现在已经可用 - 哪些能力因为当前机器没有相关数据源而处于降级状态 - 如果我以后补上订阅 / Codex / Gateway,只需要补哪几个 env 或前置条件 - 如果当前缺的是 provider API key / 外部凭证 / 上游 OpenClaw 进程,请把它们列为“控制中心外部前置条件” 最后请用这个格式给我结果: - 环境检查 - 差异与降级判断 - 实际修改 - 验证结果 - 下一步命令 - 首次打开页面
如果你不想让 OpenClaw 代劳,再手动配。
第一次接入建议保持安全默认值,不要急着打开写操作。
基线配置如下:
GATEWAY_URL=ws://127.0.0.1:18789 READONLY_MODE=true APPROVAL_ACTIONS_ENABLED=false APPROVAL_ACTIONS_DRY_RUN=true IMPORT_MUTATION_ENABLED=false IMPORT_MUTATION_DRY_RUN=false LOCAL_TOKEN_AUTH_REQUIRED=true UI_MODE=false UI_PORT=4310 # 只有路径不是默认值时才需要设置: # OPENCLAW_HOME=/path/to/.openclaw # CODEX_HOME=/path/to/.codex # OPENCLAW_SUBSCRIPTION_SNAPSHOT_PATH=/path/to/subscription.json
一般只需要在这些情况下修改:
GATEWAY_URL:你的 Gateway 不在默认本地地址OPENCLAW_HOME:OpenClaw 不在 ~/.openclawCODEX_HOME:Codex 数据不在 ~/.codexOPENCLAW_SUBSCRIPTION_SNAPSHOT_PATH:订阅或账单快照文件在自定义位置UI_PORT:4310 已被占用执行:
npm run build
npm test
npm run smoke:ui
预期结果:
http://127.0.0.1:<port>UI_MODE=true npm run dev
然后打开:
http://127.0.0.1:4310/?section=overview&lang=zhhttp://127.0.0.1:4310/?section=overview&lang=en如果你改了 UI_PORT,把 4310 替换成你的端口。
总览:页面能正常打开,并且能看到当前系统状态用量:能看到真实数字,或者明确的“数据源未连接”员工:实时工作状态与真实 active session 基本一致任务:当前工作、审批、执行链能正常加载,不会吐原始 payload文档 与 记忆:显示的 agent 标签和 openclaw.json 中的活跃 agent 一致GATEWAY_URL 错了,或者 OpenClaw Gateway 没启动文档 / 记忆 范围不对,通常是 OPENCLAW_HOME 指错了,或者 openclaw.json 不可读用量 / 订阅 没数据,通常是 CODEX_HOME 或 OPENCLAW_SUBSCRIPTION_SNAPSHOT_PATH 没配对npm run buildnpm run devnpm run dev:continuousnpm run dev:uinpm run smoke:uinpm run release:auditnpm run command:backup-exportnpm run command:import-validate -- runtime/exports/<file>.jsonnpm run command:acks-prunenpm testnpm run validate对于受保护的命令模式(如 command:backup-export、command:import-validate、command:acks-prune),如果 LOCAL_TOKEN_AUTH_REQUIRED=true,请先设置 LOCAL_API_TOKEN=<token>。
如果你是仓库维护者、准备公开发布,再看这部分;普通安装用户可以跳过。
npm run release:auditGET /snapshot:原始快照 JSONGET /projects:项目列表,支持 status、owner 等查询过滤GET /api/projects:/projects 的兼容别名POST /api/projects:创建项目(projectId、title,可选 status、owner)PATCH /api/projects/:projectId:更新项目标题、状态或 ownerGET /tasks:任务列表,支持 status、owner、project 过滤GET /api/tasks:/tasks 的兼容别名POST /api/tasks:按 schema 校验创建任务PATCH /api/tasks/:taskId/status:按 schema 校验更新任务状态GET /sessions:分页会话列表,支持 state、agentId、q、page、pageSize、historyLimitGET /sessions/:id:单会话 JSON 详情,支持 historyLimitGET /api/sessions/:id:单会话详情的 API 别名GET /session/:id:本地化会话详情页面,支持 lang=en|zhGET /api/commander/exceptions:仅异常视图的汇总GET /exceptions:按严重级别排序的异常流GET /done-checklist:最终集成检查清单与 readiness 评分GET /api/action-queue:基于异常流和 ack 状态生成的待处理队列GET /graph:项目-任务-会话关联图 JSONGET /usage-cost:跳转到 /?section=usage-costGET /api/usage-cost:用量、花费、订阅窗口、拆分和 burn-rate 快照POST /api/import/dry-run:导入包 dry-run 校验,不写状态POST /api/import/live:可选 live import,高风险、本地专用,默认关闭GET /cron:定时任务与健康状态GET /healthz:系统健康载荷GET /digest/latest:最新 digest 的 HTML 页面GET /api/search/tasks|projects|sessions|exceptions:安全子串搜索接口GET /api/replay/index:timeline、digest、export、bundle 的 replay/debug 索引GET /docs:本地化 docs 索引GET /docs/readme|runbook|architecture|progress:本地 markdown 文档视图POST /api/approvals/:approvalId/approve|reject:审批动作服务(受 gate 和 dry-run 控制)GET /audit:本地审计时间线页面GET /api/audit:审计时间线 JSON/api/search/*文档 和 记忆 现在优先跟随 ~/.openclaw/openclaw.json 中的活跃 agentMainMain · Cron 隔离执行工作中 / Working 只代表真实 live execution,不再把“还有 backlog”误判为正在工作正在处理什么 与 下一项 被明确区分总览 / 任务 / 设置 / 用量 共享同一套 usage/quota 真相源5h 和 Week用量 已放在 总览 下方,信息架构更贴近日常运营使用顺序openclaw.json 中已知 agent,而不只看当前活跃会话Content-Type: application/jsonx-local-token: <LOCAL_API_TOKEN>Authorization: Bearer <LOCAL_API_TOKEN>{"ok":false,"requestId":"...","error":{"code":"...","status":<http>,"message":"...","issues":[],"requestId":"..."}}requestId,所有响应头都会带 x-request-idPOST /api/import/live 默认关闭runtime/projects.jsonruntime/tasks.jsonruntime/budgets.jsonREADONLY_MODE=true 和 IMPORT_MUTATION_ENABLED=falseruntime/last-snapshot.jsonruntime/timeline.logruntime/projects.jsonruntime/tasks.jsonruntime/budgets.jsonruntime/notification-policy.jsonruntime/model-context-catalog.jsonruntime/ui-preferences.jsonruntime/acks.jsonruntime/approval-actions.logruntime/operation-audit.logruntime/digests/YYYY-MM-DD.jsonruntime/digests/YYYY-MM-DD.mdruntime/export-snapshots/*.jsonruntime/exports/*.jsondocs/ARCHITECTURE.mddocs/RUNBOOK.mddocs/PROGRESS.md