A complete job-search pipeline as a single Claude skill. Scan boards, tailor your resume, score it against the ATS, write the cover letter, fill the application, prep for the interview, debrief it, reach out to the recruiter — all tracked in a standing ledger.
FAQ
open-to-work is a Claude Code plugin with 1 hand-picked skill for automation work, indexed on Flowy. Install it with the command on its page. It includes Open-to-work. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
$ npx -y skills add rwtibbs/Open-to-work --agent claude-code
A complete job-search pipeline as a single Claude skill.
Scan boards, tailor your resume, score it against the ATS, write the cover letter, fill the application, prep for the interview, debrief it, reach out to the recruiter — all tracked in a standing ledger. You stay in the loop; the skill does the legwork.
open-to-work.skillpython3 scripts/selfcheck.py to confirm dependenciesOnboarding handles everything else.
The full system needs Claude Cowork or Claude Code — a persistent filesystem (so your library survives between sessions) and a shell (to run the bundled scripts). A plain claude.ai chat can talk strategy but can't save a library or produce real files.
Dependencies: Python 3.8+, python-docx, LibreOffice (PDF export), and poppler (pdfinfo/pdftotext — pypdf auto-fallback if absent). The job scanner is pure standard library. The Claude for Chrome extension powers the logged-in LinkedIn/Wellfound browser pass and application fill/upload; onboarding walks you through it.
open-to-work/
├── SKILL.md # orchestrator (onboard + run + scan + prep + outreach)
├── scripts/
│ ├── generate_resume.py # resume markdown → polished one-page .docx
│ ├── export_pdf.py # .docx → .pdf via LibreOffice
│ ├── page_count.py # page-length guard; prints overflow
│ ├── build_cover_letter.py # cover-letter markdown → matching .docx
│ ├── job_scanner.py # config-driven scanner: broad discovery + watchlist
│ ├── lint_copy.py # AI-tell + ATS parse-safety linter
│ └── selfcheck.py # verify deps + scanner logic after install/edits
├── references/
│ ├── onboarding-interview.md # Quick (~5 min) + Thorough (~20 min) question sets
│ ├── profile-template.json
│ ├── base_resume-template.md
│ ├── fact-pack-template.md
│ ├── voice-template.md
│ ├── format-template.json
│ ├── writing-standards.md # house style: the structural AI tells to avoid
│ ├── cover-letter-playbook.md # opener hierarchy, anti-staccato, truthfulness rules
│ ├── ats-rubric.md # self-contained ATS scorer
│ ├── browser-autofill.md # Claude-in-Chrome fill/upload procedure
│ ├── interview-prep.md # prep kit, mock interview, transcript debrief
│ ├── outreach-playbook.md # tier-gated recruiter/HM outreach
│ ├── application-tracker.md # standing pipeline ledger (applications.json)
│ ├── followup-and-negotiation.md # thank-yous, status nudges, offer negotiation
│ ├── scheduling.md # recurring scan setup + unattended run flow
│ ├── scanner_config.template.json
│ └── scanner-scheduled-task.template.md
└── user-library/
└── NOT_ONBOARDED.md # first-run marker; replaced during onboarding
The first time you talk about your job search, it opens with a short overview then kicks off onboarding to build your personal user-library. You choose the depth:
You can start from an uploaded resume, a pasted LinkedIn/portfolio, or pure Q&A. It produces your profile.json, base_resume.md, fact-pack.md, voice.md, and format.json, reads them back to confirm, and you're set.
Paste a job description (full text — a URL alone isn't enough) and say something like "tailor my resume for this." It will:
Set up job scanning during onboarding (or any time). Give it your target roles, levels, locations, comp floor, recency window, role shape, priority domains, and an optional company watchlist.
The scanner does broad market discovery across keyless remote-job aggregators (Remotive, RemoteOK, Arbeitnow, Jobicy; Adzuna optional) plus the optional Greenhouse/Lever/Ashby watchlist. It scores in two stages: a cheap card-level pass rules out obvious mismatches; only promising cards get the full JD fetched and re-scored. LinkedIn and Wellfound are covered via a logged-in browser pass (Claude for Chrome extension).
Run on demand or schedule it (default: twice daily). Each scan surfaces a ranked shortlist of new matching roles — deduped so nothing repeats — and you can drop any one straight into the tailoring pipeline.
user-library/applications.json) records what you applied to, reached out on, and interviewed for. Ask "what's still open?" and get a real answer.All of your personal data — resume, fact pack, voice, contact details, form answers, and job-search history — lives in your own user-library/ files, on your machine. The skill ships with only empty templates and a first-run marker. Your information isn't embedded in the skill and isn't shared by installing or distributing it. Pass the .skill file to someone else and they get the machinery; they onboard themselves into their own library.
MIT
.gitignore .vercelignore files/ open-to-work.skill index.html LICENSE README.md references/ application-tracker.md ats-rubric.md base_resume-template.md browser-autofill.md cover-letter-playbook.md fact-pack-template.md followup-and-negotiation.md format-template.json interview-prep.md onboarding-interview.md outreach-playbook.md profile-template.json scanner_config.template.json scanner-scheduled-task.template.md scheduling.md voice-template.md writing-standards.md scripts/ build_cover_letter.py export_pdf.py generate_resume.py job_scanner.py lint_copy.py page_count.py selfcheck.py SKILL.md user-library/ NOT_ONBOARDED.md vercel.json
© 2026 Flowy · Free and open source
Built for Claude Code · Not affiliated with Anthropic