diff --git a/AGENTS.md b/AGENTS.md new file mode 100755 index 0000000..6434985 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,19 @@ +--- +framework_version: 1.0.0 +--- + +# Agent Guidelines: AI Job Search + +This workspace is structured to manage job search activities, scraper tools, CVs, cover letters, and interview preparation. + +## Thin-Pointer Design (Single Source of Truth) + +To prevent duplication and configuration drift across different AI agent frameworks (Claude Code, Google Antigravity, Codex, Cursor, Gemini CLI, etc.), this workspace uses a unified thin-pointer design. All agent runtimes should load the canonical specifications and candidate profiles from the files and directories below: + +1. **Personal Candidate Profile:** + - The candidate profile, contact details, education, and target preferences are defined in [CLAUDE.md](CLAUDE.md) and the individual profile methodology files under [.claude/skills/job-application-assistant/](.claude/skills/job-application-assistant/) (specifically `01-*.md` etc.). +2. **Canonical Workflow Specifications:** + - The step-by-step instructions and triggers for tasks (setup, scrape, rank, apply, upskill, interview) are defined in the [.claude/](.claude/) directory (specifically under `.claude/skills/` and `.claude/commands/`). + - Do not duplicate these rules or specifications. Treat `.claude/` files as the single source of truth. +3. **Portal Search Skills:** + - Job-portal search CLIs live under [.agents/skills/](.agents/skills/) in the portable Agent Skills format (with a `SKILL.md` per portal). Codex and Antigravity discover these automatically; the `/scrape` workflow in [.claude/skills/job-scraper/](.claude/skills/job-scraper/) orchestrates them. diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100755 index 0000000..0359da9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,893 @@ +# Changelog + +All notable changes to this project are documented here. The format is based on +[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres +to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +Releases are vetted checkpoints of `master`. If you maintain a personalized fork, +prefer updating to a tagged release over pulling raw `master` (see +[SETUP.md, section 8](SETUP.md#8-pulling-upstream-updates-into-your-fork)). The +`framework_version` markers on methodology files tell you which of your customized +files a release touched; `python3 tools/check_upstream_updates.py` lists them with +per-file diff commands. + +## [1.6.0] - 2026-08-19 + +### Added + +- **Cross-portal `/scrape` contract pin** (#344) - a repo-level test deriving the Step 2 + search-output field list (`title`, `company`, `location`, `date`, `url`) from + `job-scraper/SKILL.md`'s own contract sentence and checking every installed portal + CLI's search source for it, so a portal that quietly stops emitting a contract field + (the failure class jobnet and jobdanmark actually shipped before #339/#340) fails CI + with a clean diff instead of degrading every `/scrape` run silently. The pin survived + the #347 output-shape changes unmodified - evidence the derived-from-spec design holds. + Contributed by @oscarbol09, the invited follow-up from #342's review. +- **`freehire-search` gains `--no-description` for cheap discovery passes** - a default + search hydrates full description bodies (~73% of the payload, ~20k tokens per query) + while `/scrape` is told to pre-filter by title before reading bodies. The new flag + drops the bodies (a live 10-result search shrinks from ~58k to ~10k chars) while + keeping every other field; hydration stays the default. The API currently returns + bodies regardless of `include_description=false`, so the lean guarantee is enforced + client-side. Pinned in `tests/commands.test.ts`. +- **Fixture coverage for linkedin's date/location and jobindex's `parseSearchPage`** - + linkedin's search-card fixture carried no `