← ClaudeAtlas

outreachlisted

Find a hiring manager/recruiter for a role (or company) and send a personalized message via cold email or LinkedIn, with per-campaign channels and autonomy.
suxrobGM/jobpilot · ★ 18 · AI & Automation · score 84
Install: claude install-skill suxrobGM/jobpilot
# Outreach — Direct Hiring-Manager / Recruiter Contact Discover a contact, draft a personalized message, and send it via **email** and/or **LinkedIn** (Premium InMail or free connect-then-DM). Reaches people the ATS funnel hides. Backed by a `Campaign` (`source: "outreach"`); each contacted person + message is tracked. ## Setup Follow `../shared/setup.md` (health, profile, primary/tailored resume, credentials). ```bash JOBPILOT_API=http://localhost:8000 ``` - Email capability: `curl -fsS "$JOBPILOT_API/api/email/account"` → if `data.canSend` is false, tell the user to **Reconnect Gmail** in email settings before email sends; LinkedIn still works. - LinkedIn login: `../shared/auth.md`, credentials scope `"linkedin.com"`. ## Phase 0: Dispatch `--campaign <id>` is required. Read the campaign config: ```bash curl -fsS "$JOBPILOT_API/api/campaigns/<campaign-id>" | jq '.data.config.outreach' ``` `{ channels:["email"|"linkedin"], linkedinTier:"free"|"premium", autonomy:"draft"|"review"|"auto", dailyCap?, scope:"per-job"|"networking"|"both", resumeInclude:"none"|"link"|"attach-on-reply" }`. The positional argument is the target criteria; when omitted (e.g. the campaign viewer's "Continue with agent"), fall back to `data.query` from `GET /api/campaigns/<campaign-id>`. For `scope:"per-job"`, derive the company/role from the related job/application; for `networking`, use the criteria directly. Skip contacts already messaged on this campaign before discovering more. ## Phase