External Co-op Search
Overview
Find public external job leads, verify current availability where possible, score them against the candidate's private config, and save only useful new leads into the private job queue.
This skill owns discovery and prioritization, not employer-portal execution. Use $ats-resume-tailor for concrete resume packages, $external-coop-apply for accounts/login/upload/staging/final-submit handoff, and $oscarplus-coop-apply only for university portal records or submissions.
Boundaries
- Do not operate employer portal accounts, login, credential retrieval, file upload, CAPTCHA/2FA handoff, or final submit from this skill.
- Do not browse or inspect credential stores, cookies, browser storage, or session files.
- Prefer official company careers pages. Use public mirrors only for discovery or when the official page is unavailable; mark mirror-only leads
manual-company-check.
- Do not assume full-time, trainee, new-grad, or technician roles count as co-op. Mark
manual-review until paid full-time duration, dates, and employer documentation are clear.
- Preserve existing queue data. Append useful new external leads only; do not rewrite, delete, or reorder unrelated entries.
- Use the candidate's preferred language from
career-config.json for summaries.
Private Sources
Read these from private career-config.json:
paths.jobQueue
paths.resumeSystem
paths.resumeSummary
paths.jobLeadsDir
- optional job-search email policy, only if the user explicitly authorizes mailbox use in the current task
Load references only when relevant:
references/domains-software-data.md
references/domains-ml-ai-data.md
references/domains-data-center-infra.md
references/domains-industrial-automation-ot.md
references/domains-energy-utilities.md
references/employer-watchlist.md
references/search-queries.md
Workflow
Establish scope.
- Default to the term, geography, target roles, and resume lanes in config.
- If scope is missing, infer conservatively from the user's request and note assumptions.
De-duplicate before searching deeply.
- Read existing queue IDs, source URLs, companies, roles, and statuses.
- Treat same company + similar title + same city as likely duplicate.
- Use
scripts/normalize_external_lead.ps1 for pasted leads or stable IDs.
Search and verify public sources.
- Use official careers pages first.
- Use public mirrors only to discover leads or fill missing details.
- If availability cannot be verified on the official page, keep only as
manual-review, lead-inbox, or watch-only.
Hard-gate before scoring.
- Mark
skip for expired, closed, senior-only, unpaid, unrelated, legally impossible, or clearly blocked roles.
- Mark
manual-review for unclear dates, full-time labels, work authorization, security clearance, citizenship/PR, language, relocation, driver/vehicle, heavy trade credentials, or mirror-only evidence.
- Promote hardware/facility roles only when student, intern, co-op, trainee, junior, entry-level, or paid-training compatibility is plausible.
Score and classify.
priority = resume_fit * 0.35 + co_op_legality * 0.25 + career_direction * 0.15 + salary * 0.10 + city * 0.05 + brand_or_referral * 0.10 - friction
Default thresholds:
apply-now: 4.2 or higher and no hard gate.
fit-check: 3.7 or higher with mostly clear details.
manual-review: high upside but unresolved gate.
lead-inbox: useful watch target, not ready.
watch-only: interesting but not actionable.
skip: blocked or low fit.
Use scripts/score_external_leads.ps1 for local JSON scoring when useful.
Select resume lane.
- Choose from
career-config.json.resumeLanes.
- For concrete resume editing, invoke
$ats-resume-tailor; do not rewrite resume content inside this skill.
Save only useful new leads.
- Append to
job-hunting.json.pipeline[] only when the lead is new and useful.
- Keep this object shape compatible:
{
"id": "public-<company>-<role-slug>-<location-or-requisition>-YYYYMMDD",
"company": "",
"role": "",
"date": "YYYY-MM-DD",
"status": "apply-now | fit-check | manual-review | lead-inbox | watch-only | skip",
"source": "public-company-page | public-job-board/manual-company-check",
"sourceUrl": "",
"fitScore": 4.1,
"resumeVersion": "software-data",
"hardGates": [],
"feedback": "",
"next": ""
}
External Apply Handoff
When a lead should move into execution, write next with:
$external-coop-apply
- official portal URL
- recommended resume lane
- package readiness
- unresolved hard gates
Let $external-coop-apply handle accounts, credentials, portal fields, upload staging, CAPTCHA/Cloudflare/2FA handoff, approval logs, and final submit boundaries.
Output Contract
Report:
- what was searched and which sources were official
- top leads in priority order
- company, title, location, pay if known, status, fit score, lane, URL, match reason, and hard gates
- saved path and new lead IDs, if saving
- clear separation between apply-ready, manual-review, watch-only, and skip
1---2name: external-coop-search3description: Use when finding, verifying, scoring, deduplicating, saving, and prioritizing public external co-op, internship, new-grad, or early-career leads outside the university portal. Stops at lead/package readiness and routes employer portal execution to external-coop-apply.4---56# External Co-op Search78## Overview910Find public external job leads, verify current availability where possible, score them against the candidate's private config, and save only useful new leads into the private job queue.1112This skill owns discovery and prioritization, not employer-portal execution. Use `$ats-resume-tailor` for concrete resume packages, `$external-coop-apply` for accounts/login/upload/staging/final-submit handoff, and `$oscarplus-coop-apply` only for university portal records or submissions.1314## Boundaries1516- Do not operate employer portal accounts, login, credential retrieval, file upload, CAPTCHA/2FA handoff, or final submit from this skill.17- Do not browse or inspect credential stores, cookies, browser storage, or session files.18- Prefer official company careers pages. Use public mirrors only for discovery or when the official page is unavailable; mark mirror-only leads `manual-company-check`.19- Do not assume full-time, trainee, new-grad, or technician roles count as co-op. Mark `manual-review` until paid full-time duration, dates, and employer documentation are clear.20- Preserve existing queue data. Append useful new external leads only; do not rewrite, delete, or reorder unrelated entries.21- Use the candidate's preferred language from `career-config.json` for summaries.2223## Private Sources2425Read these from private `career-config.json`:26271. `paths.jobQueue`282. `paths.resumeSystem`293. `paths.resumeSummary`304. `paths.jobLeadsDir`315. optional job-search email policy, only if the user explicitly authorizes mailbox use in the current task3233Load references only when relevant:3435- `references/domains-software-data.md`36- `references/domains-ml-ai-data.md`37- `references/domains-data-center-infra.md`38- `references/domains-industrial-automation-ot.md`39- `references/domains-energy-utilities.md`40- `references/employer-watchlist.md`41- `references/search-queries.md`4243## Workflow44451. Establish scope.46 - Default to the term, geography, target roles, and resume lanes in config.47 - If scope is missing, infer conservatively from the user's request and note assumptions.48492. De-duplicate before searching deeply.50 - Read existing queue IDs, source URLs, companies, roles, and statuses.51 - Treat same company + similar title + same city as likely duplicate.52 - Use `scripts/normalize_external_lead.ps1` for pasted leads or stable IDs.53543. Search and verify public sources.55 - Use official careers pages first.56 - Use public mirrors only to discover leads or fill missing details.57 - If availability cannot be verified on the official page, keep only as `manual-review`, `lead-inbox`, or `watch-only`.58594. Hard-gate before scoring.60 - Mark `skip` for expired, closed, senior-only, unpaid, unrelated, legally impossible, or clearly blocked roles.61 - Mark `manual-review` for unclear dates, full-time labels, work authorization, security clearance, citizenship/PR, language, relocation, driver/vehicle, heavy trade credentials, or mirror-only evidence.62 - Promote hardware/facility roles only when student, intern, co-op, trainee, junior, entry-level, or paid-training compatibility is plausible.63645. Score and classify.6566```text67priority = resume_fit * 0.35 + co_op_legality * 0.25 + career_direction * 0.15 + salary * 0.10 + city * 0.05 + brand_or_referral * 0.10 - friction68```6970Default thresholds:7172- `apply-now`: 4.2 or higher and no hard gate.73- `fit-check`: 3.7 or higher with mostly clear details.74- `manual-review`: high upside but unresolved gate.75- `lead-inbox`: useful watch target, not ready.76- `watch-only`: interesting but not actionable.77- `skip`: blocked or low fit.7879Use `scripts/score_external_leads.ps1` for local JSON scoring when useful.80816. Select resume lane.82 - Choose from `career-config.json.resumeLanes`.83 - For concrete resume editing, invoke `$ats-resume-tailor`; do not rewrite resume content inside this skill.84857. Save only useful new leads.86 - Append to `job-hunting.json.pipeline[]` only when the lead is new and useful.87 - Keep this object shape compatible:8889```json90{91 "id": "public-<company>-<role-slug>-<location-or-requisition>-YYYYMMDD",92 "company": "",93 "role": "",94 "date": "YYYY-MM-DD",95 "status": "apply-now | fit-check | manual-review | lead-inbox | watch-only | skip",96 "source": "public-company-page | public-job-board/manual-company-check",97 "sourceUrl": "",98 "fitScore": 4.1,99 "resumeVersion": "software-data",100 "hardGates": [],101 "feedback": "",102 "next": ""103}104```105106## External Apply Handoff107108When a lead should move into execution, write `next` with:109110- `$external-coop-apply`111- official portal URL112- recommended resume lane113- package readiness114- unresolved hard gates115116Let `$external-coop-apply` handle accounts, credentials, portal fields, upload staging, CAPTCHA/Cloudflare/2FA handoff, approval logs, and final submit boundaries.117118## Output Contract119120Report:121122- what was searched and which sources were official123- top leads in priority order124- company, title, location, pay if known, status, fit score, lane, URL, match reason, and hard gates125- saved path and new lead IDs, if saving126- clear separation between apply-ready, manual-review, watch-only, and skip