Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🤖 CodePilot

CodePilot 是一个面向软件开发任务的终端 AI Agent。它以 Textual TUI 为主界面,将大模型对话、文件与命令工具、权限控制、会话记忆、MCP 扩展、子 Agent 协作和 Git Worktree 隔离整合到同一条可观察的执行链路中。

项目的目标不是封装一次模型调用,而是实现一个可持续执行多步开发任务的 Agent 运行时:模型可以读取代码、提出并执行修改、调用外部工具、等待权限确认、将结果回写会话,并在复杂任务中将工作拆分给独立的子 Agent。

🧭 设计参考与实现边界

CodePilot 的产品形态和部分工作流参考了 Claude Code:让 Agent 以终端为主要工作界面,围绕真实代码仓库完成“理解任务、读取上下文、调用工具、修改文件、执行命令、处理反馈”的连续闭环。参考的重点是 Agent 在软件开发场景中的交互方式与工程组织思路,而不是将模型调用包装成一次性的问答工具。

在设计上,项目主要借鉴以下思路:

  • 终端优先的开发体验:将对话、执行过程、工具结果和需要人工确认的操作放在同一条终端工作流中,既支持交互式 TUI,也支持通过 CLI 执行单次任务。
  • 面向任务的 Agent Loop:模型根据当前上下文决定下一步行动,工具调用结果会回写到会话历史,使任务能够在多轮推理、读取和修改之间持续推进。
  • 可控的工具与权限机制:文件访问、命令执行和高风险操作都经过统一的工具注册和权限判断,避免 Agent 在缺少约束时直接扩大操作范围。
  • 开发上下文管理:将会话记录、压缩摘要、环境信息和长期记忆纳入提示词组装过程,降低长任务中上下文丢失或无效膨胀的风险。
  • 可扩展的协作方式:通过 MCP、Skills、子 Agent 和 Git Worktree,将外部工具、专项能力和并行任务逐步接入 Agent 运行时。

在具体实现上,CodePilot 采用 Python 构建运行时,使用 Textual 提供终端界面,并实现了多模型协议接入、工具注册表、权限校验、会话与记忆管理、MCP 工具加载、Skill 安装以及多 Agent 团队协作等模块。项目会根据自身的架构与使用场景演进,并不应被视为 Claude Code 的官方客户端、兼容实现或替代产品。

✨ 项目亮点

  • 终端优先:提供 Textual 交互界面和 -p 非交互命令行入口。
  • 多模型协议:支持 Anthropic、OpenAI 和 OpenAI-Compatible 接口。
  • 可控工具执行:内置读写文件、搜索、命令执行、交互提问等工具,并通过统一注册表管理工具 Schema、启用状态和延迟暴露。
  • 权限分层:危险命令检测、路径范围校验、规则文件和权限模式共同决定一次工具调用是否放行。
  • 上下文管理:对长工具输出、历史对话和压缩后的恢复信息进行控制,降低长任务中的上下文膨胀。
  • 多 Agent 协作:支持后台子 Agent、团队邮箱、共享任务、协调者模式和 Worktree 隔离。
  • 可扩展生态:支持 MCP 服务端接入与从公共 URL 安装 Skill。

🧭 架构概览

用户输入 / CLI Prompt
        |
        v
Textual TUI / 命令行入口
        |
        v
Agent Loop
  |     |       |        |
  |     |       |        +--> Memory / Session / Context Compression
  |     |       +-----------> Permission Checker / User Confirmation
  |     +-------------------> Tool Registry
  |                              |-- 文件与搜索工具
  |                              |-- Bash 与 OS Sandbox
  |                              |-- MCP Tools / McpCall
  |                              |-- Skills
  |                              +-- Agent Teams / Worktree
  v
LLM Client (Anthropic / OpenAI / Compatible)

