Atlas / Skills / cursor / Orchestrate

OrchestrateSAFE

skills/cursor/orchestrate

Cursor plugin specification and official plugins

Verdict
SAFE
Grade
B
Trust score
89 /100
Version
—
Hosts
1 documented
License
—
Stars
10,928
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Adapters are external IO shells. They do not own orchestration state.

SlackAdapter

SlackAdapter is the only adapter orchestrate ships. Slack is the human-visibility layer:

  • post the run kickoff message
  • post or edit one task message per task in the kickoff thread
  • upload files when an operator explicitly asks
  • read reactions for Andon
  • post free-form comments in the run thread

postRunKickoff is the only adapter method that writes to the channel root. The CLI resolves the channel once, then constructs the adapter with that channel. Every later Slack write takes a threadTs and stays in the same run thread.

Orchestrate owns Slack status mirrors, Andon, and the comment retry queue. Agents can still call MCPs directly for Linear, GitHub, Slack, Notion, and other ad-hoc external work. Those systems are not adapter destinations.

Comment retry queue

comment-retry-queue.json stores required comments by destination string. The valid Slack shape is slack::. Workspace calls validate the destination against plan.slackKickoffRef before posting or draining.

Routine lifecycle mirrors are best effort. Required comments retry with the queue's backoff schedule.

Read from source at commit 890eaf6b2dddOBSERVED · 2026-10-12
02

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
cursormentioned
03

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: orchestrate
description: Use only when the user explicitly types `/orchestrate <goal>` to decompose a large task, spawn a tree of parallel cloud-agent workers/subplanners/verifiers via the Cursor SDK, and collect structured handoffs; do not invoke autonomously.
disable-model-invocation: true
---

# Orchestrate

An explicit `/orchestrate <goal>` fans out a large task across parallel Cursor cloud agents. Workers don't talk to each other; they talk up through structured handoffs. The spawn, wait, and handoff loop lives in `scripts/cli.ts`. The planner writes `plan.json`, the script executes it, and the planner reads handoffs to decide what comes next. Long-running agent loops drift; a script with a JSON state file keeps its footing.

**Required reading: the `cursor-sdk` skill ([cursor/plugins/cursor-sdk](https://github.com/cursor/plugins/tree/main/cursor-sdk)).** Spawning, auth, and the error taxonomy live there. Don't reimplement what that skill already documents.

## Setup

- `CURSOR_API_KEY` must be a personal/user key. Create it from [Cursor Dashboard > Integrations](https://cursor.com/dashboard/integrations), then read `cursor-sdk` Auth before using it.
- `SLACK_BOT_TOKEN` is optional. When set, pass `--slack-channel <id>` to `kickoff` or the first `run --root`, or set `SLACK_CHANNEL_ID`. The script stores the channel in `plan.slackChannel`, posts the kickoff thread there, mirrors task status, and reads Andon reactions. When the token is unset, the script logs once and runs without Slack visibility; correctness does not change.

## Core principles

These rules make the tree self-converging without global coordination.

1. **Planners own scopes and publish tasks. They do no coding.** Writing `plan.json`, reading handoffs, and deciding what's next are planner work. Editing files, running `git merge`, and fixing conflicts inline are not. If a planner feels the urge to code, it publishes a task for a worker instead.
2. **Planners don't know who picks up their tasks.** The script routes each task to a cloud agent. The planner's mental model stays at the task level.
3. **Workers are isolated.** One task, one clone of the repo, no channel to any other agent. One handoff when done.
4. **Subplanners are recursive planners.** A planner publishes a "subplan this slice" task; the subplanner fully owns that slice and hands back an aggregated handoff.
5. **Continuous motion via handoffs.** A planner that thought it was done can receive a late handoff and replan. No "finished" state until the planner decides to stop publishing.
6. **Propagation, not synchronization.** No cross-talk between siblings. No shared state between levels. Each level sees only its children's handoffs.

## Node types

| Node           | Runs the loop? | Scope                            | Output                                  |
| -------------- | -------------- | -------------------------------- | --------------------------------------- |
| Planner        | yes            | Entire user goal                 | User-facing message + optional PR       |
| Subplanner (↻) | yes            | One slice of parent's scope      | Handoff to parent                       |
| Worker         | no             | One concrete task                | Handoff to spawning planner             |
| Verifier       | no             | One target's acceptance criteria | Verdict handoff to spawning planner     |
| Git            | n/a            | Shared medium                    | Branches (code) + handoffs/ (meaning)   |

## Role

Two roles, one skill. Read your role's reference file and skip the other.

**Dispatcher.** You're in a local IDE session and the user typed `/orchestrate <goal>`. Your job is to kick off a cloud root planner and return its URL. See `references/dispatcher.md`. One-shot; you are not the planner.

**Planner (root or sub).** You were spawned with a structured prompt that opens with "You are the root planner for:" or "You are a subplanner for:". Or the user chose to run the planning loop locally. You own a scope, publish tasks, read handoffs, decide what's next. See `references/planner.md`.

`disable-model-invocation: true` means this skill loads only on explicit invocation.
04

Trust audit

SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
none-observed
Shell
none-observed
Dependencies
not all pinned
Secrets in source
none-found

Findings (9)

LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/__tests__/slack-prompt-shape.test.ts:15
const PROMPTS_DIR = resolve(SCRIPT_DIR, "../../prompts");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/core/prompts.ts:31
resolve(SCRIPT_DIR, `../../prompts/${name}.md`),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/tools/generate-json-schemas.ts:12
const SCHEMA_DIR = resolve(SCRIPT_DIR, "../../schemas");
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
scripts/__tests__/comment-retry-queue.test.ts:259
body: "exfil attempt",
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
scripts/__tests__/comment-retry-queue.test.ts:323
id: "exfil-attempt",
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
scripts/package.json
@cursor/sdk, @slack/web-api, commander, zod, zod-to-json-schema, @biomejs/biome
Why it matters. 6 dependency range(s) float
Fix. pin exact versions or ship a lockfile
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
SKILL.md:45
**Planner (root or sub).** You were spawned with a structured prompt that opens with "You are the root planner for:" or "You are a subplanner for:". Or the user chose to run the planning loop locally.
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
prompts/root.md:1
You are the root planner for: {{goal}}
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
references/dispatcher.md:1
Operating manual for the dispatcher. If you were spawned with a prompt starting "You are the root planner for:" or "You are a subplanner for:", read `planner.md` instead.

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 890eaf6b2dddfull audit observations/trust-audit/skill/cursor__orchestrate.json · Report an issue / request a re-scan
05

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-12890eaf6b2dddSAFEB89first audit
06

Questions

What does the Orchestrate skill do?

Cursor plugin specification and official plugins

Is Orchestrate safe to install?

The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.

What can Orchestrate access on my machine?

The audit observed that it reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does Orchestrate work with?

Its documentation mentions cursor. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (890eaf6b2ddd), read on 2026-10-12. The repository is watched, and a new audit runs when it changes — this is the first audit.

Advertisement