Make your career take off
Your agent applies. atsfill checks every answer before it sends.
One CLI reads the application form on 38 hiring systems, fills it with your answers, reads each one back, and sends only when all of them match.
uvx atsfill install-browser
uvx atsfill read <posting-url>
| Time | Carrier | Posting | Command | Remarks |
|---|---|---|---|---|
| 09:12 |
|
Acme – Backend Engineer | fill | READY |
| 09:14 |
|
Northwind – Data Analyst | send | SUBMITTED |
| 09:15 |
|
Contoso – Product Designer | send | REFUSED |
| 09:21 |
|
Fabrikam – Support Lead | read | READY |
| 09:34 | Own careers site | Litware – QA Engineer | read | UNSUPPORTED |
From your agent to the employer
Your agent writes the answers; atsfill carries them to the hiring system and checks what it holds before anything is sent.
- You give your agent a posting. It already knows your profile and resume.
- The agent runs
atsfill readon the posting. - atsfill opens the form in its own browser, through that system's adapter.
- Every field comes back as JSON: its id, type, options and whether it is required.
- The agent writes
answers.jsonfrom what it knows about you, one answer per field id. filltypes each answer, then reads it back from the page. It never submits.- Every answer read back as given:
ready. A mismatch comes backrefused, naming the field. - Your agent asks you before it sends, and atsfill submits only on systems your config allows.
sendfills again, checks every answer again, and only then submits.- The application reaches the employer:
submitted, with the evidence of the send.
One posting, three gates
The same commands for every system. Each prints one JSON line and an exit code your agent can branch on.
-
read lists the form
Every field with its id, type, options and whether it is required, so the agent knows what to answer.
$ uvx atsfill read "$POSTING" {"status":"ready", "system":"greenhouse", "fields":[{"id":"level", "label":"English level", "type":"choice", "required":true, "options":["Basic","Fluent"]}, …]} -
fill reads every answer back
A dry run: it fills the form, reads each field back from the page, and never submits.
readymeans every answer read back as given; a mismatch names the field.$ uvx atsfill fill "$POSTING" \ --answers answers.json {"status":"ready", "system":"greenhouse"} -
send submits when all match
Only on a system you allowed, only once per posting, and only when every answer reads back as given.
$ uvx atsfill send "$POSTING" \ --answers answers.json {"status":"submitted", "system":"greenhouse", "evidence":"https://job-boards.greenhouse.io/acme/jobs/1234/confirmation"}
Example output, shortened and wrapped: atsfill prints each result on one line.
A wrong answer never boards
A custom dropdown kept its old value. atsfill compares each answer with what the page holds and refuses the send before the click: nothing reaches the employer, and the result names the field.
{"status":"refused",
"system":"lever",
"reason":"mismatch: level",
"checks":[{"field_id":"level","read_back":"Basic"}]}
38 carriers serve this terminal
A hiring system is supported once a dry run passed on five employers. Any other one answers unsupported, so your agent can fall back to driving a browser itself.
- ADP
- ADP MyJobs
Ashby
BambooHR
Breezy HR
Dayforce
Eightfold
Greenhouse
Gupy
Hireology
HiringThing
isolved Hire
JazzHR
JobAffinity- Jobstreet
JOIN
Lever
Manatal
Oracle
Paycor
Paylocity
Personio
Phenom
Pinpoint
Recruitee- Recruiterflow
Rippling
SAP SuccessFactors
SmartRecruitersTeamtailor
Welcome to the Jungle- WelcomeKit
- Wellfound
- WeRecruit
- Work at a Startup
Workable
WorkdayZoho Recruit
Terminal rules
- Submitting is off
- until you list a system under
submit-allowed, in a config file the agent does not write. - One send per posting
- A posting already sent is refused unless you pass
--resend. - Side effects declared
- Some systems save answers as they are typed.
atsfill statuslists what each one does before anything is sent. - Accounts handled
- Where a system needs one, atsfill signs in from your password manager and types emailed codes from your mailbox command.
- Telemetry you can turn off
- One anonymous event per command, never your answers. What is sent.
NOW BOARDING
uvx atsfill install-browser
uvx atsfill read <posting-url>