mirror of
https://github.com/MadsLorentzen/ai-job-search.git
synced 2026-09-17 08:36:25 +00:00
Users could already swap the stock moderncv/cover.cls templates, but only by hand-editing the guidance in 05-cv-templates.md and 06-cover-letter-templates.md. /add-template automates that: - Interviews the user for the template's instructions: compile engine, fonts (bundled files or system), style rules to preserve, and hard page limit - Stores the template profile-agnostic ([PLACEHOLDER] tokens) under templates/ with a TEMPLATE.md manifest, so templates are safe to commit and share - Runs a mandatory test compile with dummy data before registering anything - Activates via a single managed block in 05/06, which /apply already reads, so no changes to the /apply workflow are needed; --use default is a clean revert to the stock templates - --list and --use <name> manage multiple registered templates Docs: README (commands list, file structure, LaTeX templates section) and SETUP.md (compile section pointer).
178 lines
6.0 KiB
Markdown
178 lines
6.0 KiB
Markdown
# Setup Guide
|
|
|
|
Step-by-step instructions for getting the AI Job Search framework running.
|
|
|
|
## 1. Prerequisites
|
|
|
|
### Claude Code
|
|
|
|
Install Claude Code (Anthropic's CLI for Claude):
|
|
|
|
```bash
|
|
npm install -g @anthropic-ai/claude-code
|
|
```
|
|
|
|
You'll need an Anthropic API key or a Claude Pro/Team subscription. See the [Claude Code docs](https://docs.anthropic.com/en/docs/claude-code) for details.
|
|
|
|
### Python
|
|
|
|
Python 3.10+ is required for the salary lookup tool. Check with:
|
|
|
|
```bash
|
|
python --version
|
|
```
|
|
|
|
### Bun (for job search tools)
|
|
|
|
The job portal CLIs (four Danish portals plus the country-agnostic LinkedIn tool) are written in TypeScript and run with Bun:
|
|
|
|
```bash
|
|
curl -fsSL https://bun.sh/install | bash
|
|
```
|
|
|
|
### LaTeX (for compiling CVs and cover letters)
|
|
|
|
Install a LaTeX distribution to compile the generated `.tex` files to PDF:
|
|
|
|
- **Windows:** [MiKTeX](https://miktex.org/download)
|
|
- **macOS:** [MacTeX](https://tug.org/mactex/)
|
|
- **Linux:** `sudo apt install texlive-full` or `sudo dnf install texlive-scheme-full`
|
|
|
|
The CV compiles with `lualatex` (pdflatex often fails on modern MiKTeX installs with `fontawesome5` font-expansion errors). The cover letter compiles with `xelatex` because `cover.cls` requires `fontspec` for its custom Lato/Raleway fonts.
|
|
|
|
## 2. Fork and clone
|
|
|
|
```bash
|
|
gh repo fork MadsLorentzen/ai-job-search --clone
|
|
cd ai-job-search
|
|
```
|
|
|
|
Or manually: fork on GitHub, then clone your fork.
|
|
|
|
## 3. Install job search CLI dependencies
|
|
|
|
```bash
|
|
for tool in jobbank-search jobdanmark-search jobindex-search jobnet-search linkedin-search; do
|
|
cd .agents/skills/$tool/cli && bun install && cd ../../../..
|
|
done
|
|
```
|
|
|
|
For `linkedin-search` the install is optional: it has zero runtime dependencies and runs with plain `bun`; `bun install` only pulls TypeScript dev types.
|
|
|
|
## 4. Run the setup interview
|
|
|
|
Start Claude Code in the repository:
|
|
|
|
```bash
|
|
claude
|
|
```
|
|
|
|
Then run the onboarding:
|
|
|
|
```
|
|
/setup
|
|
```
|
|
|
|
Claude will offer two paths:
|
|
|
|
- **Path A (recommended):** Share your existing CV (mention the file with `@` or paste the text). Claude extracts your information and asks follow-up questions for anything missing.
|
|
- **Path B:** Answer structured interview questions section by section.
|
|
|
|
Both paths produce the same result: fully populated profile files.
|
|
|
|
### What gets populated
|
|
|
|
| File | Content |
|
|
|------|---------|
|
|
| `CLAUDE.md` | Your full candidate profile |
|
|
| `01-candidate-profile.md` | Structured education, experience, skills |
|
|
| `02-behavioral-profile.md` | Behavioral assessment |
|
|
| `04-job-evaluation.md` | Personalized skill match areas and career goals |
|
|
| `05-cv-templates.md` | Profile statement templates for your background |
|
|
| `07-interview-prep.md` | STAR examples from your experience |
|
|
| `cv/main_example.tex` | Your LaTeX CV with actual details |
|
|
| `search-queries.md` | Job search queries for `/scrape` |
|
|
|
|
### Re-running setup
|
|
|
|
You can update specific sections later:
|
|
|
|
```
|
|
/setup --section skills
|
|
/setup --section experience
|
|
/setup --section search
|
|
```
|
|
|
|
The `--section search` option is especially useful as your priorities evolve. It re-runs the search configuration interview and suggests role types you may not have considered based on your full profile.
|
|
|
|
## 5. Optional: Set up salary benchmarking
|
|
|
|
If you have salary data (from a union, salary survey, Glassdoor, or personal research):
|
|
|
|
1. **Option A:** Create `salary_data.json` manually in the repo root (see `tools/README_SALARY_TOOL.md` for the format)
|
|
2. **Option B:** Convert from Excel:
|
|
```bash
|
|
pip install openpyxl
|
|
python tools/convert_salary_excel.py path/to/salary-data.xlsx --source "My Salary Data 2025"
|
|
```
|
|
|
|
This creates `salary_data.json` which the `/apply` workflow uses for salary benchmarking. If you skip this step, salary lookup is simply omitted.
|
|
|
|
## 6. Test the workflow
|
|
|
|
Find a job posting you're interested in, then:
|
|
|
|
```
|
|
/apply https://jobindex.dk/job/1234567
|
|
```
|
|
|
|
Or paste the job description directly:
|
|
|
|
```
|
|
/apply [paste job posting text here]
|
|
```
|
|
|
|
Claude will:
|
|
1. Evaluate the fit against your profile
|
|
2. Ask if you want to proceed
|
|
3. Draft a tailored CV and cover letter
|
|
4. Have a reviewer agent critique the drafts
|
|
5. Revise and present the final output
|
|
|
|
## 7. Compile your documents
|
|
|
|
After `/apply` creates the LaTeX files:
|
|
|
|
```bash
|
|
# Compile CV
|
|
cd cv && lualatex main_<company>.tex && cd ..
|
|
|
|
# Compile cover letter
|
|
cd cover_letters && xelatex cover_<company>_<role>.tex && cd ..
|
|
```
|
|
|
|
These commands apply to the stock templates (moderncv CV, `cover.cls` cover letter). If you'd rather use your own LaTeX template, run `/add-template` — it captures the template's compile engine, fonts, style rules, and page limit, test-compiles it, and wires it into `/apply`. See the "LaTeX templates" section in the README.
|
|
|
|
## Troubleshooting
|
|
|
|
### "salary_data.json not found"
|
|
This is expected if you haven't set up salary benchmarking. The `/apply` workflow skips this step automatically.
|
|
|
|
### Job search CLI tools not working
|
|
Make sure Bun is installed and you ran `bun install` in each CLI directory. The tools require network access to fetch job listings.
|
|
|
|
### LaTeX compilation errors
|
|
- CV: uses `lualatex` (pdflatex often fails on modern MiKTeX with `fontawesome5` font-expansion errors; lualatex handles the same sources cleanly)
|
|
- Cover letter: uses `xelatex` (for custom fonts in `OpenFonts/fonts/`)
|
|
- Make sure your LaTeX distribution includes the `moderncv` package
|
|
|
|
### Fonts not found in cover letter
|
|
The cover letter template expects fonts in `cover_letters/OpenFonts/fonts/`. Make sure this directory exists and contains the Lato and Raleway font files.
|
|
|
|
### Stale `.claude/settings.local.json` from an older clone
|
|
Shared Claude Code permissions now live in `.claude/settings.json` (scoped to `bun run` and `python salary_lookup.py`). Earlier versions of this repo committed a broader `.claude/settings.local.json` that pre-approved `Bash(curl:*)`, `Bash(python:*)` and `Bash(bun:*)`. If you cloned before that change, git leaves the old file behind in your working copy, and its permissions still apply on top of `settings.json`. Delete it (or trim it to your own personal overrides):
|
|
|
|
```bash
|
|
rm .claude/settings.local.json
|
|
```
|