Solon v3.10.0

skills - CliSkill 对接海量 Claude Agent Skills

</> markdown
2026年3月18日 下午7:35:13

在 Solon AI 生态中,CliSkillProvider 是一个强大的 CLI 综合技能组件。它不仅提供了基础的终端交互能力,更重要的是,它在设计规范上深度对齐了 Claude Code 的执行协议。

这意味着,您可以直接复用海量的开源 AI 技能插件,快速打造一个类似于 Claude Code CLI 的智能终端应用。

相关依赖包:solon-ai-skill-cli

1、什么是 CliSkill?能干什么?

CliSkillProvider 是一个基于 Pool-Manager(挂载池管理) 模型设计的 AI 技能提供者。它包含两个核心子技能(可以各自独立使用):

  • TerminalSkill:充当 Agent 的“手”和“眼”,负责文件操作(ls, read, write)和命令执行(bash)。
  • ExpertSkill:负责解析挂载池中的 SKILL.md,为 Agent 提供领域专家的指令指引。

它能干什么?

  • 对接生态:直接读取并运行符合 Claude Code 规范的技能包(自动识别逻辑路径 @pool)。
  • 文件管理:允许 Agent 在授权工作目录内进行 lsreadgrep 以及精准的文件编辑(edit)。
  • 安全执行:提供沙盒模式,严禁 Agent 越界访问系统绝对路径,支持通过 undo 撤销错误修改。
  • 环境隔离:通过“只读挂载池(Pool)”引入外部工具或脚本,确保核心资源不被篡改。

2、快速开始

第一步:准备技能包

在使用 CliSkill 之前,您需要下载一批符合 Claude Code 规范的技能插件。这些插件目录中通常包含一个 SKILL.md 文件,用于描述工具的用法。

第二步:集成到 Agent

通过 CliSkill 挂载您的技能目录,并配置 ReActAgent

// 指向您下载的技能包或项目工作目录
CliSkillProvider cliProvider = new CliSkillProvider("/WORK/my_project")
        .skillPool("@skills", "/path/to/opencode-skills");

ReActAgent agent = ReActAgent.of(LlmUtil.getChatModel())
        .name("SolonCodeAgent")
        .defaultSkillAdd(cliProvider) // 注入技能组
        .maxSteps(30) 
        .build();

// 发起任务:Agent 会自动 ls 目录,阅读代码,并根据需要调用 bash 执行指令
agent.prompt("帮我把当前目录下的所有 .wav 文件转换成 .mp3");

3、标准工具映射说明

CliSkillProvider 内置了以下标准工具,Agent 会根据上下文自动选择:

工具映射说明
ls列出目录内容,支持递归 recursive 树状展示。
read分页读取文件内容,自动识别编码,支持大文件。
grep / glob在工作区或技能池中进行全文搜索或通配符文件查找。
write / edit创建文件或精准文本替换(需提供唯一的 old_str)。
undo撤销最后一次对特定文件的修改。
bash执行非交互式 Shell 指令。支持自动将 @pool 路径转为环境变量。
skilllist列出所有已挂载专家技能池中的可用清单及简要描述。
skillsearch核心检索:在海量技能库中搜索关键字,支持多词匹配。
skillread深度阅读:读取特定技能的详细说明书(SKILL.md)及文件别名映射。
skillrefresh重新扫描挂载池,实时更新专家技能列表。

4、进阶使用:多技能池挂载

如果您有多个不同来源的技能包,可以使用 mountPool 进行隔离挂载:

CliSkillProvider cliProvider = new CliSkillProvider("/WORK/my_project")
        .skillPool("@media", "/path/to/ffmpeg-skills")
        .skillPool("@ops", "/path/to/deploy-scripts");

Agent 在执行时,可以通过虚拟路径(如 @media/extract_audio.sh)安全地访问这些只读资源。

5、沙盒模式

也叫:命令行沙盒模式。启用后(默认是启用的):只有工作区内的文件有写权限,且只能使用相对位置(或虚拟位置)。

cliProvider.getTerminalSkill().setSandboxMode(true);