技术文档

Angles Code CLI 的完整技术参考:架构、安装、构建、配置、Provider、工具命令、系统提示与安全策略。

概述 #

Angles Code CLI 是一个基于终端的 agentic 编码助手,用 Rust 编写,作为单二进制分发。它把 LLM 变成一个能在你的文件系统、终端、Git 仓库里真正干活的 agent——通过一组 angles-* 工具命令操作环境,配合可配置的审批策略在自主与安全之间平衡。

属性说明
语言 / 运行时Rust 2021,单二进制,无运行时依赖
Rust 最低版本1.75.0install.sh 会校验并自动升级 rustup)
分发预编译二进制 (tar.gz) / 源码编译 / npm 安装器 (@angleschina/angles)
平台Linux (x64 / arm64 / armv7 / riscv64) · macOS (Intel / Apple Silicon) · Windows · WSL2 · Alpine
Provider11 家预设 + 自定义(OpenAI / Anthropic / Gemini / DeepSeek / Grok / MiniMax / OpenRouter / Qwen / GLM / Kimi 等)
API 协议chat(OpenAI 兼容)/ anthropic(Messages)/ gemini(原生)三选一
工具30+ 个 angles-* 内置工具,覆盖文件、目录、终端、网络、Git
许可证GPL-3.0

架构 #

源码组织为 9 个 Rust 模块,职责清晰、单一:

模块职责
main.rs入口点与命令路由,初始化 tokio 运行时
cli.rsClap CLI 定义、子命令与 help 文本
config.rs~/.angles/config.json 的加载 / 保存 / 展示
provider.rs11 家 Provider 注册表(从 providers.toml 构建),含 base_url 与默认模型
gateway.rsTUI 设置向导(基于 dialoguer),五步交互式配置
instructions.rs系统提示模板渲染,Handlebars 模板 + {{variable}} 注入
api.rsAPI 客户端(OpenAI / Anthropic / Gemini)+ 流式响应 + 工具调用循环
search.rs联网搜索引擎 URL 构造器
tools.rs30+ 个 angles-* 工具实现 + doctor 诊断
运行时数据
配置目录 ~/.angles/,二进制位于 ~/.local/bin/angles(Windows: %USERPROFILE%\.local\bin\angles.exe)。所有状态本地化,不上报任何服务器。

仓库结构:

angles-cli/
├── src/
│   ├── main.rs          # 入口 & 命令路由
│   ├── cli.rs           # Clap CLI 定义
│   ├── config.rs        # 配置 load/save/display
│   ├── provider.rs      # 11 provider 注册表
│   ├── gateway.rs       # TUI 向导 (dialoguer)
│   ├── instructions.rs  # 系统提示模板 (handlebars)
│   ├── api.rs           # API client + 流式 + 工具循环
│   ├── search.rs        # 搜索 URL 构造
│   └── tools.rs         # 30+ 工具 + doctor
├── instructions.txt     # 13K 系统提示模板
├── providers.toml       # Provider 数据源
├── gateway-flow.md      # TUI 向导流程规范
├── AGENTS.md            # Agent 工具参考
├── Cargo.toml / Makefile / Cross.toml
└── install.sh / install.ps1

安装 #

四种官方安装方式,装到的二进制完全相同:

1. npm(全平台推荐)

npm i -g @angleschina/angles && angles install

npm 包内含 bin/angles.js 启动器与 install.sh / install.ps1angles install 子命令根据平台调用对应脚本安装 Rust 二进制;其它子命令转发给已安装的二进制。postinstall 钩子只打印提示,不强制编译,不会破坏 npm install 体验。

2. curl 单行(Linux / macOS / WSL2)

curl -fsSL https://raw.githubusercontent.com/ZSJ305/angles-cli/main/install.sh | bash

3. wget 单行

wget -qO- https://raw.githubusercontent.com/ZSJ305/angles-cli/main/install.sh | bash

4. PowerShell 单行(原生 Windows)

irm https://raw.githubusercontent.com/ZSJ305/angles-cli/main/install.ps1 | iex
root 要求(install.sh)
install.sh 当前要求 root 运行(sudo ... | sudo bash),因为它需要调用包管理器安装编译工具链。Windows 用户被自动引导到 install.ps1

安装器内部流程

