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

    3

    +2 in 30 days

    Monthly installs

    40

    7 in 7 days

    Composite score

    37.6

    Multi-signal model

    Last commit

    16 days ago

    2026-09-18

    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
    

    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"
    

    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