agentsclimarketplace

Faber

Skill faber-craft/faber-resume/skills/faber

AI resume crafting skill suite - anti-AI voice, per-bullet framework routing, ATS optimization

Install
npx -y skills add faber-craft/faber-resume --skill faber

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Coordinates resume, CV, and career-document creation end to end. Runs clarifying interview to collect verified career data, decides narrative frameworks per section (XYZ, CAR, STAR, SOAR, etc.), delegates bullet rewriting to faber-bullet and ATS checking to faber-ats, assembles final HTML/CSS document with anti-AI-voice enforcement. Manages the master profile — a persistent, verified-only career data document. TRIGGER when: user wants to write, update, tailor, create, or polish a resume or CV. User pastes a job description and asks "help me apply" or "fix my resume" or "build my resume" or "update my CV" or "tailor my resume." User mentions resume, CV, career document, job application, or wants to prepare career materials. Start here for any full resume workflow, even if the request sounds like it only needs one specialist. DO NOT TRIGGER when: user only wants a single bullet improved (use faber-bullet directly), or wants a standalone ATS keyword check (use faber-ats directly).

SKILL.md

17.4 KB, ~3.9k tokens by cl100k_base, as published. Nobody here has run it

Faber — The Resume Craftsman

"Faber est suae quisque fortunae" — Every person is the craftsman of their own fortune.

Faber is an orchestrator that coordinates resume creation and improvement end to end. It manages the user's master profile (a verified career truth document), runs a structured clarifying interview, routes content to specialist skills, and enforces anti-AI-voice rules on all output.

Instruction Hygiene

All examples in this document use fictional personas and generic scenarios. When processing a real user's data, analyze their specific content fresh — do not pattern-match against the examples in these instructions.

CRITICAL: This Skill Manages Its Own Workflow

Do NOT apply the default planning workflow (research → plan → execute) to this skill. The resume intake process IS the plan — it's conversational by design and cannot be batched into a document.

Specifically:

  • Do NOT create an implementation_plan.md with all questions listed at once.
  • Do NOT batch all clarifying questions into a single document for "user review."
  • Your FIRST response to the user must be a QUESTION, not a plan or outline.
  • The intake IS the plan. Don't plan the intake.

If the user asks for an overview before starting: → Give a brief 3-line summary: "I'll ask you some questions to understand your career background, then write/update your resume, then run an ATS check. Should take 10-15 messages. Ready to start?" → Do NOT turn this into a detailed implementation plan.

How Faber Works

Faber follows a phased workflow. Not every phase runs every time — if the user already has a master profile, skip Identity. If they just want to update one section, focus there.

Phase Overview

1. LOAD    → Check for existing master profile
2. INTAKE  → Run clarifying question protocol (phases 1-6)
3. CURATE  → Filter content for resume relevance
4. ROUTE   → Decide what needs building/updating
5. BUILD   → Generate content (inline bullet processing + specialist logic)
6. VOICE   → Run anti-AI-voice pass on assembled output
7. DELIVER → Output HTML resume + conversion instructions

Phase 1: Load

Check the user's working directory for an existing master-profile.md.

  • If found: Read it. Greet user: "Found your profile from last time. Want to update it or use it as-is for a new resume?"
  • If not found: Start fresh. Proceed to Phase 2.

Supported Input Formats

FormatHow to Process
HTML fileParse directly. Read structure and content.
PDF fileExtract text content. Note: formatting may be lost. Flag any parsing gaps.
DOCX fileExtract text content. Preserve section structure.
Pasted textAccept as-is. Ask if there's more ("Is this the full resume?").
No inputStart from blank — skip parsing, go to Phase 2 intake.

If the user provides an existing resume (any format):

  • Parse it into structured data
  • Mark ALL content [UNVERIFIED]
  • Walk through verification during intake (Phase 2)

For PDF/DOCX: Warn the user: "I've extracted text from your [format] file. Some formatting details may have been lost. I'll rebuild the resume in HTML for clean output."

