with one click
rescan-skipped
// Re-score a run's skipped jobs and promote the eligible ones to `approved` for later applying. Recovers jobs wrongly dropped for location, a sparse JD, 1099, or seniority. Does not apply.
// Re-score a run's skipped jobs and promote the eligible ones to `approved` for later applying. Recovers jobs wrongly dropped for location, a sparse JD, 1099, or seniority. Does not apply.
Apply to a single job (URL or pasted page) with fit review, or drain the pending queue when no argument is given.
Search a job board and autonomously apply to matching jobs one at a time, until paused, exhausted, or the max-applications cap is hit.
Migrate a React @tanstack/react-form codebase from the prop-drilled `useForm` + erased-form-type pattern to the official `createFormHook` composition API (`useAppForm` / `withForm` / `field.X`). Use when a project threads a `form` object (often cast to an `any`-erased type like `ReactFormExtendedApi<any,...>`) through field-wrapper components that take `form`+`name` props, and you want typed field names/values, no casts, and reusable bound field components. Triggers: "migrate forms to createFormHook", "adopt useAppForm/withForm", "remove AnyReactForm cast", "type-safe tanstack form fields".
Resume an interrupted or paused JobPilot run by id. Re-flips the run to in_progress and replays the apply loop on any remaining approved jobs without re-asking for fit confirmation.
Search a chosen job board via Playwright, rank results by fit against the user's resume, and save them to the run so the user can review.
Parse a resume's uploaded PDF into structured JSON (basics, experience, projects, skills, education) and save it to the editor.
| name | rescan-skipped |
| description | Re-score a run's skipped jobs and promote the eligible ones to `approved` for later applying. Recovers jobs wrongly dropped for location, a sparse JD, 1099, or seniority. Does not apply. |
| argument-hint | <run-id> [--jobs key1,key2,…] |
Re-score a run's skipped jobs and set eligible ones to approved. Never apply and never change the run's status — apply the promoted jobs afterward via the apply skill (apply run <run-id>) or the run page.
JOBPILOT_API=http://localhost:8000
Follow plugin/skills/shared/setup.md. Fetch the run: curl -fsS "$JOBPILOT_API/api/runs/<run-id>". Threshold = config.minScore (fallback data.autoApply.minMatchScore, else 70).
Targets are every status:"skipped" job; with --jobs key1,key2,…, restrict to those keys.
skipReason starting Already applied, CAPTCHA, or Payment required, or one stating a JD-cited citizenship/clearance requirement.--jobs): also leave deliberate user choices — Removed by user, Not selected by user, User cancelled…, Max applications limit reached, Run paused by user.--jobs mode: reconsider every named target except the permanent ones.Count the full target list up front and process every one. Below-threshold, zero-score, and no-skipReason jobs are all targets — the stored score came from the run that wrongly skipped them, so it's never a reason to skip the re-score. Don't cherry-pick the jobs already at/above threshold.
digest. Rich = non-empty techStack and requirements/responsibilities.skipReason was invalid (location/onsite, sparse JD, 1099, seniority), open the posting (browser_navigate + narrowed browser_snapshot; log in via plugin/skills/shared/auth.md if walled), rebuild the digest, and write it back so future rescans skip the browser:curl -fsS -X PATCH "$JOBPILOT_API/api/runs/<run-id>/jobs/<key>" \
-H 'content-type: application/json' \
-d "$(jq -n --arg digest "$DIGEST" --arg desc "<posting text>" '{digest:$digest, description:$desc}')"
POST /api/score-fit with {digest}; never reuse the stored matchScore. If confidence >= 0.7 and score is ≥10 from the threshold, trust it; else deliberate from strongMatches/partialMatches/gaps. A zero/low score with no skipReason (common at defense/federal employers) is not a disqualifier — only a JD-stated citizenship/clearance bar is (never infer from industry).score >= threshold → promote (no apply):curl -fsS -X PATCH "$JOBPILOT_API/api/runs/<run-id>/jobs/<key>" \
-H 'content-type: application/json' \
-d "$(jq -n --argjson score <0-100> --arg reason "<one line>" '{status:"approved", matchScore:$score, matchReason:$reason}')"
skipped, PATCH skipReason:"Below minimum match score (X < Y)".skipped with that reason.Same rules as auto-apply 2.2a. Seniority is never a skip — never drop a role for being below your level (Junior/Mid when your résumé is Senior) or for asking fewer years than you have; over-qualification is full marks on experience. Location/onsite, sparse JDs, and 1099/contractor work are never skips either — only a JD-stated citizenship/clearance requirement disqualifies.
Process every target before finishing — promoted + left-skipped + permanent must equal the target count. If any are unprocessed, keep going; don't report a partial pass as complete.
Print a short table (promoted vs left skipped, with reasons) plus the reconciliation (e.g. "228 skipped → 226 targets; 19 promoted, 207 left skipped"). Then point the user to apply run <run-id> (or the run page's Apply selected). Don't apply; don't change run status.