SkillAtlasSkill 详情

create-chatgpt-mockup

Put your AI agent on the growth team.

审核状态:已审核Quality 80Security 80

复制安装命令

用 Codex 或 Claude 安装复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它先审查 Skill 页面再帮你安装。

复制前请先查看来源、License 和安全提示。

项目 README

来源文件:README.md

抓取于 2026年8月20日
CleanShot 2026-07-13 at 20 15 47@2x CleanShot 2026-07-13 at 20 16 54@2x

AI Skills for Brand Growth

Put your AI agent on the growth team.

Research customers and competitors, analyze what is working, create the next campaign, and learn from the result. Goose Skills gives Claude Code, Cursor, Codex, and other coding agents ready-to-use workflows for ads, social media, content, competitive intelligence, SEO, lead generation, and GTM.

Browse all skills at https://skills.gooseworks.ai

Works with Claude Code · Cursor · Codex

npm version License: MIT Skills


Contents


Quick Start

AI Coding Agents (Claude Code, Cursor, Codex, etc)

Paste this into your coding agent (Claude Code, Cursor, or Codex) and it'll set everything up:

Install the Gooseworks skills:

In the terminal, run `npx gooseworks install --all`.

Then run `npx gooseworks login` and it'll open a browser to sign in and set up the tools, then confirm it worked.

The skills can be used with /gooseworks <prompt>

Claude Cowork

Run this command in a terminal first:

npx gooseworks install --all

Then authenticate:

npx gooseworks login

Then make sure you're working inside a local folder on your machine, and then you can use the skills in Cowork like this:

Use /gooseworks skill to generate some ad creatives

Install manually

Prefer to run it yourself? Use the command directly:

npx gooseworks install --all       # All detected agents

This gives your coding agent access to the full catalog of 200+ skills. After installing, just ask your agent to use any skill by name.

If you want a cloud-based AI coworker that already knows all these skills and more, sign up to Gooseworks


Brand Growth collection

The Brand Growth collection is a curated path through the normal Goose Skills catalog for consumer and ecommerce brand work. It is not a separate package or command: install GooseWorks once, then ask /gooseworks for the outcome you need.

StageWhat your agent can doExample skills
ResearchUnderstand the brand, customers, competitors, audiences, creators, trends, comments, and product demandbrand-research, audience-research, comment-mining, competitor-social-research, influencer-prospecting, trend-discovery, product-demand-research
AnalyzeDiagnose ads, creator profiles, transcripts, policy risk, landing-page message match, and unusual social performancecompetitor-ad-intelligence, creator-profile-teardown, transcript-intelligence, meta-ads-analyzer, meta-ad-policy-checker, ad-to-landing-page-auditor, outlier-post-finder
CreateRepurpose research, remix graphic ads, make product photography and social graphics, and animate static imagescontent-repurposing, remix-graphic-ad-from-reference, product-photoshoot, goose-graphics, animate-image
Learn and iterateBring results back into research and analysis, then decide the next testRe-run the relevant analysis skill with current performance and audience evidence

ScrapeCreators powers structured public social and ad-library research behind several workflows. Signed-in GooseWorks users access it through the managed first-party proxy and do not need a separate ScrapeCreators key. The user-facing skills turn that source data into a brief, shortlist, analysis, or recommendation instead of returning raw API output.

Browse the Brand Growth collection

After installation, start with:

/gooseworks onboard me

The agent will collect the useful company context for future growth work and finish by asking what you want to do first. Existing users can skip onboarding and keep using /gooseworks exactly as they do today.


Commands

npx gooseworks search "reddit scraping"   # Search the skill catalog
npx gooseworks credits                     # Check your credit balance
npx gooseworks update                      # Update to latest skill version

Skills Catalog

200+ skills across the growth stack, grouped by focus area:

CategoryWhat's inside
AdsResearch, build, and analyze paid campaigns across Meta and Google
SEOKeyword research, content gaps, SERP analysis, technical audits
Lead generationFind, enrich, and qualify prospects for your pipeline
OutreachDraft, personalize, and run outbound across email and social
ContentBlog posts, social content, carousels, video scripts, newsletters
ResearchCompany, market, and prospect deep-dives
Competitive intelTrack competitor pricing, launches, positioning, and ads
MonitoringWatch for mentions, signals, and changes across the web
SocialScrape and analyze social platforms and audiences
BrandVoice, positioning, and visual brand assets

Browse and search every skill at skills.gooseworks.ai.


Usage Examples

After installing, just ask your coding agent naturally:

"/gooseworks Generate static ad creatives for my brand"
"/gooseworks Use the reddit-post-finder skill to search r/startups"
"/gooseworks Use the apollo-lead-finder skill to find CTOs at AI companies"
"/gooseworks Use the competitor-intel skill to research Acme Corp"
"/gooseworks Use the goose-graphics skill to create a LinkedIn carousel about our launch"

Your agent will search the GooseWorks catalog, download the skill, and run it automatically.


Building from Source

git clone https://github.com/gooseworks-ai/goose-skills.git
cd goose-skills
node scripts/validate-skills.js  # Validate SKILL.md + skill.meta.json contract
node scripts/build-index.js      # Generate skills-index.json
node bin/goose-skills.js list    # Test locally

Skill Metadata Contract

Each skill directory must include:

  • SKILL.md — Skill documentation and usage guide
  • skill.meta.json — Machine-readable metadata

skill.meta.json fields:

FieldRequiredDescription
slugYesUnique kebab-case identifier
categoryYescapabilities, composites, or playbooks
tagsYesString array of category tags
installation.base_commandYesInstall command
installation.supportsYesArray: claude, codex, cursor
featuresNoFeature flags
github_urlNoSource repository URL
authorNoSkill author
example_promptNoCopyable prompt shown in the catalog and docs for trying the skill

Security & Trust

These skills run inside your coding agent, so it's worth knowing exactly what they do:

  • Open source & inspectable. Every skill — its SKILL.md instructions and all scripts — lives in this repo under the MIT license. The gooseworks CLI fetches skills at runtime so recipes stay current, but the source you'd run is right here to read, diff, or pin before you run it.
  • Scripts run locally. Skill scripts execute on your machine and write to /tmp/gooseworks-scripts/, never into your project directory. Only API requests go through GooseWorks servers; review any script before letting your agent run it.
  • Your agent stays in control. The skills are a tool your agent reaches for when it fits the task (data at scale, sources behind auth, a specific provider) — not a replacement for its built-in web search or fetch on quick lookups. You can read or edit any installed SKILL.md to tune that behavior.
  • Credentials stay local. Auth is a Bearer token stored at ~/.gooseworks/credentials.json (file mode 0600). Third-party provider keys (Apify, Apollo, etc.) are held server-side — your token never touches them. All network calls are HTTPS.
  • The MCP server is opt-in. Registering the GooseWorks MCP server is off by default; it only happens if you explicitly run gooseworks install --mcp.

Found something that looks off? Open an issue — we'd rather fix it in public.


License

MIT — see LICENSE for details.

The skill files and CLI in this repository are MIT-licensed. The GooseWorks API they connect to is a separate paid service governed by its own terms.

研究与检索

中风险

  • 来源需自行核对维护者身份。
  • 包含脚本或命令调用,安装前请复核。
  • 未检测到明显外部权限要求。
  • 未检测到高风险命令。
  • 扫描发现:2 条。

Codex — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/gooseworks-ai/goose-skills.git
  3. 将 "skills/ads/packs/video-ad-formats/create-chatgpt-mockup" 文件夹复制到 Codex 的 skills 目录中。
  4. 重启 Codex 让新的 skill 生效。

Codex — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Codex 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Codex 让新的 skill 生效。

Claude Code — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/gooseworks-ai/goose-skills.git
  3. 将 "skills/ads/packs/video-ad-formats/create-chatgpt-mockup" 文件夹复制到 Claude Code 的 skills 目录中。
  4. 重启 Claude Code 让新的 skill 生效。

Claude Code — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Claude Code 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Claude Code 让新的 skill 生效。

Cursor — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/gooseworks-ai/goose-skills.git
  3. 将 "skills/ads/packs/video-ad-formats/create-chatgpt-mockup" 文件夹复制到 Cursor 的 skills 目录中。
  4. 重启 Cursor 让新的 skill 生效。

Cursor — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Cursor 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Cursor 让新的 skill 生效。

GitHub Copilot — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/gooseworks-ai/goose-skills.git
  3. 将 "skills/ads/packs/video-ad-formats/create-chatgpt-mockup" 文件夹复制到 GitHub Copilot 的 skills 目录中。
  4. 重启 GitHub Copilot 让新的 skill 生效。

GitHub Copilot — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 GitHub Copilot 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 GitHub Copilot 让新的 skill 生效。

Windsurf — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/gooseworks-ai/goose-skills.git
  3. 将 "skills/ads/packs/video-ad-formats/create-chatgpt-mockup" 文件夹复制到 Windsurf 的 skills 目录中。
  4. 重启 Windsurf 让新的 skill 生效。