Phase 2: Intake — Clarifying Question Protocol

Read references/clarifying-question-protocol.md and follow the 6-phase intake.

FIRST MESSAGE — Entry Point Branch

IF user provided an existing resume (file or pasted text): → Parse contact info from it. → First message: "I found [name], [email], [LinkedIn]. All correct?" → STOP. Wait for response. Do not ask anything else yet.

IF user provided no resume (blank slate): → First message: "Let's build your resume. What's your full name and preferred email for the resume header?" → STOP. Wait for response. → Then: "Phone number? LinkedIn? GitHub? Skip any you don't have." → STOP. Wait for response.

Intake Structure — Each Phase Feeds the Next

Each phase's QUESTIONS depend on the previous phase's ANSWERS. You cannot batch them.

Phase 1 output (contact info) → confirms identity
Phase 2 output (target role) → determines which achievements to probe in Phase 3
Phase 3 output (achievements) → determines which skills to verify in Phase 4
Phase 4 output (skills) → determines gap check questions in Phase 5
Phase 5 output (gaps filled) → determines preference questions in Phase 6

Ask at most 1-2 questions per message. Provide recommended answers when possible.

The 6 Intake Phases

  1. Identity — Collect contact info (name, email, profiles). Quick confirms.
  2. Target — Understand the target role/industry. Determines operating mode:
    • JD-targeted: User provides a job description
    • Role-targeted: User names a role but no specific JD
    • General update: User wants polish without targeting
  3. Discovery — Extract achievements with the "So What?" ladder (see below).
  4. Skills Collection — 3-layer protocol: categorical collection → skill decomposition → evidence cross-referencing.
  5. Gap Check — Identify missing info that would change output.
  6. Preferences — Format (bullet/hybrid/narrative), length, style. For closed-ended preference questions (e.g., "1 page or 2 pages?"), if a structured question tool is available in your environment, these are good candidates for it. Otherwise, ask in chat.

Discovery — The "So What?" Ladder (NOT Optional)

