Commit Graph

231 Commits

Author SHA1 Message Date
f065a9a786 feat: auto-refresh Kernel Managed Auth session on login failure — ensureLoggedIn() with retry 2026-03-06 01:09:30 +00:00
4fb5917c87 fix: restore real Wellfound apply logic in lib/apply/wellfound.mjs (not a stub) 2026-03-06 01:05:35 +00:00
35fdbc487a refactor: handler registry pattern — lib/apply/<ats>.mjs, applyToJob() routes by apply_type 2026-03-06 01:03:11 +00:00
2574276a85 refactor: classify apply_type inline during search (click card → detect right panel); no second pass 2026-03-06 01:00:59 +00:00
dee6e98603 feat: searcher Phase 2 classifies apply type; applier sorts by priority; already-applied detection 2026-03-06 00:58:22 +00:00
61e0577c3c chore: add claw.json manifest, .env.example, remove node_modules symlink
Prepares the repo for ClawHub publishing:
- claw.json manifest with permissions and metadata
- .env.example for KERNEL_API_KEY
- Remove broken node_modules symlink (pointed to server path)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 16:49:01 -08:00
319b626b71 fix: gitignore all runtime data files — search_progress, last_run files 2026-03-06 00:48:50 +00:00
f9446f5bee fix: resume lookback from progress file — don't reset to 2d when queue is non-empty 2026-03-06 00:41:27 +00:00
86d00297df feat: search progress tracking — resume on restart, skip completed platform:track combinations 2026-03-06 00:37:35 +00:00
b091473735 fix: graceful shutdown — write last-run file on SIGTERM, show interrupted state in status 2026-03-06 00:35:10 +00:00
1920df51a4 feat: rich status report — searcher/applier last run time, timeAgo, per-run metadata files 2026-03-06 00:33:03 +00:00
5382e8432e feat: status.mjs — on-demand status report for searcher + applier + queue breakdown 2026-03-06 00:30:15 +00:00
b496ee4a3a feat: ATS breakdown in Telegram summary after each apply run 2026-03-06 00:27:43 +00:00
de36e5637c feat: analyze_ats shows full pipeline — easy apply, applied, external ATS breakdown 2026-03-06 00:27:03 +00:00
58c2ad5295 feat: capture external ATS URLs + analyze_ats.mjs to rank platforms by job count 2026-03-06 00:26:28 +00:00
57232a2565 chore: switch license from MIT to AGPL-3.0-or-later
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 16:23:22 -08:00
f9fa36b47c feat: flush jobs to queue per-page — no data loss on crash; live progress output 2026-03-06 00:17:33 +00:00
234820ad91 feat: lockfile to prevent parallel runs + AI keywords lib 2026-03-06 00:11:37 +00:00
282e2681aa docs: add README, update SKILL.md and SPEC.md for current state
- Full README with quick start, configuration tables, status reference,
  project structure, and roadmap
- SKILL.md updated with preview mode, retry logic, constants module
- SPEC.md updated with pagination, infinite scroll, retry flow,
  in-memory caching, config validation, and v1 checklist

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 16:10:12 -08:00
a244a5fddf chore: clean up dead code, use shared loadConfig, cache queue I/O
- Remove unused readFileSync import from job_applier.mjs
- Remove unused makeJobId (dead code, nothing imports it)
- setup.mjs: use shared loadConfig instead of inline cfg()
- queue.mjs: add in-memory cache for queue and log to avoid
  redundant disk reads during a single run

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 16:06:37 -08:00
d61ca4f54f feat: AI-generated search keywords via Claude — full profile + search config context 2026-03-06 00:04:20 +00:00
e71f940687 fix: add config validation and retry logic for failed jobs
- Add loadConfig() helper with clear errors for missing/malformed JSON
- Replace raw JSON.parse(readFileSync(...)) in both entry points
- Track retry_count on jobs; re-queue as 'new' up to max_retries (default 2)
- Add max_retries and DEFAULT_MAX_RETRIES constant

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 16:03:33 -08:00
47513e8cec fix: security/bug fixes, extract constants, remove magic values
- Remove random suffix from Wellfound job IDs (broke dedup)
- Add null coalescing to all profile field returns in form_filler
- Fix honeypot case referencing nonexistent results.skipped counter
- Remove unused makeJobId import from linkedin.mjs
- Navigate directly to job URL instead of search+click in linkedin apply
- Add Telegram notification rate limiting (1.5s between sends)
- Replace Mode B blocking sleep with --preview flag
- Add max_applications_per_run enforcement
- Remove tracked search_config.json (keep .example.json only)
- Add search_config.json to .gitignore, fix duplicate node_modules entry
- Extract all magic numbers/strings to lib/constants.mjs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 16:01:42 -08:00
8bc9af14c4 fix: paginate LinkedIn results (click next page), scroll Wellfound infinite scroll 2026-03-05 23:49:40 +00:00
9758faf6d6 fix: remove node_modules symlink 2026-03-05 23:44:23 +00:00
675697b990 feat: granular skip statuses — recruiter_only, external_unsupported, easy_apply_unsupported
Queue preserves all jobs for future reprocessing as capabilities expand.
Applier summary breaks down skips by type.
2026-03-05 23:44:19 +00:00
11cb80c942 fix: remove node_modules from git 2026-03-05 23:38:26 +00:00
cb7a401aff feat: first_run_days config — defaults to 90 days on first run, then posted_within_days after 2026-03-05 23:38:21 +00:00
931112e7cf security: gitignore credentials, add .example.json templates 2026-03-05 23:30:36 +00:00
52a56f59f6 feat: claw-apply v0.1 — full implementation
- job_searcher.mjs: LinkedIn + Wellfound search, queue population
- job_applier.mjs: Easy Apply + Wellfound apply, Mode A/B
- lib/form_filler.mjs: config-driven form filling, custom answers.json
- lib/linkedin.mjs: two-panel Easy Apply flow
- lib/wellfound.mjs: Wellfound search + apply
- lib/browser.mjs: Kernel stealth browser factory with local fallback
- lib/queue.mjs: jobs_queue.json management
- lib/notify.mjs: Telegram notifications
- setup.mjs: setup wizard with login verification
- Config templates: profile, search_config, answers, settings
- SKILL.md: OpenClaw skill definition
2026-03-05 23:24:09 +00:00
2056a05429 Initial commit — claw-apply spec v0.1 2026-03-05 23:19:18 +00:00