Skip to content

About

A job search toolkit for coding agents. Decide whether to apply, research the company, tailor the CV, prep the interview. Your files, your machine, no API keys.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Phoenix Skills

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.

What it does

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.

What you need

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.

Install

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.sh

Start

Make a folder. Anywhere. Your own git repository is a good place.

mkdir ~/job-search && cd ~/job-search

Add three files to profile/. Ask your agent to do it, or write them yourself.

  • resume.json is 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.md is the private one. See below.
  • tone.md says how anything written in your name should sound. Everything else you want done a particular way goes in preferences.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.

The private file

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.

The skills

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
Loading

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.

What actually runs

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.

Getting a PDF

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.

Keeping track

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.

See it filled in

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.

What it will not do

  • 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.

Where it came from

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.

Licence

MIT. See LICENSE. Use it however you like.

About

A job search toolkit for coding agents. Decide whether to apply, research the company, tailor the CV, prep the interview. Your files, your machine, no API keys.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages