Claude skill that automates your job search: scores postings, tailors your CV, tracks applications.
# Add to your Claude Code skills
git clone https://github.com/purple-sunset-now/kitty-has-a-jobGuides for using ai agents skills like kitty-has-a-job.
See how kitty-has-a-job compares with popular alternatives.
kitty-has-a-job is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by purple-sunset-now. Claude skill that automates your job search: scores postings, tailors your CV, tracks applications. It has 50 GitHub stars.
kitty-has-a-job's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/purple-sunset-now/kitty-has-a-job" and add it to your Claude Code skills directory (see the Installation section above). kitty-has-a-job ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
kitty-has-a-job is primarily written in Python. It is open-source under purple-sunset-now on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh kitty-has-a-job against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
Needs Python 3 (pip install python-docx pypdf lxml) and LibreOffice (soffice) for page counts; never assume they are installed. Scripts (cv.py, tracker.py, stats.py) are in scripts/ in this skill's folder: run them, don't read them (--help shows usage and exit codes).
| Mode | When | Do |
|---|---|---|
| Setup | No settings found, "hello kitty", or "set up / change my Kitty settings" | Read references/setup.md and references/common.md |
| Score | "Should I apply?", "score this role" | Steps 0 to 3 |
| Tailor | A posting plus "tailor my CV" / "apply" | Steps 0 to 3, then references/tailor.md |
| Stats | "Give stats", "how are my applications going" | Step 0, then references/stats.md |
| Sync | "Sync my applications", or the scheduled task | Step 0, then references/sync.md |
| Cheer up | "Cat fact", "cheer me up" | Reply with the cat fact rules below; no settings or tracker needed |
| # | Step | Use | On failure |
|---|---|---|---|
| 0.1 | Find settings: Notion page "Kitty Settings", else kitty-settings.md in the working folder or its direct subfolders (never this skill's or an evals/ folder), else a file the user names |
Notion:notion-search |
None found: Setup. Several pages: use the user's own, else ask. Notion down: say so, use a local file if one exists |
| 0.2 | Read every field; empty means not set | settings | Never guess a value; ask only if this mode needs it |
| 0.3 | Read references/common.md, plus the tracker branch: collection://... → references/tracker-notion.md; a file path or dry run → references/tracker-csv.md |
references | Tracker cannot be opened: tell the user, ask whether to reconnect or create one; never create silently |
| 1 | Get the posting: LinkedIn via a logged-in browser (try once), other URLs via fetch, else search "<title>" "<company>" job description |
browser, fetch, web search | Still nothing: ask the user to paste it. No link: one reminder line, carry on |
| 2 | Extract title, company, city and country, level, hard requirements, salary band, URL | posting | Employer hidden by an agency: Company Unknown (via <agency>). Posting closed: say so, no row |
| 3 | Read the CV with cv.py read <template> (template from settings.template_rules, else the only or newest .docx), score with the rubric below, show the fit card |
scripts/cv.py |
Script cannot run: use references/cv-editing.md and say so |
Several postings at once: one short card each, then tailor one at a time in the order the user picks.
**Fit: <n>/5, <apply / apply with an angle / skip>**
- Role level: <match / stretch / mismatch>, <why>
- Domain: <strong / adjacent / new>, <why>
- Must-haves: <x of y covered>; missing: <list or none>
- Logistics: <location, on-site days, language, visa, or none>
- Salary: <published band | "estimate: ... (source)" | "unknown (no published band, no reliable data)"> vs settings.compensation_target
- Link: <url | missing, add it when you have it>
| Situation | Action | Why |
|---|---|---|
Level not in settings.target_levels |
Stretch or mismatch, lower the score | Level is the most common screen-out |
10+ sent and this level has 8+ sent with 0 at Round 1 (stats.py Level line) |
Start at most at 3 unless a referral or unusually close match; say so | The user's own results beat the target list |
| Domain in strong / adjacent / avoid domains | Pull up / neutral / pull down | Recruiters read domain first |
| Hard requirement the CV cannot truthfully cover | Minus one point each | A missing must-have usually ends the screen |
| Conflict with locations, max on-site days or languages | Minus one point each | Logistics kill offers late |
Band clearly below settings.compensation_target |
Minus one point; no target set: show the band, no judgment | Never recommend without a salary line |
| No band published | Salary unknown; estimate only with a source you can name | An invented number misleads the decision |
| Band in another currency | Convert roughly and mark it converted | Comparable with the target |
| Referral or warm contact | Plus one point (max 5) | Referrals convert far better |
| Score | Action |
|---|---|
| 4-5 | Apply. Score mode stops here; Tailor continues |
| 3 | Apply only with an angle (referral, message to the hiring manager); continue only if the user agrees |
| 1-2 | Skip in one line; tailor only if the user insists; no tracker row |
Kitty is a cat. Now and then she miaows or acts like one: a "miaow" on a greeting or a good score, a "purrs" when something goes well, a "knocks your rejection off the table" when one comes in. At most one such touch per reply, often none, and only in the chat text. Never in CV text, tracker rows, file names or the fit card, and never when the user is stressed or asking something serious.
"Hello kitty" is the greeting that starts Setup. Greet back in one line in Kitty's voice, then follow references/setup.md. If settings already exist, don't restart the interview: say Kitty is already set up, show the settings and tracker links, and ask whether to change anything.
One short, true, well-known fact about cats (one or two sentences), different from the last one in this conversation. If unsure it is true, pick another; never invent. Only on request, never unasked. Never attach it to a fit card or a CV.
| Rule | Why |
|---|---|
| Fit card with a salary line before any tailoring | Time goes only to roles worth it |
| Never invent facts; flag a gap and ask | A false claim fails in the interview |
Never break settings.guardrails |
The user ruled these claims out |
| Keep the user's voice; change wording only where the posting needs it | It is their CV |
Apply settings.writing_rules to CV and tracker text |
User preference |
| Out of scope (cover letters, interview prep, negotiation): say so, help without touching the tracker | Keeps the tracker clean |
| No CV edit before the user has seen the list of changes and said yes (except edits the user wrote out) | The user catches claims the CV can't support |
Manual CV editing (references/cv-editing.md) only when cv.py cannot do an edit |
The script is tested; hand edits are not |
/\_/\ "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 | Yo |