{
  "id": "vibe-coding-guardrails",
  "type": "loadout",
  "title": "Vibe-coding guard rails",
  "summary": "A stack-agnostic working style for coding agents — plan first, small diffs, never delete tests to go green — plus handoff notes and up-to-date docs via MCP.",
  "description": "The general-purpose loadout to drop into any project you vibe-code. It fixes the habits that make\nagent sessions go wrong: diving in without a plan, 40-file diffs, \"fixing\" a failing test by deleting\nit, inventing APIs from stale training data, and losing all context when the session ends. Pairs well\nwith any stack-specific loadout.\n",
  "highlights": [
    "Plan-then-build skill that writes a short plan and waits for a thumbs up",
    "Small, reviewable changes with a commit after each working step",
    "Hard rules against weakening tests, silencing errors or adding surprise dependencies",
    "Session-handoff skill that leaves a NOTES.md the next session (or agent) can pick up",
    "Context7 MCP config for current library docs instead of guesses"
  ],
  "version": "1.0.0",
  "license": "MIT",
  "author": {
    "name": "Agent Loadout",
    "url": "https://loadout.jnw-it.com"
  },
  "categories": [
    "workflow"
  ],
  "stacks": [
    "any"
  ],
  "files": [
    {
      "path": "AGENTS.md",
      "role": "instructions",
      "description": "Working-style rules for any coding agent.",
      "skill": null,
      "agent": null,
      "install_to": {
        "claude-code": "AGENTS.md",
        "codex": "AGENTS.md",
        "cursor": "AGENTS.md",
        "gemini-cli": "AGENTS.md",
        "copilot": "AGENTS.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/AGENTS.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/latest/AGENTS.md",
      "bytes": 2199,
      "lang": "markdown",
      "content": "# AGENTS.md: working agreement\n\nHow to work in this repository, whatever the stack. Project-specific rules, if any, take precedence.\n\n## Before you start\n- Read the README and any `NOTES.md` handoff file first.\n- For anything bigger than a small fix (more than ~3 files, a new feature, a refactor, a dependency change),\n  use the `plan-then-build` skill: write a short plan and wait for the human to agree.\n- If the request is ambiguous, ask one focused question rather than guessing big.\n\n## While you work\n- **Small steps.** Make one change that works, verify it, then the next. Prefer several small diffs to one huge one.\n- **Stay in scope.** Do not reformat, rename or \"tidy\" code you were not asked to touch. Mention improvements instead.\n- **Follow what is there.** Match the existing structure, naming, libraries and patterns before introducing new ones.\n- **Check, don't guess, APIs.** If you are not certain a function or option exists in the installed version, look it up:\n  check `package.json`/lockfile for the version, read the library's docs (the Context7 MCP server helps), or read the source in `node_modules`.\n- **Commit after each working step** if the human uses git that way, with a message saying what and why.\n\n## Hard rules\n- Never delete, skip or weaken a test to make it pass. If a test is wrong, say so and explain why before changing it.\n- Never silence errors to make something \"work\": no empty `catch`, no `// @ts-ignore`, no `# type: ignore`, no `eslint-disable` without a reason in the comment.\n- Never add a dependency without saying so and why. Prefer what the platform or existing deps already provide.\n- Never run destructive commands (`rm -rf`, `git reset --hard`, `git push --force`, dropping databases) without explicit permission.\n- Never commit secrets or `.env` files.\n- Never claim something works without running it. If you could not run it, say \"not run\" plainly.\n\n## When you finish\n- Run the project's checks (lint, type-check, tests, build — whatever exists).\n- Summarise in a few lines: what changed, how you verified it, anything left undone or risky, and what the human should try.\n- For long sessions, use `session-handoff` to update `NOTES.md`.\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,
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/CLAUDE.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/latest/CLAUDE.md",
      "bytes": 527,
      "lang": "markdown",
      "content": "# CLAUDE.md\n\n@AGENTS.md\n\n## Claude Code notes\n- Skills from this loadout live in `.claude/skills/`: `plan-then-build`, `session-handoff`. Use them when their description matches the task.\n- MCP servers for this project are in `.mcp.json`. If a server is not connected, tell the human rather than working around it.\n- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.\n\n<!-- From the Agent Loadout \"Vibe-coding guard rails\" v1.0.0 — https://loadout.jnw-it.com/loadouts/vibe-coding-guardrails/ -->\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",
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/GEMINI.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/latest/GEMINI.md",
      "bytes": 401,
      "lang": "markdown",
      "content": "# GEMINI.md\n\n@./AGENTS.md\n\n## Gemini CLI notes\n- Skills from this loadout live in `.agents/skills/`: `plan-then-build`, `session-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 \"Vibe-coding guard rails\" v1.0.0 — https://loadout.jnw-it.com/loadouts/vibe-coding-guardrails/ -->\n"
    },
    {
      "path": ".cursor/rules/guardrails.mdc",
      "role": "rules",
      "description": "Always-on Cursor rule with the hard guard rails.",
      "skill": null,
      "agent": null,
      "install_to": {
        "claude-code": null,
        "codex": null,
        "cursor": ".cursor/rules/guardrails.mdc",
        "gemini-cli": null,
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/.cursor/rules/guardrails.mdc",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/latest/.cursor/rules/guardrails.mdc",
      "bytes": 631,
      "lang": "markdown",
      "content": "---\ndescription: Hard guard rails for agent changes\nalwaysApply: true\n---\n\n- Never delete, skip or weaken tests to get a green run. Explain if you think a test is wrong.\n- No empty catch blocks, `@ts-ignore`, `type: ignore` or lint disables without a written reason.\n- Do not add dependencies without saying which and why.\n- Do not run destructive shell or git commands without explicit permission.\n- Do not touch files unrelated to the task. Mention suggested clean-ups instead.\n- Verify before claiming success; say \"not run\" if you could not run something.\n- For multi-file or architectural changes, propose a short plan first.\n"
    },
    {
      "path": "skills/plan-then-build/SKILL.md",
      "role": "skill",
      "description": "Writes a short plan for non-trivial work and waits for approval.",
      "skill": "plan-then-build",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/plan-then-build/SKILL.md",
        "codex": ".agents/skills/plan-then-build/SKILL.md",
        "cursor": ".agents/skills/plan-then-build/SKILL.md",
        "gemini-cli": ".agents/skills/plan-then-build/SKILL.md",
        "copilot": ".agents/skills/plan-then-build/SKILL.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/plan-then-build/SKILL.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/latest/skills/plan-then-build/SKILL.md",
      "bytes": 1648,
      "lang": "markdown",
      "content": "---\nname: plan-then-build\ndescription: Write a short implementation plan and get approval before building. Use for new features, refactors, multi-file changes, dependency changes, or whenever the request is big or vague.\n---\n\n# Plan, then build\n\n## 1. Look before planning (keep it quick)\nRead the files you expect to change and their neighbours. Find the existing pattern for this kind of change\n(how other routes, components or commands are structured). Check installed versions of anything you will rely on.\n\n## 2. Write the plan\nKeep it under ~20 lines. Use this shape:\n\n```\nGoal: <one sentence, in the human's terms>\nApproach: <two or three sentences>\nChanges:\n  1. <file> — <what and why>\n  2. <file> — <what and why>\nNew dependencies: none | <name> (<why>)\nOut of scope: <things you will deliberately not do>\nRisks / questions: <anything you are unsure of; at most three>\nHow I'll verify: <commands or manual checks>\n```\n\nIf there is a real choice to make (two reasonable approaches), give both in one line each with your recommendation.\n\n## 3. Stop and wait\nAsk: \"Shall I go ahead?\" Do not start editing until the human agrees or adjusts the plan.\nIf they say \"just do it\" for this kind of task in future, you may skip waiting for similar small tasks in the same session.\n\n## 4. Build in the order of the plan\n- Do the steps in order, verifying as you go.\n- If you discover the plan is wrong (a hidden dependency, a bigger change than expected), stop, explain, and re-plan.\n  Do not quietly expand the scope.\n\n## 5. Close out\nReport against the plan: each step done or not, how it was verified, and anything that changed from the plan.\n"
    },
    {
      "path": "skills/session-handoff/SKILL.md",
      "role": "skill",
      "description": "Leaves a handoff note at the end of a session.",
      "skill": "session-handoff",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/session-handoff/SKILL.md",
        "codex": ".agents/skills/session-handoff/SKILL.md",
        "cursor": ".agents/skills/session-handoff/SKILL.md",
        "gemini-cli": ".agents/skills/session-handoff/SKILL.md",
        "copilot": ".agents/skills/session-handoff/SKILL.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/session-handoff/SKILL.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/latest/skills/session-handoff/SKILL.md",
      "bytes": 1278,
      "lang": "markdown",
      "content": "---\nname: session-handoff\ndescription: Write or update NOTES.md so the next session or another agent can continue the work. Use at the end of a long session, before context runs out, or when the user says they are stopping for now.\n---\n\n# Session handoff\n\nUpdate (or create) `NOTES.md` at the repository root. Replace the \"Current state\" section; append to \"Log\".\nKeep the whole file short enough to read in a minute. Do not include secrets, tokens or personal data.\n\n```markdown\n# Notes\n\n## Current state (updated <YYYY-MM-DD>)\n- Working on: <the feature/bug, one line>\n- Done this session: <bullets, with file paths>\n- In progress: <what is half-finished and where; say if the build is currently broken>\n- Next steps: <ordered list, small enough to start immediately>\n- Decisions: <choices made and why, so they are not relitigated>\n- Gotchas: <surprising things learned: env quirks, flaky tests, API oddities>\n\n## How to run\n<the commands that actually work right now: install, dev, test, build>\n\n## Log\n- <YYYY-MM-DD>: <one line per session>\n```\n\nThen:\n1. Run `git status` and mention any uncommitted changes. Suggest a commit message, but do not commit unless asked.\n2. Tell the human, in two or three lines, where things stand and what the next session should start with.\n"
    },
    {
      "path": "mcp.json",
      "role": "mcp",
      "description": "Context7 hosted MCP server for current library documentation.",
      "skill": null,
      "agent": null,
      "install_to": {
        "claude-code": ".mcp.json",
        "codex": null,
        "cursor": ".cursor/mcp.json",
        "gemini-cli": null,
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/mcp.json",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/latest/mcp.json",
      "bytes": 116,
      "lang": "json",
      "content": "{\n  \"mcpServers\": {\n    \"context7\": {\n      \"type\": \"http\",\n      \"url\": \"https://mcp.context7.com/mcp\"\n    }\n  }\n}\n"
    }
  ],
  "requires": {
    "tools": [
      "git"
    ],
    "env": [],
    "mcp": [
      "context7"
    ]
  },
  "tested": {
    "status": "untested",
    "last_run": null,
    "fixture": null,
    "per_agent": {
      "claude-code": "untested",
      "codex": "untested",
      "cursor": "untested",
      "gemini-cli": "untested",
      "copilot": "untested"
    }
  },
  "security": {
    "scanned": true,
    "scanner": "intake-precheck/1",
    "verdict": "clean",
    "network": true,
    "scripts": [],
    "notes": "The MCP config connects to Context7's hosted documentation server. Library names you look up are sent to it."
  },
  "featured": true,
  "deprecated": false,
  "last_checked": "2026-10-15",
  "published": "2026-10-15",
  "updated": "2026-10-15",
  "compatibility": {
    "claude-code": "native",
    "codex": "adapter",
    "cursor": "native",
    "gemini-cli": "adapter",
    "copilot": "adapter"
  },
  "counts": {
    "rules": 2,
    "skills": 2,
    "mcp": 1
  },
  "url": "https://loadout.jnw-it.com/loadouts/vibe-coding-guardrails/",
  "api_url": "https://loadout.jnw-it.com/api/loadouts/vibe-coding-guardrails.json",
  "verification": {
    "level": "verified-install",
    "status": "verified",
    "label": "Verified install",
    "verified": true,
    "checked_at": "2026-10-16T22:54:03Z",
    "commit": "ad36e852567aa3c87821d2a9e2fe4052fd983374",
    "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 5 agents; layouts re-discovered",
        "details": [
          "Claude Code: 5 files, 2 skills in .claude/skills/, MCP at .mcp.json",
          "Codex CLI: 3 files, 2 skills in .agents/skills/, MCP manual step",
          "Cursor: 5 files, 2 skills in .agents/skills/, 1 rule, MCP at .cursor/mcp.json",
          "Gemini CLI: 4 files, 2 skills in .agents/skills/, MCP manual step",
          "GitHub Copilot: 3 files, 2 skills in .agents/skills/, MCP manual step"
        ]
      },
      {
        "id": "mcp",
        "name": "MCP config",
        "status": "pass",
        "summary": "1 server valid: context7",
        "details": [
          "mcp.json → context7: mcp.context7.com is reachable over HTTPS",
          "Converts to Codex config.toml, Gemini CLI settings.json and VS Code mcp.json"
        ]
      },
      {
        "id": "safety",
        "name": "Safety scan",
        "status": "pass",
        "summary": "Clean: no credentials, risky shell or hidden text",
        "details": [
          "Scanner intake-precheck/1: verdict clean; network yes (listing says yes)",
          "info mcp-server in mcp.json: context7: url https://mcp.context7.com/mcp"
        ]
      },
      {
        "id": "references",
        "name": "References",
        "status": "pass",
        "summary": "2 references between files resolve for every agent",
        "details": []
      },
      {
        "id": "size",
        "name": "Size limits",
        "status": "pass",
        "summary": "7 files, 6.6 KB total; largest AGENTS.md 2.1 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": "n/a",
        "summary": "Not applicable: stack-agnostic working rules with no project or code to build",
        "details": [
          "The loadout is working agreements, two workflow skills and a hosted MCP server; there is no starter project or code example to compile.",
          "The MCP config is still checked structurally and its URL is checked for reachability.",
          "Every other Level 1 check still runs on this loadout."
        ]
      }
    ]
  },
  "install": {
    "claude-code": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "CLAUDE.md",
          "target": "CLAUDE.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/CLAUDE.md",
          "role": "adapter"
        },
        {
          "path": "skills/plan-then-build/SKILL.md",
          "target": ".claude/skills/plan-then-build/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/plan-then-build/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/session-handoff/SKILL.md",
          "target": ".claude/skills/session-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/session-handoff/SKILL.md",
          "role": "skill"
        },
        {
          "path": "mcp.json",
          "target": ".mcp.json",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/mcp.json",
          "role": "mcp"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/vibe-coding-guardrails/claude-code.zip"
    },
    "codex": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/plan-then-build/SKILL.md",
          "target": ".agents/skills/plan-then-build/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/plan-then-build/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/session-handoff/SKILL.md",
          "target": ".agents/skills/session-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/session-handoff/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [
        {
          "path": "mcp.json",
          "note": "Codex reads MCP servers from ~/.codex/config.toml (TOML, not JSON). Add each server with `codex mcp add` or copy the URL into an [mcp_servers.<name>] table.",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/mcp.json"
        }
      ],
      "zip_url": "https://loadout.jnw-it.com/download/vibe-coding-guardrails/codex.zip"
    },
    "cursor": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": ".cursor/rules/guardrails.mdc",
          "target": ".cursor/rules/guardrails.mdc",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/.cursor/rules/guardrails.mdc",
          "role": "rules"
        },
        {
          "path": "skills/plan-then-build/SKILL.md",
          "target": ".agents/skills/plan-then-build/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/plan-then-build/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/session-handoff/SKILL.md",
          "target": ".agents/skills/session-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/session-handoff/SKILL.md",
          "role": "skill"
        },
        {
          "path": "mcp.json",
          "target": ".cursor/mcp.json",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/mcp.json",
          "role": "mcp"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/vibe-coding-guardrails/cursor.zip"
    },
    "gemini-cli": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "GEMINI.md",
          "target": "GEMINI.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/GEMINI.md",
          "role": "adapter"
        },
        {
          "path": "skills/plan-then-build/SKILL.md",
          "target": ".agents/skills/plan-then-build/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/plan-then-build/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/session-handoff/SKILL.md",
          "target": ".agents/skills/session-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/session-handoff/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [
        {
          "path": "mcp.json",
          "note": "Gemini CLI reads MCP servers from the mcpServers block of .gemini/settings.json. Merge the servers in by hand, and use httpUrl instead of url for HTTP servers.",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/mcp.json"
        }
      ],
      "zip_url": "https://loadout.jnw-it.com/download/vibe-coding-guardrails/gemini-cli.zip"
    },
    "copilot": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/plan-then-build/SKILL.md",
          "target": ".agents/skills/plan-then-build/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/plan-then-build/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/session-handoff/SKILL.md",
          "target": ".agents/skills/session-handoff/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/skills/session-handoff/SKILL.md",
          "role": "skill"
        }
      ],
      "manual_steps": [
        {
          "path": "mcp.json",
          "note": "In VS Code, MCP servers go in .vscode/mcp.json under a \"servers\" key (not \"mcpServers\"). Copilot CLI uses ~/.copilot/mcp-config.json.",
          "raw_url": "https://loadout.jnw-it.com/raw/vibe-coding-guardrails/1.0.0/mcp.json"
        }
      ],
      "zip_url": "https://loadout.jnw-it.com/download/vibe-coding-guardrails/copilot.zip"
    }
  },
  "source_zip_url": "https://loadout.jnw-it.com/download/vibe-coding-guardrails/source.zip"
}