collaborator-ai/collab-public

GitHub: collaborator-ai/collab-public

一款基于无限画布的 Agentic 开发环境,支持在统一界面中与 AI Agent 协同工作。

Stars: 216 | Forks: 14

# 协作者 Collaborator 是一个用于与 Agent 协同构建的环境。 ![Collaborator](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3d3192d10f134303.png) Collaborator 是一个端到端的 Agentic 开发环境。终端、上下文文件和正在运行的代码——全部排列在一个无限画布上,集于一处。无需切换上下文,无需寻找标签页。只有你的 Agent 和你的工作,并排呈现。 该应用目前处于早期阶段,正在积极开发中。目前仅支持 macOS。 ## 安装 **[下载最新版本](https://github.com/collaborator-ai/collab-public/releases/latest)** (macOS, Apple Silicon) 或者通过命令行安装: ``` curl -fsSL https://raw.githubusercontent.com/collaborator-ai/collab-public/main/install.sh | bash ``` ## 技术栈 Collaborator 是一个原生桌面应用,构建于: - **Electron 40** — 具有多 webview 架构的桌面外壳 - **React 19** — UI 框架 - **Tailwind CSS 4** — 样式 - **electron-vite** — 支持热重载的构建工具 - **xterm.js** — 终端模拟,由 tmux 会话支持以实现持久化 - **Monaco Editor** — 带语法高亮的代码编辑器 - **BlockNote / TipTap** — 富文本 Markdown 编辑 - **D3** — 力导向图可视化 - **sharp** — 图像处理 - **KaTeX** — Markdown 中的数学公式渲染 所有数据均存储在本地磁盘。 ## 快速开始 1. 打开 Collaborator 2. 添加一个 workspace — 点击导航栏中的 workspace 下拉菜单并选择 "Add workspace",或按 Cmd+Shift+O,然后选择一个本地文件夹 3. 双击画布创建一个终端,并启动一个 Agent 4. 从导航栏拖拽文件到画布上,将其作为 Tile 与你正在运行的 Agent 并排打开 ## 规格说明 ### 应用概述 Collaborator 是一个单窗口 macOS (arm64) 应用程序。它主要操作本地文件,无需账户。通过 PostHog 收集匿名的、非识别性的使用情况分析数据。 窗口分为两个区域: * **Navigator(导航栏)** — 左侧可调整大小的侧边栏,包含文件树和 workspace 切换器 * **Main area(主区域)** — 画布,一个无限平移和缩放的表面,用于排列 Tile;同时也包含 viewer(查看器),用于显示在 Navigator 中选中的文件内容 所有应用状态均以 JSON 文件形式存储在 `~/.collaborator/` 中。 ### 多 Workspace 导航 Navigator 侧边栏显示以当前活跃的 workspace 文件夹为根的文件树。用户可以维护多个 Workspace 并在它们之间切换。 #### Workspace 管理 Navigator 顶部的下拉菜单显示当前活跃的 workspace 名称。它提供: * 所有 Workspace 的列表,用于快速切换 * "Add workspace" 用于打开一个新的本地文件夹(也可通过 Cmd+Shift+O 使用) * "Remove workspace" 用于从列表中移除一个 workspace(不会删除文件) 每个 Workspace 都有自己独立的文件树。画布和 viewer 在各个 Workspace 间共享。 #### 文件树 文件树显示当前活跃 workspace 中的所有文件和文件夹。它支持: * 点击**展开/折叠**文件夹 * **两种视图模式**:分层树状视图,以及按日期排序的按时间顺序的 Feed 视图 * **排序**:在创建时间(最新/最旧)、修改时间(最新/最旧)和名称(A-Z/Z-A)之间循环切换 * **文件操作**:创建新笔记(生成 `Untitled.md`)、创建新文件夹、重命名 (F2)、删除(移至废纸篓) * 通过在文件夹之间拖拽来**移动文件** * 使用 Shift+点击和 Cmd+点击进行**多选** * 通过 Cmd+K 进行**搜索** 在文件树中选择一个文件会在 viewer 中打开它。将文件从文件树拖到画布上会创建一个 Tile。 ### 画布 (Canvas) 画布是一个填充主区域的无限平移和缩放表面。它使用点阵网格背景进行空间定位。 #### 视口控制 | 操作 | 输入方式 | | -------- | ------------------------------------------------ | | 平移 | 滚轮,或 Space+拖拽,或 中键点击+拖拽 | | 放大 | Cmd+= 或 Ctrl+向上滚动 | | 缩小 | Cmd+- 或 Ctrl+向下滚动 | | 重置缩放 | Cmd+0 | * **缩放范围**:33% 到 100%,超出限制时具有橡皮筋回弹效果 * **缩放指示器**:缩放变化后短暂出现在右下角,显示当前百分比 #### 网格 * 规则间隔的次级网格点 * 每 4 个间隔出现一个主级网格点 * 所有 Tile 的位置和大小都对齐到网格 #### 数据模型 Tile 是实时视图,而非独立的容器。 * **文件 Tile**(笔记、代码、图像)通过绝对路径绑定到磁盘上的文件。如果文件被重命名,Tile 会更新以跟踪新路径。如果文件被删除,Tile 会被关闭。如果文件内容在磁盘上发生更改,Tile 会重新加载。 * **终端 Tile** 绑定到一个 tmux 会话。每个终端 Tile 创建并管理自己的会话,该会话独立于 Tile 在画布上的生命周期而持久存在。 #### Tile 管理 Tile 是画布上的内容单元。每个 Tile 具有: * 一个用于拖动的**标题栏** * **八个调整大小的控制柄**(四个边缘,四个角) * 一个用于分层的 **z-index** — 点击一个 Tile 会将其置于顶层 Tile 通过以下方式创建: * **双击**空白画布区域 — 在该位置创建一个终端 Tile * 将文件从 Navigator **拖到**画布上 — 根据文件类型创建笔记、代码或图像 Tile Tile 可以通过其标题栏关闭。按住 Shift 键滚动可将滚动事件穿透 Tile 传递给画布。 ### Tile 类型 #### 终端 (Terminal) 一个交互式终端会话。通过双击空白画布区域创建。终端的工作目录设置为当前活跃的 workspace 路径。 终端是运行 AI Agent 的主要接口。每个终端 Tile 管理自己独立的会话。 #### 笔记 (Note) 一个富文本 Markdown 编辑器。通过从 Navigator 拖拽 `.md` 文件到画布创建。支持带实时渲染的行内编辑。 #### 代码 (Code) 一个语法高亮的代码编辑器。通过从 Navigator 拖拽任何非 Markdown、非图像文件到画布创建。支持带语言检测的行内编辑。 #### 图像 (Image) 一个只读图像显示组件。通过从 Navigator 拖拽图像文件(`.png`、`.jpg`、`.jpeg`、`.gif`、`.svg`、`.webp`)到画布创建。 ### 查看器 (Viewer) Viewer 显示 Navigator 中当前选中文件的内容。它与画布一起占据主区域。 | 文件类型 | 显示内容 | | -------------------------------------------------------- | ----------------------------------------------------------------------------- | | Markdown (`.md`, `.mdx`, `.markdown`, `.txt`) | 支持 frontmatter、封面图像和 wiki 风格链接的富文本编辑器 | | 代码(所有其他文本文件) | 带行号的语法高亮编辑器 | | 图像 (`.png`, `.jpg`, `.jpeg`, `.gif`, `.svg`, `.webp`) | 带元数据的图像显示 | Markdown 和代码文件支持在 Viewer 中进行行内编辑。Viewer 会监视磁盘上的外部文件更改并自动重新加载。 按下 Escape 键关闭 Viewer(当未处于主动编辑状态时)。 ### 持久化 所有状态均本地存储在 `~/.collaborator/` 中。 #### 画布状态 (`canvas-state.json`) ``` { "version": 1, "tiles": [ { "id": "tile--", "type": "term | note | code | image", "x": 0, "y": 0, "width": 440, "height": 540, "filePath": "/absolute/path/to/file", "zIndex": 1 } ], "viewport": { "panX": 0, "panY": 0, "zoom": 1.0 } } ``` 画布状态在每次更改后 500ms 保存(防抖处理),并在创建或关闭 Tile 时立即保存。 #### 应用配置 (`config.json`) ``` { "workspaces": ["/path/to/workspace1", "/path/to/workspace2"], "active_workspace": 0, "window_state": { "x": 0, "y": 0, "width": 1440, "height": 900, "isMaximized": false }, "ui": {} } ``` ⠀
标签:D3.js, Electron, electron-vite, IDE, Markdown编辑, Monaco Editor, Mutation, React, Syscalls, Tailwind CSS, tmux, xterm.js, 上下文管理, 人工智能, 人机协作, 代码编辑器, 可视化, 开发环境, 无限画布, 智能体开发, 本地优先, 桌面应用, 生产力工具, 用户模式Hook绕过, 终端模拟