Windsurf — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Windsurf 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Windsurf 让新的 skill 生效。
查看 SKILL.md 原文
name: create-chatgpt-mockup
description: Render pixel-accurate ChatGPT mobile (iOS) screen mockups in light mode from a thread JSON. Supports user text bubbles, user image attachments, assistant markdown prose, citation chips, the OpenAI spiral logo, the Apps-SDK GPT chip in the composer, and three header styles (model-tag, plain title, "Get Plus"). Fixed 9:16 viewport. Outputs HTML + PNG.

create-chatgpt-mockup

Purpose

Generate single-frame ChatGPT mobile screens that read as real iOS captures — accurate header chrome, user/assistant message styling, composer pill, status bar, and the OpenAI spiral mark. Designed for use inside ad creatives, social posts, video storyboards, and product mockups.

If you need an animated, video-recorded chat reveal (bubbles popping over time, SFX, music bed, end card), use the molecule skills/molecules/create-chatgpt-video-ad. This atom only produces a single still frame.

Inputs

Compose a thread.json matching the schema below, then pass it to render.js.

Thread JSON schema

{
  "statusBar": {
    "time": "9:41",
    "dnd": false
  },
  "header": {
    "style": "model-tag",
    "title": "ChatGPT",
    "model": "5.1",
    "rightIcons": ["personPlus", "dottedCircle"]
  },
  "messages": [
    { "type": "user-image", "src": "assets/photo.jpg", "aspect": "square" },
    { "type": "user-text",  "text": "Make this face sunscreen better" },
    {
      "type": "assistant",
      "title": "Optional H1 with spiral logo",
      "feedback": true,
      "text": "Markdown-ish prose. **bold**, *italic*, ## H2, * bullet, 1. ordered, [[cite:Source +1]], [[icon:💡]] inline-icon."
    }
  ],
  "composer": {
    "placeholder": "Ask anything",
    "text": "Typed text to show with caret",
    "cursor": true,
    "streaming": false,
    "chip": { "name": "SeatGeek" }
  }
}

Field reference

statusBar

  • time — string shown top-left (e.g. "9:41", "08:18").
  • dnd — when true, renders a small moon glyph next to the time (matches iOS Focus-on indicator).

header.style — one of:

  • "model-tag" — ≡ ChatGPT 5.1 ▾ ●● — used when a specific model is active.
  • "title-only" — ≡ ChatGPT › ●● — the plain in-chat header.
  • "plain-title" — ≡ Get Plus ✦ ●● — for the upsell/empty-state title.

header.rightIcons — array of icon keys, rendered left-to-right on the right side. Available: "personPlus", "dottedCircle", "edit", "more". Default is ["personPlus", "dottedCircle"] for model-tag, ["edit"] for title-only.

messages[] — one of:

  • { "type": "user-image", "src": <path>, "aspect": "square"? } — relative src paths resolve against the thread.json directory.
  • { "type": "user-text", "text": <string> } — right-aligned soft-gray bubble.
  • { "type": "assistant", "text": <markdown>, "title"?: <string>, "feedback"?: <bool> } — left-aligned plain prose. If title is set, an OpenAI spiral logo + bold title is rendered above the body. feedback: false hides the thumbs-up/down chips.

Assistant text markdown — supported syntax:

  • **bold**, *italic*
  • # H1, ## H2, ### H3
  • * item / - item bullet lists
  • 1. item ordered lists
  • --- horizontal rule
  • [[cite:Some Source +1]] — pill citation chip
  • [[icon:💡]] — inline emoji prefix (kept un-escaped)
  • Single \n → soft line break (<br>); double \n\n → new paragraph

composer

  • placeholder — shown when text is empty (default "Ask anything").
  • text — typed-in text. When present, the send button activates (black bg).
  • cursor — whether to render the blinking caret after text (default true).
  • streaming — when true, replaces the send arrow with a stop square (matches "response generating" state).
  • chip — optional GPT chip in the composer. chip.name is the GPT name. Sets placeholder to "Ask ChatGPT" if you don't override it.

CLI

node render.js --thread examples/01-sunscreen-image.json
node render.js --thread my-thread.json --output ./exports --name nightly

Flags

FlagEffect
--thread <path>(required) JSON file matching the schema above
--output <dir>parent dir for the dated output folder; default ./chatgpt-mockup-exports/
--name <slug>override the output folder slug

Output

