{
  "markdown": "# Nullshot Plugin\n\nPlan, inspect, and operate [Nullshot](https://nullshot.ai) from your coding agent. The plugin connects to Nullshot's OAuth-protected MCP gateway at `https://mcp.nullshot.ai/mcp`, loads planning skills derived from Spek Kit, and keeps specifications and task DAGs live in a Nullshot Jam.\n\n## One-command bootstrap\n\nPaste the command for your client as one line. Clients with terminal OAuth support open the Nullshot login during the command; the others request OAuth when Nullshot is first used.\n\n| Client | Paste once |\n| --- | --- |\n| Codex terminal | `codex mcp add nullshot --url \"${NULLSHOT_MCP_URL:-https://mcp.nullshot.ai/mcp}\" && codex mcp login nullshot` |\n| Claude Code terminal | `claude plugin marketplace add null-shot/plugin && claude plugin install nullshot@nullshot && claude mcp login plugin:nullshot:nullshot` |\n| Cursor | `null-shot/plugin` into Dashboard → Plugins → Add Marketplace → Import from Repo |\n| Kimi chat | `/plugins install https://github.com/null-shot/plugin` |\n| Gemini terminal | `gemini extensions install https://github.com/null-shot/plugin --consent` |\n| OpenCode terminal | `curl -fsSL https://raw.githubusercontent.com/null-shot/plugin/main/scripts/install-opencode.sh \\| sh` |\n| Pi terminal | `pi install git:github.com/null-shot/plugin@v0.3.0` |\n\nCodex's bootstrap registers the MCP server and signs in; its plugin bundle,\nwhich carries the skills, is installed from the `/plugins` browser inside Codex.\nCodex has no documented terminal command for adding a marketplace, so there is\nnothing to paste for that half — the two `codex plugin` commands this table used\nto list are not commands Codex has.\n\nCursor and Gemini discover OAuth automatically when the MCP server first\nreturns `401 Unauthorized` — true for Cursor only now that its manifest declares\na server for one to come from.\n\nCursor installs from a dashboard rather than a command — it documents no slash\nor CLI equivalent — but what it installs is now the whole plugin. The Cursor\nmanifest declares the skills, the commands, and an `mcpServers` entry for the\ngateway, which is the shape Cursor's own first-party remote-MCP plugins use and\nwhich validates against [Cursor's published plugin schema](https://github.com/cursor/plugins/blob/main/schemas/plugin.schema.json).\nIt previously declared skills alone, so a Cursor user who completed the flow got\nskills that named tools their editor had no server to call — the least obvious\nway to be broken, because everything looks installed.\n\nThat server's URL is fixed at production (see below). On any other environment,\nuse the one-click Cursor button in Nullshot's own Connect panel, which writes\nthat environment's gateway for you. Kimi applies the plugin in a new session; if it reports that authorization is required, run `/mcp-config login plugin-nullshot:nullshot`. Pi exposes the equivalent interactive action as `/mcp-auth nullshot`.\n\n## Choosing an environment\n\nThe plugin talks to production, `https://mcp.nullshot.ai/mcp`, unless\n`NULLSHOT_MCP_URL` says otherwise:\n\n```bash\nexport NULLSHOT_MCP_URL=\"https://mcp-gateway-test.devaccounts-1password.workers.dev/mcp\"\n```\n\nSet it before the bootstrap command, and keep it set for the sessions that\nshould use that gateway. Nullshot runs separate production, test, preview and\nlocal gateways, and each has its own accounts, jams and grants — so an agent\npointed at the wrong one reads and writes the wrong environment's data while\nappearing to work normally. Production stays the default, so an existing\ninstall is unaffected by this.\n\nClaude Code reads it through its plugin manifest, where `${VAR:-default}`\nexpansion is supported for an HTTP server's `url`. The OpenCode and Pi adapters\nresolve it in code.\n\nCodex reads the variable too, but through the shell rather than through Codex:\nits bootstrap passes the URL as a command-line argument, so `${NULLSHOT_MCP_URL:-...}`\nis expanded before Codex ever sees it. Codex itself does not expand `${VAR}` in\nMCP configuration (`openai/codex#2680` and `#7521` are open requests for it),\nwhich is why `plugins/nullshot/.mcp.json` stays a plain URL — an unexpanded\n`${...}` written into a config file would register a broken server, which is\nworse than one that cannot change environment.\n\nCursor, Kimi and Gemini are **production-only**. Their manifests are static.\nCursor does support manifest `variables`, but they are values the user is\nprompted for with no default — an unset one would register a literally\nunexpanded `${...}` as the server URL, which is a broken server rather than a\nmovable one. Nullshot's Connect panel offers Cursor a one-click install carrying\nthe right URL for whichever environment you opened it in, so nothing is lost.\n\n## Workflow\n\n1. Authenticate and select a Jam with `set_active_jam_context`.\n2. Use `using-nullshot` to load Jam context and relevant remote skills.\n3. Shape the product intent with `shaping-nullshot-context` and `creating-nullshot-specs`.\n4. Write the reviewed task DAG with `writing-nullshot-plans`; the goal and tasks are replaced atomically using revision checks.\n5. Use `operating-nullshot` for explicit build work. The connected coding agent edits and commits the Jam app directly by default; `send_jam_prompt` is an optional hosted-delegation path.\n\nCreating a Jam never starts a hosted prompt. A clear request to build, implement, fix, or create an app or feature carries execution authorization through spec and plan, so the coding agent does not ask for a redundant second start message. Planning-only requests still stop before implementation. Direct execution avoids additional Nullshot-hosted agent usage but may use the coding client's own model subscription or API budget.\n\nFor example, “create a todo app” creates a prompt-free Jam in planning, synchronizes the specification and task DAG, then has the connected coding agent edit and commit the Jam app. The agent marks each plan task in progress and complete through the MCP so the Spek visualization stays current. It calls `send_jam_prompt` only if hosted execution is deliberately selected.\n\nThe plugin does not ship coding-method skills or a local Spek visualization server. Nullshot Jam is the source of truth for the live specification and plan.\n\n## Repository layout\n\n- `plugins/nullshot/` is the canonical Codex and Claude plugin bundle.\n- Root manifests adapt that bundle for Cursor, Kimi, Gemini, OpenCode, and Pi.\n- `scripts/validate.mjs` verifies manifests, paths, skills, and the canonical MCP URL.\n\n## Development\n\n```bash\npnpm install\npnpm test\npnpm validate\n```\n\nSee [NOTICE](NOTICE) for Spek Kit, Spec Kit, Superpowers, and Pi MCP adapter attribution.\n",
  "bytes": 6656,
  "sha": "f973de415bc96fefb5b8a8d3e43ea83c228a0be0791450a9a68925f2fe581cea",
  "repo_slug": "null-shot/plugin",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_null_shot_plugin_2a0ce382/readme"
}