Automated summary
Imports an existing CV (PDF, markdown, or pasted text) into the repository's structured data files through an additive merge that preserves existing content.
Strengths
- The additive merge never deletes or overwrites user-edited content, so repeated imports accumulate safely.
- Handles several input formats (PDF read natively, .md, .txt, pasted text) and also looks for the file under files/.
- Detects the CV language from section headers (English, German, French, Dutch, Spanish) for later use.
- Leaves explicit TODO markers for fields rarely found on a CV, such as compensation or availability.
Limitations
- Assumes a predefined data/ layout (profile.md, skills.md, projects/*.md), so it is not reusable outside that kind of repository.
- Extraction relies on the model parsing free-form text; no deterministic parsing or validation is described.
- Write access is limited to data/**, so it cannot fix or create files elsewhere.
Use it when you maintain a structured career-data repository and want to fold an old or new CV into it without losing previous edits.
Avoid it for one-off CV reformatting, generating a CV from scratch, or repos that lack the expected data/ structure.
Security analysis
SafeThe skill only reads user-provided CV files and writes/edits files under data/**. It does not use shell, network, or destructive commands, and has no exfiltration paths. The main theoretical risk is prompt injection from CV text, but the allowed toolset limits impact to local data edits.
No concerns found
How this analysis is madeExamples
/import-cv files/cv-2024.pdf — merge it into the data files, don't delete anything that's already there./import-cv paste — I'll paste my CV text next, please extract and merge it into data/./import-cv ~/docs/cv-2018.md and merge it on top of the current data/ files, keeping my existing edits.name: import-cv description: Import an existing CV into structured data files — additive merge with existing data, can be run repeatedly argument-hint: <path-to-cv-or-paste> user-invocable: true allowed-tools: Read(), Glob(), Grep(*), Write(data/), Edit(data/)
Import CV — Extract and Merge CV Data into Structured Files
Import professional experience from an existing CV (PDF, markdown, or pasted text) into the repository's structured data files. Designed to be run multiple times — each import merges with existing data rather than overwriting it.
Core Principle: Additive Merge
This skill never destroys data. When run against a repository that already has data files:
- New data gets added — new projects, skills, certifications get created
- Existing data gets enriched — missing fields filled in, thin descriptions expanded
- Nothing gets deleted — a project from a previous import that isn't on the new CV stays untouched
- User-edited content is preserved — if a TODO marker was replaced with real content, don't overwrite it with a new TODO
This means a user can safely import an old 2018 CV first, then a newer 2024 CV, and the data accumulates correctly.
Arguments
$ARGUMENTS(optional): Path to a CV file (PDF,.md, or.txt). If omitted or "paste", ask the user to paste their CV text into the conversation.
Instructions
Step 1: Parse Input
-
If
$ARGUMENTSis a file path:- Check if the file exists. If not, also check under
files/(the convention for dropped input files). - Read the file. For PDFs, use the Read tool (it handles PDFs natively). For large PDFs (>10 pages), read in page chunks.
- Store the content as
CV_TEXT.
- Check if the file exists. If not, also check under
-
If
$ARGUMENTSis empty or "paste":- Ask the user to paste their CV text.
- Wait for the response and store as
CV_TEXT.
-
Detect language: Scan section headers and body text. Common header patterns — English: "Summary", "Experience", "Projects", "Skills", "Education"; German: "Kurzprofil", "Berufserfahrung", "Projekterfahrung", "Fachkenntnisse", "Ausbildung"; French: "Compétences", "Expérience", "Formation"; Dutch: "Vaardigheden", "Werkervaring", "Opleiding"; Spanish: "Habilidades", "Experiencia", "Formación"; other languages: infer from content. Note the language for later use but don't block on it.
Step 2: Load Existing Data
Read all current data files to establish the merge baseline. Read these in parallel:
data/profile.mddata/skills.mddata/certifications.mddata/education.mddata/companies.mddata/project-index.md- All files in
data/projects/*.md
If files don't exist (first run on a clean repo), that's fine — start from empty for those sections.
Step 3: Extract and Merge
Parse CV_TEXT and merge with existing data for each file type below. For every field, apply the merge rule: new data fills gaps, enriches thin content, and never overwrites user-edited content.
3a: Profile (data/profile.md)
Extract and merge into this structure:
# Profile
- **Name:** [full name including academic titles]
- **Born:** [date/location if available]
- **Title:** [professional title/headline]
- **Company:** [own company, if applicable]
- **Address:** [if available]
- **Mobile:** [if available, or <!-- TODO: Add phone number -->]
- **E-Mail:** [if available, or <!-- TODO: Add email -->]
<!-- If the CV indicates freelance/self-employed status, add: -->
<!-- - **Independent since:** [year] -->
## Compensation
<!-- TODO: Add your compensation structure. Rarely on CVs — fill this in manually.
Use whichever section applies:
### Freelance / Contract
- **Daily:** [currency]XXX
- **Hourly:** [currency]XXX
### Employment
- **Salary expectation:** [currency]XXX,XXX/year
-->
## Languages
- **[Language]:** [Proficiency level]
## Availability
<!-- TODO: Describe your availability and work model preference -->
Merge rules:
- If profile.md already exists with real content in a field, keep it
- If profile.md has a TODO and the CV provides the data, replace the TODO
- If profile.md doesn't exist, create it with what the CV provides + TODOs for the rest
- Compensation and availability are almost never on CVs — create TODO sections unless they're already filled in
3b: Skills (data/skills.md)
Extract skills and group by category using this table format:
# Skills
## [Category Name]
| Skill | Experience | Self-Rating |
|---|---|---|
| [Skill] | [X+ years] | [Expert/Advanced/Intermediate] |
Categories (adjust to match the candidate's actual skill domains — these are suggestions):
- Cloud & Infrastructure
- Development — Backend
- Development — Frontend
- Data
- DevOps & Tooling
- Soft Skills & Methods
- [Domain-specific, e.g., "Healthcare", "Finance & Banking", "Design & UX"]
Merge rules:
- Add new skills not already in the file
- If a skill already exists with a higher experience level, keep the higher one
- If the CV shows more years than the existing entry, update the years
- If Self-Rating is
—(unrated) and the CV doesn't provide a rating, leave it as— - Never remove a skill that exists in the file but isn't on the new CV
Experience estimation: If the CV doesn't list years per skill but does list project dates, estimate experience from the span of projects using that skill. Mark estimates: 3+ years <!-- estimated from project dates -->.
3c: Certifications (data/certifications.md)
Extract into the table format grouped by vendor:
# Certifications
## [Vendor Name]
| Certification | Exam Code | Earned | Expires | Status |
|---|---|---|---|---|
| [Name] | [Code] | [Date] | [Date] | [Status] |
Merge rules:
- Add new certifications not already listed
- If a cert already exists, update fields that are missing (e.g., add an expiry date)
- Never remove an existing certification
- If dates are missing from the CV, use
<!-- TODO: Add date --> - If no certifications are found and the file doesn't exist, create it with a placeholder:
# Certifications
<!-- No certifications found in the imported CV. Add yours here:
## Vendor Name
| Certification | Exam Code | Earned | Expires | Status |
|---|---|---|---|---|
| Cert Name | CODE | DD Mon YYYY | DD Mon YYYY | Active |
-->
3d: Education (data/education.md)
Extract into the structured format:
## [Degree Name]
- **Institution:** [name]
- **Period:** [MM/YYYY – MM/YYYY]
- **Final grade:** [if available]
- **Majors:** [if available]
- **Thesis:** [if available]
For non-English degrees, add English equivalents in parentheses. Research the degree system of the candidate's country to provide accurate equivalencies — e.g. German "Diplom [Subject] (Master's equiv.)", French "Licence (Bachelor's equiv.)", Dutch "Doctoraal (Master's equiv.)", Japanese "学士 Gakushi (Bachelor's equiv.)".
Merge rules:
- Add new education entries not already listed (match by institution + degree)
- Enrich existing entries with missing fields
- Never remove existing entries
3e: Companies (data/companies.md)
Only relevant if the CV indicates freelance/self-employed status, own business entities, or founding/co-founding a company.
## [Company Name]
- **Type:** [LLC / Inc. / Ltd / GmbH / BV / Pty Ltd / S.A. / Sole Trader / etc.]
- **Period:** [Founded YYYY – active/liquidated]
- **Location:** [Country/city]
- **Purpose:** [one sentence]
Merge rules:
- Add new companies not already listed
- Enrich existing entries
- If self-employed status is clear but no company details on CV, create a TODO entry
3f: Projects (data/projects/*.md)
This is the most important extraction. For each engagement/project on the CV, create or enrich a project file.
File naming: Slug from client name or project name — lowercase, hyphens for spaces, no special characters. Examples: acme-corp.md, flagship-project.md, summer-internship.md.
Target structure per file:
# [Project Title]
- **Period:** [MM/YYYY – MM/YYYY or "ongoing"]
- **Role:** [role title(s)]
- **Client:** [client name]
- **Industry:** [industry category]
- **Location:** [Country (CODE)]
- **Type:** [flagship | consulting | contract | co-founded | internship | employment | side-project]
## Description
[1-3 paragraphs]
## Responsibilities
- [bullet points]
## Key Achievements
- [bullet points, or TODO if not extractable]
## Technologies
[comma-separated list]
## Tags
[lowercase, hyphenated tags]
Type classification:
- External consultant/advisor →
consulting - Specific contract/project work →
contract - Permanent or full-time employment →
employment - Co-founded or CEO/founder →
co-founded - Explicitly an internship →
internship - Personal/hobby/side venture →
side-project
Note:
flagshipis also a valid type (the candidate's single most significant role — typically multi-year, high-impact, central to professional identity), but never auto-assign it during import. Only the candidate can decide which project (if any) deserves this label. Mention it in Next Steps instead.
Merge rules — the key logic:
- Match existing projects by client name + overlapping period. If a project file already exists for the same client and the periods overlap, this is the same project — enrich it.
- Enriching means: add missing responsibilities, fill in blank descriptions, add technologies the CV mentions that the file doesn't have, update tags. Never remove content that's already there.
- New projects (no matching file) get a new file created.
- Projects in existing files but not on this CV are left completely untouched — they came from a previous import or were added manually.
- Key Achievements are rarely on CVs in detail. If the file already has achievements, keep them. If not, add a TODO:
## Key Achievements
<!-- TODO: Add 2-3 key achievements. Think about:
- What measurable impact did you have?
- What problems did you solve?
- What would have happened without you?
-->
3g: Project Index (data/project-index.md)
Regenerate entirely from all project files (both existing and newly created). Read every file in data/projects/ and compile the index in reverse-chronological order.
# Project Index
> Overview of all projects. For full details, see individual files in `data/projects/`.
## [filename].md
- **Period:** [from project file]
- **Role:** [from project file]
- **Client:** [from project file]
- **Industry:** [from project file]
- **Location:** [from project file]
- **Type:** [from project file]
- **Technologies:** [from project file]
- **Tags:** [from project file]
This is the one file that gets fully rewritten (not merged) because it's derived entirely from the project files.
Step 4: Write Files
Write all merged files. Go through them in this order:
data/profile.mddata/skills.mddata/certifications.mddata/education.mddata/companies.md(if applicable)- Each
data/projects/<slug>.md(new or enriched) data/project-index.md(regenerated)
For files that already exist and are being enriched, use Edit where surgical changes suffice, or Write for larger rewrites. For new files, use Write.
Step 5: Report
After all files are written, present a summary:
## Import Complete
**Source:** [filename or "pasted text"] ([language detected])
### Changes
- **Profile:** [created | updated N fields | unchanged]
- **Skills:** [N new skills added, M updated | file created with N skills]
- **Certifications:** [N new certs added | file created with N certs | no certs found]
- **Education:** [N entries added | unchanged]
- **Companies:** [N entries added | skipped (not freelancer) | unchanged]
- **Projects:** [N new projects created, M existing projects enriched]
- **Project index:** Regenerated ([total] projects)
### TODO Items
[count] items need manual attention:
- `data/profile.md` — compensation, availability
- `data/projects/[name].md` — key achievements (×N projects)
- [etc.]
### Next Steps
- Fill in TODO items (highest impact: compensation and key achievements)
- Review your projects — if one stands out as your anchor (multi-year, high-impact, central to your identity), mark its type as `flagship`
- Import another CV to enrich further: `/import-cv path/to/another-cv.pdf`
- Discover your professional identity: `/extract-identity`
- Generate your first CV: paste a job ad and ask for a targeted resume
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/import-cv-merge-cv-data-mrwakcnb/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/import-cv-merge-cv-data-mrwakcnb' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/import-cv-merge-cv-data-mrwakcnb/download' --output '.skill-downloads/import-cv-merge-cv-data-mrwakcnb/SKILL.md.part' && mv '.skill-downloads/import-cv-merge-cv-data-mrwakcnb/SKILL.md.part' '.skill-downloads/import-cv-merge-cv-data-mrwakcnb/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
Tools declared by the author (check availability in your agent): Read(*), Glob(*), Grep(*), Write(data/**), Edit(data/**)
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/import-cv-merge-cv-data-mrwakcnb/SKILL.md' && test -s '.skill-downloads/import-cv-merge-cv-data-mrwakcnb/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/import-cv' && cp -R '.skill-downloads/import-cv-merge-cv-data-mrwakcnb' '.claude/skills/import-cv'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/import-cv-merge-cv-data-mrwakcnb'openskills read 'import-cv-merge-cv-data-mrwakcnb'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/import-cv-merge-cv-data-mrwakcnb/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
PDF Reader
Productivity
Read and extract text from PDF files, including documents, reports, contracts, and spreadsheets. Works with local files, URLs, and WhatsApp attachments. Use whenever PDF content is needed, even if not explicitly requested.
Discord Messaging Workflows
Productivity
Use the message tool to send, edit, and moderate Discord messages with interactive components.
Interactive Verdict Preview
Productivity
Generate an interactive HTML preview of keep/drop verdicts for maintainer review, then process the pasted feedback JSON.