189 lines
5.1 KiB
Markdown
189 lines
5.1 KiB
Markdown
|
|
# Python 编程助手 CLI
|
|||
|
|
|
|||
|
|
`CLI工具` `编程助手` `AI代理` `MCP服务器` `Python`
|
|||
|
|
|
|||
|
|
# 编程助手
|
|||
|
|
|
|||
|
|
编程助手是一个基于 Python 的命令行工具,专为编程工作流设计。它集成了基于边界的智能代理循环、内置本地工具,以及可选的外部 MCP 服务器支持。
|
|||
|
|
|
|||
|
|
## 核心特性
|
|||
|
|
|
|||
|
|
- 内置本地工具:Shell 命令、Python 执行、文件系统操作、TODO 管理和后台任务工具。
|
|||
|
|
- 支持通过 stdio 或 SSE 连接外部 MCP 服务器。
|
|||
|
|
- 基于 Prompt-toolkit 的交互式命令行界面。
|
|||
|
|
- 内置默认指令和技能包,支持配置额外的技能目录。
|
|||
|
|
- 无内置沙箱隔离;如需隔离,请在外部沙箱中运行。
|
|||
|
|
|
|||
|
|
## 环境要求
|
|||
|
|
|
|||
|
|
- Python 3.12+。
|
|||
|
|
- 推荐使用 `uv` 进行安装和运行。
|
|||
|
|
- 所选 OpenAI 兼容服务商的 API 密钥,例如 `OPENAI_API_KEY` 或 `OPENROUTER_API_KEY`。
|
|||
|
|
- 外部 MCP 服务器的可选依赖,例如基于 NPM 的服务器需要 Node.js/npm。
|
|||
|
|
|
|||
|
|
## 安装
|
|||
|
|
|
|||
|
|
使用 `uv` 安装:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
uv tool install coding-assistant-cli
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
本地开发:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
uv sync
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
启动交互式会话:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
coding-assistant --model "openai/gpt-5-mini"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
查看可用选项:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
coding-assistant --help
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
公开支持的接口为 CLI 命令行界面。内部 Python 模块可能在不通知的情况下发生变更。
|
|||
|
|
|
|||
|
|
## CLI 参数说明
|
|||
|
|
|
|||
|
|
- `--model`:选择使用的模型(必填)。
|
|||
|
|
- `--instructions`:追加自定义指令。
|
|||
|
|
- `--mcp-servers`:以 JSON 字符串形式配置外部 MCP 服务器。
|
|||
|
|
- `--trace`:记录模型请求和响应的追踪日志。
|
|||
|
|
- `--wait-for-debugger`:在 `1234` 端口等待调试器连接。
|
|||
|
|
- `--skills-directories`:加载额外的技能目录。
|
|||
|
|
|
|||
|
|
CLI 为交互式模式。启动时会打印一个本地 WebSocket 端点;当会话空闲时,远程客户端可通过该端点向同一会话发送提示、接收流式更新并取消当前运行。
|
|||
|
|
|
|||
|
|
交互式 CLI 还支持以下命令:
|
|||
|
|
|
|||
|
|
- `/exit`
|
|||
|
|
- `/help`
|
|||
|
|
- `/compact`
|
|||
|
|
- `/image <路径或URL>`
|
|||
|
|
|
|||
|
|
## MCP 服务器
|
|||
|
|
|
|||
|
|
通过重复使用 `--mcp-servers` 参数并传入 JSON 字符串来配置 MCP 服务器。同时支持基于 stdio 的服务器和远程 SSE 服务器。
|
|||
|
|
|
|||
|
|
stdio 服务器示例:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"name": "filesystem",
|
|||
|
|
"command": "npx",
|
|||
|
|
"args": ["-y", "@modelcontextprotocol/server-filesystem", "{home_directory}"]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
SSE 服务器示例:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"name": "remote-mcp",
|
|||
|
|
"url": "http://localhost:8000/sse"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
参数支持变量替换,可用变量包括 `{home_directory}` 和 `{working_directory}`。
|
|||
|
|
|
|||
|
|
示例:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
coding-assistant \
|
|||
|
|
--model "openrouter/openai/gpt-4o-mini" \
|
|||
|
|
--mcp-servers \
|
|||
|
|
'{"name": "filesystem", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "{home_directory}"]}' \
|
|||
|
|
'{"name": "fetch", "command": "uvx", "args": ["mcp-server-fetch"]}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 内置本地工具
|
|||
|
|
|
|||
|
|
默认 CLI 包含以下本地工具:
|
|||
|
|
|
|||
|
|
- `shell_execute`:执行 Shell 命令。
|
|||
|
|
- `python_execute`:运行 Python 代码片段。
|
|||
|
|
- `filesystem_write_file` 和 `filesystem_edit_file`:针对性的文件修改操作。
|
|||
|
|
- `todo_add`、`todo_list_todos` 和 `todo_complete`:TODO 任务跟踪。
|
|||
|
|
- `tasks_list_tasks`、`tasks_get_status`、`tasks_get_output`、`tasks_kill_task` 和 `tasks_remove_task`:后台任务管理。
|
|||
|
|
|
|||
|
|
核心运行时还内置了辅助工具,例如 `compact_conversation` 和 `redirect_tool_call`。
|
|||
|
|
|
|||
|
|
## 技能(Skills)
|
|||
|
|
|
|||
|
|
编程助手目前内置了一个示例技能:
|
|||
|
|
|
|||
|
|
- `example`
|
|||
|
|
|
|||
|
|
该示例用于演示技能打包机制和 `SKILL.md` 的预期布局。项目有实际内置技能后,可以替换或删除此示例。
|
|||
|
|
|
|||
|
|
通过 `--skills-directories` 可添加更多技能。每个额外的技能目录下应包含含有 `SKILL.md` 文件的子目录:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
skills-root/
|
|||
|
|
├── my-skill/
|
|||
|
|
│ ├── SKILL.md
|
|||
|
|
│ ├── references/
|
|||
|
|
│ └── scripts/
|
|||
|
|
└── another-skill/
|
|||
|
|
└── SKILL.md
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
默认 CLI 提供以下技能工具:
|
|||
|
|
|
|||
|
|
- `skills_list_resources`
|
|||
|
|
- `skills_read`
|
|||
|
|
|
|||
|
|
这些工具仅暴露内置及已配置技能目录中的文件。
|
|||
|
|
|
|||
|
|
技能名称在内置技能和用户自定义技能中必须唯一。如发生冲突,CLI 会立即报错并提示冲突目录。
|
|||
|
|
|
|||
|
|
## 外部沙箱隔离
|
|||
|
|
|
|||
|
|
本项目已移除内置沙箱功能。如需文件系统隔离,请在外部沙箱(如 `bubblewrap`)中运行助手。
|
|||
|
|
|
|||
|
|
参见 [docs/sandboxing.md](docs/sandboxing.md) 获取最简 `bubblewrap` 使用示例。
|
|||
|
|
|
|||
|
|
## Shell 与 Python 工具行为说明
|
|||
|
|
|
|||
|
|
内置的 `shell_execute` 和 `python_execute` 工具:
|
|||
|
|
|
|||
|
|
- 支持多行脚本;
|
|||
|
|
- 将 stderr 合并到 stdout 输出;
|
|||
|
|
- 仅在非零退出码时在输出前加上退出码头部信息;
|
|||
|
|
- 支持 `truncate_at` 参数以限制输出大小;
|
|||
|
|
- 支持 `timeout` 参数,默认超时为 30 秒;
|
|||
|
|
- 可将长时间运行的任务交给后台任务管理器处理。
|
|||
|
|
|
|||
|
|
不支持交互式终端程序,例如 `git rebase -i`。
|
|||
|
|
|
|||
|
|
## 开发
|
|||
|
|
|
|||
|
|
运行测试:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
just test
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
运行代码检查、格式化和类型检查:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
just lint
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
还提供集成测试目标:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
just test-integration
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 许可证
|
|||
|
|
|
|||
|
|
MIT
|