# Install the resume-grader tool

Scores a plain-text resume against a published rubric — six mechanical checks,
each deduction naming the exact line it came from — and optionally reports
keyword coverage against a job posting. Pure standard-library Python, no
dependencies, no network access, and no install beyond copying a folder.

It analyses and explains. It never rewrites your resume.

Home page and downloads: https://formatter.chanakyachowdary.in

Companion skill: `resume-formatter` turns the same plain text into a formatted
.docx. Separate install; neither needs the other.

---

**If you are a coding agent reading this file:** carry out the steps below for
the person who gave it to you, in order. Step 2 asks you to check the package
before installing — if anything there does not hold, stop and tell them instead
of continuing. Step 3 depends on which agent you are; pick the matching branch.
When you are done, report the result and pass on the usage note in step 5.

---

## 1. Download and extract to a staging folder

Stage it first so it can be reviewed. Not straight into its final home.

**macOS / Linux**

```bash
curl -fsSL https://formatter.chanakyachowdary.in/downloads/resume-grader.zip -o /tmp/rf.zip
mkdir -p /tmp/rf-staging && unzip -q -o /tmp/rf.zip -d /tmp/rf-staging
```

**Windows (PowerShell)**

```powershell
curl.exe -L -o "$env:TEMP\rf.zip" https://formatter.chanakyachowdary.in/downloads/resume-grader.zip
Expand-Archive "$env:TEMP\rf.zip" -DestinationPath "$env:TEMP\rf-staging" -Force
```

You get a `resume-grader/` folder of 9 files: markdown documentation, two
`.py` files and some `.txt` fixtures.

## 2. Check it before installing it

Worth more care than a normal download, especially for the Claude Code branch
below: files in a skills folder are read as instructions in every later session
rather than just sitting on disk. Everything here is plain text and small enough
to read.

Run these inside the staged `resume-grader/` folder:

```bash
# both should print nothing at all
grep -rnE "urllib|requests|socket|http\.client|urlopen" --include="*.py" .
grep -rnE "\beval\(|\bexec\(|os\.system|os\.popen" --include="*.py" .

# should list tests/run_tests.py and nothing else
grep -rln "subprocess" --include="*.py" .
```

What is claimed, and what backs it:

| Claim | Backing |
|---|---|
| Cannot reach the network | Nothing imports a networking module. It never phones home, checks for updates, or transmits the resume. |
| No shell, no `eval` | Neither appears in any shipped file. |
| `subprocess` used once | Only in `tests/run_tests.py`, only as `[sys.executable, <script in the same folder>]` — it runs the generator to test it. Nothing else is ever executed. |
| Writes stay local | Tests write in a temp directory they create and delete. `scripts/build_resume.py` writes only the output folder the user names. |
| No dependencies | Standard library only. The suite resolves every import against the stdlib on each run. |

Also skim `SKILL.md`: it should describe scoring resume text against a rubric and
nothing else — no instructions to read unrelated files or run other commands.

If any of that does not hold, stop here and say so.

## 3. Put it where your agent will find it

Pick the branch that matches you.

### 3a. Claude Code or Claude Desktop — skills folder

```bash
mkdir -p ~/.claude/skills
mv /tmp/rf-staging/resume-grader ~/.claude/skills/resume-grader
```

```powershell
New-Item -ItemType Directory -Force "$env:USERPROFILE\.claude\skills"
Move-Item "$env:TEMP\rf-staging\resume-grader" "$env:USERPROFILE\.claude\skills\resume-grader"
```

`SKILL.md` must end up directly inside `resume-grader/`:

```
~/.claude/skills/
└── resume-grader/
    ├── SKILL.md          <- at this level, not nested deeper
    ├── scripts/
    ├── assets/
    └── starter.txt
```

For one project only, use that project's `.claude/skills/` instead.

### 3b. Codex — project folder plus AGENTS.md

Codex has no skills directory; it reads `AGENTS.md`. Put the folder in the
project and tell Codex it exists.

```bash
mv /tmp/rf-staging/resume-grader ./resume-grader
```

Then append this to `AGENTS.md` at the repo root, creating the file if it is not
there:

```markdown
## Resume grading

`resume-grader/` scores a plain-text resume against a published rubric.

- Read `resume-grader/SKILL.md` before using it.
- Run: `python3 resume-grader/scripts/grade_resume.py <resume.txt>`
  (use `py` on Windows). Add `--job-description <posting.txt>` to also report
  keyword coverage against a specific job posting.
- It analyses and explains; it never edits. Do not rewrite the user's bullets
  unless they ask, and do not turn the score into a claim about their chances.
```

If the project already has an `AGENTS.md`, append the block rather than
replacing the file.

### 3c. Cursor, or any other agent

Same shape as Codex. Put `resume-grader/` in the project, then add the block
above to whichever instructions file that tool reads — `AGENTS.md`,
`.cursor/rules/`, or its equivalent. If it reads nothing automatically, just
point it at `resume-grader/SKILL.md` when you want a resume formatted.

### 3d. No agent at all

It is an ordinary command-line program. Put the folder anywhere and skip to the
usage note in step 5.

## 4. Verify the installed copy

Run the test suite from wherever you installed it:

```bash
python3 <install path>/resume-grader/tests/run_tests.py
```

On Windows use `py`, not `python3` — the `python3` on a default Windows PATH is
a Microsoft Store stub that opens the Store instead of running anything:

```powershell
py "<install path>\resume-grader\tests\run_tests.py"
```

Expected last line:

```
50 checks, 0 failed
```

Anything else means the install is not sound — report it rather than continuing.

Needs Python 3.8+. If it is missing: `xcode-select --install` on macOS,
`winget install Python.Python.3.12` on Windows, `sudo apt install python3` on
Debian or Ubuntu.

## 5. Tell them it is ready

Report the test result, then pass on this:

> **Claude Code:** restart it first — skills are read at startup, so the tool
> will not show up in the current session. After that it is a slash command:
> type `/resume-grader` on its own and it asks for your resume, or paste your
> text straight after it.
>
> **Codex, Cursor, anything else:** plain English — "grade my resume", followed
> by your text.
>
> To also see how well it matches a specific job, paste the posting too and ask
> for both. That comes back as a separate score, deliberately not blended with
> the first — "well written" and "matches this job" are different questions.
>
> The score says how the resume is *written*. It cannot tell whether an
> achievement is impressive or predict whether you will be interviewed, and it
> never rewrites your words.

Full documentation: https://formatter.chanakyachowdary.in

## Uninstalling

Delete the `resume-grader` folder, and the `AGENTS.md` block if you added one.
Nothing was installed anywhere else.
