recruiter-job-board-sync
Use for weekly job-board NEW/UPDATE scans and diff scripts.
- License 许可
- MIT
- 所属仓库
- zapabob/Skills
- 最近更新
- 2026-10-26
- Stars
- ★ 2
- Forks
- 0
01 前言 Front Matter
- name
- recruiter-job-board-sync
- author
- Hermes Agent
- license
- MIT
- version
- 1.0.0
- metadata
- { "hermes": { "tags": [ "recruiting", "jobs", "kanban", "diff", "snapshot" ], "category": "job-recruiter" } }
- platforms
- [ "windows", "linux", "macos" ]
- description
- Use for weekly job-board NEW/UPDATE scans and diff scripts.
03 SKILL.md 正文
Recruiter Job-Board Sync Skill
Weekly NEW / UPDATE / REMOVED diff for tracked job boards. Replaces naive "parse cache and flag unseen rows" logic, which silently reports every parsed row as new when the seen-store is empty or namespaced wrong.
This skill does NOT post, apply, or message anyone. It only produces a diff.
When to Use
- A weekly/periodic recruiter sync card asks for "new postings", "description updates", or "closed/removed" counts.
- A previous run's numbers look implausible (tens of NEW every single week).
- You are asked to fix or trust a job-scraping/diff script.
Prerequisites
- Python 3 on PATH.
- Network access to the tracked boards (HTTP GET only).
- Installed scanner:
%USERPROFILE%/Documents/ops/job-recruiter/scanner/(scan_jobs.py,selftest_scan.py,baseline/,snapshots/).
Quick Reference
python %USERPROFILE%/Documents/ops/job-recruiter/scanner/scan_jobs.py cycle
python %USERPROFILE%/Documents/ops/job-recruiter/scanner/selftest_scan.py
cycle = fetch -> parse -> report -> promote baseline.
Actions: fetch, parse, diff, report, cycle, promote.
Procedure
- Run the self-test first.
selftest_scan.pymutates a throwaway copy of the baseline and asserts add/remove/update are detected. If it does not printALL CHECKS PASSED, the diff is not trustworthy — stop and fix it. - Run
cycle. First ever run printsstate: baseline_establishedand 0/0/0 for every source. That is correct, not a failure: there is no prior snapshot to compare against. Report it as "baseline established", and do NOT invent new-posting numbers from it. - Read
added/updated/removedper source. These are keyed by the site's own stable id (URL slug), never by a slugified title. - Sanity-check the magnitude. Tens of NEW on a board that rarely posts means the parser regressed or the baseline was reset — investigate before reporting.
- Write the report to
%USERPROFILE%/Documents/ops/job-recruiter/reports/YYYY-MM-DD-recruiter.mdwith: counts per source, root cause if anything was wrong, artifacts, and an explicit "no external posting/application performed" line. - Reuse the existing kanban card. Do not create a duplicate for the same
sync period. Add a
kanban_commentwith the counts and the report path.
Pitfalls
- Never compare parsed rows against a shared/foreign seen-store. A store
holding only
gmail:*and unrelatedwebURLs makes every row new by construction. Keep per-source snapshots. - Never build diff keys from titles. Japanese titles slugify into
non-existent URLs, and HTML entities (
&) leak through. - Herp.careers changed URL scheme. The old
https://herp.careers/v1/tier4/jobs/{4-digit}now returns HTTP 400. Current canonical form ishttps://herp.careers/v1/tier4/{opaque-slug}(e.g.-ZLzb5ZwQO7t). Digits in a Herp title (1008_Planning and Control Engineer) are legacy labels, not ids. - HRMOS list cards leak non-job rows: street addresses
(
東京都港区浜松町2丁目3-1 …), counters (全 62 件中 62 件 を表示しています), bare numbers, and employment-type labels (正社員). Filter them. - A 0/0/0 diff can be real or a bug. Always run the self-test before reporting zeros, otherwise you cannot distinguish "nothing changed" from "the diff never fires".
- A missing snapshot is not a zero diff. It must surface as
no_snapshot; silently counting it as 0 hides a broken fetch. - Grepping a 300KB single-line HTML file for a long pattern can hang past the terminal timeout — parse with Python instead.
- On this host, the Security Center blocks
cd DIR && python foo.pyandpython -c. Runpython "C:/abs/path/script.py"as a standalone command.
Verification
Done only when all of these are true:
selftest_scan.pyprintsALL CHECKS PASSED.- The live run reports a per-source
stateofbaseline_establishedorcompared— neverno_snapshotfor a board you intended to scan. - Noise probes find zero matches: no
"title": "62", no東京都headings, no件中counters in the snapshot JSON. - The report states the three counts, names the artifacts, and states that no external application/posting was performed.
04 同仓库更多 Skills
xurl
X/Twitter via xurl CLI: post, search, DM, media, v2 API.
writing-plans
Write implementation plans: bite-sized tasks, paths, code.
whisper
OpenAI's general-purpose speech recognition model. Supports 99 languages, transcription, translation to English, and language identification. Six model sizes from tiny (39M params) to large (1550M params). Use for speech-to-text, podcast transcription, or multilingual audio processing. Best for robust, multilingual ASR.
weights-and-biases
W&B: log ML experiments, sweeps, model registry, dashboards.
watchers
Poll RSS, JSON APIs, and GitHub with watermark dedup.
serving-llms-vllm
vLLM: high-throughput LLM serving, OpenAI API, quantization.