Skip to content
Agentmart
Submit a tool

process-connections

Process LinkedIn connections to identify ICPs.

Skill by Kasper-AI

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/kasper-ai-process-connections

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Process LinkedIn connections to identify ICPs. Use when user says "process connections", "find ICPs in my connections", "process my connections list", or "qualify my connections".

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/process-connections

What's inside

Skill name
process-connections
Description
Process LinkedIn connections to identify ICPs. Use when user says "process connections", "find ICPs in my connections", "process my connections list", or "qualify my connections".
License
MIT
Instructions
135 lines in SKILL.md · view on GitHub

Before installing

  • Instructions call the network

Agent Skills spec issues

  • files: referenced but missing: references/api.md, references/storage.md

Files (1)

  • SKILL.md

SKILL.md (first lines)

## Browser Preflight (MANDATORY — do this FIRST)

Before delegating to any agent, attach the Claude Chrome extension to this session:

1. Tell the user in chat:
   > "I need browser access to LinkedIn. You may see a permission prompt — please approve it. I'll wait."
2. Navigate to `https://www.linkedin.com/feed/` using the Browser tool. This triggers Claude's permission system and attaches the Chrome extension to the session.
3. Confirm the LinkedIn feed page loaded (content visible, not an error/login wall). If it fails, tell the user the extension isn't connected and stop — do NOT delegate to the agent.

If LinkedIn already loaded earlier in this session, this step passes instantly.

Delegate to the **outreach** agent in **process-connections mode**:

This is a multi-session task. The agent works through the user's connections, researching and qualifying ICP matches. It picks up where it left off each session.

## Step 1: Get connections data

**Check if `${CLAUDE_PLUGIN_DATA}/config.json` exists in the plugin data directory.**

**If ${CLAUDE_PLUGIN_DATA}/config.json exists (Pro plan):**
- Fetch unprocessed connections from the dashboard API via a browser tab using `references/api.md`
- If `api_url` is the default `http://127.0.0.1:8001`, open `http://127.0.0.1:8001/health` first so the fetch runs from the HTTP API origin, then run:
  `fetch("API_URL/v1/gtm/connections?status=new&page_size=75&sort_by=created_at&sort_order=asc", {headers: {"X-API-Key": "API_KEY"}}).then(r=>r.json()).then(d=>console.log(JSON.stringify(d)))`
- Users upload their CSV on the dashboard — you don't need to ask for the file

**If ${CLAUDE_PLUGIN_DATA}/config.json does NOT exist (Basic plan):**
- Ask the user for their connections export file (LinkedIn CSV or spreadsheet)
- Read the file — LinkedIn exports include: First Name, Last Name, Profile URL, Email, Company, Position, Connected On

## Step 1b: Check user notes

**For Pro plan connections fetched from the API:** Each connection may have a `notes` field containing user-written instructions or context. Examples:
- "Many prior interactions, say it's been a while and write a personal message"
- "Met at SaaStr conference, reference that"
- "Skip — this is a competitor"

**Always check the `notes` field before processing a connection.** If the note says to skip, mark as skipped. If the note has outreach instructions, follow them when drafting messages. If no notes, proceed with standard ICP qualification.

## Step 2: First-pass exclusion filter (no LinkedIn browsing)

Using only the connection record fields (Position, Company, Industry), immediately exclude clear non-fits before doing any browsing:

- Matches a saved exclusion: competitor companies, excluded industries, "do not contact" personas.
- Role is clearly outside all Tier 1 and Tier 2 ICP roles with no plausible buying influence.
- Company is visibly outside the ICP target with no contrary evidence.

Mark excluded connections `status: "skipped"` and write a one-line `qualification_reason` citing the matched exclusion. Do not research these further.

All remaining connections advance to the research pass.

## Step 3: Deep qualification research pass (max 50-75 per session)

For each connection that passed Step 2, run a two-step research workflow. Track progress in `connection-processing-progress.json`.

### 3a — Visit the person's LinkedIn profile

Confirm:
- Current title and role authority (decision-maker, champion, or IC with no buying influence)
- Current company and tenure
- Location / geography
- Any person-level signals relevant to the ICP (skills, past companies, activity)

Stop researching as soon as a clear exclusion or non-fit is confirmed.

### 3b — Visit the company LinkedIn page