<output>/<YYYY-MM-DD>-<slug>/
  index.html       # standalone HTML (CSS inlined)
  screenshot.png   # 2250 × 4002 PNG (DPR 3, 9:16)
  thread.json      # copy of the input for reproducibility

Workflow

  1. Receive a brief or existing thread JSON.
  2. If only a brief is given, compose thread.json matching the schema above.
  3. Run node render.js --thread <path>.
  4. Open the PNG. If anything looks off (header alignment, bubble width, missing icon), edit the JSON or templates/chat.css and re-render.

Setup (one-time)

cd create-chatgpt-mockup
npm install
npx playwright install chromium

Quality checks

  • Renders in light mode only (white background, dark text). Dark-mode rendering is out of scope for v1.
  • Status bar time and right cluster (signal / wifi / battery) sit at the very top, no clipping under the iOS status-bar safe area.
  • Header chrome icons (hamburger / personPlus / dottedCircle / edit / more) all visually weigh the same as a real ChatGPT iOS screenshot at the same display size — eyeball, don't pixel-match. Sub-reading-weight icons read as broken even when their pixel dimensions "match the spec."
  • Header model tag (5.1, 5.2) sits inline with ChatGPT and its chevron — no wrapping.
  • User bubble is right-aligned, soft-gray (#F4F4F4), border-radius: 28px, max-width 78% of stage.
  • User image attachments use the same 28px corner radius and sit right-aligned above the text bubble.
  • Assistant body is plain prose (no bubble), left-aligned, full-width within the gutter.
  • Composer corner radius is 999px (full pill), 1px border #E5E5E5, send button is 44 × 44 round.
  • When composer.text is set: send button is solid black with a white up-arrow. Caret sits right after the last character of typed text.
  • When composer.streaming: true: send button shows a black square stop icon.
  • When a citation marker [[cite:Foo +1]] is in the assistant text, it renders as a pill chip inline at the end of the sentence.

Failure modes

SymptomCauseFix
Thread file not foundWrong path or running from a different cwdUse absolute paths or run from the skill directory
Image attachment shows broken-image glyphsrc is relative but the renderer couldn't resolve itrender.js resolves relative src against the thread.json's directory — make sure the asset exists at that path
Send button stays light gray after typingcomposer.text is empty string "" instead of unsetEither omit text entirely or set it to a real string
Caret renders as a stray | separated from the textCaret span is being treated as a flex childThe CSS rule for .composer .input uses inline content flow — do not switch it to display: flex
Streamed list-item words render with no spaces ("Howconversationswork").word { display: inline-block } collapses inter-span text-node whitespace inside <div> parents (works fine inside <p>)Use display: inline for .word — modern browsers honor filter: blur() + opacity transitions on inline elements too
Bullets visible while list-item text is still hidden during streamingCSS list-style markers are browser-painted; the word-stream wrapper only sees text nodesThe atom auto-converts <ul><li>X</li></ul> to <div class="md-list"><div class="md-li">• X</div></div> when stream: true — keep that pass; don't regress it. Any new markdown that emits browser-painted glyphs (::marker, quotes, counter-content) needs the same text-conversion treatment.
Markdown --- doesn't render an <hr>The --- line isn't on a line by itself, or the surrounding text didn't end its paragraphSurround --- with blank lines on both sides
Stanzas of a poem joined into single paragraphsLines separated by single \n get joined as a single paragraph but with <br> between them — this is the intended behavior. If you want stanza breaks, use \n\n between stanzas.
Header right cluster overlaps the model tag on long titlesTitle text is too wide for the centered slotShorten header.title, drop the model tag, or switch header.style to "title-only"

Files

FilePurpose
render.jsCLI entry — parses flags, generates HTML, takes screenshot, writes outputs
generate.jsThread JSON → standalone HTML page (markdown-ish parser inside)
screenshot.jsHTML → PNG via Playwright (chromium headless) at fixed 750×1334 / DPR 3
templates/chat.cssAll visual styling
templates/icons.jsInline SVG icons (hamburger, chevrons, spiral logo, mic, plus, send arrow, stop square, signal/wifi/battery, thumbs up/down)
examples/*.json6 reference threads exercising every variant
examples/assets/Placeholder image assets used by image examples
tests/run-all.shRender every example into tests/output/ for visual review

Known limitations

  • Light mode only. Dark mode would require a separate theme block and is out of scope for v1.
  • No carousel / horizontal-scroll cards. The Apps-SDK SeatGeek reference shows a horizontal card carousel inside the assistant response; not modeled here.
  • No live keyboard rendering. The composer is the bottom pill only — no on-screen keyboard chrome, suggestion bar, or QWERTY grid. (If you need the keyboard, scale the screen down 50% and overlay a separate keyboard image.)
  • Markdown is intentionally minimal — no tables, no fenced code blocks with syntax highlighting, no nested lists. Add to generate.js#renderMarkdown if a brief requires more.
  • Emoji rendering depends on system fonts. Chromium on macOS ships Apple Color Emoji; on Linux ships Noto Color Emoji.

Quality Checks

Run bash tests/run-all.sh and open the PNGs in tests/output/, then confirm:

  • Every example renders without error. All six examples/*.json produce an index.html + screenshot.png + thread.json triplet; render.js exits 0.
  • Dimensions are stable. Each screenshot.png is 2250 × 4872 (the .stage is 750 × 1624 and screenshot.js captures at deviceScaleFactor: 3). A wrong size means the stage box or DPR changed.
  • Light mode, white background. Background is white, text near-black. This atom does not render dark mode.
  • Status bar. Time sits top-left; the signal / wifi / battery cluster sits top-right, unclipped. When statusBar.dnd: true (see 02-sleep-apnea-long.json, 05-seatgeek-gpt-chip.json) a moon glyph renders next to the time.
  • Header style matches the JSON. model-tag shows ChatGPT 5.1 ▾ (01-sunscreen-image.json, 06-short-howto.json); title-only shows the plain title + right chevron (02, 03, 05); plain-title shows the upsell title with no chevron (04-empty-typing.json). The center cluster never wraps and the right icons never overlap it.
  • User turns. User text is a right-aligned soft-gray bubble (#F4F4F4, 28px radius). A user-image (see 01-sunscreen-image.json) renders the attachment right-aligned, same 28px corners, above the text bubble.
  • Assistant turns. Assistant prose is left-aligned plain text with no bubble. Markdown renders: bold/italic, ## headings, bullet and ordered lists (06-short-howto.json), --- horizontal rules and the [[cite:…]] pill chip (02-sleep-apnea-long.json), an [[icon:💡]] inline prefix, and title as bold heading text (03-poem-iphone-mac.json, 05-seatgeek-gpt-chip.json). feedback: false hides the thumbs chips.
  • Empty state. When messages is empty (04-empty-typing.json) the centered OpenAI spiral hero renders instead of a conversation.
  • Composer. Default is the full-pill (999px) bar with +, input, mic, and a round 44×44 send button. With composer.text set (04-empty-typing.json) the send button is solid black and a caret follows the typed text. With streaming: true (02, 03) the send button shows the black stop square. With composer.chip (05-seatgeek-gpt-chip.json) the Apps-SDK GPT chip renders inside the composer above the input row.

Failure Modes

SymptomLikely causeWhat to do
Thread file not found: … then exit 1--thread path is wrong or the cwd is not the skill dirPass an absolute path or cd into the skill directory first (render.js resolves the path against cwd)
Error: playwright not installednpm install never ran in the skill dirRun npm install, then npx playwright install chromium (see Setup)
Run hangs ~15s then page.goto … timeoutscreenshot.js is waiting on networkidle for an asset that never loads (e.g. a remote/http image src)Use a local relative src that resolves under the thread.json dir, or an inline SVG asset like examples/assets/sunscreen-sky.svg
Image attachment shows the broken-image glyphuser-image.src is relative but the file is missing on diskrender.js rewrites a relative src to file://<threadDir>/<src>; make sure the asset actually exists there
Send button stays gray after setting textcomposer.text is "" (empty string) rather than a real valueSet composer.text to a non-empty string, or omit it to keep the placeholder state
PNG comes out the wrong size.stage width/height in templates/chat.css or DEVICE_SCALE/VIEWPORT in screenshot.js was changedKeep .stage at 750 × 1624 and deviceScaleFactor at 3 so output stays 2250 × 4872
Header right icons overlap the model tag on a long titleheader.title is too wide for the centered slotShorten the title, drop the model tag, or switch header.style to "title-only"
[[cite:…]] or [[icon:…]] prints literally instead of renderingThe marker is mistyped (missing double brackets / colon)Match the exact [[cite:Source +1]] / [[icon:💡]] form parsed by formatInline in generate.js
Markdown --- shows as text, not an <hr>The --- line is not on its own line between blank linesPut a blank line above and below the ---, as in 02-sleep-apnea-long.json

发现问题?提交给管理员复核

评分:

评论 (0)

暂无评论,成为第一个评论者吧!