Communitygithub.com

yasyf/long-running

运行多通道驱动,避免任何协调器成为瓶颈。所有者的输入会话作为通信器;绑定为通道根的兄弟 Orca 会话作为协调器;常驻元通道处理每次技能、工具和流程变更,并将其转化为技能更新;每个问题都通过驱动工具 `lr` 的动词解决;落地、评分、通道活跃度、事故生成、发布跟踪和所有者更新作为进程运行,仅在需要决策时才接触协调器。在编排多通道工作、驱动 CI 或基础设施搭建、跨多个单元运行迁移或审计、监督后台代理或 PR 落地、跟踪超过十个开放 PR、通过来自多个通道的合并队列落地 PR,或处理明确超出单个上下文窗口的任务时使用。

long-running 是什么?

这个技能定义了 **long-running** 编排模式,用于管理那些超出单一 LLM 上下文窗口容量或需要并行处理多个独立工作项的复杂任务。其核心架构围绕三个常驻会话:所有者通过 `communicator`(通信器)直接互动,而一个兄弟 `coordinator`(协调器 Orca 会话)绑定为 `root` 通道,负责生成额外通道来处理请求,并作为决策聚合点。一个 `meta lane`(元通道)持续将技能、工具和流程变更整合到主技能描述中,`signal lane`(信号通道)则让通信器无需直接轮询协调器。该系统使用一个名为 `lr` 的 Go 二进制工具,通过定义明确的动词处理状态查询和操作,从而最小化对协调器的直接读取需求。它支持许多知名 AI 代理平台(如 Claude Code、Cursor 和 Codex)的编排模式,通过文件协议和特定钩子进行集成,提供安全防护(如合并批准、生产身份防护)并强制执行严格的工作流规则(如每项任务专属通道、禁止重新简报),目标是实现大规模、自动化、事件驱动的软件开发编排,同时确保安全性和任务隔离。

兼容平台✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/yasyf/cc-skills/tree/HEAD/plugins/long-running/skills/long-running

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

长期运行编排

协调器是一个串行决策点:它进行的每次读取和路由到它的每个决策都会在无时钟的队列中等待,当它饱和时工作会无声停止。此技能确保不会有任何事情到达这样的队列。

驱动的顶层是两个会话。 通信器 是所有者输入命令的会话;它的全部工作就是为所有者服务。 协调器 是一个兄弟 Orca 会话,绑定为 root 通道:它会在每个带有正文的请求到达时生成一个通道,决定哪些问题需要上报,并传递工作台产生的结果。它们旁边是 元通道,它处理每次技能、工具和流程变更,并把每个裁决转化为技能更新;以及 信号通道,它监听协调器的输出,这样通信器就不必亲自轮询。除此之外的一切都是驱动工具 lr 的一个动词,或者是一个无需它们中任何一个即可运行的进程。这里的规则指明了使失败不可能发生的动词或进程;没有这些的规则是需要在该驱动包中修复的缺陷。

此技能位于 ~/.claude/CLAUDE.md,负责管理扇出形状、模型路由和验证深度。该驱动包是一个 Go 二进制文件 lr,以及它所取代的 Python 脚本,这些脚本会保留到每个动词上线为止(设计)。

同时运行三个或更多通道、一个超出单个上下文窗口生存期的任务、等待 CI、队列、应用或验证,或者扫描多个独立单元,都属于一个驱动。单通道调查是一个处于直接模式的子代理,而不是一个驱动。

目录

读取你的职责文件

只读取你正在执行的任务对应的文件。每个文件都明确说明了其规则。

