cokecoder wiki

信任域

记录 chapter.trust-domain raw

一句话

同一台机器上的所有 agent 属于同一个信任域,可以读彼此的文件和凭据。 独立工作目录和不同的 agent 身份都不构成安全隔离。

实测(2026-11-07)

whoami = 本人 uid。以下全部可读:

  • ~/Workspace/personal
  • ~/.ssh
  • ~/.pi/agent/auth.json
  • 所有 agent 的 MEMORY.md(含私人助手那份)

权限位:~/ 750(staff 组可穿行,无 ACL 挡住),agents 目录 700(同账号下形同虚设)。

推论

  • "这个 agent 只认我"在人机数据上是零保护,能读的和别人一字不差。
  • 给 agent 起不同名字、分不同目录,改变的是工作习惯,不是边界。

所以

约束只能落在"取用前自检"这种软层,或者真的去拆账号和机器。前者是纪律,后者是边界。

凭据

记录 chapter.credentials raw

文档和凭据不是一类

文档可以靠"别去读"扛一阵。凭据不行:一个能读到 token 的进程,风险不在它读不读,而在一旦读了无法追溯——token 可以离机、可以等待、可以事后用。

现状(2026-11-08 实测)

同一个账号身份存在两份独立副本,refresh 各自独立:agent 侧的 auth 文件和 CLI 侧的 auth 文件。两份 JWT 指向同一个账号,跑着十个 CLI 进程。

后果:只撤销其中一份等于没撤,另一份照样续命。

凭据类型的差别

  • OAuth 登录态:同一个身份、同一份额度、同一份归因。出事分不出是谁。
  • API key / 独立子账号:能归因,能单独撤销。

所以换的不只是"不共享",是可归因和可撤回这两件事。别把"换 key"本身当目的。

轮换顺序

  1. 停 daemon(进程只在启动时读一次凭据文件,运行中改文件对已跑的进程无效)
  2. provider 侧撤销该账号下全部会话
  3. 换本地凭据,两份都清
  4. 重启
  5. 验证:旧 refresh 必须 invalid_grant、旧 access 必须 401。验前先清本地缓存,否则缓存会掩盖失效

残余窗口

撤销 refresh 不回收已签发的 access,后者活到 exp。实测 access 的 exp - iat 是整整十天。这段窗口按已泄露处置,不是已关闭。

断言要留档

一次全绿只等于那一次通过。要对两份副本、两类 token 各自都打一次失败调用,附时间和命令记下来。任一项缺失,结论只能写"部分验证"。

缺口

记录 chapter.gaps raw

按根因排,最后一条是根。

1. 没有按提问者授权

agent 按它主人的身份取数据,不按提问的人取。同事问它,借的是主人的权限。

2. 上下文不分层

高权限查询的结果会沉淀进共享记忆,之后被低权限的人问出来。检索时查一次权限覆盖不了这个。

3. 没有出口校验

回答前不判断接收频道/私聊的成员范围。

4. 权限与执行环境不绑定(根)

现在要限制"agent 能读到什么",只能去拆账号、拆机器、拆云凭据——而这件事发生在平台之外,全靠人手做。

平台能提供的锁只有"你在不在某个 Server"这一把。它解决"谁能找到这个 agent",解决不了"这个 agent 能读到什么"。

现实含义

能做到,但要人拆成一堆 Server × 一堆环境,成本随层级数和人数一起涨,而且没有任何机制保证不漏拆。