tandem-orchestration — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited tandem-orchestration (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A bulleted imperative like {match} tells the agent to never reveal, disclose, or mention something to the user. Used adversarially it can instruct the agent to hide its tool calls or lie about what it did — stripping the transparency a user relies on to trust the agent.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
🏗️🏗️🏗️🏗️🏗️ Full orchestration is active.
Tandem lets an MCP-capable chat, coding agent, desktop client, or automation operate live agent and terminal sessions across the user's own machines. It is not tied to Claude.ai and it is not limited to Claude Code.
Supported engines in this MVP:
| Engine | What Tandem drives | Default |
|---|---|---|
claude | Claude Code in tmux | enabled |
codex | Codex in tmux | opt-in |
shell | The user's login shell in tmux | opt-in |
hermes | An existing allowlisted Hermes WebUI agent | opt-in |
The general session tools are engine-neutral. The built-in relay is intentionally Claude-only because its persistent manager protocol depends on Claude-specific behavior.
TANDEM_CWD_ALLOWLIST merely to get around a failure. It is an admission boundary, not a sandbox.shell only when the user explicitly enabled it and the caller is trusted with arbitrary OS-user command execution.text and the returned cursor.Call list_devices first. It returns only:
{
"devices": [
{ "id": "local", "name": "local", "online": true, "engines": ["claude", "codex"] }
]
}Use this list to choose a device that is online and advertises the requested engine. Do not infer machine identity from a neutral device id. If several devices can do the work, select one deliberately or ask the user when the choice affects data locality, cost, or outcomes.
open_session accepts an optional engine and device.review.studio:review.local:review explicitly addresses the hub and is normalized safely.Example delegation:
list_devices and find a device with codex.open_session with { "engine": "codex", "device": "studio", "name": "review" }.studio:review.send_to_session with that name and one bounded assignment.running, poll the same name with an empty text and the returned cursor.list_devicesUse before routing work and again when a remote operation reports that a device is offline. It is read-only and intentionally omits personal and network details.
open_sessionOpen or attach to one supported engine. Supply:
engine: claude, codex, shell, or hermes.device: a listed device id when routing matters.cwd: an allowlisted start directory for tmux-backed engines.name: a short stable name. For Hermes this is the allowlisted writable agent id.model and effort: Claude-only. Never pass them to another engine.Report the returned attachHint when the user may want to watch locally.
list_sessionsUse it to inspect sessions Tandem owns on one device. It is not a process scanner and does not return arbitrary tmux sessions or historical sessions.
send_to_sessionSend one clear assignment at a time. A running result is not a failure. Poll by omitting or emptying text, preserving cursor, until the turn is idle or the user chooses to interrupt it.
Slash commands and shell lines are passed through verbatim. Treat them as execution, not chat formatting.
interrupt_sessionStop a runaway or no-longer-needed turn while keeping its session available for inspection or another instruction.
close_sessionClose the session when it is no longer useful. Do not close a session whose live state the user may still need unless closure is requested or is an agreed cleanup step.
relayUse only for the built-in persistent Claude lead-and-worker loop. It requires TANDEM_ALLOW_BYPASS=1 and is not the general mechanism for coordinating arbitrary engines or remote devices.
Relay actions:
start: begin a Claude-only loop with a goal and allowlisted cwd.read: read bounded transcript output.enqueue: give a parked manager another task or answer NEEDS_INPUT.inject: steer an actively running task.stop: stop the loop.For a mixed-engine workflow, use ordinary named sessions and direct their work explicitly.
Give the second agent a bounded artifact or question, not an open-ended duplicate of the whole task. Examples: review a diff, reproduce a bug, test a platform, or research one implementation choice. Read its actual output before accepting it.
Use list_devices, then list_sessions for the selected device. Poll the globally named session. Do not treat a device being online as proof that its work is correct or complete.
Define ownership before sending work. Keep independent assignments separate. Sequence dependent work only after reading the upstream output. One session should own final integration so conflicting edits are not silently combined.
Keep the machine awake, use bounded turns, preserve cursors, and checkpoint important state in the project. Notifications can report completion to a webhook, ntfy, or the local event log, but they cannot force a third-party chat client to resume a conversation.
Do not declare success because a session said it was done. Inspect the relevant files or artifacts, run proportionate tests, check security boundaries, and report limitations plainly. A remote session is a worker, not an authority.
Tandem is complete for a task only when:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.