Perkins

How it works

Tailoring

You give Perkins a posting: a link, pasted text, or a referrer's notes when there's no posting yet.

  1. It gets the full posting. For a link it reads the posting's public data (Workday, Greenhouse, Ashby, iCIMS, or any page with embedded JobPosting data). If that fails and your Claude Code session has a browser tool, Claude reads the page there; if that fails too, it asks you to paste. It never signs in, and it only fetches public addresses.
  2. It picks a variant from your tailoring model: the role type that fits the title and the top three requirements, and the gap that role type usually has to answer.
  3. It drafts from your master resume only. Same facts, new emphasis: the variant's headline and summary opening, the sections reordered, the posting's own phrases mirrored where they're true, and one new bullet aimed at the top requirement.
  4. It checks every fact. Each number, date, and title in the draft must be in your master. Anything that isn't comes out.
  5. It saves and renders the resume as Markdown and a PDF in applications/, checks the page count, and adds the posting to Considering in your tracker.
  6. It tells you the gaps: requirements you can't fully back, each with the honest answer your master supports.

Review, and the master grows

You review the draft and ask for changes in plain words. Wording and emphasis change only that resume. A new or corrected fact ("the team was 40 people, not 35", "add the vendor consolidation") goes into your master resume first, once you confirm it's true in general and not just framing for this job. So the next resume starts from a better record, and the fact check still holds.

Recording an application

When you say you submitted it, Perkins confirms the date and how you applied, moves the row from Considering to Submitted, and sets a suggested follow-up date two weeks out. With claims tracking on, it also writes the activity into that week's log with every field your state requires, and notes where it went.

It never records an application you haven't confirmed, and never applies for you.

Logging other activities

"Log my interview with Kestrel today", "a recruiter called about a role", "I went to a job center workshop": Perkins adds a row to Conversations and referrals, and with claims tracking writes the log entry for the day it happened. If a required field is missing, it asks. It never fills one in with a guess.

The dashboard

dashboard.html is rebuilt from tracker.md (and, with claims tracking, the week files) after every change:

Its browser tab icon is your initials (from the name heading on your master resume) in white on the dashboard's green. The last line has a link for tipping Perkins's maker, if you want to; it isn't printed, and it never appears on the claim log page.

The claim log page

With claims tracking, claim-log.html sits next to the dashboard and is rebuilt with it (or on its own with run.py claim-log --open). It's for walking a state reviewer through your work-search log, week by week, and the dashboard links to it.

The page only reads your log; it never changes it. A resume is linked only when the log entry names its application folder, or when exactly one folder matches the employer and role and was made on or before the contact date. A wrong resume in front of a reviewer is worse than none, so when Perkins can't tell, it links nothing.

The claims clerk

With claims tracking on, a small script keeps the weekly rhythm. It runs whenever a skill does, so there's nothing to schedule:

Each entry is graded solid only when the activity is on your state's list, every required field is filled, and it rests on your own words. Otherwise it's check, with a reason. Only you write no.