Install
$ agentstack add skill-fakhriaunur-cv-building-cv-building ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
CV Building Pipeline
End-to-end CV creation: from any input format → semantic accumulation → normalized master doc → quality-gated CV YAML → professional PDFs → strategic interview materials.
Core Philosophy: Premix Storage & Molds
Think of the master doc as premix storage — a neutral, ever-growing repository of your entire career. Think of each CV as a mold — a specific shape poured from the premix for a particular target.
- Premix (master.md) — infinite potential, neutral, always accumulating. No tailoring lives here.
- Molds (cv.yaml) — specific tailoring pulled from premix. Quality-gated, industry-appropriate, role-targeted.
- Zero-assumption input — accepts anything: full biography, draft CV, fractals, LinkedIn paste, conversation. No format required.
- Sidecar changelog — all additions/changes/removals tracked in
cv_files/CHANGELOG.md. No VCS assumed.
Entry Points:
/cv-buildingor "build my CV" → Full pipeline (accumulate → normalize → quality gate → render → package)- "just want to add to my master" or "just want to fill/populate the master" → Accumulation only (add to master, update changelog)
- "remove X from my master" or "take out this role" → Content removal (delete from master, update changelog)
- "just render my CV" → Quality gate + render only (requires existing master)
- "prepare interview materials" → Strategic package generation only
Prerequisites:
rendercvPython package:uv tool install "rendercv[full]"(orpip install "rendercv[full]")typstcompiler (installed with rendercv[full])
Pipeline Overview
Any Input → Semantic Accumulation → Master Normalization → Quality Gate (cv.yaml) → Package
↓ ↓ ↓ ↓ ↓
Free-form Merge with existing Organized, neutral Tailored, criteria- PDFs + strategic
CV/fractals/ master doc master doc matched YAML materials
conversation
Step 1: Semantic Accumulation
Accept any input and merge it into the growing knowledge base.
First-Time Setup
If cv_files/master.md doesn't exist:
- Create the
cv_files/directory:mkdir -p cv_files - Initialize
cv_files/master.mdfrom the template: [references/master/master.template.md](references/master/master.template.md) - Create
cv_files/CHANGELOG.mdwith a header and first entry - Proceed with accumulation as normal
Multi-Persona (Optional)
If the user needs separate identities (stage name, anon web3 identity, pen name), use suffixed master docs: cv_files/master_.md.
cv_files/master_stage-name.md— Actor's public identitycv_files/master_anon.md— Anon web3/DAO resumecv_files/master_real-name.md— Personal identity
Each persona gets its own master and changelog. Cross-persona accumulation is never assumed. If in doubt, default to single master.md.
Input Types (No Assumptions)
| Input | Example | How to Handle | |-------|---------|---------------| | Full biography | "Here's my complete career history..." | Parse all sections into master | | Existing CV | User pastes or uploads a resume | Extract all data points | | Draft tailored CV | User has a CV for a specific role | Extract raw facts, strip tailoring | | Fragments | "I also led a team of 5 at Company X" | Add to existing role or create new | | LinkedIn export | JSON or text from LinkedIn | Parse structured data | | Conversation | User describes achievements in chat | Extract and structure in real-time | | Correction | "Actually my end date was March, not February" | Confirm, update existing, log in changelog |
Accumulation Rules
- Never discard — all user-provided data stays in master unless explicitly asked to remove
- Always merge — new input supplements existing master, doesn't replace it
- Track everything — every addition/change/removal logged in changelog
- No completeness assumption — master can be partial, sparse, or empty. Always ready for more.
- Explicit removal only — if user says "remove X" or "take out this role", delete from master and log in changelog. Never remove anything without explicit instruction.
- Confirm corrections — when the user corrects existing info, acknowledge the change before applying: "Understood, updating [field] from [old value] to [new value]." Replace the value entirely (master is current truth, not a history doc), and log the change in the changelog.
- Detect and merge recurring details — when new input overlaps with existing entries (same company, same role, overlapping dates), enrich the existing entry instead of creating a duplicate. Confirm before merging: "This looks like it overlaps with your [Role] at [Company]. Should I add these details to the existing entry, or is this a different position?" This prevents accidental double-entry from typos or fragmented input (merge conflicts).
Probing Questions
When input is vague or brief, use targeted questions to excavate career details. Question bank: [references/master/question-bank.md](references/master/question-bank.md)
Pick the most relevant questions per role rather than asking all of them. Focus on:
- Context: What would break if you disappeared?
- Scale: Users, throughput, data volumes
- Velocity: What manual processes did you automate?
- Innovation: What did you build/adopt before it was standard?
- Influence: Who did you mentor? What patterns still stand?
Detect Target Context (When Building CV)
Ask (or detect from user input):
- Target role — Specific job title or paste a job description
- Industry type — STEM, Business/Product, Arts/Creative, Social Impact
- Company type — FAANG, startup, enterprise, nonprofit, agency
- Level — Junior, Mid, Senior, Staff, Principal, Manager, Director
- Page count — 1 or 2 pages (default: 1)
Step 2: Master Doc Normalizing
Organize accumulated data into cv_files/master.md using the template structure.
Read the template: [references/master/master.template.md](references/master/master.template.md)
What Happens Here
- Structure only — organize into: Experience, Skills, Education, Projects, Leadership
- NO tone gating — keep the user's voice and all raw data
- NO culture fitting — this is the neutral source of truth
- NO criteria matching — save tailoring for Step 3
Master Doc Sections
- Career Goals & Target Context — Role targets, industry, level
- Professional Experience — Each role: context, achievements, scale, velocity, innovation, influence
- Technical Skills — Mastery / Proficiency / Learning Edge tiers
- Education & Certifications — Degrees, honors, certifications
- Projects & Open Source — Side projects, OSS, publications
- Leadership & Community — Non-work achievements
- Awards & Recognition — Industry awards, patents, papers
- Creative Portfolio (if applicable) — For artists/creatives
Changelog
Every modification to master.md MUST be logged.
Write to cv_files/CHANGELOG.md:
# Changelog
## YYYY-MM-DD HH:MM
- **Added:** [What was added, e.g., "TechCorp Inc. role with 5 achievements"]
- **Updated:** [What was changed, e.g., "StartupXYZ end date: Feb 2022 → Mar 2022"]
- **Removed:** [What was removed, if any, e.g., "Removed placeholder education entry"]
- **Source:** [Where the info came from, e.g., "user paste", "conversation", "uploaded CV"]
This replaces any versioning system. The changelog is the single source of truth for what changed and when.
Output
Write/update cv_files/master.md and cv_files/CHANGELOG.md.
Important: This document stays neutral. All tailoring happens in Step 3.
Step 3: Quality Gate Processing
This is where the magic happens. Transform master data into cv_files/cv.yaml with industry-appropriate tone, culture fit, and role-specific criteria.
Read tone guide first: [references/build/tone-guide.md](references/build/tone-guide.md)
3a: Determine Gating Level
Based on the target industry, apply the appropriate tone level:
| Industry | Gating Level | Key Characteristics | |----------|-------------|-------------------| | STEM (engineering, research, data) | Level 1 — Strict | Anti-cringe, metrics-heavy, technical precision | | Business (product, consulting, finance) | Level 2 — Moderate | Business impact focus, storytelling OK, professional warmth | | Arts/Creative (design, media, entertainment) | Level 3 — Flexible | Personality allowed, portfolio emphasis, mission-driven |
See [references/build/tone-guide.md](references/build/tone-guide.md) for detailed gating rules per level.
3b: Craft CV Content
Headline (one-line identity under name):
- 3-4 pipe-separated positioning phrases tailored to target role
- Note: RenderCV uses
headlinefield (notlabel) - Example:
Client-Facing AI Delivery | Cross-Functional Engineering Leadership | Systems Thinking
Sections — select and prioritize from master based on target:
- What I Bring (0-3 bullet entries) — Top value propositions with bold headers
- For STEM: Technical achievements with metrics
- For Arts: Creative achievements with impact
- For Business: Revenue/growth metrics
- Experience — Most impactful roles for this target, each with:
- company, position, location, startdate, enddate
- highlights: metrics-driven bullets (quantity depends on page count)
- Education — Degrees, honors, relevant highlights
- Additional sections as needed (Projects, Skills, Beyond Work)
3c: Bullet Density Rules (Level 1 - STEM)
Every highlight must contain:
- A number that matters (%, time, money, users, scale)
- Specific technology (never "database" — always "PostgreSQL with read replicas")
- Business impact (why would a CEO care?)
- Temporal context when impressive ("early 2023, before industry standard")
For Level 2-3: Adapt density — numbers still matter but narrative structure is equally valued.
Quality bar reference: See [references/build/before-after-example.md](references/build/before-after-example.md) for concrete before/after comparisons of CV bullets.
3d: Write cv.yaml (The Mold)
Each mold (cv.yaml) is suffixed by target to allow multiple simultaneous versions from the same master.
Naming convention: cv_files/cv__.yaml
- `
— lowercase, hyphenated company name (e.g.,stripe,plaid`) - `
— lowercase, hyphenated role (e.g.,senior-backend,staff-engineer`) - Optional variant suffix:
_v2,_faang, etc. if multiple versions for same target
Examples:
cv_files/cv_stripe_senior-backend.yamlcv_files/cv_plaid_staff-engineer.yamlcv_files/cv_stripe_senior-backend_v2.yaml(alternate version)
Write the file following the exact RenderCV schema.
Schema Reference: See [references/build/rendercv-schema.json](references/build/rendercv-schema.json) or the human-readable [cv-yaml-schema.md](references/build/cv-yaml-schema.md) for the complete 4-section model (cv, design, locale, settings) and all 9 entry types.
Complete Examples: See [references/molds/](references/molds/) for fully renderable sample CVs and design files from the official rendercv-skill.
YAML Structure:
cv:
name: "Full Name"
headline: "Positioning Phrase 1 | Phrase 2 | Phrase 3"
location: "City, State/Country"
email: user@example.com
phone: "+1 555 123 4567"
social_networks:
- network: LinkedIn
username: handle
sections:
What I Bring:
- bullet: "**Bold Header:** Description with metrics."
Experience:
- company: Company Name
position: Role Title
location: City, Country
start_date: 2023-07 # YYYY-MM format
end_date: present # or YYYY-MM
highlights:
- "**Category:** Achievement with numbers and tech."
Education:
- institution: University Name
area: "Field (with honors)"
degree: MEng
start_date: 2011
end_date: 2016
Key Rules:
- Dates: Use
start_date/end_datewithYYYY-MMorYYYY. Useend_date: presentfor current roles.date(free-form) andstart_date/end_dateare mutually exclusive. If onlystart_dateis given,end_datedefaults topresent. - Markdown:
**bold**,*italic*,[link](url)are supported in strings. Block-level markdown (headers, lists, code blocks) is not rendered. Raw Typst commands and math ($$f(x)$$) also pass through. - Quotes: ALWAYS quote strings containing a colon (
:). This is the most common cause of invalid YAML. When in doubt, quote. - Phone: E.164 international format only (
+15551234567). Never invent — only include if user provides it. - Bullet characters: Only these are valid:
●,•,◦,-,◆,★,■,—,○. Do not use en-dash (–),>, or*. - Section titles:
snake_casekeys auto-capitalize (work_experience→ "Work Experience"). Keys with spaces or uppercase are used as-is. - Publication authors: Use
*Name*(single asterisks) to highlight the CV owner in author lists. - Nested highlights: Sub-bullets are supported via indentation under
highlights:. - No design in cv.yaml: Colors, fonts, margins, and layout are set during rendering via
--design.themeor a separatedesign.yaml. - No footer: Default to
show_footer: falsein any design override. Rationale: footers waste precious space on 1-page CVs, repeat info already in the header, and make documents look like generated reports instead of polished artifacts.
Write cv_files/cv__.yaml.
For complete RenderCV schema, design patterns, CLI reference, and locale support: Install the official rendercv-skill — this skill's RenderCV integration is aligned to it for correctness.
Step 4: Package Outputting
Generate all output artifacts.
4a: Render PDFs
Available built-in themes (RenderCV v2.8+): | Theme | Style | |-------|-------| | classic | Blue accents, partial line dividers | | harvard | Traditional academic, black text, centered | | engineeringresumes | Maroon accents, no dividers, compact | | engineeringclassic | Teal accents, full line dividers | | sb2nov | Black text, full dividers, minimal | | moderncv | Slate accents, moderncv-style headers |
For complete theme design options, see the rendercv-skill reference.
To render a single theme:
rendercv render cv_files/cv__.yaml --design.theme classic
# Output: cv___classic.pdf in root dir
Useful CLI options:
# Watch mode: auto-re-render on file change
rendercv render cv_files/cv__.yaml --watch
# Custom output directory
rendercv render cv_files/cv__.yaml --output-folder ./output
# Override fields without editing YAML
rendercv render cv_files/cv__.yaml --design.theme moderncv --cv.name "Jane Doe"
# Separate design file (reuse across multiple molds)
rendercv render cv_files/cv__.yaml --design cv_files/design.yaml
To render multiple themes:
python references/scripts/render_cv.py --cv-yaml cv_files/cv__.yaml --themes classic,moderncv --output-dir .
To render all themes:
python references/scripts/render_cv.py --cv-yaml cv_files/cv__.yaml --all --output-dir .
Output PDFs go to the root dir (the directory where the skill is invoked):
cv___classic.pdfcv___moderncv.pdf- etc.
4b: Validate Page Count
Quick check: qpdf --show-npages (if available). Otherwise open the PDF.
Read each generated PDF to check page count.
- If pages > target: Remove lowest-impact bullets first. Shorten verbose highlights. Remove least-relevant role if needed. Re-render.
- **If pages _/`.
All materials are tailored to the same target role and draw from the master
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: fakhriaunur
- Source: fakhriaunur/cv-building
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.