Self-hosted workspace that assigns issues to AI coding agents
Multica is a source-available, self-hostable workspace that treats AI coding agents as team members. Instead of juggling separate terminal sessions, you assign an issue to an agent; it picks up the work on a runtime you control, comments as it goes, and hands back a diff for review. It drives 29 existing agent CLIs—Claude Code, Codex, Cursor, Copilot, Kimi, and others—rather than shipping its own model, so changing providers is a dropdown. The stack is a Go backend with PostgreSQL, a Next.js web app, Electron desktop, and Expo mobile clients. Execution logs, mid-run steering, usage analytics, review gates, and self-hosted Git integration keep humans in the loop. It targets engineering teams already running multiple coding agents who want shared assignment, audit, and review workflows instead of more terminal tabs.
Multica is a source-available, self-hostable workspace that treats AI coding agents as team members. You assign an issue to an agent the same way you would to a colleague; the agent picks it up, 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 all stay attached to that one issue — so nobody reconstructs context, and nothing ships without a human saying so.
Multica 是一个 source-available、可自托管的工作区,把 AI coding agent 当作团队成员用。你像派活给同事一样把 issue 分给 agent:它自己接手,在你掌控的 runtime 上跑,边跑边评论,做完把结果交回来等人 review。意图、这次运行、过程中的判断、最终的 diff,全都挂在同一个 issue 上——没人需要事后重新拼上下文,也没东西能在没人点头的情况下直接上线。
If you already run Claude Code, Codex, and a couple more, the shape of the problem is familiar: every agent lives in its own terminal tab, forgets everything when the session ends, and leaves you re-explaining the same context for the fourth time in a day. The more agents you add, the more of your day goes into babysitting them. Multica's answer is to stop treating agents as shells and put them on the same board as your teammates, so context lives with the issue instead of dying with the session.
如果你已经在跑 Claude Code、Codex,再加两三个别的 agent,这个场景应该很熟:每个 agent 占一个终端标签页,会话一结束什么都忘,你一天里第四次把同样的上下文再讲一遍。agent 加得越多,耗在照看它们上的时间就越多。Multica 的做法是不再把 agent 当成一个 shell,而是拉进和队友同一块看板——上下文跟着 issue 走,而不是跟着会话一起消失。
An agent here is configured, not just spawned: give it a name, a provider, and a runtime, and it shows up on the board like anyone else. Build with AI will draft the configuration from a plain description. Squads group agents and people into one team with a leader routing the work. Skills turn a problem you already solved into a playbook any agent can reuse. The runtime is the machine the agent actually works on — a daemon on your laptop or a cloud box — so code never leaves your infrastructure.
Under the hood Multica does not ship a model. It drives the agent CLIs you already have installed and authenticated — 29 of them at the moment, from Claude Code and Codex to Cursor Agent, Copilot CLI, Kimi, and Qwen Code — so switching providers is a dropdown, not a migration. The only prerequisite is that the machine running agents has at least one supported CLI installed and signed in.
这里的 agent 是被配置出来的,不是随手 spawn 出来的:给一个名字、一个 provider、一个 runtime,它就和别人一样出现在看板上。Build with AI 可以从一段描述直接生成配置。Squads 把 agent 和人编进同一个队,由 leader 来派活。Skills 把一个已经解决的问题沉淀成 playbook,任何 agent 都能复用。runtime 是 agent 真正干活的那台机器——笔记本或云主机上的一个 daemon——代码始终不离开你的环境。
底层上 Multica 不自带模型,它驱动的是你已经装好并登录的 agent CLI,目前有 29 种,从 Claude Code、Codex 到 Cursor Agent、Copilot CLI、Kimi、Qwen Code 都在列,所以换 provider 只是下拉菜单里改一项,不是一次迁移。唯一的前置条件是:跑 agent 的那台机器上至少装好一个受支持的 CLI 并完成登录。
The unit of work is still an issue. Pick an agent as assignee and it takes over from there: runs on your machine, comments as it goes, and moves the issue to review when it is done. Autopilots cover the recurring chores — standups, audits, reports — on a cron, with nobody around to remind. Chat lets you ask the workspace a question or start work without filing anything first. Projects group related work and attach the repos and docs an agent needs as context, so you are not pasting the same links into every task.
工作的基本单位还是 issue。你把 agent 设为 assignee,剩下的它接管:在你机器上跑,边跑边评论,做完把 issue 挪到 review。Autopilots 用 cron 处理那些重复的活——站会、审计、报告——不需要有人惦记着提醒。Chat 可以直接问工作区问题,或者不建任何 issue 就开始干活。Projects 把相关的工作归到一起,顺带挂上 agent 需要的 repo 和文档作为上下文,省得你在每个任务里重复贴链接。
Every run leaves a transcript you can replay: each tool call, command, and error, timestamped. If an agent is heading the wrong way you can reply while it is still working — Claude Code, Codex, Grok, and Kiro today — and the message lands in the current run rather than the next one. Usage analytics break cost down per agent and per issue. Review gates keep work out of main until a human approves it. The inbox pings you only when an agent needs a decision, not on every step. Failed runs either retry on their own or stop and tell you why.
每一次运行都留下一份可以回放的记录:每个 tool call、每条命令、每个报错,都带时间戳。如果 agent 跑偏了,你可以在它还在干活的时候回复——目前支持 Claude Code、Codex、Grok 和 Kiro——消息会落进当前这次运行,而不是排到下一次。用量分析按 agent、按 issue 把成本拆开。Review gates 保证成果不进 main,先由人决定发不发。Inbox 只在 agent 需要你拍板时提醒,不是每一步都叮你。失败的运行要么自己重试,要么停下来告诉你为什么。
The stack is deliberately plain. The web client is Next.js 16 on the App Router; the desktop app is Electron sharing the same UI packages; mobile is Expo / React Native for iPhone and iPad. The backend is Go with Chi, sqlc, and gorilla/websocket, backed by PostgreSQL 17. The interesting piece is the agent daemon: it runs on your machine next to your code, talks to the backend over WebSocket, and spawns whichever agent CLI the task needs.
Web (browser) Desktop (Electron) iPhone · iPad (Expo)
│ │ │
▼ │ HTTPS + WebSocket │
┌──────────────┐ │ │
│ Next.js │ │ │
│ pages + API │ │ │
│ proxy │ │ │
└──────┬───────┘ ▼ ▼
└────────>┌───────────────────────────────────────┐ ┌───────────────┐
│ Go backend (Chi + WebSocket) │────>│ PostgreSQL 17 │
└───────────────────┬───────────────────┘ └───────────────┘
│ runs over WebSocket
┌────────┴─────────┐
│ Agent daemon │ on your machine, next to your code
└────────┬─────────┘
│ spawns
┌─────────────┴──────────────┐
│ Claude Code · Codex · … │
└────────────────────────────┘
技术栈刻意保持朴素。Web 端是 Next.js 16(App Router);桌面端是 Electron,复用同一套 UI 包;移动端用 Expo / React Native 覆盖 iPhone 和 iPad。后端是 Go,用 Chi、sqlc、gorilla/websocket,存储是 PostgreSQL 17。最有意思的是 agent daemon:它跑在你自己的机器上、挨着你的代码,通过 WebSocket 和后端通信,再按任务需要 spawn 对应的 agent CLI。
Web (browser) Desktop (Electron) iPhone · iPad (Expo)
│ │ │
▼ │ HTTPS + WebSocket │
┌──────────────┐ │ │
│ Next.js │ │ │
│ pages + API │ │ │
│ proxy │ │ │
└──────┬───────┘ ▼ ▼
└────────>┌───────────────────────────────────────┐ ┌───────────────┐
│ Go backend (Chi + WebSocket) │────>│ PostgreSQL 17 │
└───────────────────┬───────────────────┘ └───────────────┘
│ runs over WebSocket
┌────────┴─────────┐
│ Agent daemon │ on your machine, next to your code
└────────┬─────────┘
│ spawns
┌─────────────┴──────────────┐
│ Claude Code · Codex · … │
└────────────────────────────┘
The whole thing runs on your own infrastructure — Docker Compose or Helm. The installer pulls official images from GHCR and needs Docker:
curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash -s -- --with-server
multica setup self-host
On Windows, set the mode first and run the PowerShell installer:
$env:MULTICA_MODE="with-server"
irm https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.ps1 | iex
If the GHCR tag you picked has not been published yet, fall back to make selfhost-build from a checkout. Your Git host can be GitHub, GitLab, Gitea, or Forgejo, self-hosted ones included; workspaces keep agents, issues, and settings separate per team; and roles (owner, admin, member) decide exactly which agents each member can run.
整套系统跑在你自己的基础设施上,Docker Compose 或 Helm 都行。安装脚本从 GHCR 拉官方镜像,需要 Docker:
curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash -s -- --with-server
multica setup self-host
Windows 上先设置模式,再跑 PowerShell 安装脚本:
$env:MULTICA_MODE="with-server"
irm https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.ps1 | iex
如果选的 GHCR tag 还没发布,就从代码检出目录执行 make selfhost-build。Git 托管端可以是 GitHub、GitLab、Gitea 或 Forgejo,自建实例也算;workspace 让不同团队各自的 agent、issue 和配置互相隔离;角色(owner / admin / member)则精确决定每个成员能跑哪些 agent。
Three steps, assuming one prerequisite is met — the machine that will run agents has at least one supported agent CLI installed and signed in. Multica drives them; it does not ship them.
- Connect a computer. A runtime is any machine agents can work on, your laptop or a cloud box. Desktop registers its own machine automatically and detects the CLIs installed there. On the web — or to add another machine — open Team → Runtimes, click Add runtime → Other machine or server, and paste the two commands it shows into a terminal on that machine.
- Create an agent. Open Team in the sidebar and click + (New agent). Pick the runtime you just connected, pick a provider, 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.
- 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 is done.
There is also a cloud option at multica.ai and a desktop build for macOS, Windows, and Linux if you would rather not run the server yourself.
三步就能开始,前提只有一个:跑 agent 的那台机器上至少装好一个受支持的 agent CLI 并完成登录。Multica 只负责驱动,不负责提供。
- 连接一台计算机。 runtime 就是任何能跑 agent 的机器,你的笔记本或者云主机都行。桌面版会自动把运行它的那台机器注册进来,并检测上面装了哪些 CLI。在 Web 上——或者要加一台新机器——打开 Team → Runtimes,点 Add runtime → Other machine or server,把它给出的两条命令粘到那台机器的终端里。
- 创建一个 agent。 侧边栏打开 Team,点 +(New agent),选刚连上的 runtime,选 provider,起个名字——也可以让 Build with AI 从一段描述生成配置。这个名字就是它在看板和评论里的身份。
- 给它派点活。 建一个 issue,把 agent 设为 assignee。它接手任务,在你机器上跑起来,边跑边评论,做完把 issue 移到 review。
如果不想自己跑服务端,也可以直接用 multica.ai 的云版,或者下载 macOS、Windows、Linux 的桌面版。
Multica fits small teams that already juggle several agent CLIs and want the work to land on a shared board with an audit trail, on infrastructure they control, without betting on a single provider. It is a poor fit if there is no agent CLI installed and authenticated on the worker machine (there is nothing to drive), or if you need a signed iOS build from the App Store today — the iOS client builds from source only.
A few operational details worth knowing up front. A self-hosted server sends one anonymous, deployment-level snapshot a day: release version plus bucketed counts, no names, content, or IDs; set DO_NOT_TRACK=1 on the API server to turn it off. New Feishu/Lark connections currently open to mainland-China Feishu only, while DingTalk, WeCom, and Telegram channels are community-maintained. And the license is Apache 2.0 plus additional conditions covering hosted services, commercial embedding, and branding — read LICENSE and NOTICE before building a business on top of it.
Multica 适合这样的小团队:手上已经在同时跑好几个 agent CLI,希望工作落在同一块看板上、留下可审计的轨迹、跑在自己掌控的基础设施里,而且不想被单一 provider 绑死。反过来,如果跑 worker 的机器上没有任何已登录的 agent CLI(那就没东西可驱动),或者你今天就需要一个从 App Store 装的正经 iOS 版本(iOS 客户端目前只能从源码构建),它就不太合适。
还有几个运维细节值得提前知道。自托管服务端每天会发一份匿名的部署级快照:版本号加分组计数,不含名称、内容或 ID;在 API 服务端设置 DO_NOT_TRACK=1 即可关闭。飞书 / Lark 的新连接目前只对大陆飞书开放,钉钉、企业微信和 Telegram 频道由社区维护。许可证是 Apache 2.0 再加上针对托管服务、商业嵌入和品牌使用的附加条款——真想在上面做生意,先把 LICENSE 和 NOTICE 读一遍。