如果 2026 年只学一个 OpenCode 功能,我的答案很明确:一定是 Skills。
因为我自己用完 Skills 后,我发现 Skills 太实用了!强烈推荐!!!
你能想象吗?我用 OpenCode Skills 搭建了一个自动化代码生成流水线,把常规功能的开发时间从约 3 小时压缩到约 10 分钟(不含需求分析和人工调优)。
这个变化让我更确定一件事:2026 年真正拉开差距的,不是“谁更会和 AI 聊天”,而是“谁先把 AI 变成可复用的自动化工作流”。
2026 年有个非常明显的分水岭:
-
一批人还在网页里和 AI 聊天,问一句答一句。 -
另一批人已经把 AI 变成自动化生产线,交代任务后让流程自己跑完。
这个分水岭就叫 Skills。
会用 Skills 自动化工作流的人,效率通常会比不会用的人高 5-10 倍,而且差距还在继续拉大。
因为 Skills 是可以积累的:今天做一个,明天做一个,一年后你手里不是几条提示词,而是几十个可复用流程。
现在的效率差距已经很清楚了。
同样是做 AI 编程项目:
-
有人还在每次从空白开始,重复解释背景、重复修格式、重复返工。 -
有人已经把这些重复动作打包成 Skills,交代目标后让系统自动推进。
前者是在“使用AI”。
后者是在“管理AI产能”。
这两者看起来只差一步,实际是两个时代。
学一个提示词,收益是一次性的。
做一个 Skill,收益是长期的。
今天做一个代码生成,明天做一个测试用例,后天做一个文档整理。
时间越久,你手里的不是经验,而是资产。
Skills 不是只服务一个场景。
你在React项目里搭好的组件生成流程,稍改参数就能迁移到 Vue、Svelte、小程序。
你学到的不是“写这个组件的方法”,而是“稳定产出任何组件的方法”。
真正消耗你的,不是思考,而是重复决策。
Skills 把重复决策前置成规则,让你把精力放在高价值动作:
选架构、做判断、拍板设计。
OpenCode 的 Skills 并不是一上来就把所有工具说明都塞进上下文。它更像一种“渐进式披露(progressive disclosure)”机制:
-
启动时,模型只知道每个 skill 的两个信息:name 和 description -
只有当当前任务“确实需要某个 skill”时,OpenCode 才会把这个 skill 的完整内容加载进来(也就是 SKILL.md 里的执行指令、代码路径、注意事项等)
这件事带来的好处非常直接:
- 上下文负担明显降低
:不用每次对话都背着一堆工具说明跑 - token 花在刀刃上
:真正要执行时再加载,不执行就不浪费 - 技能库可以无限扩展
:你可以有几十上百个 skill,但不会因为“技能太多”导致系统变慢或模型记忆混乱
换句话说,Skills 的设计思想是:让 agent 像一个会“按需打开工具箱”的人,而不是让它一直背着整个工具仓库走路。
OpenCode 扫描 skills 的顺序(优先级从低到高):
-
Windows: %USERPROFILE%/.config/opencode/skills/ -
macOS/Linux: ~/.config/opencode/skills/
.opencode/skills/.claude/skills/(兼容 Claude Code) .agents/skills/(兼容 Agent 标准)
步骤很简单:
# 1. 创建技能目录mkdir -p .opencode/skills/my-skill# 2. 创建 SKILL.md 文件cat > .opencode/skills/my-skill/SKILL.md << 'EOF'---name: my-skilldescription: 一个用于帮助我处理特定任务的自定义技能license: MIT---# 我的自定义技能此技能可帮助您完成特定任务。## 指令1. 首先,执行此操作2. 然后,执行那个操作3. 最后,验证结果您可以引用支持文件,如 `scripts/helper.py` 或 `references/docs.md`。EOF# 3. 重启 OpenCode 或执行 /init 重新扫描
这也是 Skills 最“爽”的地方:你甚至不需要先写代码,而是直接在对话里把需求说清楚。
比如你可以这样提:
OpenCode 会按需求生成完整技能结构,常见包括:
这就是很多人说的“描述即代码”:你说清楚要什么能力,它给你产出可运行、可复用、可版本控制的技能包。
只要你说的话与 skill 的 description 语义匹配,agent 会自己决定是否调用。
例如你输入:
如果你的技能库里有react-component,而它的描述就是“自动生成React组件”,那 agent 通常会自动加载并执行。
这也是渐进式披露的价值:不需要你每次都写“我要调用某某工具”,模型能理解意图并自己选工具。
有时候你不想让 agent 自己猜(比如你有两个相似 skill),那就手动指定:
-
输入 @react-component,用方向键选择后回车 -
或者直接调用生成的工具函数,例如: skillsreactcomponent(type="form", name="LoginForm")
我个人习惯是:日常让它自动触发;当结果不稳定或需要强约束时,用 @ 点名。
在 OpenCode 里输入一句:
它会列出当前已加载的所有 skill 名称与描述。
排查“为什么没触发”“是不是没扫描到”时,这句话非常好用。
用“代码审查”这个场景最容易理解 Skills 的价值:很多人写代码后需要人工审查,既耗时又容易漏掉细节。
一个典型的代码审查 skill,可以由三部分组成:
创建文件.opencode/skills/code-review/SKILL.md:
---name: code-reviewdescription: 自动审查代码质量,检查潜在问题并提供改进建议license: MITcompatibility: opencodemetadata:audience: developersworkflow: code-review---## 功能- 检查代码风格是否符合团队规范- 识别潜在的安全风险(SQL注入、XSS等)- 分析性能瓶颈- 提供具体的改进建议和示例代码## 使用方法1. 提供要审查的代码文件或代码片段2. 指定审查重点(安全性、性能、可读性等)3. 获取详细的审查报告## 审查标准### 安全性- 输入验证是否充分- 是否存在 SQL 注入风险- XSS 防护是否到位### 性能- 是否存在不必要的重复计算- 数据库查询是否优化- 内存使用是否合理### 可读性- 变量命名是否清晰- 函数长度是否适中- 注释是否充分且准确
创建文件.opencode/skills/code-review/scripts/review.py:
#!/usr/bin/env python3"""代码审查工具支持检查:安全性、性能、代码风格"""import astimport refrom typing import List, Dict, Anyclass CodeReviewer:def __init__(self, code: str, language: str = "python"):self.code = codeself.language = languageself.issues = []def check_security(self):"""检查安全风险"""# SQL注入风险sql_patterns = [r"execute\s*\(\s*['\"]",r"executemany\s*\(\s*['\"]",r"cursor\.execute\s*\(\s*['\"]",]for pattern in sql_patterns:if re.search(pattern, self.code, re.IGNORECASE):self.issues.append({"type": "security","level": "high","message": "发现可能的SQL注入风险,请使用参数化查询","suggestion": "使用 ? 占位符或命名参数代替字符串拼接"})# XSS风险xss_patterns = [r"innerHTML\s*=",r"\.html\(",r"document\.write",]for pattern in xss_patterns:if re.search(pattern, self.code):self.issues.append({"type": "security","level": "medium","message": "发现可能的XSS风险","suggestion": "使用 textContent 或安全的模板引擎"})def check_performance(self):"""检查性能问题"""# 循环内的数据库查询if "for" in self.code and "SELECT" in self.code:lines = self.code.split('\n')for i, line in enumerate(lines):if "for" in line and i + 1 < len(lines):next_line = lines[i + 1]if "SELECT" in next_line or "query" in next_line:self.issues.append({"type": "performance","level": "high","message": "循环内执行数据库查询,可能导致性能问题","suggestion": "考虑批量查询或使用 JOIN"})# 不必要的重复计算if "re.compile" in self.code and "for" in self.code:self.issues.append({"type": "performance","level": "medium","message": "循环内重复编译正则表达式","suggestion": "将 re.compile 移到循环外部"})def check_style(self):"""检查代码风格"""try:tree = ast.parse(self.code)# 检查函数长度for node in ast.walk(tree):if isinstance(node, ast.FunctionDef):func_lines = len(node.body)if func_lines > 50:self.issues.append({"type": "style","level": "medium","message": f"函数 {node.name} 过长 ({func_lines} 行)","suggestion": "考虑拆分成多个小函数"})except SyntaxError:# 如果不是Python代码,跳过语法检查passdef review(self) -> Dict[str, Any]:"""执行完整审查"""self.check_security()self.check_performance()self.check_style()return {"total_issues": len(self.issues),"issues": self.issues,"summary": self._generate_summary()}def _generate_summary(self) -> str:"""生成总结报告"""high_count = sum(1 for issue in self.issues if issue["level"] == "high")medium_count = sum(1 for issue in self.issues if issue["level"] == "medium")return f"""审查完成!==========发现 {len(self.issues)} 个问题:- 高风险:{high_count} 个- 中风险:{medium_count} 个- 低风险:{len(self.issues) - high_count - medium_count} 个建议:1. 优先处理高风险问题2. 中风险问题在下次重构时解决3. 低风险问题可在代码审查中讨论"""# 使用示例if __name__ == "__main__":sample_code = """def get_user_data(user_id):conn = sqlite3.connect('database.db')cursor = conn.cursor()query = "SELECT * FROM users WHERE id = " + user_idcursor.execute(query)return cursor.fetchall()"""reviewer = CodeReviewer(sample_code)result = reviewer.review()print(result["summary"])
更新或创建opencode.json:
{"$schema": "https://opencode.ai/config.json","permission": {"skill": {"*": "allow","code-review": "allow","internal-*": "deny","experimental-*": "ask"}},"provider": {"openai": {"apiKey": "${OPENAI_API_KEY}","models": ["gpt-4", "gpt-3.5-turbo"]},"anthropic": {"apiKey": "${ANTHROPIC_API_KEY}","models": ["claude-3-5-sonnet", "claude-3-haiku"]}}}
完成后你就可以在 OpenCode 里直接说:
agent 会走完整流程:识别需求 → 加载 skill → 执行代码审查 → 输出详细报告。
OpenCode 的 skill 权限有三种配置状态:
支持通配符模式配置:
internal-*:匹配所有 internal 开头的 skill experimental-*:匹配所有 experimental 开头的 skill *:匹配所有 skill
如果 skill 没有生效,按照这个清单检查:
SKILL.md(全大写)
name和description
opencode.json是否设置为deny
今天你领先 10%,明天别人能追上。但你把能力做成 Skills 后,别人追的是你的系统,不是你的单篇代码。
这就是我判断 2026 学习 OpenCode Skills 的原因:
真正拉开差距的,不是谁更会提问,而是谁先把 AI 变成自己的生产系统。
如果你今年打算用 OpenCode 提升编程效率,我建议是先学 Skills。
别再把 AI 当聊天工具,开始把它当流程引擎。先做第一个 Skill。然后做第二个。
一年后你会感谢现在这个决定。
创见AI实验室,我们不只是介绍工具,我们共同创造工作方式的未来。





