Referral Intro
TheCraigHewitt/skills
When the user wants to ask for a warm introduction, build a referral program, or systematize their referral channel.
A skill your agent uses when someone sends a team member an inbound LinkedIn connection request.
$ npx skills add swan-gtm/gtm-skills --skill handle-linkedin-connection-request-signal -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install swan-gtm/gtm-skills handle-linkedin-connection-request-signal --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/swan-gtm/gtm-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ariel-cohen/handle-linkedin-connection-request-signal .claude/skills/handle-linkedin-connection-request-signal && rm -rf skills-srcUse ~/.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/
Install the "handle-linkedin-connection-request-signal" agent skill from https://github.com/swan-gtm/gtm-skills/tree/main/skills/ariel-cohen/handle-linkedin-connection-request-signal into .claude/skills/handle-linkedin-connection-request-signal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "handle-linkedin-connection-request-signal", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/swan-gtm/gtm-skills/tree/main/skills/ariel-cohen/handle-linkedin-connection-request-signalType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add swan-gtm/gtm-skills --skill handle-linkedin-connection-request-signal -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install swan-gtm/gtm-skills handle-linkedin-connection-request-signal --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swan-gtm/gtm-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ariel-cohen/handle-linkedin-connection-request-signal .agents/skills/handle-linkedin-connection-request-signal && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "handle-linkedin-connection-request-signal" agent skill from https://github.com/swan-gtm/gtm-skills/tree/main/skills/ariel-cohen/handle-linkedin-connection-request-signal into .agents/skills/handle-linkedin-connection-request-signal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "handle-linkedin-connection-request-signal", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add swan-gtm/gtm-skills --skill handle-linkedin-connection-request-signal -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install swan-gtm/gtm-skills handle-linkedin-connection-request-signal --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swan-gtm/gtm-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ariel-cohen/handle-linkedin-connection-request-signal .cursor/skills/handle-linkedin-connection-request-signal && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "handle-linkedin-connection-request-signal" agent skill from https://github.com/swan-gtm/gtm-skills/tree/main/skills/ariel-cohen/handle-linkedin-connection-request-signal into .cursor/skills/handle-linkedin-connection-request-signal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "handle-linkedin-connection-request-signal", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/swan-gtm/gtm-skills.git --path skills/ariel-cohen/handle-linkedin-connection-request-signal--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add swan-gtm/gtm-skills --skill handle-linkedin-connection-request-signal -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install swan-gtm/gtm-skills handle-linkedin-connection-request-signal --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swan-gtm/gtm-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ariel-cohen/handle-linkedin-connection-request-signal .gemini/skills/handle-linkedin-connection-request-signal && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "handle-linkedin-connection-request-signal" agent skill from https://github.com/swan-gtm/gtm-skills/tree/main/skills/ariel-cohen/handle-linkedin-connection-request-signal into .gemini/skills/handle-linkedin-connection-request-signal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "handle-linkedin-connection-request-signal", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install swan-gtm/gtm-skills handle-linkedin-connection-request-signalInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add swan-gtm/gtm-skills --skill handle-linkedin-connection-request-signal -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/swan-gtm/gtm-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ariel-cohen/handle-linkedin-connection-request-signal .github/skills/handle-linkedin-connection-request-signal && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "handle-linkedin-connection-request-signal" agent skill from https://github.com/swan-gtm/gtm-skills/tree/main/skills/ariel-cohen/handle-linkedin-connection-request-signal into .github/skills/handle-linkedin-connection-request-signal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "handle-linkedin-connection-request-signal", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add swan-gtm/gtm-skills --skill handle-linkedin-connection-request-signal -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install swan-gtm/gtm-skills handle-linkedin-connection-request-signal --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swan-gtm/gtm-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ariel-cohen/handle-linkedin-connection-request-signal .opencode/skills/handle-linkedin-connection-request-signal && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "handle-linkedin-connection-request-signal" agent skill from https://github.com/swan-gtm/gtm-skills/tree/main/skills/ariel-cohen/handle-linkedin-connection-request-signal into .opencode/skills/handle-linkedin-connection-request-signal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "handle-linkedin-connection-request-signal", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
handle-linkedin-connection-request-signalA skill your agent uses when someone sends a team member an inbound LinkedIn connection request.
Handle Linkedin Connection Request Signal is an agent skill from swan-gtm/gtm-skills. Use this skill when someone sends a team member an inbound LinkedIn connection request. An inbound request is a deliberate, ACTIVE first-party intent signal — meaningfully stronger than a passive profile view — and it deserves different scoring rules. The skill resolves and enriches the requester, gates them through dedup / internal / relationship / ICP checks, attaches the signal to the CRM, and scores it with active-signal overrides: a decision maker at a serious company is MQL-eligible on this lone signal, a…
Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/setup-customization-checklist.md`).
It sits in Sales & Support, covering Referral and retention marketing. It works with LinkedIn. The repository describes itself as: Open, production-grade GTM skills for AI agents. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 67abd04. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Handle Linkedin Connection Request Signal loads about 3.4k tokens when it runs, and up to ~4.2k if it reads all its reference files. Until then it costs about 204 tokens; SKILL.md has 1,767 words of instructions outside code blocks.
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.
The automated check found no risky patterns in SKILL.md.
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.
The full file from swan-gtm/gtm-skills at commit 67abd04, republished under its MIT licence (© swan-gtm). 1,767 words, ~3,432 tokens.
.claude/skills/handle-linkedin-connection-request-signal/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Replace every {{...}} before enabling. See the setup checklist reference for the full setup list.
{{PROFILE_OWNER}} — Team member whose inbound connection requests are processed{{CRM}} — Your CRM (e.g. HubSpot, Attio){{INTERNAL_DOMAINS}} — Your company domain(s); requests from these stop silently{{VISIBILITY_CHANNEL}} — Slack channel that gets one visibility post per processed request{{CRM_HYGIENE_SKILL}} — Sub-skill reference: how to create/update companies & contacts in your CRM{{LEAD_SCORING_SKILL}} — Sub-skill reference: your lead scoring & qualification methodology (its normal MQL alerting stays on){{REACTIVATION_SKILL}} — Sub-skill reference: how you handle closed-lost account reactivation (optional — skip the reactivation branch's owner notification if you don't have one){{SELF_SERVE_THRESHOLD}} — Company profile below which accounts route self-serve rather than MQL (default: fewer than 50 employees AND ≤$10M raised){{REACTIVATION_WINDOW}} — Minimum time since a closed-lost deal before a request counts as a reactivation signal (default: ~90 days)This skill runs when someone sends {{PROFILE_OWNER}} a LinkedIn connection request. The requester reached out to YOU — this is a deliberate, active first-party intent signal, meaningfully stronger than a passive profile view. The job is: resolve + enrich the requester and their company, gate it, attach to CRM per standard hygiene, and score the signal.
Golden rule — the CRM is never polluted. Only a requester who is identified + company-resolved + not-internal + not-a-current-customer + ICP-matched ever reaches a CRM write. Everyone else is silently discarded or logged to account memory only.
The webhook trigger only validates + routes. All behavior lives here.
The routing trigger passes a single, already-deduplicated signal with the
person's name, LinkedIn member id / URL, headline, and the invitation note (or
null), plus a detection timestamp. Be robust to both a structured person
object and a stringified context blob carrying the same fields.
This skill does scoring + routing + CRM/account-memory updates ONLY. These are people who reached out to YOU — any reply or accept is handled manually by {{PROFILE_OWNER}} outside the agent. Do not send outreach of any kind, do not build or enroll sequences, do not queue or accept connection requests or DMs, and do not create review/approval tasks. Letting {{LEAD_SCORING_SKILL}} post its normal MQL alert for a genuine qualifying account is expected and is NOT outreach. (⚠️ Policy decision — see the checklist. Wire outreach on top only as a conscious opt-in once you trust the signal quality.)
A connection request is a single discrete action, so the only real duplicate source is webhook redelivery from the same person. After you have the person's LinkedIn member id (and, once resolved, the account), check the resolved account's memory for an existing connection-request entry with the same member id. If found → redelivery of an already-processed request → stop silently. No new CRM writes, no memory writes, no channel post.
If the person cannot be identified at all (no name and no LinkedIn URL / member id) → stop silently (anonymous). No enrichment, no writes, no post.
Identifying the person is not the same as resolving the company. You need both before proceeding. Never infer the company from the headline.
Exit condition — UNRESOLVED: If after the full waterfall you still cannot confidently determine a company name + domain, set outcome = UNRESOLVED, write nothing to CRM / account memory, do NOT post, and stop. A guessed company is worse than UNRESOLVED.
Exit this step with: full name, confirmed title, company name + domain, location.
If the resolved domain is one of {{INTERNAL_DOMAINS}} → stop silently. No CRM, no memory, no post.
Look up the company in the CRM and branch:
Compare the company against your ICP segments.
⛔ Hard gate — do nothing in this step unless ALL are true: (a) requester identified (not anonymous); (b) company confidently resolved to a real domain in Step 2; (c) domain not internal (Step 3 passed); (d) not a current customer (Step 4); (e) passed the ICP check (Step 5). If any fails, skip this step entirely. (Closed-Lost reactivation candidates that are ICP DO proceed here.)
Follow {{CRM_HYGIENE_SKILL}} to create/update the company and a contact for this person (name, title, LinkedIn URL, company, location), associated together. Add a CRM note on the contact:
LinkedIn connection request → {{PROFILE_OWNER}}
• Sent {{PROFILE_OWNER}} a connection request on [detected_at]
• Note included: [verbatim invitation note, or "none"]
• Prior connection requests from this company: [n]Log the same to the account's memory and refresh its state summary, keyed by the person's LinkedIn member id (this is what Step 1's dedup reads).
Run {{LEAD_SCORING_SKILL}} on this account. Pass forward the full signal context: signal type, who received it, the verbatim invitation note, the person's name / title / LinkedIn URL / company, prior connection-request count, and that enrichment + CRM attach are done.
A connection request is an ACTIVE signal — these overrides apply and take precedence over generic passive-signal caps:
Instruct the scoring skill explicitly: scoring, tags, stage, CRM sync, memory, and its normal MQL alert are all in scope; outreach is not. For a qualifying account, let its Lead Scoring Alert post to the real MQL channel as usual — do NOT suppress or redirect it.
Post to {{VISIBILITY_CHANNEL}} for these outcomes: SCORED (any tier), NOT ICP, EXISTING CUSTOMER, EXISTING RELATIONSHIP. This is a visibility log and is in addition to any MQL-channel post the scoring skill sent in Step 7 (do not deduplicate them away).
Post nothing (fully silent) for: ANONYMOUS / UNRESOLVED requesters, INTERNAL-domain requesters, ACTIVE PARTNERS, and duplicate redeliveries.
Format:
🤝 [Full Name] — [title]
Company: [company name] ([domain]) | [location]
Note: [verbatim invitation note, or "no note"]
Prior requests: [n] (this company)
LinkedIn: [linkedin_url]
Outcome: [one of]
SCORED — [tier] (decision maker at a serious company = MQL)
EXISTING CUSTOMER — logged, no scoring
EXISTING RELATIONSHIP — active deal / closed-lost reactivation, logged, no outreach
NOT ICP — no CRM, no scoring
What we did: [one line]A great run turns a raw connection request into exactly one of the named outcomes with zero CRM pollution: the company was resolved through the full waterfall (with the headline-conflict check actually catching job-changers), gates ran in order, the invitation note traveled verbatim into the CRM note, account memory, and the visibility post, and a decision maker at a serious company produced both the MQL alert and the visibility post — one of each. Closed-lost requesters got the reactivation treatment instead of a silent drop.
Mediocre looks like: companies guessed from headlines, weak personas floating above the awareness tier on a single request, reactivation candidates ignored because the account was closed-lost, double MQL posts, or any reply/outreach sent by the agent.
© swan-gtm, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in skills/ariel-cohen/handle-linkedin-connection-request-signal of swan-gtm/gtm-skills.
Open the folder on GitHubat commit 67abd04
Handle Linkedin Connection Request Signal 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Handle Linkedin Connection Request Signal this skillswan-gtm/gtm-skills | 172 | — | ~3.4k | Automated safety check: Pass | MIT | |
| Referral IntroTheCraigHewitt/skills | 159 | — | ~6.7k | Automated safety check: Pass | MIT | |
| Customer Win Back Sequencergooseworks-ai/goose-skills | 1.2k | 1 repos | ~2.8k | Automated safety check: Pass | MIT | |
| Lead Generation Research GuideRightNow-AI/openfang | 18k | — | ~1.8k | Automated safety check: Pass | Apache-2.0 | |
| B2B Lead Generationminhnv0807/ai-business-skills | 609 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Outreach Specialistognjengt/founder-skills | 447 | — | ~3.2k | Automated safety check: Pass | MIT |
TheCraigHewitt/skills
When the user wants to ask for a warm introduction, build a referral program, or systematize their referral channel.
gooseworks-ai/goose-skills
For churned accounts, research what has changed since they left — new funding, team growth, competitor dissatisfaction, product updates that address their pain — then assess re-engagement potential…
RightNow-AI/openfang
Reference knowledge for AI lead generation: building an ideal customer profile, researching prospects on the web, enriching lead records and finding email formats.
minhnv0807/ai-business-skills
Plans B2B pipeline work from ICP definition and prospecting through lead scoring, outbound sequences, sales assets and MQL to SQL handoff, aiming at qualified pipeline.
ognjengt/founder-skills
Crafts high-converting outreach messages and email sequences for cold outreach, LinkedIn DMs, and follow-ups.
shawnpang/startup-founder-skills
When the user needs to identify at-risk accounts, understand why customers are leaving, reduce churn rate, build health scores, design save plays, or create win-back campaigns.
swan-gtm/gtm-skills
Annual and quarterly revenue plan construction, top-down vs bottoms-up reconciliation, plan versioning, stretch goal handling, and FP&A-RevOps collaboration for B2B revenue teams.
swan-gtm/gtm-skills
A skill your agent uses when setting up AI-powered personalization, building Clay or lemlist workflows, or automating prospect research — 6 AI personalization prompts (lemlist style) plus 2 email…
swan-gtm/gtm-skills
A skill your agent uses when a list of people already exists and someone needs to know who on it is worth contacting — event or webinar attendees, registrants, a prospecting export, a CRM segment, a…
swan-gtm/gtm-skills
A skill your agent uses when you need to know what people are saying about a brand across the web and social — "monitor brand mentions", "what are people saying about [brand] this week", "run a…
swan-gtm/gtm-skills
Use this skill before staging a prospect and before drafting any first touch, when a segment has gone silent, and when deciding whether an account is genuinely cold.
swan-gtm/gtm-skills
Use this skill on a monthly cadence to detect champions and heavy users of your paying customers who changed jobs, verify the move against live LinkedIn data, score the new company, and surface…
Works with
Categories
A skill your agent uses when someone sends a team member an inbound LinkedIn connection request. Handle Linkedin Connection Request Signal is an agent skill from swan-gtm/gtm-skills. Use this skill when someone sends a team member an inbound LinkedIn connection request.
Handle Linkedin Connection Request Signal fits situations like: someone sends a team member an inbound LinkedIn connection request; tasks that involve Referral and retention marketing.
Run `npx skills add swan-gtm/gtm-skills --skill handle-linkedin-connection-request-signal -a claude-code`. Or copy the skill folder (skills/ariel-cohen/handle-linkedin-connection-request-signal in swan-gtm/gtm-skills) into .claude/skills/handle-linkedin-connection-request-signal in your project. Claude Code loads it when a task matches its description.
Run `npx skills add swan-gtm/gtm-skills --skill handle-linkedin-connection-request-signal -a codex`. Or copy the skill folder (skills/ariel-cohen/handle-linkedin-connection-request-signal in swan-gtm/gtm-skills) into .agents/skills/handle-linkedin-connection-request-signal in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add swan-gtm/gtm-skills --skill handle-linkedin-connection-request-signal -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/handle-linkedin-connection-request-signal, .gemini/skills/handle-linkedin-connection-request-signal, .github/skills/handle-linkedin-connection-request-signal and .opencode/skills/handle-linkedin-connection-request-signal in your project.
SKILL.md names no scripts, command-line tools or credentials: Handle Linkedin Connection Request Signal is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Handle Linkedin Connection Request Signal is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 808 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Handle Linkedin Connection Request Signal: Referral Intro (TheCraigHewitt/skills, 159 stars), Customer Win Back Sequencer (gooseworks-ai/goose-skills, 1.2k stars), Lead Generation Research Guide (RightNow-AI/openfang, 18k stars) and B2B Lead Generation (minhnv0807/ai-business-skills, 609 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
swan-gtm (a GitHub organization) maintains it in swan-gtm/gtm-skills, which has 172 GitHub stars. The repository holds 32 skills in this directory. The repository was last updated on October 8, 2026.
Source: swan-gtm/gtm-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.