你的角色是读取的文件
回复所有者:回复、选择、重新设计、其 Slack 和看板communicator-brief.md
生成所有者更新或维护仪表盘owner-report-table.md, drive-dashboard.md
协调器coordinator-brief.md
元通道或其实现者meta-lane-brief.md
信号通道;杂项通道signal-lane-brief.md; chores-lane-brief.md
编写通道简报,或作为通道/工作台在其下工作orca-lane-brief.md
轮换通道上下文;交接或压缩handoff-subagent-brief.md, compaction.md
在 Mac 或 Sprite 上启动或转发 Orca 工作器orca-desk-brief.md, orca-workers.md, orca-sprite-workers.md
落地 PR,合并队列,D1 到 D23landing.md, merge-train-brief.md
评分头分支、落地或计划grading-principles.md, finder-brief.md, finder-desk-brief.md, finder-desk-rows.md, fidelity-desk-brief.md, fidelity-job-brief.md, semantic-collisions-brief.md
拥有一个无主的新红色告警red-sweep-brief.md
告警或事件active-alert-brief.md, alert-fix-brief.md, alerts-desk-brief.md, alert-evidence-brief.md, alert-comms-brief.md, unfixed-case-brief.md
发布release-lanes.md, manual-release-brief.md
发布到 Slackslack-lane-brief.md, comms-desk-brief.md
发布或读取 cci 记录、通道总线、B 规则bus-contracts.md
记录或应用所有者裁决、注册表、评审者owner-rulings.md
通道活跃度:为什么通道不能静默,监督者和监视器supervisor.md, watchers.md, drive-watchdog-brief.md
唯一的首要成果;让所有者对照交互界面工作priority-desk-brief.md; user-test-brief.md
启动子驱动sub-drives.md
将大型代码库读取到修复通道中the bulk-read skill
询问规则存在的原因;没有通道需要此信息来完成其工作lessons.md

判断优先

  • 没有规则禁止读取决策所依赖的那一行。
  • 手中的发现就是修复,而不是通道、重新审计或工作流。
  • 将所有者的每句话当作细心的同事来理解。修正指出的是对表述理解的缺陷,而不是对所有者先前裁决过的内容进行重新设计;行动前先阅读注册表中关于该主题的行。重复出现是对首次阅读的缺陷报告:修复它当时幸存下来的所有地方。

钩子和拒绝

  • 钩子用于警告。它们仅在信任事项上阻止:未经所有者批准合并,更改批准落地的人,未经其同意回滚,从通信器启动运行器或工作台,驱动其登录生产环境的浏览器的通道,编辑已安装的钩子文件和会话保护守卫。读取失败仅发出警告;tests/test_fail_open.py 强制执行此项并列出例外情况,Slack 权限钩子则采用默认放行方式(slack-lane-brief.md)。
  • 一个对你的工作误报的钩子,在它阻止你的那次轮次中,你会获得一个修复通道,并且你可以继续处理它不阻止的工作。一个正确的拒绝,例如生产身份守卫,则不会获得修复通道。被阻止的会话(无论是通道、工作台、协调器还是通信器)会启动修复通道,无需询问 root,也无需元通道:lr launch lane hook-fix-<hook> opus high <brief> --drive <drive> --lane <you>,除非 lr lanes hook-fix-<hook> 显示已有一个存活的修复通道。
  • 钩子位于 yasyf/cc-skills 仓库的 plugins/long-running/capt-hook/hooks/ 和 yasyf/captain-hook 仓库的 captain_hook/builtin_packs/ 中,每次变更都遵循 captain-hook:authoring-hooks,其 lint 和测试在该仓库的 CI 中运行。修复通道修复钩子的实际缺陷并附带回退测试,将其提交并安装到被阻止会话运行的位置,其验证证明是被拒绝的调用现在能通过了(orca-lane-brief.md)。
  • 修复不是绕过:在拒绝仍然有效时,没有人通过包装器、cc-sudo 或脚本运行被阻止的内容。所有者的安全规则保持不变:合并、Slack、负载测试和进程守卫。如果一个保护其中之一但误报的钩子,会修复其误报并附带回退测试,而规则本身只有在他的指示下才能更改。在其修复之前被禁用的唯一一个钩子,是会阻止通信器一切行动的钩子:在驱动包源代码中将其注释掉,附上引用其修复通道的 TODO,通过一个立即合并的 PR 提交,因为对已安装缓存的编辑只持续到下一次安装,而此 Mac 会在几分钟内运行下一次安装。
  • 一个不阻止任何内容但可以改进的钩子,会通过一条 cci post --kind note --to meta-desk 记录发送到元通道。任何其他工具的拒绝也在同一轮次发送到元通道,工作继续通过其手动路径进行。任何拒绝都不是借口或向所有者提出的问题,平台也不是:一个将等待或失败归咎于 Sprite、宿主机或共享工具的记录,必须指明修复其根本原因的通道及其截止时间,如果没有这样的通道,则在该轮次向协调器请求一个。替换机器是权宜之计,绝不是最终解决方案。

