【免费下载链接】OpenShell
OpenShell is the safe, private runtime for autonomous AI agents.
导读
本文讲解 OpenShell 仓库内置的贡献者技能triage-issue(位于 .agents/skills/triage-issue/SKILL.md):它是一套面向 Agent 的社区 Issue 评估与分流工作流,负责把用户提交的 issue 转化为“事实充分、等待人工处置”的state:validated状态,同时严格把路线图(roadmap)排期、接受与否等决策留给维护者。读完本文,你将掌握该技能的调用方式、七个核心步骤、十一类分类标准、state:*状态机与agent:*委托标签的完整语义,并了解它与create-spike、build-from-issue等下游技能如何串联成端到端管道。
背景:OpenShell 的 agent-first 协作模型
OpenShell 是一个为自主 AI Agent 提供安全、私有运行时的开源项目。其贡献流程同样贯彻“agent-first”理念:Agent 负责调查、验证、规划与实现,人类负责产品决策与路线图。CONTRIBUTING.md 开篇即声明“OpenShell is built agent-first”,并围绕这一理念把贡献工作拆分为“技术评估、产品处置、路线图排期、代理委托”四个互不混淆的层次。
在 AGENTS.md 中,项目把技能划分为两套:
skills/:面向用户的公共、可安装技能(如 openshell-cli、debug-inference、debug-openshell-cluster),必须在源码检出之外也能工作,以已安装 CLI 帮助与已发布文档为准。.agents/skills/:面向贡献者与维护者的内部工作流,triage-issue即属于此集合,由仓库感知的 Agent 运行时原生加载。
triage-issue 的定位:只建立事实,不做产品决策
triage-issue的核心使命非常明确:为人类决策者建立“OpenShell 是否应该处理该 issue、以及它属于路线图的哪个位置”所需的事实。技能文档反复强调三件事它不做:
- 不授权工作、不排期、不产出实现计划(那是
build-from-issue的职责); - 不决定技术上有效的工作是否该投入;
- 不把“技术有效性”当作“产品接受”。
换言之,分流(triage)是评估层(assessment layer),它只回答“报告是否真实、证据是否充分、影响有多大”,然后停下,等待人类给出是/否与排期结论。
前置条件
运行该技能前需要确认:
ghCLI 已认证(gh auth status);- 当前位于带有 GitHub remote 的 git 仓库中;
- 工作流标签
state:validated、state:accepted、state:needs-info必须已存在。若缺失,应向操作者报告,不得隐式创建。
关键约束:处置与路线图排期只能由人完成
技能文档专门设置了“Critical: Disposition and Roadmap Placement Are Human-Only”一节。执行分流时,Agent 必须遵守以下红线:
- 不得决定 OpenShell 是否应在其他有效工作上投入;
- 不得应用或移除
state:accepted; - 不得把 issue 加入路线图项目、不得应用或移除
roadmap标签,也不得推荐具体路线图条目; - 不得应用
agent:plan-requested或agent:implementation-requested; - 不得把技术有效性等同于产品接受。
OpenShell没有priority:*优先级标签。排期完全来自 issue 与 OpenShell 路线图条目的关联,而这种关联是维护者的专属决策。CONTRIBUTING.md 的“Issue Lifecycle, Roadmap, and Agent Work”一节用一张决策表总结了分工:
| 决策 | 问题 | 记录方式 |
|---|---|---|
| 评估(Assessment) | 报告技术上是否有效、证据是否足以行动? | state:* |
| 处置(Disposition) | OpenShell 是否应推进这项工作? | state:accepted、路线图放置,或以 not planned 关闭 |
| 排期(Sequencing) | 已接受的工作相对其他工作的位置? | 关联 OpenShell Roadmap 项目 |
| 归属(Ownership) | 由人实现、用户直接指示 Agent,还是维护者排队给无人值守 Agent? | 直接指示或可选的agent:*工作流 |
state:validated表示“事实评估已完成、等待人类处置”,不等于项目已接受该工作。维护者用state:accepted或路线图放置来发出接受信号;路线图放置额外携带排期信息,但不指派所有者。
状态机与 agent 委托标签
CONTRIBUTING.md 定义了四个生命周期状态:
| 状态 | 含义 | 通常的下一步 |
|---|---|---|
state:triage-needed | 尚未评估。无仓库写权限的用户提交的新 issue 自动获得此标签 | 调查报告并记录结果 |
state:needs-info | 评估需要特定证据或复现细节 | 报告者或其他贡献者补充所请求的信息 |
state:validated | 事实评估已完成 | 维护者接受、拒绝或要求更多证据 |
state:accepted | 维护者决定 OpenShell 应推进该 issue | 人类可实现,或维护者委托给 Agent |
state:stale只是非活跃标记,不是生命周期决策:已接受、待人工处置的 issue 豁免于 stale 处理,而state:needs-info若无新证据则可能变 stale。
agent:*标签用于维护者把工作排队给持续运行的无人值守 Agent:
| Agent 工作流标签 | 由谁应用 | 含义 |
|---|---|---|
agent:plan-requested | 维护者 | 请 Agent 产出实现计划 |
agent:plan-ready | Agent | 计划已就绪,等待人类评审 |
agent:implementation-requested | 维护者 | 计划已批准,Agent 可实现 |
agent:in-progress | Agent | 已授权的实现正在进行 |
agent:pr-opened | Agent | 实现产出了拉取请求 |
标准的委托链路是state:accepted(或路线图放置)→agent:plan-requested→agent:plan-ready→agent:implementation-requested→agent:in-progress→agent:pr-opened。规划授权不等于实现授权:agent:plan-requested只授权取走规划,agent:implementation-requested才确认人类已评审计划并授权实现。Agent 永远不得应用这两个请求标签。
一个重要的例外:用户直接指示 Agent 处理某个具体 issue 时,该指示本身即授权所请求的阶段,即使 issue 缺少预期的生命周期或工作流标签。此时 Agent 应警告缺失的标签,然后继续工作,但不得擅自修改这些标签。
评论标记:区分 Agent 与人类评论
该技能发布的所有评论必须以以下标记行开头:
> **📋 triage-agent**该标记用于把分流评论与人类评论以及其他技能(如🏗️ build-from-issue-agent、🔒 security-review-agent等)区分开,也用于 Step 2 的“是否已分流”检测。
调用模式
该技能支持两种调用模式。
单 issue 模式
triage issue 250 triage issue #250给定 issue 编号,直接进入 Step 1 开始评估。
批量模式
triage issues批量模式在处理前必须经过确认门禁,防止对公共仓库造成意外的大规模评论。
Step 1:预览。查询所有匹配的 issue 并显示摘要:
gh issue list --label "state:triage-needed" --state open --json number,title --jq '.[] | "#\(.number) \(.title)"'把结果呈现给用户(最多展示 10 条,超出显示 “and N more”),并提示“这将在每个 issue 上发布分流评论”。
Step 2:确认。使用AskUserQuestion向用户索要明确确认,选项为 “Proceed with all N issues”、“Let me pick specific issues”,并允许自定义输入。未获确认不得继续。
Step 3:处理。仅在确认后,对每个 issue 运行完整的七步工作流,最后报告每一条 issue 及其分类的摘要。
七步分流工作流
Step 1:获取 Issue
去掉 issue 编号前导的#,然后获取完整内容:
gh issue view <id> --json title,body,state,labels,author,comments若该 issue 已关闭,直接报告并停止。
Step 2:检查是否已分流
在 issue 评论中搜索分流标记> **📋 triage-agent**:
- 若找到标记且其后没有携带新信息或新问题的人类评论:报告“该 issue 已被分流”并停止。
- 若找到标记但有更新的、包含额外信息的人类评论:进入 Step 3,基于新上下文重新评估。
- 若人类已拒绝该 issue、应用了
state:accepted或已将其放入路线图:不得撤销或重新解释该决策。 - 若未找到标记:进入 Step 3。
Step 3:检查报告完整性
检查是否包含实质性的 User Story、Problem Statement、Impact / Why This Matters 与 Acceptance Criteria。Impact 应解释当前行为的后果以及现有 workaround 为何不足。Bug 报告还需复现步骤与相关环境;功能请求需检查 Proposed Design 与 Alternatives Considered。报告者提供的诊断与 Agent 输出是可选项,不得作为准入门禁。
- 若所需章节缺失关键信息:归类为
needs-information,只请求缺失的确切信息,移除state:triage-needed并添加state:needs-info。 - 若公共 issue 可能披露安全漏洞:不得复述或展开敏感细节,归类为
security-report,引导操作者阅读 SECURITY.md。 - 使用类问题与支持请求:转介到文档化的支持渠道。
- 明确的重复、错误仓库报告与客观上的预期行为:无需完整技术调查即可处理。
报告需要技术验证时,进入 Step 4。
Step 4:核对报告版本与已知修复
在深入诊断前,先判断报告是否可能已被较新版本修复:
- 从 issue 正文、环境章节、日志与评论中提取报告的 OpenShell 版本;若未提供,记录为缺失上下文并继续。
- 在可用时核对当前发布信息与已知修复:
gh release list --limit 10gh release view <tag>- 关联 issue、已合并 PR、发布说明、本地 git 标签/历史,以及开放与关闭状态的潜在重复
- 若网络访问或发布元数据不可用:在分流评论中说明该限制,而不是猜测。
若 issue 针对旧版本、而较新版本或已合并 PR 看起来解决了相同行为:
- 若报告者已在修复/当前版本上复现:继续 Step 5。
- 若报告者尚未在修复/当前版本上测试:在采用
fixed-in-release前必须找到具体的修复变更;若因果联系不确定,请请求重测,而不是宣告已修复。
Step 5:诊断与验证
通过 Task 工具调用principal-engineer-reviewer子代理评估报告,向其提供:
- 完整 issue 标题与正文;
- 以怀疑视角评估的指令,包含 10 个问题:
- 用户故事确立了怎样的人物画像与期望能力?
- 问题陈述是否与当前产品行为一致?
- Impact 是否解释了后果、当前 workaround 及其为何不足?
- 验收标准是否具体、可观察、与用户故事一致?
- 描述的工作流能否从给定信息复现或以其他方式验证?
- 当前产品是否支持所请求的结果,哪个组件拥有该行为?
- 该报告最适合归类为 bug、功能请求、支持请求还是其他类别?
- 若是功能请求,提议的设计在技术上是否自洽且可行?(不要决定项目是否应接受它)
- 是否存在开放或已关闭的重复 issue?
- 仍有怎样的不确定性,哪些确切证据可以消除它?
基于子代理的分析,还要直接尝试验证报告:
- Bug 报告:检查相关代码路径,寻找所述失败模式;
- 功能请求:对照现有架构评估可行性;
- 网关部署或基础设施问题:参考 skills/debug-openshell-cluster/SKILL.md 中的已知失败模式;
- 推理与 provider 拓扑问题:参考 skills/debug-inference/SKILL.md;
- CLI/使用问题:参考 skills/openshell-cli/SKILL.md 中的工作流,并用
openshell --help确认已安装语法。
最后,为人类决策记录影响信号:受影响用户与范围、回归状态、workaround 可用性、严重性证据、证据质量。不要把这些事实转换为路线图或排期建议。
Step 6:分类
根据调查结果,把 issue 归入以下十一类之一:
| 分类 | 含义 | Agent 动作 |
|---|---|---|
| validated-bug | 证据确认真实缺陷 | 添加相关 area/topic 标签;把 triage/needs-info 状态替换为state:validated;保持 open |
| validated-feature | 提议在技术上自洽且可行 | 添加相关 area/topic 标签;把 triage/needs-info 状态替换为state:validated;保持 open |
| needs-investigation | 报告可信但需要更深层的 spike | 可用时添加spike;把 triage/needs-info 状态替换为state:validated;保持 open,等待人类决定是否投入 spike |
| needs-information | 关键的复现或环境证据缺失 | 把state:triage-needed替换为state:needs-info;请求确切缺失的证据 |
| cannot-reproduce | 忠实尝试未复现,但报告可能仍然有效 | 把state:triage-needed替换为state:needs-info;记录尝试过程并请求可区分的证据 |
| fixed-in-release | 某个已发布的具体变更修复了所述行为 | 解释修复与版本;仅在因果联系清晰时关闭,否则请求重测 |
| duplicate | 另一个开放或已关闭的 issue 是规范报告 | 链接规范 issue 并关闭 |
| expected-behavior | 代码与文档确立了该行为是有意为之 | 解释行为并关闭 |
| support-request | 报告请求的是使用帮助而非跟踪工作 | 提供支持渠道并关闭 |
| wrong-repository | 另一个仓库拥有受影响的组件 | 链接正确的跟踪仓库并关闭 |
| security-report | 报告可能包含漏洞 | 避免进一步公开分析,引导操作者阅读SECURITY.md以安全处理 |
两个明确的禁止项:不得用validated-feature暗示路线图接受;不得用expected-behavior拒绝技术上有效的功能请求。
Step 7:发布分流评论
发布带有分流标记的结构化评论:
> **📋 triage-agent** > > ## Triage Assessment > > **Classification:** <validated-bug | validated-feature | needs-investigation> > > ### Summary > <What was established and confidence in the evidence.> > > ### Investigation > <Reproduction results, code/release evidence, affected components, and duplicates.> > > ### Impact Signals > - **Affected users/scope:** <facts or unknown> > - **Regression:** <yes/no/unknown> > - **Workaround:** <available/unavailable/unknown> > - **Evidence quality:** <high/medium/low with reason> > > ### Human Decision Required > Decide whether OpenShell should address this issue. If yes, apply > `state:accepted`, associate it with a roadmap item, or do both, and decide > whether the work remains human-owned. Either action records acceptance; > roadmap placement additionally records sequencing. > To queue investigation or planning for an unattended agent, also apply > `agent:plan-requested`. You can instead directly ask an agent to use > `create-spike` or `build-from-issue` on this issue; the agent will warn about > missing expected workflow labels and continue without changing them. If no, > close it as not planned and record the rationale.对其他结果(如needs-information、fixed-in-release、duplicate等),把影响与决策部分替换为确切的信息请求、客观的解决方案或安全转介指引。
分流期间的状态规则
- 在
state:triage-needed、state:needs-info、state:validated中恰好保持一个入站/分流状态; - 每次评估完成后移除
state:triage-needed; - 分流期间永不应用
state:accepted、任何agent:*标签或roadmap标签; - 永不关闭已通过验证的 issue。
与其他技能的关系:端到端管道
triage-issue是社区贡献管道的第一环。技能文档给出了完整的关系图:
Community issue filed | [GitHub Action: instant gate check] | triage-issue | state:validated | human decline OR state:accepted / roadmap placement | create-spike (if deeper investigation is approved) | human queues planning with agent:plan-requested OR directly requests planning | build-from-issue (creates implementation plan) | human queues implementation with agent:implementation-requested OR directly requests implementation | implementation各技能的分工是:
- triage-issue建立技术有效性与影响证据;
- 人类决定是否接受有效工作以及它落在路线图的什么位置;
- create-spike(见 .agents/skills/create-spike/SKILL.md)只有在投入调查获得批准后深化调查,把模糊问题映射为结构化、可构建的 issue,并在证据充分时标记
state:validated、否则标记state:needs-info——它同样永不添加state:accepted、agent:*或roadmap标签; - build-from-issue可在特定 issue 上被直接调用;无人值守 Agent 用
agent:plan-requested取走规划、用agent:implementation-requested取走实现。
AGENTS.md 还列出了项目内的其他工作流链,与分流管道形成对照:内部开发链为create-spike→ 人工处置 →build-from-issue;安全链为review-security-issue→fix-security-issue(通用构建 Agent 不得处理topic:security的 issue,安全 issue 按 SECURITY.md 走私有流程);策略迭代链为openshell-cli→generate-sandbox-policy。
从源码结构看该工作流的可执行性
从仓库结构可以确认,triage-issue引用的全部支撑材料在仓库中真实存在并保持同步:
- 状态机与决策分工的权威定义位于 CONTRIBUTING.md 的 “Issue Lifecycle, Roadmap, and Agent Work” 章节,其中“谁执行哪项动作”的对照表与技能文档的红线完全一致;
- AGENTS.md 作为注入给 Agent 的指令表面,把
triage-issue明确列为 “Community inflow” 管道的起点,并规定“issue triage 只确立技术有效性与影响证据,Agent 永不决定接受、应用state:accepted、把 issue 放上路线图或应用agent:*请求标签”; - 技能引用的三个公共诊断技能——openshell-cli、debug-inference、debug-openshell-cluster——均位于
skills/目录,供 Step 5 按问题类型(CLI、推理/provider 拓扑、网关部署)分流参考; - 下游的
create-spike技能与本技能共用同一套状态语义与标签红线,保证管道各环对state:*与agent:*的理解一致。
这套设计把“谁调查、谁验证、谁接受、谁排期、谁实现”彻底解耦:分流 Agent 是事实调查者,维护者是人类决策者,agent:*标签与直接用户指令是委托通道。任何一环都不能越权替代另一环。
小结:为什么这套分流机制值得借鉴
triage-issue的价值在于用机制而不是信任来约束 Agent:评论标记保证可审计、批量模式用确认门禁保护公共仓库、state:*状态机让所有贡献者对 issue 所处阶段一目了然、agent:*标签为无人值守 Agent 提供安全的队列拾取语义,而“技术有效 ≠ 产品接受”的红线保证了机器判断永远无法替人类拍板路线图。对 OpenShell 社区而言,这意味着每个新 issue 都能以一致、可追溯、证据充分的方式进入评估流程;对构建类似 agent-first 协作流程的团队而言,这套“评估层/处置层/排期层/委托层”分离的模型本身就是一份可复制的设计范本。
【免费下载链接】OpenShell
OpenShell is the safe, private runtime for autonomous AI agents.
相关推荐
Phoenix Issue Triage 技能实战:七阶段开源 Issue 分流工作流全解析
Phoenix Issue Triage 技能实战:七阶段开源 Issue 分流工作流全解析 开源仓库的 Issue 积压是每个活跃项目都要面对的难题——类型不
可观测性AI 评测LLMOpsAI 应用人工智能Kubernetes Issue Triage 实战指南:社区 Issue 分流流程、优先级体系与工具链
Kubernetes Issue Triage 实战指南:社区 Issue 分流流程、优先级体系与工具链 本文基于 Kubernetes 社区仓库的官方文档 c
开源治理文档研发协作sentry-javascript 仓库的 AI Issue 分流(Triage)实战指南:triage-issue Skill 工作流与安全机制全解析
sentry javascript 仓库的 AI Issue 分流(Triage)实战指南:triage issue Skill 工作流与安全机制全解析 导读
可观测性
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考