文件最后提交记录最后更新时间
deps: updated lockfile and tooling config for dependency management - Updated package-manager config to use the hoisted linker and relaxed the @types/bun version range. - Regenerated bun.lock with updated dependency pins, including postcss, safe-buffer, and string_decoder, plus added jszip nested lock entries. - Updated the check:tools script to run biome checks without the removed tsgo typecheck step. 1 个月前
feat(swarm-extension): moved sources to src and added omp-swarm bin 3 个月前
docs: fix stale links and add missing CHANGELOGs - Fix typo "stauts" → "status" in stream.test.ts comment - Update frontmatter.ts link to packages/utils/src/ (moved from coding-agent) - Update notebook.ts link to src/edit/ (moved from src/tools/) - Mark removed bash-normalize.ts in docs and update description - Add CHANGELOG.md for swarm-extension and utils packages Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> 4 天前
add(swarm-extension): support per-agent model overrides (#184) 3 个月前
chore: bump version to 15.7.4 1 天前
refactor: restructured monorepo TypeScript config and build tasks for unified setup - Migrated all package tsconfig files to extend tsconfig.workspace.json for unified TypeScript configuration across monorepo. - Consolidated build and check scripts across 10+ packages to use biome for linting/formatting with separate type checking via tsgo. - Renamed build scripts from build:native and build:binary to build for simplified command naming across packages/natives and packages/coding-agent. - Refactored CI workflow to invoke bun tasks instead of inline shell scripts, reducing workflow complexity by 40+ lines. - Removed sync-exports.ts and repro-stuck.ts scripts; deleted path aliases from tsconfig.base.json in favor of workspace-based configuration. - Updated turbo.json with new task definitions (check:types, lint, fmt, fix) and removed build:native/embed:native tasks. 1 个月前
README.md

Swarm Extension

Multi-agent orchestration for oh-my-pi. Define agent workflows in YAML — pipelines, parallel fan-outs, sequential chains, or any DAG — and run them unattended until completion.

Each agent is a full oh-my-pi subagent with access to every tool: bash, python, read, write, edit, grep, find, fetch, web_search, browser. The orchestrator manages lifecycle and ordering; agents communicate through the shared workspace filesystem.

Use it for anything: research pipelines, code generation, data processing, content creation, analysis workflows, CI-like automation — any multi-step task that benefits from specialized agents working in coordination.

Setup

cd packages/swarm-extension
bun install

Running

# Foreground — runs until complete, no timeout:
omp-swarm path/to/swarm.yaml

# Background — survives terminal close:
nohup omp-swarm path/to/swarm.yaml \
  > pipeline.log 2>&1 & disown

The standalone runner has no timeout. It runs iteration after iteration until the pipeline finishes or you kill it.

Inside oh-my-pi (TUI)

Register the extension in your config (~/.omp/config.json or .omp/config.json):

{
	"extensions": ["packages/swarm-extension"]
}

Then:

/swarm run path/to/swarm.yaml
/swarm status <name>
/swarm help

Monitoring

State persists to <workspace>/.swarm_<name>/ while the pipeline runs:

.swarm_<name>/
  state/pipeline.json    # Live pipeline + per-agent status
  logs/orchestrator.log  # Wave transitions, iteration progress
  logs/<agent>.log       # Per-agent timestamps and errors
  context/               # Agent session artifacts

Check on a running pipeline:

# Quick status
cat workspace/.swarm_mypipeline/state/pipeline.json | python -m json.tool

# Watch the orchestrator log
tail -f workspace/.swarm_mypipeline/logs/orchestrator.log

YAML Reference

Every swarm is a single YAML file with a top-level swarm key:

swarm:
  name: my-pipeline # Identifier (state stored in .swarm_<name>/)
  workspace: ./workspace # Working directory (relative to YAML file location)
  mode: pipeline # pipeline | parallel | sequential
  target_count: 10 # Iterations (pipeline mode only, default: 1)
  model: claude-opus-4-6 # Default model for agents without an override (optional)

  agents:
    first_agent:
      role: short-role-name
      task: |
        Full instructions for this agent.
      extra_context: |
        Optional additional system prompt text.
      reports_to:
        - downstream_agent
      waits_for:
        - upstream_agent
      model: claude-sonnet-4-5 # Optional per-agent override

Top-Level Fields

Field Required Default Description
name yes Pipeline identifier. State directory is .swarm_<name>/
workspace yes Shared working directory. Relative paths resolve from YAML file location
mode no sequential Execution mode (see below)
target_count no 1 How many times to repeat the full pipeline. Only meaningful in pipeline mode
model no session default Default model for agents that do not set agents.<name>.model

Agent Fields

Field Required Description
role yes Short role identifier — becomes the agent's system prompt
task yes Complete instructions sent as user prompt. Use YAML | for multi-line
extra_context no Additional text appended to system prompt
model no Model override for this agent only
reports_to no List of agent names that depend on this agent
waits_for no List of agent names this agent depends on

Execution Modes

pipeline — Repeat the full agent graph target_count times. Each iteration runs all waves in order. Use for accumulative work: "find 50 things, one per iteration."

sequential — Run agents once, chained by declaration order (unless explicit dependencies override). The default mode.

parallel — Run all agents simultaneously (unless explicit dependencies impose ordering).

Dependency Resolution

The orchestrator builds a DAG from waits_for and reports_to, then groups agents into waves using topological sort. Agents in the same wave run in parallel; waves execute in sequence.

  • waits_for: [a, b] — this agent won't start until both a and b finish
  • reports_to: [x] — equivalent to x having waits_for: [this_agent]
  • No explicit deps + pipeline/sequential mode — agents chain by YAML declaration order
  • No explicit deps + parallel mode — all agents run in one wave
  • Cycles are detected and rejected before execution

Patterns

Pipeline: Iterative Accumulation

Run the same agent chain N times. Each iteration builds on the previous one's output. Good for: research collection, data gathering, batch processing, iterative refinement.

swarm:
  name: research-collector
  workspace: ./workspace
  mode: pipeline
  target_count: 25
  model: claude-opus-4-6

  agents:
    finder:
      role: researcher
      task: |
        Find ONE new source on the topic defined in workspace/topic.md.

        1. Read processed.txt to see what's already been found
        2. Use web_search to find a new, high-quality source
        3. Append the URL to processed.txt
        4. Write the URL to signals/finder_out.txt: FOUND:<url>

    analyzer:
      role: analyst
      task: |
        Read signals/finder_out.txt for the URL.
        Fetch the page and extract key findings.
        Read tracking/count.txt, increment it, write back.
        Write analysis to analyzed/item_<N>.md
        Write to signals/analyzer_out.txt: DONE:<N>

    compiler:
      role: technical-writer
      task: |
        Read signals/analyzer_out.txt for the item number.
        Read analyzed/item_<N>.md.
        Append a summary to output/report.md under a new section.

After 25 iterations: 25 sources found, analyzed, and compiled into a single report.

Fan-In: Parallel Specialists

Multiple agents work independently, one synthesizer combines results. Good for: multi-perspective analysis, parallel code review, comprehensive audits.

swarm:
  name: codebase-audit
  workspace: ./workspace

  agents:
    security:
      role: security-auditor
      task: |
        Audit all code in src/ for security vulnerabilities.
        Write findings to reports/security.md with severity ratings.
      reports_to:
        - lead

    performance:
      role: performance-analyst
      task: |
        Profile and analyze src/ for performance bottlenecks.
        Write findings to reports/performance.md with benchmarks.
      reports_to:
        - lead

    architecture:
      role: architecture-reviewer
      task: |
        Review src/ for architectural issues, coupling, and tech debt.
        Write findings to reports/architecture.md with refactoring suggestions.
      reports_to:
        - lead

    lead:
      role: engineering-lead
      task: |
        Read all reports in reports/.
        Create a prioritized action plan in output/action_plan.md.
        Rank issues by impact and effort.
      waits_for:
        - security
        - performance
        - architecture

Execution: security + performance + architecture run in parallel (wave 1), lead starts after all three complete (wave 2).

Sequential Chain: Staged Handoff

Linear progression through distinct phases. Good for: content pipelines, multi-stage processing, review chains.

swarm:
  name: blog-post
  workspace: ./workspace
  mode: sequential

  agents:
    researcher:
      role: researcher
      task: |
        Research the topic in topic.md using web_search.
        Write raw findings and source links to research/notes.md

    writer:
      role: technical-writer
      task: |
        Read research/notes.md.
        Write a complete blog post draft to drafts/post.md.
        Include code examples where relevant.

    editor:
      role: editor
      task: |
        Read drafts/post.md.
        Fix grammar, improve flow, tighten prose.
        Rewrite to drafts/post.md.

    reviewer:
      role: senior-reviewer
      task: |
        Read drafts/post.md.
        Check technical accuracy against research/notes.md.
        Add an editorial note at top if issues found, otherwise
        copy to output/final.md.

Execution: researcher -> writer -> editor -> reviewer, one after another.

Diamond: Fan-Out Then Fan-In

One planner, parallel workers, one integrator. Good for: divide-and-conquer, modular code generation, multi-file refactors.

swarm:
  name: feature-implementation
  workspace: ./workspace

  agents:
    planner:
      role: architect
      task: |
        Read the feature spec in spec.md.
        Break it into independent implementation tasks.
        Write the plan to plan.md with file assignments.
      reports_to:
        - api
        - ui
        - tests

    api:
      role: backend-developer
      task: |
        Read plan.md for your assigned files.
        Implement the API layer. Write to src/api/.
      reports_to:
        - integrator

    ui:
      role: frontend-developer
      task: |
        Read plan.md for your assigned files.
        Implement the UI components. Write to src/ui/.
      reports_to:
        - integrator

    tests:
      role: test-engineer
      task: |
        Read plan.md for the full feature scope.
        Write integration tests to tests/.
      reports_to:
        - integrator

    integrator:
      role: tech-lead
      task: |
        Read plan.md and review all code in src/ and tests/.
        Wire everything together. Fix any integration issues.
        Run the tests and fix failures.
        Write status to output/done.md.

Execution: planner (wave 1) -> api + ui + tests in parallel (wave 2) -> integrator (wave 3).

Hybrid: Mixed Dependencies

Any DAG is valid. Combine patterns freely.

swarm:
  name: data-pipeline
  workspace: ./workspace
  mode: pipeline
  target_count: 10

  agents:
    scraper_a:
      role: web-scraper
      task: |
        Scrape data source A. Write to raw/source_a.json
      reports_to:
        - transformer

    scraper_b:
      role: web-scraper
      task: |
        Scrape data source B. Write to raw/source_b.json
      reports_to:
        - transformer

    transformer:
      role: data-engineer
      task: |
        Read raw/source_a.json and raw/source_b.json.
        Clean, normalize, merge. Write to processed/merged.json
      reports_to:
        - loader
        - validator

    validator:
      role: qa-analyst
      task: |
        Read processed/merged.json.
        Validate schema, check for anomalies.
        Write report to qa/validation.md

    loader:
      role: data-engineer
      task: |
        Read processed/merged.json.
        Append to output/dataset.jsonl

Execution per iteration: scraper_a + scraper_b (wave 1) -> transformer (wave 2) -> loader + validator (wave 3).


Writing Agent Tasks

What Agents Can Do

Each agent is a full oh-my-pi session. It can:

  • bash/python: Run commands, scripts, install packages, process data
  • read/write/edit: Create and modify files in the workspace
  • grep/find: Search the workspace (or anywhere on disk)
  • web_search: Search the internet (via configured provider)
  • fetch: Download web pages, APIs, documents
  • browser: Navigate websites, scrape dynamic content, take screenshots

Inter-Agent Communication

The orchestrator starts and stops agents in the right order. It does not pass data between them. Agents communicate through files in the shared workspace.

Design your own protocol. Common patterns:

Signal files — lightweight status flags an agent writes when done:

signals/finder_out.txt    -> "FOUND:https://example.com"
signals/analyzer_out.txt  -> "DONE:42"
signals/reviewer_out.txt  -> "APPROVED" or "REJECTED:reason"

Structured output — detailed results other agents read:

analyzed/item_1.md        -> Full analysis document
results/report.json       -> Machine-readable data
output/final.docx         -> Accumulated deliverable

Tracking files — prevent duplicate work across pipeline iterations:

processed.txt             -> Items already handled (one per line)
tracking/count.txt        -> Current item counter
tracking/status.json      -> Cumulative state

Tips for Reliable Agents

  • Be explicit about paths. Agents start fresh each iteration — they don't remember previous runs. Tell them exactly where to read input and write output.
  • Check existing state. In pipeline mode, tell agents to read tracking files before doing work: "Read processed.txt to avoid duplicates."
  • Use numbered outputs. item_1.md, item_2.md etc. so iterations don't clobber each other.
  • Handle failure. Tell agents what to do when things go wrong: "If the source lacks depth, write SKIP to signals/out.txt and explain why."
  • Keep signal files simple. One line, parseable format. Complex data goes in structured output files.
  • Scope the task tightly. An agent that tries to do five things will do zero well. One clear objective per agent.

Models

Any model configured in omp works. Set a swarm default and optionally override per agent:

swarm:
  model: claude-opus-4-6
  agents:
    writer:
      role: technical-writer
      task: |
        Write the draft.
    reviewer:
      role: reviewer
      model: claude-sonnet-4-5
      task: |
        Review the draft.

Precedence: agents.<name>.modelswarm.model → session default. Check packages/ai/src/models.json for available model IDs.


Architecture

src/extension.ts      TUI entry point (registers /swarm command)
src/cli.ts   Standalone runner (no TUI, no timeout)
src/swarm/
  schema.ts           YAML parsing + validation
  dag.ts              Dependency graph, cycle detection, topological sort
  executor.ts         Spawns agents via oh-my-pi's runSubprocess
  pipeline.ts         Iteration loop + wave controller
  state.ts            Filesystem state persistence
  render.ts           Progress display formatting