Skills System¶
Skills 是 Agentica 的"提示即能力"系统——通过 Markdown 文件定义的指令,按需注入到 Agent 的 System Prompt 中,赋予 Agent 特定领域的专业知识和工作流程。
核心理念:Skills 是用户自定义内容,不是框架内置的。框架只提供加载机制,你来定义能力。对 Agentica 来说,框架负责运行时、工具链和记忆基础设施,Skill 则负责把特定 workflow 注入进去,例如代码评审、研究流程,或 learn-from-experience 这类 self-learn 策略。
核心概念¶
- Skill = 一个包含
SKILL.md的目录 SKILL.md= YAML frontmatter(元数据)+ Markdown body(指令内容)- 运行时由
SkillTool按需加载,注入到 System Prompt - 模型无关——纯文本指令,适用于所有 LLM
SKILL.md 格式¶
---
name: code_reviewer
description: "代码审查专家,检查安全性、性能和可读性"
trigger: /review # 可选:触发命令(用于 CLI 斜杠命令)
requires: # 可选:前置依赖
- git
allowed-tools: # 可选:限制可用工具
- read_file
- grep
metadata:
emoji: "🔍" # 可选:CLI 显示图标
---
# Code Reviewer
你是一个代码审查专家。审查代码时遵循以下原则:
## 审查重点
1. **安全性** — 检查潜在的安全漏洞(SQL 注入、XSS、硬编码密钥等)
2. **性能** — 识别性能瓶颈(N+1 查询、不必要的循环、内存泄漏)
3. **可读性** — 代码是否易于理解,命名是否清晰
4. **最佳实践** — 是否遵循语言惯用法和项目规范
## 输出格式
对每个问题提供:
- **严重程度**: Critical / Warning / Info
- **位置**: 文件名 + 行号
- **问题描述**: 具体说明问题
- **修复建议**: 附带修复代码示例
Frontmatter 字段¶
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name |
str |
✓ | Skill 唯一标识,小写加连字符 |
description |
str |
✓ | 简短描述(LLM 用于决策是否激活) |
trigger |
str |
— | CLI 斜杠命令(如 /review) |
requires |
List[str] |
— | 前置依赖(命令行工具等) |
allowed-tools |
List[str] |
— | 限制可用工具白名单 |
metadata.emoji |
str |
— | CLI 显示图标 |
Skill 目录结构¶
.agentica/skills/ # 项目级 skills(推荐放这里)
code-reviewer/
SKILL.md # 必须
scripts/ # 可选:辅助脚本
run_lint.sh
references/ # 可选:参考文档
style-guide.md
assets/ # 可选:图片、数据等
~/.agentica/skills/ # 用户级 skills(跨项目共用)
git-commit/
SKILL.md
/opt/agent-skills/learn-from-experience/ # 外部托管 skill(可选)
SKILL.md
搜索路径(优先级从高到低):
.claude/skills/(项目级).agentica/skills/(项目级)AGENTICA_EXTRA_SKILL_PATH指定的外部目录(支持用:分隔多个路径,也支持直接指向单个 skill 目录)~/.claude/skills/(用户级)~/.agentica/skills/(用户级)
同名 Skill,项目级覆盖用户级。
加载与使用¶
方式一:SkillTool(程序化)¶
from agentica import Agent, OpenAIChat
from agentica.tools.skill_tool import SkillTool
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
tools=[SkillTool()], # 自动扫描标准目录
)
# 也可指定自定义目录
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
tools=[SkillTool(custom_skill_dirs=["./my-skills/web-research"])],
)
也可以直接挂外部 skill 仓库,而不必复制到项目目录:
当路径本身就是一个包含 SKILL.md 的 skill 目录时,SkillLoader 会直接加载它。
方式二:DeepAgent 内置(CLI 推荐)¶
DeepAgent 现在默认也会自动加载当前工作目录下的 mcp_config.json/yaml/yml,所以 CLI 里不需要再单独把 MCP 打开,skills 和 MCP 都是开箱即用。
安装外部 skill 集合:
这个命令会:
- 克隆远程仓库,或读取本地目录
- 自动发现根目录 SKILL.md、skills/、.agentica/skills/、.claude/skills/ 下的 skill
- 把发现到的 skill 安装到 ~/.agentica/skills/
如果你已经下载到本地,也可以直接安装本地 repo:
如果你安装到自定义目录而不是标准搜索路径,记得把该目录加入 AGENTICA_EXTRA_SKILL_PATH,否则 CLI 刷新后也不会自动发现它。
如果你已经进入交互式 CLI,则直接使用 slash command,不用退出:
> /extensions install https://github.com/obra/superpowers
> /extensions list
> /extensions remove learn-from-experience
> /extensions reload
如果你希望 Agent 带有持续学习 workflow,推荐做法是:
- 用 DeepAgent 作为默认运行时
- 把 learn-from-experience 安装到 ~/.agentica/skills/,或通过 AGENTICA_EXTRA_SKILL_PATH 指向外部目录
- 再配合 WorkspaceMemoryConfig(sync_memories_to_global_agent_md=True),把确认过的偏好同步进 ~/.agentica/AGENTS.md
方式三:按需激活(RunConfig 白名单)¶
from agentica.run_config import RunConfig
result = await agent.run(
"审查这段代码",
config=RunConfig(enabled_skills=["code-reviewer"]),
)
CLI 中使用¶
> /skills # 列出所有可用 skills
> /extensions install <repo-or-path> # 安装并自动刷新当前 session
> /extensions list # 查看已安装扩展
> /extensions remove <skill-name> # 删除已安装 skill
> /extensions reload # 重新扫描磁盘并刷新当前 session
> 用 code-reviewer skill 审查 @main.py
> /review @authentication.py # 用 trigger 激活(如果配置了)
示例 Skills¶
以下是几个可直接复用的 Skill 模板,放到 .agentica/skills/ 即可使用。
Git Commit(规范提交)¶
---
name: git-commit
description: "创建符合 Conventional Commits 规范的 git commit。自动分析变更,生成格式正确的提交信息。"
trigger: /commit
requires:
- git
---
# Git Commit Skill
创建符合 [Conventional Commits](https://www.conventionalcommits.org/) 规范的 git commit。
## 提交信息格式
[optional body]
[optional footer]
**类型(type)**:
- `feat`: 新功能
- `fix`: Bug 修复
- `docs`: 文档变更
- `refactor`: 重构(不新增功能,不修 bug)
- `perf`: 性能优化
- `test`: 测试相关
- `chore`: 构建/工具链变更
## 操作步骤
1. 运行 `git diff --staged` 查看已暂存的变更(如无暂存,先用 `git add`)
2. 分析变更内容,确定 type 和 scope
3. 生成简洁的 subject(不超过 50 字符,动词开头,不加句号)
4. 如变更复杂,添加 body 解释 What/Why
5. 执行 `git commit -m "type(scope): subject"`
## 规则
- Subject 用英文,动词原形开头(Add, Fix, Update,而非 Added/Fixed)
- Scope 用小写,反映变更的模块(auth, api, cli 等)
- 一个 commit 只做一件事,不要打包不相关的变更
- 不用 `-F` 或 heredoc 写多行 message,直接用 `-m`
GitHub CLI(GitHub 操作)¶
---
name: github
description: "使用 gh CLI 与 GitHub 交互:管理 Issues、PR、CI 运行和仓库操作。"
trigger: /github
requires:
- gh
---
# GitHub Skill
使用 `gh` CLI 与 GitHub 交互。**始终指定 `--repo owner/repo`**(除非已在 git 目录中)。
## Pull Requests
```bash
# 查看 PR 列表
gh pr list --repo owner/repo
# 查看 PR 详情和 CI 状态
gh pr view 123 --repo owner/repo
gh pr checks 123 --repo owner/repo
# 创建 PR
gh pr create --title "feat: add feature" --body "Description" --repo owner/repo
# 合并 PR
gh pr merge 123 --squash --repo owner/repo
Issues¶
# 创建 Issue
gh issue create --title "Bug: xxx" --body "Steps to reproduce..." --repo owner/repo
# 列出 Issues
gh issue list --state open --label bug --repo owner/repo
# 关闭 Issue
gh issue close 456 --repo owner/repo
CI/CD¶
# 查看最近的 workflow runs
gh run list --repo owner/repo
# 查看 run 详情和日志
gh run view 789 --log --repo owner/repo
# 重新触发失败的 run
gh run rerun 789 --failed --repo owner/repo
### Code Reviewer(代码审查)
```markdown
---
name: code-reviewer
description: "专业代码审查,重点检查安全性、性能、可读性和最佳实践。适用于 PR review 和日常代码改进。"
trigger: /review
---
# Code Reviewer Skill
## 审查流程
1. 读取目标文件(`read_file`)或查看 diff(`execute("git diff HEAD~1")`)
2. 按优先级识别问题:Critical > Warning > Info
3. 生成结构化报告
## 审查维度
### 安全性(Critical 优先)
- 硬编码密钥、密码、token
- SQL 注入、命令注入风险
- 未验证的用户输入
- 敏感数据日志泄露
### 性能
- N+1 查询
- 不必要的全表扫描
- 大对象在循环中创建
- 缺少缓存的热路径
### 可读性
- 函数超过 50 行
- 变量/函数命名不清晰
- 缺少必要的注释(WHY,不是 WHAT)
- 嵌套超过 3 层
### 最佳实践
- 异常处理是否合理
- 资源是否正确释放(context manager)
- 测试覆盖是否充分
## 输出格式
审查报告:{文件名}¶
Critical 🔴¶
- [行号] 问题描述
修复:
具体代码
Warning 🟡¶
- [行号] 问题描述
Info 🟢¶
- [行号] 建议
总结¶
整体质量评分:X/10 主要改进点:...
创建自己的 Skill¶
好的 Skill 具备三个要素:
1. 精确的 description(LLM 用它决定是否激活这个 skill)
# 差:太模糊
description: "帮助写代码"
# 好:明确说明适用场景
description: "Python 异步代码专家,处理 asyncio、aiohttp、FastAPI 相关问题。包含最佳实践、常见陷阱和性能调优指南。"
2. 结构化的指令(让 LLM 知道"做什么"和"怎么做")
# Skill 名称
## 什么时候用
明确说明触发场景...
## 操作步骤
1. 第一步...
2. 第二步...
## 规则/约束
- 必须做...
- 不能做...
## 输出格式
期望的输出结构...
3. 具体的示例(比抽象描述更有效)
在代码中集成 Skill¶
import asyncio
from agentica import Agent, OpenAIChat
from agentica.tools.skill_tool import SkillTool
async def main():
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
tools=[
SkillTool(
# 自动扫描 .agentica/skills/ 和 ~/.agentica/skills/
# 加上指定的自定义目录
custom_skill_dirs=["./team-skills/data-engineering"],
)
],
)
# Agent 可以通过 list_skills 查看可用 skills
# 通过 get_skill_info 加载具体 skill 的指令
result = await agent.run("用 data-engineering skill 帮我设计数据管道")
print(result.content)
asyncio.run(main())