核心执行过程如下:

  1. 读取配置并初始化模型客户端、会话、记忆、权限和工具注册表。
  2. 组装系统提示词、项目指令、环境信息和必要的长期记忆。
  3. 将用户消息发送给模型,并消费流式文本、思考和工具调用事件。
  4. 对工具调用执行权限判断;需要确认时由 TUI 请求用户决策。
  5. 执行工具、规范化结果、修复工具调用与结果的会话配对关系,再将结果写回对话。
  6. 在模型结束前持续循环;必要时压缩上下文、派生子 Agent 或创建隔离 Worktree。

🧩 核心能力

🧠 Agent 运行时与会话可靠性

  • 维护结构化对话历史、工具调用和工具结果。
  • 支持流式文本、思考内容和工具调用事件的统一处理。
  • 自动修复缺失的工具结果,避免部分模型接口因工具调用链不完整而拒绝后续请求。
  • 编辑文件后返回带行号的差异摘要,便于模型和用户确认实际修改。
  • 支持上下文压缩、会话持久化、会话摘要和恢复。

🛠️ 本地开发工具与权限控制

内置工具包括:

  • ReadFileWriteFileEditFile
  • GlobGrep
  • Bash
  • AskUserQuestion
  • ToolSearch

权限控制由多个层次组成:

  1. 对高风险命令进行模式匹配和拦截。
  2. 对读写目标执行路径沙箱校验。
  3. 读取用户级、项目级和本地级权限规则。
  4. 根据 defaultacceptEditsplanbypassPermissionscustom 等模式做默认决策。
  5. 对未自动放行的操作请求用户确认。

在 Linux 上,可通过 bwrap 启用 OS 级命令隔离;在 macOS 上可使用 sandbox-exec。Windows 当前不提供等价的 OS 沙箱后端,仍使用路径校验和权限确认机制。

🔌 MCP 工具扩展

CodePilot 可连接 stdio 或 Streamable HTTP MCP 服务端,并将服务端工具包装为内部统一工具。

  • 自动拉取 MCP 工具 Schema。
  • 根据 Schema 体积与模型端点选择直接暴露或延迟加载策略。
  • 大规模 MCP 工具集可通过 ToolSearch 查找,再使用 McpCall 统一调度。
  • 对常见参数错误进行保守修正,例如数字字符串、布尔字符串和数组形式,减少模型调用外部工具时的无效重试。

📦 Skill 系统

Skill 用于把可复用的工作流、提示词和专用工具打包为一个可加载单元。

  • 支持项目级、用户级和内置 Skill 的优先级加载。
  • 支持 LoadSkill 激活 Skill,并向当前 Agent 注入对应的操作约束。
  • 支持目录型 Skill 的附属工具注册。
  • 支持从 skills.sh、GitHub Tree URL 或 GitHub Raw SKILL.md URL 安装公共 Skill。
  • 安装过程限制目录深度、文件数和下载体积,先写入临时目录并验证 SKILL.md 后再替换正式目录。

👥 多 Agent、团队与 Worktree

复杂任务可委派给后台子 Agent,并通过任务管理器收集完成通知。

团队协作能力包括:

  • 创建团队、成员注册和任务状态维护。
  • Lead 与队友之间的邮箱消息通信。
  • 结构化的停机请求和计划审批消息。
  • TaskStop:可取消运行中的 in-process 队友任务,并尝试关闭外部 pane 后端。
  • 协调者模式:将主 Agent 收敛为拆解、委派、汇总和验证职责。
  • Git Worktree:为需要隔离修改的任务创建独立工作目录,并支持回收。

🗂️ 目录结构

codepilot/
├── __main__.py          # CLI 入口
├── app.py               # Textual TUI 应用与装配层
├── agent.py             # Agent Loop 与工具执行编排
├── client.py            # 多模型协议客户端
├── conversation.py      # 对话、工具调用和结果结构
├── context/             # 上下文预算、压缩与恢复
├── memory/              # 会话、长期记忆与召回
├── permissions/         # 权限模式、规则、危险命令与路径校验
├── tools/               # 内置工具、MCP 调度、Skill 安装等
├── mcp/                 # MCP 客户端、管理器和工具包装
├── skills/              # Skill 解析、加载、执行和安装
├── sandbox/             # Linux/macOS OS 沙箱后端
├── agents/              # 子 Agent、后台任务和追踪
├── teams/               # 团队、邮箱、协议和成员管理
├── worktree/            # Git Worktree 创建、切换和清理
└── commands/            # Slash Command 注册与处理器

