## 机制
spawn + detached + unref() 解释:
```javascript
const child = spawn('claude', [...], {
detached: true, // ① 子进程独立于父进程
stdio: ['ignore', 'pipe', 'pipe']
});
child.unref(); // ② 允许父进程退出
```
| 术语 | 含义 | 类比 |
| :------------- | :----------------------------------------- | :----------------------- |
| spawn | 启动一个子进程 | 派一个员工去做事 |
| detached: true | 子进程不依赖父进程,父进程死了子进程也能活 | 员工独立工作,不用等老板盯着 |
| unref() | 父进程不等子进程完成就可以退出 | 老板交代完任务就走,不等员工做完 |
为什么这样设计:
Hook 有 timeout 限制(15秒)
↓
如果同步等 Agent 完成,可能超时
↓
所以用 detached + unref(),让 Hook 立即返回
↓
Agent 在后台继续处理,完成后打印日志
⏺ 从日志来看,hook 实际上成功执行了。log 文件显示 PMO Agent 已正确运行并分析了 session(判断为例行扫描,跳过上报)。
"Hook cancelled" 这个错误信息应该是 Claude Code 框架的误报。可能原因:
1. 输出格式问题:hook 输出的 JSON 格式 {"result": "spawned", ...} 可能不被 Claude Code 识别为"成功"
2. detached 进程问题:spawn 进程后立即 unref(),Claude Code 可能认为 hook 没有完成
---
现在继续 git 操作。pac 目录还不是 git 仓库,需要先初始化。
```
设计一个 Linear Issue 的 Description 模板,包含 worktree 和代码改动信息:
sessionId: {session_id}
## 一、代码分支
| 属性 | 值 |
| :------ | :--------------- |
| Project | {project_name} |
| Worktree | `{worktree_path}` |
| Branch | `{branch_name}` |
| Base | `main` |
## 二、改动概要
{一句话描述本次改动的目标}
### 涉及文件
- `src/components/Login.tsx` - 新增登录组件
- `src/api/auth.ts` - 添加认证接口
- `package.json` - 新增依赖 @supabase/auth-ui
### 改动统计
3 files changed, 156 insertions(+), 12 deletions(-)
## 三、技术决策
{记录关键的技术选型或设计决策,便于后续 review}
## 四、相关链接
- Worktree: `file://{worktree_path}`
- GitHub Compare: {compare_url}
- 相关 Issue: {related_issues}
要我把这个模板写入配置文件,并更新 api-linear.md 的 Issue 创建规范吗?
```
![CleanShot 2026-02-02 at
[email protected]|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fmedia%2Fmedia_aHeYucuVqY%2F2026%2F02%2F02%2F18-01-37-8265228c3faa21dea2604084587c3ef2-CleanShot%202026-02-02%20at%2018.01.23-2x-f31139.png)
数据流:
agent_sessions (raw)
│ first_prompt + tools_used
▼
Haiku LLM ──────────────────┐
│ 分析语义 + 工具使用 │
▼ │
cc_tasks (structured) │
├── 任务名称、分类 │
├── 产出描述 │
├── MCP/Skill/Subagent 使用 │
└── 关联 session_id ────────┘