apify-collect
Collect fresh job-posting URLs into ~/.dear-hiring-manager/urls.txt by running an Apify job scraper — the discovery source for…
Interview the user and build their job-application profile — identity, contact, work authorization, EEO/demographics, and the standard screening answers (non-compete, felony, sponsorship) — plus register their resume. Use for /onboard or whenever the user wants to set up or edit
Claude Code
$ npx -y skills add extrasmall0/dear-hiring-manager --skill onboarding --agent claude-code
Codex
$ npx skills add extrasmall0/dear-hiring-manager --skill onboarding -a codex -y
Cursor
$ npx skills add extrasmall0/dear-hiring-manager --skill onboarding -a cursor -y
Gemini CLI
$ npx skills add extrasmall0/dear-hiring-manager --skill onboarding -a gemini-cli -y
GitHub Copilot
$ npx skills add extrasmall0/dear-hiring-manager --skill onboarding -a github-copilot -y
OpenCode
$ npx skills add extrasmall0/dear-hiring-manager --skill onboarding -a opencode -y
Windsurf
$ npx skills add extrasmall0/dear-hiring-manager --skill onboarding -a windsurf -y
name: onboarding description: Interview the user and build their job-application profile — identity, contact, work authorization, EEO/demographics, and the standard screening answers (non-compete, felony, sponsorship) — plus register their resume. Use for /onboard or whenever the user wants to set up or edit their dear-hiring-manager profile before applying to jobs.
Goal: produce a complete, human-readable `~/.dear-hiring-manager/profile.md` and register a resume, so later applications fill themselves. Keep it fast — parse what you can, only ask for gaps.
1. **Ensure the data dir exists.** Create `~/.dear-hiring-manager/` if missing.
2. **Check for an existing profile.**
section* or *view*. Only touch what they name. Do not restart the interview.
`~/.dear-hiring-manager/profile.md` and continue.
3. **Register + parse the resume (do this first — it prefills most fields).**
profile. Then only ask the user to confirm/correct those, not retype them. **Do NOT prefill LinkedIn/GitHub/portfolio URLs from the resume — ask for those directly (see the interview step).**
4. **Interview the gaps via the option-picker.** For every field whose answer is a discrete choice, ASK WITH THE `AskUserQuestion` OPTION-PICKER (not prose) — present sensible options plus "prefer not to answer" where relevant; the user clicks (or types via "Other"). Batch up to 4 questions per picker call to minimize rounds. Use free-text prompts only for genuinely open fields (name, contact, links, an exact salary number, references). Fill every template field.
the resume, and NEVER guess a URL from the name.** In a PDF these are hyperlinks whose real target URL usually can't be recovered by text parsing, so any parsed or name-guessed value is likely wrong.
Onsite / Open). Plus **home address** (street, city, state, ZIP) — free text; many forms require the full address, not just the city.
in future (Yes / No / Not now, yes later); + country and visa status. On almost every form — get exact.
and notice period / earliest start (2 weeks / 1 month / immediately / flexible).
Intern / Entry / Mid / Senior / Staff / Principal / Director), **years of experience** (options: 0–2 / 3–5 / 5–8 / 8–12 / 12+, or an exact number — forms ask this constantly), and **minimum fit score to apply** (options 40 / 50 / 60 / 70, default 50; the hard filter apply scores each job against). Title + level also feed `apify-collect` as the default search.
defaults (non-compete: No, felony: No, illegal activity: No, accommodation: No, previously employed here: No, 18+: Yes) as **options** and have the user confirm each or override. Write a value **only after explicit confirmation**. Skipped → stays blank (unconfirmed); apply flags it, never auto-attests.
"prefer not to answer". State clearly these are **voluntary**. Record exactly what they pick.
or "available on request".
5. **Seed the answer memory.** If `~/.dear-hiring-manager/answers.md` is missing, copy `${CLAUDE_PLUGIN_ROOT}/templates/answers.template.md` there. Add a few starter entries from **confirmed, non-blank** profile fields (work authorization, sponsorship, relocation, salary) in the entry format, `source: profile`. Never seed unconfirmed or blank values (especially legal attestations).
6. **Seed the URL list.** If `~/.dear-hiring-manager/urls.txt` is missing, copy `${CLAUDE_PLUGIN_ROOT}/templates/urls.template.txt` there — this is the single input for `/dear-hiring-manager:batch`. The user fills it however they like (by hand, `/apify-collect`, or an Apify export); batch never needs anything but this file.
7. **Seed the secrets stub (optional Apify).** If `~/.dear-hiring-manager/.env` is missing, copy `${CLAUDE_PLUGIN_ROOT}/templates/env.template` there **empty**. **Never ask for the Apify token in the chat** (it would leak into the transcript) — just tell the user to open `~/.dear-hiring-manager/.env` in an editor and paste their `APIFY_TOKEN` + `APIFY_ACTOR` there if they want `/apify-collect`. It's optional; skip mention entirely if they don't use Apify.
8. **Confirm done.** Print the profile path and a one-line completeness check (any field still blank). Tell them they can now run `/dear-hiring-manager:apply <job-url>`, or paste URLs into `urls.txt` and run `/dear-hiring-manager:batch`.
Fills your job applications so you never have to write another 'Dear Hiring Manager.' It reads the job description, scores how well you fit, fills every field from your saved profile, and drafts open-ended answers and a cover letter in your own voice.
Collect fresh job-posting URLs into ~/.dear-hiring-manager/urls.txt by running an Apify job scraper — the discovery source for…
Assisted job-application filler. Given a job posting URL, open it in a browser via Playwright, extract the JD and company, score…
Batch job-application filler. Given several job URLs (or a urls.txt file), run the assisted-apply flow for each in its own…
Application tracker board. Read ~/.dear-hiring-manager/applications.md and render a status board (grouped by…
Generate a tailored, truthful cover letter from the user's resume, profile, and a specific job description. Draft it in the…
Make generated prose read like a real person wrote it, not AI. A shared rulebook of banned words, punctuation rules, and…
Assists with job applications: evaluating job postings, tailoring CVs, writing cover letters, and preparing for interviews.…
Prepares the user for a specific interview from their real experience. Builds a story bank in…
Search flights, hotels, attractions, concerts, and travel deals with natural language. FlyAI connects to Fliggy MCP for real-time…