# Career Manager

AI-assisted career management pipeline built as Claude Code skills.

## Environment

- Use `uv run` to execute all Python scripts
- If `.venv/` doesn't exist: `uv venv && uv pip install -r requirements.txt`

## Script Paths

Scripts live per skill under `<skill>/scripts/` (e.g. `job-search/scripts/`, `cv-tailor/scripts/`, `evals/scripts/`), plus shared utilities in the root `scripts/`. Run from the project root with the full prefixed path:

```bash
uv run job-search/scripts/ops/run_pipeline.py phase1   # correct
uv run scripts/ops/run_pipeline.py phase1              # WRONG — will fail
```

SKILL.md files use paths relative to their skill directory. Always prefix with the skill folder.

## How This Works

- Each skill has a `SKILL.md` — read it before executing that skill
- `search-config.json` and `config.yaml` are generated by the onboarding skill — never edit pipeline scripts to change search queries or scoring
- Data ownership: `job-search/data/target-companies.csv` and `job-tracker/data/applications.csv` are sources of truth
- Never edit CSVs directly — use the tracker scripts

## First-Time Setup

If `config.yaml` doesn't exist, or `search-config.json` is still the shipped stub (`setup_required: true`), run the onboarding skill first. See README for full setup steps.

## Status Briefing

Before running workflows, the router calls `scripts/generate_briefing.py` for a status snapshot. This is automatic. Do not ask the user to run it.

## Testing

```bash
uv run python3 scripts/smoke_test.py       # verify setup
uv run python3 -m pytest evals/tests/ -v   # run test suite
```

## Provenance

This repository is exported from the maintainer's private workspace via an automated sanitization script. If you fork it, work in your fork directly — no sync step is needed.
