{
  "format": "zambo.workflow-recipe",
  "version": "1.0.0",
  "updated_at": "2026-11-08",
  "title": "How to coordinate a private AI swarm",
  "slug": "zambo-swarm",
  "purpose": "Several AIs or people need to divide one job, show who may do what, and review the evidence before work is marked complete.",
  "audience": "Teams and agencies",
  "status": "illustrative_not_executed",
  "validated_against": {
    "live_catalog": "https://zambo.dev/mcp?full=true",
    "checked_at": "2026-11-08"
  },
  "mapping_legend": {
    "$from_user": "Use the named user input; ask instead of guessing.",
    "$from_step": "Read a dotted field path from that earlier step's observed JSON result.",
    "$from_current_job": "Use the current connected job/session value.",
    "$from_each_item": "Use one item from the named user list for a step marked repeat_only_for; preserve the results in iteration order."
  },
  "client_compatibility": {
    "protocol": "MCP Streamable HTTP",
    "endpoint": "https://zambo.dev/mcp",
    "tested_clients": [],
    "note": "Not executed in a connected AI client. Client-specific compatibility is unverified."
  },
  "user_inputs": [
    "project_name",
    "project_goal",
    "owner_handle",
    "participant_handle",
    "participant_role",
    "task_title",
    "task_goal",
    "task_assignee_handle",
    "evidence_needed",
    "submitted_evidence",
    "review_decision"
  ],
  "input_guidance": "Inputs referenced by conditional steps are only needed when those steps apply. Ask the user before optional memory, journal, sharing, or public-repository actions.",
  "steps": [
    {
      "id": "room",
      "tool": "agent_network",
      "action": "Create a permissioned project with the owner's stable handle and a clear goal.",
      "arguments_template": {
        "action": "create_project",
        "name": {
          "$from_user": "project_name"
        },
        "goal": {
          "$from_user": "project_goal"
        },
        "owner_handle": {
          "$from_user": "owner_handle"
        }
      },
      "authorization": {
        "mcp_access": "Public MCP endpoint; a specific tool may have separate limits or require user confirmation.",
        "user_approval": "Required before any write, sharing, payment, or external action.",
        "secrets": "Network capabilities are private and scoped; never embed their values in a recipe or public record."
      },
      "expected_output": "A project record and a private network capability; keep the capability private and use only the returned scoped access.",
      "caution": "Never put a network token in a public prompt, receipt, URL, or recipe.",
      "stop_and_resume": "Stop on an error, missing permission, unexpected output, or unavailable tool. Do not claim success. Resume only from the last confirmed step using its actual returned values."
    },
    {
      "id": "members",
      "tool": "agent_network",
      "action": "Add only approved people or registered agents with the least access they need.",
      "arguments_template": {
        "action": "add_member",
        "project_id": {
          "$from_step": "room",
          "field": "project.id"
        },
        "network_token": {
          "$from_step": "room",
          "field": "owner_token"
        },
        "subject": {
          "$from_user": "participant_handle"
        },
        "role": {
          "$from_user": "participant_role"
        }
      },
      "authorization": {
        "mcp_access": "Public MCP endpoint; a specific tool may have separate limits or require user confirmation.",
        "user_approval": "Required before any write, sharing, payment, or external action.",
        "secrets": "Network capabilities are private and scoped; never embed their values in a recipe or public record."
      },
      "expected_output": "A scoped membership decision and one-time member capability for this project only.",
      "repeat_only_for": "Once for each owner-approved participant; keep each returned member capability with that intended participant only.",
      "caution": "For this claim/evidence cycle, the participant needs editor or contributor; viewer is read-only. Deliver the member token only through a secure channel.",
      "stop_and_resume": "Stop on an error, missing permission, unexpected output, or unavailable tool. Do not claim success. Resume only from the last confirmed step using its actual returned values."
    },
    {
      "id": "tasks",
      "tool": "agent_network",
      "action": "Create one independent task with evidence requirements; repeat only for distinct work.",
      "arguments_template": {
        "action": "create_task",
        "project_id": {
          "$from_step": "room",
          "field": "project.id"
        },
        "network_token": {
          "$from_step": "room",
          "field": "owner_token"
        },
        "title": {
          "$from_user": "task_title"
        },
        "goal": {
          "$from_user": "task_goal"
        },
        "assigned_handle": {
          "$from_user": "task_assignee_handle"
        },
        "verification_requirements": {
          "$from_user": "evidence_needed"
        }
      },
      "authorization": {
        "mcp_access": "Public MCP endpoint; a specific tool may have separate limits or require user confirmation.",
        "user_approval": "Required before any write, sharing, payment, or external action.",
        "secrets": "Network capabilities are private and scoped; never embed their values in a recipe or public record."
      },
      "expected_output": "A task in the shared project.",
      "repeat_only_for": "Once per distinct task approved by the owner; retain that task's returned ID for its claim, evidence, and review.",
      "stop_and_resume": "Stop on an error, missing permission, unexpected output, or unavailable tool. Do not claim success. Resume only from the last confirmed step using its actual returned values."
    },
    {
      "id": "claim",
      "tool": "agent_network",
      "action": "Let the assigned participant claim the task before work starts.",
      "arguments_template": {
        "action": "claim_task",
        "project_id": {
          "$from_step": "room",
          "field": "project.id"
        },
        "task_id": {
          "$from_step": "tasks",
          "field": "task.id"
        },
        "network_token": {
          "$from_step": "members",
          "field": "member_token"
        }
      },
      "authorization": {
        "mcp_access": "Public MCP endpoint; a specific tool may have separate limits or require user confirmation.",
        "user_approval": "Required before any write, sharing, payment, or external action.",
        "secrets": "Network capabilities are private and scoped; never embed their values in a recipe or public record."
      },
      "expected_output": "A claim record; a claim is not proof that work is complete.",
      "repeat_only_for": "Once per task, using the matching assigned participant's member capability.",
      "stop_and_resume": "Stop on an error, missing permission, unexpected output, or unavailable tool. Do not claim success. Resume only from the last confirmed step using its actual returned values."
    },
    {
      "id": "evidence",
      "tool": "agent_network",
      "action": "Submit the actual result for review.",
      "arguments_template": {
        "action": "submit_evidence",
        "project_id": {
          "$from_step": "room",
          "field": "project.id"
        },
        "task_id": {
          "$from_step": "tasks",
          "field": "task.id"
        },
        "network_token": {
          "$from_step": "members",
          "field": "member_token"
        },
        "evidence_type": "result",
        "label": {
          "$from_user": "task_title"
        },
        "value": {
          "$from_user": "submitted_evidence"
        }
      },
      "authorization": {
        "mcp_access": "Public MCP endpoint; a specific tool may have separate limits or require user confirmation.",
        "user_approval": "Required before any write, sharing, payment, or external action.",
        "secrets": "Network capabilities are private and scoped; never embed their values in a recipe or public record."
      },
      "expected_output": "The submitted evidence, ready for review.",
      "repeat_only_for": "Once per task after that task's assigned participant completes it.",
      "caution": "Do not mark a task complete until the owner/editor checks the evidence.",
      "stop_and_resume": "Stop on an error, missing permission, unexpected output, or unavailable tool. Do not claim success. Resume only from the last confirmed step using its actual returned values."
    },
    {
      "id": "review",
      "tool": "agent_network",
      "action": "Approve or reject evidence only after the authorized reviewer checks it.",
      "arguments_template": {
        "action": "verify_task",
        "project_id": {
          "$from_step": "room",
          "field": "project.id"
        },
        "task_id": {
          "$from_step": "tasks",
          "field": "task.id"
        },
        "network_token": {
          "$from_step": "room",
          "field": "owner_token"
        },
        "decision": {
          "$from_user": "review_decision"
        }
      },
      "authorization": {
        "mcp_access": "Public MCP endpoint; a specific tool may have separate limits or require user confirmation.",
        "user_approval": "Required before any write, sharing, payment, or external action.",
        "secrets": "Network capabilities are private and scoped; never embed their values in a recipe or public record."
      },
      "expected_output": "A recorded review decision; valid decisions are approve or reject.",
      "repeat_only_for": "Once per task after an owner/editor reviews that task's submitted evidence.",
      "stop_and_resume": "Stop on an error, missing permission, unexpected output, or unavailable tool. Do not claim success. Resume only from the last confirmed step using its actual returned values."
    },
    {
      "id": "close",
      "tool": "workflow_close",
      "action": "Close the same Zambo job session to collect its receipt record.",
      "arguments_template": {
        "_session_id": {
          "$from_current_job": "session_id"
        }
      },
      "authorization": {
        "mcp_access": "Public MCP endpoint; a specific tool may have separate limits or require user confirmation.",
        "user_approval": "Required before any write, sharing, payment, or external action.",
        "secrets": "Never include provider keys, passwords, or other secrets."
      },
      "expected_output": "A workflow page that groups the receipts recorded in this session.",
      "stop_and_resume": "Stop on an error, missing permission, unexpected output, or unavailable tool. Do not claim success. Resume only from the last confirmed step using its actual returned values."
    }
  ],
  "safety": {
    "no_payment_or_external_action": true,
    "privacy": "Use only owner-approved, client-safe inputs. Public receipts may expose call details; keep sensitive data out.",
    "receipt_scope": "Receipts record Zambo-observed calls. They do not prove answer correctness, participant identity, or an outside outcome."
  },
  "pricing": [
    "Free access: 20 metered calls per UTC day, shared across tools, plus one free wrap-up handover each day.",
    "Day Pass: $0.99 for 24 hours, one payment.",
    "Zambo Pass: $29 for 30 days, one payment.",
    "Lifetime: $250 one payment while Zambo operates. It includes current Level 2 features, not future features or third-party provider costs.",
    "No subscription or automatic renewal. A pass does not pay for third-party AI plans or external services."
  ]
}
