Claude skill that automates your job search: scores postings, tailors your CV, tracks applications.
Python
17
1 commits
updated Oct 19, 2026
/\_/\ "Are you tired of sending CVs and getting rejections?
( o.o ) Kitty is smart. Kitty wants to help."
> ^ <
/| |\
(_| |_) ~ Kitty, job hunter, 4.2 lives remaining
A Claude skill that automates your job search. Paste a job posting link (for LinkedIn, copy the job description instead, since LinkedIn blocks automated readers) and Kitty will:
And Kitty is a cat. She miaows now and then, and when the search gets rough she can cheer you up with a random cat fact. See Meet Kitty.

You paste a posting. Kitty answers with a fit card:
Fit: 4/5, apply with an angle
- Role level: match, senior IC with a team of 3-5
- Domain: adjacent, marketplaces instead of fintech
- Must-haves: 6 of 7 covered; missing: SQL dashboards
- Logistics: Berlin, 3 days on-site, English
- Salary: published band 85-100k vs your target 90k
- Link: https://example.com/careers/senior-pm
| Mode | What happens |
|---|---|
| Score | A 1-5 fit card (level, domain, must-haves, logistics, salary) before any tailoring. |
| Tailor | Analyses your CV and proposes changes that follow best practices: your keywords adjusted to the job description, an authentic voice, an ATS-friendly layout. It never changes your template and always asks before making a change. Edits are length-neutral and checked by rendering to PDF, so your page limit holds. |
| Track | A Notion database or local file that stores all your applications. |
| Sync | Optional daily Gmail scan. It checks your inbox and updates the status in your tracker when an interview moves to the next stage or a rejection arrives. |
| Stats | A fixed funnel report by country. With enough data, fit scoring learns which role levels convert for you. |
| Cheer up | Say "cat fact" or "cheer me up" for a random fact about cats. |
Tailoring follows the same loop every time, and nothing is edited until you say yes.
.docx template, counts the pages and checks the layout. There is a sample template in the repository that you can use for testing or, after adding your real data, for applying.| Practice | What Kitty does | Why it helps |
|---|---|---|
| Match the posting's words | Uses the posting's exact terms where your CV already backs them up. | ATS keyword search and recruiters both scan for the posting's own wording. |
| Outcome first | Rewrites bullets as result, then how, with a number wherever a true one exists. | Shows results, not duties. |
| Show scope | Brings out users, revenue, budget, team size, number of teams. | Readers judge your level from scope. |
| Strongest proof first | Leads each role with the bullet closest to the posting's top requirement. | The first bullet is the one that gets read. |
| Cut filler | Rewrites "responsible for", "helped with", "various". | Weak verbs hide impact. |
| Tight bullets | One sentence, about two lines, one metric, in your template's style. | Recruiters skim. |
| A fresh summary | Rewrites the 5-6 line summary for each role. | It's the first thing read. |
| Emphasis by company type | Keywords and scope for large structured hiring, ownership and speed for startups, compliance and stakeholders for regulated companies. | Each type screens for something different. |
| ATS-safe layout check | Flags tables, text boxes and header text once, without rebuilding your template. | Some ATS parsers skip or garble them. |
| Page limit holds | Edits are length-neutral and checked by rendering to PDF. | No surprise second page. |
The posting asks for "growth experiments, SQL, and onboarding conversion". The CV bullet below is made up, and so are its numbers: in a real run they would come from elsewhere in your CV or from your answers.
Before
Responsible for the onboarding flow and worked with engineering on various improvements.
Proposed by Kitty
Onboarding: Raised activation from 31% to 38% across 120k monthly signups by redesigning the first-run flow with a team of 5 engineers.
| Change | Why |
|---|---|
| "Responsible for" and "various improvements" are gone | Filler hides the result |
| Result first (31% to 38%), then how | Outcome before duty |
| Scope added (120k signups, team of 5) | Shows your level |
| Uses the posting's word onboarding | Your CV already backs it |
| Still one sentence, about two lines | Length-neutral, so the page limit holds |
Kitty also checks the posting for terms your CV doesn't state. Here it would ask:
The posting says "growth experiments" and "SQL". Your CV says neither. Did you run A/B tests or write SQL in this role? If so, give me one example and I'll add it. Otherwise I'll leave it out.
It never writes "A/B tests" or "SQL" on its own, and it won't invent the 31% to 38% either: the numbers must come from your CV or from you.
Kitty is a cat, and sometimes it shows. Expect an occasional "miaow" when you greet her or a role scores well, a purr when something goes right, and the odd bit of cat behaviour. It's one small touch at most per reply, and only in the chat. Your CV, tracker and fit cards stay professional, and she keeps the jokes away when you're stressed or asking something serious.
dist/kitty-has-a-job.zip from this repo (open the file on GitHub and click the download icon). No need to unzip or zip anything yourself. Kitty works in Claude Cowork and Claude Code, and in the Claude app with skills support (see What you need). It hasn't been tested elsewhere.
~/.claude/skills/, so you end up with ~/.claude/skills/kitty-has-a-job/..docx somewhere Kitty can access. Other formats aren't supported yet, but you can use the template from the repository.examples/sample_cv.docx is a made-up CV (Jordan Lee, senior PM in fintech) you can use to try Kitty before using your own. It is also a reference for a template that works well with the skill:
The sample runs to 2 pages, so set your page limit to 2 when you try it. For real applications, use your own CV as the template. The sample is only there to show the shape.
Other things to say:
| Need | Why | Required? |
|---|---|---|
| Claude with skills support (Claude app, Cowork or Claude Code). The skill hasn't been tested in other environments such as Codex. | Runs the skill | Yes |
Your CV as a .docx template | Kitty edits a copy and never touches the original | Yes |
Python 3 with pip install python-docx pypdf lxml | The scripts that edit the CV, update the tracker and build stats | Yes |
LibreOffice (soffice) | Page counts, so your page limit holds | Yes, for tailoring |
| Notion connector | Tracker and settings live in Notion. Without Notion, Kitty uses local files instead. Notion is nicer to work in, so it's worth setting up. | Recommended |
| Gmail connector | Status sync | Optional |
Python 3 packages (any OS, Python 3.8 or newer):
pip install python-docx pypdf lxml
If pip isn't found, use python3 -m pip install python-docx pypdf lxml. Download Python from python.org if you don't have it.
LibreOffice (used only to count pages). The scripts look for soffice or libreoffice on your PATH.
| OS | Install |
|---|---|
| macOS | brew install --cask libreoffice (Homebrew), or download from libreoffice.org |
| Ubuntu / Debian | sudo apt install libreoffice-writer |
| Windows | Download from libreoffice.org and add the folder with soffice.exe to your PATH |
Check that it worked:
python3 -c "import docx, pypdf, lxml" && echo "Python packages OK"
soffice --version
Connectors (Notion, Gmail) are switched on in Claude's settings under connectors, not installed from this repo.
Local mode keeps everything in files in your CV folder: kitty-settings.md for settings and tracker.csv for the tracker. All modes work. Gmail sync still needs the Gmail connector.
You paste a job posting (link or description)
|
v
+-----------------+ Reads your settings and CV template.
| Score the fit | Level, domain, must-haves, logistics, salary.
| (fit card) | Low score: skipped early, nothing logged.
+-----------------+
| worth applying
v
+-----------------+ Compares your CV with the posting, lists changes,
| Tailor the CV | marks new claims. Nothing is edited until you say yes.
| (you approve) | Checks the page count by rendering to PDF.
+-----------------+
|
+----+--------------+
v v
New CV Tracker row
.docx (Notion or CSV)
^
| Gmail sync moves it forward on
| confirmations, interviews, rejections
v
Stats: funnel by country, what converts
Claude does the judgment: fit, what to change in the CV, reading emails. Anything that must come out the same every time (editing the Word file, page counts, tracker rules, stats) runs as small Python scripts. That keeps results consistent and saves tokens.
Repo layout
kitty-has-a-job/
βββ SKILL.md Router: modes, steps with failure paths, fit card, scoring rubric, rules
βββ references/
β βββ common.md Tracker columns and values, tracker rules, formats (shared by every mode)
β βββ tracker-csv.md Tracker operations for a local CSV (and dry run)
β βββ tracker-notion.md Tracker operations through the Notion connector
β βββ tailor.md Tailoring steps, CV rules, company types, edge cases
β βββ stats.md Stats steps and reply format
β βββ sync.md Gmail sync steps and the email β change table
β βββ setup.md First-run interview, tracker and settings creation, scheduling
β βββ cv-editing.md Manual Word editing, only if cv.py cannot do an edit
βββ scripts/
β βββ cv.py Read any .docx CV, apply edits (--dry-run), count pages, build file names
β βββ tracker.py Find, add, update rows under the tracker rules; sync window; No response
β βββ stats.py Funnel report with sanity checks (CSV or Notion JSON)
βββ build.sh Rebuilds dist/kitty-has-a-job.zip (repo only)
βββ assets/
β βββ kitty-demo.gif Demo animation for the README (repo only)
βββ dist/
β βββ kitty-has-a-job.zip Ready-to-install skill (repo only)
βββ examples/
β βββ sample_cv.docx Made-up CV to try the skill with (repo only)
βββ evals/ Repo only: task evals, trigger queries, regression cases, script tests
βββ README.md This file (repo only)
βββ CHANGELOG.md Version history (repo only)
βββ LICENSE
Tests live in evals/ (see evals/README.md). The script tests need no model:
bash evals/test_scripts.sh # add --fast to skip LibreOffice
After changing SKILL.md, references/ or scripts/, run bash build.sh to rebuild the zip in dist/ before committing.
All test data uses a made-up person (Alex Example). Never commit a real CV, real emails or real salaries.
MIT
For questions and feedback, please open an issue in this repository.
Claude skill that automates your job search: scores postings, tailors your CV, tracks applications.
Python
17
1 commits
updated Oct 19, 2026
/\_/\ "Are you tired of sending CVs and getting rejections?
( o.o ) Kitty is smart. Kitty wants to help."
> ^ <
/| |\
(_| |_) ~ Kitty, job hunter, 4.2 lives remaining
A Claude skill that automates your job search. Paste a job posting link (for LinkedIn, copy the job description instead, since LinkedIn blocks automated readers) and Kitty will:
And Kitty is a cat. She miaows now and then, and when the search gets rough she can cheer you up with a random cat fact. See Meet Kitty.

