| name | daily-job-scan |
| description | Daily job scan — find new postings, score them, build custom resumes for roles scoring 6+ |
You are running an automated daily job scan and resume generation task for [YOUR FULL NAME] ([YOUR EMAIL]), a [SENIORITY LEVEL] [YOUR FIELD] professional actively searching for a new position.
Each run: find new job postings in your target areas, score them against fit criteria, generate a custom resume for every role scoring 6+, and present a full report including both passing and failing roles.
STEP 1: LOAD CONTEXT
Read these files before doing anything else:
- ~/Claude-Cowork-Workspace/context/about-me.md — full career history, certifications, skills
- ~/Claude-Cowork-Workspace/CLAUDE.md — resume building rules (mandatory)
- ~/Claude-Cowork-Workspace/memory/context/job-pipeline.md — current applications (for de-duplication)
- ~/Claude-Cowork-Workspace/memory/working-memory.md — compensation context, geography rules
STEP 2: SEARCH FOR NEW ROLES
Use Claude in Chrome (mcp__Claude_in_Chrome__tabs_context_mcp to get or create a tab) for LinkedIn searches. Run all searches below and collect every unique result.
LOCAL SEARCHES — Within [X] miles of [YOUR CITY], all work types, posted last 24 hours:
Search A — [PRIMARY ROLE TYPE]:
https://www.linkedin.com/jobs/search/?keywords=[KEYWORDS_A]&location=[YOUR_CITY_ENCODED]&distance=[MILES]&f_TPR=r86400&sortBy=R
Search B — [SECONDARY ROLE TYPE]:
https://www.linkedin.com/jobs/search/?keywords=[KEYWORDS_B]&location=[YOUR_CITY_ENCODED]&distance=[MILES]&f_TPR=r86400&sortBy=R
Search C — [TERTIARY ROLE TYPE]:
https://www.linkedin.com/jobs/search/?keywords=[KEYWORDS_C]&location=[YOUR_CITY_ENCODED]&distance=[MILES]&f_TPR=r86400&sortBy=R
NATIONAL REMOTE SEARCHES — Remote only (f_WT=2), posted last 24 hours:
Search D — [REMOTE ROLE TYPE 1]:
https://www.linkedin.com/jobs/search/?keywords=[KEYWORDS_D]&f_WT=2&f_TPR=r86400&sortBy=R
Search E — [REMOTE ROLE TYPE 2]:
https://www.linkedin.com/jobs/search/?keywords=[KEYWORDS_E]&f_WT=2&f_TPR=r86400&sortBy=R
Search F — [REMOTE ROLE TYPE 3]:
https://www.linkedin.com/jobs/search/?keywords=[KEYWORDS_F]&f_WT=2&f_TPR=r86400&sortBy=R
Also run a WebSearch: "[YOUR KEY TITLE KEYWORDS]" site:boards.greenhouse.io OR site:jobs.lever.co OR site:myworkdayjobs.com remote 2026
CUSTOMIZATION NOTE: Replace [KEYWORDS_X] with URL-encoded search terms. Spaces become %20, quotes become %22.
Examples:
- "security architect" → security%20architect
- "head of engineering" → %22head%20of%20engineering%22
De-duplicate all results. Remove clearly off-lane titles (define your own exclusions below):
- [EXCLUSION 1 — e.g., "Analyst (non-senior, non-architect)"]
- [EXCLUSION 2 — e.g., "Recruiter / HR roles"]
- [EXCLUSION 3 — e.g., "Sales / pre-sales / solutions engineer"]
Check ~/Claude-Cowork-Workspace/Resume/Hunt/Applied Companies/ — if a company subfolder already exists, note "ALREADY APPLIED" but still include the role in scoring.
STEP 3: SCORE EACH ROLE (1–10 scale)
Start at 5. Adjust up or down:
Role type:
+3 = [YOUR TOP TARGET ROLE — e.g., VP Engineering, Head of Product, Principal Architect]
+3 = [SECOND TOP TARGET — e.g., Director at growth-stage company]
+2 = [GOOD FIT ROLE — e.g., Staff-level IC, Senior Director at enterprise]
+1 = [DECENT FIT — e.g., Senior Manager with path to Director]
-1 = [SLIGHT MISMATCH — e.g., Consulting/advisory role]
-2 = [SIGNIFICANT MISMATCH — e.g., Manager without Director path]
-3 = [WRONG LEVEL — e.g., IC contributor, no leadership scope]
Fit signals:
+1 = [PREFERRED INDUSTRY 1 — e.g., FinTech, AI/ML, SaaS]
+1 = [PREFERRED INDUSTRY 2]
+1 = [LOCAL BONUS — within [Y] miles of home]
+1 = [YOUR KEY CREDENTIAL explicitly listed as preferred]
Red flags (reduce score):
-2 = [HARD SKILL GAP 1 — e.g., requires specific tool you don't have]
-2 = [INDUSTRY MISMATCH — e.g., automotive, hardware]
-2 = Posted comp range tops out below $[YOUR_COMP_FLOOR] base (flag as COMP MISS)
Cap at 10, floor at 1.
Record score AND primary reason for score (one phrase) for every role, regardless of score.
STEP 4: FOR EACH ROLE SCORING 6+, GENERATE A CUSTOM RESUME
Do this for every 6+ role, in sequence.
4a. Get the full job description, verify the posting is active, and capture the application URL
Navigate to the job posting URL in Chrome and use get_page_text to extract the full JD.
Verify the posting is still active before building a resume. A posting is NOT active if:
- The page returns a 404 or "job no longer exists" message
- The page says "No longer accepting applications"
- The ATS page is empty or redirects to a generic jobs page
If the posting is inactive, skip resume generation and note "POSTING EXPIRED" in the report.
Capture the direct application URL — required in the final report. Priority:
- The "Apply" button destination (Greenhouse, Lever, Workday, company ATS)
- The job posting page URL itself
- LinkedIn job view URL if company is confidential
4b. Read base resumes
pandoc ~/Claude-Cowork-Workspace/Resume/[YourName]_Resume_[Variant1].docx -t plain
pandoc ~/Claude-Cowork-Workspace/Resume/[YourName]_Resume_[Variant2].docx -t plain
4c. Synthesize and build resume
Select the most appropriate base resume for the role type. Tailor it to the JD by:
- Adjusting the summary to match the role's language and focus
- Reordering bullet points to lead with most relevant accomplishments
- Mirroring key terms from the JD (for ATS matching)
- Adjusting the title line to match the role's language
Build the resume as a Node.js docx-js script:
- NODE_PATH=/usr/local/lib/node_modules_global/lib/node_modules
- US Letter: width 12240, height 15840 DXA; margins 1080 DXA all sides
- Font: Arial, 20pt body (= 10pt — docx size is in half-points)
- NEVER use Unicode bullets — use LevelFormat.BULLET with Word numbering config, text: "-"
- No tables, no headers, no footers
- Tab stops for right-aligned dates: position 10080
- Section headers: bold 22pt (= 11pt) navy (#1F3864) with bottom border
- Title line matches JD role title language
- Contact line: [YOUR_PHONE] | [YOUR_EMAIL] | linkedin.com/in/[YOUR_LINKEDIN]
- Use "--" instead of em dashes
- Output: ~/Claude-Cowork-Workspace/Resume/[YourName]Resume{CompanyName}_{RoleAbbrev}.docx
Run and validate:
cd ~/Claude-Cowork-Workspace/outputs && NODE_PATH=/usr/local/lib/node_modules_global/lib/node_modules node build_resume_{CompanyName}.js
VALIDATE_SCRIPT=$(find /sessions/*/mnt/.claude/skills/docx/scripts/office/validate.py 2>/dev/null | head -1)
python3 "$VALIDATE_SCRIPT" ~/Claude-Cowork-Workspace/Resume/[YourName]_Resume_{CompanyName}_{RoleAbbrev}.docx
4d. Cover letter
For roles scoring 8+, also generate a brief cover letter (.docx). Lead with the strongest fit narrative for that role type. Save as: [YourName]CoverLetter{CompanyName}_{RoleAbbrev}.docx
STEP 5: PRESENT RESULTS
Use mcp__cowork__present_files to present each generated resume and cover letter.
Then output the full report in this exact format:
Daily Job Scan -- {YYYY-MM-DD}
Scanned: {N} total roles | Scoring 6+: {N} | Below threshold: {N} | Resumes generated: {N}
ROLES SCORING 6+ (sorted highest to lowest)
[Score]/10 -- [Role Title] | [Company] | [City or Remote]
Comp: {posted range or "not listed"} | {On-site/Hybrid/Remote}
Apply: {direct URL}
Resume: {file path}
{Cover letter path if generated}
Fit note: {2-3 sentences on fit, any flags}
{ALREADY APPLIED if applicable}
ROLES BELOW THRESHOLD (sorted by score, highest to lowest)
| Score | Role | Company | Location | Why it didn't make it |
|---|
(Include ALL roles scanned that scored 1-5, with one-liner reason for each)
If no roles score 6+:
No new 6+ roles found today. See below-threshold list for all {N} roles scanned.
IMPORTANT CONSTRAINTS
- Do NOT apply to any roles — scan, score, and generate only
- Do NOT modify job-pipeline.md during this task — update the pipeline manually
- If Chrome is unavailable, fall back to WebSearch for all searches and note the limitation
- If docx generation fails for a role, note the error and continue with remaining roles
- Each run is independent — do not reference prior scan results
- f_TPR=r86400 (last 24 hours) is intentional — this is a daily scan, not a backfill