# covo-agent
**Repository Path**: asd2015/covo-agent
## Basic Information
- **Project Name**: covo-agent
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: AGPL-3.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-24
- **Last Updated**: 2026-08-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# covo-agent
简体中文 | [English](README.md)
`covo-agent` 是一个运行在终端中的通用型 AI Agent,提供 general 与 code 两种工作模式。它面向日常知识工作、软件开发、自动化、持久上下文管理和外部系统协作,并通过交互式 TUI、工具、记忆、技能、安全控制与可扩展集成提供完整工作流。
## 主要能力
- **终端交互工作流**:流式回复、工具状态、鼠标选择、会话历史、模型选择器、主题和 Shell 补全。
- **多种运行方式**:交互式 TUI、单次输出,以及受策略约束的无头运行。
- **编程工具**:文件搜索与编辑、补丁应用、Shell 执行、代码分析、Review、测试生成、Git Worktree 和检查点。
- **持久上下文**:会话、记忆 Provider、技能、目标、快照、承诺事项、Profile 和项目级配置。
- **灵活的模型接入**:支持 OpenAI、Anthropic、Gemini、Xiaomi、OpenRouter,以及兼容 OpenAI 协议的自定义 Provider。
- **安全控制**:审批门、允许/拒绝策略、敏感信息脱敏、URL/路径检查、系统沙箱、审计日志和死循环恢复。
- **扩展集成**:MCP Server、ACP、LSP、插件、扩展、通信网关和自定义 Provider。
## 环境要求
- 从源码构建需要 Go **1.25.0** 或更高版本。
- 至少配置一个模型 Provider 的 API Key 或登录凭据。
- 推荐安装 Git,以启用检查点、Worktree、Review 和仓库感知能力。
- Chrome 或 Chromium 为可选依赖,用于完整的浏览器工具体验。
macOS、Linux 和 Windows 上的部分能力可能有所不同。可以运行 `covo-agent doctor` 检查当前环境。
## 安装
一条命令安装最新版本:
```bash
curl -fsSL https://raw.githubusercontent.com/covoyage/covo-agent/main/install.sh | bash
```
脚本会根据你的操作系统和架构,从 GitHub Releases 页面下载对应二进制,安装到 `~/.covo-agent/bin` 并加入 `PATH`。如需安装指定版本,可传 `--version <版本号>`;如不想修改 shell 配置文件,可加 `--no-modify-path`。
macOS 或 Linux 可通过 Homebrew 安装:
```bash
brew install --cask covoyage/tap/covo-agent
```
Windows 可通过 Scoop 安装:
```powershell
scoop bucket add covoyage https://github.com/covoyage/scoop-bucket
scoop install covoyage/covo-agent
```
GitHub Releases 页面也会提供归档文件和校验和。
通过 Go 安装最新版本:
```bash
go install github.com/covoyage/covo-agent/cmd/covo-agent@latest
```
二进制会安装到 `GOBIN`;未设置 `GOBIN` 时,则安装到 `$(go env GOPATH)/bin`。请确保对应目录已加入 `PATH`。
### 从源码构建
源码构建使用 `go.mod` 中声明的依赖目录结构。准备好其中引用的本地模块后,再克隆并构建项目:
```bash
mkdir covoyage && cd covoyage
git clone https://github.com/covoyage/covo-agent.git
cd covo-agent
go build -o bin/covo-agent ./cmd/covo-agent
```
可选:将二进制安装到 `PATH`:
```bash
install -m 0755 bin/covo-agent "$HOME/.local/bin/covo-agent"
```
## 快速开始
配置 Provider 和默认模型:
```bash
covo-agent setup
# 后续也可以重新打开 Provider/模型选择器
covo-agent model
```
也可以显式管理凭据:
```bash
covo-agent auth add OPENAI_API_KEY=your-key
covo-agent auth list
```
进入项目目录并启动交互式 TUI:
```bash
cd your-project
covo-agent
```
不启动 TUI,执行一次任务:
```bash
covo-agent --oneshot "总结当前仓库"
covo-agent -z "审查未提交的修改" --json
```
运行受约束的无头任务:
```bash
covo-agent --headless \
-z "找出测试失败的原因" \
--tools read,grep,glob,bash \
--max-turns 8 \
--allow 'bash:go test *' \
--deny 'bash:rm *'
```
## 运行模式
| 模式 | 示例 | 适用场景 |
| --- | --- | --- |
| 交互式 TUI | `covo-agent` | 迭代开发、工具调用、审批和会话管理 |
| 单次运行 | `covo-agent -z "prompt"` | 脚本或一次性终端回复 |
| 单次 JSON | `covo-agent -z "prompt" --json` | 结构化自动化输出 |
| 无头模式 | `covo-agent --headless -z "prompt"` | 使用明确策略的非交互 Agent 任务 |
常用全局参数:
```text
--provider 临时覆盖 Provider
--model 临时覆盖模型
--mode general|code 选择 Agent 模式
--session-id 恢复或创建指定会话
--sandbox workspace、read-only、strict、devbox、off 或自定义配置
--system-prompt 替换默认系统提示词
--append-system-prompt 追加系统提示词
--yolo 跳过审批提示(高风险)
```
使用 `covo-agent --help` 查看完整且与当前版本一致的参数列表。
## 命令地图
| 范围 | 命令 |
| --- | --- |
| 初始化与诊断 | `setup`、`model`、`config`、`auth`、`doctor`、`status`、`version`、`update` |
| 会话与知识 | `session`、`memory`、`skill`、`dreaming`、`commitments`、`backup`、`restore`、`migrate` |
| 编程工作流 | `analyze`、`review`、`pr`、`testgen`、`worktree` |
| 集成能力 | `mcp`、`acp`、`lsp`、`gateway`、`pairing`、`plugin`、`ext`、`package` |
| 个性化 | `profile`、`language`、`theme`、`features`、`template` |
| 自动化 | `cron`、`heartbeat`、`completion` |
每个命令都有独立帮助页面:
```bash
covo-agent session --help
covo-agent gateway --help
covo-agent mcp --help
```
支持 Bash、Zsh、Fish 和 PowerShell 补全:
```bash
covo-agent completion zsh > "${fpath[1]}/_covo-agent"
covo-agent completion bash > ~/.local/share/bash-completion/completions/covo-agent
```
## 配置
默认全局配置文件:
```text
~/.covo-agent/config.yaml
```
项目可以通过 `.covo-agent.yaml` 覆盖全局配置。加载器从当前目录向上查找,并在 Git 根目录或用户主目录停止。
最小配置示例:
```yaml
provider: openai
model: gpt-5.6
mode: code
```
YAML 中的环境变量会被展开,因此敏感信息可以保留在配置文件之外:
```yaml
custom_providers:
- name: Local
protocol: openai/chat
base_url: ${CUSTOM_BASE_URL}
api_key_env: CUSTOM_API_KEY
```
通过 `covo-agent auth` 管理的凭据保存在 `~/.covo-agent/.env`,文件使用受限权限。项目环境变量和进程环境变量可以覆盖配置值。
Profile 使用独立的数据目录:
```text
~/.covo-agent/profiles//
```
可以设置 `COVO_PROFILE`,或使用 `profile` 命令选择 Profile。
设置 `COVO_USER_AGENT` 可覆盖发送给 LLM 提供方的 `User-Agent` 请求头(默认值为 `covo-agent/`)。
## 数据目录
| 路径 | 用途 |
| --- | --- |
| `~/.covo-agent/config.yaml` | 全局配置 |
| `~/.covo-agent/.env` | Provider 凭据和环境变量 |
| `.covo-agent.yaml` | 项目级覆盖配置 |
| `~/.covo-agent/sessions/` | 持久会话和生命周期 Sidecar |
| `~/.covo-agent/skills/` | 已安装及用户创建的技能 |
| `~/.covo-agent/covo-agent.log` | 交互运行告警和诊断日志 |
| `~/.covo-agent/profiles/` | 隔离的 Profile 数据 |
## 安全机制
可能修改文件、执行命令或影响外部系统的工具操作,会经过审批和策略层。自动化场景建议使用明确的 allow/deny 规则和沙箱配置。
```bash
covo-agent --headless -z "运行测试并修复一个失败" \
--sandbox workspace \
--allow 'edit:*' \
--allow 'bash:go test *' \
--deny 'bash:git push*'
```
`--yolo` 会关闭危险操作审批。只应在允许工具不受限制执行的隔离环境中使用。
## 可观测性
Telemetry 默认为关闭。将 covo-agent 指向任意 OTLP HTTP 后端(例如 [Langfuse](https://langfuse.com)、Jaeger、Grafana 或 OpenTelemetry Collector):
```bash
export COVO_OTEL_ENDPOINT=https://cloud.langfuse.com/api/public/otel
# Langfuse 使用 HTTP Basic 认证:base64(publicKey:secretKey)
export COVO_OTEL_HEADERS="Authorization: Basic $(echo -n 'pk-lf-你的公钥:sk-lf-你的密钥' | base64)"
```
会话内所有行为都会以 OTel trace 导出:会话根 span 携带 `session.id` / `langfuse.session.id`,每次 LLM 调用(agent 主回合、上下文压缩、标题生成、代码审查、guardrail、辅助 provider)都会成为带 GenAI 语义约定属性的 model span(`gen_ai.request.*`、`gen_ai.prompt`、`gen_ai.completion`、`gen_ai.usage.*`、`gen_ai.response.*`),后端可据此计算 token 用量与成本。Headless、one-shot、review、后台任务与 cron 调用同样会被追踪并在退出时刷新导出。
### 环境变量
| 变量 | 说明 |
| --- | --- |
| `COVO_OTEL_ENDPOINT` | 追踪用的 OTLP HTTP 端点(自动补 `/v1/traces`)。设置后同时隐含 `COVO_OTEL_ENABLED=true`。 |
| `COVO_OTEL_HEADERS` | 附加 HTTP 头,例如 `Authorization: Basic ...`。多个 header 用 `,` 或 `;` 分隔;每个 header 的 key 与 value 用 `:` 或 `=` 分隔,例如 `Authorization: Basic ..., X-Tenant: acme`。 |
| `COVO_OTEL_SERVICE_NAME` | `service.name` 资源属性(默认 `covo-agent`)。 |
| `COVO_OTEL_METRICS_ENABLED` | 选择开启 OTLP metrics(`true`/`1`)。输出 GenAI 用量/耗时计数器、单次调用成本、错误计数(模型调用/工具执行/agent 运行)与进程指标。 |
| `COVO_OTEL_METRICS_ENDPOINT` | metrics 端点;默认沿用 `COVO_OTEL_ENDPOINT`。Langfuse 仅接收 trace,metrics 需指向 Collector。 |
| `COVO_OTEL_EXPORT_INTERVAL` | 周期性导出间隔(默认 `30s`)。 |
| `COVO_OTEL_ENABLED` | 旧版开关;仅设置 `COVO_OTEL_ENDPOINT` 即可启用导出。 |
> 注意:trace 会携带原始 prompt/completion 内容,这正是 token 成本分析的依据。请勿指向你不信任的观测后端。
## Claude Code 与 Codex hooks
covo-agent 兼容 [Claude Code hooks 协议](https://docs.anthropic.com/en/docs/claude-code/hooks) 与 [OpenAI Codex hooks](https://docs.openai.com/codex/hooks/) 配置格式,你在两个工具里已配置的 hooks 均可原样复用:
- 启动时加载 `~/.claude/hooks.json`(用户级)与 `<项目>/.claude/hooks.json`(项目级);既支持 `Hooks` 数组格式,也支持 settings.json 风格的 `hooks` map 格式。
- 启动时加载 `~/.codex/hooks.json`(用户级)与 `<项目>/.codex/hooks.json`(项目级),采用 Codex 的 `{"hooks": {"Event": [{ "matcher": ..., "hooks": [{ "type": "command", ... }]}]}}` 格式(仅支持 `command` 处理器;`timeout`/`timeoutSec` 单位为秒;matcher 为 `"*"` 时匹配所有工具)。
- Codex 与 Claude Code 使用相同的驼峰事件名,两个来源的 hook 会落入同一桶并可自由混用:`PreToolUse`、`PostToolUse`、`UserPromptSubmit`、`Stop`(stop gate 已支持)与 `SessionStart`。通知类 hook 可声明为 `Async`。
- hook 通过 stdin 收到标准 JSON 载荷(`hook_event_name`、`session_id`、`cwd`、`tool_name`、`tool_input`、`tool_response`、`prompt`、`hook_input`,以及 Codex 的 `model`、`permission_mode`——`plan`/`bypassPermissions`/`acceptEdits`——与 `source`),并在 stdout 返回决策:`approve`/`allow` 放行,`deny`/`block` 阻止操作(PreToolUse 阻止工具调用,UserPromptSubmit 中止本次运行),`ask` 按失败放行处理。
- 沿用现有的 `COVO_ACCEPT_HOOKS` 白名单与超时/熔断保护。默认 `COVO_ACCEPT_HOOKS=false` 时,hook 命令需先通过交互确认或 `COVO_ACCEPT_HOOKS=true` 加入白名单后才会执行——在此之前注册会被跳过。
- `.covo-agent-hooks.json`、Claude Code 的 `.claude/hooks.json` 与 Codex 的 `.codex/hooks.json` 均支持热重载(500ms 轮询),策略变更无需重启生效。
| 变量 | 说明 |
| --- | --- |
| `COVO_CLAUDE_HOOKS_DISABLED` | 设为 `true` 跳过加载 Claude Code hooks。 |
| `COVO_CLAUDE_HOOKS_PATH` | 额外 hooks 文件,冒号分隔,在用户/项目文件之后加载。 |
| `COVO_CODEX_HOOKS_DISABLED` | 设为 `true` 跳过加载 Codex hooks。 |
| `COVO_CODEX_HOOKS_PATH` | 额外 hooks 文件,冒号分隔,在用户/项目文件之后加载。 |
## 外部代理委托
covo-agent 可以通过 `external_agent` 工具,将独立、自包含的任务委托给以独立进程运行的外部编程代理。支持的 Provider:
- **Claude Code** —— 通过其 `stream-json` 控制协议驱动,与官方 [Claude Agent SDK](https://code.claude.com/docs/en/agent-sdk/overview) 使用的传输层相同:Provider 执行 `initialize` 握手、通过 stdin 流式发送提示词、应答 `can_use_tool` 权限控制请求(自动放行只读工具,拒绝一切未明确允许的操作)、在取消时发送 `interrupt`,并收集最终的 `result` 消息。需要 Claude Code `>= 2.0.0`(通过 `claude --version` 校验)。
- **OpenAI Codex** —— 通过其 `app-server` 协议(`codex app-server --stdio`)驱动,与官方 [Codex SDK](https://developers.openai.com/codex/app-server) 和 VS Code 扩展使用的 JSON-RPC-over-stdio 传输层相同:Provider 执行 `initialize` → `initialized` 握手、创建 `ephemeral` 线程、运行一个 `turn`、无人值守地应答审批服务器请求(命令/文件审批默认拒绝——在 `permission_mode: bypassPermissions` 下允许——权限升级与用户输入提示一律拒绝)、在取消时发送 `turn/interrupt`,并返回 `phase: "final_answer"` 的消息(回退到最新的无 phase 代理消息)。需要 Codex `>= 0.136.0`(通过 `codex --version` 校验)。
- **opencode** —— `opencode run`。
不安装任何产品 SDK;每个 Provider 直接驱动产品自己的 CLI(也就是那些 SDK 底层包装的同一个二进制)。由于外部代理无法看到当前对话,任务必须完全自包含。`permission_mode`(`default`/`acceptEdits`/`plan`/`bypassPermissions`)适用于 Claude 和 Codex;`allowed_tools`/`disallowed_tools`/`max_turns` 为 Claude 专属;`model` 适用于 Claude 和 Codex。
每个 Provider 只有在对应 CLI 二进制已安装、已登录并在 `PATH` 上时才可用。`COVO_EXTERNAL_AGENTS` 控制暴露哪些 Provider:
| 值 | 效果 |
| --- | --- |
| `all`(默认) | 注册所有已知 Provider(Claude Code、Codex、opencode)。 |
| `claude,codex` | 只注册列出的 Provider(逗号分隔)。 |
| `off` / `none` | 禁用委托;`external_agent` 工具不暴露。 |
## 故障排查
检查环境和配置:
```bash
covo-agent doctor
covo-agent doctor --fix
```
检查内容包括:
- Home、配置、凭据、会话和技能目录;
- Provider Key 和模型配置;
- Git 与浏览器可用性;
- 终端颜色、剪贴板、Multiplexer 和键盘能力。
交互模式下的告警会写入 `~/.covo-agent/covo-agent.log`,避免破坏 Alternate Screen TUI 的输入框和布局。
## 开发
构建前,请确保工作区中存在 `go.mod` 声明的本地模块路径。
```bash
go build ./...
go test ./...
go vet ./...
```
修改后构建可执行文件:
```bash
go build -o bin/covo-agent ./cmd/covo-agent
```
提交修改前,请运行上面的构建、测试和检查命令,并重新生成可执行文件。
## 许可证
本项目采用 [GNU Affero General Public License v3.0](LICENSE)(`AGPL-3.0`)。