Initial commit: README with functional spec and .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
commit
467adc3121
2 changed files with 212 additions and 0 deletions
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
.DS_Store
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
docs/
|
||||||
|
.collaborator
|
||||||
|
.claude/
|
||||||
205
README.md
Normal file
205
README.md
Normal file
|
|
@ -0,0 +1,205 @@
|
||||||
|
# Collaborator
|
||||||
|
|
||||||
|
A new workspace for a new way of creating: with agents.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Collaborator is a macOS desktop application where you arrange terminals, notes, code, and images on an infinite canvas. Terminals are designed for running AI agents. Everything operates on local files.
|
||||||
|
|
||||||
|
The app is early-stage and in active development.
|
||||||
|
|
||||||
|
**[Download the latest release](https://github.com/collaborator-ai/collab-public/releases/latest)**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
|
||||||
|
### Application overview
|
||||||
|
|
||||||
|
Collaborator is a single-window application for macOS (arm64). It operates entirely on local files with no cloud services or accounts.
|
||||||
|
|
||||||
|
The window is divided into two regions:
|
||||||
|
|
||||||
|
- **Navigator** — a resizable sidebar on the left containing a file tree and workspace switcher
|
||||||
|
- **Main area** — the canvas, an infinite pan-and-zoom surface where tiles are arranged; also hosts the viewer, which displays the content of the file selected in the navigator
|
||||||
|
|
||||||
|
All application state is stored as JSON files in `~/.collaborator/`.
|
||||||
|
|
||||||
|
### Multiworkspace navigation
|
||||||
|
|
||||||
|
The navigator sidebar displays a file tree rooted at the active workspace folder. Users can maintain multiple workspaces and switch between them.
|
||||||
|
|
||||||
|
#### Workspace management
|
||||||
|
|
||||||
|
A dropdown at the top of the navigator shows the active workspace name. It provides:
|
||||||
|
|
||||||
|
- A list of all workspaces for quick switching
|
||||||
|
- "Add workspace" to open a new local folder (also available via Cmd+Shift+O)
|
||||||
|
- "Remove workspace" to remove a workspace from the list (does not delete files)
|
||||||
|
|
||||||
|
Each workspace gets its own independent file tree. The canvas and viewer are shared across workspaces.
|
||||||
|
|
||||||
|
#### File tree
|
||||||
|
|
||||||
|
The file tree shows all files and folders in the active workspace. It supports:
|
||||||
|
|
||||||
|
- **Expand/collapse** folders by clicking
|
||||||
|
- **Two view modes**: hierarchical tree view, and a chronological feed view sorted by date
|
||||||
|
- **Sorting**: cycles through created (newest/oldest), modified (newest/oldest), and name (A-Z/Z-A)
|
||||||
|
- **File operations**: create new note (generates `Untitled.md`), create new folder, rename (F2), delete (moves to trash)
|
||||||
|
- **Move files** by dragging between folders
|
||||||
|
- **Multi-select** with Shift+click and Cmd+click
|
||||||
|
- **Search** via Cmd+K
|
||||||
|
|
||||||
|
Selecting a file in the tree opens it in the viewer. Dragging a file from the tree onto the canvas creates a tile.
|
||||||
|
|
||||||
|
### Canvas
|
||||||
|
|
||||||
|
The canvas is an infinite pan-and-zoom surface that fills the main area. It uses a dot grid background for spatial orientation.
|
||||||
|
|
||||||
|
#### Viewport controls
|
||||||
|
|
||||||
|
| Action | Input |
|
||||||
|
|--------|-------|
|
||||||
|
| Pan | Scroll wheel, or Space+drag, or middle-click+drag |
|
||||||
|
| Zoom in | Cmd+= or Ctrl+scroll up |
|
||||||
|
| Zoom out | Cmd+- or Ctrl+scroll down |
|
||||||
|
| Reset zoom | Cmd+0 |
|
||||||
|
|
||||||
|
- **Zoom range**: 33% to 100%, with rubber-band effect when overshooting limits
|
||||||
|
- **Zoom indicator**: appears briefly in the bottom-right corner after zoom changes, showing the current percentage
|
||||||
|
|
||||||
|
#### Grid
|
||||||
|
|
||||||
|
- Minor grid dots every 20px
|
||||||
|
- Major grid lines every 80px
|
||||||
|
- All tile positions and sizes snap to the 20px grid
|
||||||
|
|
||||||
|
#### Tile management
|
||||||
|
|
||||||
|
Tiles are the content units on the canvas. Each tile has:
|
||||||
|
|
||||||
|
- A **title bar** (28px) for dragging
|
||||||
|
- **Eight resize handles** (four edges, four corners)
|
||||||
|
- A **z-index** for layering — clicking a tile brings it to front
|
||||||
|
|
||||||
|
Tiles are created by:
|
||||||
|
|
||||||
|
- **Double-clicking** empty canvas space — creates a terminal tile at that position
|
||||||
|
- **Dragging a file** from the navigator onto the canvas — creates a note, code, or image tile depending on file type
|
||||||
|
|
||||||
|
Tiles can be closed via their title bar. Holding Shift while scrolling passes scroll events through tiles to the canvas.
|
||||||
|
|
||||||
|
### Tile types
|
||||||
|
|
||||||
|
#### Terminal (default: 400 x 500px, minimum: 200 x 120px)
|
||||||
|
|
||||||
|
An interactive terminal session. Created by double-clicking empty canvas space. The terminal's working directory is set to the active workspace path.
|
||||||
|
|
||||||
|
Terminals are the primary interface for running AI agents. Each terminal tile manages its own independent session.
|
||||||
|
|
||||||
|
#### Note (default: 440 x 540px, minimum: 200 x 120px)
|
||||||
|
|
||||||
|
A rich markdown editor. Created by dragging a markdown file (`.md`, `.mdx`, `.markdown`, `.txt`) from the navigator onto the canvas. Supports inline editing with live rendering.
|
||||||
|
|
||||||
|
#### Code (default: 440 x 540px, minimum: 200 x 120px)
|
||||||
|
|
||||||
|
A syntax-highlighted code editor. Created by dragging any non-markdown, non-image file from the navigator onto the canvas. Supports inline editing with language detection.
|
||||||
|
|
||||||
|
#### Image (default: 280 x 280px, minimum: 80 x 80px)
|
||||||
|
|
||||||
|
A read-only image display. Created by dragging an image file (`.png`, `.jpg`, `.jpeg`, `.gif`, `.svg`, `.webp`) from the navigator onto the canvas.
|
||||||
|
|
||||||
|
### Viewer
|
||||||
|
|
||||||
|
The viewer displays the content of the currently selected file in the navigator. It occupies the main area alongside the canvas.
|
||||||
|
|
||||||
|
| File type | Display |
|
||||||
|
|-----------|---------|
|
||||||
|
| Markdown (`.md`, `.mdx`, `.markdown`, `.txt`) | Rich text editor with frontmatter support, cover images, and wiki-style links |
|
||||||
|
| Code (all other text files) | Syntax-highlighted editor with line numbers |
|
||||||
|
| Image (`.png`, `.jpg`, `.jpeg`, `.gif`, `.svg`, `.webp`) | Image display with metadata |
|
||||||
|
| Folder | Table listing of directory contents |
|
||||||
|
|
||||||
|
Markdown and code files support inline editing in the viewer. The viewer watches for external file changes on disk and reloads automatically.
|
||||||
|
|
||||||
|
Pressing Escape closes the viewer (when not actively editing).
|
||||||
|
|
||||||
|
### Persistence
|
||||||
|
|
||||||
|
All state is stored locally in `~/.collaborator/`.
|
||||||
|
|
||||||
|
#### Canvas state (`canvas-state.json`)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"tiles": [
|
||||||
|
{
|
||||||
|
"id": "tile-<timestamp>-<index>",
|
||||||
|
"type": "term | note | code | image",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 400,
|
||||||
|
"height": 500,
|
||||||
|
"filePath": "/absolute/path/to/file",
|
||||||
|
"zIndex": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"viewport": {
|
||||||
|
"panX": 0,
|
||||||
|
"panY": 0,
|
||||||
|
"zoom": 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Canvas state is saved 500ms after each change (debounced) and immediately when tiles are created or closed.
|
||||||
|
|
||||||
|
#### Workspace config (`collaborator.json`)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"workspaces": ["/path/to/workspace1", "/path/to/workspace2"],
|
||||||
|
"active_workspace": 0,
|
||||||
|
"window_state": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 1200,
|
||||||
|
"height": 800,
|
||||||
|
"isMaximized": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Keyboard shortcuts
|
||||||
|
|
||||||
|
| Shortcut | Action |
|
||||||
|
|----------|--------|
|
||||||
|
| Cmd+\ | Toggle navigator |
|
||||||
|
| Cmd+, | Settings |
|
||||||
|
| Cmd+Shift+O | Add workspace |
|
||||||
|
| Cmd+K | Search |
|
||||||
|
| Cmd+= | Zoom in |
|
||||||
|
| Cmd+- | Zoom out |
|
||||||
|
| Cmd+0 | Reset zoom |
|
||||||
|
| Cmd+Shift+] | Next tab |
|
||||||
|
| Cmd+Shift+[ | Previous tab |
|
||||||
|
| Cmd+Shift+W | Close tab |
|
||||||
|
| Cmd+1 through Cmd+9 | Switch to tab 1–9 |
|
||||||
|
| F2 | Rename selected file |
|
||||||
|
| Delete / Backspace | Delete selected file |
|
||||||
|
| Escape | Close viewer |
|
||||||
|
|
||||||
|
### Appearance
|
||||||
|
|
||||||
|
The application supports light and dark modes.
|
||||||
|
|
||||||
|
| Property | Light | Dark |
|
||||||
|
|----------|-------|------|
|
||||||
|
| Background | rgb(248, 248, 248) | rgb(18, 18, 18) |
|
||||||
|
| Canvas | rgb(230, 230, 230) | rgb(24, 24, 24) |
|
||||||
|
| Text | rgb(32, 32, 32) | rgb(220, 220, 220) |
|
||||||
|
| Border | rgb(206, 206, 206) | rgba(255, 255, 255, 0.2) |
|
||||||
|
|
||||||
|
Tiles have an 8px border radius and a subtle drop shadow.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue