-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path11.html
More file actions
276 lines (276 loc) · 17.6 KB
/
Copy path11.html
File metadata and controls
276 lines (276 loc) · 17.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="CodeClub - OpenCode 工具" />
<meta name="author" content="Jackson" />
<title>OpenCode 工具 - CodeClub</title>
<link rel="icon" type="image/x-icon" href="../../img/logo.png" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
crossorigin="anonymous"
referrerpolicy="no-referrer"
/>
<link rel="stylesheet" href="../../css/main.css" />
<link rel="stylesheet" href="../../css/dark-mode.css" />
<link rel="stylesheet" href="../../css/mobile-optimizations.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/12.0.0/marked.min.js"></script>
<style>
.tutorial-page {
max-width: 1200px;
margin: 70px auto 40px;
padding: 0 20px;
display: flex;
gap: 20px;
}
.tutorial-sidebar {
width: 240px;
flex-shrink: 0;
position: sticky;
top: 70px;
max-height: calc(100vh - 90px);
overflow-y: auto;
background: var(--bg-secondary, #fff);
border-radius: 8px;
padding: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.tutorial-sidebar h3 {
font-size: 15px;
margin: 0 0 12px;
color: var(--text-primary, #1a1a2e);
padding-bottom: 8px;
border-bottom: 2px solid var(--primary, #3b82f6);
}
.tutorial-sidebar a {
display: block;
padding: 5px 8px;
color: var(--text-secondary, #666);
text-decoration: none;
font-size: 13px;
border-radius: 4px;
line-height: 1.4;
}
.tutorial-sidebar a:hover {
background: var(--primary, #3b82f6);
color: #fff;
}
.tutorial-sidebar a.active {
background: var(--primary, #3b82f6);
color: #fff;
font-weight: 600;
}
.tutorial-main {
flex: 1;
min-width: 0;
}
.tutorial-article {
background: var(--bg-secondary, #fff);
border-radius: 8px;
padding: 32px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.tutorial-article h1 {
font-size: 26px;
margin-bottom: 16px;
color: var(--text-primary, #1a1a2e);
border-bottom: 2px solid var(--primary, #3b82f6);
padding-bottom: 12px;
}
.markdown-body {
font-size: 15px;
line-height: 1.8;
color: var(--text-secondary, #333);
}
.markdown-body h1 {
font-size: 24px;
border-bottom: 1px solid var(--border, #e5e7eb);
padding-bottom: 8px;
}
.markdown-body h2 {
font-size: 20px;
border-bottom: 1px solid var(--border, #e5e7eb);
padding-bottom: 6px;
}
.markdown-body h3 {
font-size: 17px;
}
.markdown-body pre {
background: #1e1e2e;
color: #cdd6f4;
padding: 16px;
border-radius: 8px;
overflow-x: auto;
}
.markdown-body code {
font-family: 'Fira Code', 'Cascadia Code', monospace;
font-size: 14px;
}
.markdown-body p code {
background: #f1f5f9;
padding: 2px 6px;
border-radius: 4px;
color: #e83e8c;
}
.markdown-body blockquote {
border-left: 4px solid var(--primary, #3b82f6);
padding: 12px 20px;
margin: 16px 0;
background: #f8fafc;
border-radius: 0 8px 8px 0;
}
.markdown-body img {
max-width: 100%;
border-radius: 8px;
}
.markdown-body table {
border-collapse: collapse;
width: 100%;
margin: 16px 0;
}
.markdown-body table th,
.markdown-body table td {
border: 1px solid var(--border, #e5e7eb);
padding: 8px 12px;
text-align: left;
}
.markdown-body table th {
background: var(--bg-primary, #f8fafc);
font-weight: 600;
}
.markdown-body table tr:nth-child(2n) {
background: var(--bg-primary, #f8fafc);
}
.markdown-body ul,
.markdown-body ol {
padding-left: 24px;
margin: 12px 0;
}
.markdown-body li {
margin: 4px 0;
}
.markdown-body hr {
border: none;
border-top: 1px solid var(--border, #e5e7eb);
margin: 24px 0;
}
.markdown-body a {
color: var(--primary, #3b82f6);
text-decoration: none;
}
.markdown-body a:hover {
text-decoration: underline;
}
.page-navigation {
display: flex;
justify-content: space-between;
margin-top: 24px;
padding-top: 16px;
border-top: 1px solid var(--border, #e5e7eb);
}
.page-nav-link {
color: var(--primary, #3b82f6);
text-decoration: none;
font-weight: 500;
font-size: 14px;
}
.page-nav-link:hover {
text-decoration: underline;
}
.source-link {
margin-top: 16px;
font-size: 13px;
color: var(--text-secondary, #999);
}
.source-link a {
color: var(--primary, #3b82f6);
}
@media (max-width: 768px) {
.tutorial-page {
flex-direction: column;
}
.tutorial-sidebar {
width: 100%;
position: static;
max-height: 200px;
}
}
</style>
</head>
<body>
<nav class="navbar">
<div class="navbar-container">
<a class="navbar-brand" href="../../index.html">
<img src="../../img/logo.png" alt="CodeClub" width="32" height="32" />
<span>CodeClub</span>
</a>
<button class="mobile-menu-toggle" aria-label="切换导航菜单"><span></span><span></span><span></span></button>
<ul class="navbar-nav">
<li><a class="nav-link" href="../../index.html">首页</a></li>
<li><a class="nav-link" href="../../nav.html">网址导航</a></li>
<li><a class="nav-link" href="../../blog/">博客</a></li>
<li><a class="nav-link" href="../../wiki/index.html" target="_blank">WiKi</a></li>
<li><a class="nav-link active" href="../index.html">教程</a></li>
<li><a class="nav-link" href="../../book.html">图书</a></li>
<li><a class="nav-link" href="../../contact.html">联系我</a></li>
<li><a class="nav-link" href="../../about.html">关于我</a></li>
</ul>
</div>
</nav>
<div class="tutorial-page">
<div class="tutorial-sidebar">
<h3>📖 OpenCode</h3>
<a href="0.html">OpenCode 教程</a>
<a href="1.html">OpenCode 简介</a>
<a href="2.html">OpenCode 安装</a>
<a href="3.html">OpenCode 配置</a>
<a href="4.html">OpenCode 第一次使用</a>
<a href="5.html">OpenCode VSCode</a>
<a href="6.html">OpenCode 终端界面</a>
<a href="7.html">OpenCode CLI 使用</a>
<a href="8.html">OpenCode Web 使用</a>
<a href="9.html">OpenCode GitHub</a>
<a href="10.html">OpenCode GitLab</a>
<a href="11.html" class="active">OpenCode 工具</a>
<a href="12.html">OpenCode 规则</a>
<a href="13.html">OpenCode 代理</a>
<a href="14.html">OpenCode 主题</a>
<a href="15.html">OpenCode 快捷键</a>
<a href="16.html">OpenCode 自定义命令</a>
<a href="17.html">OpenCode 格式化工具</a>
<a href="18.html">OpenCode 权限配置</a>
<a href="19.html">OpenCode LSP 服务器配置</a>
<a href="20.html">OpenCode MCP 服务器配置</a>
<a href="21.html">OpenCode Skills</a>
<a href="22.html">OpenCode 自定义工具</a>
</div>
<div class="tutorial-main">
<div class="tutorial-article">
<div class="markdown-body" id="md-content"></div>
<div class="page-navigation">
<a href="10.html" class="page-nav-link">← OpenCode GitLab</a>
<a href="12.html" class="page-nav-link">OpenCode 规则 →</a>
</div>
<div class="source-link">原文来源:<a href="https://www.runoob.com" target="_blank">菜鸟教程</a></div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer-content"><p>© 2024 CodeClub. All rights reserved.</p></div>
</footer>
<script src="../../js/dark-mode.js"></script>
<script src="../../js/mobile-menu.js"></script>
<script>
const md = `# OpenCode 工具\n\n\nOpenCode 的核心能力不仅来自大模型本身,更来自它可以调用的**工具(Tools)**。\n\n\n\n工具的本质:让 LLM 从会说话变成会做事。\n\n\n\n\n**Tools = OpenCode 的执行能力,而权限 = 安全边界。**\n\n\n\n---\n\n\n\n## 一、什么是工具(Tools)\n\n\n工具是 LLM 在项目中执行操作的能力接口,例如:\n\n\n\n\n\n\n- 读取代码\n\n- 修改文件\n\n- 执行命令\n\n- 搜索代码\n\n- 访问网络\n\n\n\n没有工具:只能生成代码\n\n\n有工具:可以**直接操作项目**\n\n\n\n\n---\n\n\n\n## 二、工具权限控制(最重要)\n\n\n默认情况下:\n\n\n\n\n\n\n- 所有工具都是启用的\n\n- 且无需确认即可执行\n\n\n\n**生产环境必须配置权限!**\n\n\n\n\n\n### 1、基础权限配置\n\n\n\n\`\`\`\n\n{\n "$schema": "https://opencode.ai/config.json",\n "permission": {\n "edit": "deny",\n "bash": "ask",\n "webfetch": "allow"\n }\n}\n\n\`\`\`\n\n\n\n\n\n权限值\n说明\n\n\n\n\n\nallow\n允许直接执行\n\n\n\ndeny\n完全禁止\n\n\n\nask\n执行前需要人工确认\n\n\n\n\n\n\n\n### 2、通配符控制\n\n\n可以批量控制工具:\n\n\n\n\n\`\`\`\n\n{\n "permission": {\n "mymcp_*": "ask"\n }\n}\n\n\`\`\`\n\n\n所有来自 MCP 的工具都需要审批\n\n\n\n\n---\n\n\n\n## 三、内置工具详解\n\n\nOpenCode 内置了一整套工程级工具:\n\n\n\n\n\n### 1、bash(命令执行)\n\n\n\n\`\`\`\n\n{\n "permission": {\n "bash": "allow"\n }\n}\n\n\`\`\`\n\n\n作用:\n\n\n\n\n\n\n- 执行 shell 命令\n\n- 如 npm install、git status\n\n\n\n**风险:**高(建议设为 ask)\n\n\n\n\n\n### 2、edit(核心工具)\n\n\n\n\`\`\`\n\n{\n "permission": {\n "edit": "allow"\n }\n}\n\n\`\`\`\n\n\n作用:\n\n\n\n\n\n\n- 修改现有文件\n\n- 基于精确文本替换\n\n\n\n**说明:**这是 AI 修改代码的核心能力\n\n\n\n\n### 3、write(文件创建)\n\n\n作用:\n\n\n\n\n\n\n- 创建新文件\n\n- 覆盖已有文件\n\n\n\n**注意:**\n\n\n\nwrite 受 edit 权限控制\n\n\n\n\n\n### 4、read(读取文件)\n\n\n\n\`\`\`\n\n{\n "permission": {\n "read": "allow"\n }\n}\n\n\`\`\`\n\n\n作用:\n\n\n\n\n\n\n- 读取代码文件\n\n- 支持按行读取\n\n\n\n**风险:**低(建议 always allow)\n\n\n\n\n### 5、grep(内容搜索)\n\n\n\n\`\`\`\n\n{\n "permission": {\n "grep": "allow"\n }\n}\n\n\`\`\`\n\n\n作用:\n\n\n\n\n\n\n- 正则搜索代码\n\n\n\n\n\n### 6、glob(文件匹配)\n\n\n作用:\n\n\n\n\n\n\n- 查找文件路径(如 src/**/*.ts)\n\n\n\n\n\n### 7、list(目录浏览)\n\n\n作用:\n\n\n\n\n\n\n- 列出目录结构\n\n\n\n\n### 8、patch(补丁应用)\n\n\n作用:\n\n\n\n\n\n\n- 应用 diff 补丁\n\n\n\n**说明:**受 edit 权限控制\n\n\n\n\n\n### 9、lsp(实验性)\n\n\n作用:\n\n\n\n\n\n\n- 代码智能分析(跳转定义、查引用)\n\n\n\n启用方式:\n\n\n\n\n\`\`\`\n\nOPENCODE_EXPERIMENTAL_LSP_TOOL=true\n\n\`\`\`\n\n\n\n\n### 10、skill(技能加载)\n\n\n作用:\n\n\n\n\n\n\n- 加载 SKILL.md\n\n- 增强 AI 行为\n\n\n\n\n\n### 11、todowrite(任务管理)\n\n\n作用:\n\n\n\n\n\n\n- 维护任务列表\n\n- 跟踪复杂流程\n\n\n\n\n\n### 12、webfetch(网页读取)\n\n\n作用:\n\n\n\n\n\n\n- 获取指定 URL 内容\n\n\n\n\n### 13、websearch(联网搜索)\n\n\n启用方式:\n\n\n\n\n\`\`\`\n\nOPENCODE_ENABLE_EXA=1 opencode\n\n\`\`\`\n\n\n作用:\n\n\n\n\n\n\n- 搜索互联网信息\n\n\n\n**区别:**\n\n\n\n\n\n\n- websearch:查找信息(发现)\n\n- webfetch:读取内容(获取)\n\n\n\n\n### 14、question(交互提问)\n\n\n作用:\n\n\n\n\n\n\n- 向用户提问\n\n- 收集需求\n\n\n\n适用于:\n\n\n\n\n\n\n- 需求不明确\n\n- 需要用户决策\n\n\n\n\n---\n\n\n\n## 四、自定义工具\n\n\n你可以定义自己的工具,让 AI 执行自定义逻辑。\n\n\n\n例如:\n\n\n\n\n\n\n- 调用内部 API\n\n- 操作数据库\n\n- 执行业务逻辑\n\n\n\n**本质:**让 LLM 调用函数\n\n\n\n\n---\n\n\n\n## 五、MCP 服务器(高级能力)\n\n\nMCP(Model Context Protocol)允许你接入外部系统:\n\n\n\n\n\n\n- 数据库\n\n- 第三方 API\n\n- 内部服务\n\n\n\n相当于给 AI 接上"外部能力"\n\n\n\n\n---\n\n\n\n## 六、底层机制(重要)\n\n\nOpenCode 使用 ripgrep 作为搜索引擎:\n\n\n\n\n\n\n- 遵循 .gitignore\n\n- 默认忽略 node_modules 等目录\n\n\n\n\n\n### 如何覆盖忽略规则\n\n\n创建文件:\n\n\n\n\n\`\`\`\n\n.ignore\n\n\`\`\`\n\n\n示例:\n\n\n\n\n\`\`\`\n\n!node_modules/\n!dist/\n!build/\n\n\`\`\`\n\n\n强制包含这些目录\n\n\n\n\n---\n\n\n\n## 七、最佳实践(强烈建议)\n\n\n\n\n\n- read / grep / glob → allow\n\n- edit → ask(开发阶段)\n\n- bash → ask(生产环境)\n\n- webfetch → allow\n\n\n\n**核心原则:**\n\n\n\n\n\n\n- 读取可以放开\n\n- 修改必须控制\n\n- 执行命令要谨慎\n\n\n \n \n \n \n \n\n \n \n [ OpenCode 规则(AGENTS.md)](http://www.runoob.com/opencode/opencode-agents-md.html)\n \n\n \n \n \n \n \n\n\n\n\n \n \n \n### 点我分享笔记\n\n \n \n \n \n \n \n [取消](https://www.runoob.comjavascript:;)\n\n\n \n \n \n \n \n \n\n\n 分享笔记\n \n \n \n \n \n \n\n 昵称昵称 (必填)\n 邮箱邮箱 (必填)\n 引用地址引用地址\n \n\n \n \n \n \n\n \n \n\n\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n\n\n\n\n\n 在线实例\n\n\n ·[HTML 实例](https://www.runoob.com/html/html-examples.html)\n\n\n ·[CSS 实例](https://www.runoob.com/css/css-examples.html)\n\n\n ·[JavaScript 实例](https://www.runoob.com/js/js-examples.html)\n\n\n ·[Ajax 实例](https://www.runoob.com/ajx/ajax-examples.html)\n\n\n ·[jQuery 实例](https://www.runoob.com/jquery/jquery-examples.html)\n\n\n ·[XML 实例](https://www.runoob.com/xml/xml-examples.html)\n\n\n ·[Java 实例](https://www.runoob.com/java/java-examples.html)\n\n\n\n\n\n 字符集&工具\n\n\n · [HTML 字符集设置](https://www.runoob.com/charsets/html-charsets.html)\n\n\n · [HTML ASCII 字符集](https://www.runoob.com/tags/html-ascii.html)\n\n\n · [JS 混淆/加密](https://www.jyshare.com/front-end/6939/)\n\n\n · [PNG/JPEG 图片压缩](https://www.jyshare.com/front-end/6232/)\n\n\n · [HTML 拾色器](https://www.runoob.com/tags/html-colorpicker.html)\n\n\n · [JSON 格式化工具](https://www.jyshare.com/front-end/53)\n\n\n · [随机数生成器](https://www.jyshare.com/front-end/6680/)\n\n\n\n\n 最新更新\n\n\n ·\n [\n OpenCode 自定义... ](http://www.runoob.com/opencode/opencode-custom-tools.html)\n\n\n ·\n [\n OpenCode Skills ](http://www.runoob.com/opencode/opencode-skills.html)\n\n\n ·\n [\n OpenCode MCP 服... ](http://www.runoob.com/opencode/opencode-mcp.html)\n\n\n ·\n [\n OpenCode LSP 服... ](http://www.runoob.com/opencode/opencode-lsp.html)\n\n\n ·\n [\n OpenCode 权限配置 ](http://www.runoob.com/opencode/opencode-permissions.html)\n\n\n ·\n [\n OpenCode 格式化... ](http://www.runoob.com/opencode/opencode-formatter.html)\n\n\n ·\n [\n OpenCode 自定义... ](http://www.runoob.com/opencode/opencode-commands.html)\n\n\n\n\n 站点信息\n\n\n ·\n [意见反馈](https://www.runoob.commailto:admin@runoob.com)\n\n\n ·\n [免责声明](https://www.runoob.com/disclaimer)\n\n\n ·\n [关于我们](https://www.runoob.com/aboutus)\n\n\n ·\n [文章归档](https://www.runoob.com/archives)\n\n\n\n\n\n\n\n **关注微信**\n\n\n\n \n\n\n\n\n\n\n Copyright © 2013-2026 **[菜鸟教程](https://www.runoob.com//www.runoob.com/)** \n **[runoob.com](https://www.runoob.com//www.runoob.com/)** All Rights Reserved. 备案号:[闽ICP备15012807号-1](https://beian.miit.gov.cn/)\n\n\n\n [ ](https://www.runoob.comjavascript:void(0))\n [](https://www.runoob.comjavascript:void(0))\n [](https://www.runoob.comjavascript:void(0))\n\n\n\n#### 微信关注\n\n `;
document.getElementById('md-content').innerHTML = marked.parse(md);
</script>
</body>
</html>