复制安装命令
用 Codex 或 Claude 安装复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它先审查 Skill 页面再帮你安装。
复制前请先查看来源、License 和安全提示。
Put your AI agent on the growth team.
用 Codex 或 Claude 安装复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它先审查 Skill 页面再帮你安装。
复制前请先查看来源、License 和安全提示。
来源文件:README.md
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
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>
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
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
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.
| Stage | What your agent can do | Example skills |
|---|---|---|
| Research | Understand the brand, customers, competitors, audiences, creators, trends, comments, and product demand | brand-research, audience-research, comment-mining, competitor-social-research, influencer-prospecting, trend-discovery, product-demand-research |
| Analyze | Diagnose ads, creator profiles, transcripts, policy risk, landing-page message match, and unusual social performance | competitor-ad-intelligence, creator-profile-teardown, transcript-intelligence, meta-ads-analyzer, meta-ad-policy-checker, ad-to-landing-page-auditor, outlier-post-finder |
| Create | Repurpose research, remix graphic ads, make product photography and social graphics, and animate static images | content-repurposing, remix-graphic-ad-from-reference, product-photoshoot, goose-graphics, animate-image |
| Learn and iterate | Bring results back into research and analysis, then decide the next test | Re-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.
npx gooseworks search "reddit scraping" # Search the skill catalog
npx gooseworks credits # Check your credit balance
npx gooseworks update # Update to latest skill version
200+ skills across the growth stack, grouped by focus area:
| Category | What's inside |
|---|---|
| Ads | Research, build, and analyze paid campaigns across Meta and Google |
| SEO | Keyword research, content gaps, SERP analysis, technical audits |
| Lead generation | Find, enrich, and qualify prospects for your pipeline |
| Outreach | Draft, personalize, and run outbound across email and social |
| Content | Blog posts, social content, carousels, video scripts, newsletters |
| Research | Company, market, and prospect deep-dives |
| Competitive intel | Track competitor pricing, launches, positioning, and ads |
| Monitoring | Watch for mentions, signals, and changes across the web |
| Social | Scrape and analyze social platforms and audiences |
| Brand | Voice, positioning, and visual brand assets |
Browse and search every skill at skills.gooseworks.ai.
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.
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
Each skill directory must include:
SKILL.md — Skill documentation and usage guideskill.meta.json — Machine-readable metadataskill.meta.json fields:
| Field | Required | Description |
|---|---|---|
slug | Yes | Unique kebab-case identifier |
category | Yes | capabilities, composites, or playbooks |
tags | Yes | String array of category tags |
installation.base_command | Yes | Install command |
installation.supports | Yes | Array: claude, codex, cursor |
features | No | Feature flags |
github_url | No | Source repository URL |
author | No | Skill author |
example_prompt | No | Copyable prompt shown in the catalog and docs for trying the skill |
These skills run inside your coding agent, so it's worth knowing exactly what they do:
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./tmp/gooseworks-scripts/, never into your project directory. Only API requests go through GooseWorks servers; review any script before letting your agent run it.SKILL.md to tune that behavior.~/.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.gooseworks install --mcp.Found something that looks off? Open an issue — we'd rather fix it in public.
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.
Built by GooseWorks
name: champion-move-outreach
version: 1.0.0
description: >
End-to-end champion/buyer/user job change signal composite. Takes a set of
known people (past buyers, champions, power users), detects when they move
to a new company, researches the new company for ICP fit, and drafts
personalized outreach leveraging the existing relationship. Tool-agnostic —
works with any people source, detection method, and outreach platform.
tags: [outreach]
graph:
provides:
- movers-with-icp-fit # People who moved to ICP-fit companies
- new-company-research # Research on the new companies
- personalized-email-sequences # Outreach drafts leveraging existing relationship
requires:
- people-list # Known buyers, champions, users to track
- your-company-context # What you sell, ICP definition
connects_to:
- skill: cold-email-outreach
when: "User wants to launch the campaign via their outreach tool"
passes: movers-with-icp-fit, personalized-email-sequences
- skill: linkedin-outreach
when: "User wants LinkedIn outreach instead of or alongside email"
passes: movers-with-icp-fit
capabilities: [web-search, contact-finding, email-drafting]Tracks known buyers, champions, and power users for job changes. When someone who already knows your product moves to a new company, that's the highest-conversion outbound signal in B2B — they already trust you, they're in a new role trying to make an impact, and they have firsthand experience with what your product delivers.
Why this is the #1 signal: Every other signal (funding, hiring, leadership change) targets strangers. This targets people who already know, like, and trust your product. Conversion rates on champion-move outreach are 3-5x higher than cold outreach because:
Load this composite when:
On first run for a client/user, collect and store these preferences. Skip on subsequent runs.
| Question | Purpose | Stored As |
|---|---|---|
| Where does your list of people to track come from? | Defines the input source | people_source |
| What categories of people are you tracking? | Determines outreach tone per person | tracked_categories |
People source options:
people table — filter by lead_status = 'customer' or similarTracked categories:
| Category | Who They Are | Why They Matter | Stored As |
|---|---|---|---|
| Past buyers | Signed the contract at their previous company | Can sign again. Know the ROI. Can articulate value to new leadership. | past_buyers |
| Past champions | Advocated for your product internally, drove adoption | Will champion again. Often have stronger conviction than the original buyer. | past_champions |
| Power users | Used your product daily, know it deeply | Can demonstrate value hands-on. Often become the internal expert at the new company. | power_users |
| Lost deal contacts | Evaluated your product but chose a competitor or no decision | Weaker signal but still valid — they know you exist. New company = fresh start. | lost_deal_contacts |
| Question | Purpose | Stored As |
|---|---|---|
| What industries do you sell to? | Filter out non-ICP companies | target_industries |
| What company sizes? (employee count ranges) | Filter out too-small or too-large | target_company_size |
| What geographies? | Filter if relevant | target_geographies |
| Any disqualifiers? (e.g., government, non-profit, specific verticals) | Hard no's | disqualifiers |
| What's the minimum viable deal? | Don't chase companies too small to pay | minimum_deal_size |
| Question | Options | Stored As |
|---|---|---|
| How should we detect job changes? | LinkedIn profile monitoring / Apollo job change data / Web search / Manual check | detection_tool |
| How often should we check? | Weekly / Biweekly / Monthly | check_frequency |
| Question | Options | Stored As |
|---|---|---|
| Where do you want outreach sent? | Smartlead / Instantly / Outreach.io / CSV export | outreach_tool |
| Email or multi-channel? | Email only / Email + LinkedIn | outreach_channels |
| Question | Purpose | Stored As |
|---|---|---|
| What does your company do? (1-2 sentences) | New company research context | company_description |
| What results did customers typically see? | Proof points for outreach | customer_results |
| Any specific results from the tracked person's previous company? | Strongest possible proof | specific_results |
Store config in: clients/<client-name>/config/signal-outreach.json or equivalent.
Purpose: For each person in the tracking list, determine if they've moved to a new company.
tracked_people: [
{
full_name: string # Required
linkedin_url: string # Strongly recommended (most reliable for matching)
email: string | null # Previous email (will be outdated after move)
last_known_company: string # The company they were at when you knew them
last_known_title: string # Their title when you knew them
category: "past_buyer" | "past_champion" | "power_user" | "lost_deal_contact"
relationship_context: string | null # e.g. "Signed $50K deal in 2025", "Led implementation"
}
]
For each person, use the configured detection_tool:
Check current position against last_known_company:
last_known_company"{full_name}" AND ("{last_known_company}" OR "joined" OR "new role") — look for announcementsFor each person, determine:
For each mover, extract:
movers: [
{
person: {
full_name: string
linkedin_url: string
category: string # "past_buyer", "past_champion", etc.
relationship_context: string
previous_company: string
previous_title: string
}
move: {
new_company: string
new_company_domain: string
new_title: string
start_date: string # ISO date or approximate
days_in_new_role: integer
is_promotion: boolean # Higher title than before?
}
}
]
no_change: [
{ full_name: string, still_at: string }
]
unable_to_verify: [
{ full_name: string, reason: string } # Profile private, no data, etc.
]
## Job Change Detection Results
Tracked: X people
Moved: Y people
No change: Z people
Unable to verify: W people
### People Who Moved
| Name | Category | Was At | Now At | New Title | Days In |
|------|----------|--------|--------|-----------|---------|
| Jane Doe | Past buyer | Acme Corp | NewCo Inc | VP Sales | 45 days |
| Bob Lee | Power user | Beta LLC | StartupX | Sales Manager | 12 days |
| ... | ... | ... | ... | ... | ... |
### Unable to Verify
| Name | Reason |
|------|--------|
| Sam Chen | LinkedIn profile set to private |
Proceed to research their new companies? (Y/n)
Purpose: For each mover, research their new company and determine if it's a fit for your product. This is the critical gate — just because someone you know moved doesn't mean their new company is a prospect.
movers: [...] # From Step 1 output
icp_criteria: {
target_industries: string[]
target_company_size: string # e.g. "50-500 employees"
target_geographies: string[]
disqualifiers: string[]
minimum_deal_size: string
}
your_company: {
description: string
}
For each mover's new company:
Research the new company using web search (tool-agnostic — always available):
Qualify against ICP:
| Criterion | Check | Pass/Fail |
|---|---|---|
| Industry | Is new_company.industry in target_industries? | Hard filter |
| Size | Is employee count within target_company_size range? | Hard filter |
| Geography | Is location in target_geographies? (Skip if no geo filter) | Soft filter |
| Disqualifiers | Does the company match any disqualifiers? | Hard filter |
| Deal viability | Could this company afford minimum_deal_size? | Judgment call |
Assess the person's position at the new company:
| Factor | What to Check | Why It Matters |
|---|---|---|
| Authority level | Is their new title at or above their old title? | Higher = more budget authority |
| Department fit | Are they in a department that buys/uses your product? | Must be in the right department |
| Influence trajectory | Promoted into a leadership role? | More influence = stronger champion |
| Seniority mismatch | Were they a user before, now they're a VP? | Adjust outreach — they're a buyer now, not a user |
Determine outreach approach based on category + new position:
| Category at Old Company | New Position Level | Approach |
|---|---|---|
| Past buyer → Buyer-level title | Re-sell: "You bought us before, bring us to [new company]" | |
| Past buyer → Higher title | Executive re-sell: "Now that you run [department], [product] scales with you" | |
| Past champion → Buyer-level title | Upgrade: "You championed us internally — now you own the budget" | |
| Past champion → Same level | Lateral champion: "Bring what worked at [old company] to [new company]" | |
| Power user → Any level | Bottom-up: "You know the product inside out — want to bring it to your new team?" | |
| Lost deal contact → Any | Fresh start: "Different company, different needs. Worth a second look?" |
qualified_movers: [
{
person: {
full_name: string
linkedin_url: string
category: string
relationship_context: string
previous_company: string
previous_title: string
}
move: {
new_company: string
new_company_domain: string
new_title: string
start_date: string
days_in_new_role: integer
is_promotion: boolean
}
new_company_research: {
description: string # What the company does
industry: string
employee_count: string # Approximate
location: string
funding_stage: string | null
recent_news: string[] # 2-3 relevant items
}
qualification: {
icp_fit: "strong" | "moderate" | "weak"
icp_reasoning: string # Why it's a fit or not
authority_level: "buyer" | "influencer" | "user"
outreach_approach: string # "re-sell", "upgrade", "lateral champion", "bottom-up", "fresh start"
}
priority_tier: "tier_1" | "tier_2" | "tier_3"
}
]
disqualified_movers: [
{
full_name: string
new_company: string
disqualification_reason: string # "Industry not in ICP", "Company too small", etc.
}
]
## New Company Research & Qualification
### Tier 1 — Act Today (X movers)
| Name | Category | New Company | ICP Fit | Approach | Days In |
|------|----------|-------------|---------|----------|---------|
| Jane Doe | Past buyer | NewCo Inc (Series B, 120 employees, SaaS) | Strong | Re-sell | 45 days |
Research: NewCo Inc is a logistics SaaS platform. 120 employees, Series B,
HQ in Austin. Recently launched an enterprise tier. Strong fit — same
industry, right size, Jane has budget authority as VP Sales.
### Tier 2 — Act This Week (X movers)
| ... |
### Disqualified (X movers)
| Name | New Company | Reason |
|------|-------------|--------|
| Sam Lee | TinyStartup | 8 employees, pre-revenue — below minimum deal size |
Approve before we draft outreach?
Purpose: Get the mover's new email address and any additional context at the new company.
qualified_movers: [...] # From Step 2 output
contact_tool: string # From config
Find new work email — their old email is outdated. Use the configured contact_tool:
"{full_name}" AND "@{new_company_domain}" or company contact patternsVerify the email is at the new company — don't accidentally email their old address.
Flag contacts without email — these should be routed to LinkedIn outreach instead.
contactable_movers: [
{
...qualified_mover_fields,
new_email: string
email_confidence: "verified" | "likely" | "pattern_guess"
preferred_channel: "email" | "linkedin" | "both"
}
]
email_not_found: [
{
...qualified_mover_fields,
linkedin_url: string # Fall back to LinkedIn
preferred_channel: "linkedin"
}
]
## Contact Details
| Name | New Company | Email | Confidence | Channel |
|------|-------------|-------|------------|---------|
| Jane Doe | NewCo Inc | jane.doe@newco.com | Verified | Email |
| Bob Lee | StartupX | — | Not found | LinkedIn |
X contacts with email, Y LinkedIn-only
Approve before we draft outreach?
Purpose: Draft outreach that leverages the existing relationship. This is NOT cold email — these people know you. The tone, length, and approach are fundamentally different from the other signal composites. Pure LLM reasoning — inherently tool-agnostic.
contactable_movers: [...] # From Step 3 output
your_company: {
description: string
customer_results: string[] # General results customers see
specific_results: { # Results at their specific previous company (if available)
[company_name]: string # e.g. "Acme Corp: reduced call handling time by 40%"
}
}
sequence_config: {
touches: integer # Default: 3
timing: integer[] # Default: [1, 7, 14] (more spaced — less urgency, warmer relationship)
tone: string # Default: "casual-direct" (you know this person)
cta: string # Default: "quick catch-up call"
}
Tone is fundamentally different from cold outreach:
| Cold Outreach | Champion Move Outreach |
|---|---|
| Formal introduction | Casual reconnection |
| Prove you're legitimate | They already trust you |
| Signal-Proof-Ask framework | Relationship-Context-Ask framework |
| "I noticed..." | "Hey — congrats on the move!" |
| 50-90 words Touch 1 | Can be shorter — no education needed |
| Professional-sharp tone | Casual-direct tone (you know each other) |
Build the email around the relationship, not the product:
| Element | Source | How to Use |
|---|---|---|
| Relationship anchor | relationship_context | "You were one of our first champions at [old company]" |
| Their results | specific_results or customer_results | "The 40% improvement your team saw at [old company]..." |
| New role congratulations | move.new_title + move.new_company | "Congrats on VP Sales at NewCo" |
| New company relevance | new_company_research | "NewCo's push into enterprise makes this a natural fit" |
| Category-specific angle | category + qualification.outreach_approach | See table below |
Email angle by outreach approach:
| Approach | Touch 1 Template Shape | Example |
|---|---|---|
| Re-sell | Congrats + "remember the results?" + "bring it to [new company]" | "Hey Jane — congrats on the VP Sales gig at NewCo. You saw what [product] did at Acme (40% faster call handling). NewCo's sales team could see the same lift. Worth a quick catch-up?" |
| Upgrade | Congrats + "you championed this" + "now you own the budget" | "Congrats on the promotion. You pushed for [product] at [old company] — now you actually control the budget. Want to talk about bringing it to NewCo?" |
| Lateral champion | Congrats + "you know what works" + "replicate it" | "Hey — saw you landed at NewCo. You know firsthand what [product] does. If the team there has the same [pain], happy to help you set it up." |
| Bottom-up | Congrats + "you were a power user" + "your new team will love it" | "Congrats on the move. You were one of our best users at [old company]. If you want [product] on your desk at NewCo, I can get you set up quickly." |
| Fresh start | Congrats + acknowledge the past + "different situation, worth a second look" | "Hey — congrats on the move to NewCo. I know the timing wasn't right when we spoke at [old company]. Different company, different needs — open to a fresh conversation?" |
Sequence design (warmer, more spaced):
| Touch | Day | Purpose | Length | Notes |
|---|---|---|---|---|
| Touch 1 | 1 | Reconnect + congrats + soft ask | 40-70 words | Shorter than cold — they know you |
| Touch 2 | 7 | Share a relevant result or update | 30-50 words | New feature, new customer in their industry, case study |
| Touch 3 | 14 | Low-pressure check-in | 20-30 words | "No rush — whenever the timing is right" |
Key difference from cold sequences: More spacing between touches (they're not a stranger you'll lose if you wait), warmer tone, and Touch 3 is a check-in not a breakup.
Follow email-drafting hard rules with one exception: Rule 6 ("never lie about how you found them") is flipped — you SHOULD reference exactly how you know them. That's the whole point.
email_sequences: [
{
contact: {
full_name: string
new_email: string
new_title: string
new_company: string
category: string
relationship_context: string
outreach_approach: string
}
sequence: [
{
touch_number: integer
send_day: integer
subject: string
body: string
personalization_elements: {
relationship_anchor: string # How the relationship was referenced
their_results: string | null # Specific results referenced
new_role_reference: string # How the new role was acknowledged
new_company_relevance: string # Why new company is a fit
}
word_count: integer
}
]
channel: "email" | "linkedin"
}
]
Present samples covering different outreach approaches:
## Sample Outreach for Review
### Jane Doe — VP Sales @ NewCo Inc
Category: Past buyer | Approach: Re-sell | 45 days in new role
**Touch 1 — Day 1**
Subject: Congrats on NewCo — quick thought
> Hey Jane — congrats on the VP Sales move to NewCo. Your team at Acme
> saw a 40% improvement in call handling after going live with [product].
> NewCo's enterprise push could see the same lift.
>
> Worth a 15-minute catch-up?
**Touch 2 — Day 7**
Subject: NewCo + [product] — a few ideas
> Quick follow-up — we just launched [new feature] that would've
> been perfect for the workflow your team ran at Acme. Happy to
> walk you through it.
**Touch 3 — Day 14**
Subject: Whenever the timing is right
> No rush on this. If [product] makes sense for what you're building
> at NewCo, I'm a quick call away. Either way, congrats again on the role.
---
### Bob Lee — Sales Manager @ StartupX (LinkedIn only)
Category: Power user | Approach: Bottom-up | 12 days in new role
**LinkedIn Message:**
> Hey Bob — congrats on StartupX! You were one of our most active users
> at Beta LLC. If you want [product] set up for your new team, happy
> to fast-track it. Let me know.
---
Approve these samples? I'll generate the rest in the same style.
Identical to funding-signal-outreach Step 5. Package contacts + email sequences for the configured outreach tool. Route LinkedIn-only contacts to linkedin-outreach skill.
Some contacts will be email, some will be LinkedIn-only. Split the output:
campaign_package: {
email_campaign: {
tool: string
file_path: string
contact_count: integer
}
linkedin_campaign: {
file_path: string # CSV for LinkedIn tool or manual queue
contact_count: integer
}
total_contacts: integer
sequence_touches: integer
next_action: string
}
## Campaign Ready
Signal type: Champion/buyer/user job change
Email contacts: X people → [outreach tool]
LinkedIn contacts: Y people → LinkedIn message queue
Total: Z people across W companies
Sequence: 3 touches over 14 days
Ready to launch?
| Step | Tool Dependency | Human Checkpoint | Typical Time |
|---|---|---|---|
| 0. Config | None | First run only | 5 min (once) |
| 1. Detect job changes | Configurable (LinkedIn, Apollo, web search) | Review movers list | 2-5 min |
| 2. Research + qualify | Web search (always available) | Approve qualified movers | 3-5 min |
| 3. Find new email | Configurable (Apollo, Clearbit, etc.) | Review contact details | 1-2 min |
| 4. Draft outreach | None (LLM reasoning) | Review samples, iterate | 5-10 min |
| 5. Handoff | Configurable (Smartlead, CSV, etc.) | Final launch approval | 1 min |
Total human review time: ~15-25 minutes
| Dimension | Funding / Hiring / Leadership | Champion Move |
|---|---|---|
| Relationship | Cold — they don't know you | Warm — they know and (hopefully) like you |
| Input | List of companies | List of people |
| Signal about | The company | The person |
| Qualification | Is the company relevant? | Is the NEW company relevant? (Person is already qualified) |
| Tone | Professional, prove credibility | Casual, reference shared history |
| Conversion rate | 2-5% reply rate | 10-25% reply rate |
| Sequence spacing | Tight (Day 1/5/12) | Relaxed (Day 1/7/14) |
| Touch 3 | Breakup | Check-in (leave door open) |
评论 (0)
暂无评论,成为第一个评论者吧!