内容
# Codrift
> 从一个桌面应用程序驱动多个 AI 编程代理跨项目运行。
Codrift 是一个桌面应用程序,用于运行 Claude Code、Codex、Opencode、Gemini、Copilot 和 shell 代理,支持在同一界面下并行运行。您可以将目录分组为**项目**,针对每个项目启动代理,实时查看输出,审查差异,并让它们通过内置的内存存储共享知识。

Codrift 是一个 Tauri 应用程序:一个原生窗口包装 Svelte UI,由 Elixir(Francis)服务器支持,管理代理、工作树、内存和集成。
---
## 功能
- **原生桌面应用程序** — 侧边栏 + 实时代理终端(xterm.js),键盘驱动,支持 macOS 和 Linux
- **每个目录多个代理** — Claude Code、Codex、Opencode、Gemini、Copilot 和原始终端 shell,同时运行
- **Git 工作树** — 每个目录获取一个隔离的分支;代理永远不会触及您的主分支
- **实时差异视图** — 颜色编码的拆分/统一差异每个项目,代理工作时更新
- **树视图** — 模式 `3` 显示一个文件树浏览器,带有语法高亮的预览和应用程序内编辑器
- **共享内存** — 每个项目的 FTS5 知识库;代理搜索它,然后写入它
- **MCP 服务器** — Claude Code 和其他工具连接到 Codrift 并通过 SSE 调用其工具
- **外部集成** — 从 GitHub、Linear 和 GitLab 拉取上下文
- **会话持久性** — Claude 会话在重启时存活;代理在停止的地方继续
- **上下文文件夹** — 每个项目都有 `~/.codrift/initiatives/{id}/`,由 `--add-dir` 自动拾取
---
## 快速入门
从 [GitHub Releases](https://github.com/filipecabaco/codrift/releases) 下载您平台的最新版本:
| 平台 | 软件包 |
|----------|--------|
| macOS | `.dmg` |
| Linux | `.AppImage` |
或使用安装程序,它还会将无头 `codrift` CLI 放在您的 `PATH` 中:
```bash
curl -fsSL https://codrift.sh/install.sh | sh
```
或从源代码运行:
```bash
mix deps.get
cd assets && npm install && cd ..
mix ex_tauri.install # 仅第一次运行 — 设置 Tauri 工具链
mix ex_tauri.dev # 启动应用程序并热重载
```
然后注册 MCP 服务器,以便 Claude Code 可以与 Codrift 通信:
```bash
codrift mcp install
# 运行:claude mcp add codrift --transport sse http://localhost:7437/mcp/sse \
# --header "X-Codrift-Token: <token from ~/.codrift/auth-token>"
```
---
## 核心概念
### 项目
项目是命名的最小工作单元 — 功能、错误修复或项目里程碑。每个项目包含一个或多个项目目录,并跟踪其自身状态(`planning → ongoing → done → archived`)。所有内容 — 代理、内存、工作树、集成 — 都存在于项目之下。
```
codrift initiative create "auth redesign"
codrift initiative add-dir <id> ~/projects/backend
codrift initiative add-dir <id> ~/projects/frontend
```
### Git 工作树
Codrift 可以为项目中的任何目录创建 Git 工作树(`codrift/{id}/{slug}`)。代理在那里操作,它们的更改保持隔离,直到您准备合并。
从 CLI 启用工作树(`codrift initiative worktree-enable <id> <path>`),或在项目上设置 `worktree_default`,以便新目录继承它。参见 [docs/worktrees.md](docs/worktrees.md)。
### 共享内存
每个项目都有一个可搜索的知识库(SQLite FTS5)。代理将决策、摘要和代码片段写入其中;新代理在工作前搜索它 — 节省令牌并在会话间保持一致。
```bash
codrift memory search <id> "authentication"
codrift memory add <id> decision "use JWT not sessions"
codrift memory recent <id>
```
代理也可以调用这些作为 MCP 工具(`memory_search`、`memory_add` 等)。参见 [docs/memory.md](docs/memory.md)。
### MCP 服务器
当 Codrift 运行时,MCP 服务器在 `http://localhost:7437/mcp/sse` 监听。
状态更改请求通过本地令牌(`~/.codrift/auth-token` 中发送的 `X-Codrift-Token` 头)进行身份验证。任何连接的代理都可以调用:
| 类别 | 工具 |
|----------|-------|
| 项目 | `list_initiatives`、`create_initiative`、`add_dir`、`delete_initiative`、`set_initiative_status`、`get_diff` |
| 代理 | `list_agents`、`start_agent`、`send_to_agent`、`get_agent_output` |
| 内存 | `memory_search`、`memory_add`、`memory_delete`、`memory_recent`、`memory_list` |
| 集成 | `start_oauth_flow`、`get_oauth_status`、`list_integration_items`、`import_from_integration`、`sync_initiative_context` |
---
## 键盘参考
### 全局
| 键 | 操作 |
|-----|--------|
| `j` / `k` / `↑` / `↓` | 导航侧边栏 |
| `1` / `2` / `3` | 上下文 / 差异 / 树视图 |
| `r` | 刷新项目和代理 |
| `Ctrl+P` | 命令面板 |
| `Ctrl+B` | 折叠 / 展开侧边栏 |
| `Ctrl+Q` | 退出 |
### 项目和代理
| 键 | 操作 |
|-----|--------|
| `n` | 新项目 |
| `a` | 将目录添加到项目 |
| `s` | 在光标下的目录中启动 Claude 代理 |
| `t` | 在光标下的目录中启动原始 `$SHELL` 终端 |
| `d` | 删除或停止(上下文敏感) |
| `o` | 为选定的项目启动编排 |
| `[` / `]` | 循环项目状态 |
使用 **启动** 下拉菜单(或调色板)启动 Codex、Opencode、Gemini 或 Copilot。
### 上下文、树和编辑器
| 键 | 操作 |
|-----|--------|
| `e` | 在编辑器中打开选定的文件(Vim 模式 — `:w` / `⌘S` 保存) |
| `Tab` / `Shift+Tab` | 在侧边栏和终端之间循环焦点 |
所有键都可以在 `~/.codrift/keybindings.json` 中配置。参见 [docs/keyboard.md](docs/keyboard.md) 以获取完整参考。
---
## 外部集成
直接从以下位置将问题上下文拉入项目:
**GitHub 问题 · GitHub 项目 · Linear 问题 · Linear 项目 · GitLab**
```bash
codrift integration auth github # OAuth2 浏览器流
codrift integration list github # 列出开放问题
codrift integration import github 42 # 从问题 #42 开始一个项目
```
支持 OAuth(PKCE / 设备流,在应用程序中处理)和个人 API 令牌回退。不会在二进制文件中存储秘密。参见 [docs/integrations.md](docs/integrations.md)。
---
## CLI 参考
桌面应用程序是主要界面。无头 CLI 与其一起提供,用于脚本编写和 MCP 注册:
```
codrift mcp install
codrift initiative list
codrift initiative create <name>
codrift initiative add-dir <id> <path>
codrift initiative delete <id>
codrift initiative worktree-status <id>
codrift initiative worktree-enable <id> <path>
codrift initiative worktree-disable <id> <path>
codrift memory search <id> <query>
codrift memory add <id> <type> <content>
codrift memory recent <id>
codrift memory list <id> <type>
codrift memory delete <id> <rowid>
codrift memory stats <id>
codrift integration services
codrift integration auth <service>
codrift integration list <service>
codrift integration import <service> <item_id>
codrift integration revoke <service>
codrift integration tokens
```
---
## 屏幕
| 上下文 | 差异 | 树 |
|---|---|---|
| [](docs/images/context-overview.png) | [](docs/images/diff-view.png) | [](docs/images/tree-view.png) |
还有:[命令面板](docs/images/command-palette.png)、[共享内存](docs/images/memory-view.png) 和 [集成](docs/images/integrations.png)。
---
## 文档
[架构](docs/architecture.md) · [键盘参考](docs/keyboard.md) · [树视图](docs/tree-view.md) · [差异模式](docs/diff-mode.md) · [工作树](docs/worktrees.md) · [内存](docs/memory.md) · [集成](docs/integrations.md) · [代理配置文件](docs/agent-profiles.md) · [模块](docs/modules.md) · [决策](docs/decisions.md)
---
## 架构
```
Tauri 窗口(Rust) ── spawn ──▶ Elixir 侧车(“桌面”版本)
Svelte UI(xterm.js) Codrift(应用程序)
│ HTTP + SSE :7437 └── Codrift.Supervisor (:one_for_one)
└───────────────────────────────────┤ 注册表(AgentRegistry)
├── Codrift.Initiative.Store
├── Codrift.SessionStore(SQLite)
├── Codrift.OAuth.StateStore
├── Codrift.AgentSupervisor
│ └── Codrift.AgentProcess(erlexec PTY)
├── {Task.Supervisor, Codrift.TaskSupervisor}
├── Codrift(Francis / Bandit)— HTTP + SSE
└── Codrift.ShutdownManager(仅桌面)
```
参见 [docs/architecture.md](docs/architecture.md) 和 [docs/modules.md](docs/modules.md)。
---
## 开发
```bash
mix deps.get
unbuffer mix test # 完整测试套件
mix credo --strict
mix dialyzer
mix ex_tauri.dev # 运行桌面应用程序并热重载
mix ex_tauri.build # 生成平台软件包
```
**堆栈:** Elixir · [Francis](https://github.com/filipecabaco/francis) · [ex_tauri](https://github.com/filipecabaco/ex_tauri) · Svelte · xterm.js · SQLite(Exqlite)· erlexec
### 支持的平台
| 平台 | 目标 |
|----------|--------|
| macOS(Apple Silicon) | `aarch64-apple-darwin` |
| macOS(Intel) | `x86_64-apple-darwin` |
| Linux x86\_64 | `x86_64-linux-gnu` |
| Linux arm64 | `aarch64-linux-gnu` |
---
## 许可证
MIT