Skip to content
Back to skills

Cocofleet

ASecurity

Execute a CocoFleet manifest. Spawns independent Coco processes for each instance, respects dependency order, polls for completion, and writes an aggregated results summary. Usage: $fleet run [fleet-name].

  • 724 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 5, 2026
ai-agentsgoshellbashnode

Works with

  • cli

Security analysis

A100/100

Pro scans all 7 files and shows the line behind each finding

Scanned September 5, 2026

npx -y skills add Snowflake-Labs/cocoplus --skill cocofleet --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cocofleet?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Cocofleet
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/snowflake-labs-cocofleet-70e9848b/badge)](https://www.skillsdirectory.com/skills/snowflake-labs-cocofleet-70e9848b)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "fleet-run"
description: "Execute a CocoFleet manifest. Spawns independent Coco processes for each instance, respects dependency order, polls for completion, and writes an aggregated results summary. Usage: $fleet run [fleet-name]."
version: "1.0.0"
author: "CocoPlus"
tags:
  - cocoplus
  - cocofleet
---

Your objective is to execute a CocoFleet manifest.

Before proceeding, verify that `.cocoplus/` exists.
If not: output "CocoPlus not initialized in this directory. Run `$pod init` to begin." Then stop.

Parse argument: `$fleet run [manifest-path]`
If no manifest-path: output "Usage: $fleet run [manifest-path]" Then stop.

Read the manifest file at `[manifest-path]`. If not found: output "Manifest not found: [manifest-path]" Then stop.

## Validate Manifest

Check: instance count ≤ 10. If exceeded: output "WARNING: Fleet has [N] instances, exceeding the 10-instance maximum. Edit manifest to reduce instance count." Then stop.

If `mode = "goal_decomposition"` or `"mode": "goal_decomposition"`:

1. Require a planner role entry that writes `.cocoplus/fleet/[fleet-id]/task-plan.json`.
2. Require each planned task to declare:
   - `id`
   - `role`: `planner`, `producer`, or `critic`
   - `model_tier`: `smol`, `regular`, `smart`, or `ultra`
   - `file_scope`: array of files or directories owned by the task
   - `depends_on`: array, empty when no predecessor exists
   - `critic_required`: boolean for producer outputs that need signoff
3. Require critic tasks to declare `tool_set: "read_only"`. A critic that can write the artifact it grades is invalid.
4. Validate concurrent producer tasks have disjoint `file_scope` entries. If scopes overlap, do not fail the run; rewrite the launch plan so overlapping tasks run sequentially.
5. A goal-decomposition fleet is complete only after every producer with `critic_required = true` has a dependent critic task with PASS signoff recorded in `task-plan.json` or `state.json`.

Check if `coco` is available (cross-platform: run `coco --version` and verify exit code 0). If not found: output "ERROR: 'coco' CLI not in PATH. Install Coco and ensure it is accessible before running a fleet." Then stop.

## Create Fleet State File

Generate fleet-id: `fleet-YYYYMMDD-HHMMSS`

Create `.cocoplus/fleet/[fleet-id]/`.

Write `.cocoplus/fleet/[fleet-id]/state.json`:
```json
{
  "fleet_id": "[fleet-id]",
  "manifest_path": "[manifest-path]",
  "started_at": "[ISO 8601 timestamp]",
  "status": "running",
  "mode": "[standard|goal_decomposition]",
  "instances": {},
  "roles": {
    "planner": [],
    "producer": [],
    "critic": []
  }
}
```

Initialize each instance in the state with status "pending".

Create `.cocoplus/fleet/[fleet-id]/comms.log` and append one JSON line for every dispatch, heartbeat, completion, blocker, and critic signoff event:

```json
{"ts":"[ISO]","fleet_id":"[fleet-id]","event":"dispatch","role":"producer","instance_id":"[id]","summary":"[short task]"}
```

## Resolve and Execute Instances

Algorithm:
1. Find all instances with no `depends_on` or with all dependencies satisfied in state.json
2. For each ready instance:
   a. Create directory: `.cocoplus/fleet/[fleet-id]/[instance-id]/`
   b. Verify task_file exists. If not: mark instance as failed, log error.
   c. Spawn Coco process using the Bash tool (cross-platform):
      - On Windows (PowerShell): `Start-Process coco -ArgumentList "--task-file .cocoplus/fleet/[instance-id]/task.md" -RedirectStandardOutput ".cocoplus/fleet/[instance-id]/output.log" -PassThru | Select-Object -ExpandProperty Id | Out-File ".cocoplus/fleet/[instance-id]/pid.txt"`
      - On Mac/Linux (bash): `coco --task-file .cocoplus/fleet/[instance-id]/task.md > .cocoplus/fleet/[instance-id]/output.log 2>&1 & echo $! > .cocoplus/fleet/[instance-id]/pid.txt`
      - Detect platform with `node -e "console.log(process.platform)"` — use `win32` for Windows check.
   d. Record PID in state.json, set status = "running", started_at = [timestamp]

3. Record each launched instance in state.json, update `last_heartbeat_at` and `current_task_summary`, append a dispatch event to `comms.log`, and leave blocked instances in `pending`.
4. Return control to the developer immediately after the initial ready set is launched.
5. Do NOT poll in this command. Ongoing monitoring belongs to `$fleet status` and follow-up fleet orchestration logic.

## Write Aggregated Results

When later orchestration determines the fleet is complete, write `.cocoplus/fleet/[fleet-id]/aggregated-results.md`:
```markdown
# Fleet Results: [manifest-path]

**Fleet ID:** [fleet-id]
**Completed:** [ISO 8601 timestamp]
**Duration:** [seconds]

## Instance Summary
| Instance | Status | Duration | Checkpoints |
|----------|--------|----------|-------------|
[one row per instance]

## Overall Status
[COMPLETE / PARTIAL (N failed) / FAILED]
```

Output: "Fleet started from [manifest-path]. Fleet ID: [fleet-id]. Initial ready instances were launched and the session returned immediately. Use `$fleet status [fleet-id]` to monitor. Use `$fleet stop [fleet-id]` to terminate all processes."

## Anti-Rationalization

| Temptation | Why Not |
|------------|---------|
| Block waiting for all instances | Fleet must return control to developer immediately |
| Share context between instances | Instances are process-isolated by design — no shared context |
| Exceed 10 instances without warning | 10 is the safety limit — always enforce |
| Let a critic edit the artifact it grades | Producers never grade themselves; critic tasks must be read-only |
| Launch overlapping producers concurrently | Shared file scope breaks concurrency correctness; sequence overlapping scopes |

## Exit Criteria

- [ ] `.cocoplus/fleet/[fleet-id]/state.json` exists with `status: "running"` and an entry for each instance
- [ ] `.cocoplus/fleet/[fleet-id]/comms.log` records dispatch and heartbeat events
- [ ] All ready instances (no unmet dependencies) have been spawned with PIDs recorded in state.json
- [ ] `output.log` and `pid.txt` files exist in each launched instance's directory
- [ ] Goal-decomposition mode has task-plan role fields, read-only critics, disjoint concurrent file scopes, and critic PASS signoffs for required producer outputs
- [ ] Control is returned to the developer immediately after launching the initial ready set — the command does not block

Files in this skill

  • fleet-comms.skill.md1.8 KB
  • fleet-init.skill.md3.8 KB
  • fleet-logs.skill.md2.1 KB
  • fleet-run.skill.md6.2 KB
  • fleet-status.skill.md2.7 KB
  • fleet-stop.skill.md2.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…