Skip to content
renanmpimentelPublic

About

Auto-apply to jobs from your terminal — orchestrates the Claude Code CLI + your real Chrome (Linux).

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

0 watching

Forks

Latest commit

 

History

75 Commits

Folders and files

Repository files navigation

jobRabbit

Auto-apply to jobs from your terminal — driven by Claude Code + your browser.

English · Português 🇧🇷

CI License: MIT Tests Platforms i18n

jobRabbit drives the Claude Code CLI with a browser: it browses job sites in your already-logged-in session, scores how well each role fits your profile, writes a tailored CV and cover letter, and applies for you — pausing to ask when it hits a captcha, a login, or a question it can't answer. Pick the browser backend that suits you: the Claude in Chrome extension (your real Chrome) or Playwright (no extension needed). One Rust binary runs on Linux, macOS and Windows, with a polished web UI (default) or a classic terminal UI (--tui).

Dashboard Jobs & applications ATS résumé checker Human-in-the-loop pending actions

✨ What it does

  • 🤖 Applies in a logged-in browser. Default: Claude in Chrome — your real Chrome session. Or switch to the Playwright backend: no extension, log in once and the profile persists.
  • 📄 Builds your profile for you. Import from a résumé (PDF/DOCX/TXT) or your LinkedIn URL.
  • 🎯 Scores every job 0–1 against your profile (seniority, stack, work model, requirements).
  • 🧩 Knows 12 ATS platforms — Gupy, LinkedIn, Greenhouse, Lever, Workday, Ashby, SmartRecruiters, Indeed, Solides, Vagas.com.br, InfoJobs, inHire — with per-site recipes.
  • 🛡️ Human-in-the-loop by default. It always stops for your approval before filling or submitting — even in autonomous mode. It never bypasses captchas.
  • 🔔 Tells you when it's stuck. Login, captcha or a screening question → in-app alert, Pending badge, and a desktop notification, with the full job context inline.
  • 📊 ATS résumé checker. Score your CV 0–100 with a keyword-gap report you can apply in one click.
  • 🌍 Bilingual — English and pt-BR, for both the UI and the agent; starts in your browser's language.

📋 Requirements

jobRabbit drives two things that must live on your desktop:

  • Claude Code CLI — installed and logged in (run claude once). Get it at claude.com/claude-code. (Requires a paid Claude plan.)
  • A browser backend (pick one in Config → Browser):
    • Claude in Chrome (default) — Google Chrome + the extension, installed and signed in. Get it at claude.com/claude-for-chrome. Uses your real, already-logged-in Chrome.
    • Playwright (no extension) — uses Claude Code's Playwright plugin with a persistent profile. On the first run, sign in to your job sites when the Playwright browser asks (jobRabbit pauses with a login pending); after that the session is remembered.

See Browser backends for a side-by-side comparison.

🚀 Quick start

1. Download the file for your computer from the latest release:

Your computer File
Windows jobrabbit-windows-x86_64.exe
Mac — Apple chip (M1/M2/M3/M4) jobrabbit-macos-arm64
Mac — Intel chip jobrabbit-macos-x86_64
Linux jobrabbit-linux-x86_64

Not sure which Mac? → About This Mac. "Apple M…" = Apple chip; "Intel" = Intel.

2. Run it — a tab opens in your browser with the jobRabbit dashboard. Keep the small terminal/console window open while you use it; closing it stops jobRabbit.

  • Windows — double-click the file. If you see "Windows protected your PC", click More info → Run anyway (the app just isn't code-signed yet — it's not malware).
  • Mac — open Terminal (⌘+Space, type Terminal) and paste:
    cd ~/Downloads && chmod +x jobrabbit-macos-* && ./jobrabbit-macos-*
    If macOS says "unidentified developer", go to System Settings → Privacy & Security, click Open Anyway, and run the command again.
  • Linux — from your Downloads folder:
    chmod +x jobrabbit-linux-x86_64 && ./jobrabbit-linux-x86_64

Prefer the classic terminal UI? Add --tui to the command.

👣 Your first run

  1. Import your profile — on the Profile page, click Import profile and point it at your résumé (PDF/DOCX/TXT) or paste your LinkedIn URL. The agent turns it into a background, a base CV, and suggested search variants.
  2. Pick where to search — from Config, enable the job sources you want (12 platforms are seeded; add your own too).
  3. Run a search — click Run search. Leave the apply mode on review for your first run: jobRabbit prepares everything and waits for your OK before it applies.

Or import headless from the CLI: jobrabbit --import-cv ~/resume.pdf / jobrabbit --import-linkedin https://www.linkedin.com/in/your-profile.

🌐 Browser backends

jobRabbit needs a browser it can drive. Two backends are supported — switch anytime in Config → Browser (web UI) or the Config tab (TUI); the change applies to the next run.

Claude in Chrome (default) Playwright
Extension required Yes — Claude in Chrome No
Browser used Your real Google Chrome Playwright's own browser (Claude Code plugin)
Logins Reuses your existing Chrome sessions Log in once; the persistent profile remembers it
Bot detection Lower risk (real browser, real sessions) Higher on strict sites (LinkedIn, Indeed)
Best for Day-to-day use — recommended Machines where you can't (or don't want to) install the extension

Claude in Chrome (default). jobRabbit launches claude --chrome, which drives your real, already-logged-in Chrome. Nothing else to set up: if you can browse LinkedIn in Chrome, the agent can too.

