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

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


相关依赖包：[solon-ai-skill-cli](/article/1358)


### 1、什么是 CliSkill？能干什么？

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

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

它能干什么？

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


### 2、快速开始

#### 第一步：准备技能包

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

* 推荐资源：[https://github.com/zrt-ai-lab/opencode-skills](https://github.com/zrt-ai-lab/opencode-skills) 开源仓库 您可以将其克隆到本地目录。

#### 第二步：集成到 Agent

通过 `CliSkill` 挂载您的技能目录，并配置 `ReActAgent`。


```java
// 指向您下载的技能包或项目工作目录
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 进行隔离挂载：


```java
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、沙盒模式

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

```java
cliProvider.getTerminalSkill().setSandboxMode(true);
```
