Releases: matochu/llm-job-tracker
Releases · matochu/llm-job-tracker
Release list
v0.4.5
Added
config/profile-resolution.md— the shared profile-resolution rule now lives in one file that skills reference, instead of being restated inline in every skill.job-tracker:importandjob-tracker:runkeep their own profile logic.migrations/0.4.5.md— registersconfig/profile-resolution.mdin theconfig/paths.mdzone list, and replaces the now-superseded inline profile-resolution wording in existingconfig/settings.mdandconfig/tracker-schema.mdwith a delegation toconfig/profile-resolution.md. The new file itself is delivered bynpx llm-job-tracker update(managed entry) or a plugin reinstall, not by this migration.
Changed
- Skill
Next actionsfooters now always print as plain Markdown (letter shortcuts + commands), and additionally callAskUserQuestionfor a clickable choice when that tool is available in the current session — plugin/npx installs running in hosts withoutAskUserQuestion(e.g. Codex) fall back to the plain-text footer instead of failing. Shortcut/free-text mapping, freshness, and confirm-before-acting rules are centralized inconfig/next-actions.md.AskUserQuestionoptions are capped at 4 per question (was documented as up to 5). config/settings.md's## Profile Rulesandconfig/tracker-schema.md's## Update Rulesno longer restate the profile-resolution logic; both defer toconfig/profile-resolution.md.job-tracker:runnow readsconfig/profile-resolution.mdfor per-stage resolution instead ofconfig/settings.md.config/profile-resolution.mdnow specifies how to find the "matching" tracked row: by URL when available, otherwise Company + Role, asking the user to disambiguate on multiple matches.
Fixed
node scripts/tracker.js move --from raw --to activeno longer throwscannot preserve columnswhen the Raw Pipeline row hasAdded/Sourcevalues and the Active Pipeline table has noNotes/Detailcolumn — those two fields are intake-only metadata and are now dropped silently instead of blocking the move. Other genuinely unmapped columns still raise the error.- That same drop no longer applies when the destination table does have a
Notes/Detailcolumn (e.g.raw→archive/monitoring):Added/Sourceare stashed there as before. The intake-metadata drop only kicks in as a last resort, when there is truly nowhere to preserve the value.
v0.4.4
Added
node scripts/tracker.js add-lead --url <url>now auto-derives theSourcecolumn fromconfig/source-registry.md— no need to pass--sourceexplicitly when adding a lead from a known job board URL.migrations/0.4.4.md— registersconfig/source-registry.mdandconfig/browser-patterns.mdin theconfig/paths.mdzone list, and updatesconfig/next-actions.mdexample footers to the slash-command form.
Changed
node scripts/ats-probe.js derive-source <url>resolves the correct trackerSourcevalue for any job URL using your workspaceconfig/source-registry.md. Falls back to the bare domain when no pattern matches. Useful for auditing source labels on existing tracker rows.job-tracker:healthbrowser-required source check is now driven by yourconfig/source-registry.mdinstead of a hardcoded list — adding a new browser-required source to the registry is enough; no script update needed. Each browser-required source must have a matching Source Derivation entry; missing entries are reported as errors (previously only Djinni was checked).- Scripts reorganized into focused modules:
scripts/ats/,scripts/tracker/,scripts/workspace/,scripts/publish/,scripts/deps/. Thin entry-point wrappers (scripts/ats-probe.js,scripts/tracker.js,scripts/check-deps.js, etc.) are preserved for backwards compatibility.
Fixed
ats-probe.jsprofile keyword loading now resolves relative to the detected workspace root instead ofprocess.cwd(), so profile hints apply correctly when the CLI is run from a subdirectory.ats-probe.js,tracker.js, andcheck-public.jsentry-point detection now resolves symlinks before comparing paths, so the CLI runs correctly when invoked through a symlinked directory (e.g. macOS/tmp->/private/tmp) instead of silently exiting with no output.ats-probe.js discovernow reports a provider whose every slug candidate failed as an error entry (count: 0,error: <reason>) instead of silently dropping it; text output prints the error reason instead of a bare zero-count row.job-tracker:healthnow requires Playwright MCP with the user's logged-in account/session for every login-gated browser-required source (detected from its "Why browser is required" column), not just a hardcoded LinkedIn/Djinni pair — closing a gap where a login-gated source without the word "Playwright" in its policy passed silently.
v0.4.3
Added
config/source-registry.md— source values, host patterns, ATS probe providers, browser-required sources such as Djinni/LinkedIn, and URL-to-Source derivation rules.migrations/0.4.3.md— seedsconfig/source-registry.mdfor existing workspaces that already completed0.4.2, and adds source-registry references to protectedstrategy/sources.mdandconfig/tracker-schema.md.- Health checks for source-registry drift:
scripts/check-workspace.jsnow verifies that configured ATS providers matchscripts/ats-probe.jsand that Djinni has both browser-required and source-derivation policy.
Changed
job-tracker:find,job-tracker:import, andjob-tracker:verifyreadconfig/source-registry.mdinstead of hardcoding provider/source policy in skill files.scripts/ats-probe.jsnow reads provider IDs, discovery feed templates, default keywords, and default locations fromconfig/source-registry.md; JavaScript keeps only provider-specific payload normalization.strategy/sources.md,config/tracker-schema.md,config/browser-patterns.md, andconfig/agent-instructions.mdnow delegate source values and browser-required source policy toconfig/source-registry.md.job-tracker:verifyliveness strategy clarified: Browser MCP on the direct job URL is the primary liveness check for tracked roles;scripts/ats-probe.jsand ATS board APIs are discovery surfaces only and must not be used as the closing signal for a specific tracked job ID.
v0.4.2
Added
scripts/ats-probe.js— reusable Node.js ATS probe for Ashby, Lever, Greenhouse, Workable, Recruitee, and SmartRecruiters. It normalizes role title/location/id/URL, filters frontend/product/fullstack/platform leads, and marks duplicates againstdata/tracker.md.scripts/tracker.js— structured Markdown tracker CLI for listing rows, adding Raw Pipeline leads, moving rows between sections, setting status, and bumping date fields without brittle text replacement.scripts/ats-probe.js discover <company-or-domain>— deterministic ATS slug discovery by probing supported provider APIs with normalized company/domain candidates.scripts/tracker.js validate,--dry-run,--json, and section-scoped row updates.- Tracker CLI schema aliases for English and Ukrainian section/field labels, documented in
config/tracker-schema.md. scripts/tracker.jsexportssetSchemaRootFromTracker()for programmatic callers that run outside the workspace cwd.config/browser-patterns.md— Browser MCP operational guide for stable evaluate calls, locator-based clicks, cookie overlays, login-required sources, and browser safety boundaries.migrations/0.4.2.md— seeds Browser MCP patterns and adds ATS probe/browser guidance to protected existing workspaces.- Tests for ATS normalization/filtering/dedupe/discovery, tracker row operations/CLI flags, and run stop-check warnings.
README.md—## Agent CLI Utilitiessection documenting ATS probe and tracker CLI commands, options, and usage patterns for agents and maintainers.
Changed
job-tracker:find,job-tracker:import, andjob-tracker:verifynow preferscripts/ats-probe.jsfor supported ATS sources before ad hoc API parsing or browser fallback.job-tracker:findandjob-tracker:importreadconfig/browser-patterns.mdat startup.job-tracker:verifyreadsconfig/browser-patterns.mdat startup and prefersscripts/ats-probe.jsfor supported ATS liveness checks before browser fallback.job-tracker:runnow explicitly prefersscripts/tracker.jsfor tracker row updates and requires profile switching throughjob-tracker:profile use.job-tracker:runcompletion rules now forbidStatus: donewhile internal queue work remains, background subagents are still running, or skipped selected leads lack tracker-recorded real reasons.job-tracker:runorchestrator enforces "tool call before text" as a hard rule when state isrunning; a text-only response is invalid unless state ispaused-resumable,blocked, ordone.Next internal step:written without an accompanying tool call is now documented as a stop-point anti-pattern.job-tracker:fitdocuments parallel batch fit-review behavior forjob-tracker:runwhen subagents are available.strategy/sources.mddocuments canonicalscripts/ats-probe.jsprobe commands in the ATS section as the preferred alternative to ad hoccurl/jqparsing.- Stop hook now warns when a
job-tracker:runresponse reportsdonewithout completion-guard evidence or mentions background/subagent work withoutpaused-resumable,Continue Run, orNext internal step:. - Stop hook generic reminders now only appear for job-tracker-like outputs, and run-done detection is scoped to
job-tracker:runcontext. scripts/llm-hooks/validate-skill-footers.jsnow checksskills/run/SKILL.mdfor required run completion guards (internal action queue is empty,no background subagent,every skipped selected lead has a reason recorded,never \done`,Continue Run`).scripts/llm-hooks/codex-rules/default.rulesusesnpm run validate:skill-footersinstead of the direct node invocation.scripts/check-workspace.jsnow loads tracker section and field aliases fromconfig/tracker-schema.mdbefore parsingdata/tracker.md, enabling localized or custom column labels without code changes.
Fixed
- Run orchestration now documents
paused-resumableas the required visible state when a turn must end while background subagent work can continue automatically. - Angular/non-React stack assumptions are explicitly forbidden as invented skip reasons unless the active profile says so.
v0.4.1
Fixed
- Preserve legacy
scripts/resume.cssduring workspace update so the next migration can move user-customized PDF CSS toscripts/cv.cssinstead of losing it beforejob-tracker:healthruns. migrations/0.4.1.mdmigrates existing workspaces fromscripts/resume.csstoscripts/cv.cssand updates the protectedconfig/paths.mdreference.
v0.4.0
Added
job-tracker:import <url>— new command: imports one job posting URL into Raw Pipeline. Verifies the posting at source (browser MCP for JS-rendered/login pages), auto-selects the best-fit profile across all configured profiles and switches to it (asking on tie), derivesSourcefrom the URL host (ashby/greenhouse/lever/linkedin/workable/etc.), and writes a per-import session report at.sessions/reports/[id].import.md. Deduplicates against existing tracker URLs and best-effort recent import reports.- Fit Rubric —
strategy/criteria.mdnow contains## Fit Rubric: a three-layer model (Hard Gates PASS/DISQUALIFIED/UNRESOLVED → six-dimension /60 fit score → Application ROI modifier), six dimensions with 1/3/5 anchors, and a per-dimension evidence matrix withUnknown → 3, never fabricaterule.skills/fit/SKILL.mdupdated to apply the rubric with Hard Gates before scoring and ROI as a recommendation modifier only. - Session report filename generalized to
[id].<skill>.md([id].run.mdfor run,[id].import.mdfor import).check-workspacenow accepts any kebab-case skill suffix; blocked import reports are not flagged as unfinished runs. migrations/0.4.0.md— three idempotent migration steps for existing workspaces: (1) add## Fit Rubrictostrategy/criteria.md, (2) update session-report path inconfig/paths.mdto[id].<skill>.md, (3) update profile-switch exception inconfig/settings.mdto name bothjob-tracker:runandjob-tracker:import.
Changed
job-tracker:importis now the second skill (besidesjob-tracker:run) allowed to switch the active profile viajob-tracker:profile use. Profile switch rules updated inskills/profile/SKILL.md,config/settings.md,README.md, andconfig/agent-instructions.mdto distinguish:runtakes a slug argument;importtakes no slug and auto-selects best-fit.config/session-reports.md: filename convention generalized; resume/Continue Run logic scoped toSkill: job-tracker:runreports only.
v0.3.2
Added
- Network source layer:
job-tracker:find networkdiscovers opportunities from local referral/contact sources, andjob-tracker:companychecks local network sources before LinkedIn contact research. data/network/as the canonical gitignored location for private contact/referral data, with committedREADME.mdand.gitkeep.Sourcecolumn for Raw Pipeline entries, includingnetworkfor leads discovered through local contact sources.migrations/0.3.2.md— createsdata/network/, adds the Raw PipelineSourcecolumn, and adds network/referral paths toconfig/paths.md.
v0.3.1
Added
- Fit score bands and apply/skip verdict thresholds in search profiles (
## Fit Score Bandsin each profile);job-tracker:fitnow outputs a structured Verdict + Recommendation based on profile thresholds (defaults: strong apply ≥45/60, apply with tailoring 35–44, low ROI <35). - Migration mechanism for protected-zone evolution: CLI seeds missing files on init and update;
job-tracker:healthapplies idempotent in-file migrations frommigrations/<version>.mdwith confirmation; version markersconfig/.installed-version(CLI) andconfig/.migrated-version(health); works in plugin and workspace mode. migrations/0.3.1.md— first migration: adds## Fit Score Bandsto existing profiles, seedscandidate/application-answers.mdin plugin mode, updatesconfig/paths.mdreferences.
Fixed
- Partial migration failure no longer bumps
config/.migrated-version; health stops on first failed step and reports the exact failure so re-runs are safe. - Seed steps skipped because source is missing are treated as failures (not satisfied); version marker is not bumped.
bin/job-tracker.js: unusedreadFileSyncimport removed;seedIfMissingEntriesnow creates parent directories before copying.
v0.3.0
Added
- Plugin distribution as a Claude Code / Cowork plugin zip, built via
npm run build:pluginand published as a GitHub release asset. - Interactive
scripts/install.jsprompt (TTY) with non-TTY default toallfor CI/npx use. - Version tracking: CLI writes
config/.installed-versionon every init/update so agents can detect and propose upgrades. - Pipeline Board section in
job-tracker:statusoutput. - PDF import step in
job-tracker:setupinteractive onboarding (step 0). - CSS customization guidance in
job-tracker:setup(step 9). - Version check step in
job-tracker:setupthat detects plugin vs workspace mode.
Changed
- Renamed all skill directories:
job-run→run,job-setup→setup, etc. Commands are now/job-tracker:run,/job-tracker:setup, and so on, consistent between plugin and npx workspace modes. - Renamed
scripts/resume.csstoscripts/cv.css; neutralized accent color and default styles so the file is a candidate-customizable starting point. style/cv-style.mdneutralized — personal style rules removed.- Plugin and npx workspace now share identical skill commands; no build-time namespace transforms needed.
- Stale skill directories (
job-*) are now pruned fromskills/,.claude/skills, and.codex/skillson update and install. updateno longer overwritesscripts/cv.css(user-customizable);initcopies it once.
Removed
scripts/resume.css(replaced byscripts/cv.css).