Campaigns & skills
A campaign is one run of the agent against a goal: find jobs, apply to them, or reach the people hiring. Skills are the units of work the agent performs. The Pilot runs all of this for you; everything below is the same work driven by hand.
You don't type skill names. After setup, every skill is dispatched by an
action in the dashboard (creating a campaign, applying to a job, scanning your
inbox) and the agent carries it out in the dock while you watch.
The four campaign modes
Search. The agent searches a board and scores every role against your resume, but doesn't apply. You review the ranked list on the campaign page and approve the ones worth applying to. Best when you're starting out or picky about targets.
Auto-apply. The agent searches, scores, and applies on its own, one job at a time, skipping weak matches and jobs you already applied to. It stops when the board is exhausted, you pause it, or it hits your application cap. This is what the composer opens on.
Apply. Already found the jobs yourself? Paste the links into the new campaign dialog instead of picking a board - the agent reviews fit, tailors your resume, and applies to each one in turn. No board or base resume needed.
Networking. The agent finds the hiring manager or recruiter behind a role and drafts a personalized email or LinkedIn message. Nothing is sent without your approval.
What each dashboard action runs
| In the dashboard | What the agent does |
|---|---|
New campaign → Search (search) | Searches a board and ranks every result against your resume. |
New campaign → Auto-apply (auto-apply) | Searches, then applies one job at a time until done, paused, or capped. |
New campaign → Networking (networking) | Finds the hiring contact for each role and drafts a personalized message. |
New campaign on Upwork (upwork-search) | Searches Upwork, filters out low-quality clients, ranks the rest. |
New campaign → Apply to links (apply) | Applies to each pasted job after a fit review. |
Campaign → Resume (resume-campaign) | Picks a paused campaign back up on its remaining approved jobs. |
Campaign → Rescan skipped (rescan-skipped) | Re-scores skipped jobs and promotes the wrongly dropped ones. |
Campaign → Retry failed (auto-apply) | Re-runs the applications that errored out. |
Inbox → Scan pending (scan-inbox) | Classifies new mail, matches it to applications, proposes status moves. |
Networking → Regenerate (networking) | Rewrites a drafted message. |
Uploading a resume, or Extract from PDF (extract-resume) | Parses the PDF into the structured editor. |
Resume → Tailor (tailor-resume) | Rewrites a resume variant against one job description. |
Upwork → Proposal (upwork-proposal) | Drafts a short, targeted proposal for one posting. |
Upwork → Profile (upwork-profile) | Improves your Upwork overview; writes back only after you approve. |
Pilot → Start (pilot) | Runs Pilot cycles on a loop until you stop it. |
Uploading a PDF during onboarding or from the resumes list starts extraction on its own. Uploading a new PDF onto an existing resume doesn't, so that page has an Extract from PDF button (Re-extract from PDF once there's content).
The rest run on their own, mid-job. tailor-resume picks or creates the right
resume variant per application, and cover-letter drafts a letter when a form
asks for one. get-code pulls verification codes from your mailbox during
logins, and solve-captcha handles captchas. interview drafts availability
replies and builds prep sheets,
review-resume leaves a suggested rewrite on the
resume page after an upload, and humanizer keeps generated text reading
naturally.
The one command you run yourself is setup: /jobpilot:setup in Claude
Code, $setup in Codex. It installs and starts the local agent terminal, and
upgrades it to the latest release when one is already installed.
Statuses
Every application has one of six statuses: applied → screening → interviewing → offer, with rejected and withdrawn as exits. The workspace shows them as a funnel with every application listed beneath it, each application page keeps a full activity timeline, and analytics aggregates the funnel across campaigns.
The inbox loop
With email connected, Sync on the inbox page pulls new
mail from Gmail, and Scan pending runs the scan-inbox skill over it. The
skill classifies each message (interview request, rejection, offer, and so on)
and matches it to an application. Proposed status moves appear in your inbox
page; approve one and the application updates. Nothing changes status without
you.
Recovering a campaign
Two buttons on the campaign page, for a run that stopped and a run that skipped too much:
- If a campaign is paused, press Resume (
resume-campaign). It picks the apply loop back up on the remaining approved jobs without re-asking anything. - If it skipped too much, press Rescan skipped (
rescan-skipped). It re-scores the campaign's skipped jobs and promotes the ones dropped for bad reasons, such as a sparse job description or a mislabeled location, back to approved. You can also select individual skipped rows and rescan just those.
Upwork
Upwork has its own three skills, because you're picking clients as much as jobs and nothing is submitted for you:
upwork-searchfilters out clients with poor hire rates, low spend, or bad ratings before ranking what's left against your profile. It saves recommendations; it never submits.upwork-proposaldrafts a short proposal for a specific job, written for your review before you send it.upwork-profilereads your live profile, proposes an improved overview and portfolio, and writes it back only after you approve.
Next up: Email setup, so replies land on your pipeline.