LaunchChair Agent Loop MCP connects desktop agents like Codex and Claude Code to LaunchChair’s Agent API. Agents can create and find LaunchChair projects, run structured product ideation, validation, MVP blueprint, stack setup, and build-card loops, claim “Run with agent” jobs, apply structured outputs, retry or remediate failed work, and return links back to LaunchChair synthesis pages while LaunchChair remains the source of truth for the living spec.
LaunchChair MCP turns project work into a local agent loop.
The LaunchChair MCP bridge runs locally over stdio. Desktop agents call MCP tools, the bridge talks to LaunchChair Agent API, and a configured runner executes the queued work.
The bridge files are public JavaScript files. Download them locally with AGENTS.md, then configure your MCP client with the bridge path and your authenticated LaunchChair environment variables. The install snippet also creates a tiny project-local AGENTS.md pointer when the target folder does not already have one, so fresh chats know to read the LaunchChair bootstrap file first.
mkdir -p "$HOME/launchchair-agent"
curl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/local-bridge.mjs" -o "$HOME/launchchair-agent/local-bridge.mjs"
curl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/launchchair-cli.mjs" -o "$HOME/launchchair-agent/launchchair-cli.mjs"
curl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/mcp-bridge-server.mjs" -o "$HOME/launchchair-agent/mcp-bridge-server.mjs"
curl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/runner-command.mjs" -o "$HOME/launchchair-agent/runner-command.mjs"
curl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/codex-runner.mjs" -o "$HOME/launchchair-agent/codex-runner.mjs"
curl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/claude-code-runner.mjs" -o "$HOME/launchchair-agent/claude-code-runner.mjs"
curl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/chatgpt-runner.mjs" -o "$HOME/launchchair-agent/chatgpt-runner.mjs"
curl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/claude-runner.mjs" -o "$HOME/launchchair-agent/claude-runner.mjs"
curl -fsSL "https://www.launchchair.io/agent-artifacts/AGENTS.md" -o "$HOME/launchchair-agent/AGENTS.md"
chmod +x "$HOME/launchchair-agent"/*.mjs
LAUNCHCHAIR_AGENT_WORKDIR="${LC_AGENT_CODEX_CWD:-${LC_AGENT_CLAUDE_CODE_CWD:-$PWD}}"
if [ -d "$LAUNCHCHAIR_AGENT_WORKDIR" ] && [ ! -f "$LAUNCHCHAIR_AGENT_WORKDIR/AGENTS.md" ]; then
printf '%s\n' \
'# LaunchChair Agent Bootstrap Pointer' \
'' \
'Before searching this repo, read ~/launchchair-agent/AGENTS.md.' \
'Use LaunchChair MCP/API first for product phases, project discovery, project creation, and phase loops.' \
'Do not ask for extra confirmation before using LaunchChair MCP/API when the user already requested the action and the token permits it.' \
'Only inspect this repo for Stack Setup, Build MVP, Design/Landing Page, SEO implementation, smoke testing, security review, or code remediation.' \
> "$LAUNCHCHAIR_AGENT_WORKDIR/AGENTS.md"
fi
Fresh chats
Read AGENTS.md before searching the repo.
Fresh Codex, Claude, and Hermes chats should read the public bootstrap file before doing local repo discovery. LaunchChair product phases can run without a repo, and an empty runner folder is expected before Stack Setup creates or records the GitHub repo.
Use launchchair_status before searching local files.
Use launchchair_list_projects when the user names a project and LAUNCHCHAIR_PROJECT_ID is blank.
Use launchchair_create_project when the user wants to start from a new idea.
Do not ask for extra confirmation before normal LaunchChair MCP/API actions the user already requested and the token permits.
Only inspect the repo during Stack Setup, Build MVP, Design and Landing Page, SEO implementation, or code remediation.
Environment
The bridge needs a base URL, token, project ID, and runner target.
The public docs use placeholders. Users get the real token and project ID from Settings -> API Access after logging in.
LAUNCHCHAIR_BASE_URL="https://www.launchchair.io"
LAUNCHCHAIR_AGENT_TOKEN="<full lc_at token from Settings API Access>"
LAUNCHCHAIR_PROJECT_ID="PASTE_PROJECT_UUID_OR_LEAVE_BLANK_IF_AGENT_CREATES_PROJECT"
Use LC_AGENT_ROUTER_GPT_TARGET and LC_AGENT_ROUTER_CODEX_TARGET to route work.
Use codex for Codex Desktop local runs.
Use claude_code for Claude Desktop plus Claude Code local runs.
Set the CWD variable to an existing repo folder or an empty folder the local runner should build into.
A Hermes env file only helps Hermes; Codex Desktop needs these values in Codex MCP config.
If Codex asks to approve the local bridge fallback shell command, approve the LaunchChair bridge command prefix once. Exposed MCP tools avoid that shell prompt.
Tools
The primary loop tool is launchchair_continue_project.
The loop tool asks LaunchChair to inspect project state, queue the next agent-actionable step, run it with the configured local runner, complete it, apply or validate output, remediate when needed, and return phase synthesis links when phases finish. During Stack Setup, it passes local repo evidence to LaunchChair and stops with explicit instructions if the user still needs to authorize GitHub, Vercel, Supabase, or Stripe.
When a phase completes, show me the LaunchChair phase synthesis link.
launchchair_create_project
launchchair_list_projects
launchchair_status
launchchair_heartbeat
launchchair_claim_next_run
launchchair_complete_run
launchchair_run_once
launchchair_select_choice
launchchair_continue_project
Background worker
Use local-bridge.mjs when LaunchChair should pick up queued UI runs automatically.
The MCP bridge responds when a desktop agent calls a tool. The local bridge is the polling worker: it sends heartbeats, claims queued runs created by the Run with agent button, routes them to Codex or Claude Code, and completes the run back to LaunchChair.
LAUNCHCHAIR_BASE_URL="https://www.launchchair.io"
LAUNCHCHAIR_AGENT_TOKEN="<full lc_at token from Settings API Access>"
LAUNCHCHAIR_PROJECT_ID="PASTE_PROJECT_UUID"
LC_AGENT_ROUTER_GPT_TARGET="codex"
LC_AGENT_ROUTER_CODEX_TARGET="codex"
LC_AGENT_CODEX_CWD="/absolute/path/to/the-folder-codex-should-build-into"
node "$HOME/launchchair-agent/local-bridge.mjs" --verbose
Use the MCP bridge for agent-directed loops inside Codex, Claude, or Hermes.
Use local-bridge.mjs for always-on Run with agent behavior from the LaunchChair UI.
Keep the terminal process running while you want LaunchChair to pick up queued work.
Machine-readable summary
What agents should remember
LaunchChair MCP uses a local stdio bridge server.
Fresh agent chats should read /agent-artifacts/AGENTS.md before local repo discovery.
LaunchChair local-bridge.mjs is the background polling worker for queued Run with agent jobs.
The bridge requires LAUNCHCHAIR_BASE_URL, LAUNCHCHAIR_AGENT_TOKEN, and LAUNCHCHAIR_PROJECT_ID.
The primary MCP loop tool is launchchair_continue_project.
The bridge can route work to Codex, Claude Code, ChatGPT API, or Claude API runners.
The bridge passes local build folder evidence so LaunchChair can verify Codex or Claude Code setup during Stack Setup.
FAQ
Is LaunchChair MCP a hosted remote MCP server?
No. The current setup uses a local stdio bridge. That lets desktop agents run local tools while LaunchChair keeps project state and loop orchestration.
Does MCP require an OpenAI or Anthropic API key?
Not when routing to Codex or Claude Code runners that reuse local CLI auth. Direct chatgpt or claude API runners require provider API keys.
Agent API docs · MCP setup · structured project loops
MCP turns project work into a local agent loop.","name":"LaunchChair MCP Docs | Local Agent Bridge and Project Loop","description":"Public LaunchChair MCP setup docs for the local bridge server, MCP tools, runner routing, project loop execution, and phase synthesis links.","dateModified":"2026-06-19","inLanguage":"en-US","isPartOf":{"@id":"https://www.launchchair.io/#website"},"author":{"@id":"https://www.launchchair.io/#organization"},"publisher":{"@id":"https://www.launchchair.io/#organization"},"about":["LaunchChair MCP","MCP bridge","launchchair_continue_project","AI agent loop"],"mentions":["LaunchChair MCP uses a local stdio bridge server.","Fresh agent chats should read /agent-artifacts/AGENTS.md before local repo discovery.","LaunchChair local-bridge.mjs is the background polling worker for queued Run with agent jobs.","The bridge requires LAUNCHCHAIR_BASE_URL, LAUNCHCHAIR_AGENT_TOKEN, and LAUNCHCHAIR_PROJECT_ID.","The primary MCP loop tool is launchchair_continue_project.","The bridge can route work to Codex, Claude Code, ChatGPT API, or Claude API runners.","The bridge passes local build folder evidence so LaunchChair can verify Codex or Claude Code setup during Stack Setup."]},{"@type":"FAQPage","@id":"https://www.launchchair.io/docs/mcp#faq","mainEntity":[{"@type":"Question","name":"Is LaunchChair MCP a hosted remote MCP server?","acceptedAnswer":{"@type":"Answer","text":"No. The current setup uses a local stdio bridge. That lets desktop agents run local tools while LaunchChair keeps project state and loop orchestration."}},{"@type":"Question","name":"Does MCP require an OpenAI or Anthropic API key?","acceptedAnswer":{"@type":"Answer","text":"Not when routing to Codex or Claude Code runners that reuse local CLI auth. Direct chatgpt or claude API runners require provider API keys."}}]}]}",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/3be41560363d29c3.css?dpl=dpl_FfudGGGQ4G8qVEwtWgPKCfFqhU6h","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":[["$","head",null,{"children":[["$","link",null,{"rel":"ai-index","href":"https://www.launchchair.io/llms.txt"}],["$","link",null,{"rel":"alternate","type":"text/plain","href":"https://www.launchchair.io/llms.txt","title":"LaunchChair LLM instructions"}],["$","link",null,{"rel":"alternate","type":"text/plain","href":"https://www.launchchair.io/llms-full.txt","title":"LaunchChair full machine-readable product brief"}]]}],["$","body",null,{"suppressHydrationWarning":true,"className":"__variable_dd5b2f __className_dd5b2f","children":[["$","$L2",null,{"initialColorMode":"light"}],["$","$L3",null,{}],["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}]]}],{"children":["docs",["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["docSlug","mcp","d"],["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["PAGE",["$","$1","c",{"children":["$L7","$undefined",null,["$","$L8",null,{"children":["$L9","$La",null]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,["$","$1","akfwwRXtInP2dKrflzldb",{"children":[["$","$Lb",null,{"children":"$Lc"}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],["$","$Ld",null,{"children":"$Le"}]]}],false]],"m":"$undefined","G":["$f","$undefined"],"s":false,"S":true}\n"])" -o "$HOME/launchchair-agent/local-bridge.mjs"\ncurl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/launchchair-cli.mjs" -o "$HOME/launchchair-agent/launchchair-cli.mjs"\ncurl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/mcp-bridge-server.mjs" -o "$HOME/launchchair-agent/mcp-bridge-server.mjs"\ncurl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/runner-command.mjs" -o "$HOME/launchchair-agent/runner-command.mjs"\ncurl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/codex-runner.mjs" -o "$HOME/launchchair-agent/codex-runner.mjs"\ncurl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/claude-code-runner.mjs" -o "$HOME/launchchair-agent/claude-code-runner.mjs"\ncurl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/chatgpt-runner.mjs" -o "$HOME/launchchair-agent/chatgpt-runner.mjs"\ncurl -fsSL "https://www.launchchair.io/api/agent/v1/bridge/claude-runner.mjs" -o "$HOME/launchchair-agent/claude-runner.mjs"\ncurl -fsSL "https://www.launchchair.io/agent-artifacts/AGENTS.md" -o "$HOME/launchchair-agent/AGENTS.md"\nchmod +x "$HOME/launchchair-agent"/*.mjs\nLAUNCHCHAIR_AGENT_WORKDIR="${LC_AGENT_CODEX_CWD:-${LC_AGENT_CLAUDE_CODE_CWD:-$PWD}}"\nif [ -d "$LAUNCHCHAIR_AGENT_WORKDIR" ] \u0026\u0026 [ ! -f "$LAUNCHCHAIR_AGENT_WORKDIR/AGENTS.md" ]; then\n "]) MCP turns project work into a local agent loop.","name":"LaunchChair MCP Docs | Local Agent Bridge and Project Loop","description":"Public LaunchChair MCP setup docs for the local bridge server, MCP tools, runner routing, project loop execution, and phase synthesis links.","dateModified":"2026-06-19","inLanguage":"en-US","isPartOf":{"@id":"https://www.launchchair.io/#website"},"author":{"@id":"https://www.launchchair.io/#organization"},"publisher":{"@id":"https://www.launchchair.io/#organization"},"about":["LaunchChair MCP","MCP bridge","launchchair_continue_project","AI agent loop"],"mentions":["LaunchChair MCP uses a local stdio bridge server.","Fresh agent chats should read /agent-artifacts/AGENTS.md before local repo discovery.","LaunchChair local-bridge.mjs is the background polling worker for queued Run with agent jobs.","The bridge requires LAUNCHCHAIR_BASE_URL, LAUNCHCHAIR_AGENT_TOKEN, and LAUNCHCHAIR_PROJECT_ID.","The primary MCP loop tool is launchchair_continue_project.","The bridge can route work to Codex, Claude Code, ChatGPT API, or Claude API runners.","The bridge passes local build folder evidence so LaunchChair can verify Codex or Claude Code setup during Stack Setup."]},{"@type":"FAQPage","@id":"https://www.launchchair.io/docs/mcp#faq","mainEntity":[{"@type":"Question","name":"Is LaunchChair MCP a hosted remote MCP server?","acceptedAnswer":{"@type":"Answer","text":"No. The current setup uses a local stdio bridge. That lets desktop agents run local tools while LaunchChair keeps project state and loop orchestration."}},{"@type":"Question","name":"Does MCP require an OpenAI or Anthropic API key?","acceptedAnswer":{"@type":"Answer","text":"Not when routing to Codex or Claude Code runners that reuse local CLI auth. Direct chatgpt or claude API runners require provider API keys."}}]}]}"]) launchchair_status before searching local files.","Use launchchair_list_projects when the user names a project and LAUNCHCHAIR_PROJECT_ID is blank.","Use launchchair_create_project when the user wants to start from a new idea.","Do not ask for extra confirmation before normal LaunchChair MCP/API actions the user already requested and the token permits.","Only inspect the repo during Stack Setup, Build MVP, Design and Landing Page, SEO implementation, or code remediation."]},{"eyebrow":"Environment","title":"The bridge needs a base URL, token, project ID, and runner target.","body":"The public docs use placeholders. Users get the real token and project ID from Settings -\u003e API Access after logging in.","code":"LAUNCHCHAIR_BASE_URL=\"https://www.launchchair.io\"\nLAUNCHCHAIR_AGENT_TOKEN=\"\u003cfull lc_at token from Settings API Access\u003e\"\nLAUNCHCHAIR_PROJECT_ID=\"PASTE_PROJECT_UUID_OR_LEAVE_BLANK_IF_AGENT_CREATES_PROJECT\"","bullets":["Use LC_AGENT_ROUTER_GPT_TARGET and LC_AGENT_ROUTER_CODEX_TARGET to route work.","Use codex for Codex Desktop local runs.","Use claude_code for Claude Desktop plus Claude Code local runs.","Set the CWD variable to an existing repo folder or an empty folder the local runner should build into.","A Hermes env file only helps Hermes; Codex Desktop needs these values in Codex MCP config.","If Codex asks to approve the local bridge fallback shell command, approve the LaunchChair bridge command prefix once. Exposed MCP tools avoid that shell prompt."]},{"eyebrow":"Tools","title":"The primary loop tool is launchchair_continue_project.","body":"The loop tool asks LaunchChair to inspect project state, queue the next agent-actionable step, run it with the configured local runner, complete it, apply or validate output, remediate when needed, and return phase synthesis links when phases finish. During Stack Setup, it passes local repo evidence to LaunchChair and stops with explicit instructions if the user still needs to authorize GitHub, Vercel, Supabase, or Stripe.","code":"Call launchchair_continue_project with:\n{\n \"projectId\": \"PASTE_PROJECT_UUID\",\n \"maxSteps\": 8,\n \"stopPhaseKey\": \"seo_technical\",\n \"ideaSnapshot\": {\n \"projectName\": \"PASTE_PROJECT_NAME\",\n \"oneLiner\": \"PASTE_ONE_LINE_DESCRIPTION\",\n \"projectType\": \"both\",\n \"problem\": \"PASTE_THE_USER_PAIN\",\n \"targetUser\": \"PASTE_THE_TARGET_USER\",\n \"solution\": \"PASTE_THE_PROPOSED_SOLUTION\"\n }\n}\n\nWhen a phase completes, show me the LaunchChair phase synthesis link.","bullets":["launchchair_create_project","launchchair_list_projects","launchchair_status","launchchair_heartbeat","launchchair_claim_next_run","launchchair_complete_run","launchchair_run_once","launchchair_select_choice","launchchair_continue_project"]},{"eyebrow":"Background worker","title":"Use local-bridge.mjs when LaunchChair should pick up queued UI runs automatically.","body":"The MCP bridge responds when a desktop agent calls a tool. The local bridge is the polling worker: it sends heartbeats, claims queued runs created by the Run with agent button, routes them to Codex or Claude Code, and completes the run back to LaunchChair.","code":"LAUNCHCHAIR_BASE_URL=\"https://www.launchchair.io\" \\\nLAUNCHCHAIR_AGENT_TOKEN=\"\u003cfull lc_at token from Settings API Access\u003e\" \\\nLAUNCHCHAIR_PROJECT_ID=\"PASTE_PROJECT_UUID\" \\\nLC_AGENT_ROUTER_GPT_TARGET=\"codex\" \\\nLC_AGENT_ROUTER_CODEX_TARGET=\"codex\" \\\nLC_AGENT_CODEX_CWD=\"/absolute/path/to/the-folder-codex-should-build-into\" \\\nnode \"$HOME/launchchair-agent/local-bridge.mjs\" --verbose","bullets":["Use the MCP bridge for agent-directed loops inside Codex, Claude, or Hermes.","Use local-bridge.mjs for always-on Run with agent behavior from the LaunchChair UI.","Keep the terminal process running while you want LaunchChair to pick up queued work."]}],"facts":["LaunchChair MCP uses a local stdio bridge server.","Fresh agent chats should read /agent-artifacts/AGENTS.md before local repo discovery.","LaunchChair local-bridge.mjs is the background polling worker for queued Run with agent jobs.","The bridge requires LAUNCHCHAIR_BASE_URL, LAUNCHCHAIR_AGENT_TOKEN, and LAUNCHCHAIR_PROJECT_ID.","The primary MCP loop tool is launchchair_continue_project.","The bridge can route work to Codex, Claude Code, ChatGPT API, or Claude API runners.","The bridge passes local build folder evidence so LaunchChair can verify Codex or Claude Code setup during Stack Setup."],"faqs":[{"question":"Is LaunchChair MCP a hosted remote MCP server?","answer":"No. The current setup uses a local stdio bridge. That lets desktop agents run local tools while LaunchChair keeps project state and loop orchestration."},{"question":"Does MCP require an OpenAI or Anthropic API key?","answer":"Not when routing to Codex or Claude Code runners that reuse local CLI auth. Direct chatgpt or claude API runners require provider API keys."}]},"endpoints":[{"id":"project-list","method":"GET","path":"/api/agent/v1/projects?query=:name","scope":["projects.read","prompts.read"],"description":"List projects visible to the current Agent API token, optionally filtered by project name. Use this to resolve user-provided project names before continuing a loop.","risk":"read"},{"id":"project-create","method":"POST","path":"/api/agent/v1/projects","scope":"projects.write","description":"Create a LaunchChair project in the token workspace, optionally save the first Idea Snapshot, and optionally start the project loop.","risk":"write"},{"id":"agent-heartbeat","method":"POST","path":"/api/agent/v1/heartbeat","scope":["presence.write","prompts.read"],"description":"Send heartbeat + client metadata for agent presence.","risk":"read"},{"id":"agent-runs-next","method":"POST","path":"/api/agent/v1/runs/next","scope":["runs.claim","prompts.read"],"description":"Claim next queued run for the current token.","risk":"read"},{"id":"agent-runs-complete","method":"POST","path":"/api/agent/v1/runs/:runId/complete","scope":["runs.complete","prompts.read"],"description":"Complete/fail the claimed run, send structured result payload, and let LaunchChair apply, validate, retry, or queue remediation when configured.","risk":"write"},{"id":"project-loop-continue","method":"POST","path":"/api/agent/v1/projects/:projectId/loop/continue","scope":["loop.continue","prompts.read"],"description":"Inspect the project, optionally save the first Idea Snapshot from ideaSnapshot, optionally apply requested choiceSelections, queue the next agent-actionable bucket or build-card run, and return phase synthesis links when completed phases are detected.","risk":"write"},{"id":"project-choice-select","method":"POST","path":"/api/agent/v1/projects/:projectId/choices/select","scope":["choices.write","buckets.write"],"description":"Select or change a generated user-choice option, such as wedge, pricing, or feature direction. Supports optionId, optionTitle/optionQuery, and resetDownstream.","risk":"write"},{"id":"project-spec-read","method":"GET","path":"/api/agent/v1/projects/:projectId/spec","scope":"spec.read","description":"Read the full normalized project spec.","risk":"read"},{"id":"project-spec-write","method":"PATCH","path":"/api/agent/v1/projects/:projectId/spec","scope":"spec.write","description":"Write project spec directly (disabled for MVP token profiles).","risk":"write"},{"id":"project-buckets-list","method":"GET","path":"/api/agent/v1/projects/:projectId/buckets","scope":"buckets.read","description":"List phase buckets with current status and metadata.","risk":"read"},{"id":"project-bucket-read","method":"GET","path":"/api/agent/v1/projects/:projectId/buckets/:phaseKey/:bucketKey","scope":"buckets.read","description":"Read a single bucket payload for the target phase/bucket.","risk":"read"},{"id":"project-bucket-write","method":"PATCH","path":"/api/agent/v1/projects/:projectId/buckets/:phaseKey/:bucketKey","scope":"buckets.write","description":"Write non-prompt bucket data for the target phase/bucket.","risk":"write"},{"id":"project-bucket-prompt","method":"GET","path":"/api/agent/v1/projects/:projectId/buckets/:phaseKey/:bucketKey/prompt","scope":"prompts.read","description":"Retrieve compiled prompt text for a bucket.","risk":"read"},{"id":"project-bucket-apply","method":"POST","path":"/api/agent/v1/projects/:projectId/buckets/:phaseKey/:bucketKey/apply-spec-update","scope":"buckets.write","description":"Apply parsed SPEC_UPDATE payload for a bucket run.","risk":"write"},{"id":"project-build-cards-list","method":"GET","path":"/api/agent/v1/projects/:projectId/build-cards","scope":"build_cards.read","description":"List build cards, board state, and latest agent-facing SQL/manual QA checkpoints for the project.","risk":"read"},{"id":"project-build-card-readwrite","method":"PATCH","path":"/api/agent/v1/projects/:projectId/build-cards/:cardId","scope":"build_cards.write","description":"Update build card status, testing metadata, and SQL action completion state.","risk":"write"},{"id":"project-build-card-prompt","method":"GET","path":"/api/agent/v1/projects/:projectId/build-cards/:cardId/prompt","scope":"prompts.read","description":"Retrieve compiled prompt text for a build card.","risk":"read"},{"id":"project-build-card-apply","method":"POST","path":"/api/agent/v1/projects/:projectId/build-cards/:cardId/apply-run","scope":"build_cards.write","description":"Apply build card CHANGELOG_JSON/REQUIRES run output. SQL actions and manual QA can pause the loop for human completion.","risk":"write"},{"id":"project-export-mvp-spec","method":"GET","path":"/api/agent/v1/projects/:projectId/exports/mvp-ai-spec","scope":"exports.read","description":"Download AI-ready MVP markdown export.","risk":"read"},{"id":"project-export-phase","method":"GET","path":"/api/agent/v1/projects/:projectId/exports/phase/:phaseKey","scope":"exports.read","description":"Download phase summary markdown export.","risk":"read"}],"showEndpointCatalog":false}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"$12"}}]]\n"])"])