install.sh / install.ps1 共享同一套四步流程,带进度条与剩余时间估算:

  1. 准备环境 — 先探测预编译二进制 URL 是否可用:
    • ✅ 可用 → 跳过编译工具 / Git / Rust 安装,直接进 Step 2 下二进制
    • ❌ 不可用 → 装 apt / apk / dnf / yum / pacman / zypper / emerge / xbps / homebrew / winget / VS Build Tools + Git + Rust (≤ 1.75 则升级)
  2. 安装 Angles — 优先拉取预编译 tar.gz(angles-<os>-<arch>.tar.gz),失败则 clone 仓库从源码 cargo build --release
  3. 配置 PATH — 写入 ~/.bashrc / .zshrc / .fish / .nu,可选 symlink 到 /usr/local/bin
  4. 验证 & 初始配置 — 执行 angles --version 确认,首次安装(无 config.json)触发 angles gateway 向导

支持的环境变量:NO_PROMPT=1(跳过交互)、NO_GATEWAY=1(跳过向导)、DRY_RUN=1(只演示不改)、ANGLES_REPO(自定义仓库)、ANGLES_INSTALL_DIR(自定义安装目录)。

预编译支持矩阵

不是所有平台都有预编译二进制——没有的会 fallback 到源码编译(需要 Rust 工具链)。下表列出 Release v0.1.0 当前覆盖的情况:

平台预编译二进制安装方式
Linux arm64 (musl 静态)只下载,无需 root / Rust
Linux x64 (musl 静态)只下载,无需 root / Rust
macOS arm64 (Apple Silicon)只下载,无需 Xcode CLT / Rust
macOS x64 (Intel)只下载,无需 Xcode CLT / Rust
Windows x64无(规划中)fallback 编译:需 VS Build Tools + Rust
Linux armv7fallback 编译:需 Rust 交叉编译
Linux riscv64fallback 编译:需 Rust 交叉编译
为什么分两种路径
有预编译的平台(Linux/macOS 4 个 target)整个安装只需几秒下载一个 ~1.6 MB tar.gz,iSH / 树莓派 / Alpine / 无 root 环境都能直接装。没预编译的平台(Windows / armv7 / riscv64)必须装重型工具链源码编译。Windows 预编译是 v0.2 的重点。

源码构建 #

本地构建

# 装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# clone & build
git clone https://github.com/ZSJ305/angles-cli.git
cd angles-cli
cargo build --release

# 安装到 PATH
cp target/release/angles ~/.local/bin/

交叉编译(via Makefile)

make 目标目标三元组说明
make setup-arm64 && make arm64aarch64-unknown-linux-muslLinux ARM64 静态二进制
make setup-x64 && make x64x86_64-unknown-linux-muslLinux x86_64 静态二进制
make macos-arm64aarch64-apple-darwinmacOS Apple Silicon(仅 macOS 上可构建)

Release profile

Cargo.toml 的 release profile 已优化体积:opt-level = "s"lto = truestrip = true

快速开始 #

# 首次配置(交互式向导)
angles gateway

# 默认进入对话
angles

# 非交互模式,执行单条指令后退出
angles exec "写一个 Python HTTP 服务器"

# 查看当前配置
angles config

# 查看所有命令
angles help

# 诊断安装 / 配置 / 网络
angles doctor

config.json 字段参考 #

配置存储在 ~/.angles/config.json。完整 schema:

