CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

scrape

Finds new job postings matching your profile via installed portal-search CLIs (LinkedIn, local job boards, and any skills added with /add-portal). Deduplicates across runs. Triggers on: job scrape, find jobs, search jobs, new jobs, job search, scrape jobs, /scrape

67

Quality

84%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

SKILL.md
Quality
Evals
Security

Quality

Content

77%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

An operationally excellent skill: every step is executable with real commands, exact schemas, and unusually thorough validation and failure-mode handling for a batch scraping workflow. Its weaknesses are length — several paragraphs argue for design decisions instead of instructing, and /rank interop documentation is inlined — and reliance on referenced files (search-queries.md, tools/) that are not present in this bundle.

Suggestions

Trim the design-rationale prose in Step 4 (the freehire-search anecdote, the source/portal-field justifications) to one-line rules stating what to do; move the full /rank schema-extension and field-evolution documentation to a reference file and keep only the fields this skill writes.

Ship the referenced files in the bundle or inline the essential search strategy: Step 0 and Step 1 both point to search-queries.md, which does not exist next to this SKILL.md — at minimum deduplicate the two identical instructions.

Consolidate the accreted sub-steps (2.5, 4.5, 4.75) into a renumbered main sequence or move the health-check procedure to its own reference so the core scrape pipeline reads linearly.

DimensionReasoningScore

Conciseness

The body is dense with genuine non-obvious operational knowledge (ghost-job detection, fragment URLs, rate-limits-are-not-breakage), but several long paragraphs justify design decisions rather than instruct — e.g. the posted_date rationale recounting "a freehire-search posting dated 2024-05-13 was scraped and ranked Strong Fit at position 1 of 133, its own scoring note observing the listing 'may be long stale'", and the source-field paragraph's "a presented job with no entry here at all points at fabrication, which Rule 1 forbids". This is 'mostly efficient but includes some unnecessary explanation or could be tightened' (anchor 3), not anchor 4 — the rationale prose is substantial and repeated, and Step 0/Step 1 open with the identical instruction to read search-queries.md.

3 / 5

Actionability

Guidance is fully executable throughout: copy-paste commands ("python3 tools/scrape_state.py candidates --results \"<temporary search results.json>\"", "python3 tools/job_key.py --company ... --title ... --url ..."), an exact stored-entry JSON schema, concrete LinkedIn URL templates with encoding and origin parameters, and explicit per-step decision rules. Where exact flags vary, it correctly defers to each portal's documented SKILL.md rather than guessing, and the specific example outputs ("skipped (disabled):", "health:" lines) cover the common cases — matching anchor 5.

5 / 5

Workflow Clarity

Steps 0 through 6 are clearly sequenced with explicit validation checkpoints and feedback loops despite being a batch operation: the candidates command rechecks dedup before any detail fetch, malformed hits are reported and skipped, failed CLIs log-and-continue, and the health check escalates through a bounded probe/retry loop with verdicts ("Only then is the verdict broken... A 429 or block page is never evidence of breakage"). The 'Important Rules' section acts as a closing checklist. This matches anchor 5 ('clear sequence with explicit validation steps; feedback loops for error recovery; checklists') — the batch-operation cap at 3 does not apply since validation is pervasive.

5 / 5

Progressive Disclosure

References are clearly signaled when made ("Read `search-queries.md` (this directory) for the search strategy"; per-portal SKILL.md files; `.claude/skills/job-application-assistant/09-web-research.md`), but no bundle files ship alongside this SKILL.md — search-queries.md and tools/ are absent from the bundle, so the primary search strategy is not actually reachable here. Additionally, substantial material that belongs in a reference file is inlined: the full /rank schema-extension documentation (rank_score, rank_verdict, veto fields, legacy-field migration notes) and the deadline/posted_date field-evolution prose run for many lines inside Step 4, and step numbers accrete (4.5, 4.75) rather than reorganizing. This is anchor 3 ('some structure... content that should be separate is inline'), not anchor 4's 'most content appropriately placed'.

3 / 5

Total

16

/

20

Passed

Description

87%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong description: it states what the skill does, how (portal-search CLIs plus /add-portal extensibility), and when, with seven explicit natural-language triggers. The only weakness is slightly incomplete action coverage and a few missing natural trigger phrases.

DimensionReasoningScore

Specificity

The description names concrete actions ("Finds new job postings matching your profile", "Deduplicates across runs") and the exact mechanism ("installed portal-search CLIs (LinkedIn, local job boards...)") with only minor gaps — fit assessment, health checks, and referral-link generation are unmentioned. It lists several specific actions but is not comprehensive, matching anchor 4 rather than anchor 3 (it goes beyond 1-2 generic actions with a named mechanism) and falling short of anchor 5's full coverage.

4 / 5

Completeness

Both questions are explicitly answered: what ("Finds new job postings matching your profile via installed portal-search CLIs... Deduplicates across runs") and when ("Triggers on: job scrape, find jobs, search jobs, new jobs, job search, scrape jobs, /scrape") with concrete trigger phrases. This matches anchor 5 exactly; anchor 4 would require the 'when' to be less explicit, which it is not.

5 / 5

Trigger Term Quality

"Triggers on: job scrape, find jobs, search jobs, new jobs, job search, scrape jobs, /scrape" gives good keyword coverage with natural phrasings and synonym variations. A few natural terms users would say are missing ("look for jobs", "job listings", "any new positions" — a phrase the body's own Invocation section uses), so it fits anchor 4 rather than anchor 5's comprehensive coverage.

4 / 5

Distinctiveness Conflict Risk

The skill occupies a clear niche (discovering new job postings via portal CLIs) with distinct trigger phrases, minimal conflict risk — the natural triggers all describe finding/searching jobs, which would not fire a CV-writing or ranking skill. It matches anchor 5's 'clear niche with distinct triggers'.

5 / 5

Total

18

/

20

Passed

Validation

87%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 14 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

allowed_tools_field

'allowed-tools' contains unusual tool name(s)

Warning

relative_links

Relative link issues: 1 suspicious

Warning

Total

14

/

16

Passed

Repository

MadsLorentzen/ai-job-search

Path

.claude/skills/job-scraper/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.