OMP Tandem
OMP Tandem is an MCP server for delegating coding work, consultation, team runs, and version-bound reviews to an independent OMP peer with persistent project-isolated state.
Start and continue
think/analyze/worktasks, including preflight, model/thinking/profile/timeout settings, pinned project context, and clarification questions.Wait for completion or questions, reply to clarifications, cancel tasks, list recent tasks, and page full results.
Run bounded team workflows with 2–16 planned steps, model assignment, concurrency/conflict handling, status, cancellation, and paged reads.
Capture, read, assess, and compare immutable review bundles from worktree, staged index, or commit snapshots.
Run independent reviews with optional one comparison, manage review questions, and track findings, fixes, and correction sets.
Maintain durable shared task cards: plan, agree, claim, heartbeat, block/unblock, submit, accept/reject, pause/resume, reconcile, recover.
Publish and read immutable artifacts and page omitted product context/evidence.
Publish, retrieve, export, and import project product knowledge, rules, and decisions.
Use Jev for optional evidence audits and candidate recommendations; configure shadow routing/focus with explicit consent.
Hand off UI tests to an authorized desktop QA queue, inspect diagnostics/scope/profiles, and manage Claude channel delivery.
Gate result processing with receipts and inspect the inbox/overview for questions, results, and recovery needs.
Boundaries: it is not an OS sandbox; reports, advice, and completed work are not automatically accepted, applied, or authorized.
Integrates with Git for version-bound review bundles, staged/index snapshots, worktree comparisons, and shared task claims/submissions requiring a Git repository with an immutable HEAD commit.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OMP Tandem Ask OMP to independently challenge this design while I inspect the API constraints."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OMP Tandem
Give your coding agent an independent AI peer.
Consult, design, implement, and review together through Oh My Pi, with persistent conversations and project-isolated MCP tools.
Quick start · Jev assistance · Full guide · Releases · Contributing
Why OMP Tandem?
A second agent should do more than approve the first agent's work. OMP Tandem lets your coordinator ask for independent reasoning, explore alternatives, delegate a separate implementation slice, and compare findings against evidence.
Real OMP, your provider. Uses the official
omp_rpcclient andomp --mode rpc, not a substitute direct-API wrapper.Proportional planning. Independent assessment, one comparison, a concrete plan, then implementation and cross-checking—not a fresh whole-project audit for every local fix.
Persistent conversations. Continue a discussion while replacing the current goal and preserving its base constraints.
Scoped knowledge. Separate project histories, optional versioned product rules, and explicit cross-project sharing.
Honest results. Structured outcomes, questions with deadlines, and recoverable intermediate artifacts.
Version-bound reviews. Choose worktree or staged-only material, then use independent-first comparison, stale-result detection and finding history. Review workflow.
Bounded waiting and visible usage. Claude watchdog with polling fallback, explicit live diagnostics, and depth/budget settings separate from permissions. Profiles and usage.
Portable integration. Claude Code plugin, Agent Plugins package for Codex, and ordinary local stdio MCP for other hosts.
Optional Desktop QA handoff. Send UI tests to an already authorized desktop session; wait in server code and receive terminal events without model polling. Requires an external queue backend, not an autonomous GUI launcher. Setup and limits.
Optional Jev assistance. Report audits, candidate suggestions, shadow model routing and reversible context/tool/output focus. Explicit export approval; no automatic acceptance or model switching. Availability and setup.
No company-specific policies or hardcoded project paths are bundled.
Related MCP server: agentboost
Quick start
1. Install the prerequisites
Requires macOS/Linux, or WSL with Linux tools, plus uv and OMP on PATH.
With Homebrew:
brew install uv
brew install can1357/tap/omp
omp setupUse OMP's setup flow to authenticate your own supported provider and select a tool-capable model. The host agent has its own separate login. For Linux/standalone installation, API keys, OAuth, and local models, see the setup guide.
2. Install for your host
Claude Code
claude plugin marketplace add Flyozzzz/omp-tandem-public
claude plugin install omp-tandem@omp-tandemCodex CLI
codex plugin marketplace add Flyozzzz/omp-tandem-public
codex plugin add omp-tandem@omp-tandem --jsonStart a new session from your project's directory. Do not keep an old standalone registration enabled alongside the plugin. This repository is public; no invitation is required.
Python dependencies are prepared automatically in a private cache. OMP installation and provider authentication remain explicit user setup. Other clients can use the standard MCP configuration.
3. Check this project's setup
In Claude, run /omp-tandem:setup and ask for local diagnosis only. Confirm that Tandem is bound to your project, not the plugin/cache directory, and inspect runtime and delivery prerequisites. This does not call a model or prove provider authentication; a separate live diagnostic is optional and needs your approval.
4. Review your prepared commit
Stage the intended changes, then use /omp-tandem:tandem or ask in natural language:
Use OMP Tandem to review my prepared commit, using staged changes only. Use this task's requirements and acceptance criteria; ask me if they are missing. Do not edit files. Report correctness risks with evidence and identify missing context.
The agent uses tandem_review_run: a saved staged/index snapshot, one independent read-only assessment and at most one comparison with separately supplied author rationale. It does not edit files or run supplied test commands. Missing source context requires a fresh expanded snapshot, not live files added to an old review. Review details.
5. Give both agents one shared task
Use OMP Tandem to agree a shared task for this feature. Record the goal, constraints, acceptance criteria, module owners and distinct reviewers. Split independent modules, add a final integration step, and keep the checklist and blockers current. Do not launch unattended work until I grant its limits.
tandem_work exposes the same durable card to both participants, including a readable Markdown view. Work survives a conversation ending; a saved task is not a running agent. Existing-client work is manual; opt-in unattended execution uses a separate bounded controller, dedicated Claude/OMP attempts and isolated Git worktrees. Accepted results are not silently merged into your current branch. Shared-task workflow and operator commands.
Two entry paths
Staged review: independent assessment of a saved snapshot.
Shared development and operator grants: plan, ownership, exact submissions and distinct review. Claim/submit require the bound Git root with HEAD; task
cwdcannot repair that boundary. Unattended launches need explicit operator authorization. Shell is arbitrary execution, not a sandbox; reports are not acceptance.Migration and disabled helpers: no migration restarts work or retroactively makes a review independent.
Compact state and recovery
See compact views, runtime identity and recovery and operator blocker resolution. Hints and notifications grant no authority; resolving a blocker never resumes or authorizes work. Independent acceptance is separate from operator application and publication.
Latest published release: 3.21.1. Long tasks stop dying when OMP compacts context with the provider.
New in 3.21.1: OMP can compact a long conversation on the provider side and reports it as an auto_compaction_start event with the action remote. The pinned OMP RPC SDK accepted only context-full, handoff, shake and snapcompact, raised RpcError on the new value, and the worker exited right after the compaction was written, losing the work and leaving a held tandem_work step in recovery_required. The SDK pin moves to OMP 18.18.3, whose wire schema accepts remote, and a regression test now rejects any pin that does not. Tasks already failed this way are recovered through the usual operator path (pause, reconcile --resolution retry --confirm-stopped, resume).
New in 3.21.0: answers recorded on a blocker now reach the next implementation attempt. The briefing contained no blockers at all, and the card a worker reads lists only unresolved ones, so an operator's answer was stored and invisible on every route the worker took: in one measured card three consecutive attempts asked the same question and blocked, spending over $4 for no output. resolved_decisions delivers the question, the answer, its evidence and who gave it, for the attempt's own plan revision, attributed as a record and never as permission; an independent review stage still receives none of it. A heartbeat no longer increments the card's CAS revision or writes a history event, so revision_conflict stops being the normal outcome of a slow request and a long bounded wait stops waking with nothing to read. An attempt that stopped on a question it recorded now settles as a cooperative block even when the operator answered first, instead of falling into recovery_required. The unblock operator template carries the --operation-id the CLI requires, derived rather than random so a paged read does not stale its own cursor. The shell-grant refusal names the authority for the condition that actually refused, channel status no longer reads as though it could attest wake coverage, and who attested that an attempt stopped is recorded rather than always credited to the supervisor.
New in 3.20.0: tandem_review_run(action="start") takes request_file, a path inside the launch project holding the same ReviewRequest as JSON, with a required request_sha256; the contract is assembled by ordinary code and only its locator passes through the model. Measured on one 21-hour pipeline run, the request serialized to 102,598 characters of tool input, the coordinator spent 4m20s and 5m45s emitting it twice, and it had shortened its own requirements to a literal [cut: 20986 more characters] although the field accepts 200,000. Transport is not identity: the materialized request, the capture and every fingerprint match the inline form, and editing the file afterwards cannot change an accepted run. blocked_on now projects the clarifications an independent stage could not accept — stored text, requested_paths, requested_material and a parse_status — with its core and findings_counts protected from response compaction, so a partial result stops reading as though it produced nothing and names its own repair. A capture equivalent to an earlier run that ended still needing context is refused before any reviewer starts; any other equivalent one is allowed and only reports prior_equivalent_run, because identical bytes are not a cached verdict.
New in 3.19.0: WorkPlan.repository names the card's Git working tree as a directory relative to the launch project root; null is the launch root, which is what every card was before. A session opened at a parent directory can keep a card in a checkout below it — _repos/main-pipeline under a WBS root — without moving its data namespace, which is still bound by the client launch project. Owned files, declared-path observation, the pinned HEAD of a manual claim, submitted commits, review capture and apply --expected-head all follow that choice. It changes through the ordinary propose/activate path while the card is open, and is fixed permanently at the first claim or authorization; the lock never clears, and an older card with execution history counts as locked. This release supports the manual path only — claim, commit there, submit that hash, have the reviewer accept it, apply with the operator CLI; unattended authorization, managed worktrees, automatic capture, native dispatch and team execution of such a card are refused by name rather than half-done.
New in 3.18.0: a managed work grant already bounded itself with max_launches, but nothing bounded the other paths: a new task ID, a recapture without a declared corrective link, or an MCP restart each began again from zero. The automation ledger spends one admission per newly admitted unit — a review run with its capture, independent stage and any comparison; a native task; a team step; a managed attempt — and refuses the next when the grant is used up. Turning it on requires an explicit finite --max-admissions, with no default: one measured project spent 81 review runs in a week, so any shipped number would refuse honest work somewhere else. Exhaustion stops only new admissions; admitted work finishes and saves. Operator-only via work_daemon … budget, never reachable from a worker or MCP tool. It bounds this plugin's entry points, not arbitrary processes, and being default-off it does not by itself stop a spiral — it provides the mechanism.
New in 3.17.0: WorkPlan.project_context_id. TeamPlan has carried a pinned context for several releases; a shared plan could not, so an implementer received only free-text context. The ID must already exist in this project — no latest resolution, and an unknown ID is refused at create/propose before any work is admitted. An independent snapshot review never receives the binding, because require_review_context_capture refuses product context for an independent stage. Plans that pin nothing keep their stored operation receipts unchanged.
New in 3.16.0: rounds of discussion were already bounded ("after two rounds decide") while verification was bounded by nothing, so more checks always looked free and always looked safer. Coordinator instructions and the tandem skill now state that the declared ladder is the ceiling as well as the floor: a finding does not widen it by itself, mutation and fuzzing are a choice justified by a named risk rather than every task's ritual, and a fix round rechecks changed behaviour instead of everything. correction_round on a review run and its summary gives the depth of the declared correction chain. Only declared links count, so a recapture without corrective starts again at 1 — a low round is not proof of little rework, and a high one is not proof of waste.
New in 3.15.0: comparison_requested/comparison_skipped on review runs, so a comparison that was asked for and never ran is no longer reported as a plain one-stage success; and result.verification.plan_deviation, which reads the already-stored check runs the ladder assessment discards and names unmapped and repeated executions with the seconds actually recorded. Both are added fields over unchanged behaviour: they report, and refuse nothing.
Version 3.13.0 introduced long bounded waits, server-enforced handling of unanswered clarifications, operator cleanup of abandoned managed worktrees, and the opt-in whole-brief protocol. See the changelog. Updating the repository does not restart existing work or authorize new execution.
New in 3.14.0: bounded task/review readers, a reserved think-only coordination lane, current-evidence coverage for local/global shared-work requirements, durable pinned-brief decisions, a read-only recovery inbox and source-bound review-context suggestions. Reader/inbox/capacity contracts, work coverage, decision workflow. Stop incompatible MCP processes and back up state before upgrading to schema 2. Updating files does not replace a running server, restart work or grant authority; old compatibility reports remain historical.
Team mode
Ask the coordinator to split development, research or review into a team. tandem_team
runs 2–16 planned steps followed by a final integration step. Since 3.14.0,
three ordinary slots run work; the fourth is reserved for explicit read-only coordination.
It queues file conflicts, preserves partial results and cancels pending and active work
without replaying uncertain execution. Work stays in the live project; this is not a sandbox.
Assigned workers no longer wait for unrelated model choices. Read-only research can
opt its final think step into dependency_policy="reported_evidence" to summarize
structured partial evidence while retaining an overall partial outcome. Development
dependencies remain success-only. Status replies are bounded, with lossless paged recovery.
The model pool is only OMP-available openai-codex subscription models.
OpenRouter, ordinary OpenAI API and other providers are excluded. With an
OPENROUTER_API_KEY, Jev automatically advises on roles and model assignments;
that key is for Jev, not a source of worker models. Each assignment includes the
model and its supported thinking level; explicit choices win.
Without Jev or a confident choice, the coordinator consults its OMP peer and
submits an agreed assignment from the same eligible pool.
Disable Jev globally with --jev off / OMP_TANDEM_JEV=off, or use
plan.model_selection="coordinator" for a team that sends no summaries to Jev.
Auto classification exports the declared goal/title summaries and public model
facts, not source files, contract context or histories. Protocol and examples.
Optional Jev assistance and shadow routing
Jev is a separate, optional structured-decision service—not the model that performs
the coding task. Recommendation, shadow-routing and focus are new in 3.12.0
and absent from 3.11.0 and earlier. Inspect the loaded
runtime's tandem_scope capabilities before using them.
Capability | Purpose | Availability |
| Flag gaps between acceptance criteria and reported evidence | 3.11.0 and later |
| Suggest one caller-supplied skill or review direction before task creation | 3.12.0 and later |
| Compare a task-start model suggestion with the unchanged execution model | 3.12.0 and later, shadow-only |
| Rank optional context, defer permitted native tool schemas and retrieve exact focused excerpts | 3.12.0 and later |
Audits and recommendations support exact keyless previews. A runtime OpenRouter
key automatically enables recommendations unless disabled; --jev-recommend
remains an explicit enable switch. Report audits still require --jev-audit.
Recommendation sends additionally require the approved preview's matching hash.
Advice and confidence are not verified correctness or permission.
For shadow model routing:
The operator provides two or three exact models in a policy file through
--jev-routing-policy PATHorOMP_TANDEM_JEV_ROUTING_POLICY.Both the policy and the task's
execution.routingmust explicitly approve export of a short summary. No summary is inferred from prompts, files or history.Code checks the catalog, capabilities, declared context/output estimates and optional estimated cost ceiling. An isolated metadata-only probe keeps catalog stalls separate from the execution process.
Jev may suggest an eligible model,
none, orunclear. The task still uses its original model;tandem_result.execution.routingrecords the proposal, reason, routing time and separate Jev usage.
Explicit model choices, continuations, snapshot reviews and managed work bypass
the router. It never changes thinking, tools, roles, grants or acceptance. An
ordinary routing failure preserves the original selection; uncertain sends are
not retried. Missing OPENROUTER_API_KEY produces an explicit bypass.
Context/tool/output focus requires --jev-focus-policy PATH, approved data
classes and explicit execution.focus export consent for the current task.
Required context and permissions stay fixed; omitted material remains recoverable.
Focused readers return exact, nonexhaustive excerpts—not generated summaries.
This does not compact native history or select arbitrary outside-host tools.
Local RPC/HTTP and pinned-OMP checks verify the exercised boundaries. Small live synthetic Jev runs succeeded; general accuracy, speedups and cost savings are not established. Deferred schemas can shrink the first request while increasing the complete interaction. See the audit guide, candidate recommendations, shadow routing and focus configuration and measurements.
Plan changes and repository handover
See plan transitions for stop evidence, saved checkpoints, capture-failure acknowledgments and fresh authorization; repository handover for boundary diagnostics and explicit closure/provenance commands.
Only the operator drives transitions and execution reconciliation. Supervisor teardown proves process stop, not absence of external effects. Never replay uncertain effects. Cross-scope links transfer no access, agreements, grants or acceptance; review the exact result in its own scope before explicit application.
How it works
flowchart LR
A[Coding agent] <-->|MCP stdio| T[OMP Tandem]
T <-->|official omp_rpc| O[Oh My Pi]
O <--> M[Your configured model]
T <--> D[(Project data)]Mode | Use it for | Project access |
| Consultation and reasoning over supplied context | No project/shell tools; collaboration tools remain available |
| Investigation and review | Read/search/web search; no edits or shell |
| Explicitly authorized implementation | Edit/write/shell and related tools; not a sandbox |
New tasks create independent conversations. Follow-ups retain native OMP history but replace the current objective. Questions and intermediate artifacts keep uncertainty visible instead of turning missing information into assumed success.
Evidence, not a promise
In our real review case, the first attempt was blocked by missing context (80.558 s wall time). An expanded review found a real deadline/cancellation bug, but its 300 s total budget ended in a timeout after 331.723 s wall time. A focused recheck completed in 186.127 s wall time and identified a distinct shared-SQLite publication-lock risk, not yet runtime-verified in that episode. Completion is not proof of bug-free code; the case preserves failures and remaining uncertainty.
The publication-lock risk was then reproduced and fixed before release; the case separates that passing runtime follow-up from the original static report.
Compatibility checks use an actual pinned OMP binary and RPC SDK with a deterministic localhost provider in CI—no paid account is needed. Evidence applies to the exact tested combination, not a broad version range or every provider. The benchmark document is a comparative protocol only: no comparative results or superiority claim.
Boundaries that matter
Project data is bound to trusted client workspace information, never a task's model-supplied
cwd. Foreign IDs do not open another project's history.The package does not sandbox processes with your OS permissions. Host shell sandbox settings do not automatically constrain an external OMP process.
Reports are claims, not independent acceptance.
completeddoes not provesuccess.Optional hooks diagnose prerequisites and provide a bounded Claude watchdog; they never install tools, read provider credentials, approve permissions, or replace polling when unavailable.
Polling works without Channels. Claude push/webhooks are optional and remain subject to client and organization policy.
Local storage is not offline inference: configured providers receive task context.
Read the security policy before reporting a vulnerability. Never include credentials, private conversations, or runtime databases in issues or pull requests.
Documentation
Topic | Reference |
Installation, providers, and clients | |
Start Claude and the webhook with one short command | |
Tasks, modes, results, questions, and artifacts | |
Product rules and decisions | |
Workspace isolation and explicit sharing | |
All MCP tools and limits | |
Jev audits, candidate advice and shadow model routing | |
Local data upgrades and migration | |
Claude Channels, webhook protocol, and managed setups | |
Development and contributions |
Full guides are also available in Russian and Simplified Chinese.
Development
uv sync --frozen --group dev
uv run pytest -q
uv run --frozen ruff check .
uv run --frozen ruff format --check .
uv build --wheelpytest is a declared development dependency; uv installs the project package and its omp_rpc dependency into the same environment. Tests use temporary stores and local fault peers, not provider credentials. CI runs pytest, Ruff, wheel building, and distribution checks on Linux and macOS.
This repository begins with a reviewed snapshot of earlier private development. The 3.x version series preserves that lineage without importing its Git history. “Legacy history” refers to local OMP conversation data, not hidden Git commits.
License
MIT, copyright (c) 2026 Flyozzzz. Commercial use, modification, and redistribution are allowed with the copyright and permission notice retained. The software is provided AS IS, without warranty. Dependencies keep their own licenses.
Available Tools
28 toolstandem_auditA
Explicitly ask Jev about gaps in a completed task's reported evidence.
preview=true shows the exact bounded export without a key, network call or reservation. Sending requires operator opt-in and an OpenRouter key. expected_input_sha256 refuses changed input before sending. The request includes selected criteria, goal, report prose and check descriptions. No source files, commands, task context, artifact bodies or history are read for export; report prose itself may still contain sensitive information. Advice is not verification, acceptance, a finding or permission to act. Ordinary results and waiting never call Jev. Exact repeated pages reuse the saved attempt, including failures; changed/overlapping pages may incur cost. No automatic retry after a timeout, cancellation or unresolved attempt.
Inputs: task_id (required), limit, offset, preview, +1 more. Returns: object
tandem_cancelA
Stop a task, including while it waits for clarification. Does not undo edits.
Inputs: task_id (required). Returns: object
tandem_channelA
Manage optional Claude Code Channels push delivery; ordinary polling always remains available.
probe sends a receipt challenge only through the channel; ack with its probe_token confirms delivery. watchdog_token acknowledges an actual independent hook wake, never a tool-response assertion. ack with event_id acknowledges a webhook. pending lists unacknowledged events (include_previous explicitly includes earlier sessions). recover replays one event_id or a completed task_id; never changes task outcomes or reruns work. Token-file contents are secret.
Inputs: limit, action, task_id, event_id, +3 more. Returns: object
tandem_context_readB
Page omitted product data from this task's immutable pinned snapshot.
Follow capsule pointers rather than repeatedly loading the whole product. This does not select another context, read files, or grant execution rights. Independent review uses its pinned review reader instead. Focused view is optional, task-bound, nonexhaustive and export-consented; mixed/required context retains the raw view. Raw paging remains unchanged.
Inputs: task_id (required), view, pointer, max_bytes, +1 more. Returns: object
tandem_continueA
Start a NEW current goal after completion; supply exactly one of prompt or turn contract.
History/base policy/mode/cwd persist, but old goals/acceptance do not. The product snapshot stays pinned unless explicitly changed to another revision of the same project. Question timeout is inherited unless explicitly set here. For waiting_input use tandem_reply. continuation=fresh requires an explicit handoff and starts a new context without replaying native history or transferring claims/grants. The source remains intact. Use preflight=true to inspect the same admission without a model or worker.
Inputs: conversation_id (required), prompt, handoff, contract, +8 more. Returns: object
tandem_decisionA
Record and answer a pending clarification against an explicitly pinned brief.
Policy is opt-in. Prepare returns a read-only coordination consultation, never starts it. Record its source-backed basis before reply. Approval, scope, cost, irreversible effects and contradictions remain with the user. Source identity and quotes are checked, not semantic entailment. Independent review requires recapture, and expired questions cannot be answered.
Inputs: request (required). Returns: object
tandem_desktopA
Hand off live UI tests to an already authorized desktop client.
The operator configures the external desktop-qa queue; the bound project selects its scope. This tool neither launches a model nor grants GUI access. Submit uses a stable request_id. An available native GUI worker calls next with worker_id, a fresh claim_id and exact eligible apps; wait_seconds=null holds the MCP call until work arrives without model polling. Only execute=true authorizes the returned claim, within the user's existing test permissions. Repeated/lost claims never authorize replay. Finish requires its claim_token and a real passed/failed/blocked report. Cancel requires job_id and a nonblank reason and only retires queued work before execution; running and completed tests cannot be cancelled. Cancelled is an administrative record, not a GUI result. Get waits for the result by default; wait_seconds=0 peeks. Claude Channels can announce terminal results when confirmed. Host tool timeouts still apply; keep the desktop session open, do not promise auto-wake.
Inputs: request (required). Returns: Generic wrapper for non-object return types.
tandem_diagnoseA
Diagnose this client session's project, OMP execution, actual model and delivery.
live=true starts one short provider request and may incur a charge: use only for a user-requested live check. Default checks local state without contacting a provider. If still running, inspect the returned task_id instead of starting another check. A separate CLI process cannot certify this session's push receipt.
Inputs: live, task_id, wait_seconds, timeout_seconds, +1 more. Returns: object
tandem_export_contextA
Explicitly offer this project's selected rules and referenced evidence to one recipient.
Use only when the user intends cross-project sharing. No tasks/history are shared. The returned transfer_id is a private capability, not a public link. The recipient must separately call tandem_import_context in its own coordinator session. This grants no permissions.
Inputs: context_id (required), target_project_root (required). Returns: object
tandem_findingsA
Track version-bound review findings without rewriting their history.
Validity and resolution are separate. A claimed fix is not verified; verify_fixed needs evidence and a completed verification task for its snapshot. Update requires the current expected_revision. Get by stable finding_id or conversation_id plus human number. pin fixes the membership of a correction set for review_id once, so closure can be answered later; a live list cannot, because closing a finding removes it from the list. project reads what became of every pinned member of set_id, optionally against a target review. It records dispositions and decides nothing: a claimed fix is still unverified, and an accounted-for member is not a fix that holds.
Inputs: action (required), limit, change, number, +9 more. Returns: object
tandem_import_contextA
Explicitly accept a product snapshot offered to this launch project.
Only recipient-bound exports can be imported; no foreign database is browsed. Creates fresh local context/evidence IDs, preserving source provenance, not granting approval. Existing product revisions require expected_revision. Retrying one transfer is idempotent.
Inputs: transfer_id (required), expected_revision. Returns: object
tandem_listA
List recent task/conversation IDs, statuses, outcomes and next actions without large bodies.
Inputs: limit. Returns: Generic wrapper for non-object return types.
tandem_overviewB
Read this project's paged inbox of questions, results and recovery needs.
Follow exact reader descriptors for complete evidence. This observation never acquires a claim, grants permission, reconciles or restarts execution.
Inputs: limit, cursor. Returns: object
tandem_project_contextA
Coordinator-only product knowledge: source-backed rules, examples and settled decisions.
publish creates an immutable snapshot; updating a project requires its current expected_revision. get uses an exact context_id; list optionally filters project_id. Pass context_id to tandem_start/continue explicitly. Publishing never changes active tasks. Workers may propose changes in their answer but do not get this publishing tool. Do not approve invented rules.
Inputs: action (required), limit, context, context_id, +2 more. Returns: object
tandem_publish_artifactA
Publish immutable shared context; each same-name publication creates a new version.
Return artifact_id to the partner in a follow-up or contract.artifact_ids. Content max 4MiB UTF8. Logical names are not filesystem paths; no file is read or modified by this tool.
Inputs: name (required), content (required), conversation_id (required), media_type. Returns: name, sha256, created, task_id, +6 more
tandem_read_artifactA
Read an immutable artifact version shared by the coordinator and OMP; page using next_offset.
Offsets count Unicode characters; limit 1..50000. IDs never resolve arbitrary local files.
Inputs: artifact_id (required), limit, offset. Returns: object
tandem_read_resultB
Recover a complete task or review section through digest-bound UTF-8 pages.
Follow the returned next_request unchanged and concatenate content before decoding a JSON section. A stale digest requires a new read, never combining pages from different observations. Reads do not rerun, accept or apply work.
Inputs: target (required), section (required), identifier (required), max_bytes, +2 more. Returns: object
tandem_receiptB
Gate result processing separately from reading/acknowledging notification events.
Claim before applying a terminal result; only an authorized fresh claim may proceed. Complete with its token after handling. Duplicate reads do not authorize repeated effects. A stranded claim is uncertain, never automatically released: reconcile external state. Claims grant no filesystem/external permissions. External effects still need their own idempotency/transaction boundary.
Inputs: task_id (required), token, action. Returns: object
tandem_recommendA
Suggest one skill or review direction from an explicit small candidate list.
Coordinator-only advisory operation, available before any task exists. No skill discovery, file/context/history reads, launches or permission changes. Preview is the default: exact bounded payload without a key or provider call. Sending needs separate recommendation enablement, an OpenRouter key, preview=false and the approved preview's matching expected_input_sha256. The hash binds input; it does not establish human approval. Supplied goal and candidate descriptions may contain secrets; this is not redaction. Send retains the exact request and result/failure in this project's journal. Exact duplicates reuse the attempt; uncertainty never authorizes replay. Candidate, none and unclear are distinct from provider/protocol failure. Advice and confidence never authorize execution or alter required checks. Do not inject this advice into an independent snapshot-review stage.
Inputs: request (required), preview, expected_input_sha256. Returns: object
tandem_replyA
Answer exactly the pending clarification, resuming the same worker. Expired/stale IDs fail.
Duplicate identical answers are idempotent; different second answers are rejected.
Inputs: answer (required), task_id (required), question_id (required). Returns: object
tandem_resultA
Wait for the actual answer or a question, with a bounded response.
Default: one bounded wait up to 1200 seconds. Questions and completion return earlier. Use wait_seconds=0 for one observation, or wait_mode="auto" while doing complementary work. A client's background handoff is not a failed launch: retain that handle rather than starting another wait or worker. Completion is not acceptance. details=true adds bounded report metadata; follow readers/next_request for complete answer, report and contract.
Inputs: task_id (required), details, wait_mode, wait_seconds. Returns: object
tandem_reviewA
Capture or read an immutable review bundle, or compare it with current selected files.
request.source selects base-to-worktree (default) or base-to-staged Git index material. Staged captures exclude unstaged/untracked content; source also governs applicability checks. Capture includes requirements, supplied checks and boundaries without executing tests. Bind review_id to a think task for snapshot-only review. Author rationale is withheld unless explicitly revealed in a comparison turn. Read pages by next_offset, not the live working directory. assess reports applicability at observation time, not whole-system correctness. prepare classifies the same request without saving anything: it reports every repairable selection conflict at once and proposes the corrected paths, which the caller decides whether to apply. It reserves nothing, so capture classifies the files again and a repaired request is a new request, not a retry.
Inputs: action (required), path, limit, offset, +4 more. Returns: object
tandem_review_runA
Run one read-only review scenario without manually coordinating its native turns.
start: supply a stable request_key and exactly one of request or request_file. A request_file is a project-relative path to the same ReviewRequest written as JSON by ordinary code, with request_sha256 of its raw bytes; it is read once, verified and frozen, so the contract never has to be retyped into this call and the file may change afterwards without affecting the accepted run. Reusing the key returns the same run; a different payload conflicts. Code captures the snapshot, runs independent think review, then at most one comparison if author material was supplied and the independent report succeeded. Total budget defaults to 600 seconds, including startup, both stages and questions. It never edits files or runs supplied test commands. status/reply/cancel: use the returned run_id, never start again to wait. Replies require the current question_id. Full stage answers, findings, applicability and peer-only usage are assembled by code. Claims are not automatically accepted or applied. Missing context needs an explicit new capture (context_paths), not hidden live reads: read blocked_on of the terminal result for what was requested. A capture equivalent to an earlier run that ended still needing context is refused before any reviewer starts, because the same inputs cannot supply it; other equivalents only report prior_equivalent_run.
Inputs: action (required), answer, run_id, compare, +8 more. Returns: object
tandem_scopeA
Inspect the immutable project boundary and available computation profile defaults.
Separate launch folders have separate data even with one user-wide MCP registration. Additional client-granted directories permit working there, not reading their MCP history. This is data isolation, not an OS filesystem sandbox. execution_profiles describes defaults, not effective/actual settings after overrides; deep means more time, not higher thinking.
Inputs: no named parameters. Returns: object
tandem_startA
Start a task with exactly one of prompt or structured contract. Returns immediately.
Base constraints/owned files stay fixed; each follow-up has a new goal and criteria. project_context_id pins product rules/decisions. Only the coordinator sets question timeout. Think: collaboration; analyze: read/search; work: edits/shell, NOT sandboxed. Use preflight=true to inspect admission without launching a worker. Structured requirements declare exact entry/boundary paths and shell/write needs; verification declares the agreed check ladder, never permission to execute it.
Inputs: cwd (required), mode, prompt, contract, +7 more. Returns: object
tandem_teamB
Run a bounded team for development, research, analysis or review.
models reads only OMP-available openai-codex subscription models, excluding OpenRouter, ordinary OpenAI API and other providers, without a model turn. start requires a stable request_key and a complete plan with one final integration step. Independent steps run concurrently; declared file conflicts serialize. Work requires plan.allow_work; this is a live workspace, NOT an OS sandbox. The whole run owns one deadline and stops with its MCP owner, not detached. Auto selection uses Jev when configured, exporting goal/title summaries and public model facts only. Choose a model/thinking pair per step; explicit model and thinking choices win. Unassigned actionable steps are returned as pending_models, even while assigned workers run. Read selection for frozen eligible pairs, consult the OMP partner, compare once, then assign exactly every current pending step's model, thinking and reason. Never ask the user to route routine subtasks or invent model/reasoning availability. status observes the same run; never start again to wait. Worker questions use tandem_reply(task_id, question_id, answer). Cancel stops pending and active steps. Partial evidence unlocks only an explicitly opted-in read-only final synthesis. Completed reports are claims, not independent acceptance. Every response is bounded, including details. Follow readers for complete plan, selection, run errors, questions and structured results. read returns digest-bound UTF-8 byte pages; send next_request unchanged. models returns UTF-8 catalog pages from one immutable metadata observation; cursor pages never probe again. list has complete cursor continuation over run metadata.
Inputs: action (required), plan, limit, cursor, +10 more. Returns: object
tandem_waitA
Wait for ANY selected task to finish or ask a question, not for each in turn.
Like tandem_result, this defaults to a long bounded wait: the first task to finish or ask returns it. Pass wait_seconds=0 to peek at which tasks are already ready, and wait_mode="auto" when you have complementary work.
wait_seconds: 0..1200, served in full by the server; a client may stop holding the call in the foreground first; if it says it moved the request to a background task, read that result. wait_mode works as in tandem_result: "auto" also returns once event delivery covers every pending task, "bounded" waits for one of them to become ready. Returns ready IDs/questions, not full answers. Read ready terminal results with tandem_result and remove them from later wait sets; reply directly to a returned question. Does not acknowledge terminal events or rerun work. Await events only with a live independent watchdog.
Inputs: task_ids (required), wait_mode, wait_seconds. Returns: object
tandem_workB
Maintain one durable shared task and its role-bound checklist.
To create, send action="create", expected_revision=0, a unique operation_id, and plan; omit work_id. The plan must have one final integration step that depends directly or transitively on every other step, including investigations. For later mutations, get the card first and use its current revision as expected_revision. Use a new operation_id for a new or corrected request; reuse an ID only for an exact retry. list/get/history need no operation_id. Plan agreement, worker submission and independent acceptance are separate. Progress defaults to a bounded summary. Follow returned section/cursor pointers for omitted material; choose plan/step/full only when needed. Waiting observes committed changes, not permission to start an agent. Give after_revision the revision you last read: a card already past it returns at once instead of waiting for the next change. It is an observation baseline, never expected_revision, a claim, or permission to replay work. Autonomous grants and uncertain-attempt reconciliation are operator CLI actions.
Inputs: request (required), view, limit, cursor, +5 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
The tools cover distinct workflow modes, but several boundaries are easy to confuse: start/continue/team/review_run/desktop all initiate work, while result/wait/read_result/overview/read_artifact all observe or retrieve output. tandem_decision vs tandem_reply and tandem_review vs tandem_review_run add further overlap. The detailed descriptions help, but agents must carefully choose among similar coordination surfaces.
All names use a consistent tandem_ prefix and snake_case, which makes the set readable. However, conventions are mixed: some names are verb-first (read_artifact, publish_artifact, export_context), others are noun-first (context_read, review_run, project_context), and several are bare resource names (team, desktop, scope, receipt, findings). The pattern is recognizable but not consistently verb_noun.
With 28 tools, the surface is heavy for an MCP server and exceeds the manageable range even for a complex orchestration product. Many distinct workflows justify breadth, but the count increases selection burden and makes overlapping observation, review, and context tools harder to navigate.
The server covers a broad lifecycle: task start/continue/cancel, waiting/replies/results, review capture and findings, project context, artifacts, team/desktop workflows, notifications, diagnostics, and receipt gating. Gaps are minor, such as artifact discovery/listing and the fact that some grant/reconciliation operations are intentionally CLI-only. Overall it is a fairly complete coordination surface for the stated domain.
Maintenance
Related MCP Connectors
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Coordinate coding agents through MCP using existing AI plans, saved work, and independent checks.
Team memory for AI coding agents and code reviews, reviewed by humans and served over MCP.
The project brain for AI coding agents — memory, decisions, sprints, knowledge base via MCP.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides MCP tools for AI-powered code review, research, and book writing via a fleet of coding agents.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceProvides coding agents with structured planning, persistent project memory, automated verification, and safety permission controls through MCP tools, enabling better planning, context retention, self-checking, and guarded execution.1 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables multi-agent AI collaboration by connecting Claude Code, OpenAI Codex, and Google Antigravity, providing cross-model code reviews, independent second opinions, and autonomous validation through MCP tools.1MIT
- FlicenseAqualityBmaintenanceEnables coding agents to build and query a verified project memory through the MCP protocol, so skills, facts, and user preferences are captured as experience and adopted only after passing independent checks. It also briefs agents at each request, flags known pitfalls live, and runs an executable review before changes are finalized.4-