name: issue-discover description: 统一的问题发现和创建。从GitHub或文本创建问题,通过多角度分析发现问题,或提示驱动的迭代探索。触发于 “issue:new”, “issue:discover”, “issue:discover-by-prompt”, “create issue”, “discover issues”, “find issues”。 allowed-tools: spawn_agent, wait, send_input, close_agent, AskUserQuestion, Read, Write, Edit, Bash, Glob, Grep, mcp__ace-tool__search_context, mcp__exa__search
问题发现
统一的问题发现和创建技能,涵盖三个入口点:手动问题创建、基于视角的发现和提示驱动的探索。
架构概述
┌─────────────────────────────────────────────────────────────────┐
│ 问题发现协调器 (SKILL.md) │
│ → 动作选择 → 路由到阶段 → 执行 → 总结 │
└───────────────┬─────────────────────────────────────────────────┘
│
├─ ASK_USER: 选择动作
│
┌───────────┼───────────┬───────────┐
↓ ↓ ↓ │
┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ 阶段 1 │ │ 阶段 2 │ │ 阶段 3 │ │
│ 创建新 │ │ 发现 │ │ 通过提示│ │
│ 问题 │ │ 多视角 │ │ 发现 │ │
└─────────┘ └─────────┘ └─────────┘ │
↓ ↓ ↓ │
问题 发现结果 发现结果 │
(已注册) (导出) (导出) │
│ │ │ │
│ ├───────────┤ │
│ ↓ │
│ ┌───────────┐ │
│ │ 阶段 4 │ │
│ │快速计划 & │ │
│ │执行 │ │
│ └─────┬─────┘ │
│ ↓ │
│ .task/*.json │
│ ↓ │
│ 直接执行 │
│ │ │
└───────────┴──────────────────────┘
↓ (后备/剩余)
问题解决 (计划/队列)
↓
/issue:execute
关键设计原则
- 动作驱动路由: ASK_USER 选择动作,然后加载单个阶段
- 渐进式阶段加载: 仅读取选定阶段的文档
- CLI优先数据访问: 所有问题CRUD通过
ccw issueCLI命令 - 自动模式支持:
-y标志跳过动作选择并自动检测 - 子代理生命周期: 明确的生命周期管理,使用 spawn_agent → wait → close_agent
- 角色路径加载: 子代理角色通过路径引用在 MANDATORY FIRST STEPS 中加载
自动模式
当 --yes 或 -y:跳过动作选择,自动从输入类型检测动作。
用法
issue-discover <input>
issue-discover [FLAGS] "<input>"
# 标志
-y, --yes 跳过所有确认(自动模式)
--action <type> 预选动作:new|discover|discover-by-prompt
# 阶段特定标志
--priority <1-5> 问题优先级(新问题模式)
--perspectives <list> 逗号分隔的视角(发现模式)
--external 启用Exa研究(发现模式)
--scope <pattern> 文件范围(发现/发现-通过-提示模式)
--depth <level> standard|deep(发现-通过-提示模式)
--max-iterations <n> 最大探索迭代次数(发现-通过-提示模式)
# 示例
issue-discover https://github.com/org/repo/issues/42 # 从GitHub创建
issue-discover "登录失败,特殊字符问题" # 从文本创建
issue-discover --action discover src/auth/** # 多视角发现
issue-discover --action discover src/api/** --perspectives=security,bug # 聚焦发现
issue-discover --action discover-by-prompt "检查API合约" # 提示驱动发现
issue-discover -y "认证错误" # 自动模式创建
执行流
输入解析:
└─ 解析标志(--action, -y, --perspectives等)和位置参数
动作选择:
├─ 提供了--action标志 → 直接路由
├─ 从输入自动检测:
│ ├─ GitHub URL或#数字 → 创建新问题(阶段1)
│ ├─ 路径模式(src/**, *.ts) → 发现(阶段2)
│ ├─ 短文本(< 80字符) → 创建新问题(阶段1)
│ └─ 长描述文本(≥ 80字符) → 通过提示发现(阶段3)
└─ 否则 → ASK_USER 选择动作
阶段执行(加载一个阶段):
├─ 阶段1: 创建新问题 → phases/01-issue-new.md
├─ 阶段2: 发现 → phases/02-discover.md
└─ 阶段3: 通过提示发现 → phases/03-discover-by-prompt.md
后阶段:
└─ 总结 + 下一步建议
阶段参考文档
| 阶段 | 文档 | 加载时机 | 目的 |
|---|---|---|---|
| 阶段1 | phases/01-issue-new.md | 动作 = 创建新问题 | 从GitHub URL或文本描述创建问题 |
| 阶段2 | phases/02-discover.md | 动作 = 发现 | 多视角问题发现(bug, 安全, 测试等) |
| 阶段3 | phases/03-discover-by-prompt.md | 动作 = 通过提示发现 | 提示驱动的迭代探索,使用Gemini规划 |
| 阶段4 | phases/04-quick-execute.md | 后阶段 = 快速计划与执行 | 将高置信度发现转换为任务并直接执行 |
核心规则
- 动作选择优先: 总是在加载任何阶段前确定动作
- 单一阶段加载: 仅读取选定阶段的文档,永不加载所有阶段
- CLI数据访问: 使用
ccw issueCLI处理所有问题操作,绝不直接读取文件 - 内容保留: 每个阶段包含原始命令的完整执行逻辑
- 自动检测输入: 智能输入解析减少显式–action标志需求
- ⚠️ 关键: 不要停止: 持续多阶段工作流。完成每个阶段后,立即进行下一阶段
- 渐进式阶段加载: 仅当阶段即将执行时读取阶段文档
- 明确生命周期: 在wait完成后总是close_agent以释放资源
输入处理
自动检测逻辑
function detectAction(input, flags) {
// 1. 显式--action标志
if (flags.action) return flags.action;
const trimmed = input.trim();
// 2. GitHub URL → new
if (trimmed.match(/github\.com\/[\w-]+\/[\w-]+\/issues\/\d+/) || trimmed.match(/^#\d+$/)) {
return 'new';
}
// 3. 路径模式(包含 **, /, 或 --perspectives) → discover
if (trimmed.match(/\*\*/) || trimmed.match(/^src\//) || flags.perspectives) {
return 'discover';
}
// 4. 短文本(< 80字符,无特殊模式) → new
if (trimmed.length > 0 && trimmed.length < 80 && !trimmed.includes('--')) {
return 'new';
}
// 5. 长描述文本 → discover-by-prompt
if (trimmed.length >= 80) {
return 'discover-by-prompt';
}
// 无法自动检测 → 询问用户
return null;
}
动作选择 (ASK_USER)
// 当动作无法自动检测时
const answer = ASK_USER([{
id: "action",
type: "select",
prompt: "您想做什么?",
options: [
{
label: "创建新问题(推荐)",
description: "从GitHub URL、文本描述或结构化输入创建问题"
},
{
label: "发现问题",
description: "多视角发现:bug、安全、测试、质量、性能等"
},
{
label: "通过提示发现",
description: "描述要查找的内容 — Gemini 规划迭代探索策略"
}
]
}]); // 阻塞(等待用户响应)
// 基于选择路由
const actionMap = {
"创建新问题": "new",
"发现问题": "discover",
"通过提示发现": "discover-by-prompt"
};
数据流
用户输入(URL / 文本 / 路径模式 / 描述性提示)
↓
[解析标志 + 自动检测动作]
↓
[动作选择] ← ASK_USER(如果需要)
↓
[读取选定阶段文档]
↓
[执行阶段逻辑]
↓
[总结 + 下一步]
├─ 创建后 → 建议 issue-resolve(规划解决方案)
└─ 发现后 → 建议导出到问题,然后 issue-resolve
子代理API参考
spawn_agent
创建具有任务分配的新子代理。
const agentId = spawn_agent({
message: `
## 任务分配
### 强制第一步(代理执行)
1. **读取角色定义**: ~/.codex/agents/{agent-type}.md(必须先读)
2. 读取: {projectRoot}/.workflow/project-tech.json
3. 读取: {projectRoot}/.workflow/project-guidelines.json
## 任务上下文
${taskContext}
## 可交付物
${deliverables}
`
})
wait
从子代理获取结果(唯一检索结果方式)。
const result = wait({
ids: [agentId],
timeout_ms: 600000 // 10分钟
})
if (result.timed_out) {
// 处理超时 - 可以继续等待或 send_input 提示完成
}
// 检查完成状态
if (result.status[agentId].completed) {
const output = result.status[agentId].completed;
}
send_input
与活动子代理持续交互(用于澄清或跟进)。
send_input({
id: agentId,
message: `
## 澄清回答
${answers}
## 下一步
继续计划生成。
`
})
close_agent
清理子代理资源(不可逆)。
close_agent({ id: agentId })
核心指南
数据访问原则: 问题文件可能变得非常大。为避免上下文溢出:
| 操作 | 正确方法 | 错误方法 |
|---|---|---|
| 列出问题(简要) | ccw issue list --status pending --brief |
Read('issues.jsonl') |
| 读取问题详情 | ccw issue status <id> --json |
Read('issues.jsonl') |
| 创建问题 | echo '...' | ccw issue create |
直接文件写入 |
| 更新状态 | ccw issue update <id> --status ... |
直接文件编辑 |
总是使用CLI命令进行CRUD操作。绝不直接读取整个 issues.jsonl。
错误处理
| 错误 | 解决方案 |
|---|---|
| 未检测到动作 | 显示ASK_USER并提供所有3个选项 |
| 无效动作类型 | 显示可用动作,重新提示 |
| 阶段执行失败 | 报告错误,建议手动干预 |
| 无匹配文件(发现) | 检查目标模式,验证路径存在 |
| Gemini规划失败(发现-通过-提示) | 使用qwen后备重试 |
| 代理生命周期错误 | 确保在错误路径中 close_agent 以防止资源泄漏 |
后阶段下一步
成功执行阶段后,推荐下一步动作:
// 创建新问题后(问题已创建)
ASK_USER([{
id: "next_after_create",
type: "select",
prompt: "问题已创建。下一步做什么?",
options: [
{ label: "规划解决方案", description: "通过 issue-resolve 生成解决方案" },
{ label: "创建另一个", description: "创建更多问题" },
{ label: "查看问题", description: "审查所有问题" },
{ label: "完成", description: "退出工作流" }
]
}]); // 阻塞(等待用户响应)
// 发现/通过提示发现后(发现已生成)
ASK_USER([{
id: "next_after_discover",
type: "select",
prompt: `发现完成:${findings.length} 个发现,${executableFindings.length} 个可执行。下一步做什么?`,
options: [
{ label: "快速计划与执行(推荐)", description: `直接修复 ${executableFindings.length} 个高置信度发现` },
{ label: "导出到问题", description: "将发现转换为问题" },
{ label: "规划解决方案", description: "通过 issue-resolve 为导出问题规划解决方案" },
{ label: "完成", description: "退出工作流" }
]
}]); // 阻塞(等待用户响应)
// 如果选择“快速计划与执行” → 读取 phases/04-quick-execute.md,执行
相关技能与命令
issue-resolve- 规划解决方案,转换工件,形成队列,从头脑风暴issue-manage- 交互式问题CRUD操作/issue:execute- 使用DAG基于并行协调执行队列ccw issue list- 列出所有问题ccw issue status <id>- 查看问题详情