{
  "language": "zh-CN",              // 全局默认响应语言
  "provider": "glm",              // provider id,见 providers.toml
  "base_url": "https://api.siliconflow.cn/v1",
  "wire_api": "chat",             // chat | anthropic | gemini
  "model": "zai-org/GLM-5.2",
  "api_key": "",                  // 空时读 ANGLES_API_KEY 环境变量
  "max_tokens": 16384,            // 单次回复 token 上限
  "daily_token_budget": 1000000, // 每日 token 预算
  "agent_persona": "你是一个专业、高效的编码助手。",
  "search_engine": "bing",        // bing | baidu | google | yahoo | custom | disabled
  "search_engine_url": "",         // custom 时使用,{q} 会被替换
  "approval_policy": "untrusted",  // never | untrusted | on-request
  "daily_tokens_used": 0,        // 当日已消耗 token(运行时维护)
  "daily_reset_date": "2026-07-20" // 每日预算重置日期
}
字段类型说明
languageenumzh-CN / en-US / ja-JP,决定 agent 默认响应语言
providerstringProvider id,对应 providers.toml[[providers]] id
base_urlstringAPI 主机地址(含版本路径,如 /v1
wire_apienumchat OpenAI 兼容 · anthropic Messages API · gemini 原生 API
modelstring模型 ID(如 gpt-4.1claude-sonnet-4-20250514
api_keystring留空时从环境变量 ANGLES_API_KEY 读取
max_tokensint单次回复 token 上限,默认 16384
daily_token_budgetint每日总预算,默认 1000000;接近时 agent 会警告
agent_personatext2-3 句话描述期望行为,注入系统提示 {{agent_persona}}
search_engineenum联网搜索引擎
search_engine_urlstringcustom 时使用,{q} 占位符替换为查询词
approval_policyenum工具调用审批策略
daily_tokens_usedint运行时维护,每日重置
daily_reset_datedate字符串日期,跨日时自动清零已用

Gateway 设置向导 #

angles gateway 启动五步 TUI 向导(基于 dialoguer),任何配置字段都可在向导中修改:

  1. 语言 — 中文 / English / 日本語,切换后续界面与 agent 默认语言
  2. 模型提供方 — 11 家预设 + 自定义;选预设自动填 base_url 进入 Key 输入,选自定义先填 URL/Key/Model/协议
  3. 模型选择 — 从 providers.toml 读取每个 provider 的预设列表,最后一项允许手动输入任意 model ID
  4. 偏好 — max_tokens、daily_token_budget、agent_persona 文本、approval_policy
  5. 联网搜索 — bing / baidu / google / yahoo / 自定义 URL / 关闭;自定义时填 https://.../?q={q} 模板

完成后向导写入 ~/.angles/config.json,显示配置摘要,并提示运行 angles chat

Provider 体系 #

11 家预置 + 自定义,全部从 providers.toml 加载到 provider.rs 注册表:

id名称API Host协议默认模型
openaiOpenAIapi.openai.com/v1chatgpt-4.1
claudeClaude (Anthropic)api.anthropic.comanthropicclaude-sonnet-4-20250514
geminiGemini (Google)generativelanguage.googleapis.com/v1betageminigemini-2.5-pro
deepseekDeepSeekapi.deepseek.com/v1chatdeepseek-chat
grokGrok (xAI)api.x.ai/v1chatgrok-4
minimaxMiniMaxapi.minimax.chat/v1chatMiniMax-M1
openrouterOpenRouteropenrouter.ai/api/v1chatopenrouter/auto
qwen通义千问 Qwendashscope.aliyuncs.com/compatible-mode/v1chatqwen3-235b-a22b
glm智谱 GLMapi.siliconflow.cn/v1chatzai-org/GLM-5.2
kimiKimi (Moonshot)api.moonshot.cn/v1chatmoonshot-v1-auto
custom自定义(手动)由用户填(手动)
自定义 Provider
Gateway 向导中选「自定义」可填任意 base_url / api_key / model / wire_api。OpenAI 兼容端点(DeepSeek / Qwen / 百川 / Mistral 等大多数)直接选 chat 协议即可接入,无需改代码。

API 协议适配 #

api.rs 同时支持三种协议:

wire_api请求形态适用
chatPOST /chat/completions,OpenAI 格式OpenAI 及所有兼容端点(DeepSeek、Qwen、GLM、Kimi、Grok、MiniMax、OpenRouter,含兼容模式通义)
anthropicPOST /v1/messages,Anthropic Messages 格式Claude(Anthropic 原生协议)
geminiPOST /v1beta/models/<model>:generateContentGemini(Google 原生协议)

所有协议都支持流式响应(SSE)。工具调用的循环逻辑统一在 api.rs 内处理:模型发出 angles-* 调用请求 → CLI 解析、根据审批策略决定是否询问 → 执行工具 → 把结果回灌给模型 → 直到模型不再发起新调用。

CLI 命令参考 #

用户可在终端直接调用的子命令:

命令说明
angles help列出所有命令及含义
angles config显示当前配置(provider / 模型 / 偏好等)
angles gateway启动 TUI 设置向导
angles chat开始交互对话(默认模式)
angles exec <prompt>非交互模式,执行单条指令后退出
angles history查看历史会话列表
angles resume <id>恢复指定历史会话
angles plan显示 / 管理当前任务计划
angles update检查并更新 Angles CLI
angles doctor诊断安装、配置、网络连通性

Agent 工具命令 #

Agent 通过 angles-* 前缀的工具调用操作环境。全部 30+ 内置工具分组:

文件创建与写入 4

angles-createfile <path> [content]
创建新文件写入;已存在报错。content 可经 stdin 传入
angles-writefile <path> [content]
覆盖写入;不存在自动创建
angles-appendfile <path> <content>
追加到文件末尾
angles-insertline <path> <line> <content>
在指定行号前插入一行

文件读取与搜索 5

angles-readfile <path> [start] [end]
读取文件,可指定行范围
angles-searchfile <pattern> [dir]
按文件名 glob 搜索
angles-grep <pattern> [dir]
正则搜索文件内容
angles-head <path> [n]
前 n 行,默认 10
angles-tail <path> [n]
最后 n 行,默认 10

文件修改与删除 7

angles-replace <path> <old> <new>
精确替换首次出现的 old_text
angles-replaceall <path> <old> <new>
替换所有出现
angles-deleteline <path> <line>
删除指定行
angles-deletefile <path>
删除文件(始终需确认)
angles-movedir <src> <dst>
移动/重命名文件或目录
angles-copyfile <src> <dst>
复制文件
angles-mkdir <dir>
创建目录(含父目录)

目录与项目 5

angles-ls [dir]
列出目录内容
angles-tree [dir] [depth]
树形结构,默认深度 3
angles-pwd
当前工作目录
angles-cd <dir>
切换工作目录
angles-fileinfo <path>
文件元信息(大小、权限、mtime)

终端与执行 3

angles-run <cmd> [args...]
执行命令并返回输出
angles-runbg <cmd> [args...]
后台执行,返回 PID
angles-kill <pid>
终止指定进程

网络与搜索 2

angles-fetch <url> [output]
下载 URL;不指定 output 则输出到 stdout
angles-websearch <query>
用配置的搜索引擎查询,返回结果摘要

Git 操作 5

angles-gitinit [dir]
初始化 git 仓库
angles-gitcommit <msg>
暂存所有更改并提交
angles-gitlog [n]
最近 n 条提交,默认 10
angles-gitdiff [path]
显示未暂存更改
angles-gitbranch <name>
创建并切换到新分支
工具选择偏好
创建新文件用 angles-createfile;改文件优先用 angles-replace(精确替换)而非全量 writefile;搜索代码用 angles-grep,搜索文件名用 angles-searchfile;优先用专属 angles-* 命令而非 angles-run 调系统命令。

系统提示 & 模板 #

System prompt 模板存储在 instructions.txt(约 13KB),由 instructions.rs 用 Handlebars 渲染。模板中的 {{variable}} 占位符在运行时从 config 注入:

占位符来源作用
{{arch}} / {{os}}运行时检测注入系统架构信息
{{language}}configagent 默认响应语言
{{provider}} / {{base_url}} / {{model}}config当前模型与端点
{{max_tokens}} / {{daily_token_budget}}config预算约束
{{agent_persona}}config自由文本人设描述
{{search_engine}} / {{approval_policy}}config运行时配置上下文

模板内置丰富指令:编码准则(修根因、避免复杂度、保持代码风格)、Preamble 消息原则、Planning(5-7 字步骤)、错误处理(重试 2 次、3 次后问用户)、Token 预算意识、危险操作的强制确认。

AGENTS.md 规范 #

仓库任何位置可放 AGENTS.md,为 agent 提供工作指令:

典型用法:编码规范、代码组织约定、运行 / 测试说明。

安全 & 审批策略 #

三档审批策略,配置在 approval_policy

策略行为
never所有工具调用自动执行,最快但风险最高
untrusted只自动执行只读、安全命令;任何破坏性操作都问用户(默认值)
on-requestagent 自行判断何时请示,靠 agent 的好判断力
始终需确认(无视策略)
  • angles-deletefile — 永久删除
  • angles-run 配合 rm -rf / sudo / mkfs / dd 等破坏性命令
  • angles-run git push --force
  • 任何修改工作区外文件的操作

angles-websearch 调用 search.rs 构造查询 URL 并返回摘要。

引擎特点
bing通用 + AI 摘要,稳定(推荐)
baidu中文内容丰富
google覆盖最广,可能需验证码处理
yahoo备用,覆盖中等
customsearch_engine_url{q} 替换为查询词
disabled禁用联网搜索

原则:准确性重要时优先搜索而非猜测;查询词要具体;搜索失败先简化查询再放弃。

Rust 依赖清单 #

来自 Cargo.toml

crate用途
clap v4 (derive)CLI 定义与解析
serde / serde_json配置与 API JSON 序列化
toml v0.8解析 providers.toml
reqwest v0.12 (rustls)HTTP 客户端 + 流式响应(纯 Rust TLS,无 OpenSSL 依赖)
tokio v1 (full)异步运行时
ratatui v0.29 + crosstermTUI 渲染(gateway 向导)
dialoguer + console交互式提示与终端控制
futures v0.3异步流处理
handlebars v6系统提示模板渲染({{var}} 注入)
chrono日期处理(预算重置)
dirs / which家目录定位 / 命令查找
glob / regex / walkdir文件搜索与内容匹配
termimad + minimad终端 Markdown 渲染
colored / indicatif彩色输出 / 进度条
无 OpenSSL 依赖
reqwest 使用 rustls-tls 特性而非原生 TLS——这意味着编译只需 Rust 工具链,不需要系统 OpenSSL 开发包,交叉编译尤其友好。释放默认特性以避免引入 reqwest 的默认 OpenSSL backend。

许可与贡献

GPL-3.0 许可。源码、问题反馈、PR 欢迎:github.com/ZSJ305/angles-cli