Agent skill

Linkedin Outreach

by gooseworks-ai in gooseworks-ai/goose-skills

End-to-end LinkedIn outreach campaign builder. An agent skill from gooseworks-ai/goose-skills.

MITAuto-check: notesDocuments & Office

Install Linkedin Outreach

skills CLI
$ npx skills add gooseworks-ai/goose-skills --skill linkedin-outreach -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install gooseworks-ai/goose-skills linkedin-outreach --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/gooseworks-ai/goose-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/outreach/capabilities/linkedin-outreach .claude/skills/linkedin-outreach && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
linkedin-outreach
GitHub stars
1.2k
Used in
1 other repo
Token cost
~4.4k tokens
SKILL.md length
1,944 words
Files
9
Skills in repo
273
Repo updated
First seen
Licence
MIT

At a glance

End-to-end LinkedIn outreach campaign builder. An agent skill from gooseworks-ai/goose-skills.

  • Works in 7 steps: Intake → Lead Selection from Supabase → Sequence Design → …
  • Tasks that involve CSV and tabular files
  • SKILL.md covers When to Auto-Load, Supported Outreach Tools, Prerequisites and Character Limits, plus 5 more sections
  • Calls python3; reaches xxx.supabase.co; needs SUPABASE_SERVICE_ROLE_KEY

What it does

Linkedin Outreach is an agent skill from gooseworks-ai/goose-skills. End-to-end LinkedIn outreach campaign builder. Takes leads from Supabase, upstream skills, or CSV. Aligns on campaign goal and tone, writes personalized LinkedIn message sequences (connection request + follow-ups + optional InMail), presents for review, and exports for the user's outreach tool (Dripify, Botdog, Expandi, or manual CSV). Logs to Supabase outreachlog.

Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files (for example `skill.meta.json`, `templates/sequence-templates/competitor-engagement.md` and `templates/sequence-templates/database-search.md`).

It sits in Documents & Office, covering CSV and tabular files. It works with LinkedIn and Supabase. The repository describes itself as: Library of Growth & GTM skills + data APIs for Claude Code, Codex, Cursor to run ads, social, content, lead gen, seo and data scraping. The licence is MIT.

When your agent uses it

  • Tasks that involve CSV and tabular files

Example prompts

  • “/linkedin-outreach”

Requirements

  • Python 3
  • A credential in SUPABASE_SERVICE_ROLE_KEY

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Intake
  2. Lead Selection from Supabase
  3. Sequence Design
  4. Message Generation
  5. Campaign Export
  6. Review & Approval
  7. Logging

What it can do on your machine

Read from SKILL.md and the folder at commit c650c6d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • xxx.supabase.co

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • SUPABASE_SERVICE_ROLE_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Linkedin Outreach loads about 4.4k tokens when it runs. Until then it costs about 97 tokens; SKILL.md has 1,944 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~97
When it runs · the whole SKILL.md, loaded when a task matches
~4.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:48
    Environment variables in `.env`:

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from gooseworks-ai/goose-skills at commit c650c6d, republished under its MIT licence (© gooseworks-ai). 1,944 words, ~4,428 tokens.

Download SKILL.mdSave it as .claude/skills/linkedin-outreach/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.
name
linkedin-outreach
description
End-to-end LinkedIn outreach campaign builder. Takes leads from Supabase, upstream skills, or CSV. Aligns on campaign goal and tone, writes personalized LinkedIn message sequences (connection request + follow-ups + optional InMail), presents for review, and exports for the user's outreach tool (Dripify, Botdog, Expandi, or manual CSV). Logs to Supabase outreach_log.
tags
outreach

LinkedIn Outreach

The LinkedIn counterpart to cold-email-outreach. Takes qualified leads from Supabase, builds personalized LinkedIn message sequences, exports for the user's LinkedIn outreach tool, and logs everything back to Supabase.

