@wwkit/harness 1.0.8 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/extract.md +2 -14
- package/agents/lint.md +367 -0
- package/agents/pyit.md +361 -0
- package/agents/pyut.md +347 -0
- package/agents/query.md +2 -14
- package/agents/revise.md +2 -14
- package/agents/work.md +151 -0
- package/commands/git-sync.md +218 -0
- package/commands/net-port.md +364 -0
- package/commands/pyit.md +6 -0
- package/commands/pyut.md +6 -0
- package/commands/resume.md +104 -0
- package/package.json +2 -2
- package/skills/better-skill/SKILL.md +124 -0
- package/skills/blame-skill/SKILL.md +201 -0
- package/skills/lint-ai-fix/SKILL.md +141 -0
- package/skills/lint-config-setup/SKILL.md +106 -0
- package/skills/lint-config-setup/references/languages/js.md +110 -0
- package/skills/lint-config-setup/references/languages/py.md +89 -0
- package/skills/lint-env-ensure/SKILL.md +92 -0
- package/skills/lint-env-ensure/references/config.md +65 -0
- package/skills/lint-language-detect/SKILL.md +79 -0
- package/skills/lint-language-detect/references/detect-language.js +65 -0
- package/skills/lint-rules-analyze/SKILL.md +129 -0
- package/skills/lint-suitability-check/SKILL.md +84 -0
- package/skills/lint-tool-fix/SKILL.md +94 -0
- package/skills/new-skill/SKILL.md +227 -0
- package/skills/new-skill/references/template.md +53 -0
- package/skills/new-skill/references/workflow-patterns.md +104 -0
- package/skills/pytest-case-create/SKILL.md +327 -0
- package/skills/pytest-case-create/references/test-standards.md +244 -0
- package/skills/pytest-case-fix/SKILL.md +274 -0
- package/skills/pytest-coverage-analyze/SKILL.md +226 -0
- package/skills/pytest-coverage-analyze/references/scoring-rules.md +57 -0
- package/skills/pytest-env-ensure/SKILL.md +198 -0
- package/skills/pytest-env-ensure/references/config.md +145 -0
- package/skills/pytest-execute/SKILL.md +155 -0
- package/skills/pytest-sample/SKILL.md +164 -0
- package/skills/pytest-sample/references/src/pytest-sample/Calculator.py +67 -0
- package/skills/pytest-sample/references/src/pytest-sample/ConfigManager.py +68 -0
- package/skills/pytest-sample/references/src/pytest-sample/FileProcessor.py +53 -0
- package/skills/pytest-sample/references/src/pytest-sample/OrderService.py +82 -0
- package/skills/pytest-sample/references/src/pytest-sample/TokenGenerator.py +50 -0
- package/skills/pytest-sample/references/src/pytest-sample/UserService.py +45 -0
- package/skills/pytest-sample/references/src/pytest-sample/__init__.py +0 -0
- package/skills/pytest-suitability-check/SKILL.md +224 -0
- package/skills/read-docs/SKILL.md +134 -0
- package/skills/read-docs/references/opencode/agents/cases.md +206 -0
- package/skills/read-docs/references/opencode/agents/design-pattern.md +47 -0
- package/skills/read-docs/references/opencode/agents/detail.md +191 -0
- package/skills/read-docs/references/opencode/agents/examples.md +100 -0
- package/skills/read-docs/references/opencode/agents/index.md +307 -0
- package/skills/read-docs/references/opencode/agents/workflow.md +161 -0
- package/skills/read-docs/references/opencode/cli/commands/acp.md +32 -0
- package/skills/read-docs/references/opencode/cli/commands/agent.md +16 -0
- package/skills/read-docs/references/opencode/cli/commands/attach.md +20 -0
- package/skills/read-docs/references/opencode/cli/commands/mcp.md +37 -0
- package/skills/read-docs/references/opencode/cli/commands/others.md +49 -0
- package/skills/read-docs/references/opencode/cli/commands/plugin.md +13 -0
- package/skills/read-docs/references/opencode/cli/commands/provider.md +44 -0
- package/skills/read-docs/references/opencode/cli/commands/run.md +81 -0
- package/skills/read-docs/references/opencode/cli/commands/serve.md +84 -0
- package/skills/read-docs/references/opencode/cli/commands/session.md +38 -0
- package/skills/read-docs/references/opencode/cli/commands/web.md +15 -0
- package/skills/read-docs/references/opencode/cli/env.md +39 -0
- package/skills/read-docs/references/opencode/cli/index.md +19 -0
- package/skills/read-docs/references/opencode/cli/tui.md +35 -0
- package/skills/read-docs/references/opencode/commands/examples.md +42 -0
- package/skills/read-docs/references/opencode/commands/index.md +185 -0
- package/skills/read-docs/references/opencode/config/provider.md +152 -0
- package/skills/read-docs/references/opencode/formatter/index.md +71 -0
- package/skills/read-docs/references/opencode/guide/config.md +419 -0
- package/skills/read-docs/references/opencode/guide/formatters.md +70 -0
- package/skills/read-docs/references/opencode/guide/index.md +37 -0
- package/skills/read-docs/references/opencode/guide/providers.md +31 -0
- package/skills/read-docs/references/opencode/guide/rules.md +63 -0
- package/skills/read-docs/references/opencode/plugins/examples.md +75 -0
- package/skills/read-docs/references/opencode/plugins/index.md +188 -0
- package/skills/read-docs/references/opencode/reference/index.md +119 -0
- package/skills/read-docs/references/opencode/rule/index.md +78 -0
- package/skills/read-docs/references/opencode/skills/detail.md +113 -0
- package/skills/read-docs/references/opencode/skills/examples.md +141 -0
- package/skills/read-docs/references/opencode/skills/index.md +126 -0
- package/skills/read-docs/references/opencode/skills/workflow.md +146 -0
- package/skills/read-docs/references/opencode/tests/agent.md +10 -0
- package/skills/read-docs/references/opencode/tests/config.md +60 -0
- package/skills/read-docs/references/opencode/tests/file.md +12 -0
- package/skills/read-docs/references/opencode/tests/serve.md +18 -0
- package/skills/read-docs/references/opencode/tests/session.md +31 -0
- package/skills/read-docs/references/opencode/tests/web.md +17 -0
- package/skills/read-docs/references/opencode/tools/arguments.md +305 -0
- package/skills/read-docs/references/opencode/tools/context.md +18 -0
- package/skills/read-docs/references/opencode/tools/custom.md +111 -0
- package/skills/read-docs/references/opencode/tools/detail.md +104 -0
- package/skills/read-docs/references/opencode/tools/examples.md +71 -0
- package/skills/read-docs/references/opencode/tools/index.md +56 -0
- package/skills/read-docs/references/opencode/tools/lsp.md +26 -0
- package/skills/read-docs/references/opencode/tools/mcp.md +132 -0
- package/skills/read-docs/references/opencode/train/README.md +135 -0
- package/skills/read-docs/references/opencode/train/agent-basic.md +772 -0
- package/skills/read-docs/references/opencode/train/command-basic.md +668 -0
- package/skills/read-docs/references/opencode/train/config-basic.md +509 -0
- package/skills/read-docs/references/opencode/train/index.md +164 -0
- package/skills/read-docs/references/opencode/train/practice.md +873 -0
- package/skills/read-docs/references/opencode/train/skill-basic.md +608 -0
- package/skills/read-docs/references/opencode/tui/commands/config.md +32 -0
- package/skills/read-docs/references/opencode/tui/commands/editor.md +47 -0
- package/skills/read-docs/references/opencode/tui/commands/index.md +125 -0
- package/skills/read-docs/references/opencode/tui/commands/init.md +5 -0
- package/skills/read-docs/references/opencode/tui/index.md +26 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: read-docs
|
|
3
|
+
description: |
|
|
4
|
+
按路径读取文档或浏览目录结构。文件直接显示内容,目录显示一级子项列表。
|
|
5
|
+
内置 OpenCode 文档库,相对路径基于 references/ 解析,用户无需输入 references/ 前缀。
|
|
6
|
+
提供:目录浏览、文件读取、内置文档库。
|
|
7
|
+
适用:查阅文档、浏览目录结构、了解功能用法。
|
|
8
|
+
不适用:修改文档、创建文档、递归批量读取。
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# 文档读取器
|
|
12
|
+
|
|
13
|
+
## 工作流模式
|
|
14
|
+
|
|
15
|
+
本 Skill 采用 **顺序工作流**:
|
|
16
|
+
|
|
17
|
+
1. **解析**:解析路径参数,确定是文件还是目录
|
|
18
|
+
2. **输出**:文件→显示内容;目录→显示一级子项列表;无参数→显示 references/ 下一级目录
|
|
19
|
+
|
|
20
|
+
## 输入
|
|
21
|
+
|
|
22
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
23
|
+
|------|------|------|------|
|
|
24
|
+
| path | 否 | 字符串 | 文件或目录路径。相对路径基于 references/ 解析(如 `opencode` → `references/opencode/`);绝对路径直接读取。不提供则列出 references/ 下可用目录 |
|
|
25
|
+
|
|
26
|
+
## 输出
|
|
27
|
+
|
|
28
|
+
- 无参数:references/ 下的一级目录列表
|
|
29
|
+
- 文件路径:文件完整内容
|
|
30
|
+
- 目录路径:该目录下的一级子目录和文件列表
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 阶段一:解析
|
|
35
|
+
|
|
36
|
+
### 1.1 无参数
|
|
37
|
+
|
|
38
|
+
列出 `references/` 下的一级目录:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
可用文档目录:
|
|
42
|
+
- opencode/ # OpenCode 使用文档
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
提示用户指定目录或文件路径。
|
|
46
|
+
|
|
47
|
+
### 1.2 相对路径
|
|
48
|
+
|
|
49
|
+
路径不以 `/` 或盘符开头时,解析为 `references/<path>`:
|
|
50
|
+
|
|
51
|
+
- `opencode` → `references/opencode/`
|
|
52
|
+
- `opencode/guide` → `references/opencode/guide/`
|
|
53
|
+
- `opencode/guide/index.md` → `references/opencode/guide/index.md`
|
|
54
|
+
|
|
55
|
+
### 1.3 绝对路径
|
|
56
|
+
|
|
57
|
+
路径以 `/` 或盘符(如 `D:/`)开头时,直接使用。
|
|
58
|
+
|
|
59
|
+
### 1.4 路径类型判断
|
|
60
|
+
|
|
61
|
+
- 路径指向文件 → 进入阶段二(文件读取)
|
|
62
|
+
- 路径指向目录 → 进入阶段三(目录浏览)
|
|
63
|
+
- 路径不存在 → 报错,提示路径无效
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 阶段二:文件读取
|
|
68
|
+
|
|
69
|
+
使用 Read 工具读取文件内容,直接输出完整内容。
|
|
70
|
+
|
|
71
|
+
输出格式:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
--- <path> ---
|
|
75
|
+
|
|
76
|
+
<文件完整内容>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
读取后用户可基于内容提问,AI 基于已读取的内容回答。
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 阶段三:目录浏览
|
|
84
|
+
|
|
85
|
+
列出该目录下的一级子项(不递归):
|
|
86
|
+
|
|
87
|
+
1. 使用 Glob 工具扫描 `目录/*`(非递归)
|
|
88
|
+
2. 区分子目录和文件
|
|
89
|
+
3. 按字母排序,子目录在前,文件在后
|
|
90
|
+
|
|
91
|
+
输出格式:
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
<目录路径>/
|
|
95
|
+
|
|
96
|
+
目录:
|
|
97
|
+
- agents/
|
|
98
|
+
- cli/
|
|
99
|
+
- guide/
|
|
100
|
+
- ...
|
|
101
|
+
|
|
102
|
+
文件:
|
|
103
|
+
- index.md
|
|
104
|
+
- providers.md
|
|
105
|
+
- ...
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
提示用户可指定子目录或文件继续浏览。
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 失败处理
|
|
113
|
+
|
|
114
|
+
| 场景 | 处理方式 |
|
|
115
|
+
|------|---------|
|
|
116
|
+
| 路径不存在 | 提示路径无效,列出可用目录供选择 |
|
|
117
|
+
| 目录为空 | 提示目录无内容 |
|
|
118
|
+
| 文件读取失败 | 输出错误信息 |
|
|
119
|
+
| 无参数且 references/ 为空 | 提示暂无可用文档 |
|
|
120
|
+
|
|
121
|
+
## 一定要做
|
|
122
|
+
|
|
123
|
+
1. 相对路径基于 references/ 解析,用户不需要输入 references/ 前缀
|
|
124
|
+
2. 目录浏览只显示一级子项,不递归
|
|
125
|
+
3. 文件读取直接显示完整内容
|
|
126
|
+
4. 无参数时列出 references/ 下可用目录
|
|
127
|
+
5. 目录浏览时区分子目录和文件,分别列出
|
|
128
|
+
|
|
129
|
+
## 一定不要做
|
|
130
|
+
|
|
131
|
+
1. 不要递归扫描目录下所有文件
|
|
132
|
+
2. 不要批量读取目录下多个文件
|
|
133
|
+
3. 不要修改或创建文档
|
|
134
|
+
4. 不要在路径不存在时静默失败
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Agent 案例
|
|
2
|
+
|
|
3
|
+
## 案例 1:多语言文档生成系统
|
|
4
|
+
|
|
5
|
+
需求:自动将 API 文档翻译成多语言版本。
|
|
6
|
+
|
|
7
|
+
### 系统设计
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
用户输入 API 文档
|
|
11
|
+
↓
|
|
12
|
+
@doc-parser(解析文档结构)
|
|
13
|
+
↓
|
|
14
|
+
@translator-zh(翻译成中文)
|
|
15
|
+
@translator-ja(翻译成日文) ← 并行
|
|
16
|
+
@translator-ko(翻译成韩文)
|
|
17
|
+
↓
|
|
18
|
+
@doc-formatter(格式化输出)
|
|
19
|
+
↓
|
|
20
|
+
多语言文档
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 配置
|
|
24
|
+
|
|
25
|
+
```jsonc
|
|
26
|
+
{
|
|
27
|
+
"$schema": "https://opencode.ai/config.json",
|
|
28
|
+
"agent": {
|
|
29
|
+
"doc-generator": {
|
|
30
|
+
"description": "多语言文档生成编排器",
|
|
31
|
+
"mode": "primary",
|
|
32
|
+
"prompt": "{file:./prompts/doc-generator.md}",
|
|
33
|
+
"permission": {
|
|
34
|
+
"task": {
|
|
35
|
+
"*": "deny",
|
|
36
|
+
"doc-parser": "allow",
|
|
37
|
+
"translator-*": "allow",
|
|
38
|
+
"doc-formatter": "allow"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"doc-parser": {
|
|
43
|
+
"description": "解析 API 文档结构,提取可翻译内容",
|
|
44
|
+
"mode": "subagent",
|
|
45
|
+
"temperature": 0.1
|
|
46
|
+
},
|
|
47
|
+
"translator-zh": {
|
|
48
|
+
"description": "英译中专家,保持技术术语准确",
|
|
49
|
+
"mode": "subagent",
|
|
50
|
+
"temperature": 0.3
|
|
51
|
+
},
|
|
52
|
+
"translator-ja": {
|
|
53
|
+
"description": "英译日专家",
|
|
54
|
+
"mode": "subagent",
|
|
55
|
+
"temperature": 0.3
|
|
56
|
+
},
|
|
57
|
+
"translator-ko": {
|
|
58
|
+
"description": "英译韩专家",
|
|
59
|
+
"mode": "subagent",
|
|
60
|
+
"temperature": 0.3
|
|
61
|
+
},
|
|
62
|
+
"doc-formatter": {
|
|
63
|
+
"description": "文档格式化,确保多语言版本格式一致",
|
|
64
|
+
"mode": "subagent",
|
|
65
|
+
"temperature": 0.1
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 案例 2:代码审计流水线
|
|
72
|
+
|
|
73
|
+
需求:对 PR 进行全方位代码审计。采用 Parallelization + Orchestrator-Workers 混合模式。
|
|
74
|
+
|
|
75
|
+
### 系统设计
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
PR 代码变更
|
|
79
|
+
↓
|
|
80
|
+
@audit-coordinator(协调器)
|
|
81
|
+
↓
|
|
82
|
+
┌──────────────────────────────────┐
|
|
83
|
+
│ 并行执行(Sectioning) │
|
|
84
|
+
│ @security-auditor │
|
|
85
|
+
│ @performance-auditor │
|
|
86
|
+
│ @quality-auditor │
|
|
87
|
+
│ @test-auditor │
|
|
88
|
+
└──────────────────────────────────┘
|
|
89
|
+
↓
|
|
90
|
+
汇总所有发现
|
|
91
|
+
↓
|
|
92
|
+
@report-generator(生成报告)
|
|
93
|
+
↓
|
|
94
|
+
审计报告
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 配置
|
|
98
|
+
|
|
99
|
+
```jsonc
|
|
100
|
+
{
|
|
101
|
+
"$schema": "https://opencode.ai/config.json",
|
|
102
|
+
"agent": {
|
|
103
|
+
"audit-coordinator": {
|
|
104
|
+
"description": "代码审计协调器,编排多维度审计",
|
|
105
|
+
"mode": "subagent",
|
|
106
|
+
"model": "anthropic/claude-opus-4-5-thinking",
|
|
107
|
+
"prompt": "{file:./prompts/audit-coordinator.md}",
|
|
108
|
+
"steps": 50
|
|
109
|
+
},
|
|
110
|
+
"security-auditor": {
|
|
111
|
+
"description": "安全漏洞审计:注入、认证、数据泄露",
|
|
112
|
+
"mode": "subagent",
|
|
113
|
+
"temperature": 0.1,
|
|
114
|
+
"permission": { "edit": "deny" }
|
|
115
|
+
},
|
|
116
|
+
"performance-auditor": {
|
|
117
|
+
"description": "性能审计:复杂度、内存、并发",
|
|
118
|
+
"mode": "subagent",
|
|
119
|
+
"temperature": 0.1,
|
|
120
|
+
"permission": { "edit": "deny" }
|
|
121
|
+
},
|
|
122
|
+
"quality-auditor": {
|
|
123
|
+
"description": "代码质量审计:可读性、SOLID、重复代码",
|
|
124
|
+
"mode": "subagent",
|
|
125
|
+
"temperature": 0.2,
|
|
126
|
+
"permission": { "edit": "deny" }
|
|
127
|
+
},
|
|
128
|
+
"test-auditor": {
|
|
129
|
+
"description": "测试审计:覆盖率、边界情况、Mock 质量",
|
|
130
|
+
"mode": "subagent",
|
|
131
|
+
"temperature": 0.1,
|
|
132
|
+
"permission": {
|
|
133
|
+
"edit": "deny",
|
|
134
|
+
"bash": {
|
|
135
|
+
"*": "deny",
|
|
136
|
+
"npm test*": "allow",
|
|
137
|
+
"npm run test*": "allow"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"report-generator": {
|
|
142
|
+
"description": "生成结构化审计报告",
|
|
143
|
+
"mode": "subagent",
|
|
144
|
+
"temperature": 0.2
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 创建专家 Agent
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
.opencode/
|
|
154
|
+
├── agent/
|
|
155
|
+
│ └── security-auditor.md
|
|
156
|
+
└── prompts/
|
|
157
|
+
├── audit-coordinator.md
|
|
158
|
+
├── security-auditor.md
|
|
159
|
+
├── performance-auditor.md
|
|
160
|
+
├── quality-auditor.md
|
|
161
|
+
├── test-auditor.md
|
|
162
|
+
└── report-generator.md
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
完整示例:security-auditor.md
|
|
166
|
+
|
|
167
|
+
```md
|
|
168
|
+
---
|
|
169
|
+
description: |
|
|
170
|
+
安全漏洞审计专家。专注 OWASP Top 10、注入攻击、认证绕过、敏感数据泄露。
|
|
171
|
+
适用场景:PR 审查、代码安全扫描、上线前检查。
|
|
172
|
+
不适用:性能优化、代码风格、功能开发。
|
|
173
|
+
mode: subagent
|
|
174
|
+
temperature: 0.1
|
|
175
|
+
permission:
|
|
176
|
+
edit: deny
|
|
177
|
+
---
|
|
178
|
+
# 角色
|
|
179
|
+
你是一位资深安全审计专家,专注于识别代码中的安全漏洞。
|
|
180
|
+
# 审计范围
|
|
181
|
+
## Critical(必须检查)
|
|
182
|
+
- **SQL 注入**:用户输入是否直接拼接到 SQL 语句中
|
|
183
|
+
- **XSS**:用户输入是否未经转义就渲染到页面
|
|
184
|
+
- **硬编码密钥**:API Key、密码、Token 是否写死在代码中
|
|
185
|
+
- **认证绕过**:是否存在未经验证的接口访问
|
|
186
|
+
- **路径遍历**:文件操作是否使用了用户可控的路径
|
|
187
|
+
## High(重点检查)
|
|
188
|
+
- **不安全的反序列化**
|
|
189
|
+
- **SSRF**:用户可控的 URL 请求
|
|
190
|
+
- **敏感数据泄露**:日志、错误信息中是否暴露了内部信息
|
|
191
|
+
## Medium(常规检查)
|
|
192
|
+
- **CORS 配置**
|
|
193
|
+
- **CSRF 防护**
|
|
194
|
+
- **速率限制**
|
|
195
|
+
- **输入验证不完整**
|
|
196
|
+
# 输出格式
|
|
197
|
+
对每个发现的问题:
|
|
198
|
+
**[严重程度] 问题标题**
|
|
199
|
+
- 文件:`path/to/file.ts:L行号`
|
|
200
|
+
- 风险说明:攻击者可以...
|
|
201
|
+
- 修复建议:...
|
|
202
|
+
# 约束条件
|
|
203
|
+
- ✅ 每个问题必须给出具体文件和行号
|
|
204
|
+
- ✅ 必须给出修复建议
|
|
205
|
+
- ❌ 不要报告理论风险,只报告代码中实际存在的
|
|
206
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Agent 设计模式
|
|
2
|
+
|
|
3
|
+
## 核心原则
|
|
4
|
+
|
|
5
|
+
### 1. 保持简单
|
|
6
|
+
|
|
7
|
+
> "最成功的实现使用简单、可组合的模式,而非复杂框架。"
|
|
8
|
+
|
|
9
|
+
- 能用单个 Agent 解决的,不要用多个
|
|
10
|
+
- 能用固定流程的,不要用动态决策
|
|
11
|
+
- 能用 prompt 解决的,不要加工具
|
|
12
|
+
|
|
13
|
+
### 2. 透明度优先
|
|
14
|
+
|
|
15
|
+
> "显式展示 Agent 的规划步骤。"
|
|
16
|
+
|
|
17
|
+
- Agent 的思考过程应该可见
|
|
18
|
+
- 每个步骤都有明确的输入输出
|
|
19
|
+
- 用户能理解 Agent 在做什么
|
|
20
|
+
|
|
21
|
+
### 3. 精心设计工具接口(ACI)
|
|
22
|
+
|
|
23
|
+
> "像设计人机界面(HCI)一样投入精力设计 Agent-计算机界面(ACI)。"
|
|
24
|
+
|
|
25
|
+
- 工具描述要像给初级开发者写的优秀 docstring
|
|
26
|
+
- 包含使用示例和边界情况
|
|
27
|
+
- 避免需要精确计数或复杂转义的格式
|
|
28
|
+
|
|
29
|
+
## Workflow vs Agent
|
|
30
|
+
|
|
31
|
+
| 维度 | Workflow | Agent |
|
|
32
|
+
|------|----------|-------|
|
|
33
|
+
| 执行方式 | 预定义代码路径,步骤固定 | LLM 动态决策,自主探索 |
|
|
34
|
+
| 适用场景 | 任务可预测、结构清晰 | 开放性问题、无法预测步骤 |
|
|
35
|
+
| 实现方式 | Skill、Command | Agent + Task tool |
|
|
36
|
+
|
|
37
|
+
### 决策树
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
任务来了
|
|
41
|
+
↓
|
|
42
|
+
步骤是否固定?
|
|
43
|
+
├─ 是 → 用 Workflow(Skill/Command)
|
|
44
|
+
└─ 否 → 需要多少自主性?
|
|
45
|
+
├─ 低 → 受限 Agent(steps + 权限控制)
|
|
46
|
+
└─ 高 → 完全自主 Agent
|
|
47
|
+
```
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# Agent 详解
|
|
2
|
+
|
|
3
|
+
## 父子 Agent 协作
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
用户 ←→ Primary Agent (build/plan)
|
|
7
|
+
↓
|
|
8
|
+
Task Tool (创建独立 Session)
|
|
9
|
+
↓
|
|
10
|
+
Subagent (explore/general/你的自定义 Agent)
|
|
11
|
+
↓
|
|
12
|
+
返回结果给 Primary
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### 子代理的运行机制
|
|
16
|
+
|
|
17
|
+
子代理运行在全新、独立的 Session 中:
|
|
18
|
+
|
|
19
|
+
1. **看不到主 Agent 的对话历史**:不知道之前聊了什么
|
|
20
|
+
2. **上下文仅包含 Prompt**:只有传给它的任务描述
|
|
21
|
+
3. **必须提供完整上下文**:调用时必须把任务所需的所有信息写在 prompt 里
|
|
22
|
+
|
|
23
|
+
### All 模式的双重身份
|
|
24
|
+
|
|
25
|
+
当 `mode: "all"` 的 Agent:
|
|
26
|
+
|
|
27
|
+
1. 被 Tab 切换时:它是主 Agent,拥有完整历史记忆
|
|
28
|
+
2. 被 `@` 调用时:它是子 Agent,受到 Session 隔离限制
|
|
29
|
+
|
|
30
|
+
## Agent 文件结构
|
|
31
|
+
|
|
32
|
+
```md
|
|
33
|
+
---
|
|
34
|
+
description: 简短描述这个 Agent 做什么
|
|
35
|
+
mode: subagent
|
|
36
|
+
---
|
|
37
|
+
这里是系统提示词(System Prompt)。
|
|
38
|
+
告诉 Agent 它是谁、擅长什么、如何工作。
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 权限配置
|
|
42
|
+
|
|
43
|
+
在 Frontmatter 中直接配置权限:
|
|
44
|
+
|
|
45
|
+
```md
|
|
46
|
+
---
|
|
47
|
+
description: 只读代码审计 Agent
|
|
48
|
+
mode: subagent
|
|
49
|
+
permission:
|
|
50
|
+
edit: deny
|
|
51
|
+
bash:
|
|
52
|
+
"*": deny
|
|
53
|
+
"git log*": allow
|
|
54
|
+
task:
|
|
55
|
+
"*": deny
|
|
56
|
+
---
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 系统提示词的工作原理
|
|
60
|
+
|
|
61
|
+
### 提示词组装顺序
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
65
|
+
│ 1. Agent prompt 或 Provider 默认提示词(二选一) │
|
|
66
|
+
│ ├─ 有 prompt → 使用你定义的 │
|
|
67
|
+
│ └─ 无 prompt → 使用模型默认(如 anthropic.txt) │
|
|
68
|
+
├─────────────────────────────────────────────────────────────┤
|
|
69
|
+
│ 2. 环境信息 + 指令文件(始终添加) │
|
|
70
|
+
│ 工作目录、git 状态、平台、日期 │
|
|
71
|
+
│ AGENTS.md、CLAUDE.md 等全局规则文件 │
|
|
72
|
+
└─────────────────────────────────────────────────────────────┘
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
关键点:
|
|
76
|
+
|
|
77
|
+
- Agent prompt 和 Provider 默认提示词是**二选一**,不是叠加
|
|
78
|
+
- 环境信息和指令文件**始终添加**,无论是否有 Agent prompt
|
|
79
|
+
|
|
80
|
+
### 场景 1:Agent 有 prompt
|
|
81
|
+
|
|
82
|
+
```md
|
|
83
|
+
---
|
|
84
|
+
description: 代码审查专家
|
|
85
|
+
mode: subagent
|
|
86
|
+
---
|
|
87
|
+
你是代码审查专家,专注于安全和性能...
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
发送给模型的提示词:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
你是代码审查专家,专注于安全和性能... ← 你的 prompt(替代默认)
|
|
94
|
+
You are powered by the model named... ← 环境信息
|
|
95
|
+
Working directory: /path/to/project ← 环境信息
|
|
96
|
+
... ← AGENTS.md 内容(如有)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 场景 2:Agent 无 prompt
|
|
100
|
+
|
|
101
|
+
```md
|
|
102
|
+
---
|
|
103
|
+
description: 通用助手
|
|
104
|
+
mode: subagent
|
|
105
|
+
---
|
|
106
|
+
(正文为空)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
发送给模型的提示词:
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
You are OpenCode, the best coding agent... ← Provider 默认
|
|
113
|
+
You are powered by the model named... ← 环境信息
|
|
114
|
+
Working directory: /path/to/project ← 环境信息
|
|
115
|
+
... ← AGENTS.md 内容(如有)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 混合使用 Markdown 和 JSON
|
|
119
|
+
|
|
120
|
+
如果同名 Agent 同时存在于 Markdown 和 JSON 配置中:
|
|
121
|
+
|
|
122
|
+
- **JSON 配置优先级更高**:`opencode.json` 中的字段覆盖 `.md` 中的同名字段
|
|
123
|
+
- **推荐做法**:用 `.md` 定义 Prompt(长文本好写),用 `opencode.json` 微调参数(如临时禁用、修改模型)
|
|
124
|
+
|
|
125
|
+
### JSON 示例
|
|
126
|
+
|
|
127
|
+
```jsonc
|
|
128
|
+
{
|
|
129
|
+
"$schema": "https://opencode.ai/config.json",
|
|
130
|
+
"agent": {
|
|
131
|
+
"code-reviewer": {
|
|
132
|
+
"description": "代码审查专家,专注安全、性能、可维护性。",
|
|
133
|
+
"mode": "subagent",
|
|
134
|
+
"model": "anthropic/claude-sonnet-4-20250514",
|
|
135
|
+
"temperature": 0.2,
|
|
136
|
+
"steps": 30,
|
|
137
|
+
"prompt": "你是代码审查专家。\n\n## 检查要点\n- 安全漏洞\n- 性能问题\n- 代码风格\n- 可维护性"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
当 prompt 很长时,可引用外部文件:
|
|
144
|
+
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"prompt": "{file:./prompts/code-reviewer.txt}"
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Agent 三大组件设计
|
|
152
|
+
|
|
153
|
+
### Planning(规划)
|
|
154
|
+
|
|
155
|
+
| 技术 | 说明 | 适用场景 |
|
|
156
|
+
|------|------|----------|
|
|
157
|
+
| Chain of Thought | "一步步思考" | 通用推理 |
|
|
158
|
+
| Tree of Thoughts | 探索多个推理路径 | 复杂决策 |
|
|
159
|
+
| ReAct | 思考-行动-观察循环 | 需要与环境交互 |
|
|
160
|
+
|
|
161
|
+
在 Agent Prompt 中应用:
|
|
162
|
+
|
|
163
|
+
```md
|
|
164
|
+
# 工作方式
|
|
165
|
+
采用 ReAct 模式:
|
|
166
|
+
1. **思考**:分析当前状态,决定下一步
|
|
167
|
+
2. **行动**:执行具体操作(调用工具)
|
|
168
|
+
3. **观察**:分析操作结果
|
|
169
|
+
4. **重复**:直到任务完成
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Memory(记忆)
|
|
173
|
+
|
|
174
|
+
| 类型 | 存储 | 容量 |
|
|
175
|
+
|------|------|------|
|
|
176
|
+
| 短期记忆 | 上下文窗口 | 有限,约几万 token |
|
|
177
|
+
| 长期记忆 | 外部向量库 | 无限,需要检索 |
|
|
178
|
+
|
|
179
|
+
OpenCode 中的实现:
|
|
180
|
+
|
|
181
|
+
- 短期:会话上下文
|
|
182
|
+
- 长期:MCP 集成向量数据库
|
|
183
|
+
|
|
184
|
+
### Tool Use(工具使用)
|
|
185
|
+
|
|
186
|
+
设计原则:
|
|
187
|
+
|
|
188
|
+
1. **描述清晰**:像给初级开发者的 docstring
|
|
189
|
+
2. **输入简单**:避免复杂的格式要求
|
|
190
|
+
3. **输出可解析**:结构化,便于后续处理
|
|
191
|
+
4. **错误友好**:清晰的错误信息
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Agent 示例
|
|
2
|
+
|
|
3
|
+
## 文档写作 Agent
|
|
4
|
+
|
|
5
|
+
`.opencode/agent/docs-writer.md`
|
|
6
|
+
|
|
7
|
+
```md
|
|
8
|
+
---
|
|
9
|
+
description: |
|
|
10
|
+
技术文档写作专家,擅长 API 文档、README、用户手册。
|
|
11
|
+
适用场景:写新项目文档、更新现有文档、解释代码功能。
|
|
12
|
+
不适用:代码审查、Bug 修复、功能实现。
|
|
13
|
+
mode: subagent
|
|
14
|
+
temperature: 0.3
|
|
15
|
+
---
|
|
16
|
+
# 角色
|
|
17
|
+
你是技术文档专家,擅长将复杂概念解释得通俗易懂。
|
|
18
|
+
# 文档规范
|
|
19
|
+
- 使用 Markdown 格式
|
|
20
|
+
- 代码示例必须可运行
|
|
21
|
+
- 包含输入/输出说明
|
|
22
|
+
- 中文优先,专业术语保留英文
|
|
23
|
+
# 文档结构
|
|
24
|
+
1. 概述(一句话说明是什么)
|
|
25
|
+
2. 快速开始(30 秒能跑起来)
|
|
26
|
+
3. 详细 API(完整参数说明)
|
|
27
|
+
4. 示例代码(覆盖常见场景)
|
|
28
|
+
5. 常见问题(预判用户疑惑)
|
|
29
|
+
# 约束条件
|
|
30
|
+
- ✅ 快速开始的代码必须可直接复制运行
|
|
31
|
+
- ✅ 参数说明要包含类型和默认值
|
|
32
|
+
- ❌ 避免假设用户已有背景知识
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 自动化代码审查机器人
|
|
36
|
+
|
|
37
|
+
### 配置
|
|
38
|
+
|
|
39
|
+
```jsonc
|
|
40
|
+
{
|
|
41
|
+
"$schema": "https://opencode.ai/config.json",
|
|
42
|
+
"agent": {
|
|
43
|
+
"pr-reviewer": {
|
|
44
|
+
"description": "PR 审查机器人,自动审查代码变更",
|
|
45
|
+
"mode": "primary",
|
|
46
|
+
"model": "anthropic/claude-opus-4-5-thinking",
|
|
47
|
+
"steps": 100,
|
|
48
|
+
"temperature": 0.1,
|
|
49
|
+
"prompt": "{file:./prompts/pr-reviewer.md}",
|
|
50
|
+
"permission": {
|
|
51
|
+
"edit": "deny",
|
|
52
|
+
"bash": {
|
|
53
|
+
"*": "deny",
|
|
54
|
+
"git log*": "allow",
|
|
55
|
+
"git diff*": "allow",
|
|
56
|
+
"npm test": "allow"
|
|
57
|
+
},
|
|
58
|
+
"task": {
|
|
59
|
+
"*": "deny",
|
|
60
|
+
"security-auditor": "allow",
|
|
61
|
+
"performance-checker": "allow",
|
|
62
|
+
"style-checker": "allow"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 多模型协作
|
|
71
|
+
|
|
72
|
+
```jsonc
|
|
73
|
+
{
|
|
74
|
+
"agent": {
|
|
75
|
+
"planner": {
|
|
76
|
+
"description": "规划者:分析需求,制定计划",
|
|
77
|
+
"mode": "primary",
|
|
78
|
+
"model": "anthropic/claude-opus-4-5-thinking",
|
|
79
|
+
"temperature": 0.2,
|
|
80
|
+
"steps": 20
|
|
81
|
+
},
|
|
82
|
+
"executor": {
|
|
83
|
+
"description": "执行者:实现具体代码",
|
|
84
|
+
"mode": "primary",
|
|
85
|
+
"model": "anthropic/claude-sonnet-4-20250514",
|
|
86
|
+
"temperature": 0.3,
|
|
87
|
+
"steps": 100
|
|
88
|
+
},
|
|
89
|
+
"reviewer": {
|
|
90
|
+
"description": "审查者:检查代码质量",
|
|
91
|
+
"mode": "subagent",
|
|
92
|
+
"model": "anthropic/claude-haiku-4-5",
|
|
93
|
+
"temperature": 0.1,
|
|
94
|
+
"permission": {
|
|
95
|
+
"edit": "deny"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|