一键导入
setup-profile
Build profile.json from your CV or LinkedIn PDF by extracting work history, generating 3 CV variants, and writing per-job bullets automatically
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Build profile.json from your CV or LinkedIn PDF by extracting work history, generating 3 CV variants, and writing per-job bullets automatically
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Fill an ATS form via browser automation, upload PDFs, answer safe required fields, then hand off for sensitive, consent, attestation, legal, and Submit controls (unless yolo mode is authorised — see the yolo submission section below)
Scaffold a role config by fetching and analysing a job posting, detecting the ATS platform, and pre-filling roles/<role_id>.json
Build ATS-safe CV and cover letter PDFs tailored to a specific role using reportlab Platypus
View and update your job application pipeline; log statuses and add notes across all active roles
Discover role leads, verify open roles on official posts, and rank verified matches with heuristic sponsorship and relocation confidence
| name | setup-profile |
| description | Build profile.json from your CV or LinkedIn PDF by extracting work history, generating 3 CV variants, and writing per-job bullets automatically |
Bootstrap profile.json from a CV, resume, or LinkedIn PDF export. Extracts your work history, infers three audience-specific CV variants (AI/LLM, Data Platform, Backend), and writes one default bullet set plus three audience-specific variants so you are ready to generate tailored applications immediately.
User says: /setup-profile, /career-agent:setup-profile, set up my profile, build my profile from my CV, import my resume, create profile.json
In Codex, invoke this skill with $setup-profile, the skills/plugin selector, or natural language. Slash-command examples are Claude Code aliases, not Codex built-ins.
/setup-profile [optional: path to PDF or DOCX]
No argument required: the agent accepts a file upload or pasted text in the same message.
Check what the user provided:
Do not proceed with fabricated data. Every field written to profile.json must come from the source material or be explicitly flagged as an assumption.
Extract the following from the CV or LinkedIn export:
Contact info:
first, last, preferred)+1 only if location is clearly US/CA, otherwise leave blank and flag)"Open to fully remote roles globally and relocation for the right opportunity.".Professional summary:
Work history: for each role:
Education: for each entry:
Skills: capture all listed skills, grouping them as they appear (Languages, Frameworks, Cloud & Infra, etc.)
Analyse the parsed work history and skills to determine which of the three audience variants is the strongest primary fit:
For each variant, produce:
label: short audience label (e.g. "AI/LLM/Evaluation")headline: 1-line headline tailored to that audience, ≤ 12 wordssummary: 2-3 sentence paragraph: lead with years of experience, name the most relevant technical stack for that audience, close with availability/location preferenceIf a variant fit is ambiguous (e.g. no clear AI or data experience), say so: "I could not find strong evidence for Variant A (AI/LLM). I've written a best-effort headline and summary: please review and adjust."
For every role in experience, produce four bullet sets:
default: neutral, achievement-focused bullets suitable for any audience. 3-5 bullets per role.A: same role reframed for AI/LLM/Evaluation audiences: emphasise data quality pipelines that fed models, evaluation logic, experiment tracking, inference infra, or anything ML-adjacent. If the role has no AI angle, write the closest honest approximation and note it.B: reframed for Data Platform audiences: emphasise pipeline reliability, data volumes, orchestration complexity, schema design, warehouse optimisation, SLA adherence.C: reframed for Backend/APIs audiences: emphasise API design, latency, throughput, service reliability (uptime/SLA), open-source contribution, developer experience.Rules:
Before writing profile.json:
If profile.json already exists, ask:
profile.json already exists. Overwrite it? (yes/no)
If the user says no, stop. If yes, proceed.
If profile.json does not exist, proceed without asking.
Write a complete, valid JSON file to profile.json in the project root. The file must match the exact schema from profile.example.json:
{
"name": { "first": "...", "last": "...", "preferred": "..." },
"email": "...",
"phone": { "country_code": "+X", "number": "...", "formatted": "+X..." },
"location": "City, Country",
"relocation": "...",
"openness": "Open to fully remote roles globally and relocation for the right opportunity.",
"links": {
"linkedin": "...",
"github": "...",
"website": "...",
"twitter": "...",
"blog": "..."
},
"years_experience": 7,
"headline": "...",
"summary": "...",
"variants": {
"A": { "label": "...", "headline": "...", "summary": "..." },
"B": { "label": "...", "headline": "...", "summary": "..." },
"C": { "label": "...", "headline": "...", "summary": "..." }
},
"experience": [
{
"id": "job_1",
"title": "...",
"company": "...",
"company_line": "Company · Industry · Location · Start – End",
"bullets": {
"default": ["..."],
"A": ["..."],
"B": ["..."],
"C": ["..."]
}
}
],
"education": [
{ "degree": "...", "institution": "...", "year": "..." }
],
"skills": [
{ "label": "Languages", "items": "Python · TypeScript · ..." }
]
}
Do not include the _comment field from the example: it is only for the template.
If a field cannot be populated from the source (e.g. GitHub URL not found), write an empty string "" and flag it in the report.
Roles must be listed in reverse chronological order (most recent first). Assign IDs job_1, job_2, ... starting from the most recent.
After writing profile.json, output a structured report:
profile.json written successfully.
Extracted:
Name: Jane Doe
Email: jane@example.com
Phone: +15551234567
Location: Berlin, Germany
LinkedIn: https://www.linkedin.com/in/janedoe/
GitHub: [not found: update manually]
Years experience: 7 (calculated from 2017-06 to 2024-06)
Roles parsed: 3 (job_1, job_2, job_3)
Education: 1 entry
Skills groups: 3
Variant fit assessment:
Primary: C: Senior Backend/APIs (strongest signal: 5 backend API roles)
Secondary: B: Data Platform (evidence: 2 years data pipeline work at Acme)
Tertiary: A: AI/LLM (limited evidence: mentioned LLM integration in job_1 bullets)
Assumptions made:
- Phone country code defaulted to +44 based on location (London, UK)
- Relocation field left blank: no mention in source
- Variant A summary is best-effort: no dedicated ML/AI role found
Fields left blank (update manually):
- links.github
- links.twitter
- links.blog
After the report, ask:
Tell me what to adjust: for example:
- "Rewrite job_1 bullets for AI roles"
- "Update my LinkedIn URL to https://..."
- "Make Variant B the primary"
- "Add a GitHub URL: https://github.com/..."
Apply any requested edits and re-write profile.json. Repeat until the user is satisfied or says "done" / "looks good".
linkedin.com/in/jane) but not fully qualified, write what you can and flag it.profile.json exists and user declines overwrite → stop cleanly: "No changes made. Your existing profile.json is untouched."skills array and note it: "No skills section found: add your skills manually."