{"id":50615907,"url":"https://github.com/dip497/hivemind","last_synced_at":"2026-07-04T11:00:46.656Z","repository":{"id":360647559,"uuid":"1251064145","full_name":"dip497/hivemind","owner":"dip497","description":"Infinite canvas for Claude Code \u0026 AI coding agents. Run claude, codex, gemini \u0026 opencode in parallel across git worktrees + remote SSH, with a markdown Kanban board agents read \u0026 update over MCP. Local-first, open source.","archived":false,"fork":false,"pushed_at":"2026-06-29T09:59:25.000Z","size":3891,"stargazers_count":4,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-29T11:24:42.082Z","etag":null,"topics":["agent-orchestration","agentic","ai-agents","ai-coding-agents","canvas","claude","claude-code","codex","coding-agent","developer-tools","electron","gemini-cli","git-worktree","infinite-canvas","llm","local-first","mcp","mcp-server","multi-agent","opencode"],"latest_commit_sha":null,"homepage":"https://dip497.github.io/hivemind/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dip497.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-27T08:00:32.000Z","updated_at":"2026-06-29T09:59:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dip497/hivemind","commit_stats":null,"previous_names":["dip497/hivemind"],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/dip497/hivemind","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dip497%2Fhivemind","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dip497%2Fhivemind/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dip497%2Fhivemind/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dip497%2Fhivemind/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dip497","download_url":"https://codeload.github.com/dip497/hivemind/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dip497%2Fhivemind/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35118971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-orchestration","agentic","ai-agents","ai-coding-agents","canvas","claude","claude-code","codex","coding-agent","developer-tools","electron","gemini-cli","git-worktree","infinite-canvas","llm","local-first","mcp","mcp-server","multi-agent","opencode"],"created_at":"2026-06-06T08:30:53.553Z","updated_at":"2026-07-04T11:00:46.645Z","avatar_url":"https://github.com/dip497.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"assets/icon.png\" width=\"116\" alt=\"hivemind\" /\u003e\n\n# hivemind\n\n**A canvas-per-project mission control for AI coding agents.**\n\nDrop `claude`, `codex`, `gemini`, `opencode`, or `pi` into real workspaces where they can\nread issues, update status, mark acceptance criteria, and comment their own\nprogress — through a Kanban PM model that's just plain markdown on disk.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n[![Platform: Linux](https://img.shields.io/badge/platform-Linux%20x86__64-blue.svg)](#install)\n[![Release](https://img.shields.io/github/v/release/dip497/hivemind?color=success)](https://github.com/dip497/hivemind/releases)\n[![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178C6.svg)](#)\n\nLocal-first · Markdown-backed · No SDK lock-in · No telemetry · No cloud.\n\n\u003cbr/\u003e\n\n\u003cimg src=\"screenshots/diff.png\" alt=\"hivemind — an issues board and a live diff of an agent's fix, side by side on one canvas\" width=\"880\" /\u003e\n\n\u003csub\u003eAn issue board and the live diff of a fix, side by side on one infinite canvas. The agent edits; the diff updates as you watch.\u003c/sub\u003e\n\n\u003c/div\u003e\n\n---\n\n## Contents\n\n[Why](#why) · [The whole canvas](#the-whole-canvas) · [Install](#install) · [Quick start](#quick-start) · [How agents talk to hivemind](#how-agents-talk-to-hivemind) · [Features](#features) · [Architecture](#architecture) · [Persistence](#persistence-model) · [Development](#development) · [Contributing](#contributing)\n\n---\n\n## Why\n\nRunning a coding agent in a bare terminal throws away everything around the work.\nYou lose track of *which* task it's on, you can't see its edits without `git diff`,\nthe conversation dies when you close the window, and the moment you want a second\nagent on a second branch you're juggling tmux panes.\n\nhivemind makes the **project** the unit of work, not the terminal. One infinite\ncanvas per repo. Every tile on it is live — a terminal running an agent, a diff\nthat updates as the agent edits, a file tree, a code editor, an issues board, even\na real web browser. Group tiles into **frames** (named workspaces), bind each frame\nto a local repo, a git **worktree**, or a **remote SSH host**, and watch several\nagents work in parallel — each scoped to its own directory, issues, and branch.\n\nThe project-management layer underneath is deliberately boring: issues, acceptance\ncriteria, cycles, and an activity log are **plain markdown files with YAML\nfrontmatter** under `.hivemind/`. No database, no API, no account. An agent reads\nand writes them through a small MCP server, so it can pick up an issue, flip its\nstate, tick acceptance criteria, and comment its progress — and you see all of it\nland live in the board tile.\n\n---\n\n## The whole canvas\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"screenshots/canvas.png\" alt=\"The full hivemind canvas — issues board, code editor, diff, and two agent terminals\" width=\"880\" /\u003e\n\u003c/div\u003e\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\u003cimg src=\"screenshots/board.png\" alt=\"Kanban issues board backed by markdown\" /\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eIssues board\u003c/b\u003e — Kanban cards across Backlog → Todo → In\u0026nbsp;progress → In\u0026nbsp;review → Done. Each card is one markdown file you can \u003ccode\u003ecat\u003c/code\u003e.\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\u003cimg src=\"screenshots/explorer.png\" alt=\"File explorer and diff tiles side by side\" /\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eExplorer + diff\u003c/b\u003e — browse the tree, open files in the editor, and review changes in the Pierre-backed diff — all on the same canvas.\u003c/sub\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\u003cimg src=\"screenshots/diff.png\" alt=\"Live diff with a real bug fix\" /\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eLive diff\u003c/b\u003e — split or unified, changed-files sidebar, per-file \u003cb\u003ereviewed\u003c/b\u003e checks, line comments you can send straight to an agent.\u003c/sub\u003e\u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\u003cimg src=\"screenshots/new-issue.png\" alt=\"New issue modal\" /\u003e\u003cbr/\u003e\u003csub\u003e\u003cb\u003eCreate an issue\u003c/b\u003e — it lives at \u003ccode\u003e.hivemind/issues/\u0026lt;id\u0026gt;.md\u003c/code\u003e, then hand it to an agent with \u003cb\u003e▶ Work\u003c/b\u003e.\u003c/sub\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n**60-second tour**\n\n1. `hivemind .` in any repo → an infinite canvas opens, scoped to that project.\n2. Press `2` (or a frame's **+**) → an agent tile spawns, running in the repo's `cwd`.\n3. Click **▶ Work** on an issue → the agent spawns pre-loaded with that issue and the\n   full MCP tool surface; it works, you watch the diff update live.\n4. Click a frame's **worktree** button to spin a branch into a nested sub-frame, or\n   **remote** to bind the frame to a directory on an SSH host — same terminals,\n   editor, and diff, now running on that machine.\n\n---\n\n## Install\n\nLinux x86_64 only for now. **No build toolchain needed** — the installer downloads\nprebuilt binaries from the latest [GitHub Release](https://github.com/dip497/hivemind/releases).\n\n```bash\nbash \u003c(curl -fsSL https://raw.githubusercontent.com/dip497/hivemind/main/install.sh)\n```\n\nThe script will:\n\n1. Resolve the latest release tag from GitHub.\n2. Download the `hive` CLI single-binary and the Electron AppImage into `~/.hivemind-app/`.\n3. Symlink them into `~/.local/bin/` as `hive` and `hivemind`.\n4. Check that an agent CLI (`claude`, `codex`, …) is on `PATH` (warning only).\n\nRe-run anytime to upgrade — it's a no-op if you're already on the latest tag. Pin a\nversion with `HIVEMIND_VERSION=v1.0.0 bash \u003c(curl …)`.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eBuild from source\u003c/b\u003e\u003c/summary\u003e\n\n```bash\ngit clone https://github.com/dip497/hivemind.git\ncd hivemind\n./install.sh --dev\n```\n\nRequires `git`, `node` ≥ 22, `pnpm` ≥ 10, `bun` ≥ 1.1. Set `HIVEMIND_SKIP_APPIMAGE=1`\nto skip the slow electron-builder step (the CLI still installs).\n\u003c/details\u003e\n\n---\n\n## Quick start\n\n```bash\n# 1. Initialize hivemind inside a git repo\ncd ~/my-project\nhive init --prefix MYP        # writes .hivemind/config.yaml + the agentic stack\n                              # (.mcp.json + .claude/skills/ + CLAUDE.md) by default\n# hive init --prefix MYP --no-agentic   # tracker only, skip the agentic stack\n# hive add mcp / hive add skill         # add a single piece later\n\n# 2. Create an issue\nhive new \"Fix token expiry comparison\"\n# → writes .hivemind/issues/MYP-1.md\n\n# 3. Launch the canvas\nhivemind .\n```\n\nIn the canvas:\n\n- Press `2` to spawn the selected agent; the tool island (top) switches agent and\n  the number keys `1`–`7` spawn terminal / agent / explorer / diff / issues / frame / browser.\n- Click **▶ Work** on any issue → the agent spawns pre-loaded with the issue and the\n  full MCP tool surface.\n- Press `⌘L` to toggle the **Layers** panel — every tile grouped by frame, with live\n  agent status.\n- Press `7` for a **Browser** tile — a real web view that pans and zooms with the canvas.\n- Double-click a tile's name to rename it.\n\n---\n\n## How agents talk to hivemind\n\n```text\nagent tile (claude / codex / …)\n      │  reads .mcp.json, spawns the server over stdio\n      ▼\nhive mcp-stdio  ──►  get_issue · set_state · add_comment · mark_acceptance · …\n      │  edits markdown\n      ▼\n.hivemind/issues/*.md  ──►  filesystem watcher  ──►  live board tile\n```\n\n1. `hive init --agentic` drops `.mcp.json`, `CLAUDE.md`, and the `hive-work` skill\n   into your repo.\n2. You start an agent (in a canvas tile or any terminal) inside that repo.\n3. The agent auto-loads `.mcp.json`, spawns `hive mcp-stdio`, and gets the hive tools:\n   `get_issue`, `set_state`, `add_comment`, `mark_acceptance`, and friends.\n4. The skill activates on any `MYP-123` mention and runs the agent through an\n   **execution contract**: load the issue → do the work → end the session by setting\n   the issue's disposition.\n\nState changes flow MCP → markdown → filesystem watcher → live UI. No SDK, no API key.\nAgents use your existing CLI login.\n\n### The control plane — agents that drive the canvas\n\nThe issue tools above are file-only. A second tier, the **Hivemind Control Plane\n(HCP)**, lets an agent *inside a tile* (or any CLI/script) drive the **running\napp** — spawn sibling agents, talk to them, wire them together, and request human\nreview. Transport is a `0600` unix socket owned by the app (no network); a\nper-install capability token + the agent's own tile id are injected into every\nspawned agent, so these tools \"just work\" from inside a tile and return a clear\n*\"app not running\"* when it isn't.\n\n| Tool | What it does |\n|---|---|\n| `hive_spawn_agent` | Launch an agent tile (`claude`/`codex`/…) and hand it a task → returns its `tileId`. `frame:` picks which workspace it lands in (by id / repo name / title); by default the worker **auto-reports** — its reply is delivered back into your session when it finishes (no polling), with a visible reporting edge drawn on the canvas. |\n| `hive_send` / `hive_send_keys` | Send text, or **key tokens** (`Down`/`Enter`/`Esc`/…), to a tile's terminal — e.g. answer a worker's native `AskUserQuestion` picker. |\n| `hive_read` | Optional synchronous read: block until an agent finishes a turn, return its reply (parsed cleanly from the session transcript, never screen-scraped). |\n| `hive_approve` | Answer a **supervised** worker's tool-permission request (`allow`/`deny`/`always`/`never`) — see below. |\n| `hive_list_tiles` / `hive_list_frames` | List tiles **grouped by frame** (with live status), or list the frames themselves. Filter by `frame`. |\n| `hive_focus` / `hive_close_tile` | Bring a tile into view, or shut a worker down. |\n| `hive_connect` / `hive_disconnect` | Pipe one agent's finished-turn replies into another's input — chain workers (animated data-flow edge). |\n| `hive_open_review` / `hive_report` | Open a plan in the review tile and block for human approve/deny; or push a result back to the agent that spawned you. |\n\n**Supervised approvals.** Spawn with `supervise` and the worker stops escalating\nits tool-permission prompts to a human — they're brokered to **the agent that\nspawned it** instead (an injected `PreToolUse` hook blocks on the socket until you\nanswer with `hive_approve`). `always`/`never` remember the decision per\nworker+tool; it **fails safe** to the normal human prompt on timeout or no\nsupervisor. So you can fire a worker and let it run *under your watch*, approving\nonly the calls that need judgement. The same surface is on the CLI: `hive ctl\nspawn|send|keys|read|approve|list|frames|focus|close|connect`.\n\n---\n\n## Features\n\n| | |\n|---|---|\n| **Canvas-per-project** | One infinite [xyflow](https://reactflow.dev) canvas per repo. Frames bind to a workspace path, so multiple repos coexist on one screen, each with its own auto-assigned color. |\n| **Pluggable agents** | `claude` / `codex` / `gemini` / `opencode` / `pi` each run in their own WebGL-accelerated xterm tile. Agents are an extensible registry — adding one is a single entry. Live status (idle / working / waiting / done) is detected from the command and shown on the frame header. |\n| **PM you can `cat`** | Issues, acceptance criteria, cycles, and an activity log are markdown + YAML frontmatter under `.hivemind/`. No DB, no API. |\n| **MCP integration** | `.mcp.json` autowires a stdio MCP server so agents can `get_issue`, `set_state`, `add_comment`, `mark_acceptance`, … from inside their tile. |\n| **Live diff review** | A Pierre-backed diff tile: split / unified, a changed-files sidebar with per-file **reviewed** checks, multi-line comments, and **send-to-agent** for any comment or selection. |\n| **Git worktrees as sub-frames** | Attach a branch worktree → a nested sub-frame scoped to that branch. Line several branches up side by side and arrange them as columns. |\n| **Remote SSH frames** | Bind a frame to a directory on another machine over SSH — its terminals are real PTYs on the host, the editor reads/writes over SFTP, diff/status run `git` on the remote. One pooled `ssh2` connection per host; agent / key / password auth; TOFU host keys. |\n| **Browser tile** | A real Chromium web view (Electron `\u003cwebview\u003e`) that lives in the DOM, so it pans / zooms / clips with the canvas — multi-tab, address bar, find-in-page, per-session logins. |\n| **Agents can browse** | Opt-in: a spawned agent drives the *visible* Browser tile over CDP via the `hive-browser` skill (built on [agent-browser](https://github.com/vercel-labs/agent-browser)) — navigate, click, read, screenshot the same page you're watching. |\n| **Multi-agent control plane** | An agent in one tile can **spawn, drive, and supervise** other agents on the canvas over a local `0600` socket (HCP): pick the target frame, converse, pipe agents together, auto-report results, and broker a worker's permission prompts back to its parent (`supervise` + `hive_approve`). Same surface from the shell via `hive ctl`. Complements Claude Code's native subagents by making the agent mesh **visible, spatial, and cross-tool**. |\n| **Layers + arrange** | A Figma-style layers rail lists every tile grouped by frame with live status; opt-in arrange snaps a frame's tiles and worktrees into Columns / Rows / Grid. |\n| **Persistent terminals** | A detached PTY daemon outlives the window. Headless xterm + SerializeAddon replays the *current screen* (alt-screen, SGR colors, cursor) on reopen — not a raw byte fast-forward. |\n| **Reboot-resume** | Every `claude` spawn is `--session-id`-bound at spawn time; after a reboot the daemon respawns with `--resume \u003cuuid\u003e`, continuing the same conversation. Codex resumes from its session dir. |\n| **Persistent layout** | Frames, sizes, positions, viewport pan/zoom, and editor tabs persist per-repo and restore on reopen. |\n\n---\n\n## Architecture\n\n```text\n.hivemind/                                # in YOUR repo\n├── issues/      \u003cID\u003e.md (YAML frontmatter)  ← single source of truth\n├── cycles/      sprint definitions\n└── config.yaml  workspace prefix, next id\n\napps/\n├── cli/         hive CLI (citty + bun-compile). Hosts the MCP server via\n│                 `hive mcp-stdio`.\n└── desktop/     Electron + electron-vite + React renderer.\n                 ├─ Canvas       xyflow infinite canvas\n                 ├─ TerminalTile xterm.js + WebGL + agent-status bus\n                 ├─ DiffTile     Pierre-backed diff + review\n                 ├─ EditorTile   CodeMirror tabs\n                 ├─ FileTreeTile project explorer\n                 ├─ IssuesTile   Kanban issues board\n                 ├─ BrowserTile  multi-tab \u003cwebview\u003e + CDP agent bridge\n                 ├─ FrameNode    workspace zones (repo / worktree / remote)\n                 ├─ LayersPanel  Figma-style rail grouped by frame\n                 ├─ main/remote/ ssh2 transport — remote PTY + SFTP + git\n                 └─ pty-daemon   detached node-pty + headless-xterm snapshots\n\npackages/\n├── hive-core/   storage + parsing (gray-matter + zod schemas)\n├── hive-mcp/    stdio MCP server wrapping hive-core\n└── tsconfig/    shared TS config\n\ntemplates/\n└── agentic/     per-workspace templates copied by `hive init --agentic`\n```\n\n---\n\n## Persistence model\n\n| Event | PTY survives | Visible screen | Agent conversation |\n|---|---|---|---|\n| Close window / quit Electron | ✅ daemon detached | ✅ live stream | ✅ same process |\n| `pkill electron` | ✅ | ✅ | ✅ |\n| Daemon killed | ❌ respawned | ✅ replayed from disk | ✅ via `--resume \u003cuuid\u003e` |\n| Reboot | ❌ | ✅ replayed from disk | ✅ via `--resume \u003cuuid\u003e` |\n| `×` on tile | ❌ explicit kill | ❌ snapshot evicted | ❌ done |\n\nAnchored against `anthropics/claude-code`'s actual resume semantics — see\n[`apps/desktop/src/main/pty-daemon.ts`](./apps/desktop/src/main/pty-daemon.ts) for the\nbind/restore wiring.\n\n---\n\n## Development\n\n```bash\ngit clone https://github.com/dip497/hivemind.git\ncd hivemind \u0026\u0026 pnpm install\n\n# Full Electron app (auto-reload on rebuild)\npnpm --filter @hivemind/desktop run dev\n\n# Renderer-only dev loop (fastest) — open http://localhost:5180/\npnpm --filter @hivemind/desktop run dev:bridge -- /path/to/test/repo\n\n# CLI in dev\npnpm --filter @hivemind/cli run dev \u003csubcommand\u003e\n\n# Tests + typecheck\npnpm --filter @hivemind/desktop run test:unit    # node:test, fast\npnpm --filter @hivemind/desktop run test:e2e     # playwright + xvfb\npnpm --filter @hivemind/desktop run typecheck\n```\n\n**Hard rule:** the dev-bridge must run under `tsx` (node), **not** `bun` — Bun's loader\nsilently drops `@lydell/node-pty` output on Linux. The dev-bridge self-guards against\naccidental bun startup.\n\n### Prior art\n\n| From | Pattern borrowed |\n|---|---|\n| [Plane](https://plane.so) | workspace → project → issue → acceptance criteria + cycles + activity log |\n| [tldraw](https://tldraw.com) / Figma | infinite canvas with frame-as-workspace, momentum pan |\n| [tmux](https://github.com/tmux/tmux) / [mosh](https://mosh.org) | detach-keeps-alive; coalesced state replay (current screen, not raw byte tail) |\n| Unreal Blueprint | comment-box \"Frame\" nodes to group canvas tiles |\n| [Pierre](https://pierre.co) | first-class diff + tree components inside the canvas |\n\n---\n\n## FAQ\n\n**Is there a canvas / GUI for Claude Code?**\nYes — hivemind is an infinite canvas for Claude Code and other AI coding agents.\nEach agent runs in a real terminal tile (full PTY, not a chat box), and you arrange\nterminals, diffs, a file tree, a code editor, an issues board, and a web browser\nfreely on one zoomable canvas, one per project.\n\n**How do I run multiple AI coding agents in parallel?**\nBind each frame on the canvas to a local repo, a git **worktree**, or a **remote SSH\nhost**, then spawn an agent per frame. Several agents work side by side — each scoped\nto its own directory, branch, and issues — and you watch every diff update live.\n\n**Which agents are supported?**\n`claude` (Claude Code), `codex`, `gemini`, `opencode`, and `pi` out of the box. The agent\nregistry takes one entry per CLI, so any terminal-native coding agent can be added.\n\n**Is this like tmux for AI agents?**\nSame idea — many agents, one screen — but hivemind keeps the structure agents need:\na diff tile next to each terminal, an issues board they read and update over MCP, git\nworktrees as nested frames, and sessions that survive the window and resume after a\nreboot. Think tmux's parallelism with a project-management layer on top.\n\n**How is the project tracker stored?**\nAs plain markdown with YAML frontmatter under `.hivemind/` — issues, acceptance\ncriteria, cycles, and an activity log. No database, no API, no cloud account. You can\n`cat`, `grep`, and `git`-version your backlog, and agents read and write it through a\nsmall MCP server.\n\n**Is it local-first and private?**\nYes. Everything runs on your machine, the data is files on your disk, there's no\ntelemetry, and agents use your existing CLI login — no extra API keys or SDK lock-in.\n\n**What platforms does it run on?**\nLinux x86_64 today, via a prebuilt AppImage. macOS and Windows are open contribution\nareas (blocked on `@lydell/node-pty` build + packaging).\n\n---\n\n## Contributing\n\nPRs welcome. High-value areas:\n\n- **macOS / Windows support** — currently Linux-only because of `@lydell/node-pty`\n  build + AppImage packaging.\n- **More agents** — the registry (`apps/desktop/src/renderer/src/agents.tsx`) takes one\n  entry per agent; wire status detection + resume semantics.\n- **Reboot-resume for non-claude agents** — `pty-daemon.ts`'s\n  `transformSpecOnSpawn` / `transformSpecOnRestore` accept arbitrary transforms.\n\nOpen an issue first if the change is non-trivial. Style: TypeScript strict, comments\nexplain **why**, no emoji in code, lucide-react icons only.\n\n---\n\n## License\n\n[MIT](./LICENSE) — © 2026 hivemind contributors.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdip497%2Fhivemind","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdip497%2Fhivemind","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdip497%2Fhivemind/lists"}