元变更落地到技能中

接收到全局适用的元变更的通道——任何关于通道、卡片、等待、回复、钩子、路由或答案如何工作的裁决,都会在其到达的轮次中将其作为一条 cci 记录发送到元通道。元通道始终将其转化为此技能的更新,或转化为它所属的简报模板、钩子或 cc-notes 文档的更新,合并并安装,重写和重构其触及的部分,使技能读起来像一个整体设计,绝不是一个追加的行。一个内存文件或记录只是一个指针,永远不会被视为完成。

每次工具调用前

如果调用是执行操作
动词能回答的事情运行该动词。
带有正文的工作用其任务和账本行生成通道。
等待将其折叠到执行动作的通道中。
状态查询通信器发送更新工作台的渲染结果;协调器不发送任何东西。
所有者的消息通信器为其生成一个子代理,它在消息来源的交互界面上进行回答;协调器将裁决应用到所有地方;关于驱动工作方式的裁决会在该轮次发送到元通道,元通道将其转化为技能更新。
监督者尚未响应的告警立即运行 lr incident run <slug>。
工具拒绝,或出了两次错的事情一个阻塞你工作的钩子会获得你此轮启动的修复通道(钩子和拒绝);其他任何问题都立即转到元通道,在那里修复是一个 Go 动词。无论如何都要继续。
批准、暂停、启动或取消所有者的命令承载它,或者由某个通道拥有它。

已完成的代理停止,生产操作已记录,没有什么是完成但尚未在线且已验证的。 一个通过此列表检查的调用,决定的是没有动词或通道能决定的事情。除此之外的一切都是通道。

询问动词,从不直接读取

要知道运行命令
一个通道是否存活,以及它最后说了什么lr lanes <lane> --config <lr.json>
每个通道、其状态、PR 和常驻职责lr lanes
自从上次查看以来发生了什么cci digest --drive <drive>,然后 cci tail --drive <drive> --cursor root
什么在等待所有者cci owner-waits --drive <drive>
哪些子驱动处于打开状态,以及每个子驱动还持有多少内容lr drive sub list
它必须指名的 PR 的状态ccx vcs pr status <n1> <n2> ...,批量处理
所有者批准了看板上的哪些 PR,以及其中哪些仍然打开lr approved [--since <seq>],排除回溯裁决
每个未解决的问题,以及已落地但未上线的功能lr asks
完整的所有者更新,合并来源信息lr update render,由通信器的 update-desk 运行
一个事件正在做什么;用一句话描述它是什么lr incident status <slug>; lr incident describe <slug>
一个通道的邮件在哪里;每个 lr 动词都接收一个主干名,例如 meta-desk,用于其最新的存活通道lr route <lane>

表中缺少的读取属于通道:PR、CI 日志、Slack 线程、长文件、云列表、构建页面。一个你正在批准的 diff、计划或裁决是你自己可以读取的。协调器生成一个读取器并最多取回五行;搜索通过一次调用 lr ask-lane '<question>' 完成。root_context 和 root_reads 钩子会警告这些类型的读取、为单个所有者请求打开的第二个源、以及通过 tail 或 grep 管道处理的通道记录;在通信器的窗口中,root_context 拒绝广泛的搜索并推荐使用 lr ask-lane。

