A job search toolkit for coding agents. Works with Claude Code, Codex, Cursor, and anything else that reads skill files.
Your CV, your notes and your applications live in a folder on your computer. The agent reads them and helps you apply.
One application eats an evening. You rewrite the CV, write the cover letter, read up on the company, answer the screening questions, then try to remember what you told the recruiter last week.
Twelve skills, in two groups.
Before you apply to anything, they help you get your own material in order:
- Interview you for honest context. Fifteen minutes on what you actually want, what you will not accept, and what you are not good at yet. Every other skill reads the result.
- Work out what to aim for. Sort the jobs you have been eyeing into a primary and a secondary track, and name the gap between where you are and where you want to be.
- Roast your CV. A blunt, line-by-line read the way a sceptical recruiter would do it, with a list of what to fix first and what not to touch.
- Build the base CV, iteratively, keeping a log of what changed and what you left off on purpose.
- Write your LinkedIn profile so it points recruiters at the same thing your CV does.
Then, per application, they share the evening's work:
- Decide whether to apply. An honest read of the job, the company, and how a recruiter will see you. It will tell you to skip one.
- Research the company before you spend time on it: funding, reviews, salary ranges, red flags, and whether they hold a UK visa sponsor licence.
- Rewrite your CV for the job. It reorders, cuts and rephrases what you have already done. It will not add anything you have not.
- Write the cover letter and the screening answers, using your own numbers.
- Prepare you for the interview. Twenty questions, including the ones you are dreading, and the answers worth having ready.
- Draft replies to recruiters that know which job they are about, what stage you are at, and what you already agreed to.
- Tell you what you have forgotten. What is due, what is booked, and who has gone quiet, read off your own notes.
Everything is saved as plain Markdown and JSON in your folder. You can read it without any of this installed, edit it by hand, and keep it in git if you like.
An agent that reads SKILL.md files, and a folder.
No API keys. No account. No server. Nothing runs in the background. Your files stay on your machine, and nothing is sent anywhere unless you ask for a web search.
Copy the skill folders where your agent looks for them.
git clone https://github.com/arashbehmand/phoenix-skills.git
cd phoenix-skills
# Claude Code
mkdir -p ~/.claude/skills && cp -R skills/* ~/.claude/skills/
# Codex
mkdir -p ~/.codex/skills && cp -R skills/* ~/.codex/skills/
# other agents often read this one
mkdir -p ~/.agents/skills && cp -R skills/* ~/.agents/skills/If yours does none of these, point it at the skills/ folder and tell it to read SKILL.md
when it needs to. There is nothing inside them tied to a particular tool.
Check the scripts run on your machine:
./examples/fixtures/verify.shMake a folder. Anywhere. Your own git repository is a good place.
mkdir ~/job-search && cd ~/job-searchAdd three files to profile/. Ask your agent to do it, or write them yourself.
resume.jsonis your CV in JSON Resume format. If you only have a PDF or a Word file, hand it over and ask for it to be converted.honest-context.mdis the private one. See below.tone.mdsays how anything written in your name should sound. Everything else you want done a particular way goes inpreferences.md. Both optional, both worth ten minutes.
Save a job ad to applications/<company>-<role>/job.md, or paste the link and ask for it
to be saved.
Then just ask. In your own words:
Interview me for my honest context.
Roast my CV, then help me fix it.
What kinds of roles should I be aiming at?
Here is my LinkedIn saved as a PDF. Rewrite the headline and the About.
Should I apply to this?
Research them before I answer this recruiter.
Tailor my CV and write the cover letter.
I have an interview on Friday. Prep me.
Priya just messaged me. Here is what she said. Draft a reply.
You never name a skill. The agent picks the right one.
profile/honest-context.md is where you write the things you would not put in a cover
letter. What you actually want. What you will not accept. Your salary floor. Your visa
situation. What you are genuinely not good at yet.
It never goes to an employer. Without it the agent has to guess at your situation, and it usually guesses something cheerful and wrong.
The best way to write it is not to write it. Say "interview me for my honest context" and answer the questions — it takes about fifteen minutes, and being asked "what would make you turn down an offer you otherwise wanted?" gets further than staring at an empty file.
Otherwise: badly and quickly beats not at all. Half a page is enough to start, and there is a filled-in example if you want a shape to copy.
The skills run without it and will tell you the answer is weaker for it.
| Skill | When it runs |
|---|---|
job-search-workspace |
Setting up the folder, importing a CV, exporting one |
interviewing-for-context |
Before any job ad: recording what you want, will not accept, and are not good at yet |
aligning-career-targets |
You are not sure what to apply for; sorting roles into a primary and secondary track |
roasting-a-resume |
You want your CV or LinkedIn torn apart before you send it anywhere |
building-a-resume |
Improving the base CV itself, not tailoring it to a posting |
writing-a-linkedin-profile |
Writing or auditing your own headline, About and experience copy |
assessing-job-fit |
You have a job ad and want a straight answer on whether to apply |
tailoring-applications |
You are applying: CV, cover letter, screening answers |
researching-companies |
Before applying, before an interview, or before accepting |
preparing-for-interviews |
An interview is booked |
drafting-outreach-replies |
A recruiter emailed or messaged you |
reviewing-the-search |
You want to know what needs attention across all of it |
And roughly in the order they help:
flowchart TD
WS["job-search-workspace<br>the folder, and your CV in it"]
subgraph A ["Once, to get your own material straight"]
direction TB
IC["interviewing-for-context<br>honest-context.md"]
ACT["aligning-career-targets<br>career-plan.md"]
RR["roasting-a-resume<br>a critique, nothing saved"]
BR["building-a-resume<br>resume.json"]
LI["writing-a-linkedin-profile<br>linkedin.md"]
IC --> ACT --> RR --> BR --> LI
BR -.->|"roast it again"| RR
end
subgraph B ["Per job ad, the evening's work"]
direction TB
AJF["assessing-job-fit<br>fit.md, and it will tell you to skip one"]
RC["researching-companies<br>research/company.md"]
TA["tailoring-applications<br>CV, cover letter, screening answers"]
PI["preparing-for-interviews<br>interview-prep.md"]
AJF --> RC --> TA --> PI
end
subgraph C ["Whenever it comes up"]
direction TB
DOR["drafting-outreach-replies<br>a recruiter messaged you"]
RVW["reviewing-the-search<br>what needs attention this week"]
end
WS --> IC
LI --> AJF
That is the happy path, not a rule. Most people start by pasting in a job ad, and that works fine.
The order buys you one thing: assessing-job-fit writes the file that tailoring and
interview prep both read, so you find out a job is wrong before you spend the evening on it
rather than after.
Nearly all of this is the agent reading Markdown and writing Markdown. Four small Python scripts do the parts you should not let a language model eyeball. Standard library only, nothing to install.
| Script | Why it exists |
|---|---|
validate_resume.py |
Checks and repairs resume.json. A wrong field name does not raise an error, it silently drops a whole section, and nobody notices until an employer does. |
to_rxresume.py |
Turns your CV into a Reactive Resume import file, and splits a long work history across two pages so the last job does not get cut off. |
charcount.py |
Counts your LinkedIn headline and About against LinkedIn's limits, and flags a count that went stale when you edited the words underneath it. |
uk_visa_sponsor_lookup.py |
Searches the Home Office register of licensed sponsors. It shows you the rows that might be your company and lets you pick. The fuzzy-matching version it replaced once scored OpenAI against a London company called Morena at 66.7, and then wrote down that OpenAI sponsors visas. |
Only the last one touches the network, and only to fetch a public CSV from gov.uk, which it then caches for a week.
This does not render PDFs. Ask for the Reactive Resume export, import the file at rxresu.me, adjust it on screen, and download the PDF from there. The converter handles the field mapping, and it splits a long work history across two pages so the last job does not get cut off.
You can also ask for a Markdown version to paste into an email.
One file, applications.md, with one row per application and one word for the stage.
It is there for the moment a message arrives naming only a company. Search the table, open the folder it points to, and the job ad, the fit analysis and the earlier conversation are all sitting in it.
What is due lives somewhere else: each application's notes.md keeps a dated timeline —
including things that have not happened yet, like Friday's interview — and a Next list.
Ask "what needs attention this week" and you get it read back off those, sorted, with
whatever has gone quiet. Nothing runs in the background and there is no second file holding
a copy of your status.
examples/workspace/ is a complete example: one fictional candidate,
three applications at three stages, and a company research file. It is the quickest way to
see what you actually get.
- It does not find jobs. You bring the ad.
- It does not apply or send anything for you. You read every draft first.
- It will not put experience on your CV that you do not have. Push it and it will still refuse, and say plainly in the cover letter what you have not done.
Phoenix was a job application assistant I built in 2024. Six repositories, a web app, a database, a message queue, a scraper fleet and a PDF renderer. Reading it back, most of that was scaffolding. The value sat in nine prompts and a short list of things I only learned after something broke in production.
Agents handle the rest on their own now, so this is the part worth keeping. A few things that cost me real time are baked in: the CV field names that quietly produce an empty export when you get them wrong, the two fields that stayed swapped for weeks because a code comment said they should be, and the rule that stops the fourth edit undoing the fix from the second.
MIT. See LICENSE. Use it however you like.