# ani
**Repository Path**: andershsueh/ani
## Basic Information
- **Project Name**: ani
- **Description**: Ani - Minimalist single-process terminal AI assistant
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-03
- **Last Updated**: 2026-06-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

# ALICE-CLI
🤖 **ALICE** - 基于大语言模型的智能办公助手
[](https://github.com/AndersHsueh/Alice)
[](LICENSE)
[](https://nodejs.org/)
## 📖 简介
ALICE 是一个现代化的命令行 AI 助手,支持 Function Calling 工具调用。支持多种 LLM 后端(本地和云端),ALICE 可以帮助您:
- 💬 自然语言对话交互
- 🎨 优雅的终端界面设计
- 🚀 快速响应,流畅体验
- 🔒 支持本地部署,保护隐私
- ⚡ 轻量高效,开箱即用
- 🔄 智能降级,保障可用性
### 🤖 Agent 产品体系
本仓库是一套完整的 Agent 产品体系,目前 **VERONICA** 与 **ALICE** 已上线运行;**DIANA**、**ANDERS** 仍在规划中。
| 名称 | 全称(英文) | 中文意涵 | 角色 | 状态 |
|------|----------------|----------|------|------|
| **VERONICA** | **V**erified **E**mbedded **R**esilient **O**rchestration **N**eural **I**ntelligent **C**ontrol **A**gent | 经验证的嵌入式弹性神经智能控制代理 | daemon 服务,常驻运行、会话与推理编排(`veronica` 命令管理) | ✅ 已上线 |
| **ALICE** | **A**ccelerated **L**ogic **I**nference **C**ore **E**xecutor | 加速逻辑推理核心执行器 | 主 CLI(TUI + 一次性对话),与 VERONICA 配合(`alice` 命令) | ✅ 已上线 |
| **DIANA** | **D**ynamic **I**ntelligent **A**ccessible **N**etworked **A**gent | 动态智能可及网络化代理 | 移动端 Agent,直接与用户快速沟通 | 📋 规划中 |
| **ANDERS** | **A**rchitectural **N**exus **D**isciplined **E**ngineering **R**easoning **S**ystem | 架构枢纽以及纪律化工程推理系统 | 架构师 Agent,专门用于处理复杂代码 | 📋 规划中 |
## ✨ 特性
### 🚀 v0.5.0 亮点
**飞书通道与 VERONICA 网关**
- 📡 **飞书 WebSocket 长连接**:无需公网 URL,本机直连飞书接收消息;支持文本与富文本(post)消息解析
- 🤖 **默认通道**:`defaultChannel: feishu` 时,daemon 启动即建立飞书长连接,`veronica start` 后提示连接状态
- ⌨️ **敲键盘反馈**:收到消息后在用户消息上加「敲键盘」reaction,处理完成后移除
- 🔁 **消息去重**:按 `message_id` 去重,避免飞书重复推送导致回复两次
- 📄 网关设计详见 [Veronica 通道网关设计](docs/veronica通道网关设计.md)
**VERONICA 后台服务(veronica 命令)**
- 常驻 daemon,负责会话、推理编排与通道网关(如飞书)
- 配置 `~/.alice/daemon_settings.jsonc`,支持 `defaultChannel`、飞书 app_id/app_secret(或环境变量 `ALICE_FEISHU_APPID` / `ALICE_FEISHU_APP_SECRET`)
```bash
veronica start # 启动(飞书通道连接成功后提示)
veronica stop # 停止
veronica status # 查看状态(含 defaultChannel、连接状态)
veronica restart # 重启并重新加载配置
```
### 🔧 工具系统(Function Calling)
- **12 个内置工具**: 文件操作、系统信息、命令执行、技能加载、会话任务清单等
- `TodoWrite` - 会话内任务清单(增删改查、状态更新)
- `TodoRead` - 查看当前会话任务列表(与 TodoWrite 共用同一套列表展示)
- `readFile` - 读取文件内容
- `writeFile` - 将内容写入文件(整文件覆盖或新建)
- `editFile` - 按行号编辑已有文件(替换/插入/删除行,支持批量),适用于大文件少量修改
- `listFiles` - 列出目录文件
- `searchFiles` - 搜索文件(支持 glob 模式)
- `getCurrentDirectory` - 获取当前目录
- `getGitInfo` - 查看 Git 仓库信息
- `getCurrentDateTime` - 获取当前时间
- `executeCommand` - 执行系统命令(带安全确认)
- `loadSkill` - 按需加载技能指令
- **智能工具调用**: AI 自动决定何时使用哪个工具
- **实时进度展示**: 工具执行状态可视化
- **安全机制**: 危险命令需要用户确认
- **跨平台支持**: Windows/macOS/Linux 全平台兼容
### 核心功能
- **多后端支持**: 支持 LM Studio、Ollama、OpenAI 等多种 LLM 服务
- **智能降级**: 主模型故障时自动切换到最快的备用模型
- **模型测速**: 内置 `--test-model` 工具,一键测试所有模型速度
- **提示词缓存**: 支持 API 端的提示词缓存,降低成本提升速度
- **智能对话**: 基于 LLM 的自然语言理解和生成
- **命令系统**: 内置快捷命令,提升操作效率
- **历史记录**: 支持上下箭头浏览历史输入
- **会话管理**: 自动保存对话上下文,支持会话恢复
- **流式输出**: 实时显示 AI 响应,支持中断
### 主题与个性化
- **主题系统**: 内置 2 个主题(tech-blue、ocean-dark),支持自定义主题
- **热重载**: 修改主题配置文件后自动更新(无需重启)
- **可配置键绑定**: 自定义快捷键映射(支持组合键)
### 会话与导出
- **会话恢复**: 自动创建和保存会话,优雅的退出汇报显示
- **会话导出**: 支持导出为 HTML(含样式)和 Markdown 格式
- **智能提问**: AI 可以主动向用户提问以澄清任务
### 🧠 Skills 技能系统(三阶段渐进式加载)
ALICE 采用 Anthropic 推荐的**渐进式加载**架构,按需加载技能,避免上下文窗口膨胀:
1. **Discovery(启动时)**: 扫描 `~/.agents/skills/` 目录,仅提取每个技能的名称和描述(~100 tokens/skill),注入系统提示词
2. **Instruction(按需)**: 当用户请求匹配某技能时,AI 通过 `loadSkill` 工具加载完整指令
3. **Resource(执行时)**: 技能附带的脚本和文件仅在实际执行时访问
**默认内置 6 个技能**(首次启动自动安装):
- `find-skills` - 搜索和发现新技能
- `obsidian-markdown` / `json-canvas` / `obsidian-bases` / `obsidian-cli` - Obsidian 笔记集成
- `skill-creator` - 创建自定义技能
**安装更多技能**:
```bash
npx skills add --skill -g
npx skills find # 交互式搜索
```
### 🔌 MCP (Model Context Protocol)
ALICE 支持通过 MCP 连接外部工具服务器,大幅扩展能力:
- 独立配置文件 `~/.alice/mcp_settings.jsonc`
### 视觉体验
- 🎭 炫酷的启动 Banner 动画
- 🌈 主题化彩色设计(可自定义)
- 📊 清晰的信息层级展示
- ⚡ 流畅的打字机效果
## 🚀 快速开始
### 方式一:下载预编译版本(推荐)
直接从 [Releases 页面](https://github.com/AndersHsueh/Alice/releases) 下载适合您系统的版本:
| 操作系统 | 下载文件 | 说明 |
|---------|---------|------|
| Windows x64 | `alice-win-x64.zip` | 适用于 64 位 Windows |
| macOS Intel | `alice-macos-x64.tar.gz` | 适用于 Intel 芯片 Mac |
| macOS Apple Silicon | `alice-macos-arm64.tar.gz` | 适用于 M1/M2/M3 Mac |
| Linux x64 | `alice-linux-x64.tar.gz` | 适用于 64 位 Linux |
**Windows 用户**:
```powershell
# 解压后直接运行
.\alice.exe
```
**macOS / Linux 用户**:
```bash
# 解压
tar -xzf alice-*.tar.gz
# 添加执行权限
chmod +x alice-*
# 运行(可选:移动到系统路径)
sudo mv alice-* /usr/local/bin/alice
# 直接运行
alice
```
### 方式二:从源码构建
### 前置要求
- **Node.js**: ≥ 18.0.0
- **LM Studio**: 用于本地运行大语言模型
- 下载地址: [https://lmstudio.ai/](https://lmstudio.ai/)
- 启动本地服务器(默认端口 1234)
### 安装依赖
```bash
# 克隆仓库
git clone https://github.com/AndersHsueh/Alice.git
cd Alice
# 安装依赖
npm install
```
### 开发模式
```bash
# 启动开发服务(支持键盘输入)
npm run dev
# 跳过启动动画
npm run dev -- --no-banner
```
> ⚠️ **注意**: 不要使用 `npm run dev:watch` 进行交互测试,该模式会拦截 stdin,导致无法接收键盘输入。
### 构建与运行
```bash
# 编译 TypeScript
npm run build
# 运行生产版本
npm start
```
## 📚 使用指南
### 基本命令
启动 ALICE 后,您可以使用以下命令:
| 命令 | 说明 |
|------|------|
| `/help` | 显示帮助信息 |
| `/clear` | 清空对话历史 |
| `/config` | 查看当前配置 |
| `/theme [name]` | 查看/切换主题 |
| `/export [html\|md] [filename]` | 导出对话为 HTML 或 Markdown |
| `/quit` | 退出 ALICE(显示退出汇报) |
| `Ctrl+C` | 强制退出 |
### 命令行参数
| 参数 | 说明 |
|------|------|
| `--no-banner` | 跳过启动动画 |
| `--test-model` | 测试所有配置的模型并显示速度排名 |
```bash
# 跳过启动动画
alice --no-banner
# 测试所有模型速度
alice --test-model
```
### 🔧 工具使用示例
ALICE 支持 Function Calling,AI 可以自动调用工具完成任务:
```bash
# 示例 1: 查询时间
> You: 现在几点了?
[⏰ 获取当前时间] 正在执行...
[✅ 获取当前时间] 执行成功
Alice: 现在是 2026 年 2 月 10 日 21:40,星期二。
# 示例 2: 搜索文件
> You: 这个项目有多少个 TypeScript 文件?
[🔍 搜索文件] 正在搜索 **/*.ts...
[🔍 搜索文件] 找到 25 个文件
Alice: 项目中共有 25 个 TypeScript 文件,主要分布在 src/core、src/cli 等目录。
# 示例 3: 读取文件
> You: 帮我看看 package.json 的内容
[📄 读取文件] 正在读取 package.json...
[✅ 读取文件] 文件读取成功 (1024 bytes)
Alice: 你的项目名称是 alice-cli,版本 0.5.0,主要依赖包括...
# 示例 4: 危险命令(需确认)
> You: 删除 node_modules 文件夹
[⚠️ 危险命令警告]
命令: rm -rf node_modules
确认执行? (y/N): y
[🔧 执行命令] 执行中...
[✅ 执行命令] 命令执行完成
Alice: node_modules 已删除,你可以运行 npm install 重新安装依赖。
```
### 配置危险命令确认
编辑 `~/.alice/settings.jsonc` 中的 `dangerous_cmd` 字段:
```jsonc
{
// true: 危险命令需要确认 (默认,推荐)
// false: 直接执行,不需要确认
"dangerous_cmd": true
}
```
### 配置文件
配置文件位于 `~/.alice/settings.jsonc`(支持注释的 JSON 格式):
```jsonc
{
// 默认使用的模型
"default_model": "lmstudio-local",
// 系统推荐的最快模型(由 --test-model 自动更新)
"suggest_model": "lmstudio-local",
// 多模型配置列表
"models": [
{
"name": "lmstudio-local",
"provider": "lmstudio",
"baseURL": "http://127.0.0.1:1234/v1",
"model": "qwen3-vl-4b-instruct",
"apiKey": "",
"temperature": 0.7,
"maxTokens": 2000,
"last_update_datetime": null,
"speed": null
},
{
"name": "ollama-local",
"provider": "ollama",
"baseURL": "http://localhost:11434/v1",
"model": "qwen2.5:7b",
"apiKey": "",
"temperature": 0.7,
"maxTokens": 2000,
"last_update_datetime": null,
"speed": null
},
{
"name": "openai-gpt4",
"provider": "openai",
"baseURL": "https://api.openai.com/v1",
"model": "gpt-4",
"apiKey": "${OPENAI_API_KEY}", // 从环境变量读取
"temperature": 0.7,
"maxTokens": 2000,
"last_update_datetime": null,
"speed": null
}
],
// UI 配置
"ui": {
"banner": {
"enabled": true,
"style": "particle"
},
"theme": "tech-blue"
},
// 主题系统(支持自定义主题在 ~/.alice/themes/)
"theme": "tech-blue",
// 键绑定配置
"keybindings": {
"quit": ["ctrl+d", "ctrl+c"],
"submit": ["enter"],
"clear": ["ctrl+u"],
"history_up": ["up"],
"history_down": ["down"]
},
// 提示词缓存(true: 云端缓存 | false: 本地)
"promptCaching": true,
// 工作区配置
"workspace": ".",
// 危险命令确认(true: 执行前需确认 | false: 直接执行)
"dangerous_cmd": true,
// 工具调用最大迭代次数(最小 5,最大 20,超出范围默认 10)
"maxIterations": 10
}
```
#### 支持的 LLM 提供商
ALICE 使用插件式 Provider 系统,支持以下提供商:
| 提供商 | provider 值 | 说明 | Function Calling |
|--------|-------------|------|------------------|
| **LM Studio** | `lmstudio` | 本地运行,默认端口 1234 | ✅ |
| **Ollama** | `ollama` | 本地运行,默认端口 11434 | ✅ |
| **OpenAI** | `openai` | GPT-4/3.5,支持提示词缓存 | ✅ |
| **Anthropic** | `anthropic` 或 `claude` | Claude 3.5/3,长上下文 | ✅ |
| **Google** | `google` 或 `gemini` | Gemini 1.5/2.0,多模态 | ✅ |
| **Mistral** | `mistral` | Mistral Large/Medium | ✅ |
| **Azure OpenAI** | `azure` | Azure 托管的 OpenAI | ✅ |
| **自定义** | `custom` | 任何兼容 OpenAI API 的服务 | ✅ |
**新特性**:
- 🔌 插件式注册,可动态添加新 Provider
- 📊 内置模型元数据(定价、能力、上下文窗口)
- ⚙️ 细粒度配置(每个 Provider 独立配置)
#### 环境变量配置
为了安全,建议将 API Key 存储在环境变量中:
```bash
# macOS / Linux
export OPENAI_API_KEY="sk-xxxxx"
export ANTHROPIC_API_KEY="sk-ant-xxxxx"
export GOOGLE_API_KEY="xxxxx"
export MISTRAL_API_KEY="xxxxx"
export AZURE_OPENAI_KEY="xxxxx"
# Windows
set OPENAI_API_KEY=sk-xxxxx
set ANTHROPIC_API_KEY=sk-ant-xxxxx
```
在配置文件中使用 `${VAR_NAME}` 格式引用环境变量:
```jsonc
{
"apiKey": "${OPENAI_API_KEY}"
}
```
#### Provider 特有配置
部分 Provider 支持额外配置:
```jsonc
{
"name": "claude-sonnet",
"provider": "anthropic",
"model": "claude-3-5-sonnet-20241022",
// Anthropic 特有配置
"providerConfig": {
"anthropic": {
"anthropicVersion": "2023-06-01",
"topK": 40
}
}
}
```
```jsonc
{
"name": "gemini-pro",
"provider": "google",
"model": "gemini-1.5-pro",
// Google 特有配置
"providerConfig": {
"google": {
"safetySettings": [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
}
]
}
}
}
```
#### 智能降级机制
ALICE 内置智能降级功能:
- 当 `default_model` 连接失败时,自动切换到 `suggest_model`
- `suggest_model` 由 `--test-model` 命令自动选择最快的模型
- 降级时会显示友好提示,建议用户重新测速
```
⚠️ 主模型 (openai-gpt4) 连接失败,已自动切换到备用模型 (ollama-local)
💡 提示:运行 'alice --test-model' 重新测速并更新推荐模型
```
### 系统提示词
系统提示词位于 `~/.alice/system-prompt.txt`,您可以自定义 AI 的行为和角色。
## 🏗️ 技术架构
### 技术栈
- **运行时**: Node.js (ESM)
- **语言**: TypeScript
- **UI 框架**: [Ink](https://github.com/vadimdemedes/ink) (React for CLI)
- **HTTP 客户端**: Axios
- **终端美化**: chalk, figlet, gradient-string
### 项目结构
目录与模块职责详见根目录 **[DEVELOPMENT_STRUCTURE.md](DEVELOPMENT_STRUCTURE.md)**,以下为简要结构:
```
alice-cli/
├── src/
│ ├── index.tsx # 入口文件
│ ├── cli/ # TUI 应用层
│ │ ├── app.tsx # 主应用(状态与业务编排)
│ │ ├── components/ # TUI 组件(ChatLayout、Header、ChatArea、InputBox、StatusBar 等)
│ │ ├── hooks/ # TUI 专用 Hooks
│ │ └── context/ # React Context
│ ├── components/ # 可复用 UI 组件(Markdown、SelectList、Overlay 等)
│ ├── core/ # 核心逻辑(LLM、会话、主题、命令、状态等)
│ ├── daemon/ # VERONICA 后台服务
│ ├── tools/ # 工具系统(builtin、executor、MCP 等)
│ ├── utils/ # 工具函数与配置
│ ├── types/ # 全局类型定义
│ └── scripts/ # 独立脚本(test-model 等)
├── dist/ # 构建输出
└── package.json
```
## 🎨 设计理念
### 视觉风格
- **主色调**: 科技蓝 (#00D9FF)
- **辅助色**: 渐变紫 (#B030FF → #00D9FF)
- **设计原则**: 极简、现代、高效
### 交互体验
- ⚡ 快速响应,避免卡顿
- 💡 清晰的状态反馈
- 🎯 直观的错误提示
- ⌨️ 完善的键盘操作
## 🛠️ 开发指南
### ESM 模块系统
本项目使用 ESM 模块,注意事项:
```typescript
// ✅ 导入时必须包含 .js 扩展名
import { foo } from './utils.js';
// ❌ 错误的导入方式
import { foo } from './utils';
```
### 调试技巧
```bash
# 查看详细日志
DEBUG=* npm run dev
# 清理构建产物
npm run clean
```
### 代码规范
- 使用 async/await 处理异步操作
- 组件文件使用 `.tsx`,逻辑文件使用 `.ts`
- 遵循 TypeScript 严格模式
- 函数组件优先,使用 React Hooks
## 📋 开发路线图
### MVP 阶段 (当前)
- [x] 基础聊天界面
- [x] LLM API 集成
- [x] 启动 Banner 动画
- [x] 命令历史记录
- [x] 配置管理系统
- [x] 多 LLM 后端支持(LM Studio、Ollama、OpenAI 等)
- [x] 智能降级机制
- [x] 模型测速工具(--test-model)
- [x] 提示词缓存支持
- [x] 主题系统(内置 2 个主题,支持热重载)
- [x] 键绑定系统(可配置快捷键)
- [x] 会话导出(HTML/Markdown)
- [x] 智能提问(ask_user 工具)
- [x] 会话恢复基础(自动创建/保存会话,退出汇报)
- [x] 流式输出优化(完整版)
### 近期计划
- [ ] 会话树结构(JSONL + 分支支持)
- [ ] LLM 抽象层优化(更多提供商)
- [ ] 工具拦截机制(事件驱动)
### 未来计划
- [x] 完整的会话恢复(--continue/--resume/--session 参数)
- [x] 组件化 UI 架构(5 个内置组件)
- [x] MCP (Model Context Protocol) 支持
- [x] Skills 技能系统(三阶段渐进式加载)
- [x] 工具调用迭代次数可配置
- [ ] Overlay 系统(浮层组件)
- [ ] 扩展系统(Extension API)
- [ ] sudo 密码管理
## 🤝 贡献指南
欢迎提交 Issue 和 Pull Request!
### 开发流程
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
## 📄 许可证
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件
## 🙏 致谢
- **[Anthropic](https://www.anthropic.com/)** - 技能渐进式加载(Discovery → Instruction → Resource)等设计思想参考
- **[Qwen-Code](https://github.com/QwenLM/Qwen2.5-Code)** - 工具调用(Function Calling)结构与实现参考
- **[OpenClaw](https://github.com/open-claw/OpenClaw)** - 飞书等通道的网关设计参考(长连接、无需公网)
- [Ink](https://github.com/vadimdemedes/ink) - 优秀的 CLI UI 框架
- [LM Studio](https://lmstudio.ai/) - 本地大语言模型运行环境
- [GitHub Copilot](https://github.com/features/copilot) - 设计灵感来源
## 📮 联系方式
- **作者**: Anders
- **项目地址**: [https://github.com/AndersHsueh/Alice](https://github.com/AndersHsueh/Alice)
- **问题反馈**: [Issues](https://github.com/AndersHsueh/Alice/issues)
---
Made with ❤️ by Anders