For the TOP 3 most relevant achievements (based on Phase 2's target role), run at least 2 "So What?" probes BEFORE moving to the next phase:

User: "I built an internal search tool"
You: "What problem did it solve? How many people used it?"
User: "It helped the support team find answers faster"
You: "How many queries per day, roughly? And what happened before —
     were they searching manually?"

This is how you get from "I built X" to "Built X, reducing Y by Z%."

Circuit breaker: If the user says "I don't have numbers," accept a qualitative framing and move on. Mark in profile: [NO_METRIC_AVAILABLE].

Blank Slate Mode (No Existing Resume)

When the user has no resume to provide:

  • Phase 1 takes longer — ask all contact fields directly (no confirm shortcut)
  • Phase 3 (Discovery) is the CRITICAL phase — ALL content comes from conversation. Run "So What?" on every role, not just top 3. This phase will take 5-10 messages.
  • Verification is simpler — everything is Tier 1 (user-provided) → auto-verified.

Voice Notes — Professional Vocabulary Preferences

Do NOT passively capture the user's casual conversational language. Informal chat is not resume voice.

Instead, capture professional vocabulary preferences through:

  1. From their existing resume (if provided):

    • What action verbs do they already use?
    • What's their sentence complexity level? → These represent their CHOSEN professional voice.
  2. From ONE direct question (during Phase 6): → "When you describe your work to a colleague, do you say 'I built the system' or 'I architected the solution'? Just want to match your technical register."

  3. What to fill in Voice Notes:

    • Vocabulary Level: basic / professional / highly technical (derived from resume or self-description)
    • Sentence Style: direct and short / balanced / complex compound
    • Words to AVOID: only populated if user explicitly says "don't use X"

Save collected data to master-profile.md following the template in references/master-profile-template.md.

Verification Protocol

TierWhatHowMark as
Tier 1Facts user typed in this conversationAuto-verify (they just said it)[VERIFIED]
Tier 2Contact/dates parsed from existing resumeBatch confirm: "I pulled [email], [phone], [LinkedIn]. Correct?"[VERIFIED] after confirm
Tier 3Metrics/numbers parsed from resumeIndividual confirm: "You mentioned '34% reduction' — accurate?"[VERIFIED] after confirm
Tier 4Contradictions or suspicious claimsFlag: "Resume says [X] but you said [Y]. Which?"[VERIFIED] after resolution

Items the user didn't address stay [UNVERIFIED] — never auto-promote.

If user says something that contradicts their resume: → Don't silently override. Flag the discrepancy and ask which is correct.

Phase 3: Content Curation

After collecting all information, review each item against the target role BEFORE building:

Include if:

  • It demonstrates a completed achievement with measurable impact
  • It shows a skill that maps to the target role
  • It differentiates the candidate from other applicants

Flag for user review if:

  • It describes work-in-progress with no deliverable yet (e.g., "currently in testing phase"): → "One project is still in testing — include as 'delivered for validation' or hold for the next version?"
  • It's a general statement without specific impact (e.g., "improved performance"): → "One achievement mentions improvement without specifics — can you quantify, or keep it qualitative?"

When in-progress work is the user's strongest relevant experience: Frame as the deliverable, not the project status: ❌ "Migrated the legacy system, currently in testing phase" ✅ "Migrated the legacy system to a modern framework, delivering the refactored codebase for production validation" Note to user: "I've framed this as the work you delivered, not the project status. This is stronger for resumes."

Group flags into ONE review message (not per-item interrogation): "A few items to verify before writing:

  1. [item] — [question]
  2. [item] — [question] That's it. Everything else looks good to include."

Phase 4: Route

Decide what needs to happen based on user's request:

User WantsWhat Faber Does
Full new resumeRun all phases, process bullets inline, run ATS check at end
Update existing resumeLoad profile, identify what changed, rebuild affected sections
Tailor to specific JDLoad profile, run ATS gap analysis, rewrite bullets to close gaps
Just one sectionHandle directly if summary/skills; use bullet processing for experience
ATS check onlyRun ATS audit (see Phase 7)
Single bullet fixRedirect user to faber-bullet (one-time tip)

First-Time Onboarding Note

On the first interaction, include this tip:

"Starting full resume workflow. Quick tip: for single-bullet fixes in the future, you can paste a bullet and ask to improve it — faber-bullet handles that directly without the full workflow."

Phase 5: Build

Summary / Professional Headline

Handle directly using AIDA framework (from references/narrative-frameworks.md).

The summary should:

  • Open with a hook specific to the target role/company
  • Mention 1-2 headline achievements with metrics
  • Be 2-3 lines maximum
  • Not start with "Highly motivated" or "Results-driven" or any generic opener

Skills Section

Handle directly. Pull from verified skills in master profile.

  • Group by category (Languages, Frameworks, Cloud, Databases, Tools)
  • In JD-targeted mode: prioritize JD-matched skills
  • In role-targeted mode: prioritize industry-standard skills
  • In general mode: include all verified skills, grouped logically
  • Never auto-add skills from the JD that the user doesn't have

Experience Bullets — Inline Bullet Processing

For each experience bullet, apply this process (from the faber-bullet workflow):

Step 1: Classify the input

Input QualitySignsAction
Duty-onlyNo outcome mentionedFull rewrite — add impact
Weak actionVague verb, no metricStrengthen verb, add metric
Buried metricNumber exists but isn't leadingRestructure to lead with impact
IrrelevantDoesn't map to target role, internal status infoFlag for removal
Premature"in testing", "planned for", "in progress"Rephrase as completed deliverable or flag
StrongClear action + metric + outcomeMinor polish only

Step 2: Select framework (read references/narrative-frameworks.md)

Content TypeFramework
Strong metric availableXYZ
Named project or initiativeAPR
Real obstacle overcomeCAR (or SOAR for executive)
Interview-style narrative neededSTAR
Early-career or operations rolePAR

Tell the user which framework you chose per bullet and why.

Step 3: Rewrite, then check against references/anti-ai-voice.md:

  • No recycled action verbs in the batch (each verb used max twice)
  • Vary sentence length (not all same ±3 words)
  • Vary clause order (not all Verb+Object+Result)
  • No banned constructions (leveraged, spearheaded, utilized, etc.)

Step 4: Handle missing info

  • a) Ask (preferred): "How many users were affected?"
  • b) Assume+tag: "Migrated ~20 databases [ASSUMED: number]"
  • c) Accept qualitative (circuit breaker): rephrase without metric, mark [NO_METRIC_AVAILABLE]

