{
  "id": "agent-handoff",
  "type": "loadout",
  "title": "Handoff without compaction",
  "summary": "Write HANDOFF.md before you clear context or switch agents: goal, decisions, exact failing test, next step, commit. A checker flags stale or incomplete handoffs.",
  "description": "Automatic compaction keeps what a summariser thought mattered, and decisions are the first thing to go. Practitioners have converged on the same fix: before clearing context or moving work to another agent or person, write a short handoff file with the goal, files touched, decisions and why, the exact failing test and error, and one next step. This loadout makes that a habit. One skill writes HANDOFF.md from git facts and a template; another resumes from it by re-running the verify commands before changing anything. A small checker flags missing sections, leftover placeholders, secrets, and handoffs written at an older commit. The verifier runs the checker through a template, a good handoff, a stale one and a leaky one.\n",
  "highlights": [
    "Write a handoff before /clear, compaction or switching agents, not after",
    "Template: goal, state, files, decisions, exact failure, next step, verify commands",
    "Checker compares the recorded commit with HEAD and counts the commits since",
    "Resume skill re-runs the checks and confirms the next step before editing",
    "Works across Claude Code, Codex, Antigravity, Cursor and Copilot"
  ],
  "version": "1.0.0",
  "license": "MIT",
  "author": {
    "name": "Agent Loadout",
    "url": "https://loadout.jnw-it.com"
  },
  "credits": [
    {
      "title": "@automater_ai: keep a handoff with the goal, files touched, what is done and the next step",
      "url": "https://x.com/automater_ai/status/2107481727073395054"
    },
    {
      "title": "@PublicAI_: handoff notes with goal, files touched, failing test and last error",
      "url": "https://x.com/PublicAI_/status/2104179567510556875"
    },
    {
      "title": "@calloway_dev: one owner per task; read the handoff before starting",
      "url": "https://x.com/calloway_dev/status/2107099970562085278"
    },
    {
      "title": "@jai_kora: record decisions and what still fails, not a narrative",
      "url": "https://x.com/jai_kora/status/2101657904147517719"
    },
    {
      "title": "@agentjeanclaude: commit a handoff file when switching agents; re-add MCP servers",
      "url": "https://x.com/agentjeanclaude/status/2104989005813260667"
    },
    {
      "title": "Claude Code docs: manage costs and context (/clear and /compact)",
      "url": "https://code.claude.com/docs/en/costs"
    }
  ],
  "categories": [
    "workflow",
    "ai-agents"
  ],
  "stacks": [
    "any",
    "git"
  ],
  "files": [
    {
      "path": "AGENTS.md",
      "role": "instructions",
      "description": "When to write and read a handoff file, and what goes in it.",
      "skill": null,
      "agent": null,
      "install_to": {
        "claude-code": "AGENTS.md",
        "codex": "AGENTS.md",
        "cursor": "AGENTS.md",
        "gemini-cli": "AGENTS.md",
        "antigravity-cli": "AGENTS.md",
        "copilot": "AGENTS.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/AGENTS.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/agent-handoff/latest/AGENTS.md",
      "bytes": 1782,
      "lang": "markdown",
      "content": "# AGENTS.md: hand off work without compaction\n\nLong sessions end in one of three ways: the context fills and gets compacted, you `/clear`, or the work moves to another\nagent or person. Compaction keeps what a summariser thought mattered. A handoff file keeps what the next session needs.\n\n## When to write a handoff\n- Before `/clear`, `/compact` or ending a long session with work unfinished.\n- Before switching agents (for example Claude Code to Codex or Antigravity) or handing to a teammate.\n- When the context is clearly getting long: answers slow down, you re-read files you already read, or you lose track\n  of earlier decisions. Do not wait for automatic compaction.\n- Use the `write-handoff` skill. It writes `HANDOFF.md` at the repo root and checks it.\n\n## When to read one\n- At the start of every session, if `HANDOFF.md` exists, use the `resume-from-handoff` skill before doing anything\n  else. Confirm the goal and next step with the user in one or two sentences.\n\n## Rules for the file\n- Facts, not narrative: goal, current state, files touched, decisions with reasons, what still fails (exact error),\n  the next step, and the commands that prove it works.\n- Record the commit (`git rev-parse --short HEAD`) and branch. A handoff for a different commit is stale until checked.\n- Short: under 120 lines. Link to files and line numbers instead of pasting code.\n- No secrets, tokens or personal data. It may be committed or shared.\n- One owner per open task. If something is unverified, say so; do not round \"probably works\" up to \"done\".\n- Delete or archive the file (`git rm HANDOFF.md` or move it to `docs/handoffs/`) when the work is finished.\n\n## MCP servers and tools\n- Note which MCP servers and CLIs the work depended on. A new agent may not have them configured.\n"
    },
    {
      "path": "CLAUDE.md",
      "role": "adapter",
      "description": "Imports AGENTS.md for Claude Code.",
      "skill": null,
      "agent": "claude-code",
      "install_to": {
        "claude-code": "CLAUDE.md",
        "codex": null,
        "cursor": null,
        "gemini-cli": null,
        "antigravity-cli": null,
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/CLAUDE.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/agent-handoff/latest/CLAUDE.md",
      "bytes": 396,
      "lang": "markdown",
      "content": "# CLAUDE.md\n\n@AGENTS.md\n\n## Claude Code notes\n- Skills from this loadout live in `.claude/skills/`: `write-handoff`, `resume-from-handoff`. Use them when their description matches the task.\n- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.\n\n<!-- From the Agent Loadout \"Handoff without compaction\" v1.0.0 — https://loadout.jnw-it.com/loadouts/agent-handoff/ -->\n"
    },
    {
      "path": "GEMINI.md",
      "role": "adapter",
      "description": "Imports AGENTS.md for Gemini CLI.",
      "skill": null,
      "agent": "gemini-cli",
      "install_to": {
        "claude-code": null,
        "codex": null,
        "cursor": null,
        "gemini-cli": "GEMINI.md",
        "antigravity-cli": null,
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/GEMINI.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/agent-handoff/latest/GEMINI.md",
      "bytes": 397,
      "lang": "markdown",
      "content": "# GEMINI.md\n\n@./AGENTS.md\n\n## Gemini CLI notes\n- Skills from this loadout live in `.agents/skills/`: `write-handoff`, `resume-from-handoff`. Use them when their description matches the task.\n- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.\n\n<!-- From the Agent Loadout \"Handoff without compaction\" v1.0.0 — https://loadout.jnw-it.com/loadouts/agent-handoff/ -->\n"
    },
    {
      "path": "skills/write-handoff/SKILL.md",
      "role": "skill",
      "description": "Write HANDOFF.md from git facts and check it.",
      "skill": "write-handoff",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/write-handoff/SKILL.md",
        "codex": ".agents/skills/write-handoff/SKILL.md",
        "cursor": ".agents/skills/write-handoff/SKILL.md",
        "gemini-cli": ".agents/skills/write-handoff/SKILL.md",
        "antigravity-cli": ".agents/skills/write-handoff/SKILL.md",
        "copilot": ".agents/skills/write-handoff/SKILL.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/SKILL.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/agent-handoff/latest/skills/write-handoff/SKILL.md",
      "bytes": 1441,
      "lang": "markdown",
      "content": "---\nname: write-handoff\ndescription: Write HANDOFF.md so a fresh session or a different agent can continue without the old context. Use before clearing or compacting context, at the end of a long session, or when switching agents or people.\n---\n\n# Write a handoff\n\n1. Gather facts, do not summarise from memory alone:\n   - `git rev-parse --abbrev-ref HEAD` and `git rev-parse --short HEAD`\n   - `git status --short` and `git diff --stat` for files touched\n   - Run the project's test command once and copy the first failing test and its exact error line.\n2. Fill in `references/HANDOFF.template.md` and save it as `HANDOFF.md` at the repository root. Keep every heading.\n   Write \"none\" rather than deleting a section.\n3. Check it: `python3 scripts/check_handoff.py HANDOFF.md`. Fix everything it reports. It checks the required\n   sections, the recorded commit against `HEAD`, length, leftover placeholders and secret-shaped strings.\n4. Tell the user where the file is and the single next step. Do not commit it unless the user asks.\n\n## Writing well\n- Goal: one sentence on what \"done\" means, in the user's words.\n- Decisions: what you chose, the alternative you rejected, and why. These are what compaction loses first.\n- Failing or open: exact test name, command and error. \"Tests flaky\" is not useful; `test_refund_rounding: expected\n  10.00, got 9.99` is.\n- Next step: one concrete action the next session can start on without asking.\n"
    },
    {
      "path": "skills/write-handoff/references/HANDOFF.template.md",
      "role": "reference",
      "description": "Handoff template with every required section.",
      "skill": "write-handoff",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/write-handoff/references/HANDOFF.template.md",
        "codex": ".agents/skills/write-handoff/references/HANDOFF.template.md",
        "cursor": ".agents/skills/write-handoff/references/HANDOFF.template.md",
        "gemini-cli": ".agents/skills/write-handoff/references/HANDOFF.template.md",
        "antigravity-cli": ".agents/skills/write-handoff/references/HANDOFF.template.md",
        "copilot": ".agents/skills/write-handoff/references/HANDOFF.template.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/references/HANDOFF.template.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/agent-handoff/latest/skills/write-handoff/references/HANDOFF.template.md",
      "bytes": 557,
      "lang": "markdown",
      "content": "# Handoff\n\n- Branch: <branch>\n- Commit: <short sha>\n- Written: <YYYY-MM-DD HH:MM timezone>\n- Owner: <who picks this up, or \"unassigned\">\n\n## Goal\n<one sentence: what done looks like>\n\n## Current state\n<what works now, what was verified and how>\n\n## Files touched\n- <path>: <what changed>\n\n## Decisions\n- <decision>: <why; alternative rejected>\n\n## Failing or open\n- <test or task>: <exact command and error, or \"none\">\n\n## Next step\n<one concrete action>\n\n## Verify with\n- <command that proves it works>\n\n## Tools and MCP servers needed\n- <name, or \"none\">\n"
    },
    {
      "path": "skills/write-handoff/scripts/check_handoff.py",
      "role": "reference",
      "description": "Checks sections, commit freshness, length and secrets.",
      "skill": "write-handoff",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/write-handoff/scripts/check_handoff.py",
        "codex": ".agents/skills/write-handoff/scripts/check_handoff.py",
        "cursor": ".agents/skills/write-handoff/scripts/check_handoff.py",
        "gemini-cli": ".agents/skills/write-handoff/scripts/check_handoff.py",
        "antigravity-cli": ".agents/skills/write-handoff/scripts/check_handoff.py",
        "copilot": ".agents/skills/write-handoff/scripts/check_handoff.py"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/scripts/check_handoff.py",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/agent-handoff/latest/skills/write-handoff/scripts/check_handoff.py",
      "bytes": 3305,
      "lang": "markdown",
      "content": "#!/usr/bin/env python3\n\"\"\"Check a HANDOFF.md before a session ends or another agent picks it up.\n\nUsage: python3 check_handoff.py [HANDOFF.md] [--max-lines 120]\nExit 0 when complete, 1 when something needs fixing. Standard library and git only; no network.\n\"\"\"\nimport re\nimport subprocess\nimport sys\nfrom pathlib import Path\n\nREQUIRED = [\"Goal\", \"Current state\", \"Files touched\", \"Decisions\", \"Failing or open\", \"Next step\", \"Verify with\"]\nSECRET = re.compile(r\"\\b(?:sk-[A-Za-z0-9_-]{20,}|gh[pousr]_[A-Za-z0-9]{30,}|AKIA[0-9A-Z]{16}|xox[abposr]-[A-Za-z0-9-]{10,})\"\n                    r\"|-----BEGIN [A-Z ]*PRIVATE\" r\" KEY-----|\\b(?:password|passwd|token|secret)\\s*[:=]\\s*\\S{8,}\", re.I)\nPLACEHOLDER = re.compile(r\"<[A-Za-z][A-Za-z0-9 ,/:\\\"'-]*>\")\n\n\ndef git(*args):\n    try:\n        return subprocess.run([\"git\", *args], capture_output=True, text=True, check=True).stdout.strip()\n    except (OSError, subprocess.CalledProcessError):\n        return None\n\n\ndef main(argv):\n    path = Path(next((a for a in argv[1:] if not a.startswith(\"--\")), \"HANDOFF.md\"))\n    max_lines = int(argv[argv.index(\"--max-lines\") + 1]) if \"--max-lines\" in argv else 120\n    if not path.is_file():\n        print(f\"FAIL {path} not found\")\n        return 1\n    text = path.read_text(encoding=\"utf-8\")\n    lines = text.splitlines()\n    problems = []\n    headings = {m.group(1).strip().lower(): i for i, l in enumerate(lines) if (m := re.match(r\"^##\\s+(.+)$\", l))}\n    for name in REQUIRED:\n        if name.lower() not in headings:\n            problems.append(f\"missing section: ## {name}\")\n            continue\n        start = headings[name.lower()] + 1\n        body = []\n        for l in lines[start:]:\n            if l.startswith(\"## \"):\n                break\n            if l.strip():\n                body.append(l)\n        if not body:\n            problems.append(f\"empty section: ## {name} (write 'none' if there is nothing)\")\n    if len(lines) > max_lines:\n        problems.append(f\"too long: {len(lines)} lines (max {max_lines}); link to files instead of pasting\")\n    for n, l in enumerate(lines, 1):\n        if PLACEHOLDER.search(l):\n            problems.append(f\"line {n}: template placeholder left in: {PLACEHOLDER.search(l).group(0)}\")\n        if SECRET.search(l):\n            problems.append(f\"line {n}: looks like a secret; remove it\")\n    m = re.search(r\"^- Commit:\\s*([0-9a-f]{7,40})\\b\", text, re.M)\n    head = git(\"rev-parse\", \"HEAD\")\n    if not m:\n        problems.append(\"no '- Commit: <sha>' line\")\n    elif head and not head.startswith(m.group(1)):\n        ahead = git(\"rev-list\", \"--count\", f\"{m.group(1)}..HEAD\")\n        problems.append(f\"stale: written at {m.group(1)}, HEAD is {head[:7]}\" + (f\" ({ahead} commits later)\" if ahead else \"\")\n                        + \"; re-check the state before trusting it\")\n    b = re.search(r\"^- Branch:\\s*(\\S+)\", text, re.M)\n    branch = git(\"rev-parse\", \"--abbrev-ref\", \"HEAD\")\n    if b and branch and b.group(1) != branch:\n        problems.append(f\"branch mismatch: handoff says {b.group(1)}, checkout is {branch}\")\n    for p in problems:\n        print(f\"FAIL {p}\")\n    if not problems:\n        print(f\"OK {path}: {len(REQUIRED)} sections, {len(lines)} lines, commit matches HEAD\")\n    return 1 if problems else 0\n\n\nif __name__ == \"__main__\":\n    sys.exit(main(sys.argv))\n"
    },
    {
      "path": "skills/resume-from-handoff/SKILL.md",
      "role": "skill",
      "description": "Start a session from HANDOFF.md: check, re-run, confirm.",
      "skill": "resume-from-handoff",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/resume-from-handoff/SKILL.md",
        "codex": ".agents/skills/resume-from-handoff/SKILL.md",
        "cursor": ".agents/skills/resume-from-handoff/SKILL.md",
        "gemini-cli": ".agents/skills/resume-from-handoff/SKILL.md",
        "antigravity-cli": ".agents/skills/resume-from-handoff/SKILL.md",
        "copilot": ".agents/skills/resume-from-handoff/SKILL.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/resume-from-handoff/SKILL.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/agent-handoff/latest/skills/resume-from-handoff/SKILL.md",
      "bytes": 1094,
      "lang": "markdown",
      "content": "---\nname: resume-from-handoff\ndescription: Pick up work from HANDOFF.md at the start of a session. Checks the handoff is current, re-runs its verify commands and confirms the next step before changing anything.\n---\n\n# Resume from a handoff\n\n1. Read `HANDOFF.md` in full before opening other files.\n2. Check it is current: `python3 .agents/skills/write-handoff/scripts/check_handoff.py HANDOFF.md` (or the same script\n   under `.claude/skills/`). If it reports \"stale\", run `git log --oneline <recorded commit>..HEAD` and read what\n   changed before trusting the \"Current state\" section.\n3. Re-run the \"Verify with\" commands. Compare the result with \"Failing or open\". Note any difference.\n4. Check the \"Tools and MCP servers needed\" are available in this agent. If one is missing, say so; do not guess.\n5. Reply to the user in two or three sentences: the goal, what you found when you re-ran the checks, and the next step\n   you propose. Wait for a yes if anything differs from the handoff.\n6. As you work, keep `HANDOFF.md` updated at natural stopping points, using the `write-handoff` skill.\n"
    }
  ],
  "requires": {
    "tools": [
      "python3",
      "git"
    ],
    "env": [],
    "mcp": []
  },
  "tested": {
    "status": "untested",
    "last_run": null,
    "fixture": null,
    "per_agent": {
      "claude-code": "untested",
      "codex": "untested",
      "cursor": "untested",
      "gemini-cli": "untested",
      "antigravity-cli": "untested",
      "copilot": "untested"
    }
  },
  "security": {
    "scanned": true,
    "scanner": "intake-precheck/1",
    "verdict": "clean",
    "network": false,
    "scripts": [
      "check_handoff.py"
    ],
    "notes": "The checker reads HANDOFF.md and runs read-only git commands. No network access. It rejects secret-shaped strings so a handoff can be shared safely."
  },
  "featured": false,
  "deprecated": false,
  "last_checked": "2026-10-17",
  "published": "2026-10-17",
  "updated": "2026-10-17",
  "compatibility": {
    "claude-code": "native",
    "codex": "native",
    "cursor": "native",
    "gemini-cli": "native",
    "antigravity-cli": "native",
    "copilot": "native"
  },
  "counts": {
    "rules": 1,
    "skills": 2,
    "mcp": 0
  },
  "url": "https://loadout.jnw-it.com/loadouts/agent-handoff/",
  "api_url": "https://loadout.jnw-it.com/api/loadouts/agent-handoff.json",
  "verification": {
    "level": "verified-install",
    "status": "verified",
    "label": "Verified install",
    "verified": true,
    "checked_at": "2026-10-17T09:35:26Z",
    "commit": "021470d33f1f82ab91e12f0c64c43ad15bac6118",
    "content_current": true,
    "agent_tests": "not-run",
    "counts": {
      "pass": 9,
      "fail": 0,
      "skip": 0,
      "not_applicable": 1
    },
    "meaning": "Level 1: automated checks on the files (parse, install paths, MCP config, safety scan, references, size, licence, starter build). No AI agent was run.",
    "checks": [
      {
        "id": "listing",
        "name": "Listing",
        "status": "pass",
        "summary": "Schema valid; 7 files declared, none missing or extra",
        "details": [
          "tested.status: untested (agent tests are separate from Level 1)"
        ]
      },
      {
        "id": "parse",
        "name": "Files parse",
        "status": "pass",
        "summary": "All 7 files parse; front matter valid",
        "details": []
      },
      {
        "id": "adapters",
        "name": "Adapters",
        "status": "pass",
        "summary": "CLAUDE.md and GEMINI.md import AGENTS.md and are up to date",
        "details": [
          "CLAUDE.md: matches the generator",
          "GEMINI.md: matches the generator"
        ]
      },
      {
        "id": "install-paths",
        "name": "Install paths",
        "status": "pass",
        "summary": "Correct paths for all 6 agents; layouts re-discovered",
        "details": [
          "Claude Code: 6 files, 2 skills in .claude/skills/",
          "Codex CLI: 5 files, 2 skills in .agents/skills/",
          "Cursor: 5 files, 2 skills in .agents/skills/",
          "Gemini CLI: 6 files, 2 skills in .agents/skills/",
          "Antigravity CLI: 5 files, 2 skills in .agents/skills/",
          "GitHub Copilot: 5 files, 2 skills in .agents/skills/"
        ]
      },
      {
        "id": "mcp",
        "name": "MCP config",
        "status": "n/a",
        "summary": "No MCP servers in this loadout",
        "details": []
      },
      {
        "id": "safety",
        "name": "Safety scan",
        "status": "pass",
        "summary": "Clean: no credentials, risky shell or hidden text",
        "details": [
          "Scanner intake-precheck/1: verdict clean; network no (listing says no)"
        ]
      },
      {
        "id": "references",
        "name": "References",
        "status": "pass",
        "summary": "4 references between files resolve for every agent",
        "details": []
      },
      {
        "id": "size",
        "name": "Size limits",
        "status": "pass",
        "summary": "7 files, 8.8 KB total; largest skills/write-handoff/scripts/check_handoff.py 3.2 KB",
        "details": [
          "Limits: 30 files, 32 KB per file, 128 KB total, 500 lines per skill or rule"
        ]
      },
      {
        "id": "licence",
        "name": "Licence",
        "status": "pass",
        "summary": "MIT, by Agent Loadout; text in the repository LICENSE",
        "details": []
      },
      {
        "id": "starter-build",
        "name": "Starter build",
        "status": "pass",
        "summary": "The write-handoff checker rejects the bare template, passes a filled HANDOFF.md at the current commit, then flags it as stale after a new commit, and catches a pasted password and a missing section",
        "details": [
          "Applied 11 loadout files at every agent's paths",
          "✓ set up a repo: bash -c git init -q -b fix-refunds && echo 'x = 1' > calc.py && git add calc.py && git commit -qm start && echo repo ready",
          "✓ bare template is rejected: bash -c cp .agents/skills/write-handoff/references/HANDOFF.template.md HANDOFF.md && python3 .agents/skills/write-handoff/scripts/check_handoff.py HANDOFF.md; echo \"exit=$?\"",
          "✓ filled handoff passes: bash -c bash filled.sh && python3 .agents/skills/write-handoff/scripts/check_handoff.py HANDOFF.md",
          "✓ handoff goes stale after a commit: bash -c echo 'x = 2' > calc.py && git commit -qam more && python3 .agents/skills/write-handoff/scripts/check_handoff.py; echo \"exit=$?\"",
          "✓ password and missing section are caught: bash -c bash filled.sh >/dev/null && sed -i 's/^- none$/- password: hunter2hunter2/' HANDOFF.md && sed -i '/^## Decisions/,/^## Failing/{/^## Failing/!d}' HANDOFF.md && python3 .agents/skills/write-handoff/scripts/check_handoff.py; echo \"exit=$?\"",
          "Covers: Required sections, placeholders and length",
          "Covers: Recorded commit compared with HEAD, with the number of commits since",
          "Covers: Secret-shaped strings rejected before a handoff is shared"
        ]
      }
    ]
  },
  "install": {
    "claude-code": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "CLAUDE.md",
          "target": "CLAUDE.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/CLAUDE.md",
          "role": "adapter"
        },
        {
          "path": "skills/write-handoff/SKILL.md",
          "target": ".claude/skills/write-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-handoff/references/HANDOFF.template.md",
          "target": ".claude/skills/write-handoff/references/HANDOFF.template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/references/HANDOFF.template.md",
          "role": "reference"
        },
        {
          "path": "skills/write-handoff/scripts/check_handoff.py",
          "target": ".claude/skills/write-handoff/scripts/check_handoff.py",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/scripts/check_handoff.py",
          "role": "reference"
        },
        {
          "path": "skills/resume-from-handoff/SKILL.md",
          "target": ".claude/skills/resume-from-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/resume-from-handoff/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/agent-handoff/claude-code.zip"
    },
    "codex": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/write-handoff/SKILL.md",
          "target": ".agents/skills/write-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-handoff/references/HANDOFF.template.md",
          "target": ".agents/skills/write-handoff/references/HANDOFF.template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/references/HANDOFF.template.md",
          "role": "reference"
        },
        {
          "path": "skills/write-handoff/scripts/check_handoff.py",
          "target": ".agents/skills/write-handoff/scripts/check_handoff.py",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/scripts/check_handoff.py",
          "role": "reference"
        },
        {
          "path": "skills/resume-from-handoff/SKILL.md",
          "target": ".agents/skills/resume-from-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/resume-from-handoff/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/agent-handoff/codex.zip"
    },
    "cursor": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/write-handoff/SKILL.md",
          "target": ".agents/skills/write-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-handoff/references/HANDOFF.template.md",
          "target": ".agents/skills/write-handoff/references/HANDOFF.template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/references/HANDOFF.template.md",
          "role": "reference"
        },
        {
          "path": "skills/write-handoff/scripts/check_handoff.py",
          "target": ".agents/skills/write-handoff/scripts/check_handoff.py",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/scripts/check_handoff.py",
          "role": "reference"
        },
        {
          "path": "skills/resume-from-handoff/SKILL.md",
          "target": ".agents/skills/resume-from-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/resume-from-handoff/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/agent-handoff/cursor.zip"
    },
    "gemini-cli": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "GEMINI.md",
          "target": "GEMINI.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/GEMINI.md",
          "role": "adapter"
        },
        {
          "path": "skills/write-handoff/SKILL.md",
          "target": ".agents/skills/write-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-handoff/references/HANDOFF.template.md",
          "target": ".agents/skills/write-handoff/references/HANDOFF.template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/references/HANDOFF.template.md",
          "role": "reference"
        },
        {
          "path": "skills/write-handoff/scripts/check_handoff.py",
          "target": ".agents/skills/write-handoff/scripts/check_handoff.py",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/scripts/check_handoff.py",
          "role": "reference"
        },
        {
          "path": "skills/resume-from-handoff/SKILL.md",
          "target": ".agents/skills/resume-from-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/resume-from-handoff/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/agent-handoff/gemini-cli.zip"
    },
    "antigravity-cli": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/write-handoff/SKILL.md",
          "target": ".agents/skills/write-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-handoff/references/HANDOFF.template.md",
          "target": ".agents/skills/write-handoff/references/HANDOFF.template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/references/HANDOFF.template.md",
          "role": "reference"
        },
        {
          "path": "skills/write-handoff/scripts/check_handoff.py",
          "target": ".agents/skills/write-handoff/scripts/check_handoff.py",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/scripts/check_handoff.py",
          "role": "reference"
        },
        {
          "path": "skills/resume-from-handoff/SKILL.md",
          "target": ".agents/skills/resume-from-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/resume-from-handoff/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/agent-handoff/antigravity-cli.zip"
    },
    "copilot": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/write-handoff/SKILL.md",
          "target": ".agents/skills/write-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/write-handoff/references/HANDOFF.template.md",
          "target": ".agents/skills/write-handoff/references/HANDOFF.template.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/references/HANDOFF.template.md",
          "role": "reference"
        },
        {
          "path": "skills/write-handoff/scripts/check_handoff.py",
          "target": ".agents/skills/write-handoff/scripts/check_handoff.py",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/write-handoff/scripts/check_handoff.py",
          "role": "reference"
        },
        {
          "path": "skills/resume-from-handoff/SKILL.md",
          "target": ".agents/skills/resume-from-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/agent-handoff/1.0.0/skills/resume-from-handoff/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/agent-handoff/copilot.zip"
    }
  },
  "source_zip_url": "https://loadout.jnw-it.com/download/agent-handoff/source.zip"
}