Your first PDF in five steps.
This guide takes you from a fresh machine to a compiled CV and a tailored branch. Follow it in order; each step builds on the previous one.
Preview the output PDF before you start.
Prerequisites
Install all three before continuing. Open a new terminal after each installer so PATH updates take effect.
- Git
For branching, committing, and inspecting changes. git-scm.com/downloads
- Python 3.10+ and uv
uv installs and manages the VITA CLI. Install uv it can also install Python for you.
If latexmk is not found after installing LaTeX
latexmk is a Perl script that drives the LaTeX compiler. It
is not always installed automatically, even when LaTeX itself is present.
On Windows, open MiKTeX Console → Packages and install
latexmk; also install
Strawberry Perl.
On macOS, MacTeX includes it; if it is missing, install
through TeX Live Utility.
On Linux,
sudo apt install latexmk adds it separately from the base TeX
package.
After installing, open a new terminal and run
latexmk --version to confirm it resolves.
Install commands by platform
Windows (PowerShell)
winget install --id Git.Git -e --source winget
winget install --id astral-sh.uv -e
# Then install MiKTeX from https://miktex.org and Strawberry Perl from https://strawberryperl.com
# Open a new PowerShell window after installation, then verify:
Get-Command uv, git, latexmk, pdflatex, perl macOS (Terminal)
# Install Git via Xcode Command Line Tools (prompts automatically on first use)
xcode-select --install
# Install uv
curl -Ls https://astral.sh/uv/install.sh | sh
# Install MacTeX from https://www.tug.org/mactex/ then verify:
command -v uv git latexmk pdflatex perl Linux (Ubuntu / Debian)
sudo apt update
sudo apt install git texlive-latex-base texlive-latex-recommended latexmk perl
curl -Ls https://astral.sh/uv/install.sh | sh
# Open a new terminal, then verify:
command -v uv git latexmk pdflatex perl Step 1 of 5
Install VITA and open the starter
Install the CLI from the public package index:
uv tool install vita-cv
If vita is not found afterwards, run
uv tool update-shell and reopen your terminal.
Use uv tool list to confirm the installed version.
For exact version reproduction use
uv tool install vita-cv==2.0.2.
Extract the archive into a new directory. The ZIP contains a single
vita-cv-starter/ folder with five files:
main.tex, resume.cls, job.md,
README.md, and a hidden .gitignore.
Why doesn't vita init create main.tex?
vita init creates local configuration in .vita/
and initializes Git — it does not create a CV document. That is expected
behavior. The starter ZIP provides a working main.tex,
its resume.cls layout, job.md, and
.gitignore so you have something
to build immediately. Download it, extract it into your project folder,
and then run vita init.
Extract and enter the project directory:
Expand-Archive -LiteralPath .\starter.zip -DestinationPath .\my-cv
Set-Location .\my-cv\vita-cv-starter unzip starter.zip -d my-cv
cd my-cv/vita-cv-starter Then, inside the extracted folder, verify your prerequisites and initialize the project:
git --version
latexmk --version
vita init Stop and fix a missing tool before continuing.
Step 2 of 5
Configure and commit the base
Open .vita/config.json in your editor. Find the
author field and set it to jordan-lee.
This value controls the output filename; it does not change the name
inside main.tex.
"author": "jordan-lee" Leave the other generated fields unchanged. Save valid JSON.
Check that .gitignore exists and excludes .vita/
and out/:
git status --short
git check-ignore .vita/config.json .vita/.env out/check.pdf
Status should list only .gitignore, README.md,
job.md, main.tex, and resume.cls as untracked. The ignore
check should print all three paths. Never stage .vita/,
credentials, or generated PDFs.
First commit on this machine? Set your Git identity.
Git records a name and email address with every commit. If you have not
set these on this machine, the first git commit will fail
with an error asking you to configure them. Run these two commands in
your project folder first — use your own name and email:
git config user.name "Your Name"
git config user.email "you@example.com" These values are recorded in commit metadata inside this repository. They are not sent anywhere by VITA.
Commit the base CV, build the PDF, and create an application branch:
git add .gitignore main.tex resume.cls job.md README.md
git commit -m "Create base CV"
git branch -M master
vita build
vita new etp company "software engineer"
After vita build, check that out/cv-jordan-lee.pdf
exists and opens correctly — some VITA 2.0.2 failure paths return
without a nonzero exit code, so inspect the file directly.
At the vita new prompt: press Enter at
Base branch? [gen-swe]:. VITA creates the missing
gen-swe base from master, then creates and
checks out etp-company-swe. The command is interactive — it
does not change the CV content on its own.
Step 3 of 5
Tailor the CV manually
Read job.md — it describes a fictional backend Python
engineering role at a fictional company. In main.tex, find the
summary sentence and replace it:
Software engineer with experience in Python services, SQL data, automated tests, and developer documentation. Software engineer building Python HTTP APIs with SQL, input validation, and automated tests. Save the file, inspect the diff, rebuild, and commit:
git diff
vita build
Open out/cv-jordan-lee.pdf. Confirm the revised summary is
present, the document is readable, and it fits on one page. The output
filename is reused on each branch — save a separate copy if you need
to keep both PDFs. Git tracks the source, not the ignored PDF.
git add main.tex
git commit -m "Tailor CV for software engineering role"
vita diff company
vita status
git status --short vita diff company compares the committed LaTeX branch with its
base. The final Git status should be clean. Nothing in this walkthrough
uploads the CV or submits an application.
Step 4 of 5 — optional
Generate AI prompts (no account needed)
The PDF above needs no AI account. If you want suggestions, VITA can generate a prompt file you then give to any assistant yourself:
vita analyze
vita adapt
Each command writes .vita/current_prompt.md; the next
command replaces that file. Read the analysis prompt before generating
the adaptation prompt if you want both. Prompt-only mode does not
call any AI service or edit your CV — it just produces the file.
Sharing that file with an assistant sends its contents to that service.
Automatic AI: what you need to configure first
The --auto flag sends your CV content and job description
to an external AI provider. Before using it, you need: a supported
provider entry in .vita/extensions.json, a credential set
via VITA's key commands or in .vita/.env, and a model name
that is currently available to your account — do not assume default
model names remain available. Consult the
package documentation on PyPI
for configuration keys and supported providers in version 2.0.2.
Provider costs and usage limits are separate from VITA itself.
Automatic adaptation can overwrite main.tex. Always commit
a clean baseline first, then review git diff, rebuild, and
inspect the PDF before committing or sharing the output.
Step 5 of 5
Replace fictional data with your own
The starter uses Jordan Lee and a fictional company as placeholders. Before using this for a real application:
- Replace every fictional detail in
main.texwith your own accurate information. - Remove the fictional-example note at the top of the document.
- Create a new branch for your real target role using
vita new. - Review the output carefully before sending it anywhere.
Troubleshooting
-
vitais not found: runuv tool update-shell, reopen the terminal, and checkuv tool list. -
latexmkor Perl is not found: finish TeX and Perl installation, then open a new terminal so PATH updates. See the callout under Prerequisites above. - No PDF or a build error: read
out/main.logfor the LaTeX error, correct it, and rebuild. Check for a newly generated PDF directly — some 2.0.2 failure paths return without a nonzero exit code. - Changes appear in the wrong branch: run
git branch --show-currentbefore editing. Start from a clean committed base. - No differences in
vita diff: commit the intended changes first. Usegit diffto inspect unstaged edits. - Unexpected files in Git status: check that the extracted
hidden
.gitignoreis present. Never commit.vita/or API keys. - Still stuck? Open an issue on GitHub — include your platform, VITA version, and relevant log lines. Remove CV details, API keys, and other personal information before posting.