jsgrrchg/Comando
GitHub: jsgrrchg/Comando
面向开源维护者的轻量级 agentic 代码编辑器,在多面板界面中统一 AI 协作、代码编辑、终端、Git 和 GitHub 工作流,强调代码始终可见且 agent 变更可审查。
Stars: 7 | Forks: 0
# Comando
Comando 是一款本地优先的桌面工作空间,专为使用多个 AI agent 编写代码而设计。它是一个轻量级的 agentic 代码编辑器,旨在将聊天、文件、终端、Git、GitHub 和变更审查保持在一个多面板界面中可见,而并非试图成为一个完整的 IDE。如今许多工具正转向以聊天为中心的工作流,使得用户阅读和编写代码变得困难;Comando 则采取了相反的立场,在与 agent 进行无缝协作的同时,不牺牲与代码的紧密接触。
目前该代码库结合了以下内容:
- 一个带有 Rust 原生后端的 Electron 桌面应用,负责持久化、文件系统访问、项目索引、Git、终端、密钥和 AI 会话。
- 一个面向代码的工作空间,具备分割面板、持久化标签页、Monaco 编辑、快速打开、项目搜索、Git gutter 和原生终端标签页。
- 一个基于 ACP 的 AI 层,支持 Codex、Claude、Grok、Kilo 和 OpenCode runtime。
- 一个 AI 变更审查 pipeline,包含文件内嵌审查、聊天级别的 diff 卡片,以及专门用于保留/拒绝工作流的“审查”标签页。
- 一流的 Git 和 GitHub 界面,支持状态、diff、暂存、提交、分支、worktree、issue、pull request、check、Actions 日志、release 和通知。
- 用于 macOS、Windows 和 Linux 发布产物的跨平台打包脚本。
## Comando 目前的定位
当前产品已经包含:
- 本地项目打开、代码库克隆、路径重定位、项目应用数据清理,以及感知 worktree 的项目状态
- 具备可调整大小面板、可拖拽标签页、标签页固定、最近关闭的标签页、独立项目窗口以及持久化布局恢复的桌面工作空间
- 带有文件系统监视、延迟加载、外部拖放、上下文操作以及按名称或路径快速打开的文件树导航
- 基于 Monaco 的文本/代码编辑,支持自动保存、Vim 模式、相对行号、minimap 和建议设置、TextMate tokenization、文件图标以及编辑器缩放控件
- 由 Rust sidecar 和 `portable-pty` 驱动的原生终端标签页,包括工作空间范围的终端状态
- AI 聊天标签页,支持排队的 prompt、图像附件、文件/文件夹/选区提及、提交提及、GitHub issue 和 pull request 提及,以及特定于 runtime 的模型/模式/配置控件
- AI 会话历史记录,支持对话分页、置顶对话、重命名/删除流程,以及项目/worktree 范围限定
- 显式的 agent 权限、用户输入路由、实时的工具活动、生成的图像预览以及 Codex 子 agent 会话投射
- 针对受支持文件更改的内嵌 AI 审查、hunk 级别的保留/拒绝操作、冲突状态,以及由 Rust/WASM diff 逻辑提供支持的专门“审查”标签页
- Git 状态、历史记录、提交详情、已暂存/未暂存的 diff、暂存、取消暂存、丢弃、提交、拉取、推送、分支创建/检出/删除,以及 worktree 创建/移除/diff
- GitHub issue、pull request、评论、标签、里程碑、check、工作流运行、作业日志、产物、注释、失败作业重运行、运行取消、通知、release 说明以及 release 发布
- 用于 AI 提供商、主题预设、浅色/深色/系统外观、应用缩放、文件树缩放、agent 侧边栏缩放、编辑器排版、聊天排版、终端 shell 和更新行为的应用设置
AI 对话和工作空间状态本地存储在由原生后端管理的应用数据区域中。密钥通过操作系统支持的密钥存储进行保存,而不是明文设置文件。
## 为什么它与众不同
许多工具正转向以聊天为中心的工作流,这拉远了用户与直接阅读和编写代码的距离。Comando 采取了相反的立场:代码始终保持可见、可编辑和可审查,并且 agent 发出的工具活动不会隐藏在二级菜单之后。一切对用户都是可检查的,设计上每个窗口对应一个项目分支。
- Agent 不会被当作单一的聊天侧边栏对待。Comando 的设计围绕许多并发的 agent 会话,在同一个工作界面中提供分割面板、终端、diff 和文件。
- Agent 编辑保持可审查。Comando 通过操作日志、内嵌装饰、hunk 控件和专门的审查界面来追踪建议的更改,然后它们才会成为已接受的工作空间状态。
- 该应用具备项目和工作树感知能力。AI 会话、Git 状态、GitHub 上下文、终端标签页和历史记录都被限定在你实际工作的代码库范围内。
- GitHub 是工作流的一部分。Issue、pull request、check、Actions 日志和 release 流程可以作为工作空间标签页打开,并直接附加到 prompt 中。你可以将 issue 和 pull request 拖拽到 agent 的编辑器中。
- Comando 有意设计得比完整的代码编辑器或 IDE 更轻量。它并不试图吸收语言服务器、调试器堆栈、重构引擎、扩展市场、任务运行器,或者来自 VS Code、JetBrains、Zed 或类似工具的每一个深度编辑器功能。
- 该架构是本地优先的。Electron 主要作为 UI 和编排层;Rust sidecar 负责持久化和敏感的工作。
## 当前功能
### 项目和工作空间
- 打开本地文件夹并将代码库克隆到项目目录中。
- 跟踪最近的项目、活动项目、活动的 worktree 以及特定于项目的设置。
- 打开多个项目窗口,并保持窗口和工作空间状态的持久化。
- 水平或垂直分割面板,在面板之间拖拽标签页,固定标签页,重新排序标签页,以及重新打开最近关闭的标签页。
- 打开文件、聊天、聊天历史、审查、Git、Git 提交、Git worktree diff、GitHub issue、GitHub pull request、GitHub 列表和终端标签页。
- 使用针对文件、终端、Git 视图、聊天历史和新建 agent 会话的快速创建和快速打开流程。
- 通过原生索引和模糊文件排名搜索项目条目。
### 编辑和导航
- 通过 Monaco 编辑文本和代码文件。
- 使用自动保存、可配置的字体族、字号、行高、minimap、建议、相对行号和 Vim 模式。
- 通过 Catppuccin 风格的类型图标渲染文件图标。
- 将选定的编辑器行作为结构化上下文附加到聊天中。
- 编辑时查看实时的 Git gutter 更改。
- 从对话、审查、工具、Git 和 GitHub 引用中打开特定行范围的文件。
- 创建、复制、重命名、删除、移至废纸篓、在文件夹中显示以及在外部打开项目条目。
### AI 和变更控制
- 运行 Codex、Claude、Grok、Kilo 和 OpenCode 的 ACP 会话(未来会支持更多)。
- 从设置中配置 runtime 身份验证方法、自定义二进制路径、网关 URL、API key 和诊断。
- 在支持的情况下,从应用启动 runtime 身份验证流程。
- 发送带有文件提及、文件夹提及、选区提及、外部文件引用、Git 提交、GitHub issue、GitHub pull request 和图像附件的 prompt。
- 在对话回合处于活动状态时排队 prompt,编辑排队的 prompt,暂停队列处理,并手动恢复。
- 流式传输消息、工具活动、计划、状态事件、用户输入请求、权限提示和生成的图像。
- 将 AI 会话历史记录保存在本地,支持对话分页、置顶会话、标题编辑和删除。
- 在编辑器内嵌、聊天工具卡片内或“审查”标签页中审查 agent 编辑。
- 保留或拒绝完整文件、选定的 hunk 或所有待处理的已跟踪文件。
- 在实时快照和持久化对话记录之间保留未解决的审查状态。
### Git 和 GitHub
- 从活动项目或 worktree 解析代码库状态。
- 查看 Git 状态、同步状态、远程仓库、分支、worktree、历史记录、提交详情、diff 和原始文件内容。
- 暂存、取消暂存、丢弃、提交、检出、创建分支、删除本地/远程分支、创建/移除 worktree、拉取、推送、克隆和初始化代码库。
- 从远程仓库解析 GitHub 代码库,并使用保存的 token 或可用的 `gh` CLI token 进行身份验证。
- 列出、打开、创建、更新、评论、关闭和重新打开 issue。
- 列出、打开、创建、更新、评论、标记为就绪、转换为草稿以及在 pull request 上请求审查者。
- 检查 check、工作流运行、作业、日志、产物和 check-run 注释。
- 当 token 具有权限时,重新运行失败的工作流作业并取消工作流运行。
- 列出通知、release、标签和里程碑。
- 生成 release 说明,创建 release,并发布草稿 release。
### 原生后端
- 带有协议协商和类型化 IPC 适配器的 JSONL stdio sidecar。
- 基于 SQLite 的应用持久化、项目注册表、工作空间快照、设置和应用数据记录。
- 操作系统支持的 keyring/安全存储与 AI 的集成
- 用于读取、写入、修改、复制操作、树状列表和监视失效的文件系统服务。
- 带有取消功能的增量项目索引和内容/路径搜索。
- Git 命令执行、解析、状态快照、diff、worktree 和修改结果。
- 通过 `portable-pty` 进行终端生命周期管理和输出流式传输。
- AI runtime 设置、会话生命周期、历史记录、对话记录存储、权限、用户输入和审查磁盘修改。
- 用于审查 hunk 和操作日志对账的 Rust/WASM diff 引擎。
## 代码库布局
```
apps/
native-backend/ Rust stdio sidecar entrypoint
crates/
comando-ai/ ACP runtime management, sessions, history, permissions, review bridge
comando-diff/ Rust diff and review engine plus WASM bindings
comando-fs/ Project filesystem access, mutations, watchers, tree reads
comando-git/ Git status, diffs, history, branches, worktrees, mutations
comando-index/ Project indexing, ranking, path/content search
comando-persistence/ SQLite store, metadata, health, migrations
comando-projects/ Project registry and project path metadata
comando-settings/ Runtime setup state and secret storage
comando-terminal/ PTY sessions and terminal output
comando-types/ Shared native protocol and domain DTOs
src/
main/ Electron main process, IPC handlers, windows, services
preload/ Typed renderer bridge
renderer/ React app, stores, workspace, settings, Git/GitHub UI
shared/ Shared TypeScript contracts, settings, review helpers, native adapters
test/ Shared test helpers
resources/
ai/ Staged AI runtime payloads used by dev/build/package flows
icons/ Platform icon sources and generated icon assets
scripts/
ai/ AI runtime staging and validation
native/ Native backend build/stage/verify scripts
package-*.mjs macOS, Windows, and Linux packaging workflows
vendor/
codex-acp/ Vendored Codex ACP runtime source
Claude-agent-acp-upstream/
Vendored Claude ACP runtime project
```
## 技术栈
- **桌面 shell**:Electron 42, electron-vite 5, electron-builder 26, electron-updater
- **前端**:React 19, TypeScript 6, Vite 8, Tailwind CSS 4, Zustand 5
- **编辑器和终端**:Monaco Editor, vscode-textmate, vscode-oniguruma, xterm.js, Monaco Vim
- **原生后端**:Rust 2024, `rusqlite`, `keyring`, `notify`, `portable-pty`, `agent-client-protocol`, `imara-diff`
- **AI runtime**:通过暂存/捆绑的 sidecar 和外部 runtime 命令实现的 ACP
- **测试**:用于 TypeScript 的 Vitest,用于 Rust crate 的 Cargo 测试,用于原生协议 payload 的 fixture 一致性测试
## 开发
环境要求:
- Node.js `^20.19.0` 或 `>=22.12.0`
- pnpm `10.33.0`
- Rust 和 Cargo
- 仅在使用 `pnpm native:wasm` 重新构建审查 WASM bundle 时需要 `wasm-bindgen`
安装并运行:
```
pnpm install
pnpm dev
```
`pnpm dev` 会在 `Comando Dev` 频道中启动 Electron 应用。`predev` 钩子会以 debug 模式构建并暂存 Rust 原生后端,然后暂存 AI runtime。
有用的开发命令:
```
pnpm build
pnpm typecheck
pnpm lint
pnpm test
pnpm check
```
原生后端命令:
```
pnpm native:build
pnpm native:test
pnpm native:stage
pnpm native:check
pnpm native:wasm
```
AI runtime 命令:
```
pnpm stage:ai
pnpm stage:codex-runtime
pnpm verify:ai-runtimes
```
## 验证
完整应用验证:
```
pnpm check
```
这会运行 TypeScript 检查、ESLint、Vitest 以及 Electron 生产构建。
Rust 工作空间测试:
```
cargo test --workspace
```
原生协议和持久化检查:
```
pnpm native:protocol:check
pnpm native:persistence:check
```
该代码库包含针对渲染器存储/组件、主进程服务、IPC 适配器、Git/GitHub 行为、原生后端桥接、审查逻辑和打包助手的广泛 Vitest 覆盖,以及跨原生 crate 的 Rust 测试。
## 打包
打包必须在目标平台上运行。
macOS:
```
pnpm package:mac
pnpm release:mac
```
Windows:
```
pnpm package:win
pnpm package:win:x64
pnpm package:win:arm64
pnpm release:win:x64
pnpm release:win:arm64
```
Linux:
```
pnpm package:linux
pnpm package:linux:appimage
pnpm package:linux:deb
pnpm package:linux:rpm
pnpm release:linux
```
生成的产物会被写入特定于平台的构建输出目录:
- macOS:`build/macos-package/project/dist/`
- Windows 和 Linux:`dist/`
打包过程会将原生后端 sidecar 和 AI runtime payload 暂存在 `build/package-resources/` 下。macOS 构建会生成通用的 `.dmg` 和 `.zip` 产物。Windows 构建会生成适用于 `x64` 和 `arm64` 的 NSIS 安装程序。Linux 构建以 AppImage、deb 和 rpm 为目标。
## AI Runtime 说明
Comando 目前连接了五个 ACP runtime:
- `codex`
- `claude`
- `grok`
- `kilo`
- `opencode`
当前暂存状态:
- Codex 作为原生 sidecar 二进制文件从 `vendor/codex-acp` 暂存,或者在提供了预构建的 bundle 二进制文件时,从 `COMANDO_CODEX_ACP_BUNDLE_BIN` 暂存。
- Claude 从 `vendor/Claude-agent-acp-upstream` 暂存,并带有嵌入式 Node runtime。
- Grok、Kilo 和 OpenCode 作为可配置的外部 runtime 集成,需要相应的 CLI/验证设置或 API key 配置。
开发期间的 runtime 二进制覆盖:
- `COMANDO_CODEX_ACP_BIN`
- `COMANDO_CLAUDE_ACP_BIN`
- `COMANDO_GROK_ACP_BIN`
- `COMANDO_KILO_ACP_BIN`
- `COMANDO_OPENCODE_ACP_BIN`
Bundle/暂存覆盖:
- `COMANDO_CODEX_ACP_BUNDLE_BIN`
- `COMANDO_EMBEDDED_NODE_BIN`
诊断可识别的凭证环境变量包括:
- `OPENAI_API_KEY`
- `CODEX_API_KEY`
- `ANTHROPIC_API_KEY`
- `ANTHROPIC_AUTH_TOKEN`
- `ANTHROPIC_BASE_URL`
- `ANTHROPIC_BEDROCK_BASE_URL`
- `ANTHROPIC_CUSTOM_HEADERS`
- `XAI_API_KEY`
- `KILO_API_KEY`
- `OPENCODE_API_KEY`
通过设置 UI 保存的密钥会通过原生密钥存储进行安全存储。外部 CLI 登录仍然由它们各自的 runtime 所拥有。
## 项目状态
Comando 目前正处于完善和强化阶段。核心系统已经存在:工作空间、编辑器、AI 会话、审查流程、Git、GitHub、终端、原生持久化和打包。该项目目前仍处于 `1.0` 版本之前,现在最重要的工作是稳定性、性能、UI 完善和发布强化。目前请勿将 Comando 作为你唯一的 IDE 使用。
目前产品敏感度最高的领域是:
- AI 审查和变更控制
- 内嵌审查和 hunk 级别的保留/拒绝行为
- 会话历史记录、对话恢复和长对话性能
- 多面板和多窗口工作空间恢复
- Git worktree 流程和 GitHub Actions 诊断
- 跨 macOS、Windows 和 Linux 的打包 runtime 暂存
## 已知的不足之处
- 带有待处理的 agent 审查更改的文件在待处理的 AI 审查状态得到解决之前无法编辑。目前这是有意为之。
- 当 agent 编辑基于模糊的代码片段,或者当 agent 在不使用编辑工具的情况下进行更改时,某些待处理的审查 diff 可能不够精确。
- 在内嵌审查和可编辑文件视图之间切换时,滚动恢复可能不够完美。
- 亚克力透明度在 Windows 10 上无法可靠渲染;作为变通方法,Windows 10 用户可以在“设置”>“外观”中禁用窗口透明度。
## 许可证
Comando 采用 GNU General Public License v3.0 进行分发。
```
Copyright 2026 Comando contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```
标签:AI编程助手, Git客户端, Rust, 代码审查, 可视化界面, 桌面应用, 网络流量审计, 自动化攻击, 集成开发环境