You paste a posting. Kitty answers with a fit card:
Fit: 4/5, apply with an angle
- Role level: match, senior IC with a team of 3-5
- Domain: adjacent, marketplaces instead of fintech
- Must-haves: 6 of 7 covered; missing: SQL dashboards
- Logistics: Berlin, 3 days on-site, English
- Salary: published band 85-100k vs your target 90k
- Link: https://example.com/careers/senior-pm
| Mode | What happens |
|---|---|
| Score | A 1-5 fit card (level, domain, must-haves, logistics, salary) before any tailoring. |
| Tailor | Analyses your CV and proposes changes that follow best practices: your keywords adjusted to the job description, an authentic voice, an ATS-friendly layout. It never changes your template and always asks before making a change. Edits are length-neutral and checked by rendering to PDF, so your page limit holds. |
| Track | A Notion database or local file that stores all your applications. |
| Sync | Optional daily Gmail scan. It checks your inbox and updates the status in your tracker when an interview moves to the next stage or a rejection arrives. |
| Stats | A fixed funnel report by country. With enough data, fit scoring learns which role levels convert for you. |
| Cheer up | Say "cat fact" or "cheer me up" for a random fact about cats. |
Tailoring follows the same loop every time, and nothing is edited until you say yes.
.docx template, counts the pages and checks the layout. There is a sample template in the repository that you can use for testing or, after adding your real data, for applying.| Practice | What Kitty does | Why it helps |
|---|---|---|
| Match the posting's words | Uses the posting's exact terms where your CV already backs them up. | ATS keyword search and recruiters both scan for the posting's own wording. |
| Outcome first | Rewrites bullets as result, then how, with a number wherever a true one exists. | Shows results, not duties. |
| Show scope | Brings out users, revenue, budget, team size, number of teams. | Readers judge your level from scope. |
| Strongest proof first | Leads each role with the bullet closest to the posting's top requirement. | The first bullet is the one that gets read. |
| Cut filler | Rewrites "responsible for", "helped with", "various". | Weak verbs hide impact. |
| Tight bullets | One sentence, about two lines, one metric, in your template's style. | Recruiters skim. |
| A fresh summary | Rewrites the 5-6 line summary for each role. | It's the first thing read. |
| Emphasis by company type | Keywords and scope for large structured hiring, ownership and speed for startups, compliance and stakeholders for regulated companies. | Each type screens for something different. |
| ATS-safe layout check | Flags tables, text boxes and header text once, without rebuilding your template. | Some ATS parsers skip or garble them. |
| Page limit holds | Edits are length-neutral and checked by rendering to PDF. | No surprise second page. |
The posting asks for "growth experiments, SQL, and onboarding conversion". The CV bullet below is made up, and so are its numbers: in a real run they would come from elsewhere in your CV or from your answers.
Before
Responsible for the onboarding flow and worked with engineering on various improvements.
Proposed by Kitty
Onboarding: Raised activation from 31% to 38% across 120k monthly signups by redesigning the first-run flow with a team of 5 engineers.
| Change | Why |
|---|---|
| "Responsible for" and "various improvements" are gone | Filler hides the result |
| Result first (31% to 38%), then how | Outcome before duty |
| Scope added (120k signups, team of 5) | Shows your level |
| Uses the posting's word onboarding | Your CV already backs it |
| Still one sentence, about two lines | Length-neutral, so the page limit holds |
Kitty also checks the posting for terms your CV doesn't state. Here it would ask:
The posting says "growth experiments" and "SQL". Your CV says neither. Did you run A/B tests or write SQL in this role? If so, give me one example and I'll add it. Otherwise I'll leave it out.
It never writes "A/B tests" or "SQL" on its own, and it won't invent the 31% to 38% either: the numbers must come from your CV or from you.
Kitty is a cat, and sometimes it shows. Expect an occasional "miaow" when you greet her or a role scores well, a purr when something goes right, and the odd bit of cat behaviour. It's one small touch at most per reply, and only in the chat. Your CV, tracker and fit cards stay professional, and she keeps the jokes away when you're stressed or asking something serious.
dist/kitty-has-a-job.zip from this repo (open the file on GitHub and click the download icon). No need to unzip or zip anything yourself. Kitty works in Claude Cowork and Claude Code, and in the Claude app with skills support (see What you need). It hasn't been tested elsewhere.
~/.claude/skills/, so you end up with ~/.claude/skills/kitty-has-a-job/..docx somewhere Kitty can access. Other formats aren't supported yet, but you can use the template from the repository.examples/sample_cv.docx is a made-up CV (Jordan Lee, senior PM in fintech) you can use to try Kitty before using your own. It is also a reference for a template that works well with the skill:
The sample runs to 2 pages, so set your page limit to 2 when you try it. For real applications, use your own CV as the template. The sample is only there to show the shape.
Other things to say:
| Need | Why | Required? |
|---|---|---|
| Claude with skills support (Claude app, Cowork or Claude Code). The skill hasn't been tested in other environments such as Codex. | Runs the skill | Yes |
Your CV as a .docx template | Kitty edits a copy and never touches the original | Yes |
Python 3 with pip install python-docx pypdf lxml | The scripts that edit the CV, update the tracker and build stats | Yes |
LibreOffice (soffice) | Page counts, so your page limit holds | Yes, for tailoring |
| Notion connector | Tracker and settings live in Notion. Without Notion, Kitty uses local files instead. Notion is nicer to work in, so it's worth setting up. | Recommended |
| Gmail connector | Status sync | Optional |
Python 3 packages (any OS, Python 3.8 or newer):
pip install python-docx pypdf lxml
If pip isn't found, use python3 -m pip install python-docx pypdf lxml. Download Python from python.org if you don't have it.
LibreOffice (used only to count pages). The scripts look for soffice or libreoffice on your PATH.
| OS | Install |
|---|---|
| macOS | brew install --cask libreoffice (Homebrew), or download from libreoffice.org |
| Ubuntu / Debian | sudo apt install libreoffice-writer |
| Windows | Download from libreoffice.org and add the folder with soffice.exe to your PATH |
Check that it worked:
python3 -c "import docx, pypdf, lxml" && echo "Python packages OK"
soffice --version
Connectors (Notion, Gmail) are switched on in Claude's settings under connectors, not installed from this repo.
Local mode keeps everything in files in your CV folder: kitty-settings.md for settings and tracker.csv for the tracker. All modes work. Gmail sync still needs the Gmail connector.
You paste a job posting (link or description)
|
v
+-----------------+ Reads your settings and CV template.
| Score the fit | Level, domain, must-haves, logistics, salary.
| (fit card) | Low score: skipped early, nothing logged.
+-----------------+
| worth applying
v
+-----------------+ Compares your CV with the posting, lists changes,
| Tailor the CV | marks new claims. Nothing is edited until you say yes.
| (you approve) | Checks the page count by rendering to PDF.
+-----------------+
|
+----+--------------+
v v
New CV Tracker row
.docx (Notion or CSV)
^
| Gmail sync moves it forward on
| confirmations, interviews, rejections
v
Stats: funnel by country, what converts
Claude does the judgment: fit, what to change in the CV, reading emails. Anything that must come out the same every time (editing the Word file, page counts, tracker rules, stats) runs as small Python scripts. That keeps results consistent and saves tokens.
Repo layout
kitty-has-a-job/
βββ SKILL.md Router: modes, steps with failure paths, fit card, scoring rubric, rules
βββ references/
β βββ common.md Tracker columns and values, tracker rules, formats (shared by every mode)
β βββ tracker-csv.md Tracker operations for a local CSV (and dry run)
β βββ tracker-notion.md Tracker operations through the Notion connector
β βββ tailor.md Tailoring steps, CV rules, company types, edge cases
β βββ stats.md Stats steps and reply format
β βββ sync.md Gmail sync steps and the email β change table
β βββ setup.md First-run interview, tracker and settings creation, scheduling
β βββ cv-editing.md Manual Word editing, only if cv.py cannot do an edit
βββ scripts/
β βββ cv.py Read any .docx CV, apply edits (--dry-run), count pages, build file names
β βββ tracker.py Find, add, update rows under the tracker rules; sync window; No response
β βββ stats.py Funnel report with sanity checks (CSV or Notion JSON)
βββ build.sh Rebuilds dist/kitty-has-a-job.zip (repo only)
βββ assets/
β βββ kitty-demo.gif Demo animation for the README (repo only)
βββ dist/
β βββ kitty-has-a-job.zip Ready-to-install skill (repo only)
βββ examples/
β βββ sample_cv.docx Made-up CV to try the skill with (repo only)
βββ evals/ Repo only: task evals, trigger queries, regression cases, script tests
βββ README.md This file (repo only)
βββ CHANGELOG.md Version history (repo only)
βββ LICENSE
Tests live in evals/ (see evals/README.md). The script tests need no model:
bash evals/test_scripts.sh # add --fast to skip LibreOffice
After changing SKILL.md, references/ or scripts/, run bash build.sh to rebuild the zip in dist/ before committing.
All test data uses a made-up person (Alex Example). Never commit a real CV, real emails or real salaries.
MIT
For questions and feedback, please open an issue in this repository.