一键导入
deploy-prototype
Generate a small app or tool and deploy it live to Vercel via API
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Generate a small app or tool and deploy it live to Vercel via API
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Run a task through your Executor Cloud tool catalog - one MCP endpoint proxying every integration you connected (MCP servers, OpenAPI specs, GraphQL APIs), with per-tool allow/approve/block policies. OAuth Connect via the dashboard MCP panel.
Live-data research via the glim.sh MCP - web search, full page extraction, X/Twitter, Reddit, GitHub, Amazon, and YouTube transcripts - synthesized into a cited digest. Pay-per-call from the connected account balance; OAuth Connect via the dashboard MCP panel.
Read your Robinhood Agentic brokerage account via the Robinhood Trading MCP - portfolio, buying power, positions, and order history - and place a single operator-instructed trade. OAuth Connect via the dashboard MCP panel.
Business-development radar across your product family - find who's building, forking, integrating, and mentioning your products, ranked into a who-to-talk-to-this-week lead list.
Generate and send a digest on a configurable topic, optionally pulling RSS/Atom feeds as an input source alongside web + X signal
Search and curate X/Twitter behind one selector - keyword, topic roundup, a single or tracked-account digest, an X list, or the AI-agent buzz preset - clustered into signal-scored sub-narratives.
| type | Skill |
| name | Deploy Prototype |
| category | dev |
| description | Generate a small app or tool and deploy it live to Vercel via API |
| var | |
| tags | ["dev","build"] |
| requires | ["VERCEL_TOKEN?","GH_GLOBAL?"] |
${var} — What to build and deploy.
- Empty → auto-select from recent signals (articles, logs, memory topics).
- Plain text (e.g.
market heatmap) → interpret as a build brief.- Typed form
type:slug description(e.g.tool:market-heatmap volume heatmap of top-20 tokens,viz:tx-graph,api:summarize,landing:startup-idea) → usetypeto bias shape andslugas the deployment name.
Today is ${today}. Your task is to ship a small, self-contained prototype that someone could actually use in the browser today.
Read context. Read memory/MEMORY.md and the most recent entries in memory/logs/ for active topics.
If running as part of a chain, scan injected upstream outputs for a concrete artifact worth making interactive.
Pick what to build (if ${var} is empty or vague).
Scan these sources, in order, for prototype-worthy signals:
output/articles/ — last 7 entries by mtime: any claim, finding, or dataset that would be more useful as an interactive page?memory/topics/*.md — running narratives; pick one with a live data source (prices, feeds, markets)memory/logs/${today}.md and the two prior days — skill outputs flagged as interestingmemory/MEMORY.md → "Next Priorities" and "Recent Articles"Score each candidate 1-5 on:
output/articles/prototype-*.md by mtime and any memory/topics/prototypes.md)Pick the highest-total candidate. If no candidate reaches 9/15, skip building and exit as DEPLOY_PROTOTYPE_EMPTY (step 9).
Record the chosen signal — its source file(s) and one-line rationale — you'll use it in steps 6 and 7.
Commit to a shape before writing code. Before touching .pending-deploy/, write out (in your reasoning, not a file):
aeon-prototype-<descriptor>, all lowercase, [a-z0-9-], 3–50 chars after prefix (e.g. aeon-prototype-market-heatmap). If ${var} supplied a typed slug, use it; otherwise derive one.api/ function / Next.js. Default to static single-file HTML unless the idea genuinely needs a serverless function.Write the files.
rm -rf .pending-deploy # clear stale state from prior runs
mkdir -p .pending-deploy/files
Write all project files into .pending-deploy/files/. This directory is the repo root — everything here is pushed to GitHub and deployed to Vercel.
Quality bar — every prototype must meet these:
index.html with inline <style> and <script>; fall back to a main.css / main.js only when size justifies it.<link rel="stylesheet"> to a CDN font unless it's one font.<title>, <meta name="description">, <meta property="og:title">, <meta property="og:description">, <meta property="og:type" content="website">. Skip OG image unless you generate one.[example data].prefers-color-scheme — 4 CSS vars is enough.README.md in .pending-deploy/files/ with: what it is (1 line), how to run locally (1 line), signal source (1 line link to the article/log/topic from step 2).For API endpoints: place handlers in api/ (e.g. api/index.js exporting export default function handler(req, res) { ... }).
For Next.js: keep it one page — package.json + pages/index.js. Only if the idea genuinely needs SSR.
Write deploy metadata. Create .pending-deploy/meta.json:
{
"name": "aeon-prototype-<slug-from-step-3>",
"description": "One-sentence description, matches the OG description on the page",
"framework": null,
"tagline": "≤90 chars — matches <title> on the page",
"signal_source": "path or URL of the article/log/topic that triggered this prototype",
"primary_action": "what the visitor does in the first 10 seconds"
}
framework: null for static; "nextjs", "svelte", etc. when used.tagline, signal_source, primary_action) are for the prototype record and downstream dashboards; the deploy step may ignore them.Build the Vercel deploy payload. Write .pending-deploy/payload.json:
{
"name": "aeon-prototype-<slug>",
"files": [
{ "file": "index.html", "data": "<!DOCTYPE html>...", "encoding": "utf-8" }
],
"projectSettings": {
"framework": null,
"buildCommand": null,
"outputDirectory": null
},
"target": "production"
}
Use "encoding": "base64" for any binary file.
Pre-flight checks (run before writing the notify):
^aeon-prototype-[a-z0-9][a-z0-9-]{2,49}$.VERCEL_TOKEN, GH_GLOBAL, ANTHROPIC_API_KEY, sk-ant-, sk-, ghp_, xoxb-, xai-. Any hit → abort and rewrite the offending file without the value.TODO, FIXME, lorem ipsum, placeholder. Any hit → fix in place before proceeding.VERCEL_TOKEN is unset, the build still completes but the live deploy in step 8 is skipped (you'll exit DEPLOY_PROTOTYPE_NO_TOKEN there) — the pre-flight itself doesn't fail on a missing token.Save the prototype record. Write to output/articles/prototype-${today}.md. If a file with that name already exists (second run in the same day), append -02, -03, etc.
# Prototype: <Name>
**Built:** ${today}
**Tagline:** <tagline from meta.json>
**Status:** Pending deploy
**Live URL:** _(filled in-run in step 8 once the Vercel deploy returns its URL)_
## Signal
What triggered this: one paragraph. Link the source article/log/topic (`signal_source` from meta.json).
## What it does
One paragraph, plain language. Include the primary action a visitor takes.
## How it works
Brief technical notes — stack, data source, anything non-obvious. No code dumps.
## Files
- `index.html` — brief description
- …
## Extend
Three bullets on what would make this a real product (not placeholder — concrete next steps).
Append a one-line row to memory/topics/prototypes.md (create the file with a header row if missing):
| date | slug | tagline | signal_source | live_url |
|------|------|---------|---------------|----------|
| 2026-04-20 | aeon-prototype-foo | ... | output/articles/... | _pending_ |
Deploy live (in-run). The deploy is the skill's irreversible action, so it runs in-run as the final step — behind the step-6 pre-flight — not deferred to any post-run script.
If VERCEL_TOKEN is unset → skip the deploy, leave .pending-deploy/ in place, and exit DEPLOY_PROTOTYPE_NO_TOKEN (step 10). The build still succeeded; the operator just needs to add the token and re-run.
Otherwise POST the inline deployment built in step 6. Write the key as the literal {VERCEL_TOKEN} placeholder so ./secretcurl substitutes it internally — a bare $VERCEL_TOKEN on the command line is refused by the Bash permission layer, and plain curl must not carry the token:
HTTP=$(./secretcurl -sS -o .pending-deploy/deploy-resp.json -w '%{http_code}' \
-X POST "https://api.vercel.com/v13/deployments" \
-H "Authorization: Bearer {VERCEL_TOKEN}" \
-H "Content-Type: application/json" \
--data @.pending-deploy/payload.json)
echo "http=$HTTP"
http 200/201: read the deployment host from the response (.url in deploy-resp.json) and form the live URL https://<url>. Backfill it into the step-7 record (**Status:** Live, **Live URL:** https://…) and the memory/topics/prototypes.md row (replace _pending_). Exit DEPLOY_PROTOTYPE_OK (step 10).--max-time timeout / 200 with empty body: print the real reason (http=<code> / timeout / empty), keep .pending-deploy/ for a retry, and exit DEPLOY_PROTOTYPE_DEPLOY_FAILED (step 10). Never mark the record Live on a failed deploy.Optional source mirror (best-effort, non-fatal). If GH_GLOBAL is set, also publish the source to GitHub. gh already authenticates as GH_GLOBAL in-run (it's the ambient GH_TOKEN), so no secret goes on the command line:
if [ -n "${GH_GLOBAL:-}" ]; then
( cd .pending-deploy/files && git init -q && git add -A \
&& git -c user.name=aeon -c user.email=aeon@users.noreply.github.com commit -qm "prototype: <slug>" \
&& gh repo create "<slug>" --public --source=. --push ) \
|| echo "::notice::source mirror skipped (non-fatal)"
fi
A mirror failure never fails the run — the live Vercel URL is the deliverable.
Notify. Send via ./notify (one of these, depending on outcome):
shipped: <slug> — <tagline>. live: <url>built: <slug> — <tagline>. ⚠ VERCEL_TOKEN unset — not deployed. add it and re-run.built: <slug> — <tagline>. ✗ vercel deploy failed (<reason>) — .pending-deploy kept for retry.Exit modes. End the run with one of these, logged in memory/logs/${today}.md under ### deploy-prototype:
DEPLOY_PROTOTYPE_OK — prototype built, validated, and deployed live.DEPLOY_PROTOTYPE_NO_TOKEN — built and valid, but VERCEL_TOKEN unset; deploy skipped, operator action needed.DEPLOY_PROTOTYPE_DEPLOY_FAILED — built and valid, but the Vercel API call failed; .pending-deploy/ kept for retry.DEPLOY_PROTOTYPE_EMPTY — no candidate cleared the quality threshold in step 2. Log the top candidate and its score so the next run can reconsider. ./notify "deploy-prototype: no candidate cleared threshold today — top was <slug> (<score>/15)".DEPLOY_PROTOTYPE_VALIDATION_FAILED — a pre-flight check in step 6 failed and couldn't be fixed automatically. Leave .pending-deploy/ in place, log the failure reason, notify the operator.Log. Append to memory/logs/${today}.md:
### deploy-prototype
- Exit: DEPLOY_PROTOTYPE_<MODE>
- Slug: aeon-prototype-<slug> (or — if empty)
- Live URL: <url or —>
- Signal: <signal_source>
- Notes: <anything the next run should know>
VERCEL_TOKEN — the live Vercel deploy in step 8. Used in-run via ./secretcurl (the {VERCEL_TOKEN} placeholder). Without it, the build succeeds but the deploy is skipped (DEPLOY_PROTOTYPE_NO_TOKEN).GH_GLOBAL — the optional GitHub source mirror in step 8. Used ambiently by gh (it's the run's GH_TOKEN); a missing token just skips the mirror.Both are declared optional (?) so the skill degrades gracefully: no VERCEL_TOKEN → build-only; no GH_GLOBAL → deploy without the source mirror. Never read the token values directly and never embed them in any deployed file (step 6 greps for them).
index.html is almost always the right answer. Resist the urge to add tooling.aeon-prototype-market-heatmap, not aeon-prototype-1../secretcurl / gh — an irreversible side-effect run as the skill's final, fail-closed action. Build the files, metadata, and payload correctly in steps 4–6 so that final call goes clean.Steps 1–7 are local — file writes and notify only. Step 8's deploy is the one outbound side-effect and it runs in-run: the Vercel deployment via ./secretcurl with the {VERCEL_TOKEN} placeholder (a bare $VERCEL_TOKEN on the command line is refused by the Bash permission layer, so never use plain curl for it), and the optional GitHub mirror via gh (authenticated ambiently as GH_GLOBAL). There is no deferred/postprocess step — the deploy is the skill's final, fail-closed action: on any non-2xx it exits DEPLOY_PROTOTYPE_DEPLOY_FAILED and keeps .pending-deploy/ for a retry.