Playwright (no extension). jobRabbit lets the agent use Claude Code's Playwright plugin instead. The Playwright browser keeps a persistent profile: the first time a site asks for login, jobRabbit pauses with a login pending — sign in once in the Playwright window, resume, and future runs stay logged in. Captchas and logins are never bypassed, same as the default mode.

Existing settings.json files keep working: the legacy use_chrome flag is migrated automatically (true → chrome, false → playwright).

🌍 Language

jobRabbit speaks English and Português (Brasil). The web UI starts in your browser's language (English everywhere else) — switch anytime from the Config page (web UI) or the Config tab (TUI). The choice also sets the agent's language, so it searches the right job boards and writes your CV and cover letters in that language.

💻 Platform notes

The same binary adapts to each OS; a few optional niceties differ:

Linux macOS Windows
Web UI + agent (core) ✅ ✅ ✅
Desktop notifications ✅ (D-Bus) ✅ — (silent)
Auto-run when idle ✅ — —
Secure token storage Secret Service Keychain Credential Manager
Data & logs folder ~/.local/share/jobrabbit/ ~/Library/Application Support/dev.jobrabbit.jobrabbit/ %APPDATA%\jobrabbit\jobrabbit\data\

Where an item shows "—", it's simply skipped — everything else works normally. jobrabbit --doctor is the fastest way to check your setup on any OS.

🧰 Troubleshooting

  • "claude not found" — install Claude Code and log in (claude). Run jobrabbit --doctor for a full checkup.
  • "port 8787 is already in use" / "another jobRabbit instance is already running" — you probably left a jobRabbit open (check your terminals). Only one instance can use the database at a time; to run on another port use jobrabbit --port 8788. jobrabbit --help lists every flag.
  • Linux: binary won't start — install the libs: sudo apt install libxcb1 libxss1 libdbus-1-3.
  • macOS: "unidentified developer" — allow it in System Settings → Privacy & Security, or run xattr -d com.apple.quarantine ./jobrabbit-macos-* once.
  • Windows: no desktop notifications — expected; the in-app alerts (toast + Pending badge) still work everywhere.
  • TUI looks broken / no colors — use a modern terminal (256-color / UTF-8).
  • Where's my data? — the folder in Platform notes (jobrabbit.db, settings.json, jobrabbit.log, playbooks/<locale>/).

⚠️ Responsible use

Automating job applications may conflict with a site's Terms of Service. Check the ToS of each job site regarding automation — you are responsible for how you use this tool. jobRabbit keeps a human in the loop by default (review mode) and never bypasses captchas.

🔧 Developers

Build from source, Docker, dev shortcuts, architecture and tests

Build from source (any OS)

Requires Rust (stable, via rustup.rs) and Node 20+.

cd web-ui && npm install && npm run build && cd ..   # build the web UI (gets embedded)
cargo build --release                                # compile the binary
./target/release/jobrabbit                           # run it — jobrabbit.exe on Windows

On Linux only, install the D-Bus/X11 libs first (notifications, idle detection, TUI):

sudo apt install libxcb1 libxss1 libdbus-1-3         # Debian/Ubuntu

Docker (Linux hosts, no Rust/Node needed)

Builds a Linux binary inside Docker (use Build from source for macOS/Windows):

make            # build the web bundle + release binary → open the web UI
make app        # same, but runs the test suite first
./dist/jobrabbit

Docker says "all predefined address pools have been fully subnetted"? Your machine has too many leftover compose networks — run docker network prune (the services here use the default bridge, so newer checkouts don't create one).

Dev shortcuts (Docker)

make build        # compile (debug)          make web-dev   # Vite dev server (HMR) on :5173
make test         # run the tests            make release   # build ./dist/jobrabbit for the HOST
make snapshot     # render TUI as text       make fmt        # format the code
make run          # web UI (needs claude + a browser backend on the host)
make tui          # classic TUI (needs a TTY)

Architecture

  • Front-ends — a local web UI (React + Vite + Tailwind, served by an Axum backend) and a TUI (ratatui/crossterm). Both compose the same core.
  • Agent — the app spawns claude in a PTY and reads --output-format stream-json. The agent emits an NDJSON protocol (job / application / pending / answer / feedback / profile / cv_review) that the app persists to SQLite. The agent only emits events; the DB is owned by the UI loop.
  • Desktop integrations — resolved per OS: notifications (notify-rust, Linux D-Bus / macOS), keyring (keyring v3), link opening (xdg-open / open / start) and Chrome discovery. Idle detection (user-idle) is Linux-only.
  • i18n — UI strings in web-ui/src/locales/{en,pt-BR}.json; agent prompts/playbooks in src/locale.rs + src/playbooks/{en,pt-br}/.

Tests & diagnostics

cargo test                     # 129 tests (parser, DB, protocol, prompts, sanitize, CLI, TUI) — or `make test`
jobrabbit --selftest-agent     # real E2E: runs claude (safe prompt, no browsing) through the pipeline
jobrabbit --snapshot           # preview the TUI screens as text (no TTY)
jobrabbit --doctor             # environment diagnostics (deps + config, per OS)

Contributing

PRs are welcome! Good first contributions: new ATS playbooks, additional locales, and UI polish. Keep the test suite green (cargo test / make test) and the code English-only.

Inspired by claudia-rh (Windows + Tauri/React).

📄 License

MIT — see LICENSE.

Built with 🐇 and Claude Code.

About

Auto-apply to jobs from your terminal — orchestrates the Claude Code CLI + your real Chrome (Linux).

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages