Manifold is a macOS desktop app for running AI coding assistants (Claude Code, Codex, Gemini CLI, and others) side by side on the same codebase.
Each agent gets its own git worktree (a separate checkout of the repository on a dedicated branch) when you want isolation, so multiple agents can work on the same repo without branch conflicts. Agents run in real terminals, not wrapper UIs, so you can read and steer their output directly.
Around the terminals, Manifold adds the workspace tools you'd expect: code browsing, diffs, shell tabs, search, previews, commits, and pull requests.
Supported runtimes: Claude Code, Codex, Copilot, Gemini CLI, and Ollama-backed Claude/Codex.
- Run multiple agents in parallel on one repository without branch collisions
- Use the full agent terminal directly, with live streaming output and manual input at any time
- Switch between a full Developer workspace and a lightweight Simple app-builder view
- Launch work on a new branch, the current branch, an existing branch, or an open pull request
- Coordinate multiple agents across repositories with Superagent sessions, with per-tool approvals
- Run automated Loop cycles that prompt an agent, evaluate the result, and commit on improvement or revert on regression
- Review changes with diffs, a file tree, split editors, shell tabs, and embedded localhost previews
- Search code, captured session memory, or both, with an optional AI mode that answers questions or surfaces the most relevant results
- Keep project state, chat history, dock layout, open files, and shell tabs across restarts
Download the latest .dmg from the GitHub Releases page, open it, and drag Manifold to Applications.
| Requirement | Notes |
|---|---|
| macOS | The packaged app and build scripts currently target macOS only. |
| Git | Required for repository management, worktrees, diffs, commits, and pull request flows. |
One supported CLI agent on your PATH |
Manifold checks for the runtime binaries directly. |
GitHub CLI (gh) |
Optional, but required for creating pull requests from inside the app. |
| Ollama + at least one pulled model | Optional, only needed for the Ollama-backed runtimes. |
| Runtime | Binary Manifold looks for | Install | Notes |
|---|---|---|---|
| Claude Code | claude |
claude.com/claude-code | Used in both Developer and Simple view. |
| Codex | codex |
github.com/openai/codex | Used in both Developer and Simple view. |
| Copilot | copilot |
github.com/github/copilot-cli | Available in the built-in runtime list. |
| Gemini CLI | gemini |
github.com/google-gemini/gemini-cli | Available in both Developer and Simple view. |
| Claude Code (Ollama) | ollama |
ollama.com | Launches through ollama launch claude; model selection is required. |
| Codex (Ollama) | ollama |
ollama.com | Launches through ollama launch codex; model selection is required. |
On startup, Manifold reads the PATH from your shell profile and appends common binary directories like ~/.local/bin, /opt/homebrew/bin, and /usr/local/bin so CLIs installed via Homebrew or similar tools are found even when Manifold is launched from Finder.
Before launching Manifold, confirm the prerequisites are reachable from your shell:
git --version # any recent Git
gh --version # optional, needed for pull request creation
claude --version # or: codex --version / gemini --version / copilot --versionIf a runtime command is not found, install it (see the links above) and make sure its binary is on your PATH.
Manifold ships with two UI modes and lets you switch between them from within the app.
Simple view is the default UI mode on a fresh install.
It is optimized for quickly building local web apps by describing what you want in a chat interface:
- Creates a project folder under your Manifold storage directory and tracks it automatically
- Uses the default runtime you set in Settings to scaffold and iterate on the app
- Constrains the generated app to a local stack: React 19, TypeScript, Vite, Dexie/IndexedDB (browser-local database), and CSS Modules
- Runs
npm installandnpm run devso the preview can come up immediately - Persists chat history and reopens existing apps from the dashboard
- Lets you jump into Developer view for the same project when you need terminals, diffs, or git tools
Simple view is intended for local prototyping and iteration. Deployment is not implemented yet.
Developer view is the full workspace for repository work.
Panels can be shown, hidden, and rearranged to suit your workflow. The current panel set includes:
- Repositories sidebar
- Agent terminal
- Search
- File tree
- Modified files
- Shell tabs
- Web preview
- One or more editor panes
Key developer workflows:
- Open an existing local repository or clone one from GitHub
- Start an agent on a fresh worktree branch (branches are named
manifold/<description>automatically) - Start an agent directly on the current branch when you do not want a worktree
- Continue work from an existing branch or from an open pull request
- Resume a stopped agent in place
- Generate commit messages and pull request descriptions using the same agent runtime the session used
- Detect merge conflicts and see how many commits your branch is ahead of or behind the base branch
-
Open a local repo using the Add Project button, or clone one from the welcome screen.
-
Pick a project in the sidebar.
-
Launch an agent with a task description, for example:
Add input validation to the login form and write unit tests for the new checks.
-
Watch output in the terminal, steer it manually when needed, and review changes in the editor and diff views.
-
Commit from the status bar and open a pull request through
ghwhen the branch is ready.
In Developer view, a new agent can start in four ways:
- New branch: the default path, using a dedicated git worktree
- Current branch: runs directly in the project checkout, without creating a separate worktree
- Existing branch: continue work already in progress
- Open pull request: select an open pull request, check out its branch, and continue work from there
Agent states shown in the UI: running (actively working), waiting (paused for input), done (finished successfully), and error (stopped on failure).
-
Create a new app card.
-
Describe the app you want, for example:
A to-do list app with local storage, where items can be checked off and deleted.
-
Let the runtime scaffold the project and start the dev server.
-
Continue iterating through chat while previewing the app live.
-
Switch to Developer view when you need direct file, terminal, or git access.
A Superagent is a special Claude Code agent that acts as a coordinator — it spawns and supervises other agents across multiple repositories through a local tool server (MCP).
- Lives in its own sidebar section, separate from single-repository agents
- Spawns child agents on any registered repository and streams their output back
- Requires approval for each tool call that modifies files or runs commands, with an option to auto-approve for the session
- Shows overall status based on all child agents:
runningif any are still working,errorif any failed,donewhen all finish - Uses a two-pane layout: the orchestrating agent's terminal alongside a list of child agents and any pending approvals
Superagents are useful when a task spans several repositories at once — for example, landing a change that touches both a backend and a frontend repo, or running the same refactor across many services.
The Loop dock panel runs an automated improve-and-evaluate cycle on an agent session:
- Prompt the agent with your instruction
- Run a user-defined evaluation command
- Extract a numeric score from the result (process exit code, a regex match on stdout, or a JSON field)
- Commit the changes if the score improved, or discard them and revert to the previous state if it regressed
- Repeat until you stop it or the maximum number of iterations is reached
Each iteration has a configurable time limit; if the agent exceeds it, Manifold stops it automatically. Results are logged to .manifold/loop.jsonl inside the worktree. The panel tracks the best score so far and offers Restore Best to jump back to the commit that produced it.
Developer view includes a search system that goes beyond file text search.
- Search modes:
code(file contents),memory(captured session data), oreverything(both) - Search scopes: the current session, all sessions for the current project, or across all registered projects — depending on mode
- Match modes: literal or regex
- Saved searches and recent searches are persisted per project
Ask AIcan answer questions using the retrieved results as context, or re-sort exact matches by relevance, depending on settings
Manifold also captures session data locally and stores it per project in SQLite:
- interactions — prompts sent and responses received
- observations — facts the agent noted during a session
- session summaries — compressed overviews used when resuming long sessions
That memory is used for search and to give the agent relevant history when a session is resumed.
By default, Manifold stores its state under ~/.manifold/.
| Path | Purpose |
|---|---|
~/.manifold/config.json |
User settings (storage path, default runtime, theme, etc.) |
~/.manifold/projects.json |
Registered projects (name, path, base branch) |
~/.manifold/memory/*.db |
Per-project SQLite memory stores |
~/.manifold/debug.log |
Debug log — check here first when something goes wrong |
~/.manifold/worktrees/... |
Managed git worktrees (default location) |
~/.manifold/projects/... |
Simple-view app projects (default location) |
The storage root (~/.manifold by default) is configurable in Settings → Storage Path.
- Node.js 18+
- npm
- macOS
- Git
- At least one supported CLI runtime installed locally
git clone https://github.com/vippsas/manifold.git
cd manifold| Command | Purpose |
|---|---|
npm install |
Install dependencies. Run once after cloning, and again when package.json changes. |
npm run dev |
Launch Electron in development mode with hot reload via electron-vite. Auto-rebuilds native modules. |
npm start |
Run the built app locally. Also auto-rebuilds native Electron modules. |
npm run build |
Produce a production build of main, preload, and renderer bundles. |
npm run dist |
Build and package a macOS .dmg for distribution. |
npm run typecheck |
Full TypeScript check (runs both typecheck:node and typecheck:web). |
npm run typecheck:node |
Typecheck main process, preload, and shared code (tsconfig.node.json). |
npm run typecheck:web |
Typecheck renderer and shared code (tsconfig.web.json). |
npm test |
Run the full vitest suite once. |
npm run test:watch |
Run vitest in watch mode while iterating on tests. |
Before opening a pull request, make sure npm run typecheck and npm test both pass.
Manifold follows Electron's multi-process model, where the UI has no direct access to Node.js or the filesystem — all system calls go through a controlled bridge:
src/main/: terminal processes (PTYs), git/worktree operations, search, memory, settings, and app lifecyclesrc/preload/: the bridge layer — whitelists which Node.js operations the UI is allowed to callsrc/renderer/: the Developer workspace UIsrc/renderer-simple/: the Simple app-builder UIsrc/shared/: shared types, defaults, prompts, and theme data
Important main-process services include:
SessionManagerfor starting, stopping, and resuming agent sessions, and finding existing worktrees on diskWorktreeManagerandBranchCheckoutManagerfor creating, switching, and removing git worktreesPtyPoolfor terminal processesGitOperationsManagerandPrCreatorfor generating commits, commit messages, and opening GitHub pull requestsDevServerManagerfor local preview sessions in Simple viewMemoryStore(SQLite storage),MemoryCapture(records session data),MemoryCompressor(summarises long sessions), andMemoryInjector(provides history to resumed sessions)- search services for exact text search, AI-sorted results, and AI-answered questions
For security, embedded web previews are limited to localhost URLs only — they cannot load external sites.
Manifold supports external plugins that can create and configure repositories on demand, communicating with Manifold through a versioned command-line protocol.
To build one, see docs/external-provisioners.md.
Contributions are welcome. A quick outline:
- Fork the repo and create a branch from
main. - Follow the Local Development steps to get the app running.
- Make your change, keeping it focused and small where possible.
- Run
npm run typecheckandnpm test— both must pass. - Open a pull request describing the change and the testing you ran.
See CONTRIBUTING.md for the full contributor setup, code conventions, test commands, and pull request workflow.
Manifold is released under the MIT License. See LICENSE for the full text.
Releases happen in two steps so the version bump lands on main before the tag is created.
- Prepare the release PR (choose one based on the change):
./release.sh patch # bug fixes and small changes
./release.sh minor # new features, backwards compatible
./release.sh major # breaking changes- After that PR is merged, publish the release:
./release.sh publish