| name | get-offers |
| description | Create tailored application campaigns from a user's self-information or resume, target jobs or mentors, scraped/public target descriptions, LaTeX resume templates, custom cover/self-recommendation letters, and email delivery workflows. Use when Codex needs to intake applicant facts, collect job or mentor targets, tailor resumes and application letters, generate .eml drafts, upload drafts through IMAP/Zimbra, send through SMTP with explicit confirmation, or prepare this workflow as a repository-backed Codex plugin. |
Get Offers
Core Workflow
Use this skill to turn applicant facts plus target descriptions into tailored application materials and reviewable delivery drafts. Default to human-reviewed drafts; do not send automatically unless the user explicitly asks and confirms the exact batch.
For the full workspace contract and command sequence, read references/workflow.md.
For environment, dependency, supported website, university, Chrome helper, and Agent host details, read references/support-matrix.md. Agent hosts may read the structured version at integrations/runtime_support.json. Release validation results are recorded in references/test-report.md.
Before rewriting resumes, read references/material-guidelines.md and the four repository-level Chinese resume guides when present:
简历参考编写指南(通用岗).md
简历参考编写指南(技术岗).md
简历参考编写指南(非技术).md
简历参考编写指南(求学).md
Choose the closest guide by target type: technical jobs use 技术岗, business/operation/design/content roles use 非技术, academic applications and mentor outreach use 求学, and mixed or unclear cases use 通用岗 plus the specialized guide.
- Initialize or inspect the campaign workspace.
python3 skills/get-offers/scripts/init_application_project.py \
--project-dir /path/to/project \
--project-name "campaign name"
When targets have already been collected or imported, prefer the local pipeline for a full reviewable run:
python3 skills/get-offers/scripts/run_campaign_pipeline.py \
--project-dir /path/to/project \
--target-input /path/to/project/targets/imported_targets.csv \
--target-input /path/to/project/targets/faculty/targets_raw.csv \
--resume-file /path/to/project/input/source_resume.md \
--applicant-name "Applicant Name" \
--campaign-name "campaign name" \
--from "Applicant <applicant@example.com>" \
--compile-resume-pdf
The pipeline creates local merged targets, match reports, material drafts, target-specific LaTeX resumes, optional resume PDFs, Chrome helper JSON, delivery package JSON, and optional .eml review drafts. It does not upload drafts, send mail, or operate website apply buttons.
-
Intake applicant facts and create an initial optimized resume.
- Accept a resume, self-introduction, or structured profile.
- Extract only grounded facts.
- Ask for confirmation before using uncertain claims.
- Read
references/material-guidelines.md before tailoring materials.
- Produce or update an initial
resume.md before target-specific matching. This is the stable facts version; later target-specific resumes should tailor emphasis, not invent new facts.
-
Collect and normalize targets.
- Read
references/target-sources.md when scraping or normalizing jobs/mentors.
- Use
integrations/external_tools.json or list_external_integrations.py to choose optional external collectors or Chrome helpers by platform.
- Use
integrations/source_strategies.json or plan_collection_strategy.py to choose public API, static HTML, faculty listing, import, or browser-helper strategy.
- Use
collect_web_targets.py for public URLs.
- Use
collect_web_targets.py --source-id ... or --tag ... for registered public web sources in integrations/web_sources.json, including 国聘, 中国公共招聘网,省级人才网, and university HR/recruitment entrances.
- Use provider scripts such as
fetch_sii_mentors.py for specific institutions.
- Use
collect_faculty_targets.py for public school/lab faculty listing pages that expose mentor links, or --source-id entries from integrations/faculty_sources.json such as pku-cs, nju-cs-professors, ustc-cs-professors, and tsinghua-cs.
- Use
fetch_ncss_jobs.py for 国家大学生就业服务平台 / NCSS public job list JSON and detail pages.
- Use
fetch_tencent_jobs.py for Tencent Careers public JSON/API job posts.
- Use
fetch_huawei_jobs.py for Huawei Careers public JSON/API job posts.
- Use
fetch_baidu_jobs.py for Baidu Talent public JSON/API or SSR job posts.
- Use
fetch_netease_jobs.py for NetEase Careers public JSON/API job posts.
- Use
fetch_360_jobs.py for 360 Careers public JSON/API job posts; live results may be empty when no public positions are open.
- Use registered public JSON/SSR company source wrappers such as
fetch_bytedance_jobs.py, fetch_alibaba_jobs.py, fetch_meituan_jobs.py, fetch_jd_jobs.py, fetch_xiaomi_jobs.py, fetch_bilibili_jobs.py, fetch_mihoyo_jobs.py, fetch_ant_jobs.py, fetch_sensetime_jobs.py, fetch_zhipu_jobs.py, fetch_moonshot_jobs.py, and fetch_minimax_jobs.py. They share fetch_public_jobs.py; use --input-json or --input-html when a site requires normal browser context but exposes public JSON in the user's browser.
- Use
fetch_shixiseng_jobs.py for Shixiseng public internship search HTML; review rows marked FONT_OBFUSCATED on the original page.
- Use the built-in Chrome helper's current-site auto-capture mode when a site is visible in the user's logged-in browser but not stable through direct HTTP. After export, run
process_chrome_captures.py or import_jd_targets.py --profile chrome-visible-capture.
- Use
import_jd_targets.py --profile ... for CSV/JSON/JSONL/XLSX exports from registered browser plugins, Agent CLIs, or manual tables.
- Use
merge_target_sources.py when a campaign has outputs from multiple collectors or external tools.
python3 skills/get-offers/scripts/import_jd_targets.py \
/path/to/jobs.json \
--profile boss-auto-apply \
--output-csv /path/to/project/targets/imported_targets.csv
python3 skills/get-offers/scripts/import_jd_targets.py \
--list-profiles
python3 skills/get-offers/scripts/list_external_integrations.py \
--platform boss \
--format commands
python3 skills/get-offers/scripts/plan_collection_strategy.py \
--platform boss \
--format commands
python3 skills/get-offers/scripts/merge_target_sources.py \
/path/to/project/targets/imported_targets.csv \
/path/to/project/targets/faculty/targets_raw.csv \
--output-csv /path/to/project/targets/merged_targets.csv \
--report-md /path/to/project/targets/merged_targets_report.md
Deep-read public mentor profile pages after collect_faculty_targets.py when academic outreach needs richer evidence:
python3 skills/get-offers/scripts/deep_read_faculty_profiles.py \
--targets-csv /path/to/project/targets/faculty/targets_raw.csv \
--output-dir /path/to/project/targets/faculty_deep_read
- Score resume/JD fit and create greeting drafts when resume text is available.
python3 skills/get-offers/scripts/match_resume_to_targets.py \
--targets-csv /path/to/project/targets/merged_targets.csv \
--resume-file /path/to/project/input/resume.md \
--output-csv /path/to/project/targets/matched_targets.csv \
--report-md /path/to/project/targets/match_report.md
Generate reviewable material drafts when the user wants a first pass before manual editing:
python3 skills/get-offers/scripts/make_material_drafts.py \
--targets-csv /path/to/project/targets/matched_targets.csv \
--resume-file /path/to/project/input/resume.md \
--output-dir /path/to/project \
--applicant-name "Applicant Name"
Use --applicant-profile /path/to/applicant_profile.json instead of or in addition to --resume-file when the user provides structured facts rather than an existing resume.
Export tasks for the optional Chrome helper:
python3 skills/get-offers/scripts/export_browser_tasks.py \
--targets-csv /path/to/project/targets/matched_targets.csv \
--campaign-name "campaign name" \
--output-json /path/to/project/targets/chrome_tasks.json
When material drafts already exist, export a richer delivery package with the reviewed greeting, application letter body, and local material paths:
python3 skills/get-offers/scripts/export_delivery_package.py \
--index /path/to/project/application_index.md \
--campaign-name "campaign name" \
--output-json /path/to/project/targets/delivery_package.json
Import reviewed browser status after the user exports it from the Chrome helper:
python3 skills/get-offers/scripts/import_browser_status.py \
--targets-csv /path/to/project/targets/matched_targets.csv \
--status-json /path/to/get-offers-status.json \
--output-csv /path/to/project/targets/matched_targets_with_status.csv
- Create
application_index.md.
python3 skills/get-offers/scripts/make_application_index.py \
--targets-csv /path/to/project/targets/matched_targets.csv \
--output-dir /path/to/project \
--applicant-name "Applicant Name" \
--create-stubs
- Tailor one folder per target.
- Read
target_context.md and applicant profile.
- Use
fit_score, suggested_focus, matched_keywords, missing_keywords, and greeting_draft if present.
- Use
make_material_drafts.py output as a grounded first draft, not as final proofread material.
- Write
application_letter.md.
- Generate or edit
tailored_resume.tex with the built-in resume template.
- Compile
tailored_resume.pdf with compile_latex_resume.py.
- When the user has confirmed their name and application type, use
--resume-filename-template "{applicant_name}_{application_type}.pdf" or a role-specific template such as "{applicant_name}_{role_or_direction}.pdf".
- For browser/chat delivery, export a first-page JPEG after compiling PDFs:
python3 skills/get-offers/scripts/export_resume_images.py \
--materials-dir /path/to/project/materials \
--overwrite
- Read
references/environment.md for LaTeX and Python dependencies.
- Generate and validate email drafts.
python3 skills/get-offers/scripts/make_email_drafts.py \
--index /path/to/project/application_index.md \
--output-dir /path/to/project/drafts \
--from "Applicant <applicant@example.com>" \
--applicant-name "Applicant" \
--subject-template "{applicant_name} - {role_or_direction}申请"
python3 skills/get-offers/scripts/check_email_drafts.py \
--draft-dir /path/to/project/drafts \
--expected-attachments 1
Use make_email_drafts.py --allow-missing-resume only for early body review when target-specific resume PDFs are not ready. Delivery steps should use the reviewed PDF attachment unless the user intentionally chooses a no-attachment message.
- Deliver.
- Read
references/delivery.md before uploading or sending.
- Prefer
upload_email_drafts.py for IMAP Drafts.
- Use
send_email_messages.py for confirmed SMTP batches.
- For browser-plugin delivery, prepare the reviewed greeting or application text for the user's browser session.
- The repository Chrome helper lives at
chrome-extension/get-offers-helper and can import chrome_tasks.json or delivery_package.json.
- Fully automatic mode is opt-in only: the user must explicitly request it, provide delivery credentials or browser automation tooling, and accept that SMTP direct send or third-party browser plugins may act immediately.
Operating Notes
- Applicant claims should come from the provided resume, profile, confirmed clarifications, or public target descriptions.
- Website delivery is centered on reviewed text and user-controlled browser sessions.
- Mail credentials are read interactively or from local environment variables during delivery.
- If an upload/send partially completes, inspect remote state before rerunning.
Repository Work
When the user asks to publish or upload the plugin, read references/repository.md. Prepare a local git repository, validate the plugin, and push to the configured remote or the remote the user provides.
Run validate_workflow_smoke.py after changing import, matching, browser task, status, or index scripts.