Confirm:
- Industry / category
- Employee count / size signals
- Geography / HQ
- Any product, funding, or growth signals relevant to the pitch

Use the company website **only** if it is clearly linked from the LinkedIn company page. Do not guess domains.

### 3c — Assign ICP tier

Apply saved exclusion rules before positive scoring:

- Saved exclusion industries, companies, personas, or competitors → `status: "skipped"`, include matched exclusion in `qualification_reason`.

Then score against the saved ICP and product/pitch:

- `icp_tier: 1` — clear Tier 1 role (decision-maker / economic buyer) **plus** strong company fit: right industry, company size, geography, and the product pitch maps directly to a problem they own.
- `icp_tier: 2` — adjacent champion, influencer, or partial fit worth keeping: role has buying influence or strong internal access, and company is plausibly in scope even if not a perfect match.
- Not a match — role is IC-only or company is clearly out of scope → `status: "skipped"`.

### 3d — Build qualification fields

**`qualification_reason`** — a compact 2–4 sentence paragraph explaining the ICP decision. Never use a label alone. Must cover:
- ICP fit: role/title vs Tier 1 and Tier 2 criteria, industry, geography, company size, exclusion checks.
- Product/pitch fit: how this person's ownership area maps to the configured outcome, pitch, and messaging.
- Evidence: cite only facts from the connection record, LinkedIn profile, or company LinkedIn page.
- Uncertainty: if evidence is thin, say what is missing — do not invent intent, budget, urgency, or funding.

Examples:
- Tier 1: `Tier 1 fit: VP of Sales at a 200-person B2B SaaS company in the US, matching the saved Tier 1 role and target industry. They likely own pipeline growth and outbound conversion — the exact problem the configured pitch addresses. Company is in the right size band and geography. Outreach should validate current priorities before assuming active budget.`
- Tier 2: `Tier 2 fit: Sales Operations Manager at a mid-market SaaS company. Not a direct economic buyer but holds strong process influence and is often a champion for tooling decisions. Industry and company size align with the ICP; role authority is one level below Tier 1.`
- Skipped: `Not a match: the title indicates an individual contributor with no apparent buying influence for the saved ICP roles. Company industry does not align with the configured product pitch.`
- Excluded: `Excluded: company matches the saved competitor exclusion list. Role fit is irrelevant — this account should not receive outreach.`

**`company_research_summary`** — 2–4 sentences covering: what the company does, industry/category, employee count or size signals, geography/HQ, and any product, funding, or growth signals that are relevant to why this connection is or isn't a fit for the pitch. Source everything from LinkedIn; note if the company page was unavailable.

## Step 4: Store results

Always write results to persistent agent memory first.

**Pro plan (${CLAUDE_PLUGIN_DATA}/config.json exists):**
- Sync results back via browser tab — POST to `API_URL/v1/gtm/sync` with `type: "connections"`
- Every synced record must include: `id` (when present), `linkedin_url`, `icp_tier`, `status`, `qualification_reason`, `company_research_summary`, `notes`, `industry`, `company_size`
- Tier 1/2 matches: set `icp_tier: 1` or `icp_tier: 2`; leave `status` as-is (do not overwrite to skipped)
- Non-matches and exclusions: set `status: "skipped"`, still include `qualification_reason`
- See `references/storage.md` for sync method

**Basic plan (no ${CLAUDE_PLUGIN_DATA}/config.json):**
- Write confirmed ICPs to the user's spreadsheet "ICP Connections" tab
- Columns: Name, LinkedIn URL, Title, Company, Industry, Company Size, Qualification Reason, Company Research Summary, ICP Tier, Status, Date Added
- See `references/storage.md` for spreadsheet method

Deduplicate against existing pipeline data in both cases: for Pro plan, the `status=new` fetch in Step 1 already excludes connections previously processed, so only skip a connection if it also appears in `leads.json` (normalized LinkedIn URL) — sync it as a lead there but do not create a second lead record. For Basic plan, before writing to "ICP Connections", skip any row whose normalized LinkedIn URL already exists in that tab or in the "Leads" tab.

From Kasper-AI/gtm-kit-plugin, MIT.

More from Kasper-AI/gtm-kit-plugin

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Aug 25, 2026 (2 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Kasper-AI

Cite this page

process-connections skill. Agent Mart. https://agentmart.dev/skills/kasper-ai-process-connections (last updated 2026-10-24)