{
  "format": "zambo.workflow-recipe",
  "version": "1.0.0",
  "updated_at": "2026-11-08",
  "title": "Continue a long AI job in another app",
  "slug": "cross-ai-relay-long-job",
  "purpose": "A project outlasts one chat or AI app, and the next person needs the goal, decisions, and next steps without a full transcript dump.",
  "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": [
    "job_goal",
    "completed_work",
    "next_steps",
    "recipient"
  ],
  "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": "thread",
      "tool": "continuity_start_thread",
      "action": "Name the work thread under the same job.",
      "arguments_template": {
        "name": {
          "$from_user": "job_goal"
        },
        "_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 thread ID for later continuity calls.",
      "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": "handover",
      "tool": "handover",
      "action": "Save the goal, completed work, and ordered next steps for the next AI.",
      "arguments_template": {
        "goal": {
          "$from_user": "job_goal"
        },
        "summary": {
          "$from_user": "completed_work"
        },
        "next_steps": {
          "$from_user": "next_steps"
        },
        "recipient": {
          "$from_user": "recipient"
        },
        "recipient_type": "ai",
        "visibility": "unlisted"
      },
      "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 handover link and resume code; share them only with the intended recipient.",
      "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 sender's session after checking the saved handover.",
      "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 linking the calls recorded before the handoff.",
      "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": "switch",
      "type": "human_action",
      "action": "In the receiving AI, say: “Continue my Zambo session {returned code}”. Open the full pickup link returned by handover.",
      "arguments_template": {},
      "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": "The person or agent moves to the intended connected AI; the handover remains private to its intended recipient.",
      "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": "pickup",
      "tool": "handover_accept",
      "action": "The receiving AI accepts the exact returned resume code.",
      "arguments_template": {
        "resume_code": {
          "$from_step": "handover",
          "field": "resume_code"
        },
        "agent_name": {
          "$from_user": "recipient"
        }
      },
      "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": "The saved handover state and a pickup receipt.",
      "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."
  ]
}
