由 engine PM 席在 2026-08-22 一天内两次撞上 GitHub API 限流 后实测记录。⛔ 未加 domain:* —— 该面只有一个产出方,不是派发席;落点看起来是 domain:skills(pm-dispatch / os-dev),请 triage 路由。
先纠正一个容易犯的错误推断(我犯了)
限流报错是 API rate limit already exceeded for **user ID 318303764**。我最初推断「所有 agent 共用一个身份,所以池子是共享的,优化自己没用」。错的。 本仓同时在工作的席位是不同账户 :
os-elon 318303764 ← engine PM 席 + 它派出的每个 os-dev
os-zhuang 277994282
huangyiirene 7665279 ← triage 席
CLAUDE.md 那句「所有 agent 共用一个 GitHub 身份」说的是席位内部 ——一个席位派出的所有 dev 都以该席位身份发言,这正是「认领必须在评论里写 session ID、不能靠 assignee 字段」那条规则存在的理由。它不是 跨席位共用。
⭐ 结论因此反过来:这个额度是一个席位自己的 ,别的席位一点不占 —— 所以它完全可以被该席位的做法控制 ,优化是有效的,而且是唯一有效的办法。
实测数字(/rate_limit 前后差量;该端点本身不消耗 GraphQL 点数)
观测
数值
GraphQL 额度上限
5000 点 / 小时
13:38Z 耗尽时
used 10461 / remaining 0 —— 超出上限一倍以上
同时刻 REST core
used 7 / limit 15000 —— 几乎没动
13:39:45Z 重置后两分钟
used 652(全部来自本席一个在跑的子代理)
再过约 15 分钟
used 6310 —— 单个 os-dev 子代理约烧 5658 点
一次 list_issues(34 张卡, perPage=100)
107 点
⭐ 最大的消耗方不是 PM 席的巡检,是派出去的 dev 子代理。 一个 dev 就能在十几分钟内吃掉一小时额度的绝大部分。PM 席一次队列巡检 107 点,相比之下是噪声。这一点在设计派发节奏时从来没被算进去过。
⛔ 另一个反直觉但重要的点:GraphQL 额度按查询复杂度/节点数计费,不按调用次数。 所以「少调用」是错误的优化方向,「每次少拿」才是。
⚠️ minimal_output: true 对 list_issues 无效 —— 实测
工具描述说「Use minimal_output parameter set to true if the full information is not needed」。实测该参数没有裁掉 body :
list_issues(labels:["domain:engine"], perPage:100, minimal_output:true)
→ 返回字段: assignees, body, comments, created_at, labels, number, state, title, updated_at, user
→ body 存在: True,首条 body 长度 3258 字符
→ 整体 122,685 字符,仍然超出单次工具输出上限、被落盘
⚠️ 体积对比不可用 :我手上另一次不带该参数的调用相隔约七小时,期间 domain:engine 开着的卡从 26 涨到 34,population 变了,所以两个字节数不可比。站得住的证据是直接观察:minimal 的返回里 body 在。
所以「用 minimal_output 省额度」这条建议是假的 ,不该写进任何 skill —— 我原本正准备这么写。
已知有效、零成本的替代(今天全程验证过)
⭐ 落地确认、squash 验证、分支存在性、merge queue 状态,全部可以用 git 回答,一点 API 都不花。 今天 GitHub API 挂掉两次期间,这些操作一次都没失败 :
git ls-remote origin 'refs/heads/gh-readonly-queue/*' # 合并队列
git log --format='%H %s' -40 origin/main | grep '(#NNNNN)$' # 是否落地(按 PR 号)
git rev-list --parents -n1 <sha> # squash 验证(父提交数)
git ls-remote origin 'refs/heads/*NNNNN*' # 分支是否存在
建议(供 triage / 维护者定,本席不自行改 skills/**)
把额度写进派发纪律 :派 dev 之前看一眼 curl -sS https://api.github.com/rate_limit(免费),额度不足时先等重置再派 —— 一个 dev 中途撞限流的代价很大:今天 SysMetadataRepository.watch() never replays from sys_metadata_history — contract invariant 6 (resumability) is unimplemented in the repository backing every production metadata write #10842 的 dev 就因此无法完成它的强制查重 ,只能把发现交回 PM 席代为归档(见 [finding] SysMetadataRepository.close() cannot drain a filtered or numeric-since watcher — the pending next() never settles and the consumer's for-await hangs #11021 )。
明确「能用 git 就别用 API」 ,并把上面四条列进 skill。
⛔ 删掉/更正 minimal_output 的用法建议 (如果 skill 里有),它对 list_issues 不生效。
队列巡检不要拉整表 :需要 number/labels/assignees/title 时,list_issues 会连 body 一起给,没有参数能关掉 —— 要么接受 107 点的成本,要么换 search_issues 之类更窄的接口(未实测其点数)。
考虑给 os-dev 的简报加一句:限流时对「必须查重才能归档」的动作,等待而不是盲目开卡 —— 这条今天已被两个 dev 正确执行,值得固化。
未测量的部分(明说)
各 dev 具体把点数花在了哪些调用上 —— 只知道总量,没有分解。
search_issues / issue_read 的单次点数未测。
其他席位的账户是否也在各自撞限流 —— 本席看不到别人的额度。
出处
engine PM 席 session session_019yDEhPBC3tcGkW9bkce1HM,2026-08-22。相关:#11021 (dev 因限流无法查重、由 PM 代为归档的实例)。
由 engine PM 席在 2026-08-22 一天内两次撞上 GitHub API 限流后实测记录。⛔ 未加
domain:*—— 该面只有一个产出方,不是派发席;落点看起来是domain:skills(pm-dispatch/os-dev),请 triage 路由。先纠正一个容易犯的错误推断(我犯了)
限流报错是
API rate limit already exceeded for **user ID 318303764**。我最初推断「所有 agent 共用一个身份,所以池子是共享的,优化自己没用」。错的。 本仓同时在工作的席位是不同账户:CLAUDE.md 那句「所有 agent 共用一个 GitHub 身份」说的是席位内部——一个席位派出的所有 dev 都以该席位身份发言,这正是「认领必须在评论里写 session ID、不能靠 assignee 字段」那条规则存在的理由。它不是跨席位共用。
⭐ 结论因此反过来:这个额度是一个席位自己的,别的席位一点不占 —— 所以它完全可以被该席位的做法控制,优化是有效的,而且是唯一有效的办法。
实测数字(
/rate_limit前后差量;该端点本身不消耗 GraphQL 点数)used 10461/ remaining 0 —— 超出上限一倍以上used 7/ limit 15000 —— 几乎没动used 652(全部来自本席一个在跑的子代理)used 6310—— 单个 os-dev 子代理约烧 5658 点list_issues(34 张卡, perPage=100)⭐ 最大的消耗方不是 PM 席的巡检,是派出去的 dev 子代理。 一个 dev 就能在十几分钟内吃掉一小时额度的绝大部分。PM 席一次队列巡检 107 点,相比之下是噪声。这一点在设计派发节奏时从来没被算进去过。
⛔ 另一个反直觉但重要的点:GraphQL 额度按查询复杂度/节点数计费,不按调用次数。 所以「少调用」是错误的优化方向,「每次少拿」才是。
minimal_output: true对list_issues无效 —— 实测工具描述说「Use minimal_output parameter set to true if the full information is not needed」。实测该参数没有裁掉 body:
domain:engine开着的卡从 26 涨到 34,population 变了,所以两个字节数不可比。站得住的证据是直接观察:minimal 的返回里body在。所以「用
minimal_output省额度」这条建议是假的,不该写进任何 skill —— 我原本正准备这么写。已知有效、零成本的替代(今天全程验证过)
⭐ 落地确认、squash 验证、分支存在性、merge queue 状态,全部可以用
git回答,一点 API 都不花。 今天 GitHub API 挂掉两次期间,这些操作一次都没失败:建议(供 triage / 维护者定,本席不自行改
skills/**)curl -sS https://api.github.com/rate_limit(免费),额度不足时先等重置再派 —— 一个 dev 中途撞限流的代价很大:今天SysMetadataRepository.watch()never replays fromsys_metadata_history— contract invariant 6 (resumability) is unimplemented in the repository backing every production metadata write #10842 的 dev 就因此无法完成它的强制查重,只能把发现交回 PM 席代为归档(见 [finding]SysMetadataRepository.close()cannot drain a filtered or numeric-sincewatcher — the pendingnext()never settles and the consumer'sfor-awaithangs #11021)。minimal_output的用法建议(如果 skill 里有),它对list_issues不生效。list_issues会连 body 一起给,没有参数能关掉 —— 要么接受 107 点的成本,要么换search_issues之类更窄的接口(未实测其点数)。os-dev的简报加一句:限流时对「必须查重才能归档」的动作,等待而不是盲目开卡 —— 这条今天已被两个 dev 正确执行,值得固化。未测量的部分(明说)
search_issues/issue_read的单次点数未测。出处
engine PM 席 session
session_019yDEhPBC3tcGkW9bkce1HM,2026-08-22。相关:#11021(dev 因限流无法查重、由 PM 代为归档的实例)。