OSCARplus Co-op Apply
Purpose
Prepare university co-op portal applications end to end without losing control of high-consequence actions. This skill coordinates priority sorting, posting extraction, resume tailoring, PDF/layout QA, package creation, upload staging, multi-thread handoffs, and final approval.
This skill is an orchestrator. Do not duplicate resume-tailoring logic from $ats-resume-tailor; route JD analysis, ATS keywords, truthfulness checks, and resume edits to that skill.
Non-Negotiable Boundaries
- Never submit a university portal application without explicit user approval in the current thread.
- Never store, request, inspect, or infer university portal credentials, school SSO credentials, cookies, local storage, passwords, or session files.
- Do not bypass CAPTCHA, 2FA, login checks, SSO checks, or site access controls.
- If the user authorizes login navigation, it is allowed to click the normal portal login entry. Stop before password, OTP, CAPTCHA, authenticator, consent, or security prompt steps that require user action.
- Use portal browsing only for authorized posting extraction, document upload staging, review-page handoff, and final-submit handoff.
- If a portal posting points to an external employer site, capture portal evidence and required documents, then route employer-side account/login/upload/staging work to
$external-coop-apply.
- Avoid duplicate tabs. Reuse the newest matching tab or current controlled tab when possible; if duplicates make state ambiguous, stop and ask for tab cleanup or a unique fresh tab.
- Do not repeatedly fight native file choosers. If direct browser upload is unavailable, copy/show the approved file path and let the user perform the file-picker step.
- Stop if the portal asks custom questions, rejects a file, changes required documents, or shows a warning.
- The final action must be one of
approve-to-submit, revise, or skip. There is no fully automatic final-submission mode.
Operating Modes
dry-run: rank postings, create skeletons, and identify next actions; do not upload or submit.
prepare: extract JD, tailor materials, run layout QA, and stop with package approval request.
upload-stage: stage approved files and stop on review/submit page.
submit-handoff: ask for final approval and click submit only after approval in the current thread.
controller: manage a batch and hand off jobs to worker threads. See docs/OSCAR_MULTI_THREAD_PLAYBOOK.md in the template repo.
Private Sources
Read from private career-config.json:
- current user-provided posting IDs, company names, deadlines, salary, or priorities
paths.jobQueue
- existing packages under
paths.oscarApplicationsDir
paths.applicationFormDefaults, only for ordinary non-secret defaults
- live portal pages, only when the user is authorized
$ats-resume-tailor private resume sources
Priority Model
Use deterministic sorting before opening many pages:
fit: existing score or rubric fit.
salary: visible hourly pay/stipend; unknown salary is neutral.
deadline: earlier deadlines get a stronger boost.
lane: priority-apply > backup-apply > interview-practice.
friction: missing docs, cover letter, custom questions, work authorization ambiguity, location friction, or hard gates.
Recommended weight:
priority = fit * 0.45 + salary * 0.20 + deadline_urgency * 0.25 + lane_boost * 0.10 - friction
Deadline overrides:
- Due today or tomorrow: raise to the current batch unless clearly skip.
- Expired or same-day deadline already passed: mark
manual-check-required.
- Hard gate failure: mark
manual-review or skip even when the score is high.
Use scripts/score_oscar_queue.ps1 to rank a local queue when useful.
Multi-Thread Controller Rules
When the user asks to run multiple Codex threads:
- Act as the controller thread.
- Create or refresh package skeletons before assigning work.
- Give each worker exactly one package and one next action.
- Require each worker to return the handoff contract:
Job id:
Company:
Role:
Package path:
Files changed:
Current status:
Blocker:
Next action:
Final submit clicked: no
Secrets logged: no
- Only one worker may edit a package at a time.
- The controller owns batch priority, final decisions, and final-submit approval cadence.
- If two workers touch the same file, stop and reconcile before continuing.
Maintain a controller ledger in the batch notes or controller thread summary:
Job id | Company | Role | Package path | Owner thread | Status | Blocker | Next action | Last verified
Use the ledger to avoid duplicate work. A worker may prepare a package, but only the controller moves a job into upload/final-approval priority.
Approval Cadence
Every application needs final approval. Higher priority jobs should get more checkpoints:
| Priority |
Checkpoints |
| High |
approve target selection; approve fit/gate verdict; approve tailored package after layout QA; approve upload staging; approve final submit |
| Medium |
approve fit/gate verdict; approve final package; approve final submit |
| Low |
batch-prepare allowed; approve any upload; approve final submit |
Do not compress or skip the final-submit approval. The final approval question must name the portal, company, role, posting ID when available, and visible final button label.
Workflow
Build the candidate batch.
- Read user-provided IDs first; otherwise read the private queue.
- Sort by fit, salary, deadline, lane, and friction.
- Present the next batch with priority class, deadline, and approval checkpoints.
Create or refresh each package.
- Use
scripts/init_application_package.ps1.
- Use a folder under
paths.oscarApplicationsDir.
Extract the posting.
- Use authorized browser access or pasted content.
- Save visible JD text to
JD.md.
- Save metadata to
posting.json when available: posting ID, company, role, deadline, salary, location, term, required documents, source URL, extraction timestamp.
- If access fails, mark
manual-check-required and continue only with pasted/local content.
Invoke $ats-resume-tailor.
- Require fit/gate verdict, keyword map, resume change summary, truthfulness notes, resume edit plan, and submit checklist.
- Write outputs into package files.
Produce materials.
- Use the selected resume lane from config.
- Keep resumes truth-bound, text-selectable, and layout-checked.
- Keep employer-facing filenames short.
- If a cover letter, transcript, or extra document is required, flag for approval.
Stage upload only after package approval.
- Upload only approved files.
- If final submission happens on an external employer portal, route to
$external-coop-apply.
- For manual upload handoff, give the exact upload control/page, approved absolute file path, a visible tab cue when duplicate tabs exist, and the next user action.
- Do not overwrite the clipboard with a URL after copying an upload file path unless the user asks; keep the clipboard useful for the native file picker.
- Manual upload handoff covers only the file-picker step. After the user says the file is uploaded, reclaim or inspect the same page, verify the visible uploaded filename/state, then continue to the next/review page.
- If browser control cannot verify the uploaded state after a user handoff, mark
upload-staged plus verification-needed instead of claiming the upload is complete.
- Stop on the review/submit page and ask for final approval.
Final submission.
- Ask explicitly whether the user approves final submission for the exact posting.
- Only click submit after current-thread approval.
- Save non-secret confirmation text/screenshot and update local package status.
Package Contract
Each package should contain:
<postingId>-<company-slug>-<role-slug>\
posting.json
JD.md
priority.json
fit-gate-verdict.md
keyword-map.md
resume-change-summary.md
truthfulness-notes.md
submit-checklist.md
prep-notes.md
approval-log.md
resume\
source.*
archive\
cover-letter\
layout-qa\
chrome-evidence\
submission\
Status Values
queued
jd-extracted
tailored
layout-pass
layout-revise
package-approved
manual-upload-needed
upload-staged
final-approval-needed
submitted
manual-review
skip
verification-needed
chrome-plugin-blocked
User-Facing Response Contract
Report:
- current batch and priority order
- extracted posting facts and missing details
- resume lane and PDF/layout status
- main resume changes and unsupported JD terms not forced
- checkpoints waiting for approval
- exact private package paths for completed materials
- whether final submit was clicked
1---2name: oscarplus-coop-apply3description: Use as the main controller for university co-op portal applications, OSCARplus-style posting IDs, local job queues, application package creation, resume-tailoring handoffs, upload staging, multi-thread coordination, and strict final-submit approval.4---56# OSCARplus Co-op Apply78## Purpose910Prepare university co-op portal applications end to end without losing control of high-consequence actions. This skill coordinates priority sorting, posting extraction, resume tailoring, PDF/layout QA, package creation, upload staging, multi-thread handoffs, and final approval.1112This skill is an orchestrator. Do not duplicate resume-tailoring logic from `$ats-resume-tailor`; route JD analysis, ATS keywords, truthfulness checks, and resume edits to that skill.1314## Non-Negotiable Boundaries1516- Never submit a university portal application without explicit user approval in the current thread.17- Never store, request, inspect, or infer university portal credentials, school SSO credentials, cookies, local storage, passwords, or session files.18- Do not bypass CAPTCHA, 2FA, login checks, SSO checks, or site access controls.19- If the user authorizes login navigation, it is allowed to click the normal portal login entry. Stop before password, OTP, CAPTCHA, authenticator, consent, or security prompt steps that require user action.20- Use portal browsing only for authorized posting extraction, document upload staging, review-page handoff, and final-submit handoff.21- If a portal posting points to an external employer site, capture portal evidence and required documents, then route employer-side account/login/upload/staging work to `$external-coop-apply`.22- Avoid duplicate tabs. Reuse the newest matching tab or current controlled tab when possible; if duplicates make state ambiguous, stop and ask for tab cleanup or a unique fresh tab.23- Do not repeatedly fight native file choosers. If direct browser upload is unavailable, copy/show the approved file path and let the user perform the file-picker step.24- Stop if the portal asks custom questions, rejects a file, changes required documents, or shows a warning.25- The final action must be one of `approve-to-submit`, `revise`, or `skip`. There is no fully automatic final-submission mode.2627## Operating Modes2829- `dry-run`: rank postings, create skeletons, and identify next actions; do not upload or submit.30- `prepare`: extract JD, tailor materials, run layout QA, and stop with package approval request.31- `upload-stage`: stage approved files and stop on review/submit page.32- `submit-handoff`: ask for final approval and click submit only after approval in the current thread.33- `controller`: manage a batch and hand off jobs to worker threads. See `docs/OSCAR_MULTI_THREAD_PLAYBOOK.md` in the template repo.3435## Private Sources3637Read from private `career-config.json`:38391. current user-provided posting IDs, company names, deadlines, salary, or priorities402. `paths.jobQueue`413. existing packages under `paths.oscarApplicationsDir`424. `paths.applicationFormDefaults`, only for ordinary non-secret defaults435. live portal pages, only when the user is authorized446. `$ats-resume-tailor` private resume sources4546## Priority Model4748Use deterministic sorting before opening many pages:4950- `fit`: existing score or rubric fit.51- `salary`: visible hourly pay/stipend; unknown salary is neutral.52- `deadline`: earlier deadlines get a stronger boost.53- `lane`: priority-apply > backup-apply > interview-practice.54- `friction`: missing docs, cover letter, custom questions, work authorization ambiguity, location friction, or hard gates.5556Recommended weight:5758```text59priority = fit * 0.45 + salary * 0.20 + deadline_urgency * 0.25 + lane_boost * 0.10 - friction60```6162Deadline overrides:6364- Due today or tomorrow: raise to the current batch unless clearly skip.65- Expired or same-day deadline already passed: mark `manual-check-required`.66- Hard gate failure: mark `manual-review` or `skip` even when the score is high.6768Use `scripts/score_oscar_queue.ps1` to rank a local queue when useful.6970## Multi-Thread Controller Rules7172When the user asks to run multiple Codex threads:73741. Act as the controller thread.752. Create or refresh package skeletons before assigning work.763. Give each worker exactly one package and one next action.774. Require each worker to return the handoff contract:7879```text80Job id:81Company:82Role:83Package path:84Files changed:85Current status:86Blocker:87Next action:88Final submit clicked: no89Secrets logged: no90```91925. Only one worker may edit a package at a time.936. The controller owns batch priority, final decisions, and final-submit approval cadence.947. If two workers touch the same file, stop and reconcile before continuing.9596Maintain a controller ledger in the batch notes or controller thread summary:9798```text99Job id | Company | Role | Package path | Owner thread | Status | Blocker | Next action | Last verified100```101102Use the ledger to avoid duplicate work. A worker may prepare a package, but only the controller moves a job into upload/final-approval priority.103104## Approval Cadence105106Every application needs final approval. Higher priority jobs should get more checkpoints:107108| Priority | Checkpoints |109|---|---|110| High | approve target selection; approve fit/gate verdict; approve tailored package after layout QA; approve upload staging; approve final submit |111| Medium | approve fit/gate verdict; approve final package; approve final submit |112| Low | batch-prepare allowed; approve any upload; approve final submit |113114Do not compress or skip the final-submit approval. The final approval question must name the portal, company, role, posting ID when available, and visible final button label.115116## Workflow1171181. Build the candidate batch.119 - Read user-provided IDs first; otherwise read the private queue.120 - Sort by fit, salary, deadline, lane, and friction.121 - Present the next batch with priority class, deadline, and approval checkpoints.1221232. Create or refresh each package.124 - Use `scripts/init_application_package.ps1`.125 - Use a folder under `paths.oscarApplicationsDir`.1261273. Extract the posting.128 - Use authorized browser access or pasted content.129 - Save visible JD text to `JD.md`.130 - Save metadata to `posting.json` when available: posting ID, company, role, deadline, salary, location, term, required documents, source URL, extraction timestamp.131 - If access fails, mark `manual-check-required` and continue only with pasted/local content.1321334. Invoke `$ats-resume-tailor`.134 - Require fit/gate verdict, keyword map, resume change summary, truthfulness notes, resume edit plan, and submit checklist.135 - Write outputs into package files.1361375. Produce materials.138 - Use the selected resume lane from config.139 - Keep resumes truth-bound, text-selectable, and layout-checked.140 - Keep employer-facing filenames short.141 - If a cover letter, transcript, or extra document is required, flag for approval.1421436. Stage upload only after package approval.144 - Upload only approved files.145 - If final submission happens on an external employer portal, route to `$external-coop-apply`.146 - For manual upload handoff, give the exact upload control/page, approved absolute file path, a visible tab cue when duplicate tabs exist, and the next user action.147 - Do not overwrite the clipboard with a URL after copying an upload file path unless the user asks; keep the clipboard useful for the native file picker.148 - Manual upload handoff covers only the file-picker step. After the user says the file is uploaded, reclaim or inspect the same page, verify the visible uploaded filename/state, then continue to the next/review page.149 - If browser control cannot verify the uploaded state after a user handoff, mark `upload-staged` plus `verification-needed` instead of claiming the upload is complete.150 - Stop on the review/submit page and ask for final approval.1511527. Final submission.153 - Ask explicitly whether the user approves final submission for the exact posting.154 - Only click submit after current-thread approval.155 - Save non-secret confirmation text/screenshot and update local package status.156157## Package Contract158159Each package should contain:160161```text162<postingId>-<company-slug>-<role-slug>\163 posting.json164 JD.md165 priority.json166 fit-gate-verdict.md167 keyword-map.md168 resume-change-summary.md169 truthfulness-notes.md170 submit-checklist.md171 prep-notes.md172 approval-log.md173 resume\174 source.*175 archive\176 cover-letter\177 layout-qa\178 chrome-evidence\179 submission\180```181182## Status Values183184- `queued`185- `jd-extracted`186- `tailored`187- `layout-pass`188- `layout-revise`189- `package-approved`190- `manual-upload-needed`191- `upload-staged`192- `final-approval-needed`193- `submitted`194- `manual-review`195- `skip`196- `verification-needed`197- `chrome-plugin-blocked`198199## User-Facing Response Contract200201Report:202203- current batch and priority order204- extracted posting facts and missing details205- resume lane and PDF/layout status206- main resume changes and unsupported JD terms not forced207- checkpoints waiting for approval208- exact private package paths for completed materials209- whether final submit was clicked