Files
WHCandCursor f00aad9e3e feat: solo default, job completion reports, tools wave-1 (0.9.32)
Password Realm no longer auto-enables parliament (keeps task/worker tools);
finished jobs fan out to agent notes + TUI; raise PAR_MAX/grep caps and tag truncations.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-29 19:48:02 +08:00

4.2 KiB
Raw Permalink Blame History

Parliament(议会)快速上手

密码串派生 Realm → 登录夺主席 / 加入席位 → 常驻服务密封同步共享上下文。 主席是用户入口;成员席位在本机干活并用 parliament_note 通报进度。

一次性初始化

# 交互输入密码,或事先 export CST_REALM_PASSWORD=…
cst-agent --realm-password-init

磁盘只存 salt + 公钥,不存私钥。

日常:登录夺主席,或加入席位

export CST_INSTANCE_ID=laptop-a   # 可选;默认用本机 hostname
cst-agent --login --realm-label "thinkpad"
# 其他机器(同 salt/公钥 + 密码):
cst-agent --join --instance phone-b --realm-label "pixel"
# TUI: /realm login(夺主席)或 /realm join(不抢主席)

跨网段(如 Tailscale)多播发现不可用时,在 Realm 目录放 peers.json:

{"peers":[{"host":"100.64.0.13","port":9100,"iid":"labpc","name":"labpc"}]}

效果:

  1. 用密码解锁 Realm;--login / /realm login 使本机成为唯一主席
  2. --join / /realm join 只登记席位票:主席空缺时才夺椅,否则以 member 身份加入
  3. 写入本地登录票(24h;成员票在主席易主后仍有效,除非本席被剥夺主席)
  4. 拉起后台议会服务(发现 + 密封通道按 revision 同步 parliament.context; Unix 下 accept 独立线程,dial 失败会指数退避,避免饿死入站)

查看状态:

cst-agent          # TUI: /status 或 /realm
# /realm login|join|stop
cst-agent --service-stop

常驻服务(推荐)

登录后会 fork 后台席位进程;也可用 systemd --user 托管前台循环(崩溃自动拉起):

# 安装脚本附带的辅助命令
cst-agent-service install-unit
# 在 ~/.config/cst-agent/parliament.env 写入:
#   CST_REALM_PASSWORD=…
#   CST_INSTANCE_ID=my-laptop
systemctl --user enable --now cst-agent-parliament.service
cst-agent-service status

或手动前台:CST_REALM_PASSWORD=… cst-agent --service-fg。

单机默认(solo)

未设置 collaboration 时,即使存在密码 Realm,默认也是单机 solo:task / worker_* / runtime jobs 可用,不强制登录闸。密码 Realm 仅保管密钥,不再自动开议会。

要进入议会模式,任选其一:

  • CST_COLLABORATION=parliament 或 settings.json 里 "collaboration": "parliament"
  • 已有 open 状态的 parliament meta(例如刚 --login 过)

显式议会模式下打开 agent 才要求登录(TTY 下可当场输入密码)。强制恢复本机 worker: CST_COLLABORATION=legacy_workers。

议员协作协议

席位通过共享 parliament.context 协作(不是进程内 task/worker_*):

  1. 开工前阅读 Environment 里的 Shared parliament context
  2. 用本机工具完成分配切片
  3. 跨席相关的进度/议程/结果用工具 parliament_note 发布(kind=status|agenda|result|handover)
  4. 服务在写入后尽快 dial peers;回合内若 revision 变化,会注入 [cst] Parliament shared context updated

显式 "collaboration": "parliament"(或 env)时:

  • 硬禁用 task / worker_* / runtime 委托工具
  • 提供 parliament_note;提示词说明 chair / member 角色合同

换项目(清场)

cst-agent --new-project my-app

清空共享上下文、撤销主席与登录票,并停止本机服务。Realm 密钥保留。

传输安全

Peer 在 Realm 证书互鉴后做 临时 X25519 密钥交换,后续议会上下文同步走 XChaCha20-Poly1305(Monocypher,无需 OpenSSL)。握手前的发现/证书交换仍是明文元数据。

Docker 冒烟

bash scripts/docker_parliament_test.sh

Alpine 内构建,chair↔member 握手 + 密封通道同步(sealed=1 / peer_sync)。

相关标志

标志 作用
--realm-password-init 创建密码 Realm
--login 登录 + 夺主席 + 启服务
--join 加入席位(不抢主席)+ 启服务
--service / --service-fg 仅启服务
--service-stop 停服务
--new-project ID 清场换项目
--peer-port N 登录/服务用的 TCP 端口(默认 9100)
--instance ID 实例 id(也可用 CST_INSTANCE_ID;默认 hostname)