Skip to content
    ↑↓ select↵ openesc close
    aditya0si

    Teamwork

    opencode-teamwork·v0.2.1·Agent Orchestration

    Antigravity-style Teamwork multi-agent orchestration for OpenCode — 10 agents, 6 patterns, 7 slash commands. Replica of Google Antigravity's /teamwork-preview.

    GitHub stars

    2

    +1 in 30 days

    Monthly installs

    35

    7 in 7 days

    Composite score

    35.6

    Multi-signal model

    Last commit

    7 days ago

    2026-10-13

    Install and configure

    opencode.json

    Writes to this project's opencode.json — applies to this repository only.

    opencode.json

    {
      "$schema": "https://opencode.ai/config.json",
      "plugin": ["opencode-teamwork@0.2.1"]
    }

    OpenCode loads npm dependencies through its embedded runtime on startup and caches them locally — no manual global install needed.

    Antigravity-style multi-agent orchestration for OpenCode. 10 agents, 6 topologies, 7 slash commands — and a run engine owned by code: append-only event log, topological dispatch, hashed verification evidence, budget enforcement.

    npm version License: MIT OpenCode plugin

    A community replica of Google Antigravity's /teamwork-preview, packaged as an OpenCode plugin.

    /teamwork "your hardest problem"
    

    The design rule is one line: the LLM proposes, the runtime disposes. Agents plan and implement. Dispatch order, retries, the budget, terminal states and the record of what happened belong to code, so a run survives a compaction, a model swap, or a restart — and a PASS means "a command ran and exited 0", not "a model felt good about it".

    Quick install

    bunx opencode-teamwork@latest install
    # or
    npx opencode-teamwork@latest install
    
    # install with a preset up front (see Presets below)
    npx opencode-teamwork@latest install --preset opencode-free
    

    Then run opencode and try:

    /teamwork-craft                                       # Phase 1: interactive spec wizard
    /teamwork "your hardest problem"                      # plan → dispatch → verify
    /teamwork --topology small-focused "rename x"         # flags are parsed in code
    /teamwork --topology long-proof --budget 30 "prove X"
    /teamwork --topology distributed-coding --concurrency 4 "migrate auth to JWT"
    

    Presets

    The installer ships 8 presets — opencode-free, opencode-go, opencode-zen, anthropic, team, google, openai, free — or custom for per-role model selection with live recommendations. Non-interactive installs (--yes, CI, or no TTY) default to opencode-free.

    Preset Cost Models Best for
    opencode-free Free opencode/hy3 (planning roles), opencode/mimo-v2.5 (coding roles), opencode/muse-spark-1.2-contributor (verifier, scout) zero-cost orchestration out of the box
    opencode-go $10/mo opencode-go/kimi-k3, opencode-go/deepseek-v4-pro, opencode-go/mimo-v2.5, opencode-go/qwen-3.8-coder, opencode-go/deepseek-v4-flash, opencode-go/grok-4.6 curated high-throughput models
    opencode-zen pay-as-you-go opencode/deepseek-v4-pro, opencode/deepseek-v4-flash, opencode/qwen-3.8-coder, opencode/mimo-v2.5, opencode/muse-spark-1.2-contributor curated gateway, pay per token
    anthropic API key Claude Sonnet 4.5 across all 10 roles full Claude reasoning
    team API key Opus 4.5 (sentinel, proof-worker, orchestrator, synthesizer) + Sonnet 4.5 (the rest) + Haiku 4.5 (scout) Opus coordinator + Sonnet workers
    google API key Gemini 3.1 Pro + Gemini 3 Flash matches Teamwork's research setup
    openai API key GPT-5.2 + GPT-5-mini GPT-5 power
    free Free openrouter/meta-llama/llama-3.3-70b-instruct:free (all roles) trying it out without spending credits

    What is enforced in code

    Every claim below is backed by a test. bun run verify runs all of them.

    Guarantee Mechanism Test
    Dispatch follows the DAG Engine.dispatchable() returns only tasks whose dependencies are COMPLETED, within the concurrency cap bun test — topological order + cap
    Cycles and dangling deps can't start a run validatePlan() rejects them before the first event is written bun test — plan validation
    The verifier cannot edit code permission.edit: deny injected as a real config key and a runtime guard that refuses write tools for read-only sessions plugin-integration — "verifier edit refused"
    A PASS must be evidence the engine refuses a report with no executed check, or a check marked failed with exitCode: 0 bun test + e2e — "rubric-only PASS rejected"
    Budget stops the run dispatchable() returns nothing at the cap; budget.exhausted is logged e2e — "dispatch stops once the cap is hit"
    One bad task doesn't poison the run maxRounds exhaustion dead-letters that task; the rest continue e2e — "3 of 4 completed, 1 parked"
    The record can't be rewritten events are hash-chained; teamwork_resume refuses a tampered log bun test + e2e — tamper detection
    Long runs survive compaction experimental.session.compacting re-injects plan, task states and budget from the log plugin-integration — "plan re-injected"
    Per-role models survive the plugin config is merged, not replaced plugin-integration — "verifier model preserved"
    An agent name can't escape the run dir assertAgentName + argv-based git calls (no shell) bun test — worktree safety

    Architecture

    /teamwork "…"
       │
       ├─ command.execute.before      ← flags parsed IN CODE, run id minted,
       │                                .opencode/teamwork/LATEST.json written
       │
       ├─ team/sentinel (primary)     ← picks a topology, calls the engine, merges
       │     │
       │     ├─ teamwork_plan         ← validate DAG, create run, write specs, worktrees
       │     ├─ teamwork_dispatch     ← "what runs now?" (topological + budget + cap)
       │     ├─ team/worker  ×N       ← one git worktree each, returns patch.diff + summary
       │     ├─ team/verifier ×N      ← runs the actual commands, records cmd+exitCode+hash
       │     ├─ teamwork_verify       ← engine rules: COMPLETED | retry | dead-letter
       │     ├─ teamwork_status       ← derived from the log, never from memory
       │     └─ teamwork_resume       ← chain-verified rebuild after a restart
       │
       └─ .opencode/teamwork/<run-id>/
            ├─ events.jsonl           ← append-only, hash-chained: the source of truth
            ├─ state.json             ← DERIVED snapshot (never hand-written)
            ├─ plan.dag.json          ← schema-validated
            ├─ spec-<taskId>.json     ← schema-validated, one per task
            ├─ request.md             ← the raw request + parsed flags
            ├─ worktrees/             ← one per agent
            └─ final.md               ← what the user reads
    

    Implementers are biased; that's the premise. The verifier sees the diff and the spec, never the worker's self-report, and its verdict only counts when it carries the exit code of something that actually ran.

    The 10 agents

    Agent Role Mode Can edit
    team/sentinel run coordinator, drives the engine primary yes
    team/crafter interactive spec elicitation primary ask
    team/orchestrator v1 propose/falsify loop primary yes
    team/worker implements one scoped spec in its own worktree subagent yes
    team/proof-worker same, for Lean/Coq/Isabelle proofs subagent yes
    team/verifier the forcing function subagent no
    team/falsifier attacks a candidate subagent no
    team/scout read-only context gathering subagent no
    team/proposer one candidate per invocation subagent ask
    team/synthesizer merges candidates + critiques subagent ask

    Leaf agents get task: deny — a worker cannot fan out its own swarm. Only the sentinel and the v1 orchestrator may invoke subagents.

    The 6 topologies

    Topology Shape Use when
    small-focused 1 builder + 1 reviewer loop one self-contained fix
    iterative-coding proposer + falsifier + verify a bug in a known place
    distributed-coding N workers in parallel + verifiers multi-module change, migration
    long-proof strategist + 3-5 searchers + formal checker math/TCS proof
    massive-proof-swarm meta-coordinator + 100+ searchers open conjecture (opt-in)
    document-review chair + 3 critics + aggregator paper / RFC / audit

    The definition files ship in dist/cli/templates/patterns/. The orchestrating agents' prompts carry an index of their absolute paths — the names in the prompt and the files on disk are generated from one source (src/policy.ts), so they cannot drift apart.

    When NOT to use this

    • A simple, well-scoped task ("rename this function", "add a log line"). The default build agent is faster.
    • Anything that fits in one context. Teamwork's overhead is real: you pay for 3-5 candidates where one would have worked.
    • Production deployment. This is for the exploration phase, not the ship phase.

    Cost control

    --budget 30 (USD) or a per-topology default. The engine sums recorded cost from the event log, warns at 80%, and refuses further dispatch at 100%. A run that hits the cap presents partial results and the dead-letter queue instead of retrying forever.

    Self-improving runs

    The event log is the prerequisite for improving the policy rather than the models: topologies, model ladders, required checks. The design — attribution, typed policy deltas, adversarial falsification of the hypothesis, shadow replay on a frozen benchmark, canary + rollback, and the escape-rate metric that keeps the loop honest — is in docs/self-improvement.md. Nothing in it ships yet; it is written down so it can be built against the log that now exists.

    Development

    git clone https://github.com/aditya0si/OpenCode-Team
    cd OpenCode-Team
    bun install
    bun run verify     # typecheck → unit tests → build → smoke → e2e → plugin integration
    
    Command What it proves
    bun run typecheck no type errors
    bun test scheduler, event log, report validation, config injection, guard, flags
    bun run e2e the whole loop against a real git repo: worktrees, evidence capture, budget, dead-letter, resume, cleanup
    bun run integration the built bundle with the hook shapes OpenCode sends: config, commands, tools, guard, compaction
    bun run smoke the installer: install / re-install / uninstall / doctor / dry-run

    Contributing

    Useful places to help:

    • New topologies (security audit, perf work, data migration) — add a pattern file and one entry in src/policy.ts.
    • A verification ladder (static → unit → property → integration) so cheap oracles run before the expensive one.
    • The learning loop in docs/self-improvement.md, starting with trace.jsonl export from the existing event log.

    See CONTRIBUTING.md.

    License

    MIT. See LICENSE.

    Similar plugins