From obsidian-resume
Use this skill whenever the user wants to generate a resume, CV, or job application materials from their Obsidian notes. Triggers on: "generate resume from Obsidian", "make my resume from my notes", "build CV from vault", "create Harvard resume", "find jobs matching my resume", "export resume as LaTeX", "resume from markdown notes". Also trigger when the user pastes Obsidian markdown and asks for a resume, cover letter, or job search. This skill reads exported vault JSON (from export_vault.py), generates a Harvard OCS-style LaTeX resume, and runs a live job search based on the user's profile.
How this skill is triggered — by the user, by Claude, or both
Slash command
/obsidian-resume:obsidian-resumeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill does three things in sequence:
This skill does three things in sequence:
obsidian_export.json) into a structured profilepdflatex)Before anything else, ask the user:
"Have you run
export_vault.pyyet? If yes, paste the contents ofobsidian_export.jsonhere. If not, I can also work directly from pasted markdown notes."
If they have the JSON: parse it using the schema in references/export_schema.md.
If they paste raw markdown: extract profile data directly — see Parsing Rules below.
Build a structured profile object with these fields:
profile:
name: string
email: string
phone: string
location: string
linkedin: string (optional)
github: string (optional)
website: string (optional)
summary: string (2–3 sentences, optional)
education:
- degree: string
school: string
location: string
dates: string # e.g. "Sep 2016 – Jun 2020"
gpa: string (optional)
honors: string (optional)
relevant_courses: [string] (optional)
experience:
- title: string
company: string
location: string
dates: string
bullets: [string] # strong action verbs, quantified impact
projects:
- name: string
tech: string # comma-separated stack
dates: string (optional)
bullets: [string]
skills:
technical: [string]
languages: [string]
tools: [string]
soft: [string] (optional)
awards: [string] (optional)
publications: [string] (optional)
volunteer: [string] (optional)
title:, company:, dates:, tags:) map directly to profile fields## Experience, ## Skills) signal sections-) under a job heading become bullets[]company:: Acme Corp) are treated like frontmatter#career, #resume, #job mark notes as relevantRead the full template in references/harvard_template.md before generating.
| Rule | Detail |
|---|---|
| Font | 10–12pt, Times New Roman or Latin Modern |
| Margins | 0.5–1 inch all sides |
| Section headers | ALL CAPS, bold, followed by a full-width horizontal rule |
| Name | Large (16–18pt), bold, centered at top |
| Contact line | Single line, centered, below name |
| Dates | Right-aligned on same line as job title/company |
| Bullets | Start with strong past-tense action verb; quantify impact where possible |
| Length | 1 page for <10 years experience; 2 pages max |
| Order | Education → Experience → Projects → Skills → Awards |
| No photos | No headshots or graphics |
| No colors | Pure black and white (use \color{black} everywhere) |
Output the complete .tex file — do not truncate. Structure:
\documentclass[10pt, letterpaper]{article}
% ... preamble (see references/harvard_template.md for full preamble)
\begin{document}
% ── HEADER ──────────────────────────────────────────────────
\begin{center}
{\LARGE\textbf{FULL NAME}} \\[4pt]
\small [email protected] \; $\cdot$ \; +1 (555) 000-0000 \; $\cdot$ \; City, Country \\
\small \href{https://linkedin.com/in/handle}{linkedin.com/in/handle} \; $\cdot$ \; \href{https://github.com/handle}{github.com/handle}
\end{center}
\vspace{-6pt}
% ── EDUCATION ───────────────────────────────────────────────
\section*{EDUCATION}
\hrule
\vspace{4pt}
\noindent\textbf{University Name} \hfill City, Country \\
\textit{Degree, Major} \hfill \textit{Sep 20XX -- Jun 20XX} \\
GPA: X.X/4.0 \; | \; Honors: Dean's List
\vspace{6pt}
% ── EXPERIENCE ──────────────────────────────────────────────
\section*{EXPERIENCE}
\hrule
\vspace{4pt}
\noindent\textbf{Company Name} \hfill City, Country \\
\textit{Job Title} \hfill \textit{Jan 20XX -- Dec 20XX}
\begin{itemize}[leftmargin=1.5em, topsep=2pt, itemsep=0pt]
\item Accomplished [X] by doing [Y], resulting in [Z\%] improvement
\item Led team of N engineers to deliver feature used by X users
\end{itemize}
\vspace{6pt}
% ── PROJECTS ────────────────────────────────────────────────
\section*{PROJECTS}
\hrule
\vspace{4pt}
\noindent\textbf{Project Name} \textit{| Tech Stack} \hfill \textit{Month 20XX}
\begin{itemize}[leftmargin=1.5em, topsep=2pt, itemsep=0pt]
\item Built [X] using [Y] that achieved [Z]
\end{itemize}
\vspace{6pt}
% ── SKILLS ──────────────────────────────────────────────────
\section*{SKILLS}
\hrule
\vspace{4pt}
\noindent\textbf{Languages:} Python, TypeScript, Go \\
\noindent\textbf{Frameworks:} React, FastAPI, Node.js \\
\noindent\textbf{Tools:} Docker, GitHub Actions, AWS, PostgreSQL
\end{document}
| Character | Escaped |
|---|---|
& | \& |
% | \% |
$ | \$ |
# | \# |
_ | \_ |
{ } | \{ \} |
~ | \textasciitilde{} |
^ | \textasciicircum{} |
\ | \textbackslash{} |
Vietnamese and accented characters work natively with \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} — include both in preamble.
Rewrite the user's raw notes into resume bullets:
After generating the resume, extract a search profile:
search_profile:
top_skills: [3–5 most prominent technical skills]
roles: [2–3 job titles that fit the experience level]
location: [from profile, default "Ho Chi Minh City" or "Remote"]
years_experience: [estimate from dates]
seniority: [Junior / Mid / Senior / Lead]
Then use web search to find live job listings. Run these searches:
"{role}" "{top_skill}" jobs {location} 2025"{role}" remote Vietnam 2025 site:linkedin.com OR site:vietnamworks.com OR site:topcv.vn"{role}" "{top_skill}" "{top_skill_2}" job openingFor each search, extract up to 3 real listings with:
Present results as a table:
| Role | Company | Location | Match reason | Link |
|---|---|---|---|---|
| ... | ... | ... | ... | Apply |
Then offer to write a tailored cover letter for any listing.
When the user picks a job, generate a cover letter:
Before presenting the LaTeX to the user, verify:
inputenc and fontenc packages included (for non-ASCII names)\begin{} has a matching \end{}\hfill\section*{} (no numbering) + \hrulepdflatex resume.tex (mentally trace through)| File | Purpose |
|---|---|
SKILL.md | This file — main instructions |
scripts/export_vault.py | Run locally to export Obsidian vault → JSON |
references/harvard_template.md | Full LaTeX preamble + section examples |
references/export_schema.md | JSON schema for obsidian_export.json |
python export_vault.py --vault ~/path/to/vault on your computer.tex file and compile: pdflatex resume.texCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub dawnn07/obsidian-resume --plugin obsidian-resume