Tool-agnostic: Asks the user which LinkedIn tool they use. All tools are CSV-import based — no API/MCP automation for LinkedIn tools (they're browser-based). Adapters handle column mapping and format differences per tool.

When to Auto-Load

Load this skill when:

  • User says "LinkedIn outreach", "connect with these leads on LinkedIn", "send LinkedIn messages", "set up a LinkedIn campaign"
  • An upstream skill connects with "create LinkedIn campaign" or "passes: supabase-eligible-leads" and user specifies LinkedIn
  • User completes lead-qualification and wants to reach out via LinkedIn

Supported Outreach Tools

This skill does NOT assume a specific tool. It asks first, then adapts.

ToolIntegrationHow It Works
DripifyCSV importGenerate CSV matching Dripify's import format, user uploads manually
BotdogCSV importGenerate CSV with Botdog-compatible columns
ExpandiCSV importGenerate CSV matching Expandi import format
PhantomBusterCSV importGenerate CSV for PhantomBuster LinkedIn sequences
Manual / OtherCSV + instructionsExport leads + messages as generic CSV, provide setup instructions

Tool selection logic:

  1. Ask user in Phase 0: "Which LinkedIn outreach tool do you use?"
  2. Generate tool-specific import CSV based on selection
  3. If Other or unknown → generate generic CSV (linkedin_url, first_name, last_name, company, title, connection_request, followup_1, followup_2, followup_3, inmail_subject, inmail_body) and ask user for their tool's import requirements

Prerequisites

Supabase

People must be stored in Supabase with the schema from tools/supabase/schema.sql. The people and outreach_log tables must exist. Run python3 tools/supabase/setup_database.py if setting up fresh.

Environment variables in .env:

SUPABASE_URL=https://xxx.supabase.co
SUPABASE_SERVICE_ROLE_KEY=eyJ...
LinkedIn Tool

Just need CSV export — no API keys required. The user imports the CSV into their tool manually.

Character Limits

LinkedIn enforces strict character limits. All generated messages must respect these.

Message TypeLimitNotes
Connection request note300 charactersHard limit. Every character counts.
Regular message8,000 charactersSent after connection accepted
InMail subject200 charactersOnly for InMail (premium feature)
InMail body1,900 charactersOnly for InMail

Enforcement: After generating any message, count characters. If over the limit, rewrite — do not truncate. Truncated messages look broken.

Phase 0: Intake

Ask all questions at once. Organize by category. Skip any already answered by an upstream skill.

Campaign Goal
  1. What's the objective? (book meetings, drive demo requests, get replies, build relationships, nurture)
  2. What's the outreach angle or hook? (hiring signal, competitor displacement, event-based, pain-based, cold database, KOL engagement, mutual connection)
  3. What should we name this campaign?
Outreach Tool
  1. Which LinkedIn outreach tool do you use? (Dripify / Botdog / Expandi / PhantomBuster / Other / Just give me a CSV)
Lead Selection
  1. Which leads should we target? Options:
    • All leads for a specific client_name
    • Specific icp_segment
    • Title patterns (e.g., "VP Operations", "Director of Sales")
    • Industry or location filters
    • qualification_score above a threshold
    • Specific source (crustdata, apollo, linkedin, etc.)
    • Custom filter (describe what you want)
  2. Any exclusions? (specific companies, recently contacted leads, certain titles)
  3. Max campaign size? (default: 100 — LinkedIn tools have lower daily limits than email)
Tone & Style
  1. Which tone preset? Present these options:
    • Casual Professional — Friendly, human, slightly informal. Like messaging a peer. (default)
    • Thought Leader — Lead with insight or a contrarian take. Position sender as an expert.
    • Provocative — Challenge assumptions, pattern-interrupt. Higher risk, higher reward.
    • Enterprise Formal — Polished, structured. For regulated industries or C-suite targets.
    • Custom — Paste reference messages that worked before, or describe the vibe.
  2. Any reference messages that have worked well? (paste examples — these override tone presets)
Sequence Structure
  1. How many follow-ups after connection? (default: 3)
  2. Timing between messages? (default: Day 0 connection / Day 3 FU1 / Day 7 FU2 / Day 14 FU3)
  3. Include InMail as a separate step for leads who don't accept the connection? (default: yes)
Personalization
  1. What signal data is available for these leads? (comment text, post they engaged with, mutual connections, hiring signals, event attendance)
  2. Any proof points or case studies to reference? (customer names, metrics, testimonials)

Phase 1: Lead Selection from Supabase

Connect

Use the shared Supabase client:

python
import sys, os
sys.path.insert(0, os.path.join("tools", "supabase"))
from supabase_client import SupabaseClient

client = SupabaseClient(os.environ["SUPABASE_URL"], os.environ["SUPABASE_SERVICE_ROLE_KEY"])
Build Filters

Map user criteria to PostgREST query parameters on the people table:

User SaysPostgREST Filter
"VP Operations"title=ilike.*VP Operations*
Client "happy-robot"client_name=eq.happy-robot
Score > 7qualification_score=gte.7
Has LinkedIn URLlinkedin_url=neq. (not empty)
Industry "logistics"industry=ilike.*logistics*
Location "San Francisco"location=ilike.*San Francisco*
Source "crustdata"source=eq.crustdata
Not contacted in 84 daysor=(last_contacted.is.null,last_contacted.lt.{84_days_ago})

Critical: For LinkedIn outreach, people MUST have a linkedin_url. Filter out people without one — they can't be contacted via LinkedIn.

Cooldown Filter (Mandatory)

Always exclude people contacted within 84 days (12 weeks) on ANY channel (email or LinkedIn). This is not optional.

Use the shared client's check_cooldown() method:

python
in_cooldown = client.check_cooldown(client_name="happy-robot", cooldown_days=84)
# Returns set of person_id strings still in cooldown

Or query directly:

  1. Query outreach_log for person_ids with sent_date in the last 84 days:
    GET /rest/v1/outreach_log?select=person_id&sent_date=gte.{84_days_ago}&status=neq.bounced&client_name=eq.{client}
  2. Collect those person_ids into an exclusion set
  3. Add id=not.in.({excluded_ids}) to the people query

Note: Cooldown applies across channels. A person emailed 30 days ago is still in cooldown for LinkedIn. This prevents multi-channel bombardment.

Present & Confirm

Show a sample table (10-15 leads) with:

  • Name, Title, Company, Industry, Score, LinkedIn URL, Last Contacted, Signal Type

Tell user: total eligible leads, how many excluded by cooldown, how many excluded for missing LinkedIn URL.

Ask user to confirm or adjust filters before proceeding.

Phase 2: Sequence Design

Present the sequence plan as a table before writing any copy:

StepTimingMessage TypeApproachCTA
1Day 0Connection request (300 chars)Signal-based personalized noteSoft — just connect
2Day 3Follow-up 1 (after accepted)Value-first: insight, resource, or observationQuestion or offer
3Day 7Follow-up 2Social proof or case studySpecific ask
4Day 14Follow-up 3Breakup / last touchOpen door
5Day 7*InMail (if not accepted)Standalone pitch with contextMeeting request

*InMail is sent to leads who haven't accepted the connection request by Day 7.

Key differences from email sequences:

  • Connection request is the gatekeeper — it must earn the accept. No selling in the connection note.
  • Follow-ups are conversational, not broadcast. They should read like DMs, not emails.
  • No subject lines except for InMail.
  • Shorter is almost always better. A 2-sentence message outperforms a 5-sentence one on LinkedIn.

Get user approval on the structure before generating copy in Phase 3.

Phase 3: Message Generation

Generate messages directly in this skill (no external sub-skill needed — LinkedIn messages are short enough to handle inline).

Signal-Aware Template Selection

Select the appropriate sequence template based on lead signal data:

Signal TypeTemplateKey Personalization Variable
Pain-language engager (has comment text)templates/sequence-templates/pain-language.md{comment_snippet}, {pain_topic}
Competitor post engagertemplates/sequence-templates/competitor-engagement.md{competitor_name}, {post_topic}
KOL engagertemplates/sequence-templates/kol-engagement.md{kol_name}, {post_topic}
Database search (lean signal)templates/sequence-templates/database-search.md{title}, {company}, {industry}
Hiring signaltemplates/sequence-templates/hiring-signal.md{role_hiring_for}, {job_posting_detail}
Event attendeetemplates/sequence-templates/event-attendee.md{event_name}, {event_topic}
Tone Calibration
  1. Load the selected tone preset from templates/tone-presets.json
  2. If user provided reference messages, those override the preset — analyze the reference messages for tone, length, structure, and vocabulary
  3. Apply tone guidelines to all generated messages
Show full SKILL.md (799 more words)Show less
Calibration Loop
  1. Generate sample messages for 3-5 leads first (pick leads with different signal richness levels)
  2. Present to user for review — show the full sequence for each sample lead
  3. Iterate until approved (max 3 rounds)
  4. Batch generate remaining messages after approval
Writing Guidelines

Connection Request (300 chars max):

  • Lead with the signal (what they did/said that caught your attention)
  • One sentence of relevance (why you're connecting)
  • No pitch, no CTA, no "I'd love to..." — just be interesting enough to accept
  • MUST be under 300 characters. Count every character.

Follow-up 1 (value-first):

  • Thank for connecting (briefly — one clause, not a whole sentence)
  • Share something genuinely useful: insight, article, observation about their company/industry
  • End with a question, not a pitch

Follow-up 2 (social proof):

  • Reference a relevant customer or case study
  • Connect it to their specific situation
  • Make a specific, low-commitment ask (15-min call, async question)

Follow-up 3 (breakup):

  • Acknowledge you've been reaching out
  • One-line value recap
  • Leave the door open without pressure
  • Shortest message in the sequence

InMail (standalone pitch):

  • Subject: 200 chars max — curiosity-driven, not salesy
  • Body: 1,900 chars max — must work standalone since they haven't accepted your connection
  • Include context for why you're reaching out (the signal)
  • Must work even if they've never heard of you
Merge Variables

Standard variables available for all leads:

  • {first_name}, {last_name}, {company}, {title}, {industry}, {location}

Signal-specific variables (available based on source):

  • {comment_snippet} — the text of their LinkedIn comment
  • {pain_topic} — the pain point they engaged with
  • {competitor_name} — the competitor whose post they engaged with
  • {kol_name} — the KOL whose post they engaged with
  • {post_topic} — what the post was about
  • {event_name} — the event they attended
  • {role_hiring_for} — the role they're hiring for
  • {job_posting_detail} — a detail from the job posting

Phase 4: Campaign Export

Step 1: Generate Universal CSV

Core columns for all exports:

linkedin_url, first_name, last_name, company, title, connection_request, followup_1, followup_2, followup_3, inmail_subject, inmail_body
Step 2: Format for Selected Tool

Dripify:

  • Column mapping: Profile URL → linkedin_url, Note → connection_request, Message 1 → followup_1, etc.
  • Dripify expects one row per lead with all messages in separate columns
  • Export format: CSV with headers matching Dripify's import template

Botdog:

  • Column mapping: linkedin_profile_url → linkedin_url, connection_note → connection_request, message_1 → followup_1, etc.
  • Export format: CSV

Expandi:

  • Column mapping: LinkedIn URL → linkedin_url, Connection message → connection_request, Follow-up #1 → followup_1, etc.
  • Supports InMail columns: InMail subject, InMail message
  • Export format: CSV

PhantomBuster:

  • Column mapping: profileUrl → linkedin_url, message → connection_request
  • PhantomBuster typically handles one action at a time — may need separate CSVs for connection + follow-ups
  • Export format: CSV

Manual / Other:

  • Use the universal CSV format
  • Provide column descriptions and tool-agnostic import instructions
  • Ask user what format their tool expects, adjust if needed
Step 3: Save Files
skills/linkedin-outreach/output/{campaign-name}-{YYYY-MM-DD}.csv

Create the output/ directory if it doesn't exist.

Step 4: Optional Google Sheet

If user wants a review sheet, use google-sheets-write capability to create a sheet with:

  • Tab 1: Lead list with all messages (one row per lead)
  • Tab 2: Sequence templates (the master templates used)
  • Tab 3: Campaign config summary

Phase 5: Review & Approval

Present campaign summary:

Campaign: {name}
Tool: {dripify/botdog/expandi/etc.}
Leads: {count}
Sequence: Connection + {followup_count} follow-ups + InMail
Timing: Day 0 → Day {last_day}
Tone: {preset_name}
Signal types: {breakdown by signal type}
Leads with rich signal: {count} ({percentage}%)
Leads with lean signal: {count} ({percentage}%)
Export file: {file_path}
Hard Approval Gate

Do NOT mark the campaign as ready without explicit user confirmation. Present the summary, then ask: "Ready to finalize? Type 'yes' to mark as ready for import."

After approval:

  • Tell user the file is ready for import into their LinkedIn tool
  • Provide the file path
  • Give tool-specific import instructions (see Phase 4)
  • Remind user to verify the first 5-10 messages look correct after import

Phase 6: Logging

Database Write Policy

All database writes in this phase require the user's prior approval from the finalization gate in Phase 5. Since LinkedIn campaigns are always exported (never auto-launched), confirm with the user before logging to outreach_log — they may not have actually imported the campaign into their LinkedIn tool yet. Only log after the user confirms the export is final.

Log to Supabase

After export and user confirmation, insert records into outreach_log:

POST /rest/v1/outreach_log
Prefer: return=minimal

[
  {
    "person_id": "{person_uuid}",
    "campaign_name": "{campaign_name}",
    "channel": "linkedin",
    "tool": "{dripify/botdog/expandi/phantombuster/manual}",
    "sent_date": "{ISO timestamp}",
    "status": "exported",
    "client_name": "{client_name}"
  },
  ...
]

Or use the shared client:

python
client.log_outreach(entries)

Status is "exported", not "sent". LinkedIn tools are browser-based — we can't confirm delivery. The status changes to "sent" when the user confirms they launched the campaign in their tool.

Update People Records

Update last_contacted on the people table for all people in this campaign:

PATCH /rest/v1/people?id=in.({person_ids})
{ "last_contacted": "{ISO timestamp}" }
Present Summary
Campaign: {name}
{count} people logged to outreach_log (channel: linkedin)
last_contacted updated for {count} people
Cooldown active until: {date + 84 days}
Next eligible re-contact: {date}
File ready: {file_path}

Cooldown Enforcement Rules

Reference section for cooldown logic used throughout this skill. Shared with cold-email-outreach.

RuleDetail
Default cooldown84 days (12 weeks) from sent_date
Cross-channelCooldown applies across email AND LinkedIn. A lead emailed recently is in cooldown for LinkedIn too.
Bounced leadsExempt from cooldown (email only — LinkedIn doesn't bounce). Filter: status=neq.bounced when checking cooldown
Active campaign leadsAlways ineligible — if a lead is in an active campaign on any channel, they cannot be added to another campaign
User overrideUser can explicitly override cooldown for specific leads — ask for confirmation before allowing
Null last_contactedLeads never contacted are always eligible

Output Directory

Campaign exports are saved to:

skills/linkedin-outreach/output/

Create this directory if it doesn't exist. Files are named {campaign-name}-{YYYY-MM-DD}.csv.

© gooseworks-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 8 other files in skills/outreach/capabilities/linkedin-outreach of gooseworks-ai/goose-skills.

  • SKILL.md
  • skill.meta.json
  • templates/sequence-templates/competitor-engagement.md
  • templates/sequence-templates/database-search.md
  • templates/sequence-templates/event-attendee.md
  • templates/sequence-templates/hiring-signal.md
  • templates/sequence-templates/kol-engagement.md
  • templates/sequence-templates/pain-language.md
  • templates/tone-presets.json

Open the folder on GitHubat commit c650c6d

Used in 1 other repository

We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in gooseworks-ai/goose-skills, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Linkedin Outreach next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Linkedin Outreach compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Linkedin Outreach this skillgooseworks-ai/goose-skills1.2k1 repos~4.4kAutomated safety check: NotesMIT
Fullenrich Network ActivationOthmane-Khadri/YALC-the-GTM-operating-system318—~1.1kAutomated safety check: WarnMIT
Sft Cleanup Hf Onlyopen-thoughts/OpenThoughts-Agent301—~1.1kAutomated safety check: PassApache-2.0
Email Searchextruct-ai/gtm-skills109—~1.3kAutomated safety check: PassNone
Fullenrich Content EngagersOthmane-Khadri/YALC-the-GTM-operating-system318—~1.5kAutomated safety check: WarnMIT
Competitor Engagersgrowthenginenowoslawski/coldoutboundskills753—~1.2kAutomated safety check: NotesMIT

Similar skills

  • Fullenrich Network Activation

    Othmane-Khadri/YALC-the-GTM-operating-system

    A skill your agent uses when the user says "activate co-founder network with FullEnrich", "enrich LinkedIn connections export", "qualify my LinkedIn connections CSV", "turn Connections.csv into a…

    318 GitHub stars~1.1k tokensUpdated 1 mo ago
    Documents & OfficeAuto-check: warnings
  • Sft Cleanup Hf Only

    open-thoughts/OpenThoughts-Agent

    Clean up a completed NON-AGENTIC / HF-only SFT model — HF upload WITHOUT Supabase DB registration.

    301 GitHub stars~1.1k tokensUpdated 12 days ago
    Documents & OfficeAuto-check passed
  • Email Search

    extruct-ai/gtm-skills

    Get verified emails and phones for contacts found by people-search.

    109 GitHub stars~1.3k tokensUpdated 13 days ago
    Documents & OfficeAuto-check passed
  • Fullenrich Content Engagers

    Othmane-Khadri/YALC-the-GTM-operating-system

    A skill your agent uses when the user says "enrich people who engaged with this post", "qualify post engagers with FullEnrich", "scrape and enrich LinkedIn post {URL}", "engagers from this post into…

    318 GitHub stars~1.5k tokensUpdated 1 mo ago
    Writing & ContentAuto-check: warnings
  • Competitor Engagers

    growthenginenowoslawski/coldoutboundskills

    Find people actively engaging with competitor LinkedIn posts.

    753 GitHub stars~1.2k tokensUpdated 5 days ago
    Writing & ContentAuto-check: notes
  • Linkedin Engagement Analytics

    borghei/Claude-Skills

    Segments who reacted to and commented on a post from a CSV or JSON export, and says whether it reached the intended audience.

    891 GitHub stars~3.7k tokensUpdated 4 days ago
    Writing & ContentAuto-check passed

More from gooseworks-ai/goose-skills

All 273 skills in this repo
  • Reddit Post Finder

    gooseworks-ai/goose-skills

    Scrape and search Reddit posts using Apify. An agent skill from gooseworks-ai/goose-skills.

    1.2k GitHub starsUsed in 1 repo~1.2k tokens
    Auto-check passed
  • Create Image Fal

    gooseworks-ai/goose-skills

    Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent.

    1.2k GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed
  • Render Hook Replacement

    gooseworks-ai/goose-skills

    Replace an existing video's opening with a supplied clip or free kinetic text hook while retaining and verifying every original body frame, audio, captions and ending.

    1.2k GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed
  • Blog Feed Monitor

    gooseworks-ai/goose-skills

    Scrape blog posts via RSS feeds (free, no API key) with Apify fallback for JS-heavy sites.

    1.2k GitHub starsUsed in 1 repo~578 tokens
    Auto-check passed
  • Competitor Post Engagers

    gooseworks-ai/goose-skills

    Find leads by scraping engagers from a competitor's top LinkedIn posts.

    1.2k GitHub starsUsed in 1 repo~1.8k tokens
    Auto-check: notes
  • Render Chatgpt Chat

    gooseworks-ai/goose-skills

    Assemble a ChatGPT chat-reveal video ad from a thread + timeline JSON — one continuous Playwright recording of a ChatGPT mobile chat (user types with the iOS keyboard up → taps send → keyboard…

    1.2k GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed

Questions about Linkedin Outreach

What does Linkedin Outreach do?

End-to-end LinkedIn outreach campaign builder. An agent skill from gooseworks-ai/goose-skills. Linkedin Outreach is an agent skill from gooseworks-ai/goose-skills. End-to-end LinkedIn outreach campaign builder.

When should I use Linkedin Outreach?

Linkedin Outreach fits situations like: tasks that involve CSV and tabular files.

How do I install Linkedin Outreach in Claude Code?

Run `npx skills add gooseworks-ai/goose-skills --skill linkedin-outreach -a claude-code`. Or copy the skill folder (skills/outreach/capabilities/linkedin-outreach in gooseworks-ai/goose-skills) into .claude/skills/linkedin-outreach in your project. Claude Code loads it when a task matches its description.

How do I install Linkedin Outreach in Codex?

Run `npx skills add gooseworks-ai/goose-skills --skill linkedin-outreach -a codex`. Or copy the skill folder (skills/outreach/capabilities/linkedin-outreach in gooseworks-ai/goose-skills) into .agents/skills/linkedin-outreach in your project. Codex loads it when a task matches its description.

Can I use Linkedin Outreach in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gooseworks-ai/goose-skills --skill linkedin-outreach -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/linkedin-outreach, .gemini/skills/linkedin-outreach, .github/skills/linkedin-outreach and .opencode/skills/linkedin-outreach in your project.

What does Linkedin Outreach need to run?

Going by SKILL.md and its folder, Linkedin Outreach needs the command-line tools its instructions call (python3) and credentials named SUPABASE_SERVICE_ROLE_KEY. Our summary lists: Python 3; A credential in SUPABASE_SERVICE_ROLE_KEY.

Does Linkedin Outreach access the network?

SKILL.md names 1 domain. In commands or code: xxx.supabase.co; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Linkedin Outreach safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Linkedin Outreach use?

Linkedin Outreach is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Linkedin Outreach use?

About 4.4k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Linkedin Outreach?

Skills that share tags, products or a category with Linkedin Outreach: Fullenrich Network Activation (Othmane-Khadri/YALC-the-GTM-operating-system, 318 stars), Sft Cleanup Hf Only (open-thoughts/OpenThoughts-Agent, 301 stars), Email Search (extruct-ai/gtm-skills, 109 stars) and Fullenrich Content Engagers (Othmane-Khadri/YALC-the-GTM-operating-system, 318 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Linkedin Outreach?

gooseworks-ai (a GitHub organization) maintains it in gooseworks-ai/goose-skills, which has 1,240 GitHub stars. The repository holds 273 skills in this directory. The repository was last updated on October 8, 2026.

Source: gooseworks-ai/goose-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.