S
shbernal/atsfill
Let your agent apply for you
View on GitHub ↗Link checked 2026-11-12 · HTTP 200 · opens the vendor's own site
Official descriptionLet your agent apply for you. One CLI for every hiring system.
Install & config
Client config (built from the install command this repo gives)
{
"mcpServers": {
"shbernal-atsfill": {
"command": "uvx",
"args": ["atsfill"]
}
}
}Parsed from the README we fetched on 2026-10-28; we have not executed it.
command/args come from the install command the repository states. When it is ambiguous, the project README wins.
VS Code (.vscode/mcp.json - the key is servers)
{
"servers": {
"shbernal-atsfill": {
"command": "uvx",
"args": ["atsfill"]
}
}
}Same server, but VS Code keeps it under <code>servers</code>.
Claude Code (command line)
claude mcp add --transport stdio shbernal-atsfill -- uvx atsfill
Claude Code does not read a config file; add the server with this command.
Key names differ by client: Clients & CLI
- Star count
- 3 ★ · shbernal/atsfill · read from the GitHub search API · (checked 2026-11-13 20:00:50)
- Source
- read directly from its GitHub page · type: open-source project
- Harvest history
- first seen 2026-10-28 · last seen 2026-11-14 · seen 19× · listed by 1 sources
- Score
- score 103 · 3 ★ · 1 sources · repo
- Install
uvx atsfill
FAQ (answers come from our records)
How do I install it?
The repository provides this install command:
uvx atsfill. It comes from the repository itself; we cannot guarantee it runs as-is in your client.Who is it for?
We filed it under these tags: 开源项目. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
repository
shbernal/atsfill;first catalogued 2026-10-28;last seen 2026-11-14。There is no official certification or quality rating here — we record sources and dates only.# atsfill
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
Let your agent apply for you. One CLI for every hiring system.
[![PyPI][pypi-badge]][pypi]
[![Python][python-badge]][pypi]
[![CI][ci-badge]][ci]
[![License][license-badge]][license]
Install • Quickstart • How it works • Docs
atsfill reads the application form behind a job posting, fills it with your answers, and checks what the hiring system will receive before anything is sent.
It is built for agents with a shell: every command prints one JSON document and exits with a code a script can branch on.
read lists a form's fields with their ids, types, options and whether they are required.
fill is a dry run: it fills the form, reads it back field by field, and never submits.
send fills again and submits only when every answer reads back as given.
Submitting is off until you enable it per hiring system, in a config file the agent does not write.
A posting already sent is refused unless you pass --resend.
## Supported hiring systems
Each line is a hiring system atsfill has an adapter for, and its run history: the last 30 days of runs, green when a form filled or an application went through, red when it failed.
The systems lists which ones need an account, to read the form or only to send it.
Any other system returns unsupported, so the consumer can fall back to driving a browser itself.
## Why atsfill?
An agent applying through a generic browser carries each system's quirks as prose, rereads it every run, and checks the form before submitting only because an instruction says so.
atsfill moves the quirks into one adapter per system and makes the check code: a send whose read-back differs from the answers is refused.
| | Generic browser agent | atsfill |
| System quirks | prose in the prompt | an adapter per system |
| Check before submit | an instruction | the read-back must match |
| Permission to submit | whatever the agent decides | a config file, per system |
| Double send | possible | refused without --resend |
| Output | page snapshots | one JSON result |
## Install
atsfill runs on Linux, macOS and Windows with Python 3.14, which uvx fetches if needed.
sh
uvx atsfill install-browser
This downloads the Camoufox browser build atsfill is pinned to: 1.3 GB, about 2.5 GB once unpacked.
Every push to main that passes CI is also published as a dev release; uvx --prerelease allow atsfill runs the newest.
## Quickstart
1. List the form's fields:
sh
uvx atsfill read https://job-boards.greenhouse.io/acme/jobs/1234
2. Write your answers to answers.json, keyed by field id. Files take an absolute path:
json
"firstname": "Ada",
"lastname": "Lovelace",
"email": "ada@example.com",
"resume": "/home/ada/resume.pdf"
3. Dry-run the fill. It ends ready when every answer reads back as given:
sh
uvx atsfill fill https://job-boards.greenhouse.io/acme/jobs/1234 --answers answers.json
4. Allow the system to submit in ~/.config/atsfill/config.toml:
toml
submit-allowed = ["greenhouse"]
5. Send. A submitted result carries the evidence of the send:
sh
uvx atsfill send https://job-boards.greenhouse.io/acme/jobs/1234 --answers answers.json
A dry run is not invisible: some systems save answers or the resume as they are typed.
atsfill status lists each system's side effects, whether it is allowed to submit, and its scope: the systems.
[![PyPI][pypi-badge]][pypi]
[![Python][python-badge]][pypi]
[![CI][ci-badge]][ci]
[![License][license-badge]][license]
Install • Quickstart • How it works • Docs
atsfill reads the application form behind a job posting, fills it with your answers, and checks what the hiring system will receive before anything is sent.
It is built for agents with a shell: every command prints one JSON document and exits with a code a script can branch on.
read lists a form's fields with their ids, types, options and whether they are required.
fill is a dry run: it fills the form, reads it back field by field, and never submits.
send fills again and submits only when every answer reads back as given.
Submitting is off until you enable it per hiring system, in a config file the agent does not write.
A posting already sent is refused unless you pass --resend.
## Supported hiring systems
Each line is a hiring system atsfill has an adapter for, and its run history: the last 30 days of runs, green when a form filled or an application went through, red when it failed.
The systems lists which ones need an account, to read the form or only to send it.
Any other system returns unsupported, so the consumer can fall back to driving a browser itself.
## Why atsfill?
An agent applying through a generic browser carries each system's quirks as prose, rereads it every run, and checks the form before submitting only because an instruction says so.
atsfill moves the quirks into one adapter per system and makes the check code: a send whose read-back differs from the answers is refused.
| | Generic browser agent | atsfill |
| System quirks | prose in the prompt | an adapter per system |
| Check before submit | an instruction | the read-back must match |
| Permission to submit | whatever the agent decides | a config file, per system |
| Double send | possible | refused without --resend |
| Output | page snapshots | one JSON result |
## Install
atsfill runs on Linux, macOS and Windows with Python 3.14, which uvx fetches if needed.
sh
uvx atsfill install-browser
This downloads the Camoufox browser build atsfill is pinned to: 1.3 GB, about 2.5 GB once unpacked.
Every push to main that passes CI is also published as a dev release; uvx --prerelease allow atsfill runs the newest.
## Quickstart
1. List the form's fields:
sh
uvx atsfill read https://job-boards.greenhouse.io/acme/jobs/1234
2. Write your answers to answers.json, keyed by field id. Files take an absolute path:
json
"firstname": "Ada",
"lastname": "Lovelace",
"email": "ada@example.com",
"resume": "/home/ada/resume.pdf"
3. Dry-run the fill. It ends ready when every answer reads back as given:
sh
uvx atsfill fill https://job-boards.greenhouse.io/acme/jobs/1234 --answers answers.json
4. Allow the system to submit in ~/.config/atsfill/config.toml:
toml
submit-allowed = ["greenhouse"]
5. Send. A submitted result carries the evidence of the send:
sh
uvx atsfill send https://job-boards.greenhouse.io/acme/jobs/1234 --answers answers.json
A dry run is not invisible: some systems save answers or the resume as they are typed.
atsfill status lists each system's side effects, whether it is allowed to submit, and its scope: the systems.
Listed badge (optional)
Copy this line into the README if you want the listing mark. Optional, and it does not affect being listed.
[](https://anclum.com/en/s/shbernal-atsfill/)
- Source
- github · https://github.com/shbernal/atsfill
- Browse by field
- Open source
- Traction
- 3 ★
- added
- today
More like this
Filed under
Every tag opens the full list for that filter. Counts are the live catalogue figures.