📋 环境要求

  • Python >= 3.11
  • uv
  • Git
  • 至少一个可用的大模型 API Key

可选依赖:

  • Linux:安装 bwrap 后可使用 OS 级 Bash 沙箱。
  • macOS:系统存在 sandbox-exec 时可使用 Seatbelt 沙箱。
  • 使用 MCP 时,需要对应 MCP 服务端及其运行依赖。

🚀 安装

uv venv
.venv\Scripts\Activate.ps1
uv sync

安装开发依赖并运行测试:

uv sync --group dev
uv run pytest

如使用第三方 PyPI 镜像遇到下载问题,可临时使用官方索引:

$env:UV_INDEX_URL = "https://pypi.org/simple"
uv sync

⚙️ 配置

CodePilot 按下列顺序读取并合并配置,后面的文件会覆盖前面的同名字段:

  1. ~/.codepilot/config.yaml
  2. <项目目录>/.codepilot/config.yaml
  3. <项目目录>/.codepilot/config.local.yaml

最小 Anthropic 配置示例:

providers:
  - name: anthropic-main
    protocol: anthropic
    base_url: https://api.anthropic.com
    model: claude-sonnet-4-20250514
    api_key: ${ANTHROPIC_API_KEY}

permission_mode: default

OpenAI 兼容接口示例:

providers:
  - name: openai-main
    protocol: openai
    base_url: https://api.openai.com/v1
    model: gpt-4.1
    api_key: ${OPENAI_API_KEY}

permission_mode: default

MCP 服务端示例:

mcp_servers:
  - name: local-tools
    command: python
    args:
      - tools_server.py

不要将包含真实 API Key 的 .codepilot/config.yaml.codepilot/config.local.yaml 提交到仓库。

💻 运行方式

启动交互式终端界面:

uv run codepilot

指定权限模式:

uv run codepilot --mode default
uv run codepilot --mode acceptEdits
uv run codepilot --mode plan
uv run codepilot --mode bypassPermissions

执行单次非交互任务:

uv run codepilot -p "解释 codepilot/agent.py 的主循环,并列出关键状态转换"

当配置中包含多个 Provider 时,可通过其 name 指定本次非交互任务使用的模型:

uv run codepilot --provider openai -p "为当前项目运行测试并总结失败原因"

常用 Slash Command:

命令 作用
/help 查看命令帮助
/session 创建、查看或恢复会话
/permission 查看或切换权限模式与规则
/memory 查看和管理记忆
/compact 手动压缩当前上下文
/mcp 查看 MCP 服务状态
/tasks 查看后台任务
/worktree 管理隔离工作目录
/sandbox 查看、开启或关闭 OS 命令沙箱
/status 查看运行状态

✅ 当前实现状态

当前版本已经实现:

  • 终端 TUI 与 CLI 单次执行入口。
  • 多模型协议客户端与流式工具调用。
  • 文件读写、搜索、命令执行和用户确认。
  • 会话持久化、记忆提取、上下文压缩与恢复。
  • 权限模式、规则引擎、危险命令检测与路径校验。
  • MCP 服务连接、工具包装、延迟发现和统一调度。
  • Skill 加载、目录型工具注册与公共 URL 安装。
  • 子 Agent、后台任务、团队邮箱、共享任务、协调者模式和 Worktree 隔离。
  • Linux/macOS OS 级 Bash 沙箱后端,以及 Windows 下的明确降级行为。

⚠️ 注意事项

  • 本项目会执行模型生成的文件操作和命令。请从 defaultplan 权限模式开始使用。
  • bypassPermissions 会显著降低交互确认,不应在不了解风险的环境中使用。
  • MCP 服务和从 URL 安装的 Skill 均属于外部输入,应仅使用可信来源。
  • 本仓库当前未单独声明 License。公开发布前应先确定许可证,并保留或补充所有必要的第三方署名和许可文本。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages