agent-ecosystem/docs/research/agent-spawn-packages.md
iliya fe90ac866d Add deep dive research documentation on AI agent orchestration and communication standards
- Introduced multiple markdown files covering agent spawn packages, inter-agent communication protocols, and multi-agent orchestration tools.
- Detailed analysis of official SDKs for CLI agents (Claude Code, Codex, Gemini) and their integration potential.
- Documented various competitor approaches to agent spawning and communication, highlighting strengths and weaknesses.
- Provided insights into best practices for implementing multi-provider support within Electron applications.

This comprehensive documentation aims to enhance understanding of the current AI agent ecosystem and serve as a resource for developers and stakeholders.
2026-03-27 17:51:49 +02:00

465 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Agent Spawn Packages — Deep Dive Research
**Дата:** 2026-03-25
**Цель:** Найти лучший способ программно запускать CLI-агентов (Claude Code, Codex, Gemini CLI) из Electron-приложения.
---
## TL;DR — Итоговая Рекомендация
У всех трёх главных CLI-агентов **теперь есть ОФИЦИАЛЬНЫЕ SDK** для программного запуска:
| Агент | SDK Пакет | Лицензия | Зрелость |
|-------|-----------|----------|----------|
| Claude Code | `@anthropic-ai/claude-agent-sdk` | **Proprietary** (Commercial ToS) | Stable (v0.2.83) |
| Codex | `@openai/codex-sdk` | **Apache-2.0** | Stable (v0.116.0) |
| Gemini CLI | `@google/gemini-cli-sdk` + `@google/gemini-cli-core` | **Apache-2.0** | Early (v0.30.0+) |
**Вывод:** Вместо форка `@swarmify/agents-mcp` или написания своих spawn-обёрток, лучше использовать **официальные SDK** от каждого провайдера. Они более надёжны, поддерживаются, и дают нативный доступ без хрупкого парсинга stdout.
---
## 1. @swarmify/agents-mcp
**npm:** https://www.npmjs.com/package/@swarmify/agents-mcp
**Сайт:** https://swarmify.co/
**GitHub:** НЕ НАЙДЕН (closed-source или приватный репозиторий)
### Что это
MCP-сервер, который позволяет любому MCP-клиенту (Claude, Codex, Gemini, Cursor) спавнить параллельных агентов. Часть экосистемы Swarmify.
### Предоставляет
- **4 MCP-тула:** Spawn, Status, Stop, Tasks
- **3 режима:** plan (read-only), edit (can write), ralph (autonomous)
- Фоновые процессы — агенты переживают перезапуск IDE
- Авто-детект Claude, Codex, Gemini CLI при установке
### Как спавнит агентов
Агенты коммуницируют через файловую систему — каждый агент пишет в свой лог-файл (stdout.log). Тул Status читает эти логи, нормализует события между разными форматами агентов, и возвращает сводку.
### IAgent / BaseAgent — НЕ НАЙДЕНЫ
Несмотря на множество поисков, интерфейсы `IAgent` и `BaseAgent` **не обнаружены** в публичной документации пакета. Возможно, они существуют внутри скомпилированного npm-пакета (можно проверить через `node_modules`), но исходный код закрыт.
### Оценка для нас
- **Надёжность: 3/10** — Closed-source, нет GitHub, невозможно форкнуть
- **Уверенность: 2/10** — Без исходного кода невозможно оценить качество
- **Вердикт:** НЕ подходит для нашего проекта
---
## 2. @anthropic-ai/claude-agent-sdk (OFFICIAL)
**npm:** https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk
**GitHub:** https://github.com/anthropics/claude-agent-sdk-typescript
**Docs:** https://platform.claude.com/docs/en/agent-sdk/typescript
**Версия:** 0.2.83 (25 марта 2026)
**Лицензия:** Proprietary (Anthropic Commercial Terms of Service)
**Звёзды:** ~1000 | **Форки:** ~117 | **Релизы:** 67
**691 проект** в npm registry используют этот пакет
### Что это
Официальный SDK от Anthropic для программного запуска Claude Code. Переименован из "Claude Code SDK" в "Claude Agent SDK". Даёт те же инструменты, agent loop и context management, что и Claude Code.
### Ключевой API
```typescript
import { query } from "@anthropic-ai/claude-agent-sdk";
// Основная функция — async generator
const q = query({
prompt: "Fix the bug in auth.py",
options: {
model: "opus",
cwd: "/path/to/project",
allowedTools: ["Read", "Edit", "Bash"],
permissionMode: "bypassPermissions",
allowDangerouslySkipPermissions: true,
maxTurns: 50,
maxBudgetUsd: 5.0,
env: { ANTHROPIC_API_KEY: "..." },
mcpServers: { /* MCP config */ },
agents: {
// Программно определяемые субагенты
reviewer: {
description: "Code reviewer agent",
prompt: "Review code for bugs",
model: "sonnet",
tools: ["Read", "Grep", "Glob"],
}
},
settingSources: ["project"], // Загрузка CLAUDE.md
thinking: { type: "adaptive" },
}
});
// Стриминг событий
for await (const message of q) {
// SDKMessage types: assistant, user, result, system, etc.
console.log(message);
}
// Query object methods:
// q.interrupt(), q.close(), q.setModel(), q.mcpServerStatus()
// q.initializationResult(), q.supportedModels(), q.supportedAgents()
```
### Как спавнит Claude Code
SDK **запускает Claude Code CLI как subprocess**НЕ чисто API-библиотека. Каждый вызов `query()` спавнит новый процесс (~12 сек overhead).
Ключевые опции:
- `spawnClaudeCodeProcess` — кастомная функция для запуска процесса (VMs, Docker, remote)
- `pathToClaudeCodeExecutable` — путь к бинарнику Claude Code
- `env` — переменные окружения для subprocess (полезно для Electron)
- `executable` — runtime: `'node'`, `'bun'`, `'deno'`
### Session Management
```typescript
import { listSessions, getSessionMessages } from "@anthropic-ai/claude-agent-sdk";
const sessions = await listSessions({ dir: "/path/to/project", limit: 10 });
const messages = await getSessionMessages(sessionId, { limit: 20 });
// Resume session
const q = query({
prompt: "Continue working",
options: { resume: sessionId }
});
```
### V2 Preview API (упрощённый интерфейс)
Новый API с `send()` и `stream()` паттернами для multi-turn conversations.
### Субагенты
Определяются программно через `agents` option в `AgentDefinition`:
```typescript
type AgentDefinition = {
description: string;
prompt: string;
tools?: string[];
disallowedTools?: string[];
model?: "sonnet" | "opus" | "haiku" | "inherit";
mcpServers?: AgentMcpServerSpec[];
skills?: string[];
maxTurns?: number;
};
```
### MCP-серверы
Поддерживает in-process MCP серверы:
```typescript
import { createSdkMcpServer, tool } from "@anthropic-ai/claude-agent-sdk";
import { z } from "zod";
const server = createSdkMcpServer({
name: "my-server",
tools: [
tool("search", "Search the web", { query: z.string() }, async ({ query }) => {
return { content: [{ type: "text", text: `Results for: ${query}` }] };
})
]
});
```
### Ограничения лицензии
- **Proprietary** — НЕ open-source
- Запрещено использовать OAuth токены Claude Free/Pro/Max — нужен **API key**
- Продукт должен иметь **собственный брендинг** (не Claude Code)
- Anthropic собирает telemetry (usage, feedback, conversations)
### Оценка для нас
- **Надёжность: 9/10** — Официальный SDK от Anthropic, активно развивается
- **Уверенность: 9/10** — Отлично документирован, 691+ пользователь
- **Риск:** Proprietary лицензия, ~12 сек overhead на query(), зависимость от CLI binary
---
## 3. @openai/codex-sdk (OFFICIAL)
**npm:** https://www.npmjs.com/package/@openai/codex-sdk
**GitHub:** https://github.com/openai/codex/tree/main/sdk/typescript
**Docs:** https://developers.openai.com/codex/sdk
**Версия:** 0.116.0
**Лицензия:** Apache-2.0
**107 проектов** в npm registry используют этот пакет
### Что это
Официальный TypeScript SDK от OpenAI для программного управления Codex CLI. Оборачивает CLI, обменивается JSONL-событиями через stdin/stdout.
### Ключевой API
```typescript
import { Codex } from "@openai/codex-sdk";
// Инициализация
const codex = new Codex({
env: { PATH: "/usr/local/bin" }, // Полезно для Electron
config: {
show_raw_agent_reasoning: true,
sandbox_workspace_write: { network_access: true }
},
baseUrl: "https://api.example.com" // Optional
});
// Thread management
const thread = codex.startThread({
workingDirectory: "/path/to/project",
skipGitRepoCheck: true // Для non-git environments
});
// Buffered response
const turn = await thread.run("Fix the test failure");
console.log(turn.finalResponse);
console.log(turn.items);
// Streaming response
const { events } = await thread.runStreamed("Diagnose failures");
for await (const event of events) {
switch (event.type) {
case "item.completed": console.log("Item:", event.item); break;
case "turn.completed": console.log("Usage:", event.usage); break;
}
}
// Multi-turn conversations
const turn1 = await thread.run("Diagnose issue");
const turn2 = await thread.run("Implement the fix");
// Resume persisted thread
const thread2 = codex.resumeThread(process.env.CODEX_THREAD_ID!);
```
### Как спавнит Codex CLI
SDK спавнит **Codex CLI** (Rust-based `@openai/codex`) как subprocess и обменивается JSONL-событиями через stdin/stdout.
- Работает **ТОЛЬКО** с Native (Rust) версией Codex
- SDK инжектит `CODEX_API_KEY` поверх переданных env variables
- `env` параметр — полный контроль над переменными (полезно для Electron)
- `config` — JSON → dotted paths → TOML literals → `--config key=value` flags
### Session Persistence
- Threads сохраняются в `~/.codex/sessions`
- `resumeThread(id)` — восстановление потерянного Thread
### Structured Output
```typescript
const schema = {
type: "object",
properties: {
summary: { type: "string" },
status: { type: "string", enum: ["ok", "action_required"] }
},
required: ["summary", "status"],
additionalProperties: false
} as const;
const turn = await thread.run("Summarize status", { outputSchema: schema });
```
### Multi-Agent Collaboration
Поддержка spawn_agent, send_input, wait для координации между threads.
### Оценка для нас
- **Надёжность: 9/10** — Официальный SDK от OpenAI, Apache-2.0
- **Уверенность: 8/10** — Хорошо документирован, активно развивается
- **Риск:** Только Rust-based Codex, зависимость от Git repo (опционально отключается)
---
## 4. @google/gemini-cli-sdk + @google/gemini-cli-core (OFFICIAL)
**npm (CLI):** https://www.npmjs.com/package/@google/gemini-cli
**npm (Core):** https://www.npmjs.com/package/@google/gemini-cli-core
**GitHub:** https://github.com/google-gemini/gemini-cli
**Docs:** https://deepwiki.com/google-gemini/gemini-cli/5.9-sdk-and-programmatic-api
**Версия:** SDK появился в v0.30.0 (2026-02-25)
**Лицензия:** Apache-2.0
**Звёзды:** ~99K
### Что это
Официальный SDK от Google для программного запуска Gemini CLI. Монорепо-архитектура.
### Архитектура пакетов
| Пакет | Роль |
|-------|------|
| `@google/gemini-cli-sdk` | Consumer-facing API |
| `@google/gemini-cli-core` | Core orchestration, tools, API |
| `@google/gemini-cli` | Terminal reference implementation |
### Ключевой API
```typescript
import { LocalAgentExecutor, LocalAgentDefinition } from '@google/gemini-cli-core';
const agentDef: LocalAgentDefinition = {
modelId: 'gemini-2.0-flash',
systemPrompt: 'You are a helpful assistant',
tools: ['read_file', 'write_file', 'run_shell_command'],
maxTurns: 30,
timeoutMs: 600000 // 10 min
};
const executor = new LocalAgentExecutor(config, agentDef);
// Activity monitoring
executor.onActivity((event) => {
console.log('Agent activity:', event);
});
const result = await executor.run({
task: 'Analyze the codebase and suggest improvements'
});
console.log('Termination mode:', result.terminateMode); // GOAL | MAX_TURNS | TIMEOUT
console.log('Result:', result.output);
```
### Как спавнит Gemini
В отличие от Claude и Codex, SDK Gemini — **НЕ CLI wrapper**, а **нативная библиотека**. Использует core-логику напрямую:
- `GeminiCliAgent` / `LocalAgentExecutor` — primary entity
- Каждый агент получает свой `ToolRegistry` (изоляция)
- `MessageBus` для async events (tool confirmations)
- `Config` class для model selection и auth
### Tool Management
- Built-in tools (file system, shell, web)
- MCP server tools
- Extension-provided tools
- Tool confirmation через `TOOL_CONFIRMATION_REQUEST` event
### Agent Termination
```typescript
enum AgentTerminateMode {
GOAL, // Успешно вызвал complete_task
MAX_TURNS, // Достиг лимита (default 30)
TIMEOUT // Превысил время (default 10 min)
}
```
### Headless Mode (альтернатива)
```bash
gemini --output-format json -p "Summarize project"
gemini --output-format stream-json -p "Fix bug"
```
### Зрелость
- SDK появился в v0.30.0 (2026-02-25) — **очень свежий**
- Feature request #15539 (Dec 2025) формально запрашивал SDK
- API может меняться
### Оценка для нас
- **Надёжность: 6/10** — Apache-2.0, открытый код, но SDK совсем новый
- **Уверенность: 6/10** — API может меняться, документация неполная
- **Преимущество:** Нативная библиотека (не CLI wrapper), лучшая производительность
---
## 5. Альтернативные Multi-Agent Frameworks
### jayminwest/overstory
**GitHub:** https://github.com/jayminwest/overstory
**Лицензия:** MIT
Pluggable `AgentRuntime` интерфейс с **11 адаптерами** (Claude Code, Codex, Gemini CLI, Aider, Goose, Amp и др). Агенты работают в изолированных git worktrees через tmux.
| Runtime | CLI | Guard Mechanism |
|---------|-----|-----------------|
| Claude Code | `claude` | `settings.local.json` hooks |
| Codex | `codex` | OS-level sandbox |
| Gemini | `gemini` | `--sandbox` flag |
| Aider | `aider` | None (`--yes-always`) |
| Goose | `goose` | Profile-based permissions |
| + 6 others | ... | ... |
**Интересно, но:** Ориентирован на CLI/tmux workflow, не на Electron SDK.
### desplega-ai/agent-swarm
**GitHub:** https://github.com/desplega-ai/agent-swarm
**Docs:** https://docs.agent-swarm.dev/
Lead-worker паттерн с Docker-изоляцией. Поддерживает Claude Code, с планами на Codex/Gemini. SQLite + bun.
---
## 6. Сравнительная Таблица SDK
| | Claude Agent SDK | Codex SDK | Gemini CLI SDK |
|---|---|---|---|
| **Пакет** | `@anthropic-ai/claude-agent-sdk` | `@openai/codex-sdk` | `@google/gemini-cli-sdk` |
| **Версия** | 0.2.83 | 0.116.0 | ~0.30.0+ |
| **Лицензия** | Proprietary | Apache-2.0 | Apache-2.0 |
| **Архитектура** | CLI subprocess | CLI subprocess (Rust) | Нативная библиотека |
| **Стриминг** | AsyncGenerator<SDKMessage> | AsyncGenerator (events) | onActivity callback |
| **Session Resume** | Да (sessionId) | Да (resumeThread) | Да (SessionContext) |
| **Субагенты** | Да (agents option) | Да (spawn_agent) | Да (LocalAgentDefinition) |
| **MCP серверы** | Да (in-process + external) | Нет (native tools only) | Да (ToolRegistry) |
| **Custom Env** | Да (env option) | Да (env option) | Да (Config) |
| **Custom Spawn** | Да (spawnClaudeCodeProcess) | Нет | Нет (нативная) |
| **Structured Output** | Да (JSON Schema) | Да (JSON Schema + Zod) | Да (zod OutputConfig) |
| **Node.js** | 18+ | 18+ | 18+ |
| **Overhead** | ~12s per query() | Не измерен | Минимальный (нативная) |
| **npm Users** | 691 | 107 | N/A (новый) |
---
## 7. Рекомендация для Claude Agent Teams UI
### Основной подход (Recommended)
**Использовать официальные SDK каждого провайдера** вместо единого абстрактного слоя.
```
src/main/services/agents/
├── types.ts # Общие типы (AgentProcess, AgentEvent, AgentConfig)
├── claude-adapter.ts # Обёртка над @anthropic-ai/claude-agent-sdk
├── codex-adapter.ts # Обёртка над @openai/codex-sdk
├── gemini-adapter.ts # Обёртка над @google/gemini-cli-sdk
└── agent-registry.ts # Реестр доступных агентов
```
Тонкий адаптерный слой (~100-150 LOC на адаптер) над каждым SDK, нормализующий:
- Стриминг событий → единый `AgentEvent` формат
- Session management → единый `AgentSession` интерфейс
- Process lifecycle → start/stop/status
### Почему НЕ @swarmify/agents-mcp
1. Closed-source — невозможно аудировать или форкнуть
2. MCP-only интерфейс — мы уже имеем прямой доступ к процессам
3. Filesystem-based communication — избыточный overhead для Electron
### Почему НЕ единый CLI spawn
1. Все 3 провайдера выпустили свои SDK
2. SDK дают типизированные события, session management, structured output
3. Raw CLI spawn хрупок (парсинг stdout/ANSI codes)
### Почему НЕ overstory AgentRuntime
1. Ориентирован на tmux/worktree workflow
2. MIT лицензия хорошая, но архитектура не подходит для Electron
3. 11 адаптеров — избыточно, нам нужны 3
### Порядок интеграции
1. **Claude Code** (`@anthropic-ai/claude-agent-sdk`) — у нас уже есть, нужно мигрировать на SDK
2. **Codex** (`@openai/codex-sdk`) — Apache-2.0, простой API, thread-based
3. **Gemini** (`@google/gemini-cli-sdk`) — подождать стабилизации API (SDK очень свежий)
### Риски
- **Claude SDK Proprietary лицензия** — нужно проверить совместимость с нашим MIT
- **~12s overhead** Claude SDK per query — может потребоваться process pooling
- **Gemini SDK API unstable** — может сломаться в любом релизе
---
## Источники
- [@swarmify/agents-mcp (npm)](https://www.npmjs.com/package/@swarmify/agents-mcp)
- [Swarmify](https://swarmify.co/)
- [@anthropic-ai/claude-agent-sdk (npm)](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk)
- [Claude Agent SDK TypeScript (GitHub)](https://github.com/anthropics/claude-agent-sdk-typescript)
- [Claude Agent SDK Reference](https://platform.claude.com/docs/en/agent-sdk/typescript)
- [Run Claude Code programmatically](https://code.claude.com/docs/en/headless)
- [@openai/codex-sdk (npm)](https://www.npmjs.com/package/@openai/codex-sdk)
- [Codex SDK TypeScript (GitHub)](https://github.com/openai/codex/tree/main/sdk/typescript)
- [Codex SDK Docs](https://developers.openai.com/codex/sdk)
- [@google/gemini-cli (GitHub)](https://github.com/google-gemini/gemini-cli)
- [Gemini CLI SDK (DeepWiki)](https://deepwiki.com/google-gemini/gemini-cli/5.9-sdk-and-programmatic-api)
- [Gemini CLI SDK Feature Request #15539](https://github.com/google-gemini/gemini-cli/issues/15539)
- [overstory (GitHub)](https://github.com/jayminwest/overstory)
- [agent-swarm (GitHub)](https://github.com/desplega-ai/agent-swarm)