# INSTALL — JoF-250 Writing Engine Tested on macOS 27 (Apple Silicon), Python 3.12 via `uv`, Claude Code 2.1.317. ```bash cd ~/Desktop/UQO/Recherche/Recherche-UQO/methodes/wp45-jof250 uv venv --python 3.12 .venv && uv pip install --python .venv/bin/python -e ".[dev]" cp .env.example .env # point JOF250_ANTHROPIC_KEY_FILE to a file containing ANTHROPIC_API_KEY=… (never committed) .venv/bin/jof250 --help ``` Corpus: `config/corpus.yaml` → `corpus_root` (default `~/Desktop/Journal-of-Finance-2018-2020`, read-only). The derived artefacts are regenerated by: ```bash make audit # Phase 1 inventory + Crossref verification → data/manifests/ make parse # Phase 2 PyMuPDF structural extraction → data/derived/parsed/ (private, gitignored) make annotate # Phase 3 LLM annotation (API, budget-capped) → data/annotations/ make profiles # Phase 4 profiles + figures → profiles/*.yaml, figures/ make index # Phase 5 hybrid index → data/derived/index/ make test # pytest (synthetic fixtures only; no API calls) ``` ## Claude Code integration - Project scope (already present): `.claude/commands/jof-*.md`, `.claude/agents/jof-*.md`, `.claude/skills/jof250/SKILL.md`. Open Claude Code inside the repository and type `/jof-status`. - User scope (optional, makes `/jof-*` available in every session): `.venv/bin/jof250 install-claude-code --scope user [--force]`. It writes only `~/.claude/commands/jof-*.md`, `~/.claude/agents/jof-*.md`, `~/.claude/skills/jof250/`; it never edits `~/.claude/settings.json`. To uninstall: delete those files. - The commands call the absolute path of this repository's `.venv/bin/jof250`; if you move the repository, re-run the install command. ## Secrets and spend API key is read from `ANTHROPIC_API_KEY` or `JOF250_ANTHROPIC_KEY_FILE` (see `.env.example`). Every API call is logged to `data/annotations/api_ledger.jsonl`; `config/models.yaml: budget_usd_cap` stops further calls once reached (`jof250 status` shows spend).