Vault-to-Artifact Tailor Skill
Version: 0.1
Purpose
Convert a person's canonical vault content into a tailored outbound artifact
(resume, cover letter, outreach, proposal) that matches an external audience
constraint — without fabricating evidence, without smoothing away the
person's authentic voice, and without leaking private vault fields beyond
what the artifact's destination warrants.
The skill is a translator, not a writer. Every claim in the output must be
traceable to a vault node. If a section of the artifact cannot be backed by
vault evidence, the skill surfaces it as a [TBD] placeholder rather than
inventing content.
When to use
- Job application (resume tailored to a specific JD)
- Cover letter tailored to a specific role / company
- Outreach email to investor / customer / collaborator with audience-fit framing
- Proposal / pitch one-pager tailored to a specific audience constraint
- Any case where: canonical self-data + audience constraint → tailored sendable artifact
Do not use
- One-shot generation with no vault (the skill's whole point is vault grounding)
- Pure copywriting tasks where audience truth-fidelity is not required
- When user wants generic polished prose with no structural fidelity
- When vault evidence is too thin — surface the gap, don't fabricate
Input expectations
Required:
- Vault locator: GitHub repo URL (private acceptable, will use
gh CLI) or local filesystem path. Must follow personal-memory-vault-starter schema or equivalent (people/, projects/, playbooks/, tracelets/, etc.)
- Audience constraint: one of (a) URL to JD/RFP/pitch context, (b) raw text of the constraint, (c) bullet-point summary of audience requirements
Optional (improves output):
- Artifact type:
resume | cover_letter | outreach_email | proposal_one_pager (default: resume)
- Direction hint: short phrase from user describing the angle they want (e.g. "enterprise customer-facing" vs "developer relations" vs "ops-born product")
- Length budget: page count or word count (default: resume 2-3 pages, cover letter ≤1 page)
- Output language: e.g.
en, zh, ja (default: match audience constraint language)
- Render format:
markdown | html | pdf | all (default: pdf + markdown)
Vault contract
The skill expects vault to roughly follow this layout:
<vault-root>/
├── INDEX.md network entry / navigation
├── people/<self>.md canonical self-description (name, contact, locations, languages, current role anchors)
├── projects/*.md project history with evidence
├── playbooks/*.md operating rules / preferences
├── tracelets/*.md single-decision calibration moments
└── concepts/*.md (optional) framework / vocabulary anchors
The skill reads these nodes by topic relevance to the audience constraint.
It does NOT modify vault content. It only reads vault and writes artifacts
back to a designated outputs location (default: vault/projects/<career-or-equiv>/outputs/).
Output contract
Return:
{
"audience_parse": {
"organization": "...",
"role_title": "...",
"role_family": "solutions_architect | developer_relations | product_manager | engineer | program_manager | other",
"level": "ic | senior | staff | manager | director",
"location": "...",
"key_keywords": ["..."],
"explicit_requirements": ["..."],
"preferred_requirements": ["..."]
},
"vault_query": {
"nodes_read": ["people/quinn.md", "projects/career.md", "playbooks/...", "..."],
"evidence_for_each_claim": { "claim_id": "vault_node_path" }
},
"tailored_sections": {
"headline": "...",
"profile": "...",
"target_roles": ["..."],
"core_positioning": ["..."],
"selected_projects": [{"title": "...", "vault_node": "...", "tailored_summary": "..."}],
"skills": [...],
"match_summary": [...]
},
"redaction_log": {
"items_filtered": ["..."],
"reason": "..."
},
"rendered_artifact": {
"markdown_path": "...",
"pdf_path": "...",
"char_count": 0,
"estimated_pages": 0
},
"tbd_placeholders": ["fields the user must fill before sending"]
}
Method
- Parse audience constraint → extract organization, role_title, role_family, level, location, key keywords, explicit/preferred requirements.
- Query vault by topic relevance:
people/<self>.md → identity, contact (subject to redaction), languages
projects/career.md or equivalent → master resume content, applications log, prior tailored variants
- other
projects/*.md → project evidence that matches role_family
playbooks/*.md → tone, voice, addressing convention, no-go phrases
- Apply tailoring rules:
- mirror audience keywords into Profile + Core Positioning (only if vault has matching evidence)
- rank/select top 2-3 projects most relevant to role_family
- tilt core positioning emphasis to match role_family invariants (e.g. SA = customer-discovery + cross-functional; DR = translation + community; PM = ops-to-product + metrics)
- generate role-specific match summary mapping audience requirements to vault evidence
- Render:
- tailored markdown → HTML template → PDF (via Chrome headless or equivalent)
- save to
vault/projects/<career>/outputs/<YYYY-MM-DD>_<org>_<role>/
- Emit redaction log + TBD list:
- never leak vault fields that the audience destination doesn't warrant (e.g. private employer compensation in a public-facing pitch)
- surface any claim that couldn't be backed by vault as
[TBD] for user to fill
Privacy / sovereignty
- Vault read access: skill uses user-authorized
gh CLI or local filesystem; does not transmit vault content to external services without explicit user invocation
- Output destination control: tailored artifacts default to
vault/.../outputs/ (still inside the private vault); user explicit action moves them to public surface (LinkedIn upload, Workday application, etc.)
- Redaction by default: if audience constraint indicates a public surface, the skill removes vault-private fields (real compensation numbers, employer-private project metrics, etc.) and notes them in
redaction_log
- No fabrication: every claim traceable to vault node; missing evidence →
[TBD], never hallucinated
- Respect vault's own privacy rules: if vault has a
playbooks/external-writing-anonymize.md or similar, the skill follows it
Anti-patterns to avoid
- Generating content not grounded in vault (hallucination)
- Smoothing user's authentic voice into corporate prose (this is what
founder-thought-translator covers; vault-to-artifact-tailor should call it for the actual prose translation step, not redo it)
- Adding metrics not in vault (use only vault-stored real numbers)
- Filling
[TBD] placeholders with assumed data
- Pushing tailored output to public repo without explicit per-output user confirmation
- Mixing multiple audience constraints into one artifact (one constraint → one artifact)
Defaults
| Field |
Default |
| Output format |
PDF + markdown both |
| Resume length |
2-3 pages |
| Cover letter length |
≤1 page |
| Outreach email length |
≤300 words |
| Output directory |
<vault>/projects/<career_node>/outputs/<YYYY-MM-DD>_<org>_<role>/ |
| Redaction |
filter compensation + employer-private metrics if destination is public |
| Language |
match audience constraint language |
| Naming convention |
<YYYY-MM-DD>_<org_slug>_<role_slug>.<ext> |
Composition with other skills
This skill composes with existing claude-cognition-skills:
founder-thought-translator — call when a section needs raw vault thought translated into sendable prose without losing voice
decision-snapshot-builder — call when audience constraint is fuzzy and needs structuring before tailoring begins
trap-detector — call to catch when tailoring drifts into fabrication or audience-pleasing distortion
helpful-now-deriver — call when user is mid-application and needs the smallest useful next move, not a full polished artifact
Reference implementation reuse
The PDF render pipeline is reused from prior work (Chrome headless + HTML+CSS template). Recommended directory layout in vault career node:
vault/projects/career/
├── README.md career node entry
├── master-resume-source.md canonical master
├── applications-log.md application history tracker
├── templates/ (optional) HTML/CSS templates per artifact type
└── outputs/
└── YYYY-MM-DD_<org>_<role>/
├── tailored.md
├── tailored.html
└── tailored.pdf
1---2name: vault-to-artifact-tailor3description: Tailor a personal outbound artifact (resume / cover letter / outreach email / proposal / pitch one-pager) against an external audience constraint (job description / RFP / pitch context), using a personal memory vault as the source of truth. Use when the user provides (1) a vault path or repo URL with their canonical self-data, and (2) an audience constraint document or link.4license: MIT5---67# Vault-to-Artifact Tailor Skill89Version: 0.11011## Purpose1213Convert a person's canonical vault content into a tailored outbound artifact14(resume, cover letter, outreach, proposal) that matches an external audience15constraint — **without** fabricating evidence, **without** smoothing away the16person's authentic voice, and **without** leaking private vault fields beyond17what the artifact's destination warrants.1819The skill is a translator, not a writer. Every claim in the output must be20traceable to a vault node. If a section of the artifact cannot be backed by21vault evidence, the skill surfaces it as a `[TBD]` placeholder rather than22inventing content.2324## When to use2526- Job application (resume tailored to a specific JD)27- Cover letter tailored to a specific role / company28- Outreach email to investor / customer / collaborator with audience-fit framing29- Proposal / pitch one-pager tailored to a specific audience constraint30- Any case where: **canonical self-data + audience constraint → tailored sendable artifact**3132## Do not use3334- One-shot generation with no vault (the skill's whole point is vault grounding)35- Pure copywriting tasks where audience truth-fidelity is not required36- When user wants generic polished prose with no structural fidelity37- When vault evidence is too thin — surface the gap, don't fabricate3839## Input expectations4041Required:42- **Vault locator**: GitHub repo URL (private acceptable, will use `gh` CLI) or local filesystem path. Must follow `personal-memory-vault-starter` schema or equivalent (`people/`, `projects/`, `playbooks/`, `tracelets/`, etc.)43- **Audience constraint**: one of (a) URL to JD/RFP/pitch context, (b) raw text of the constraint, (c) bullet-point summary of audience requirements4445Optional (improves output):46- **Artifact type**: `resume | cover_letter | outreach_email | proposal_one_pager` (default: `resume`)47- **Direction hint**: short phrase from user describing the angle they want (e.g. "enterprise customer-facing" vs "developer relations" vs "ops-born product")48- **Length budget**: page count or word count (default: resume 2-3 pages, cover letter ≤1 page)49- **Output language**: e.g. `en`, `zh`, `ja` (default: match audience constraint language)50- **Render format**: `markdown | html | pdf | all` (default: `pdf` + `markdown`)5152## Vault contract5354The skill expects vault to roughly follow this layout:5556```57<vault-root>/58├── INDEX.md network entry / navigation59├── people/<self>.md canonical self-description (name, contact, locations, languages, current role anchors)60├── projects/*.md project history with evidence61├── playbooks/*.md operating rules / preferences62├── tracelets/*.md single-decision calibration moments63└── concepts/*.md (optional) framework / vocabulary anchors64```6566The skill reads these nodes by topic relevance to the audience constraint.67It does NOT modify vault content. It only **reads** vault and **writes** artifacts68back to a designated outputs location (default: `vault/projects/<career-or-equiv>/outputs/`).6970## Output contract7172Return:7374```json75{76 "audience_parse": {77 "organization": "...",78 "role_title": "...",79 "role_family": "solutions_architect | developer_relations | product_manager | engineer | program_manager | other",80 "level": "ic | senior | staff | manager | director",81 "location": "...",82 "key_keywords": ["..."],83 "explicit_requirements": ["..."],84 "preferred_requirements": ["..."]85 },86 "vault_query": {87 "nodes_read": ["people/quinn.md", "projects/career.md", "playbooks/...", "..."],88 "evidence_for_each_claim": { "claim_id": "vault_node_path" }89 },90 "tailored_sections": {91 "headline": "...",92 "profile": "...",93 "target_roles": ["..."],94 "core_positioning": ["..."],95 "selected_projects": [{"title": "...", "vault_node": "...", "tailored_summary": "..."}],96 "skills": [...],97 "match_summary": [...]98 },99 "redaction_log": {100 "items_filtered": ["..."],101 "reason": "..."102 },103 "rendered_artifact": {104 "markdown_path": "...",105 "pdf_path": "...",106 "char_count": 0,107 "estimated_pages": 0108 },109 "tbd_placeholders": ["fields the user must fill before sending"]110}111```112113## Method1141151. **Parse audience constraint** → extract organization, role_title, role_family, level, location, key keywords, explicit/preferred requirements.1162. **Query vault** by topic relevance:117 - `people/<self>.md` → identity, contact (subject to redaction), languages118 - `projects/career.md` or equivalent → master resume content, applications log, prior tailored variants119 - other `projects/*.md` → project evidence that matches role_family120 - `playbooks/*.md` → tone, voice, addressing convention, no-go phrases1213. **Apply tailoring rules**:122 - mirror audience keywords into Profile + Core Positioning (only if vault has matching evidence)123 - rank/select top 2-3 projects most relevant to role_family124 - tilt core positioning emphasis to match role_family invariants (e.g. SA = customer-discovery + cross-functional; DR = translation + community; PM = ops-to-product + metrics)125 - generate role-specific match summary mapping audience requirements to vault evidence1264. **Render**:127 - tailored markdown → HTML template → PDF (via Chrome headless or equivalent)128 - save to `vault/projects/<career>/outputs/<YYYY-MM-DD>_<org>_<role>/`1295. **Emit redaction log + TBD list**:130 - never leak vault fields that the audience destination doesn't warrant (e.g. private employer compensation in a public-facing pitch)131 - surface any claim that couldn't be backed by vault as `[TBD]` for user to fill132133## Privacy / sovereignty134135- **Vault read access**: skill uses user-authorized `gh` CLI or local filesystem; does not transmit vault content to external services without explicit user invocation136- **Output destination control**: tailored artifacts default to `vault/.../outputs/` (still inside the private vault); user explicit action moves them to public surface (LinkedIn upload, Workday application, etc.)137- **Redaction by default**: if audience constraint indicates a public surface, the skill removes vault-private fields (real compensation numbers, employer-private project metrics, etc.) and notes them in `redaction_log`138- **No fabrication**: every claim traceable to vault node; missing evidence → `[TBD]`, never hallucinated139- **Respect vault's own privacy rules**: if vault has a `playbooks/external-writing-anonymize.md` or similar, the skill follows it140141## Anti-patterns to avoid142143- Generating content not grounded in vault (hallucination)144- Smoothing user's authentic voice into corporate prose (this is what `founder-thought-translator` covers; vault-to-artifact-tailor should call it for the actual prose translation step, not redo it)145- Adding metrics not in vault (use only vault-stored real numbers)146- Filling `[TBD]` placeholders with assumed data147- Pushing tailored output to public repo without explicit per-output user confirmation148- Mixing multiple audience constraints into one artifact (one constraint → one artifact)149150## Defaults151152| Field | Default |153|---|---|154| Output format | PDF + markdown both |155| Resume length | 2-3 pages |156| Cover letter length | ≤1 page |157| Outreach email length | ≤300 words |158| Output directory | `<vault>/projects/<career_node>/outputs/<YYYY-MM-DD>_<org>_<role>/` |159| Redaction | filter compensation + employer-private metrics if destination is public |160| Language | match audience constraint language |161| Naming convention | `<YYYY-MM-DD>_<org_slug>_<role_slug>.<ext>` |162163## Composition with other skills164165This skill composes with existing claude-cognition-skills:166167- **`founder-thought-translator`** — call when a section needs raw vault thought translated into sendable prose without losing voice168- **`decision-snapshot-builder`** — call when audience constraint is fuzzy and needs structuring before tailoring begins169- **`trap-detector`** — call to catch when tailoring drifts into fabrication or audience-pleasing distortion170- **`helpful-now-deriver`** — call when user is mid-application and needs the smallest useful next move, not a full polished artifact171172## Reference implementation reuse173174The PDF render pipeline is reused from prior work (Chrome headless + HTML+CSS template). Recommended directory layout in vault career node:175176```177vault/projects/career/178├── README.md career node entry179├── master-resume-source.md canonical master180├── applications-log.md application history tracker181├── templates/ (optional) HTML/CSS templates per artifact type182└── outputs/183 └── YYYY-MM-DD_<org>_<role>/184 ├── tailored.md185 ├── tailored.html186 └── tailored.pdf187```