Files
open-multi-agent/packages/core/examples/integrations
Jack Chen ffb2905017 feat(agent): orchestrate external coding agents over ACP (#204) (#360)
* feat(agent): orchestrate external coding agents over ACP (#204)

Add an AgentBackend seam so an Agent can run on either the LLM AgentRunner
or an external agent. First backend: an ACP client that drives a coding CLI
(e.g. Claude Code via its ACP adapter) as a first-class team member — same
task DAG, shared memory, cascade, and token budget as LLM agents.

- Extract AgentBackend ({ run, stream }) that AgentRunner already implements;
  Agent.getBackend() branches on AgentConfig.backend.
- AcpBackend spawns the agent over stdio JSON-RPC and maps session updates to
  a RunResult (text, tool calls, usage); handles permissions and abort.
- ACP SDK as a lazy optional peer; new /acp subpath export.
- docs/external-agents.md, a hybrid-team example, and tests (in-process fake
  agent + subprocess integration).

Experimental: ACP is young; token accounting maps ACP's single context
figure and client-side fs proxying is not implemented yet.

* fix(agent): harden ACP backend after review (#204)

Follow-up fixes on the ACP external-agent backend (PR #360):

- Token accounting: usage_update.used is a cumulative context-size gauge, not a
  per-turn delta. Record each turn's increment so summing across a reused session
  telescopes to the latest figure instead of double-counting.
- systemPrompt: ACP has no system-prompt field, so prepend the agent's systemPrompt
  to the session's first turn (once). It was previously dropped and only fed
  coordinator routing.
- Abort: when the signal is already aborted before a turn starts, return empty
  output without prompting (no in-flight turn to cancel).
- Startup: clear the cached start() promise on failure so a later run retries
  instead of re-throwing the same rejection forever.
- Permissions: auto-approve now prefers least-privilege allow_once over a
  session-wide allow_always.

Docs (external-agents.md, CLAUDE.md) updated to match. ACP tests 10 to 15;
lint + full suite (1135) green.
2026-07-10 23:26:40 +08:00
..

examples/integrations/

OMA wired to external systems: MCP servers, observability backends, other frameworks, app shells. Runnable starting points, not product docs.

Two categories live here.

Reference integrations demonstrate wiring against widely used protocols or frameworks. The OMA team maintains these once merged, regardless of who contributed them. Current:

  • mcp-github.ts: MCP servers via connectMCPTools().
  • mcp-open-design.ts: batch fan-out over an MCP server's async, long-running jobs — N Open Design landing-page variants generated in parallel via runTasks(), each variant driven create_project → start_run → poll get_run to a terminal status by deterministic code.
  • external-agent-acp.ts: external coding agents (Gemini CLI / Claude Code) as team members via the acp backend. See docs/external-agents.md.
  • trace-observability.ts: the onTrace API.
  • with-vercel-ai-sdk/: Next.js + AI SDK + runTeam().
  • express-customer-support/: Express REST API + runTasks(). Contributed by @CodingBangboo via #191.

Vendor integrations show OMA paired with a specific third-party commercial product. They live under with-<product>/ and stay credited to the contributor. Current:

  • with-engram/: Engram memory backend. Contributed by @Agentscreator via #160.
  • with-tencentdb-memory/: TencentDB-Agent-Memory long-term memory (L0→L3 pipeline) via its Hermes Gateway sidecar.

Submitting a reference integration

Open a PR following the conventions in examples/README.md. For widely used protocols or frameworks, no prior discussion needed. For niche ones, open a discussion first so we can confirm the wiring is worth maintaining long-term.

Submitting a vendor integration

One condition: the integration is reciprocal. Your product's repo or docs should reference OMA as a supported integration. No payment involved, this is a signal filter for who has actually shipped against OMA.

Flow:

  1. Open a discussion with the link to OMA in your product's docs and a sketch of the example.
  2. Wait for a maintainer reply confirming the example is in scope.
  3. PR it. Follow the conventions in examples/README.md.

If your product doesn't reference OMA yet, open a discussion to get listed in the Ecosystem section.

The Featured Partner program is separate and paid, for prominent README placement. Eligibility is an active OMA integration; reciprocal listing isn't required.

Out of scope here

  • Marketing copy for a third-party product.
  • Examples gated behind paid-only APIs with no free or trial tier.
  • Thin connectMCPTools() wrappers whose only difference from mcp-github.ts is the server name and prefix. Those belong in your own docs.