Skip to content
Back to skills

Artemis Resume

ASecurity

Artemis's resume skill. Use when the user says 'artemis tailor', 'artemis cover', or asks for a tailored resume or CV, a cover letter, or answers to application-form questions for a specific job. Maps the job description to the user's fact bank (master_cv.md), writes an ATS-safe resume and cover letter, renders DOCX + PDF, and never invents facts.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 9, 2026
ai-agentspythongoapiperformance

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 9, 2026

npx -y skills add ciprianrosca/artemis --skill artemis-resume --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Artemis Resume?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Artemis Resume
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ciprianrosca-artemis-resume/badge)](https://www.skillsdirectory.com/skills/ciprianrosca-artemis-resume)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: artemis-resume
description: "Artemis's resume skill. Use when the user says 'artemis tailor', 'artemis cover', or asks for a tailored resume or CV, a cover letter, or answers to application-form questions for a specific job. Maps the job description to the user's fact bank (master_cv.md), writes an ATS-safe resume and cover letter, renders DOCX + PDF, and never invents facts."
---

# Resume tailoring: one fact bank, one resume per role

CLI paths: `profile/`, `applications/`, `tools/`. Chat: the Project's knowledge files; outputs are
downloadable files.

## The rule

**Every claim on a resume traces to a line in `master_cv.md`.** Tailoring means choosing,
ordering, emphasising, and rephrasing into the job's vocabulary *when the underlying fact is the
same*. It never means adding a number, technology, title, team size or result that isn't in the
fact bank. When the JD asks for something we don't have:
1. If they have it but it isn't recorded, ask, and add it to the fact bank first (with `S3` + date).
2. If they have something adjacent, frame it honestly ("built services on Kafka", not "Kafka expert").
3. If they have nothing close, leave it out and list it as a gap in `fit.md`.

Lines marked `[GAP]` / `[VERIFY]` are never printed as they stand. Lines marked `[CONF]` are
generalised first ("a top-3 European retailer", not the name).

## `artemis tailor <url|id|pasted JD>`

If the user has approved CVs in `profile/cvs/` (CVs they edited by hand and signed off), start
from the latest one: its wording, length and structure are the baseline, and tailoring changes the
Summary, the bullet order and the keyword emphasis.

1. **Get the JD.** CLI: `python tools/linkedin_jobs.py detail <id>` or web fetch the careers page.
   Chat: web fetch, or ask them to paste it. Save the full text to
   `applications/<YYYY-MM-DD>_<company>_<role-slug>/jd.md` with the URL and fetch date at the top.
   Postings disappear, so interview prep works from this saved copy. In chat, include the JD in the
   final download bundle.
2. **Analyse** into `fit.md`:
   - must-haves and nice-to-haves, **quoted**
   - the ATS keyword list: titles, domains, methods, tools, in the JD's own spelling
   - each requirement → fact-bank line (quoted) or **gap**
   - the rubric score (`artemis-job-search`) and the angle: the one-sentence story this resume tells
3. **Write `resume.md`**:
   ```markdown
   # <Full Name>
   <Market title> — <the target's language, e.g. Payments Platforms>
   {{contact}}

   ## Summary
   3–4 lines: level + years + domain match + 2 proof points + what I bring to *this* role.

   ## Experience
   ### <Title> — <Company> | <City (mode)> | <Mon YYYY> – Present
   - 4–6 bullets, ordered by relevance to this JD
   ### <Title> — <Company> | <City> | <Mon YYYY> – <Mon YYYY>
   - 2–4 bullets
   ### Earlier roles
   - <Title> — <Company>, <YYYY>–<YYYY> · <Title> — <Company>, <YYYY>–<YYYY>

   ## Skills
   3–4 grouped lines using the JD's keywords (only ones they can defend in an interview).

   ## Education
   <Degree> — <School>, <Year>
   ```
   **Voice:** first person with the "I" implied, and consistent: "Lead…" for the current role and
   "Led…" for past ones. The Summary may use "I". Never third person ("He leads", "Leads…"), unless
   the user's own CVs use another convention: then follow theirs and note it in `knowledge.json`.
   **Bullet formula:** strong verb + what + scale + outcome, with the number in the first half.
   "Cut p99 latency from 480 ms to 120 ms on the payment API", not "Responsible for performance".
   One or two lines per bullet.
   `{{contact}}` is filled from `contact.json` at render time. In chat, write the contact line in
   directly from `contact.json`.
4. **Write `cover.md`** if the application takes one or it's a direct email: ≤250 words and 3
   paragraphs. Why this company and role (specific and researched); the 2 proof points that map to
   their top needs; a close with availability. Don't restate the resume.
5. **Render.**
   CLI: `python tools/render_resume.py applications/<folder>/resume.md --name <First>_<Last>_CV`
   (and `cover.md --name <First>_<Last>_Cover_Letter`). This gives `.docx` and `.pdf`. Upload the
   DOCX to ATS forms (they parse Word better) and send the PDF to humans. If PyMuPDF is missing, the
   DOCX still renders; export the PDF from Word or Google Docs.
   Chat: create the DOCX (and PDF if available) with the document tools: one column, standard
   headings, no tables, text boxes, icons or photos, and contact details in the body, not a header.
   If file creation isn't available, give clean markdown they can paste into a document.
6. **Check before handing over** (one line per check):
   - [ ] 1 page for under 10 years of relevant history, otherwise 2 pages at most
   - [ ] every must-have keyword they truly have appears at least once, spelled as in the JD
   - [ ] every number traces to the fact bank
   - [ ] no `[GAP]`, `[VERIFY]`, `[CONF]`, `{{` or `**` left in the output
   - [ ] voice is consistent (no stray third person)
   - [ ] no non-public customer names, internal codenames or incident details
   - [ ] reverse-chronological; dates as `Mon YYYY`; tense consistent
   - [ ] the file name the recruiter sees has no job or company name in it (`First_Last_CV.docx`)
7. **Pipeline:** the role is `shortlisted` until the **user** confirms they applied.

## `artemis cover <url|id>`
Run steps 1, 2 and 4 of `tailor`, then render.

## `artemis answers <url>`: application-form questions
Draft answers to the form's questions ("Why us?", "Describe a hard technical problem"...) from
the fact bank and story bank, within each field's character limit, as text in `answers.md`. The
user pastes and submits them. Artemis never fills in or submits the form.

## Anti-patterns
- Keyword stuffing: a skill they can't talk about for 5 minutes doesn't go on the resume.
- One generic resume sent everywhere. The Summary and the order of the first 3 bullets change
  for every role.
- Two-column templates, tables, icons, photos, or contact details in headers and footers. ATS
  parsers drop them.
- Inflating titles. Use the title they actually held; the Summary can describe the real scope.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.