核心概念
Condr 是一个以终端为中心、面向多 Agent 协同的统一工作台。与把大模型做在 Webview 聊天框中的方案不同,Condr 将各厂商原生的 Agent CLI 直接运行在真实的终端环境里,在保持原生体验的同时提供跨设备、多分支的编排与状态监控。
核心设计原则
Section titled “核心设计原则”- 终端优先,原生运行:不重做对话 UI,不接管对话循环。Claude Code、Codex 等 Agent 作为原生子进程运行在 PTY 中,完整保留上下文压缩、本地配置与工具生态。
- 运行时与视图解耦:服务端(
condr-server)托管终端进程、Agent 状态与布局快照,是唯一真源;客户端窗口只是视图投影。关闭窗口不影响后台任务,多端同时接入互不干扰。 - 确定性状态感知:拒绝脆弱的屏幕字符正则抓取。状态只来自 Agent 自身:精准状态与等待原因由 Agent 通过终端 Program Status Protocol(OSC 7501)或官方生命周期 Hook(OSC 777)直接上报。
实体层级模型
Section titled “实体层级模型”Condr 的资源与界面结构按严谨的树状层级组织:
Device(物理机/虚拟机,持有唯一 Ed25519 密钥)└── Server(单机唯一的常驻后台服务,掌管运行时) └── Session(服务端维护的工作区拓扑与分屏布局快照) ├── Workspace 1(主工作区:绑定根目录,如 ~/code/my-app) │ ├── Tab 1(终端页:承载分屏 Pane,运行 Agent 或普通 Shell) │ ├── Tab 2 Diff(代码审查:查看单文件相对 HEAD 或 base 分支的差异) │ └── Tab 3 Preview(源码预览:语法高亮浏览文件) │ └── Workspace 2(托管工作树:基于 Git Worktree 的隔离分支环境) └── Tab 1(终端页) └── Pane 1(运行另一任务的 Agent)| 实体 | 职责与生命周期 |
|---|---|
| Device / Server | 运行 Condr 的机器抽象。每台设备持有唯一的加密身份(Device Key),关闭客户端不影响 Server 运行。 |
| Session | 服务端维护的布局拓扑。布局变动实时写入快照,Server 重启后自动恢复结构与 Agent 会话上下文。 |
| Workspace | 项目任务单元,锚定唯一的绝对路径根目录。支持基于 Git Worktree 派生出隔离的 Managed Worktree 独立工作区。 |
| Tab | Workspace 内的页面。分为终端 Tab(承载分屏窗格,支持快捷键 1~9 切换)与查看 Tab(Diff / Preview 只读审查页)。 |
| Pane / Terminal | 布局叶子节点与虚拟终端引擎(基于 Rust alacritty_terminal)。支持水平/垂直切分、缩放与进程树安全级联退出。 |
| Agent | 运行在 Pane 内受识别的命令行程序。状态实时同至侧边栏,支持阻断原因提取。 |
关键机制解析
Section titled “关键机制解析”会话快照与重启恢复
Section titled “会话快照与重启恢复”请区分 Condr Session(服务端维护的窗口/分屏拓扑结构)与 Agent Conversation(Agent 自身在磁盘存储的对话上下文):
- 快照记录:Server 实时保存工作区树形结构、窗格拆分比例及正在运行的 Agent 原生会话 ID。
- 平滑接续:重启 Server 后,Condr 自动重建分屏并恢复工作目录;对支持 Hook 的 Agent 自动执行 resume 指令重连上下文。(注:不保存终端历史输出屏幕字符与进程内存状态)。
Managed Worktree(隔离分支)
Section titled “Managed Worktree(隔离分支)”多 Agent 并发修改同一项目时极易产生代码与 Git 冲突:
- Condr 允许为仓库创建 Managed Worktree,在独立的
<repo>.worktrees/<branch>目录检出新分支并作为独立 Workspace 打开。 - 移除工作区时强制校验 Clean 状态,仅安全清理独立工作树目录,保留 Git 分支与提交。
Client 独立视图与多端协作
Section titled “Client 独立视图与多端协作”- 视图独立:每个连入的 Client 独立记录自己正在查看的 Workspace 与 Tab。多设备接入同一 Server 时,切换视角互不干扰。
- 多设备同时操作:每台连接的设备都可以直接输入、滚动、选择和调整布局,不会互相锁定。终端保持统一尺寸,并自动适配最近点击聚焦的窗口;其余窗口默认从左上角对齐显示,点击后才会按当前窗口尺寸调整。
Agent 状态指示
Section titled “Agent 状态指示”| 状态 | 含义 |
|---|---|
| Working | 正在执行任务(推理思考、生成文本或调用工具)。 |
| Blocked | 阻塞状态,等待用户输入或授权(在 Needs you 中列出)。 |
| Error | 本轮失败,Agent 已停住(在 Needs you 中列出,并显示原因)。 |
| Done | 后台执行完毕。当焦点切回该 Pane 时自动重置为 Idle。 |
| Idle | 空闲状态,当前轮次完成,等待新指令。 |
| Unknown | 原生 Shell 会话,或尚未上报的 Agent。 |
| Bell | 终端发出响铃提醒(Bell 优先级高于常规生命周期状态)。 |
- Workspace、Tab 与 Pane:分屏切分、快捷键及 Managed Worktree 使用。
- Agent 集成:受支持的 Agent 列表与状态上报配置。
- 改动与文件预览:使用 Diff Tab 和 Preview Tab 审查文件。
- 远程连接:配置 SSH、TCP 局域网配对或 P2P 穿透直连。