
open-multi-agent-orchestration
Expertise in using open-multi-agent, a TypeScript framework for building production-grade multi-agent AI teams with task scheduling, dependency graphs, and inter-agent communication.
- Installs
- 711
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/reason-machines/trending-skills --skill open-multi-agent-orchestration- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads open-multi-agent-orchestration automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Open Multi-Agent Orchestration
Skill by ara.so — Daily 2026 Skills collection.
open-multi-agent is a TypeScript framework for building AI agent teams where agents with different roles, models, and tools collaborate on complex goals. The framework handles task dependency resolution (DAG scheduling), parallel execution, shared memory, and inter-agent communication — all in-process with no subprocess overhead.
Installation
npm install @jackchen_me/open-multi-agent
# or
pnpm add @jackchen_me/open-multi-agent
Set environment variables:
export ANTHROPIC_API_KEY=your_key_here
export OPENAI_API_KEY=your_key_here # optional, only if using OpenAI models
Core Concepts
| Concept | Description |
|---|---|
OpenMultiAgent | Top-level orchestrator — entry point for all operations |
Team | A named group of agents sharing a message bus, task queue, and optional shared memory |
AgentConfig | Defines an agent's name, model, provider, system prompt, and allowed tools |
Task | A unit of work with a title, description, assignee, and optional dependsOn list |
LLMAdapter | Pluggable interface — built-in adapters for Anthropic and OpenAI |
ToolRegistry | Registry of available tools; built-ins + custom tools via defineTool() |
Quick Start — Single Agent
import { OpenMultiAgent } from '@jackchen_me/open-multi-agent'
const orchestrator = new OpenMultiAgent({ defaultModel: 'claude-sonnet-4-6' })
const result = await orchestrator.runAgent(
{
name: 'coder',
model: 'claude-sonnet-4-6',
tools: ['bash', 'file_write'],
},
'Write a TypeScript function that reverses a string, save it to /tmp/reverse.ts, and run it.',
)
console.log(result.output)
Multi-Agent Team
import { OpenMultiAgent } from '@jackchen_me/open-multi-agent'
import type { AgentConfig } from '@jackchen_me/open-multi-agent'
const architect: AgentConfig = {
name: 'architect',
model: 'claude-sonnet-4-6',
systemPrompt: 'You design clean API contracts and file structures.',
tools: ['file_write'],
}
const developer: AgentConfig = {
name: 'developer',
model: 'claude-sonnet-4-6',
systemPrompt: 'You implement what the architect designs.',
tools: ['bash', 'file_read', 'file_write', 'file_edit'],
}
const reviewer: AgentConfig = {
name: 'reviewer',
model: 'claude-sonnet-4-6',
systemPrompt: 'You review code for correctness and clarity.',
tools: ['file_read', 'grep'],
}
const orchestrator = new OpenMultiAgent({
defaultModel: 'claude-sonnet-4-6',
onProgress: (event) => console.log(event.type, event.agent ?? event.task ?? ''),
})
const team = orchestrator.createTeam('api-team', {
name: 'api-team',
agents: [architect, developer, reviewer],
sharedMemory: true,
})
const result = await orchestrator.runTeam(
team,
'Create a REST API for a todo list in /tmp/todo-api/',
)
console.log(`Success: ${result.success}`)
console.log(`Output tokens: ${result.totalTokenUsage.output_tokens}`)
Task Pipeline — Explicit DAG Control
Use runTasks() when you need precise control over task ordering, assignments, and parallelism:
const result = await orchestrator.runTasks(team, [
{
title: 'Design the data model',
description: 'Write a TypeScript interface spec to /tmp/spec.md',
assignee: 'architect',
},
{
title: 'Implement the module',
description: 'Read /tmp/spec.md and implement the module in /tmp/src/',
assignee: 'developer',
dependsOn: ['Design the data model'], // blocked until design completes
},
{
title: 'Write tests',
description: 'Read the implementation and write Vitest tests.',
assignee: 'developer',
dependsOn: ['Implement the module'],
},
{
title: 'Review code',
description: 'Review /tmp/src/ and produce a structured code review.',
assignee: 'reviewer',
dependsOn: ['Implement the module'], // runs in parallel with "Write tests"
},
])
Tasks with no unresolved dependsOn entries run in parallel automatically. The framework cascades failures — if a task fails, dependent tasks are skipped.
Multi-Model Teams (Claude + GPT)
const claudeAgent: AgentConfig = {
name: 'strategist',
model: 'claude-opus-4-6',
provider: 'anthropic',
systemPrompt: 'You plan high-level approaches.',
tools: ['file_write'],
}
const gptAgent: AgentConfig = {
name: 'implementer',
model: 'gpt-5.4',
provider: 'openai',
systemPrompt: 'You implement plans as working code.',
tools: ['bash', 'file_read', 'file_write'],
}
const team = orchestrator.createTeam('mixed-team', {
name: 'mixed-team',
agents: [claudeAgent, gptAgent],
sharedMemory: true,
})
const result = await orchestrator.runTeam(team, 'Build a CLI tool that converts JSON to CSV.')
Custom Tools with Zod Schemas
import { z } from 'zod'
import {
defineTool,
Agent,
ToolRegistry,
ToolExecutor,
registerBuiltInTools,
} from '@jackchen_me/open-multi-agent'
// Define the tool
const weatherTool = defineTool({
name: 'get_weather',
description: 'Get current weather for a city.',
inputSchema: z.object({
city: z.string().describe('The city name.'),
units: z.enum(['celsius', 'fahrenheit']).optional().describe('Temperature units.'),
}),
execute: async ({ city, units = 'celsius' }) => {
// Replace with your actual weather API call
const data = await fetchWeatherAPI(city, units)
return { data: JSON.stringify(data), isError: false }
},
})
// Wire up registry
const registry = new ToolRegistry()
registerBuiltInTools(registry) // adds bash, file_read, file_write, file_edit, grep
registry.register(weatherTool) // add your custom tool
const executor = new ToolExecutor(registry)
const agent = new Agent(
{
name: 'weather-agent',
model: 'claude-sonnet-4-6',
tools: ['get_weather', 'file_write'],
},
registry,
executor,
)
const result = await agent.run('Get the weather for Tokyo and save a report to /tmp/weather.txt')
Streaming Output
import { Agent, ToolRegistry, ToolExecutor, registerBuiltInTools } from '@jackchen_me/open-multi-agent'
const registry = new ToolRegistry()
registerBuiltInTools(registry)
const executor = new ToolExecutor(registry)
const agent = new Agent(
{ name: 'writer', model: 'claude-sonnet-4-6', maxTurns: 3 },
registry,
executor,
)
for await (const event of agent.stream('Explain dependency injection in two paragraphs.')) {
if (event.type === 'text' && typeof event.data === 'string') {
process.stdout.write(event.data)
}
}
Progress Monitoring
const orchestrator = new OpenMultiAgent({
defaultModel: 'claude-sonnet-4-6',
onProgress: (event) => {
switch (event.type) {
case 'task:start':
console.log(`▶ Task started: ${event.task}`)
break
case 'task:complete':
console.log(`✓ Task done: ${event.task}`)
break
case 'task:failed':
console.error(`✗ Task failed: ${event.task}`)
break
case 'agent:thinking':
console.log(` [${event.agent}] thinking...`)
break
case 'agent:tool_use':
console.log(` [${event.agent}] using tool: ${event.tool}`)
break
}
},
})
Built-in Tools Reference
| Tool | Key Options | Notes |
|---|---|---|
bash | command, timeout, cwd | Returns stdout + stderr |
file_read | path, offset, limit | Use offset/limit for large files |
file_write | path, content | Auto-creates parent directories |
file_edit | path, old_string, new_string | Exact string match replacement |
grep | pattern, path, flags | Uses ripgrep if available, falls back to Node.js |
AgentConfig Options
interface AgentConfig {
name: string // unique within a team
model: string // e.g. 'claude-sonnet-4-6', 'gpt-5.4'
provider?: 'anthropic' | 'openai' // inferred from model name if omitted
systemPrompt?: string // agent's persona and instructions
tools?: string[] // names of tools the agent can use
maxTurns?: number // max conversation turns (default: unlimited)
}
Custom LLM Adapter
Implement two methods to add any LLM provider:
import type { LLMAdapter, ChatMessage, ChatResponse } from '@jackchen_me/open-multi-agent'
class OllamaAdapter implements LLMAdapter {
async chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse> {
const response = await fetch('http://localhost:11434/api/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ model: options?.model ?? 'llama3', messages }),
})
const data = await response.json()
return {
content: data.message.content,
usage: { input_tokens: 0, output_tokens: 0 },
}
}
async *stream(messages: ChatMessage[], options?: ChatOptions): AsyncIterable<StreamEvent> {
// implement streaming from Ollama's /api/chat with stream:true
}
}
Common Patterns
Pattern: Research → Write → Review pipeline
const team = orchestrator.createTeam('content-team', {
name: 'content-team',
agents: [
{ name: 'researcher', model: 'claude-sonnet-4-6', tools: ['bash', 'file_write'] },
{ name: 'writer', model: 'claude-sonnet-4-6', tools: ['file_read', 'file_write'] },
{ name: 'editor', model: 'claude-sonnet-4-6', tools: ['file_read', 'file_edit'] },
],
sharedMemory: true,
})
await orchestrator.runTasks(team, [
{
title: 'Research topic',
description: 'Research TypeScript 5.6 features, save findings to /tmp/research.md',
assignee: 'researcher',
},
{
title: 'Write article',
description: 'Read /tmp/research.md and write a blog post to /tmp/article.md',
assignee: 'writer',
dependsOn: ['Research topic'],
},
{
title: 'Edit article',
description: 'Read /tmp/article.md and improve clarity and tone in-place',
assignee: 'editor',
dependsOn: ['Write article'],
},
])
Pattern: Fan-out then merge
// Three agents work on separate modules in parallel, then one integrates
await orchestrator.runTasks(team, [
{ title: 'Build auth module', assignee: 'dev-1', description: '...' },
{ title: 'Build data module', assignee: 'dev-2', description: '...' },
{ title: 'Build api module', assignee: 'dev-3', description: '...' },
{
title: 'Integrate modules',
assignee: 'architect',
description: 'Wire auth, data, and api modules together.',
dependsOn: ['Build auth module', 'Build data module', 'Build api module'],
},
])
Troubleshooting
ANTHROPIC_API_KEY not found
Ensure the env var is exported in the shell running your script, or use a .env loader like dotenv before importing from the framework.
Tasks not running in parallel
Check that tasks don't share a circular dependsOn chain. Only tasks with all dependencies resolved become eligible for parallel execution.
Agent exceeds token limit
Set maxTurns on the AgentConfig to cap conversation length. For large file operations, use file_read with offset/limit instead of reading entire files.
Tool not found error
Ensure the tool name in AgentConfig.tools[] exactly matches the name registered in ToolRegistry. Built-in tools are registered via registerBuiltInTools(registry).
OpenAI adapter not initializing
OPENAI_API_KEY must be set when any agent uses provider: 'openai'. The framework initializes the adapter lazily but will throw if the key is missing at first use.
Type errors with defineTool
Ensure zod is installed as a direct dependency (npm install zod) — the framework uses Zod for schema validation but doesn't re-export it.
FAQ
What does the open-multi-agent-orchestration skill do?
Expertise in using open-multi-agent, a TypeScript framework for building production-grade multi-agent AI teams with task scheduling, dependency graphs, and inter-agent communication.
How do I install open-multi-agent-orchestration?
Run npx skills add https://github.com/reason-machines/trending-skills --skill open-multi-agent-orchestration in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/open-multi-agent-orchestration/ (personal) or .claude/skills/open-multi-agent-orchestration/ (project).
Which AI agents can use open-multi-agent-orchestration?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is open-multi-agent-orchestration safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains open-multi-agent-orchestration?
It is published by reason-machines in reason-machines/trending-skills. It has 711 recorded installs.
More from reason-machines/trending-skills
openclaw-control-center
reason-machines/trending-skills
Local-first, security-first control center for OpenClaw agents — visibility dashboard with readonly defaults, token attribution, collaboration tracing, and safe write operations.
inkos-multi-agent-novel-writing
reason-machines/trending-skills
Multi-agent CLI system for autonomous novel writing, auditing, and revision with human review gates
claude-hud-statusline
reason-machines/trending-skills
A Claude Code plugin that displays a real-time HUD showing context usage, active tools, running agents, and todo progress in your terminal statusline.
understand-anything-knowledge-graph
reason-machines/trending-skills
Turn any codebase into an interactive knowledge graph using Claude Code skills — explore, search, and ask questions about any project visually.
agency-agents-ai-specialists
reason-machines/trending-skills
A collection of specialized AI agent personalities for Claude Code, Cursor, Aider, Windsurf, and other AI coding tools — covering engineering, design, marketing, sales, and more.
agent-browser-automation
reason-machines/trending-skills
Headless browser automation CLI for AI agents using native Rust binary with Chrome DevTools Protocol
Popular ai & agents skills
google-agents-cli-publish
google/agents-cli
This skill should be used when the user wants to "publish an agent", "publish my ADK agent", "register an agent with Gemini", "publish to Gemini" (formerly Gemini Enterprise), or needs guidance on the agents-cli publish gemini command. Also use when the user wants to "manage agents in Agent Registry", "list/update/delete registered agents", or "register an MCP server". Covers ADK vs A2A registration modes, programmatic and interactive usage, flag reference, auto-detection from deployment metadata, Agent Registry fleet management, and troubleshooting. Part of the agents-cli skills suite. Do NOT use for deployment (use google-agents-cli-deploy).
google-agents-cli-eval
google/agents-cli
This skill should be used when the user wants to "run an evaluation", "evaluate my agent", "evaluate my ADK agent", "write an eval dataset", "analyze eval failures", "compare eval results", "optimize agent", or needs guidance on the Gemini platform eval methodology and the Quality Flywheel. Covers eval metrics, dataset schema, LLM-as-judge scoring, and common failure causes. Applies to any agents-cli project, whatever framework the agent is written in. Do NOT use for agent API code patterns (ADK: use google-agents-cli-adk-code), deployment (use google-agents-cli-deploy), or project scaffolding (use google-agents-cli-scaffold).
skill-creator
anthropics/skills
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
codex-pet
prime-skills/runcomfy-agent-skills
Codex Pet generator on RunComfy. Build a Codex-compatible Codex Pet spritesheet.webp + pet.json from a single reference image, drop it into ${CODEXHOME:-$HOME/.codex}/pets/ / and Codex picks it up as a custom Codex Pet next to the 8 built-ins. This skill produces the exact Codex Pet atlas Codex expects (1536x1872 PNG/WebP, 8 cols x 9 rows, 192x208 cells, 9 animation states — idle, running-right, running-left, waving, jumping, failed, waiting, running, review). Calls OpenAI GPT Image 2 edit ONCE via the local RunComfy CLI as runcomfy run openai/gpt-image-2/edit to produce a canonical Codex Pet pose, then assembles all 9 animation rows programmatically with ImageMagick micro-transforms — no Codex Pro, no $imagegen, no OPENAIAPIKEY required, only RUNCOMFYTOKEN. Triggers on "codex pet", "create codex pet", "make codex pet", "hatch codex pet", "/hatch image", "desktop pet codex", "codex pets", "spritesheet.webp", or any explicit ask to build a custom pet for OpenAI Codex.
full-output-enforcement
leonxlnx/taste-skill
Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output.
executing-plans
obra/superpowers
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available