# ggcode

ggcode

**[English](README.md)** | **中文** **ggcode** 是一个终端 AI 编程助手。它能理解代码仓库、编辑文件、执行命令、管理检查点、使用一流的 LSP / MCP / skill 工作流,并在精致的 TUI 界面中持续工作,而不需要在脚本和浏览器标签之间来回切换。 如果你想要一个像产品而非 demo 的终端编程工作流,ggcode 就是为此而生的。 ## 为什么选择 ggcode - **留在终端** — 聊天、检查代码、编辑文件、查看 diff、管理会话,全在一个地方 - **支持真实编码计划和端点** — 兼容 OpenAI、Anthropic、Gemini、GitHub Copilot,以及多个编程向厂商预设 - **关键时刻保持控制** — supervised、plan、auto、bypass 和 autopilot 五种模式,让你自由选择 agent 的自主程度 - **提问不打断流程** — 当 agent 真正被卡住时,TUI 会弹出结构化的多问题 ask_user 问卷 - **快速恢复** — 用 checkpoint 撤销文件修改,而不是手动修复错误编辑 - **按需扩展** — 使用一流的 LSP、MCP 工具、skills、插件、记忆、后台命令和子 agent - **日常使用友好** — 双语界面、可恢复会话、agent 忙碌时排队输入、本地 shell 模式、多平台安装方式 ## 安装 ### Homebrew(macOS / Linux) ```bash brew tap topcheer/ggcode brew install ggcode ``` ### Go 安装器 ```bash go install github.com/topcheer/ggcode/cmd/ggcode-installer@latest ggcode-installer ``` 安装器会将对应的 GitHub Release 二进制文件下载到 `GOBIN`、`GOPATH/bin` 或 `~/go/bin`。 ### npm ```bash npm install -g @ggcode-cli/ggcode ``` npm 包装器默认下载最新的 ggcode GitHub Release。如果需要指定版本,设置 `GGCODE_INSTALL_VERSION`。 > **TLS 验证:** npm 安装器默认启用 TLS 证书校验。如果你在企业代理后面使用自定义 CA,可以设置 `GGCODE_INSECURE_TLS=1` 禁用校验(风险自负),或优先使用 `NODE_EXTRA_CA_CERTS=/path/to/ca.pem` 配置自定义 CA。 ### pip ```bash pip install ggcode ``` Python 包装器同样默认下载最新的 ggcode GitHub Release,也支持 `GGCODE_INSTALL_VERSION` 指定版本。 ### winget ```powershell winget install --id gg.ai.ggcode-desktop ``` winget 包跟踪 Windows 桌面安装器。配置 `WINGET_CREATE_GITHUB_TOKEN` 后,release workflow 会在首次 bootstrap 之后自动提交后续更新。 ### Release 压缩包和安装包 每个 tagged release 都会发布桌面压缩包和原生安装包: | 平台 | Release 文件 | 安装示例 | | --- | --- | --- | | macOS | `.pkg` | `sudo installer -pkg ./ggcode__darwin_universal.pkg -target /` | | Windows | `.msi` | `msiexec /i .\ggcode__windows_x64.msi` | | Debian / Ubuntu | `.deb` | `sudo dpkg -i ./ggcode__linux_.deb` | | Fedora / RHEL / openSUSE | `.rpm` | `sudo rpm -i ./ggcode--1..rpm` | | Alpine | `.apk` | `sudo apk add --allow-untrusted ./ggcode--r1..apk` | | OpenWrt / opkg | `.ipk` | `opkg install ./ggcode__.ipk` | | Arch Linux | `.pkg.tar.zst` | `sudo pacman -U ./ggcode--1-.pkg.tar.zst` | 桌面版 release 还包含压缩包文件(Unix 平台为 `.tar.gz`,Windows 为 `.zip`),适合手动解压。 如果你不想使用包管理器安装,也可以使用 release 压缩包、Go 安装器、npm 包装器或 Python 包装器。 ### Desktop Application(GUI) ggcode 也提供原生桌面应用,使用 [Fyne](https://fyne.io/) 构建。除 CLI 能力外,还包含: - 图形化聊天界面,支持 Markdown 渲染(GFM 表格、Mermaid 图) - 工作区文件浏览、搜索、过滤和文件预览 - IM 平台集成面板(微信、飞书、钉钉等) - 工具审批弹窗与权限模式切换 - Session 历史侧边栏、恢复支持、图片附件和更新检查 从 [GitHub Releases](https://github.com/topcheer/ggcode/releases) 下载最新桌面版: | 平台 | 文件 | | --- | --- | | macOS(Universal) | `ggcode-desktop__darwin_universal.dmg` | | Linux(x86_64) | `ggcode-desktop__linux_amd64`、`.AppImage`、`.deb`、`.rpm` | | Linux(arm64) | `ggcode-desktop__linux_arm64`、`.AppImage`、`.deb`、`.rpm` | | Windows(x64) | `ggcode-desktop__windows_amd64.exe`、`ggcode-desktop__windows_x64.msi` | macOS 打开 DMG 后把 **ggcode** 拖到 Applications。Windows 可以直接运行便携 `.exe`,也可以安装 `.msi`。 Linux 可以按发行版选择裸二进制、AppImage 或原生包。 ### 移动端 App(Beta) GGCode Mobile 是一个移动端伴侣应用,可以通过 QR 码连接桌面 agent,在手机上聊天、审批工具调用、监控任务进度。 | 平台 | 链接 | 说明 | | --- | --- | --- | | iOS (TestFlight) | [加入 Beta](https://testflight.apple.com/join/J34wVD6p) | 在 iPhone 的 Safari 中打开 | | Android (Closed Testing) | [先加入 Google Group](https://groups.google.com/g/gg-studio-ai-products) | **必须先加入群组才能获得权限**,然后在 [Play Store 测试页](https://play.google.com/apps/testing/gg.ai.ggcode.mobile) 加入测试 | | Discord 社区 | [加入 Discord](https://discord.gg/F2v4mJmfG) | 获取发布动态、提问交流,并跟进移动端 Beta 进展 | ### 从源码构建 ```bash git clone https://github.com/topcheer/ggcode.git cd ggcode make build # CLI make build-desktop # Desktop GUI ./ggcode ``` 如果你不通过 `make`,而是直接运行 `go build` / `go test` / `go vet`,请始终加上 `-tags goolm`。 ### 可选:安装本地 CI pre-commit hook 如果你希望本地提交前先拦住常见 Go 问题: ```bash make install-git-hooks ``` hook 会执行以下操作: - 用 `gofmt` 自动格式化已暂存的 Go 文件 - 运行 `go vet -tags goolm ./...` - 运行 `CGO_ENABLED=0 go build -tags goolm -o /dev/null ./cmd/ggcode` 如果需要完整的 CI 对齐校验,请使用 `make verify-ci`。它会先清理 provider 集成测试环境变量、继承的 `GIT_*` hook 上下文和全局 git-hook 配置,然后运行仓库验证脚本。 也可以手动运行相同的检查链: ```bash make verify-ci ``` ### 平台说明 - **macOS / Linux** 命令执行使用 `sh` - **Windows** 命令执行优先使用 **Git Bash**,回退到 **PowerShell** - Shell 补全支持 **bash**、**zsh**、**fish** 和 **PowerShell** ## 快速开始 ### 1. 配置模型端点 最简单的方式是设置厂商 API Key: ```bash export ZAI_API_KEY="your-key" # 或 OPENAI_API_KEY / ANTHROPIC_API_KEY / GEMINI_API_KEY / OPENROUTER_API_KEY / DASHSCOPE_API_KEY / ... ``` 如果你想使用 GitHub Copilot,也可以通过应用内的 **`/provider`** 流程登录,无需导出 API Key。 阿里云百炼 Coding Plan 可以使用内置的 **`aliyun`** 厂商: - `coding-openai` → `https://coding.dashscope.aliyuncs.com/v1` - `coding-anthropic` → `https://coding.dashscope.aliyuncs.com/apps/anthropic` 内置的 OpenAI 兼容路由预设还包括: - `aihubmix` → `https://aihubmix.com/v1`(`AIHUBMIX_API_KEY`) - `getgoapi` → `https://api.getgoapi.com/v1`(`GETGOAPI_API_KEY`) - `novita` → `https://api.novita.ai/openai/v1`(`NOVITA_API_KEY`) - `poe` → `https://api.poe.com/v1`(`POE_API_KEY`) - `requesty` → `https://router.requesty.ai/v1`(`REQUESTY_API_KEY`) - `vercel` → `https://ai-gateway.vercel.sh/v1`(`VERCEL_AI_GATEWAY_API_KEY`) 如果你使用 **Anthropic 兼容端点**,ggcode 也可以在首次启动时自动配置: ```bash export ANTHROPIC_BASE_URL="https://your-endpoint" export ANTHROPIC_AUTH_TOKEN="your-token" ``` ### 2. 启动 ggcode ```bash ggcode ``` 首次启动时,ggcode 会让你选择界面语言。 ### 3. 从真实任务开始 示例: ```text 解释这个项目的结构 将 auth 中间件重构为使用 JWT 为 session store 添加测试 排查 TUI 启动缓慢的原因 ``` ### 4. 使用内置工作流功能 - **`Ctrl+C`** 取消当前运行 - **`Ctrl+F`** 打开全屏项目文件浏览器,支持树形导航、文件名过滤和实时预览 - 如果 agent 正忙,你可以继续输入 — 新提示会**排队等待** - 在空输入框中输入 **`$`** 或 **`!`** 进入**本地 shell 模式**;按 **`Esc`** 退出 - **`/undo`** 撤销最后一次文件编辑 - **`/provider`** 切换厂商 / 端点 / 模型 - **`/mode`** 切换 agent 自主程度 - **`/status`** 查看当前运行状态,可在应用内安装缺失的 LSP 服务器 - **`/mcp`** 查看已连接的 MCP 服务器及其工具 - **`/im`** 打开统一 IM 面板 — 管理所有频道绑定、启用/禁用适配器、查看状态 - **`/qq`**、**`/telegram`**、**`/discord`**、**`/slack`**、**`/feishu`**、**`/dingtalk`** 打开对应平台的专属面板进行配对和绑定 - **`/harness`** 运行仓库 harness 工作流,如脚手架、检查和清理 - 当 agent 确实无法继续时,它会打开一个**分页 ask_user 问卷**,并从你的批量回答中恢复 ## ggcode 能做什么 从产品角度来看,ggcode 不只是"和模型聊天": - **代码理解** — 读取文件、搜索仓库、检查 git 状态和 diff - **快速项目浏览** — 打开全屏文件浏览器,展开文件夹、按文件名过滤、预览 Markdown / 源码文件 - **语义代码导航** — 使用一流的本地 LSP 服务器(如 `gopls`、`rust-analyzer`、`clangd`、`sourcekit-lsp`、`lua-language-server`、Python 服务器,以及 YAML / JSON / Dockerfile / shell 文件的配置语言服务器)进行 hover、定义跳转、引用查找、符号搜索、工作区符号、诊断、代码操作、重命名,并可从 `/status` 在应用内安装 - **代码修改** — 创建文件、编辑指定区域、通过 checkpoint 撤销编辑 - **命令执行** — 运行前台命令或长时间运行的后台任务 - **并行协助** — 生成子 agent、检查进度、轮询长时间运行的 worker,不会阻塞主循环 - **记忆和上下文** — 加载项目记忆文件如 `GGCODE.md`、`AGENTS.md`、`CLAUDE.md`、`COPILOT.md` - **可扩展性** — 连接 MCP 服务器、自定义插件和 skills,与内置 LSP 工作流协同 - **远程 IM 交互面** — 将当前工作区绑定到 IM 频道(QQ、Telegram、Discord、Slack、钉钉、飞书、PC),远程聊天可以镜像状态并接收 agent 输出的实时流;来源频道的用户回显会被抑制以避免重复消息;详见下方 [IM 集成](#im-集成) - **会话连续性** — 保存、恢复、导出和压缩对话;自动压缩使用智能截断和 LLM 摘要,配合 session checkpoint 实现快速恢复 - **Harness 工作流** — 脚手架仓库指导、执行不变量、跟踪运行、垃圾回收过期任务状态 ## 模式:agent 有多大自由度 | 模式 | 适合场景 | 含义 | | --- | --- | --- | | `supervised` | 大多数用户 | 工具未明确允许或拒绝时询问 | | `plan` | 安全探索 | 只读式调查;阻止写入和命令执行 | | `auto` | 日常快速工作 | 较安全的操作自动执行,危险操作保持谨慎 | | `bypass` | 高信任工作流 | 几乎允许一切,仅在关键操作时暂停 | | `autopilot` | 高级用户 | 类似 bypass,但更倾向安全猜测,只在真正被卡住时通过 `ask_user` 最后求助 | ## 常用斜杠命令 ### 核心工作流 | 命令 | 功能 | | --- | --- | | `/help` 或 `/?` | 显示应用内帮助 | | `/provider [vendor]` | 打开 provider 管理器,切换厂商 / 端点 / 模型,包括 GitHub Copilot 登录/登出流程 | | `/model ` | 直接切换模型 | | `/mode ` | 切换权限模式 | | `/status` | 查看当前状态,包括本地 LSP 可用性、安装提示和应用内安装 | | `/config` | 查看或更新配置 | | `/update` | 下载最新 release 并重启到更新后的二进制文件 | | `/lang ` | 切换界面语言 | ### 会话和恢复 | 命令 | 功能 | | --- | --- | | `/sessions` | 列出已保存的会话 | | `/resume ` | 恢复之前的会话 | | `/export ` | 将会话导出为 Markdown | | `/clear` | 清空当前对话 | | `/compact` | 压缩对话历史 | | `/undo` | 撤销最后一次文件编辑 | | `/checkpoints` | 列出可用的编辑检查点 | 对于直接下载 GitHub release 不稳定的环境,可以设置 `GGCODE_UPDATE_BASE_URLS` 为逗号分隔的 release 源列表。每项可以是普通的 release 基础 URL 或完整的 URL 代理前缀。 ### 扩展能力 | 命令 | 功能 | | --- | --- | | `/mcp` | 查看 MCP 服务器和 MCP 工具 | | `/plugins` | 列出已加载的插件 | | `/skills` | 浏览 agent 可用的 skills | | `/memory` | 查看已存储的记忆 | | `/agents` | 列出活跃的子 agent | | `/agent ` | 查看子 agent 详情 | | `/im` | 打开统一 IM 面板 — 管理所有频道、启用/禁用绑定、查看适配器状态 | | `/qq` | 打开 QQ 专属面板进行配对和绑定 | | `/telegram` 或 `/tg` | 打开 Telegram 面板 | | `/discord` | 打开 Discord 面板 | | `/slack` | 打开 Slack 面板 | | `/feishu` 或 `/lark` | 打开飞书面板 | | `/dingtalk` 或 `/ding` | 打开钉钉面板 | | `/todo` | 查看或管理 todo 状态 | | `/image` | 附加图片 | | `/bug` | 报告 bug | | `/init` | 为当前项目生成 `GGCODE.md` | | `/harness` | 打开 harness 面板,支持 `init/check/monitor/queue/tasks/run/run-queued/review/promote/release/gc/doctor`;`queue` 和 `run` 使用当前输入草稿,直接输入 `/harness ...` 命令同样有效 | | `/exit`、`/quit` | 退出 ggcode | ## 非交互和脚本化使用 ggcode 也支持简单的管道模式,当你不想打开 TUI 时: ```bash ggcode \ --prompt "总结这个仓库的改动" \ --allowedTools read_file \ --output summary.md ``` 对于 harness 工程化风格的仓库,ggcode 还提供了追踪控制面: ```bash ggcode harness init --goal "构建一个 ERP 系统" ggcode harness check ggcode harness queue "实现采购工作流" ggcode harness queue --context internal-inventory "实现库存工作流" ggcode harness queue --depends-on "实现库存工作流" ggcode harness tasks ggcode harness monitor ggcode harness monitor --watch --interval 2s ggcode harness contexts ggcode harness inbox ggcode harness inbox promote --owner inventory-team ggcode harness inbox retry --owner unowned ggcode harness run --all-queued ggcode harness run --all-queued --retry-failed ggcode harness run --resume-interrupted --retry-failed ggcode harness review ggcode harness review approve ggcode harness review reject --note "需要边界清理" ggcode harness promote ggcode harness promote apply ggcode harness promote apply --all-approved ggcode harness release ggcode harness release --owner inventory-team ggcode harness release --context internal/inventory ggcode harness release --environment staging ggcode harness release --group-by owner ggcode harness release apply --note "staging wave" ggcode harness release apply --group-by context --batch-id release-erp ggcode harness release rollouts --environment prod ggcode harness release rollouts ggcode harness release advance rollout-erp ggcode harness release approve rollout-erp --wave 2 --note "变更委员会已批准" ggcode harness release reject rollout-erp --wave 2 --note "等待策略审查" ggcode harness release pause rollout-erp --note "等待签字" ggcode harness release resume rollout-erp --note "已收到签字" ggcode harness release abort rollout-erp --note "冻结窗口" ggcode harness doctor ggcode harness gc ``` ### Harness 工作流:从脚手架到发布 Harness 是 ggcode 中的仓库级控制面。它设计用于那些对单次聊天来说太大或状态太复杂、但仍想复用相同 agent、工具和审批模型的工作。 1. **初始化项目平面** - `ggcode harness init` 在目录为空或非 git 时自动引导 git - 创建 `.ggcode/harness.yaml`、根指导文件和监控状态文件 `.ggcode/harness/events.jsonl` 及 `.ggcode/harness/snapshot.db` - 在较大的仓库中,它还会检测明显的限界上下文(如 `cmd/` 和 `internal/*`),然后写入嵌套的 `AGENTS.md` 文件,使局部指导靠近它管理的代码 2. **排队和执行追踪工作** - `ggcode harness queue` 创建持久化的待办项而非立即启动一次性运行 - 任务可以用 `--context` 限定范围,用 `--depends-on` 设置依赖门控,下游工作在前置条件完成前保持 `blocked` 状态 - 排队执行**默认由 worker 支持**,通常在 `.ggcode/harness/worktrees/` 下的隔离工作树中运行,保持仓库根目录在长时间工作中更整洁 - 如果仓库根目录有真实的未提交或未跟踪项目文件,`harness run` 现在会询问是否先在主工作区创建一个 **checkpoint 提交**;拒绝则取消运行而非静默从过期基础分叉 - `run.max_attempts`(在 `.ggcode/harness.yaml` 中)、`ggcode harness run --retry-failed` 和 `ggcode harness run --resume-interrupted` 覆盖有界重试和中断会话恢复 3. **检查和路由操作状态** - `ggcode harness monitor` 显示实时任务/release/rollout 快照,支持 `--watch` - `ggcode harness contexts` 按限界上下文汇总待办状态,包括验证失败和发布就绪性 - 上下文可以携带轻量级 owner 元数据,`ggcode harness inbox` 将其转换为按 owner 分组的可操作桶(review 就绪、promotion 就绪和可重试的工作) - `ggcode harness doctor` 和 `ggcode harness gc` 处理熵信号,如过期的 blocked 任务、孤立的工作树和 worker/任务漂移 4. **将验证通过的工作推进到发布** - 完成的任务持久化交付证据(如变更文件和交付报告),然后进入**审查循环** - `ggcode harness review` 批准或拒绝已验证的任务;被拒绝的项带着备注重新进入重试路径 - 批准的工作通过 `ggcode harness promote` 进入**晋升循环**,应用时也可将 git-worktree 任务分支合并回仓库根目录 - 晋升的工作通过 `ggcode harness release` 和 `ggcode harness release apply` 进入**发布循环**,支持可选的 `--owner`、`--context`、`--environment` 和 `--group-by owner|context` - 分组发布变成由 `harness release rollouts`、`approve`、`reject`、`advance`、`pause`、`resume` 和 `abort` 管理的阶段性 rollout 波次 Rollout 和门控状态在 release 命令之外也可见:`harness doctor`、`harness contexts` 和 `harness inbox` 都会展示 rollout 活动和门控计数(`pending`、`approved`、`rejected`),操作者无需在狭窄的子命令之间跳转即可监控进度。 有用的标志: - `--prompt` / `-p` — 运行非交互式提示 - `--allowedTools` — 限制管道模式下允许的工具 - `--output` — 将结果写入文件而非 stdout - `--bypass` — 以 bypass 模式启动 - `--resume ` — 立即恢复之前的会话 - `--config ` — 使用指定的配置文件 ## IM 集成 ggcode 可以连接到聊天平台,让你从手机、另一台机器或共享团队频道与 agent 交互。支持的平台: | 平台 | 命令 | 传输方式 | | --- | --- | --- | | QQ | `/qq` | WebSocket(QQ 机器人网关) | | Telegram | `/telegram` 或 `/tg` | 长轮询或 webhook | | Discord | `/discord` | Discord Gateway | | 飞书 / Lark | `/feishu` 或 `/lark` | 飞书 WebSocket | | 钉钉 | `/dingtalk` 或 `/ding` | 钉钉 Stream 模式 | | Slack | `/slack` | Socket Mode | | PC | `/pc` | PC 中继 | ### 快速设置 1. **配置适配器** — 在 `ggcode.yaml` 的 `im.adapters` 中配置(完整示例见 `ggcode.example.yaml`): ```yaml im: enabled: true adapters: telegram: enabled: true platform: telegram extra: bot_token: ${TELEGRAM_BOT_TOKEN} ``` 2. **启动 ggcode** — 适配器在启动时自动连接。 3. **绑定频道** — 在 TUI 中使用 `/im` 查看所有适配器并绑定/解绑频道,或使用平台专属命令(如 `/telegram`)配对。 ### 功能特性 - **实时流式传输** — agent 输出实时推送到 IM 频道 - **远程命令** — 从聊天中发送 `/provider`、`/model`、`/mode` 等命令 - **Ask-user 转发** — 当 agent 需要确认时,问题会出现在聊天中,你的回复会反馈给 agent - **回显抑制** — 你从来源频道发送的消息不会被回显,避免重复噪音 - **按频道绑定** — 将多个频道绑定到同一工作区;每个频道独立接收 agent 输出 - **语音消息** — 可选的 STT 集成将语音消息转录为文本提示(配置 `im.stt`) - **启用/禁用频道** — 使用 `/im` 临时禁用绑定而不删除 - **适配器管理** — 在 daemon 模式下,使用 `/listim`、`/muteim`、`/muteall`、`/muteself`、`/restart` 从 IM 中管理适配器 ### 统一 IM 面板(`/im`) 在 TUI 中输入 `/im` 打开统一 IM 面板。你可以: - 查看所有平台上活跃和已禁用的频道绑定 - **禁用**频道(按 `d`)— 暂停该频道的 agent 输出 - **启用**之前禁用的频道(按 `e`) - 使用 `j`/`k` 或方向键导航;按 `Esc` 关闭 ### Daemon 模式 IM 斜杠命令 在 daemon 模式(`ggcode daemon`)下,IM 频道可通过斜杠命令管理适配器: | 命令 | 说明 | |------|------| | `/listim` | 列出所有 IM 适配器及其状态(在线/静音/活跃) | | `/muteim <名称>` | 静音指定适配器(不能静音自己 — 用 `/muteself`) | | `/muteall` | 静音所有适配器(你正在使用的除外) | | `/muteself` | 静音当前适配器(停止所有回复;从其他适配器用 `/restart` 恢复) | | `/restart` | 重启 daemon(解除所有静音 — 静音状态不持久化) | | `/help` | 显示可用命令 | ## A2A(Agent-to-Agent) 多个 ggcode 实例可以通过 A2A 协议互相发现、认证并跨实例调用工具。默认启用,端口自动分配。 ### 认证方式 六种认证方案可单独或组合启用: | 方案 | 配置键 | 适用场景 | |------|--------|---------| | **Localhost(默认)** | *(无需配置)* | 单用户开发 | | **API Key** | `a2a.auth.api_key` | 开发环境、可信网络 | | **OAuth2 + PKCE** | `a2a.auth.oauth2` | 需人工触发的 agent | | **Device Flow** | `a2a.auth.oauth2` + `flow: "device"` | 无头服务器、SSH | | **OpenID Connect** | `a2a.auth.oidc` | 企业 SSO | | **双向 TLS** | `a2a.auth.mtls` | 机器对机器、零信任网络 | > **安全默认值:** 未配置认证时,仅允许来自同一台机器的请求访问(`localhost`、回环地址或本机网卡 IP)。如需暴露给远程 agent,**必须**配置至少一种认证方案,或显式设置 `allow_unauthenticated: true`(不推荐用于生产环境)。 ```yaml # 最简:共享 API Key a2a: auth: api_key: "my-secret-key" # GitHub 零配置 a2a: auth: oauth2: provider: "github" ``` 完整认证指南(所有方案、提供商预设、决策矩阵)见 [`docs/a2a-auth.md`](docs/a2a-auth.md)。 ## 配置 大多数用户只需要一个简短的配置文件: ```yaml vendor: zai endpoint: cn-coding-openai model: glm-5-turbo language: zh-CN default_mode: supervised allowed_dirs: - . tool_permissions: read_file: allow search_files: allow run_command: ask write_file: ask ``` ggcode 内置了主流厂商和多个编程向端点的预设,包括阿里云百炼 Coding Plan,所以通常你只需选择厂商或设置 API Key,而不需要自己编写完整的 provider 目录。 近期内置的路由式预设包括 **AIHubMix**、**GetGoAPI**、**Novita AI**、**Poe**、**Requesty** 和 **Vercel AI Gateway**。在 TUI 的 `/provider` 面板中,ggcode 还会显示当前选中厂商/端点所需的 API Key 环境变量,无需猜测。 对于长时间运行或交互式 shell 工作,内置的异步命令工具让 agent 可以启动后台命令、轮询进度、发送后续 stdin 输入、停止任务,而不阻塞整个会话。 Skills 通过 `/skills` 浏览和查阅文档,但它们不是用户的斜杠命令接口。它们主要是 agent 可复用能力清单的一部分,由模型在适当时通过 `skill` 工具调用。 内置 skills 现在覆盖了多个高价值操作工作流,包括**调试**、**验证**、**ggcode 配置编辑**和**通过 MCP 的浏览器自动化指导**。 完整的配置参考、示例、厂商目录、hooks、MCP 服务器、插件和子 agent 设置,请参见: - [`ggcode.example.yaml`](ggcode.example.yaml) ## MCP、插件、hooks 和记忆 ### MCP 服务器 当你希望 ggcode 访问外部工具生态时使用 MCP。 ```yaml mcp_servers: - name: filesystem command: npx args: - -y - "@anthropic/mcp-filesystem" - /path/to/allowed/dir ``` ggcode 自动发现 MCP 工具并在 agent 循环中使其可用。 #### MCP OAuth 2.1 需要认证的 HTTP 类型 MCP 服务器通过标准 MCP OAuth 2.1 流程支持。当 MCP 服务器返回 `401 Unauthorized` 时,ggcode 自动: 1. 发现 OAuth 授权服务器元数据 2. 通过动态客户端注册(DCR)注册客户端(或使用内置/配置的 client ID) 3. 打开浏览器进行设备流授权 4. 在 `~/.ggcode/provider_auth.json` 中存储和刷新访问令牌 对于不支持动态客户端注册的服务器,可以配置 client ID: ```yaml mcp_servers: - name: github type: http url: https://api.githubcopilot.com/mcp/ oauth_client_id: "Iv1.xxxxxxxxxxxx" ``` 常见服务器(如 GitHub MCP)已内置 client ID。 如果你需要浏览器自动化,先连接一个浏览器相关的 MCP 服务器。连接后,其工具会出现在 `/mcp` 中,任何基于提示的浏览器工作流也会出现在 `/skills` 中。ggcode **不会**在没有配置浏览器 MCP 服务器的情况下假装有内置浏览器控制能力。 内置的快速启动路径是 `/mcp` 面板(`b`)中的 Playwright 预设: ```yaml mcp_servers: - name: playwright type: stdio command: npx args: - -y - "@playwright/mcp" ``` ### 插件和 Skills - **插件** 从配置中添加自定义工具 - **Skills** 添加更高级别的功能和工作流 - **`/skills`** 是查看当前可用技能的最简单入口,包括 MCP 服务器连接后基于提示的技能 - 内置 skills 包括操作辅助工具,如 `debug`、`verify`、`update-config` 和 `browser-automation` ### 项目记忆 ggcode 可以从以下文件加载项目指导: - `GGCODE.md` - `AGENTS.md` - `CLAUDE.md` - `COPILOT.md` 使用这些文件告诉 ggcode 你的项目如何运作、遵循什么约定、避免什么。 ## Shell 补全 ```bash # Bash ggcode completion bash > /etc/bash_completion.d/ggcode # Zsh ggcode completion zsh > "${fpath[1]}/_ggcode" # Fish ggcode completion fish > ~/.config/fish/completions/ggcode.fish # PowerShell ggcode completion powershell | Out-String | Invoke-Expression ``` ## 更多文档 - **想使用产品?** 从本 README 开始 - **想要完整配置参考?** 参见 [`ggcode.example.yaml`](ggcode.example.yaml) - **想了解实现细节?** 参见 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) ## 许可证 MIT