规则

规则 ID 是稳定的;脚本、钩子和引用文档都会引用它们。root 指的是协调器,除非规则指明了通信器。

R1. 真相来自所属通道或动词,而不是 grep、列出、curl 或构建页面;最多返回五行。优先级 PR 的状态通过一次批量 ccx vcs pr status 调用来读取。

R2. 任何带有正文的内容都是一个通道:超过有限窗口的读取、日志、调查、PR 或合并机制、枚举。允许一次对单个命名文件的最多 150 行的有限读取。

R3. 每个等待-然后-执行链对应一个通道,并且没有通道是停驻的:一个通道等待一个 Monitor、Agent 通知、用于计时的 CronCreate 或一次 lr wait 调用,直到终止状态,并报告一次。shell_waits 阻止 shell 循环或休眠器。工作台的 Monitor 在到期时重新布防。

R4. 绝不重新简报一个通道,绝不回答重复问题。向已完成代理发送 SendMessage 会重新运行其简报。lr wait 将打印的邮件标记为已读。

R5. 记录它,不要记在脑子里:发现结果由发现它们的通道记录到 cc-notes 中;简报作为附件放在 briefs: <slug> 日志中;不要在 ~/.claude/scratch 下手动创建任何东西。

R6. 每个所有者的请求在其到达的轮次中都处于进行中状态,每个问题一个通道,绝不附加到繁忙通道的队列。一个通道每个交付物拥有一个 PR,并将其修复作为提交落地在该 PR 上;orca-lane-brief.md 说明了何时进行堆叠。

R7. PR 的状态在报告之前必须读取:使用 ccx vcs status 或获取主干上的压缩提交,绝不使用消息或记忆。

R8. 每个所有者的请求在到达的轮次中都是一个账本行,并且仅在 LIVE 状态下才算完成;在此之前,答案是“在 #N 中,尚未上线:<阻塞原因>”。

… (为翻译而截断)

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

yasyf/design-doc

Run an assumptions-first architecture design and ship it as an interactive design doc. Ground truths land in a register with stable IDs, every design fork goes through a question round with a recorded escape hatch, an adversarial review attacks the middle draft, and every estimate is gated on a named spike. The deliverable is a registers.json-driven single-file HTML doc that opens on a hand-written executive summary, cites every entry by a human-readable handle, carries declared interactive components, and answers questions in the page when an AI config is deployed beside it, plus a generated PDF, written as a humble proposal that explains and asks for feedback. Use when asked to "write a design doc", "architecture proposal", "help me design <system>", "redesign <system>", "assumptions-first design", or to turn a systems discussion into a reviewable design document.

yasyf/open-pr

Open a pull request that reads like the repo's own maintainers wrote it — pick a depth first, where an express lane for "just open the PR" or "just ship it" orients, writes, and ships without the research passes, and the full lane orients with `ccx vcs lane` and `ccx vcs guidelines`, learns the house style from a bot-filtered sample of recent human-authored merged PRs via a cached per-repo style card, calibrate register against a local wlm voice profile, run a politeness and standards-conformance pass with issue-first handling on repos the user does not own, write the title, body, and commit messages to the repo's own conventions, ship through `ccx vcs ship`, and hand the CI and bot-comment watch to a background pr-watcher agent. Use when opening, submitting, or contributing a pull request, drafting a PR title or body, contributing a change to an open-source repo, or shipping a branch as a PR.

yasyf/orca

Launch and supervise Orca workers through the canonical Sprite prepare-and-attach entrypoint, with an explicit local route for Opus roots and the rare Fable assignment for the most sensitive work, and reclaim what a settled Dispatch left behind. Use for worker dispatch, native Run messaging, remote diagnosis, ending a done lane, or source return.

相关技能