Setup wizard
You are building one person's job-search system. Nothing personal ships with this package, so everything below comes from their answers. Ask in short blocks, save after every block, and never invent facts about them.
Cost discipline (tell the user once, in two lines)
This wizard is questions and file writing. It needs the cheapest capable model.
- If the session is on a larger model than Haiku or the equivalent small model, say: "Setup is mostly questions and file writing. Switching to a small model (for example
/model haiku) will save tokens. Continue here, or switch and re-run /setup, which resumes where we stopped." Then continue unless they switch. - Later in setup you ask which model they want for each phase. Recommend: small model for setup and search synthesis, mid model for writing, large model never required.
Resume logic
- Look for
jobsearchos.config.mdin the workspace folder they name (or the current folder). If it exists andprofile/files still contain the text[Your, setup is half done: list which blocks are complete and continue from the first incomplete one. - If nothing exists, start at Block 0.
How to ask
- Ask 3 to 5 questions at a time, numbered, in plain language. If your tool has a multiple-choice question widget, use it for closed questions.
- Offer an example answer for open questions. People freeze on blank boxes.
- "Skip" and "later" are valid answers. Write
[Your ...: to do]in that field and move on. - Never ask for anything you do not need. Never ask for passwords, IDs, bank details, or anything sensitive. Salary and visa questions are optional and stay in
profile/only; they never go into a letter. - After each block, write that block's files, then say in one line what you saved.
Block 0: Tool, folder, modules
- Which AI tool will you use day to day? (Claude, ChatGPT, Gemini, other.) Sets
ai_tool. Claude users get scheduled-task automation by default. ChatGPT users get the ChatGPT automation pack (Project plus Tasks) and the local script. - Where should your job-search folder live? Ask for an absolute path. Explain: "This is your filing structure. Everything lives here: your profile, one file per job, your letters, the tracker. If you use Obsidian, point this at a folder inside your vault and it works as notes. If you do not use Obsidian, it is just a normal folder." Copy the whole of
${CLAUDE_PLUGIN_ROOT}/workspace-template/into it (this includesFILING-STRUCTURE.mdandtools/), then write that absolute path intoworkspace_pathinjobsearchos.config.md. Deletelogs/unless the overnight sweep is on. Set each pillar'sstatustoreadyonce it has a claim and at least one usable number with method and caveat, otherwisedraft. If the folder cannot be written from this tool, produce the files in the working directory and tell them where to move them. - Which parts do you want? Core is always on:
/setup,/fast-letter,/log-application. Ask yes/no for each optional module and write them tomodules:in config:- Deep research and draft-letter (the slow, thorough path for target companies)
- Challenge prep (rehearse a take-home, case or live challenge)
- Product audience analysis and competitive brief (interview prep modules)
- Warm intros (find named people and draft notes, never sent)
- Tailored resume per application
- Overnight job sweep (finds and drafts while you sleep)
- Friday filename check (keeps file prefixes in sync with status)
- Models. Show this table and let them accept the defaults or change them. Write to
models:in config.
| Phase | Recommended | Why |
|---|---|---|
| Setup and file generation | small (Haiku) | questions and templates |
| Search synthesis, JD parsing | small (Haiku) | summarising, cheap |
| Writing the Decision Card and letters | mid (Sonnet) | voice and judgment |
| Deep research, challenge prep | mid (Sonnet), large optional | longer reasoning |
Say: "Open the token budget calculator (tools/token-budget-calculator.html in your folder) any time to see what a week costs."
Block 1: Career identity
Write profile/identity.md.
- Name, the email and phone you want on letters (optional), and where you are based (city, country).
- Current or most recent job title and current employer. Write
current_employerandexperience_line(the one Experience line on the letter, for example "9 years in B2B SaaS, currently at Acme") intoprofile/identity.md; skills use these and never invent a current job, and the title(s) you are applying for. (Example: "Senior Product Manager, also Group PM".) - Seniority you are aiming at, and years of experience in the field.
- Your positioning line: one sentence on what you do and for whom. If they do not have one, draft three options from their answers and let them pick or edit. Example shape: "[Role], [N] years, [domain]. I [what you make better] for [who]."
- Links to include: portfolio or website, LinkedIn, resume file (path or URL), anything else.
- Languages and working languages (optional).
6b. The title line to print on letters (
title_on_letter). Iflevel_policyisnever-name, offer the role family without a level (for example "Product Manager" rather than "Senior Product Manager"). This is whatROLE_TITLEis filled with. - Work authorisation and logistics, all optional: do you need visa sponsorship or a specific location to stay eligible, notice period, earliest start date. Explain these feed the location flags and the "Before you send" checks, and are never printed in a letter.
Block 2: Pillars (your proof projects)
A pillar is one body of work you can defend in a screening call. Letters are built from pillars, so this block matters most. Aim for two or three. One is fine to start.
For each pillar, ask and then write profile/pillars/pillar-N-<slug>.md using ${CLAUDE_PLUGIN_ROOT}/workspace-template/profile/pillars/_pillar-template.md (or the copy already in the workspace):
- Name it: the project or role, the employer, the period.
- What did you own, in one line? ("I owned X end to end" is a claim. "I contributed to X" is not yet.)
- When should this pillar be used? (Types of company or problem where it is the strongest proof.)
- Numbers: each outcome with how it was measured and the caveat. Push for method: "How do you know?" and "Who would disagree?" Any number without a method goes in a
Needs a sourcelist, not in the usable list. - The hardest call: a decision that cost something. What did you refuse, kill or push back on, and why?
- The systems insight: what is the reusable idea someone could take from it?
- Did the work outlive your involvement? What did others keep using?
- The honest limit: what did not ship, what you would do differently.
8b. Which one number or behaviour change could close the "what I did about it" paragraph, and how it was measured? (Fills
Which numbers can close a resolution. If there is no before-and-after number, name a behaviour change someone could have watched happen.) - Best lines: any sentences you have already written about it that sound like you.
- A link to the case study or page (optional).
Then ask "another pillar?" until they say no.
Finally write profile/routing.md from their answers: which pillar leads for which company size or type, which is the secondary proof. If they have one pillar, routing is trivial: say so.
Block 3: Targets
Write profile/targets.md from ${CLAUDE_PLUGIN_ROOT}/workspace-template/profile/targets.md.
- Industries or problem types you want, and ones you will not touch.
- Company size range (headcount) and stage preferences.
- Geography: where you can work, where you will not. Remote preferences: fully remote, hybrid, onsite, and any entity or timezone constraints.
- Location rules: build the table together. Each row is a place or setup and a flag:
none(fine),check-entity(ask if they can employ you where you live),blocker(dealbreaker, always surfaced first, never dropped quietly). - Titles you accept, titles you exclude (for example "agency", "pure execution role").
- Fit tests: "A company qualifies if at least three of these are true". Offer to write four tests from their domain. Give an example in their field, then ask them to edit. (Example for a product designer: users make consequential decisions under pressure; several surfaces that outgrew their patterns; buyer differs from daily user; regulated or data-heavy domain.)
- Dealbreakers and hard nos.
- Weekly target of qualified applications (store it in
weekly_targetinjobsearchos.config.mdonly, never in targets.md) and which days to source, follow up and review. Default 8 a week and Monday source, Thursday warm intros, Friday review. Say: volume is the bottleneck, quality is protected by the kill rule. - Job sources. Preload these and let them remove any: LinkedIn (saved searches and job alerts, plus LinkedIn Premium if they have it), startup.jobs, company careers pages, Welcome to the Jungle, Wellfound, Otta, Indeed, Hacker News "Who is hiring", and the aggregator links they already use. Then ask: "Do you want to add other sources? Name boards, newsletters, Slack or Discord communities, or recruiters." Write each source with its URL pattern if known (write
URL unknown, check manuallyif not) and which leg it serves (location leg, remote leg). Any template row they did not answer is deleted, never left as a bracketed placeholder, unless they said "later", in which case keep it as[Your ...: to do]. - A watchlist: companies you want checked directly every sweep. Optional, five to twenty names.
Block 4: Voice
Write profile/voice.md from ${CLAUDE_PLUGIN_ROOT}/workspace-template/profile/voice.md.
- How would you describe your tone in three words? Offer: measured, direct, warm, dry, playful, formal, blunt.
- Default temperature: measured (state a view, then the evidence), bold (state it, no hedge), or measured-plus-one-bold-sentence (recommended). Explain the table in
voice-method.mdif they ask. - Level policy: never name your own seniority in letters (the evidence sets it), or name it when the ad asks. Default never-name.
- Words and phrases you never want to see. Say these ADD to the universal list in
${CLAUDE_PLUGIN_ROOT}/skills/_shared/universal-style.md. Ask for pet peeves: "passionate", "synergy", anything. - Phrases that are genuinely yours. Ask them to paste a writing sample of their own (a post, an email, a case study intro; 200 to 500 words is ideal, even 60 words helps). If they have none, skip extraction and leave the phrase bank as
[Your phrase bank: to do]. From a sample, extract: sentence length habits, a short phrase bank, honesty moves ("Worth saying:", "I shipped knowing this"), a closing-warmth style. Show the extraction and let them correct it. Never present your guesses as their voice without confirmation. When running without a person to confirm (a test or a scheduled run), save the extraction marked(unconfirmed draft). - How they want to talk about a gap or a limit: always attach the caveat to a number, or only when asked.
- Do they want the AI disclosure page (page 2 of the structured letter: a short, honest note on how AI was used and where the human judgment sits)? Yes, no, or write it later. If yes, draft two sentences with them and store it as
why_this_sectioninprofile/voice.md, and confirm or edit the defaultPage 2section there (a heading, a one-line lede, a disclosure line, and up to four process cards labelled automated, hybrid or human). The same text appears on page 2 of every letter.
Block 5: Bio, portfolio and raw material
Write profile/bio-and-portfolio.md from the template.
- Paste your professional bio (any length). If none, draft a 3-sentence bio from Blocks 1 and 2 and ask them to edit.
- Case studies and work samples: for each, a title, one line, a link or file path, and status (ready, draft, do not use yet).
- Other material the AI may use: talks, articles, press, awards, recommendations. List links only.
- Raw material folder: ask for a path to a folder of notes, old cover letters, resumes. Offer to index file names only (never read private material unless they say so) into
profile/bio-and-portfolio.mdunderRaw material. - A "never claim" list: things they do not want implied (tools they barely used, employers whose names they cannot use).
- Resume: the base resume file, or paste the content. If they skip the resume, set
modules.tailored_resumeto false and omit the tailored-resume question from every Decision Card. The resume template is filled once with static sections (experience, education, skills); only the bio header changes per application.
Block 6: Letter format and brand
Write profile/letter-spec.md, profile/brand.md, then generate templates/.
- Letter format. Offer two:
- Structured (default craft): impact card, what-I-do line, opening, bridge, a sourced challenge section with a them-versus-me comparison, a past-tense resolution, close. Best for roles where you can show real product thinking. Uses
letter-template.html. - Classic: opening, two body paragraphs, close. Uses
letter-template-classic.html. Show the field table and word budgets for the chosen format, and ask whether to keep or change them.
- Structured (default craft): impact card, what-I-do line, opening, bridge, a sourced challenge section with a them-versus-me comparison, a past-tense resolution, close. Best for roles where you can show real product thinking. Uses
- Design settings. This is where the user picks their own colours and fonts. Offer three routes and let them choose:
- A preset. Studio blue, Forest, Terracotta, Graphite, Plum or Sea (colour pairs with matching fonts; the list is in
tools/brand-picker.html). - Their own values. Ask for: an accent colour, paper and ink colours (hex, or a colour name you convert to hex), a display font (name and headings) and a body font (any Google Fonts name), and paper size (A4 or US Letter). Ask for a logo file or URL only if they have one.
- The visual picker. Point them to
tools/brand-picker.htmlin their folder: they choose colours and fonts with a live preview of the letter, press Copy and paste the block back to you. Derivemute,line,cardanddarkyourself from paper, ink and accent (mute: ink mixed 40 percent toward paper; line: paper darkened 10 percent; card: paper tinted 6 percent toward the accent; dark: ink). Check contrast: accent on paper should be at least 4.5:1 and text on paper at least 7:1; if not, say so and suggest a darker accent. Write everything toprofile/brand.md, which is the source of truth. Offer to change it later: "re-run /setup and choose design settings".
- A preset. Studio blue, Forest, Terracotta, Graphite, Plum or Sea (colour pairs with matching fonts; the list is in
- Generate templates: copy
${CLAUDE_PLUGIN_ROOT}/workspace-template/templates/*.htmlinto<workspace>/templates/(skipresume-template.htmlif they said to skip the resume). In each file:- Replace only the variable values inside the
:root{...}block. Set--dispand--sansto the chosen fonts with sensible fallbacks. - Replace the single
<link href="https://fonts.googleapis.com/css2?family=...">line that follows theBRAND-FONTScomment with one for the chosen families. Request only weights the family offers (check Google Fonts; if a family has no 700, use its heaviest available weight and updatefont-weightvalues accordingly). - Fill these static identity placeholders once:
{{NAME}},{{ROLE_TITLE}}(fromtitle_on_letter),{{EMAIL}},{{CONTACT_LINE}}(HTML: portfolio, LinkedIn and other links separated by·),{{LOGO}}(empty string if none),{{ABOUT_CARD_1}}(the one experience line from Block 1). Resume static blocks (EXPERIENCE_BLOCKS,EDUCATION,SKILLS,FOOTNOTE,CONTACT_BLOCK,EXTRA_BLOCKS) are filled only if they gave resume content; otherwise leave them and say so. - Leave every per-job placeholder (
{{COMPANY}},{{ROLE}},{{OPENING}}and so on) untouched.
- Replace only the variable values inside the
- Smoke test: confirm the CSS variables changed, no default brand colour is left in the
:rootblock, the fonts link names the chosen families, and the per-job placeholders are all still there. If the tool can render HTML, render one sample with{{COMPANY}}set to "Example Co" and ask if the look feels right, then adjust once. If it cannot render, say so and skip the visual check. - Offer a one-time page-2 / disclosure text if they said yes in Block 4.
Block 7: Automation
Read jobsearchos.config.md ai_tool.
- Claude: offer the overnight sweep and the Friday filename check as scheduled tasks. Use the prompts in
${CLAUDE_PLUGIN_ROOT}/automations/claude/. Ask for their time zone, which weekdays, and the hour. Recommend the sweep Monday to Thursday before they wake, a watchdog an hour later that messages only on failure, and the Friday check at a time they are at their desk. Create the tasks only after they confirm the cron summary in plain words ("Monday to Thursday at 03:30 your time"). Never schedule anything without a yes. - ChatGPT, Gemini, other: point them to
${CLAUDE_PLUGIN_ROOT}/automations/chatgpt/README.md(Project plus scheduled Task) and${CLAUDE_PLUGIN_ROOT}/automations/scripts/sync-filenames.pyfor the Friday check. Offer to print the exact Project instructions and Task prompt with their folder name and time zone filled in. - If they said no to the sweep, show the manual Monday sourcing checklist from
00-START-HERE.mdinstead.
Block 8: Finish
- Write
jobsearchos.config.mdwith every answer,00-START-HERE.md(weekly loop and commands, filled with their cadence),Applications-Tracker.mdandJob-Inbox.md. - Self-check. Find unfilled placeholders: search every file in
profile/(skipprofile/pillars/_pillar-template.md) for[Yourand for any bracketed instruction such as[e.g.,[Company],[phrase],[word],[Test,[URL],[leg],[pillar,[Another,[Title,[Industries,[Optional. List what is still empty with the block it belongs to. Search the templates for the default:rootcolours and for any string that is not the user's. Fix or report. - Run a 60-second dry run of the Decision Card on a job ad the user pastes (turn 1 of
/fast-letteronly, no files written), so they see it works with their profile. If they have no ad ready, skip. - Print the summary: what was created, the folder tree, the five commands they will use this week, and the token budget calculator path with their weekly target and chosen models.
- Say plainly what is not done and what the next best action is. Example: "Pillar 2 still needs numbers with a method. Everything else is ready. Next: paste your first job link and run /fast-letter."
Rules
- Never invent a number, an employer, or a quote. Anything missing stays as
[Your ...: to do]. - Never write a secret, ID, salary or visa detail into a letter, dossier or template. They live only in
profile/identity.md. - Use the user's words. When you draft for them (a positioning line, a bio, a tone summary), show it and get a yes before saving.
- No em dashes in anything you write for them. No emojis unless they use them.
- When running without a person to confirm (a test or a scheduled run), save anything you generated yourself (voice extraction, personality line, routing rows, page-2 cards) marked
(unconfirmed draft)and list those in the final summary. - Idempotent: re-running setup updates files, it never duplicates them. Keep old versions as
DEPR-<name>in the same folder.