Agent skill
inbox-scanner
Check all outreach channels for replies using Chrome DevTools MCP.
Filed under Outbound email.
From ekatasingh1107/b2b-gtm-skills · 99 skills · 2 · pushed 2026-04-11
What it does when it runs
Check all outreach channels for replies using Chrome DevTools MCP. Scans Zoho webmail, LinkedIn messaging, and Instagram DMs.
Read from the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- chrome-devtools
- Hosts it reaches
- www.instagram.com
- www.linkedin.com
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It only issues instructions, so there is nothing to bound. - Actions present in the files
- None. Instructions only.
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/ekatasingh1107/b2b-gtm-skills.git /tmp/b2b-gtm-skills git -C /tmp/b2b-gtm-skills sparse-checkout set "skills/capabilities/inbox-scanner" mkdir -p ~/.claude/skills/inbox-scanner cp -R "/tmp/b2b-gtm-skills/skills/capabilities/inbox-scanner/." ~/.claude/skills/inbox-scanner/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
Before you install: this skill will not complete its job on a bare agent. It needs chrome-devtools, which you have to obtain separately.
The skill
Source on GitHub ↗Reproduced in full from ekatasingh1107/b2b-gtm-skills/blob/eae8dd0bb98da1c8e84abd297066a87015dd860f/skills/capabilities/inbox-scanner/SKILL.md, which is licensed MIT (repository). 986 words, 17 headings.
Inbox Scanner
Checks email, LinkedIn, and Instagram inboxes for replies to outreach messages. Matches responses against the CRM outreach log to provide full lead context. Used by the evening-scan playbook as the first step before reply-analyzer.
Prerequisites
agency.config.jsonat repo root withtools.email_sending,tools.linkedin_outreach,tools.instagram_outreachcrm-writerskill for matching responses to CRM leads- For browser path: Chrome DevTools MCP available (
mcp__chrome-devtools__*) - Chrome Beta logged in: Zoho webmail, LinkedIn, Instagram
Phase 0: Intake
- Read
agency.config.jsonfrom the project root. - Extract:
tools.email_sending-- provider, access method, domainstools.linkedin_outreach-- provider, access methodtools.instagram_outreach-- provider, access methodtools.browser_automation-- Chrome DevTools MCP configtools.inbox_scanning-- inbox scanning configcrm.tabs.outreach_log-- tab name for matching replies to sent outreachcrm.tabs.pipeline-- tab name for lead pipeline data
- Accept parameters:
channels-- list of channels to check (default:["email", "linkedin", "instagram"], i.e., all)time_window-- how far back to scan (default:"24h")
Phase 1: Check Email
Chrome DevTools MCP (Zoho webmail)
Use Chrome DevTools MCP to scan Zoho webmail inbox:
mcp__chrome-devtools__navigate_pageto Zoho webmail inboxmcp__chrome-devtools__wait_forinbox to loadmcp__chrome-devtools__take_snapshotto read recent emails- Look for replies to outreach emails (matching subject lines, sender addresses)
- For each reply:
mcp__chrome-devtools__clickto open the emailmcp__chrome-devtools__take_snapshotto read reply content- Extract: sender name, sender email, subject, reply text, timestamp
Backup: Gmail MCP
If Chrome DevTools MCP is unavailable for Zoho, fall back to Gmail MCP:
- Search Gmail for replies (last 24 hours)
- Use BODY.PEEK[] to preserve read/unread status
API Path (access: "api")
For Smartlead, Instantly, or other email platforms with API access:
- Query the platform's campaign reply endpoint using the API key from the env var specified in
tools.email_sending.api_key_env. - For Smartlead:
GET /api/v1/campaigns/{id}/replies - For Instantly:
GET /api/v1/campaign/replies - Filter by
time_window. - Extract: sender name, sender email, reply text, campaign name, timestamp.
Manual Path (access: "manual")
Ask the user directly:
Any email replies since the last scan?
Paste them here, or list the companies/contacts that responded.
Format: Company Name - Contact Name - brief summary of their reply
Collect and structure whatever the user provides.
Phase 2: Check LinkedIn
Chrome DevTools MCP
mcp__chrome-devtools__navigate_pagetohttps://www.linkedin.com/messaging/mcp__chrome-devtools__wait_formessaging inbox to loadmcp__chrome-devtools__take_snapshotto read recent messages- For each new message from an outreach contact:
- Extract: sender name, sender headline/company, message text, timestamp
- Check connection request acceptances:
mcp__chrome-devtools__navigate_pagetohttps://www.linkedin.com/mynetwork/invitation-manager/sent/mcp__chrome-devtools__take_snapshotto read accepted requests
Manual Path (access: "manual")
Ask the user:
Any LinkedIn responses since the last scan?
- New messages from outreach contacts?
- Connection requests accepted?
Format: Name - Company - what they said (or just "accepted connection")
Phase 3: Check Instagram
Chrome DevTools MCP
mcp__chrome-devtools__navigate_pagetohttps://www.instagram.com/direct/inbox/mcp__chrome-devtools__wait_forDM inbox to loadmcp__chrome-devtools__take_snapshotto read recent DMs- For each new DM from an outreach contact:
- Extract: sender username, sender display name, message text, timestamp
- Skip: story reactions, emoji-only replies, automated responses
Manual Path (access: "manual")
Ask the user:
Any Instagram DM replies since the last scan?
Format: @username (Company) - what they said
Phase 4: Match to CRM
For each response found across all channels:
- Use
crm-writer(READ operation) to query the outreach log tab (crm.tabs.outreach_log). - Match the response to an existing lead using these strategies (in order of reliability):
- Email address (exact match) -- most reliable for email replies
- Company name (fuzzy match, case-insensitive, strip Ltd/Inc/LLC) -- for LinkedIn/Instagram where email may not be visible
- Contact name (fuzzy match) -- fallback, combine with company for higher confidence
- For each matched lead, pull context from the CRM:
cadence_day-- which day in the outreach cadence they are onlast_action-- what was the last outreach action (e.g., "EMAIL_1", "LINKEDIN_CONNECT")lead_status-- current status (e.g., "CONTACTED", "FOLLOW_UP")tier-- lead tier/temperature (e.g., "HOT", "WARM", "COLD")score-- lead score if available
- If no CRM match is found:
- Mark
crm_matchasnull - Flag as "unmatched response" for manual review
- Still include in the output
- Mark
Phase 5: Output
Return a structured JSON array of all responses found:
[
{
"channel": "email",
"from_name": "Sarah Chen",
"from_email": "[email protected]",
"company": "Brand X",
"reply_text": "Hey, this sounds interesting. What are your rates for a CRO audit?",
"timestamp": "2024-01-15T14:30:00Z",
"thread_subject": "Re: Quick question about your Shopify store",
"crm_match": {
"lead_id": "row_42",
"cadence_day": 4,
"last_action": "EMAIL_2",
"lead_status": "CONTACTED",
"tier": "HOT",
"score": 72
}
},
{
"channel": "linkedin",
"from_name": "Rahul Kapoor",
"from_email": null,
"company": "FreshFit Foods",
"reply_text": "Thanks for connecting! Yes, we are actually looking at revamping our Shopify store.",
"timestamp": "2024-01-15T11:20:00Z",
"thread_subject": null,
"crm_match": {
"lead_id": "row_67",
"cadence_day": 2,
"last_action": "LINKEDIN_CONNECT",
"lead_status": "CONTACTED",
"tier": "WARM",
"score": 55
}
},
{
"channel": "instagram",
"from_name": "Active Gear",
"from_email": null,
"company": "Active Gear",
"reply_text": "Not interested right now, thanks.",
"timestamp": "2024-01-15T16:45:00Z",
"thread_subject": null,
"crm_match": null
}
]
Print a summary line:
Inbox Scan Complete (last 24h):
- Email replies: 3
- LinkedIn messages: 1
- LinkedIn connections accepted: 2
- Instagram DM replies: 1
- Total responses: 7
- Matched to CRM leads: 5
- Unmatched (manual review needed): 2
Example Usage
Trigger phrases:
- "Check inboxes for replies"
- "Scan all channels for responses"
- "Any replies today?"
- "Run inbox scanner"
- "Check email and LinkedIn for responses"
User: Check all inboxes for replies
Assistant: [reads config, checks Zoho webmail via Chrome DevTools MCP, checks LinkedIn via Chrome DevTools MCP, checks Instagram via Chrome DevTools MCP, matches all replies to CRM leads, returns structured array with summary]
User: Just check email, skip LinkedIn and Instagram
Assistant: [same flow but channels=["email"] only]
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- smartlead-inbox-manager by growthenginenowoslawski · 668
- mcp-media-inbox-triage by zapier · 334
- inbox-reply by extruct-ai · 107
- crm-hygiene-scanner by Othmane-Khadri · 55
- signal-scanner by Othmane-Khadri · 55
- battle-scanner by varunk130 · 5
- signal-scanner by edupegoretti · 0
- industry-scanner by edupegoretti · 0
Need help setting it up?
This page tells you what inbox-scanner does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.