job-search-agent

Your LinkedIn job hunt, run by an agent in your browser on your Mac. Nothing runs until you set it up below.

What the agent does for you

Finds jobs It runs your saved searches in your own browser, about once a day, signed in as you.
Scores them It opens each posting and scores the fit against your resume and your own directions.
Applies for you LinkedIn Easy Apply, and the outside boards the operator has switched on — Ashby, Greenhouse, SmartRecruiters and company career sites.
What this server can and cannot see

Every page opens in your browser with your LinkedIn login, and every model call runs on your Mac with your DeepSeek key.

This server keeps your feed, your answers and preferences, a password hash and a hashed driver token — never your key, never your LinkedIn password, never a picture of your session.

Install and configure the agent

A Mac with Apple silicon (macOS 13 or newer), a LinkedIn account and a DeepSeek API key. About ten minutes.

  1. Create your account and log in. Create an account with a username and a password — nothing else is asked.
  2. Install ego lite and sign in to LinkedIn in it, once.
    What to install, and why
    • Download from https://lite.ego.app/download?auto=1 and open it. ego lite is the browser the agent drives; it works in its own isolated tabs and reuses your login, so it never fights you for the window.
    • In ego lite, open linkedin.com and sign in. That is the only time you type your LinkedIn password — it stays in that browser, and this server can never check it for you.
  3. Get a DeepSeek API key. Create one at platform.deepseek.com/api_keys and keep it handy. You pay DeepSeek for your own model use — a few cents per day of applying — and the key is stored only in your Mac's Keychain.
  4. Download and open JSA Driver.
    Where to get it
    • Download JSA Driver for Mac (v0.2.1) — Apple silicon.
    • Open the DMG, drag JSA Driver into Applications, launch it. It lives in the menu bar (the antenna icon) — there is no window until you click it.
  5. Connect the app to this site.
    What to click in the app
    • Click the menu-bar icon → Setup. The server URL is prefilled with this site.
    • Press Connect to website. Your browser opens a page here showing a short code; the app shows the same code. Approve only if the codes match — that page never auto-approves. The app then connects by itself within seconds. (Connecting a new Mac disconnects the previous one.)
    • Paste your DeepSeek key into the DeepSeek key field, press Check key, then Save key. It goes into your login Keychain and never leaves the Mac except to call DeepSeek.
    • The ego lite row should read “found at …”. If it says “Install ego lite”, go back to step 2.
    • Under Options turn on Launch at login, Start automatically and Keep Mac awake — a sleeping Mac stalls the flows, and the next page loads come back blank.
  6. Tell the agent about you. After logging in, the User input tab.
    What to fill in
    • Browser driver — should show online · Mac app and “key present”. If it says no key, finish step 5.
    • Profiles — one or more resume bundles; each saved search uses one, so a management search and an engineering search can apply with different resumes. You start with a “Default” profile.
    • Your resume — upload the PDF or DOCX you actually send to employers. We read the text out of it for the selected profile, and the boards outside LinkedIn (Ashby, Greenhouse, SmartRecruiters, company sites) attach the file itself.
    • Fit directions — free text on what you target and what to rule out (“I target forward-deployed and ML platform roles; no staffing agencies”). Per profile; it steers the fit score and never the hard limits.
    • Your stories — four to six short first-person stories (“the biggest system I built”, “an incident and what I learned”). Only “why us” and “tell us about” questions draw on them; the agent never invents one that is not here.
    • Salary floor — postings whose known ceiling is below it are never applied to. Postings with no salary data pass.
    • Mobility — tick “I can move anywhere in the US” if you would relocate. Your searches then ask for on-site and hybrid roles nationwide and the fit score knows you will move. It never blocks anything.
    • Schedule — your timezone and the hours the agent may work.
    • Saved searches (My searches tab) — the keyword sets it scrapes. Improve asks the model for keyword changes; nothing changes until you tick what you accept.
    • State ranking — one list, most preferred first: the 50 states and DC plus “United States / Remote” and “Elsewhere”. A new state arrives red-framed; put it where it belongs. A role offered in several states is applied to in the best-ranked one.
    • Which boards the apply flow walks is set by the operator, not per user — the Applications tab shows what is on.
  7. Let it run, then answer what it could not.
    What happens next
    • The agent starts on its own inside your hours. The Applications tab shows every walk; the header counts new postings and runs.
    • When a form asks something your resume does not answer, the walk pauses and the question lands under Questions. It arrives with the form's own options as buttons (a free-text question gets the agent's best guesses instead); nothing is preselected — a note under them names the suggested one and why. Click the option that fits, choose Type my own…, or press Decline. Nothing is banked until you click; answered once, the answer is reused on every later form. Essay questions get a sourced draft you edit and save — nothing is sent without you.
    • A LinkedIn security checkpoint or the daily Easy Apply limit pauses your agent for a few hours by itself. Nothing ever retries into a block.
  8. That is it. Everything above is editable later, and the setup guide is always one click away in the header.
Linux or a headless machine

There is a Terminal driver — a single Python file run as a user service — that the operator installs with a token they mint for you. It needs ego lite and your DeepSeek key on that machine the same way. Ask the operator.