render
Makes a finished PDF or slide deck (CV, cover letter, report, memo, assignment or presentation) from the user's notes with the Quarto templates, checks the page limit and fonts, and explains any error
SKILL.md.claude/skills/render/SKILL.md
GitHubRender: turn notes into a CV, letter, report or deck
Makes a good-looking, correctly sized document from text the user already has, and tells them in plain words how it went.
When to use
- "Make my CV", "make an ATS-friendly CV", "turn this into a 6-page PDF", "make a cover letter for this job", "make slides from this note".
/assignment shipand/jobs applycall this skill for the final file.- Not for writing the content itself. Drafting words is
/assignment,/jobsand theghostwriteragent. Render only lays out words that already exist.
Before you start
- Clarify first. Use
/clarify document(the checklist for documents) unless the request already answers it. You need five answers. Take every one you can from the files below, and ask only for what is missing, one question at a time:- which kind of document (see the table in step 1);
- what the words come from (a note, an assignment folder, the user's facts);
- who will read it and what it is for;
- the limits: pages, font size, line spacing, margins. For an assignment these are already in
assignment.mdunderlimits; - the language (
enornl).
- Read, in this order, only what applies:
vault/10_projects/<assignment>/assignment.md(limits, deliverables,status);vault/80_me/USER.md,vault/80_me/fact-sheet.mdandvault/20_areas/career/career.md(for a CV or letter);- the application note in
vault/20_areas/career/applications/(for a letter); - the source note or
report.qmd(for a report or deck); vault/80_me/brand/_brand.yml, if it exists (colours and fonts: the user default when no template is set).vault/80_me/voice/<lang>/profile.md(voice). Without one, say so once per session and suggest the voice setup; do not fall back to a neutral house style unless the user wants to go on now.
- Check the tools once per session. Run
node system/quarto/tools/fonts.mjs. For a deck, also runnode system/scripts/pages.mjs checknow: the page check in step 7 needs a PDF, so a deck that may be handed over is rendered with--pdf. If the PDF page renderer is missing, offer to install it once, here. If the user declines, say in the hand-over which pages you could not view.- If it says Quarto is missing, tell the user in one line how to install it (Windows:
winget install --id Posit.Quarto -e, or quarto.org) and stop. - If fonts are missing, say which, and offer the two fixes it prints. Do not continue silently: a substitute font can change the page count.
- If it says Quarto is missing, tell the user in one line how to install it (Windows:
- Field lists for every template are in
references/templates.md. Read it when you fill a template. Tone and voice rules:system/deliverables/tone-and-voice.md. Deck and document principles:system/deliverables/principles.md.
Steps
Pick the template from what the user asked for.
Document --typeStarter file CV for a person to read cvcv.qmd+cv-data.ymlCV for online forms, "ATS", "plain" cv-atscv-ats.qmd+cv-data.ymlCover letter letterletter.qmdReport, case, memo, assignment reportreport.qmd+references.bibSlides, presentation deckdeck.qmdA CV with no preference: make both layouts from the same
cv-data.yml, and say which is for what.Resolve the template silently. Run
node system/scripts/template.mjs resolve --kind <kind> --for <source> --json(kind: deck, report, memo, letter, cv, essay, one-pager). Say in one line which template it chose ("Using your school's report template."). Ask only iftieis not empty (name the candidates, recommend the one made most recently for this course) or the user asks. The result also givesstyle,tone,csl,max_upload_mb,page_limitandhouse_rules. Pass the template folder (template.dir) as--template. Pass--csl <resolved csl>wheneverresolvereturns acslthat is a path (the programme's or the template's required style);--reference-doconly when the user names a file. Ifcsl_missingis true orwarningssay the required citation style has no file, tell the user in one line ("Your programme requires Chicago, but I have no style file for it, so references use the default style") and offer to add the file to the template folder. Explicit--cslfrom the user wins. Show everywarningsline that matters to the result (an unknown course or programme link, a missing template). A built-in result withvault/80_me/brand/_brand.ymlpresent keeps using that brand file. Template questions:/template.Choose the folder and start the files. Use the existing source if there is one. Otherwise:
- CV:
vault/20_areas/career/cv/ - letter:
vault/20_areas/career/applications/<company role>/ - assignment: the assignment folder (
report.qmdalready belongs there) - anything else:
vault/10_projects/<short-name>/
Then run
node system/quarto/tools/render.mjs scaffold <type> <folder>. It never overwrites a file that is already there, so acv-data.ymlthat another skill prepared is kept.- CV:
Fill the file. Follow the rule for the type.
- CV: edit only
cv-data.yml. Followreferences/cv-filling.md: every line comes fromfact-sheet.md,USER.mdorcareer/notes. If a fact is missing, leave the line out and ask. Never guess a date, number, title or employer. - Letter: the
ghostwriteragent drafts the text from the voice profile and the fact sheet. You place it inletter.qmdand fill the data block. Keep it to one page. - Report: the content is the user's. Check the structure against
references/templates.md(sections start at##,\$for dollar signs,*Source: ...*notes, citations as@key). Add missing keys toreferences.bibonly from real source notes invault/40_sources/. - Deck: storyline first. Show the ghost deck (the slide titles only, each a full-sentence takeaway) and wait for a yes before writing the file (
system/deliverables/principles.md). The style fromresolvesets the rules:reading-deckslides explain themselves (an "In brief" box, sources, footnotes);presenting-deckslides carry minimal text and the content goes in the speaker notes (::: {.notes}blocks). A template or rubric structure wins over the general principles; say so in one line. - Tone and voice (report, deck, memo): write in the resolved
toneon top of the user's own voice, with a story inside the structure, as insystem/deliverables/tone-and-voice.md. No invented anecdotes or facts.
- CV: edit only
Confirm, then write. Give a three-line summary of what will be written and where. When the user says yes, write.
Render. Run one command from the project root:
node system/quarto/tools/render.mjs <source> --type <type> [--template <folder>] [--max-pages N] [--pdf] [--name "<name>"]--max-pages N: for assignments uselimits.pages. With no assignment limit, use the template'spage_limitfromresolve. For a CV use 2 unless the user says otherwise; for a letter use 1.--pdf: for a deck, always when it may be handed over (step 7 views the PDF pages; HTML cannot be viewed page by page) and whenever the user wants a PDF as well.--format docxor--format pptx: for a Word or PowerPoint copy when the brief lists one. These have a plainer look (they use the template's reference document, elsevault/80_me/brand/reference.docxorreference.pptxwhen present). The page count is not available for them, so say so.- An Obsidian note ending in
.mdworks as the source. The tool converts a copy first and never changes the note. - Output goes next to the source in
_out/(scratch space, replaced each time, not saved to git). For a final version add--release: it goes toreleases/<today>/and every version is kept. If another skill gave you a folder or a file name, pass--out <folder>and--name <name>.
Read the result. The tool prints
Done., the file path, andInfo,NoteorProblemlines.- Problem about length: follow
references/page-fit.md. At most three passes, then tell the user honestly where it stands. - Any other Problem: the lines already explain it in plain English. Try the fix they suggest once. If it is still broken, read
references/troubleshooting.md. Do not paste technical output at the user. Summarise it in one sentence and say what you will try. - Note about a font: relay it, with the two fixes.
- Problem about length: follow
Look at every page yourself. Before you call anything ready: render the pages to PNG with
node system/scripts/pages.mjs pdf <file.pdf>and open each one with the Read tool (for a.pptxor.docx, export a copy to PDF first withpages.mjs export, which uses PowerPoint or Word when installed). Check the cover, the edges, half-empty boxes, fallback fonts, overlaps and legibility. A helper's "viewed all" is never evidence; you look. For a deck, view the PDF made with--pdf. If the PDF page renderer is missing or was declined in "Before you start", do not offer again mid-task: say which pages you could not check. For a CV or letter, also re-read the filled data against the fact sheet.Hand over. Tell the user, in plain words:
- where the file is (full path);
- the page count against the limit;
- one thing to check by eye (for example "open it and check the table on page 3").
For a file the user must approve, add a task, unless the skill that called you already adds one (
/jobs applyand/assignment shipdo):node system/scripts/tasks.mjs add "Review <document name>" --tag render --link "<vault-relative path to the source>"Nothing is ever sent or uploaded from here.Final version (the user says it is final, or
/assignment ship,/jobs apply): run the delivery gate,system/deliverables/delivery-gate.md, before you hand over. Then offer/critiqueonce (not for routine emails or messages). For a deck the user has approved, offer the rehearsal pack once (system/deliverables/rehearsal.md).
Outputs
- A PDF (or, for decks, an HTML file and optionally a PDF) in
_out/,releases/<today>/or the folder you were given. - Edited or new source files in the folder you chose:
cv-data.yml,letter.qmd,report.qmd,deck.qmd,references.bib. - A
#ab/rendertask invault/00_inbox/Tasks.mdwhen the user needs to review the result. - No temporary files are left behind. The tool removes the copies it makes.
Safety
- Draft only. This skill makes files. It never emails, uploads, submits or shares them.
- No invented facts. A CV or letter contains only what is in the user's own files or what they confirmed in this conversation. Label anything uncertain
[Unverified]in the chat and leave it out of the document until the user confirms. - Never edit the user's note, raw sources or
vault/40_sources/raw/. Render works on copies. - Never shrink the font, margins or spacing below the brief to hit a page limit. If the brief does not allow it, cut words and say so.
- Coursework. Whether AI help is allowed on an assignment is handled by
/assignment(the notice and the user's consent). Do not repeat or record it here. Ifassignment.mdshows a course withai_policyofrestricted,bannedorunknownand the user has not been warned, say so once and hand back to/assignment. - No secrets, no real people in templates. Never put anything private into
system/quarto/. That folder is shared framework code. User data lives in the vault. - Do not change framework files.
system/quarto/**is protected. Make the user's documents in the vault.