From savage-resume
The 8-stage pipeline driver for the savage-resume plugin. Takes a resume file path or portfolio URL, runs ingest → claim extraction → parallel specialists → synthesis → adversary → revision → self-audit → emit, and produces the final markdown report. Invoked by the /resume slash command.
How this skill is triggered — by the user, by Claude, or both
Slash command
/savage-resume:resume-orchestratorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are orchestrating a savage-resume run on a candidate's resume, CV, or portfolio.
You are orchestrating a savage-resume run on a candidate's resume, CV, or portfolio.
Announce at start: "Using resume-orchestrator to run the 8-stage savage-resume pipeline on <target>."
<target> was provided. If missing → print error: /resume requires a local path or URL argument and stop.<target>:
http:// or https:// → treat as URL mode.FILE mode. Verify the path exists and is a file (not a directory). If it's a directory, print error: <target> is a directory; pass a single resume file and stop. If it does not exist, print error: <target> does not exist and stop.FILE mode, verify the extension is one of .pdf, .md, .markdown, .txt, .docx, .html. Unknown extensions → print error: unsupported file type '<ext>'; supported: pdf, md, txt, docx, html and stop. (.docx may require a best-effort text extraction; if unreadable, stage 1 notes it and the pipeline continues on whatever was extractable.)$TS = current timestamp as YYYY-MM-DD-HHMM (local time).$SUBJECT:
FILE mode → basename of the file, stripped of extension (e.g. jane-doe-resume).URL mode → hostname + first path segment, sanitized to ascii + hyphens (e.g. janedoe-com-portfolio).$BASE_DIR:
FILE mode → parent directory of the file, absolute.URL mode → current working directory, absolute.$BASE_DIR/.resume-review/runs/$TS/scratchpads/$BASE_DIR/.resume-review/$TS-$SUBJECT.md.Read the target material:
FILE mode:
.md / .markdown / .txt / .html → Read tool..pdf → Read tool (handles PDFs up to 20 pages per call; if larger, read in page ranges and concatenate)..docx → best-effort: attempt Read; if binary garbage, state the file could not be fully parsed and proceed with whatever was extractable. Record the limitation in the ingest summary.URL mode: use WebFetch with a prompt asking for the full visible text content of the page, plus any linked "resume", "CV", "about", or "projects" subpages that are on the same origin and look load-bearing (max 3 extra pages). Record each fetched URL in the ingest summary.Write a neutral summary to $BASE_DIR/.resume-review/runs/$TS/ingest-summary.md. The summary states, in the subject's own framing:
Do not interpret, rank, or critique at this stage. Neutral summary only.
If the target is essentially empty (no substantive text), the summary says so explicitly and the pipeline proceeds to a trivial final verdict of "Nothing to evaluate."
Dispatch the claim-extractor subagent with the task:
Read
$BASE_DIR/.resume-review/runs/$TS/ingest-summary.mdand produce a structured claim list at$BASE_DIR/.resume-review/runs/$TS/claims.mdconforming to the schema inplugin/skills/claim-extraction/SKILL.md. Also readplugin/skills/resume-rubric/SKILL.mdfirst.
Wait for completion signal claims-extracted: <path>.
Dispatch all five in one batch (parallel tool calls, single message):
market-demand-hunter → writes $BASE_DIR/.resume-review/runs/$TS/scratchpads/market-demand.mdclaim-auditor → writes $BASE_DIR/.resume-review/runs/$TS/scratchpads/claim-audit.mdrejection-mode-hunter → writes $BASE_DIR/.resume-review/runs/$TS/scratchpads/rejection-modes.mdrelevance-checker → writes $BASE_DIR/.resume-review/runs/$TS/scratchpads/relevance.mdpositioning-critic → writes $BASE_DIR/.resume-review/runs/$TS/scratchpads/positioning-critique.mdEach gets the same core prompt: "Run your agent on the subject at $BASE_DIR/.resume-review/runs/$TS/. Your inputs are the ingest-summary and claims there. Your output goes to the path named in your agent file. Read plugin/skills/resume-rubric/SKILL.md before producing output."
Wait for all five completion signals.
Dispatch synthesizer with stage=4:
Read all inputs at
$BASE_DIR/.resume-review/runs/$TS/(ingest-summary, claims, all five scratchpads). Followplugin/skills/savage-synthesis/SKILL.mdStage 4 rules. Write draft to$BASE_DIR/.resume-review/runs/$TS/draft-v1.md.
Wait for completion.
Dispatch adversary:
Read
$BASE_DIR/.resume-review/runs/$TS/draft-v1.mdand all scratchpads at$BASE_DIR/.resume-review/runs/$TS/scratchpads/. Produce kill-list at$BASE_DIR/.resume-review/runs/$TS/kill-list.md.
Wait for completion.
Dispatch synthesizer with stage=6:
Read
draft-v1.mdandkill-list.mdat$BASE_DIR/.resume-review/runs/$TS/. Follow Stage 6 rules in savage-synthesis. Writedraft-v2.md.
Wait for completion.
Dispatch self-auditor:
Audit
$BASE_DIR/.resume-review/runs/$TS/draft-v2.mdagainstkill-list.md. Write audit to$BASE_DIR/.resume-review/runs/$TS/audit-v1.md.
Wait for completion signal audit-result: <PASS|FAIL>.
draft-v2.md to final. Go to Stage 8.stage=6 again, but this time reading draft-v2.md + audit-v1.md as the kill-list, producing draft-v3.md. Then dispatch self-auditor again producing audit-v2.md.
draft-v3.md.draft-v3.md anyway, but prepend a ## Remaining Flaws section at the top of the final report copying the Violations list from audit-v2.md.Copy the promoted draft to $BASE_DIR/.resume-review/$TS-$SUBJECT.md. If Remaining Flaws were prepended, do that during the copy.
Print a terminal summary:
============================================================
Savage resume review complete: <SUBJECT>
============================================================
Verdict:
<paste the Verdict section content>
Top 3 red flags:
<first 3 bullets from Red flags>
Full report: <absolute path to final report>
============================================================
$BASE_DIR/.resume-review/runs/$TS/run.log, and continue if the pipeline can proceed without that input (the synthesizer treats missing scratchpads as "unavailable — this category could not be assessed"). If the synthesizer itself fails, abort and print the run directory path so the user can inspect scratchpads.npx claudepluginhub alibassam/savage-resume --plugin savage-resumeCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.