The daemon resolves one skill bundle per request -- deliberately, so each download gets its own size-scaled deadline and is cached independently (GH #4505). ResolveTaskSkillBundles answered each of those by calling LoadAgentSkillBundles, which reads and hashes EVERY skill the agent has, then picks the single requested bundle out of the result and discards the rest. So the per-request cost scaled with the agent's skill count, and the number of requests did too. A cold dispatch for an agent with N skills read the whole skill set N+1 times and computed N*(N+1) bundle hashes to deliver N bundles. #7689 cut each of those loads from N+1 queries to 2, which fixed the round-trip count but not the multiplier: the bytes read from Postgres and the SHA-256 work stayed quadratic, and because the daemon issues these requests serially, that work lands directly in prepare latency. Load only what was asked for: - ListAgentSkillsByIDs is ListAgentSkills narrowed to a set of ids. The junction predicate is unchanged, so it is still the authorization: an id the agent does not have enabled returns no row, which the caller reports as not-found. It is deliberately NOT workspace-scoped, because ListAgentSkills is not either -- a stricter resolve could 404 a ref that claim had just advertised, breaking prepare instead of protecting it. - Files come from ListSkillFilesBySkillIDs, the batch query #7689 added, for those skills only. - Builtins resolve by name from the embedded FS and touch no query. - Only the requested skills are hashed. For 15 skills / 600KB that takes a cold dispatch from ~9.6MB read and 240 hashes to ~1.2MB and 30, with no schema change, no new index, and no change to the wire contract: stale-hash still returns the current bundle, plugin hash pinning still conflicts, response order still follows the request, and a read failure still fails closed with a 500 rather than a 404 the daemon would treat as permanent. LoadAgentSkills and the new loader share one assembly helper, so claim and resolve cannot drift on skill order, per-skill file order, or the nil file list of a skill with no files. Tests: an agent with three skills resolving one must issue one scoped query for one id and never the full ListAgentSkills; a builtin ref must touch no query at all; request order and ref dedup; and the denials the old full-set lookup used to provide -- unassigned skill, disabled assignment, another workspace's skill, unparseable id, a source with no server-side producer -- plus a scoped-read failure returning 500. Both the scoped load and the enabled predicate are mutation-verified. Co-authored-by: J <[email protected]> Co-authored-by: multica-agent <[email protected]>
Multica
Agents that show up on the board.
Multica is an open-source workspace where you assign work to AI coding agents the way you'd assign it to a teammate — they pick up the issue, report progress, raise blockers, and hand it back for review. Self-hostable, works with 26 agent CLIs, no lock-in.
Website · Docs · Quickstart · Download · Vision · Self-Hosting · Discord · X
English | 简体中文
Your next 10 hires won't be human.
What is Multica?
You already run Claude Code, Codex, and three other agents. Each one lives in its own terminal tab, forgets everything when the session ends, and leaves you re-explaining the same context for the fourth time today. The more agents you add, the more of your day goes to babysitting them.
Multica puts those agents and your teammates in one workspace. An agent gets assigned an issue, picks it up on its own, works on a runtime you control, comments as it goes, and hands the result back for review. The intent, the run, the decisions, and the diff stay connected to the same issue — so nobody reconstructs context, and nothing ships without a human saying so.
Build the team.
Claude Code, Codex, Cursor, Kimi — you don't pick one. You hire them all.
- 26 agent CLIs → Claude Code, Codex, Cursor, Copilot, Kimi, OpenCode, and more.
- Agents as teammates → Give each one a name, a provider, and a runtime — they show up on the board like anyone else.
- Squads → Put agents and people on one team; the leader routes the work.
- Skills → Turn a solved problem into a playbook every agent reuses.
- Your own runtime → Their desk is your machine — a daemon on your laptop or cloud box. Code never leaves it.
Hand off the work.
It starts as three rough sentences in an issue. It ends as a pull request.
- Assign an issue → Pick an agent as assignee the way you'd pick a colleague — it takes the work from there.
- Autopilots → Run standups, audits, and reports on a cron — nobody to remind.
- Chat → Ask your workspace a question, or start work without filing anything.
- Projects → Group work and attach the repos and docs agents need as context.
Stay in the loop.
Which agent touched this? What did it run? What did it cost? Open the run.
- Execution log → Replay every tool call, command, and error, timestamped.
- Token usage → See what each run cost, per agent and per issue.
- Review gates → Work lands in review, not in main. You decide what ships.
- Inbox → Get pinged when an agent needs a call, not for every step.
- Retries and timeouts → Failed runs retry on their own, or stop and tell you why.
Make it yours.
Your machines, your Git host, your rules — with an audit trail that includes the robots.
- Self-host everything → Docker Compose or Helm, on your own infrastructure.
- Any Git host → GitHub, GitLab, Gitea, or Forgejo — self-hosted included.
- Workspaces → Separate agents, issues, and settings per team.
- Roles and access scopes →
owner,admin, andmember— and exactly which agents each member can run. - Security model → What an agent can reach, and what it can't.
- Slack, Lark, DingTalk, WeCom, and Telegram → Trigger and follow agent work where your team already talks. DingTalk, WeCom, and Telegram are community-maintained.
- Web, desktop, and mobile → The same workspace on macOS, Windows, Linux, and iPhone — iOS builds from source today, not yet on the App Store.
- CLI and API → Every surface is scriptable. Agents drive Multica through the same CLI you do.
Get started
No terminal required: sign up at multica.ai, or download Multica Desktop for macOS, Windows, and Linux — it connects the computer it runs on as a runtime automatically.
The one prerequisite: the machine that will run agents needs at least one supported agent CLI installed and signed in — Claude Code, Codex, Cursor, and friends. Multica drives them; it doesn't ship them.
Self-hosting the whole thing
curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash -s -- --with-server
multica setup self-host
On Windows, set $env:MULTICA_MODE="with-server", then run the PowerShell installer:
irm https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.ps1 | iex.
This pulls the official images from GHCR and requires Docker. See the
Self-Hosting Guide; if the selected GHCR tag has not been published yet,
fall back to make selfhost-build from a checkout.
Your first agent in five minutes
1. Sign in. multica.ai in the browser, or open Multica Desktop.
2. Connect a computer. A runtime is any machine agents can work on — your laptop, or a cloud box. Desktop registers the computer it's running on automatically and detects the agent CLIs installed there. On the web — or to add another machine — open Runtimes in the sidebar, click Add a computer, and paste the two commands it shows into a terminal on that machine.
3. Create an agent. Open Agents in the sidebar and click New agent. Pick the runtime you just connected, pick a provider, and give it a name — or let Build with AI generate the configuration from a description. That name is how it shows up on the board and in comments.
4. Assign it something. File an issue and set the agent as assignee. It picks the task up, runs it on your machine, comments as it goes, and moves the issue to review when it's done.
Full walkthrough: Quickstart · Tutorial
Runtimes
Multica does not ship a model. It drives the agent CLIs you already have installed and authenticated, so switching providers is a dropdown, not a migration.
| Provider | CLI | Provider | CLI |
|---|---|---|---|
| Claude Code | claude |
OpenAI Codex | codex |
| Cursor Agent | cursor-agent |
GitHub Copilot CLI | copilot |
| OpenCode | opencode |
OpenClaw | openclaw |
| Hermes | hermes |
Pi | pi |
| Antigravity | agy |
CodeBuddy | codebuddy |
| DevEco Code | deveco |
Grok | grok |
| Kimi | kimi |
Kiro CLI | kiro-cli |
| Qoder CLI | qodercli |
Qoder CN | qoderclicn |
| Qwen Code | qwen |
QwenPaw | qwenpaw |
| Reasonix | reasonix |
Trae CLI | traecli |
| DeepSeek Harness | dsh |
Oh-My-Pi | omp |
| MiniMax Code | mcode |
Dim | dim |
| Huawei Cloud CodeArts | codearts |
— | — |
Installing and authenticating them: Install an agent runtime · Providers
Documentation
| I want to… | Start here |
|---|---|
| Get an agent doing something today | Quickstart · Tutorial |
| Understand how the pieces fit | Core concepts · How Multica works |
| Create and configure agents | Agents · Create an agent · Skills |
| Get work to an agent | Triggering agents · Assigning issues · Mentions |
| Connect my machines | Daemon and runtimes · Install an agent runtime |
| Connect Git and chat tools | GitHub · Self-hosted Git · Channels |
| Run it on my own infrastructure | Self-hosting · Security model · Environment variables |
| Script it | CLI reference · CLI and daemon guide · Auth tokens |
| Drive Multica from Codex, Claude Code, or Cursor | Multica CLI skill |
| Work out why an agent is stuck | Tasks · Troubleshooting |
Architecture
Web · Desktop (macOS/Windows/Linux) · iOS
│
▼
┌──────────────┐ ┌──────────────┐ ┌──────────────────┐
│ Next.js │──>│ Go backend │──>│ PostgreSQL │
│ frontend │<──│ (Chi + WS) │<──│ (17) │
└──────────────┘ └──────┬───────┘ └──────────────────┘
│ tasks over WebSocket
┌──────┴───────┐
│ Agent daemon │ runs on your machine, next to your code
└──────┬───────┘
│ spawns
┌──────┴───────────────────────────────┐
│ Claude Code · Codex · Cursor · … │
│ (any of the 26 runtimes above) │
└──────────────────────────────────────┘
| Layer | Stack |
|---|---|
| Web | Next.js 16 (App Router) |
| Desktop | Electron, sharing the web UI packages |
| Mobile | Expo / React Native (iOS) |
| Backend | Go (Chi router, sqlc, gorilla/websocket) |
| Database | PostgreSQL 17 (pgcrypto + pg_trgm) |
| Agent runtime | Local daemon executing any of the 26 agent CLIs above |
Development
Contributors: start with the Contributing Guide.
Prerequisites: Node.js 22, pnpm 10.28.2, Go 1.26.6, Docker
make dev
make dev auto-detects your environment (main checkout or worktree), creates the env file,
installs dependencies, sets up the database, runs migrations, and starts every service.
See CONTRIBUTING.md for the full workflow, worktree support, testing, and
troubleshooting. The iOS client lives in apps/mobile/ — its
README covers building it onto your own iPhone.
We release most weekdays, so main moves quickly — pull often.
Why "Multica"?
Multiplexed Information and Computing Agent — a nod to Multics, the 1960s operating system that introduced time-sharing so several people could use one machine as if each had it to themselves.
Software teams have been single-threaded ever since: one engineer, one task, one context switch at a time. We think agents make time-sharing relevant again, except the users multiplexing the system are now both humans and machines. A small team shouldn't feel small.
The longer argument, and where we think this goes: VISION.md.
License
Multica License — the complete Apache License 2.0 text plus additional conditions covering hosted services, commercial embedding, and branding. Self-host it, modify it, build on it; the exact terms are in the LICENSE, attribution notices in NOTICE.
