* fix: move scoped permissions to settings.json, drop curl, untrack settings.local.json Addresses #23: - Remove pre-approved Bash(curl:*) - no agent workflow uses curl, and a toolkit that routinely feeds untrusted job postings to the model should not ship a pre-approved exfiltration-capable command - Move shared permissions to .claude/settings.json (committed by convention) and scope them tighter: Bash(bun run:*) for the job portal CLIs, Bash(python/python3 salary_lookup.py:*) for salary lookups - Untrack .claude/settings.local.json - it was committed despite being listed in .gitignore; the file stays local for personal overrides Reported-by: @josealfonsomora Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs(setup): warn existing cloners about stale settings.local.json Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
5.5 KiB
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):
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 for details.
Python
Python 3.10+ is required for the salary lookup tool. Check with:
python --version
Bun (for job search tools)
The Danish job portal CLIs are written in TypeScript and run with Bun:
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
- macOS: MacTeX
- Linux:
sudo apt install texlive-fullorsudo 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
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
for tool in jobbank-search jobdanmark-search jobindex-search jobnet-search; do
cd .agents/skills/$tool/cli && bun install && cd ../../../..
done
4. Run the setup interview
Start Claude Code in the repository:
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):
- Option A: Create
salary_data.jsonmanually in the repo root (seetools/README_SALARY_TOOL.mdfor the format) - Option B: Convert from Excel:
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:
- Evaluate the fit against your profile
- Ask if you want to proceed
- Draft a tailored CV and cover letter
- Have a reviewer agent critique the drafts
- Revise and present the final output
7. Compile your documents
After /apply creates the LaTeX files:
# Compile CV
cd cv && lualatex main_<company>.tex && cd ..
# Compile cover letter
cd cover_letters && xelatex cover_<company>_<role>.tex && cd ..
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 withfontawesome5font-expansion errors; lualatex handles the same sources cleanly) - Cover letter: uses
xelatex(for custom fonts inOpenFonts/fonts/) - Make sure your LaTeX distribution includes the
moderncvpackage
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):
rm .claude/settings.local.json