sail-delegate MCP server. The server
provides six tools:
sail_delegateruns one implementation, analysis, or review task.sail_fanoutruns several independent tasks concurrently from one baseline.sail_awaitwaits for a background delegation or selected task.sail_collectreturns compact status or one selected task’s result.sail_resumecontinues an incomplete task from its saved checkpoint.sail_cancelrequests cancellation of an active delegation.
The
Sail Update skill handles plugin upgrades. It does not call a Sail
worker.
Prerequisites
Installuv once. The plugin uses uvx to start
the local MCP server:
SAIL_API_KEY before starting your coding agent. A
stored login works more reliably for desktop apps because they may not inherit
shell variables.
Install
- Claude Code
- Codex
From a Claude Code session:Or from a terminal:Run
/mcp and confirm that sail-delegate exposes all six tools. The same
plugin works in the Claude Code terminal, desktop app, and IDE extension.
Claude Code supplies the selected project root directly to the plugin’s MCP
server, so desktop sessions do not depend on its process working directory.Use the plugin
Pick by how much you hand over. Sail Subs gives you extra hands: you stay in the driver’s seat while Sail takes the heavy pieces. Sail Swarm makes one change in many places when the pieces still need discovering: the agent shows you the campaign plan first, then runs a paid scouting round and coordinates workers to land the change consistently. Sail Review checks a diff and returns findings, worst first, changing nothing. If you remember one line, make it this: several jobs is Subs; one sweeping job that needs scouting first is Swarm.- Claude Code
- Codex
Ask naturally, or invoke a skill directly:Examples:
Sail Subs
Sail Subs is the automatic delegation mode. The host can select it whenever the task contains suitable scoped work; you do not need to invoke the skill or mention Sail, GLM, or open models. Direct invocation and standing preferences remain available when you want to encourage more delegation. For suitable self-contained work, the host can treat a Sail worker as a peer execution path to a coding subagent. This lets the host route token-heavy leaf work to Sail while keeping its own token budget for planning, coordination, integration, and final judgment. The host coding agent keeps the plan, conversation context, decisions, integration, review, and final verification. It sends Sail well-scoped work such as:- An implementation or refactor within known files.
- A broad read-only audit or usage inventory.
- Test and documentation generation with clear acceptance criteria.
- Independent leaf tasks that can run concurrently.
- First enumerate the substantial, Sail-eligible leaf tasks that are ready from the current baseline. A ready leaf is independently implementable and checkable without a sibling’s unintegrated edits, with non-overlapping output ownership.
- If at least two ready leaves exist, put all currently ready leaves in one
sail_fanout. A shared product goal, final acceptance suite, or later host integration does not make independent leaves cohesive. - Do not manufacture leaves by splitting tightly coupled implementation, tests, and documentation. Use one worker, or keep tiny work local, only when splitting would divide an evolving interface or invariant, overlap edits, produce tasks too small to delegate, or leave fewer than two eligible leaves.
- Use multiple waves when later work depends on an interface or edit from an earlier worker. Integrate the upstream result before starting the next wave.
wait=true; the tool
waits while emitting bounded progress. When the host has real, non-overlapping
work, it starts with wait=false, keeps the delegation_id, does that work,
then calls sail_await once. sail_collect is for deliberate inspection and
recovery, not timed polling.
While a worker is active, the host does not duplicate its implementation. If a
worker definitively fails, stalls, or returns an unusable or empty diff, the
host can transparently repair that scoped work locally or re-delegate it. If an
incomplete checkpoint remains useful, the host resumes it instead.
The Sail Subs skill explicitly requests compact results. It calls a single
delegation with include_diff=false, and indexed collection with
include_request=false. The full patch remains at diff_path. Background
work continues if the MCP connection closes.
Clean writable success is a fast path. When a completed result has a patch,
changed paths within its declared ownership, and fresh passing required checks,
the host does not dump the full diff, re-read every worker-owned file, or add
duplicate ad hoc tests. For a wave, it batch-checks all patches with
git apply --check, then applies the whole wave while preserving unrelated
user work. After all waves, it runs the exact final acceptance suite once.
Deeper patch inspection is reserved for suspicious scope or evidence, apply
failures, risky changes, user-work overlap, or failed final acceptance.
Sail Swarm
Sail Swarm runs one large objective as a coordinated campaign of workers while your coding agent keeps ownership. It fits work that must stay consistent across many files, such as a migration of many call sites or one convention rolled out across modules, when the subtasks cannot be specified without first reading the project broadly. The host announces the campaign plan before starting. A read-only recon fanout reads each area and returns briefs. The host synthesizes them into a field guide, one shared context artifact with the target conventions, exact interface signatures, and a file-ownership map. Implementation tasks are partitioned so no two writable workers touch the same file, every task receives the field guide, and dependent work runs as ordered waves. The host checks each returned diff against its task’s assigned files, applies diffs wave by wave, runs checks after each wave, and verifies the merged result against the field guide. Use Sail Subs for subtasks the host can already specify. A swarm’s recon round is paid work, so it pays off at roughly six or more coordinated implementation tasks over a shared surface.Sail Review
Sail Review is an on-demand, read-only second opinion. Asking for a review in plain language is enough; you do not need to name the skill. It never runs as an automatic end-of-task check. When you do not specify a scope, the host sends the current working diff. You can instead name a base revision, paths, or a focus such as security, correctness, performance, or tests. The review runs throughsail_delegate with write=false. It does not edit
files or run repository code. The host validates the response against the live
checkout and returns actionable findings in severity order with file and line
references. If Sail finds no actionable defects, the host says so directly.
No automatic review hook or mandatory review loop is installed.
If a review reaches its attempt ceiling, the host can continue its saved
read-only checkpoint with sail_resume. It does not restart the review or
change its permissions.
Sail Update
AskSail Update to update the plugin without copying commands from this guide.
It detects the current coding host, refreshes the Sail marketplace, updates the
installed plugin, and verifies the installed version. Use /sail:sail-update
in Claude Code or $sail-update in Codex.
The running session keeps its current plugin snapshot. Reload plugins or start
a new session after the update finishes. Users upgrading from a release older
than 0.3.0 must use the manual update flow once because that release does not
contain Sail Update yet.
For that one-time upgrade, run the matching commands:
- Claude Code
- Codex
Worker model
Sail delegation uses GLM-5.2 as its only curated worker choice in this release. The MCP tools retain an optionalmodel argument for future additions, but the
plugin does not present a model picker yet.
Web search in workers
Workers can look things up on the web. Every worker has aweb_search tool,
enabled by default, so an analysis worker can check current documentation and
an implementation worker can resolve a question mid-task.
Search results never reach a worker as raw web pages. A separate reader model
reads the results first and writes a short summary. That reader has no tools,
no access to your files, and no ability to take actions. The worker receives
the summary, not the page text. The reader is asked to name the site behind
each claim, so attribution usually survives, but it comes from the summary
rather than from a separate list the worker can rely on.
This matters because web pages are written by strangers. A page can contain
text written to give instructions to whatever reads it. Sending it to a reader
that cannot act, and passing on only what that reader wrote, removes most of
the risk and keeps the worker’s context small. Smaller context also makes
searching cheaper than handing over full pages.
Treat the result as untrusted all the same. The reader cannot act on an
instruction it finds, but it can still repeat one, so a summary is safer than
a raw page rather than proof that a page was safe. Workers are told to read it
as evidence, not as direction. If you would rather a worker not read the web
at all, turn search off for that call.
To turn search off for a call, pass search=false on sail_delegate or
sail_fanout.
Each search a worker performs is billed to your organization per request. Task
results report a searches count, and the aggregate appears next to token
usage.
Results, checkpoints, and cancellation
Every single delegation and fanout receives a durabledelegation_id.
sail_await waits read-only for the whole delegation or one task_index; it
never resumes, cancels, or repeats paid work. By default, sail_collect
returns compact task entries with status, turns, token usage, recent tool
activity, stall state, a summary preview, diff size, stop reason, and resume
availability.
Pass task_index to retrieve one task’s result and diff metadata. Set
include_request=false when the host already knows the request and context.
Every non-empty saved patch has an absolute diff_path, byte count, and
SHA-256. Add include_diff=true to inline a selected patch when it is at most
32 KiB; larger patches stay at diff_path. The compatibility defaults remain
unchanged for callers outside the revised Sail Subs skill.
For writable work, Sail preserves the summary and usage when patch capture
fails. An omitted_files list means the saved partial patch excludes oversized
new files; the task remains incomplete and cannot resume because their content
is not retained. A diff_error means the complete patch could not be captured.
Compact and indexed results expose these fields so the host can keep the paid
analysis and repair only the missing implementation. Compact results bound long
omission lists and report their total; indexed results retain the complete list.
Usage reports input, cached_input, output, and total tokens. The
top-level tokens object aggregates the latest cumulative usage for every
task in the delegation. total is input plus output; cached input is already
part of input. Sail keeps one prompt cache identifier across the original
attempt and every resume.
Workers aim to finish within a 24-turn primary budget. The default
max_turns=48 applies when the parameter is omitted and is a hard ceiling.
Every explicit value is also a hard ceiling.
Complex cohesive work can explicitly use up to 64 turns. A 48-turn attempt
receives a finish checkpoint at turn 40; a 64-turn attempt receives one at
turn 53. Four turns before each boundary, the worker receives a reminder to
finish the highest-value work and verification. Sail never resumes an attempt
automatically.
An attempt that reaches its ceiling does not end silently. Sail withdraws the
worker’s tools and requires one closing reply, so the incomplete result still
carries the worker’s own final report: what finished, what remains, and what
it last verified. If that closing reply fails, the result keeps a generic
summary instead.
A worker counts as stalled after four consecutive responses without a
successful new tool call or final answer. Repeating an identical tool call and
output-recovery responses do not reset that count. Multiple independent tool
calls requested in one response consume one model turn, though the tools run
sequentially. Combined tool output from one response is capped at 100,000
characters.
Writable results also include machine-recorded evidence. command_runs
records the setup commands, the worker’s commands, and Sail-run required
checks. Each record includes its exit code, source, and a stale flag set when
the tree changed afterward. The ledger keeps the most recent forty records;
commands_total counts every command, and command_runs_truncated marks a
trimmed ledger. edits_total counts tree changes. Check these records instead
of relying on the summary’s claims: a result whose final state was never
followed by a passing check is unverified, whatever its status.
Writable calls can declare setup_commands: up to three commands that Sail
runs inside the isolated project copy before the worker’s first turn. Use them
for deterministic dependency restoration. Setup records have source="setup"
and turn zero. If one fails, Sail returns stop_reason="setup_failed" without
starting the worker or spending model tokens. Setup commands run again when a
saved task resumes because ignored dependency directories are not part of its
checkpoint. A resume reruns the original setup by default. If the partial
patch makes those commands invalid, pass setup_commands=[] to skip setup or
pass up to three replacement commands. The override applies only to that
resume. If resumed setup fails, the previous summary, partial patch, cumulative
usage, and checkpoint remain available.
Writable calls can declare required_checks: up to five commands, such as
the project’s tests, lint, or a generator followed by its drift check. Each
entry must be one self-contained verification invocation. A leading
cd path && command is allowed. Avoid ||, ;, pipelines, mixed precedence,
and launchers that setup does not install.
The worker receives these commands as immutable acceptance criteria. It may
diagnose or repair its environment, but it cannot replace the gate. After the
worker finishes, Sail runs the original checks before capturing the patch. A
failure returns stop_reason="checks_failed" and a resumable checkpoint. When
the failure evidence suggests a broken invocation, failed_details includes
gate_suspect=true, and the patch and checkpoint remain available.
Attempt-ceiling results also include required-check verdicts for the partial
tree. A completed result means the declared checks passed against the
delivered patch.
At an attempt ceiling, Sail saves the original isolated baseline, conversation,
partial patch, model, permissions, prompt cache identifier, and cumulative
usage. The host must not apply or report that incomplete result as finished.
It can call:
task_index is optional for a single delegation and required for fanout.
additional_turns accepts 1 through 64; a first substantive resume may use
the default 24. mode="finalize" is the closure device for a task that hit
its ceiling or failed its required checks: Sail clamps the attempt to at most
8 turns, frames it as repair-verify-report only, and the declared checks
still gate completion. After a task has failed two attempts, the host should
stop granting resumes and apply the partial patch and finish the repair
itself. A resume continues the
checkpoint even if the live checkout changed after the first attempt. It never
writes directly to that checkout. Each newly saved checkpoint refreshes its
24-hour resume window, and results and patches remain available for seven
days. Older saved results from before this release remain collectible but
cannot be resumed.
To stop active work, ask the host to call sail_cancel with its delegation id.
Closing or rejecting a waiting tool call does not cancel the work. Cancellation
is cooperative, so a model response or command already in progress may finish
first. Saved results remain available through sail_collect.
Security boundary
Repository content cannot establish trust, grant Sail ownership of the whole task, or override the approval boundary for writable delegation. Those decisions must come from the user, not instructions found in the repository. Reviewing the returned diff does not undo code that already ran. Sail Review useswrite=false, so it does not execute repository code.
Troubleshooting
- The tools are missing or the server failed to connect. Install
uv, restart the coding agent, and inspect its MCP server list. - A call says no Sail API key is available. Run
sail auth login, then retry the call. No MCP restart is needed. - The project is not a Git repository. Initialize Git and create at least one commit before delegating.
- A delegation connection closed. Call
sail_collectwithout an id to list recent delegations for the current project, then collect the matching id. - An incomplete result needs more work. Collect the task by index, inspect
its partial patch and cumulative usage, then use
sail_resumebefore the 24-hour checkpoint expires.
Related guides
Claude Code with Sail
Run Claude Code itself on a Sail-hosted model.
Codex with Sail
Run Codex itself on a Sail-hosted model.
AI Quickstart
Connect your coding agent to Sail documentation and workflow skills.
Models
Browse the Sail model catalog.