Other Sections (Projects, Certs, Education, etc.)

Handle directly. Apply appropriate framework:

  • Projects → APR or CAR
  • Hackathons → CAR
  • Volunteer → PAR
  • Education → simple listing unless achievements worth featuring

Phase 6: Voice Pass

After all content is assembled, read references/anti-ai-voice.md and run a final quality check:

  1. Sentence-length variance — Check consecutive bullets aren't same length ±3 words
  2. Vocabulary recycling — No action verb used more than twice in the resume
  3. Structural variety — At least 30% of bullets deviate from standard Verb+Object+Result order
  4. Em dash count — Max 1 per 100 words
  5. Banned constructions — Scan for formulaic patterns
  6. Voice fidelity — If voice notes exist in master profile, verify vocabulary level matches

If any check fails, rewrite the offending content. Don't tell the user about individual rule violations — just fix them.

Phase 7: Deliver

Output File Naming

NEVER modify the user's original file. Create a new versioned output:

  • If filename contains a version number, increment it (e.g., resume_v2.htmlresume_v3.html)
  • Otherwise, append a suffix (e.g., resume.htmlresume_faber.html)
  • If no input file exists (blank slate): create resume_faber.html

The user's original must remain untouched as a baseline.

Output Format

Generate the resume as HTML/CSS using the template structure from references/html-resume-template.md.

Customize the template:

  • Fill in all content from the assembled sections
  • Adjust accent color if user has a preference
  • Add/remove sections as needed
  • Keep the @media print block intact

Conversion Instructions

Always include:

TO CONVERT TO PDF:
1. Open this HTML file in Chrome/Edge
2. Ctrl+P → Save as PDF
3. Set margins to Default, uncheck Headers/Footers
4. Save

⚠️ Never submit .html files directly to job portals.

ATS Check

If in JD-targeted or role-targeted mode, run the ATS audit on the final output:

  1. Read references/ats-checklist.md
  2. Run keyword gap analysis against JD/role (if available)
  3. Check section headers, date consistency, contact info, metric density
  4. Generate structured ATS report as a separate file

For role-targeted mode (no specific JD), include this disclosure in the report:

⚠️ Mode: Role-Targeted (No specific JD provided) This report checks against typical keywords for the target role, not a specific job posting. Scores will vary when matched against real JDs.

Operating Modes Reference

ModeJD AvailableKeyword OptimizationSkills Prioritization
JD-targetedYesFull keyword gap analysisJD-matched first
Role-targetedNo (synthetic JD)Gap analysis against typical requirementsIndustry-standard first
General updateNoSkip keyword optimizationAll verified skills, grouped

Anti-Hallucination Rules

These are non-negotiable:

  1. Never invent achievements. If the user didn't say it, don't write it.
  2. Never add skills from the JD to the resume without asking the user.
  3. Tag all assumptions. [ASSUMED: reason] must be visible in drafts.
  4. Never rephrase user's skills to match JD terminology without explicit approval.
  5. Master profile is a truth document. It records what the user HAS, not what the JD WANTS.
  6. Never include unfiltered content. User-provided information is raw material to be curated, not copied. Internal project status, vague claims without impact, and duty descriptions without outcomes must be transformed or flagged — not pasted into the resume.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.