740ebdb8ef MUL-5991 feat(agent): enable ACP thinking_level for the hermes provider (jcode) (#6814)
* feat(agent): enable ACP thinking_level for the hermes provider (jcode)

The reporter confirmed from jcode source (v0.71.1 and v0.73.0) that its
advertised effort is genuinely applied, not just echoed: session/set_config_option
waits for an `effort_changed` ack, and the provider request carries
`reasoning.effort` upstream. That was the one open question blocking this
half of GitHub #6720.

The wrinkle is that `hermes` is one provider type over two unrelated
binaries with opposite answers here:

  - jcode advertises option id `reasoning_effort` under category
    `thought_level` and applies it. The shared parser already matches on
    category, so the id being unrecognised costs nothing and the id we
    send back is jcode's own.
  - Hermes Agent has no effort surface on ACP at all. Re-verified against
    v0.20.0 today by driving `hermes acp` directly: session/new still
    returns only `_meta`, `models`, `modes`, `sessionId`, unchanged from
    the v0.18.2 finding in MUL-5770.

A version gate cannot separate those — they are different projects, not
different releases. The catalog can, and does: an empty catalog means no
picker and no set_config_option call, so admitting `hermes` to
acpCatalogThinkingProviders is safe for both. This is the case the
catalog-driven design was built for.

Also corrects the docs that stated hermes has no reasoning control. That
is now binary-specific rather than universally true, and Copilot takes
over as the example of a runtime with no effort dial at all.

Co-authored-by: multica-agent <[email protected]>

* test(handler): retarget the no-reasoning-control fixture from hermes to copilot

These tests used hermes as the canonical runtime with no effort dial, so
enabling it broke them in CI — they passed locally only because the
handler suite skips without a database.

Copilot takes over the role: it discovers over ACP but executes through
its own CLI, so there is genuinely no live ACP session to carry an
effort. The behavior being pinned is unchanged — a capability gap must
not be reported as an unrecognised token.

Adds the inverse assertion in the same test: hermes now accepts a level
at the provider gate, since jcode applies one. Whether a picker appears
is settled per session by the discovered catalog, not here.

Verified against a real Postgres this time rather than the skip path.

Co-authored-by: multica-agent <[email protected]>

* fix(agent): keep the capability 400 for hermes runtimes with no effort dial

Opening the thinking_level gate for the hermes provider regressed the
majority of that provider's users. Hermes Agent, not jcode, is what most
people run there, and it advertises no effort option — so a CLI
`--thinking-level high` went from an immediate, accurate 400 to a 201
followed by the daemon silently dropping the level at task time.

The provider name cannot distinguish the two binaries, but the model
catalog the daemon already reports can: a hermes runtime whose catalog
advertises no thinking levels is a Hermes Agent install. Consult it in
the create and update paths and restore the capability message for that
case, leaving jcode unaffected.

Fails open on purpose. A cold cache, an offline daemon, or a
never-discovered runtime all skip the check, so a valid jcode agent is
never blocked before its first discovery; the daemon's pre-execution
guard remains the backstop.

Verified against a real Postgres, including the fail-open paths.

Co-authored-by: multica-agent <[email protected]>

* fix(agent): refuse a thinking level on an undiscovered hermes runtime

Review caught that the fail-open branch was not the transient cold start I
assumed. The model catalog is written only by ReportModelListResult, i.e.
only after a client explicitly asks for a model list, so a caller who works
through the CLI and never opens a model picker stays undiscovered
indefinitely. Reading "unknown" as "supported" therefore left the majority
Hermes Agent case exactly where it started: `--thinking-level high` accepted
and persisted, then silently dropped by the daemon at task time.

Replace the boolean with three states — present / absent / unknown — and
refuse on unknown, but only for providers whose name does not determine the
binary. `hermes` is the sole member; reasonix names one binary that does
support an effort, so an undiscovered reasonix runtime stays allowed rather
than being blocked before its first discovery.

Unknown gets its own message rather than reusing "does not support a
per-agent reasoning effort". That sentence would be actively false for a
jcode runtime, sending its owner to look for a limitation that isn't there;
naming the missing evidence points at what actually resolves it.

Also adds the execution-chain coverage the review asked for: jcode-shaped
ACP stubs prove set_config_option(reasoning_effort) goes out before
session/prompt on both session/new and session/resume, and a Hermes
Agent-shaped payload produces no config call at all. That is the substitute
evidence for having no real jcode to test against.

Skill and source map updated so the documented guarantee matches the code
rather than being stronger than it.

Co-authored-by: multica-agent <[email protected]>

* fix(agent): word the undiscovered-runtime 400 for create as well as update

The message pointed at "the agent's model picker", which does not exist on
the create path — the agent is not created yet. "the model picker for this
runtime" is accurate on both paths (review nit, PR #6814).

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Bohan-J <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-08-13 16:42:47 +08:00

Multica

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 20 agent CLIs, no lock-in.

CI Release GitHub stars Discord

Website · Docs · Quickstart · Download · Vision · Self-Hosting · Discord · X

English | 简体中文

A Multica board where six agents and their human teammates are moving work across columns

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.

  • 20 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, and member — and exactly which agents each member can run.
  • Security model → What an agent can reach, and what it can't.
  • Slack, Lark, DingTalk, and WeCom → Trigger and follow agent work where your team already talks. DingTalk and WeCom 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

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
Work out why an agent is stuck Tasks · Troubleshooting

Architecture

        Web  ·  Desktop (macOS/Windows/Linux)  ·  iOS
                          │
                          ▼
   ┌──────────────┐   ┌──────────────┐   ┌──────────────────┐
   │   Next.js    │──>│  Go backend  │──>│   PostgreSQL     │
   │   frontend   │<──│  (Chi + WS)  │<──│   (pgvector)     │
   └──────────────┘   └──────┬───────┘   └──────────────────┘
                             │  tasks over WebSocket
                      ┌──────┴───────┐
                      │ Agent daemon │  runs on your machine, next to your code
                      └──────┬───────┘
                             │  spawns
                      ┌──────┴───────────────────────────────┐
                      │  Claude Code · Codex · Cursor · …    │
                      │  (any of the 20 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 with pgvector
Agent runtime Local daemon executing any of the 20 agent CLIs above

Development

Contributors: start with the Contributing Guide.

Prerequisites: Node.js v20+, pnpm v10.28+, Go v1.26+, 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.

S
Description
Make humans and AI agents work as one team — open-source and self-hostable. — mirror of https://github.com/klinsmaya/multica
https://multica.ai
go
Readme Apache-2.0
179 MiB
Languages
Go 55.2%
TypeScript 38.3%
MDX 5%
PLpgSQL 0.4%
JavaScript 0.4%
Other 0.6%