outreachlisted
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