After months of manually scrolling job boards and filling the same Easy Apply form 200 times, I decided to automate it. But not with a SaaS or a Chrome extension. With the coding agent I already use every day.
The problem
The average tech job seeker spends 5-8 hours per week on:
- Searching LinkedIn with the same filters
- Filling Easy Apply forms that ask the same 15 questions
- Tracking applications in a spreadsheet that's always out of date
- Drafting replies to recruiters while trying not to sound like a robot
- Forgetting which companies they already applied to
The solution: skills, not code
I built Job Seeker, an open source set of markdown skills that any coding agent (Devin, Claude, Cursor, opencode) can consume. Your agent reads the skills, uses a playwright-cli wrapper for browser automation, and stores everything in a Postgres database.
It's not an agent. It's the instructions and scripts that make your agent a job search assistant.
How it works
You: "apply to 5 jobs"
-> Agent loads your profile from DB
-> Searches LinkedIn with your Must-have filters
-> Applies via Easy Apply (form data from DB)
-> Registers every application
-> Shows you a summary
9 flows
| Flow | What it does |
|---|---|
| onboarding | Browser setup, Gmail + LinkedIn login, DB creation |
| profile | CV extraction + 30-preference questionnaire with Must/Strong/Nice weights |
| strategy | passive/selective/active/aggressive levels |
| apply | LinkedIn search + Easy Apply |
| news | Gmail + LinkedIn inbox review, draft replies |
| daily | Runs news + apply automatically |
| radar | Register on job boards, set up alerts |
| targets | Apply directly to 40 target companies |
| memory | Autonomous preference detection and storage |
Key design decisions
1. Skills as markdown. Any agent that reads markdown can use them. No vendor lock-in, no API keys, no SaaS dependency.
2. Candidate-agnostic repo. No personal data in any tracked file. Everything lives in your own Neon Postgres DB. Clone, run onboarding, done.
3. Browser isolation. Dedicated Chrome profile via playwright-cli wrapper. Headless by default, headed only for manual login and 2FA. The agent never handles credentials.
4. Strategy levels. passive, selective, active, aggressive. Each controls batch sizes, frequency, match thresholds, and which Must-haves to relax. Pick a level and all flows respect it.
5. Anti-LLM messages. Recruiter replies pass a checklist: no em-dashes, no bullet points in DMs, conversational tone, max 2 short paragraphs, mimic the user's style profile from DB.
6. Form data from DB only. The agent never invents values. If a field is missing, it stops, asks the user, saves the answer, and continues.
Try it
git clone https://github.com/galiprandi/job-seeker.git
cd job-seeker
npm install
Create a .env with your Neon Postgres connection string, then tell your coding agent: "run the onboarding skill."
After onboarding: "apply to 5 jobs" or "check for updates."
Links
- Repo: https://github.com/galiprandi/job-seeker
- Docs: https://galiprandi.github.io/job-seeker/
- Demo: https://github.com/galiprandi/job-seeker/releases/download/v0.1.0/demo-terminal.webm
MIT licensed. If it helps you, give it a star.

Top comments (0)