Agents and tools
Jobrunner
A local-first job application agent where the model proposes and a policy gate decides.
Jobrunner finds internship and early-career postings, removes duplicates, filters them, and fills applications on employer sites with a browser agent.
The model never touches the browser directly. It proposes one validated action at a time, a policy layer checks it, and exactly one code path can press submit. CAPTCHAs, assessments and sensitive questions always go to a person.
- Status
- Complete against its fake ATS. The real-site adapters are tested against fixtures, not live employer sites.
- Stack
- TypeScript, Node.js, Fastify, React, BullMQ, Prisma, Postgres, Playwright, Zod
Why it exists
Every mistake an application agent makes goes out under the applicant's real name, so the model can't be the thing in charge.
CAPTCHAs and assessments need a person. One pause can't be allowed to hold up every other application in the queue.
Try it
One fictional application, step by step, including what the policy gate refuses. This is a faithful demo built for this site with fictional data, not the product itself.
Application replay · Faithful demo · fictional data
One run through it
Check the posting
A posting is deduplicated, filtered, re-checked as still open and queued.
Clear the limits
The worker checks the daily cap and the site's circuit breaker, then takes a lock.
Fill the form
Answers come from the profile, the answer bank and learned answers, then generated text for required questions that aren't sensitive.
Hand off when stuck
An unknown question or a CAPTCHA pauses that one application. Discord carries the request and a single-use takeover link.
Audit, then submit
An audit, a screenshot, an optional review, then the click.
Confirm it
A confirmation only counts if it follows the agent's own click.
What it does
Discovery to queue
Sources, normalize, deduplicate, filter, validate the posting, queue.
Adapters
Greenhouse, Lever, Ashby and Workday, plus a generic agent for everything else.
Layered browser agent
Perception, deterministic classification, planning, policy check, execution, verification.
Provenance
Every filled value has to trace to the profile, an approved answer, or a reply from the person.
Human checkpoints
No CAPTCHA solving, no assessments, no demographic answers. Those pause for a human.
A fake applicant tracking system
Thirteen scenarios for end-to-end tests that never touch a real employer.
Why it's built this way
No model in the answer matcher
Learned answers are matched without a model and the profile always wins, so the agent can't invent facts about you.
Status and audit commit together
They share one transaction, so two racing workers can't both win.
Reject one, distrust all
A rejection at final review distrusts every learned answer that was used, instead of guessing which one was wrong.
How it fits together
- 01TypeScript monorepo: worker, API, dashboard, CLI and the fake ATS.
- 02BullMQ queues on Redis; Prisma on Postgres with an audited state machine.
- 03Planner order: deterministic rules first, then saved recipes, then the model.
In plain terms
- ATS
- Applicant tracking system, the software employers use to collect applications.
- Policy gate
- A check outside the model that approves or refuses each action it proposes.
- Provenance
- A record of where each filled-in value came from.
- Circuit breaker
- Stops trying a site after repeated failures.
- State machine
- A fixed list of allowed status moves.