diff --git a/.claude/commands/apply.md b/.claude/commands/apply.md index 89d0b0a..032a636 100644 --- a/.claude/commands/apply.md +++ b/.claude/commands/apply.md @@ -304,6 +304,14 @@ List the files written: Tell the user: "Both files are ready for your review. Open them to check the final output before compiling." +### Application-Form Fields (Optional Third Artifact) + +Check whether the posting or the portal it came from asks for free-text fields the CV and cover letter don't cover — a self-introduction paragraph, structured project entries, a character-limited pitch, or a motivation/competency question under a word cap (see `.claude/skills/job-application-assistant/08-application-forms.md`, "When this applies"). If it does, or the user has already mentioned the portal, offer it in the same turn: + +> "This posting has free-text application fields I can draft too — [name the specific fields, e.g. a self-introduction paragraph and structured project entries]. Want those drafted?" + +**Only on yes**, read `08-application-forms.md` and draft the fields per its rules, grounded against the same three-source union as the CV and cover letter. Save per that file's "Output format" section. **On no, or when the posting has no such fields, say nothing further and move on** — this is an optional addition and never changes the default two-document output. + ### Next Steps - **Submitted?** `/outcome ` logs it in the tracker and starts the per-application record that `/setup` later uses to calibrate the fit framework. - **Interview scheduled?** `/interview` builds a stage-specific prep pack from this posting and the documents you just created. diff --git a/.claude/skills/job-application-assistant/08-application-forms.md b/.claude/skills/job-application-assistant/08-application-forms.md new file mode 100644 index 0000000..10431a8 --- /dev/null +++ b/.claude/skills/job-application-assistant/08-application-forms.md @@ -0,0 +1,87 @@ +--- +framework_version: 1.0.0 +--- + +# Application Form Fields + +`/apply` produces two artifacts: a CV and a cover letter. Many applications need a **third** — free-text fields typed directly into an application portal. Graduate programs, large-employer ATS systems and startup forms routinely ask for things neither document covers, under a character or word limit, in a box with no formatting. + +This file governs that third artifact. It is not a document you compile; it is text the candidate pastes. + +## When this applies + +Trigger it whenever a posting or portal asks for any of: + +- A self-introduction / personal statement / "tell us about yourself" paragraph +- Structured project entries (project name, role, start and end date, description) +- A short pitch under a hard character limit ("stand out in 140 characters", "why you, in one sentence") +- Motivation questions ("why this company", "why this program") +- Competency questions with a word cap ("describe a time you…", 200 words) + +## The rule that governs everything here + +**Every claim in a form field must already be defensible from the same sources the CV and cover letter are grounded against** — the union of `01-candidate-profile.md`, the master CV (`cv/main_example.tex`), and `CLAUDE.md`'s Candidate Profile section, with a claim grounded if ANY of the three supports it. The interviewer reads the form alongside the CV. A form field is not a place to introduce new claims, inflate scope, or fill space — it is a place to *select* from what is already true and arrange it for the question asked. + +All accuracy rules from `05-cv-templates.md` and `03-writing-style.md` apply unchanged. + +## Field type: self-introduction paragraph + +Usually 100–200 words, one paragraph, no formatting. + +**Structure that works:** +1. Current status — what they are doing or completing now +2. The single strongest piece of evidence, with its number and scale +3. One line of trajectory: how they got here, if a pivot or specialisation is genuinely interesting +4. What they want next, connected to this employer's actual work + +**Rules:** +- **Lead with the strongest evidence, not chronology.** A career history told in order buries the best material when the strongest work is recent. +- **Write one version per role type, not one for all applications.** The same history framed for a backend role and a data role are different paragraphs. Produce both, label them, and say which goes where. +- **Tie it to this employer in the final sentence.** Generic self-introductions are the default and read as such. +- **Count the words and state the count.** Portals truncate silently. Supply a trimmed variant and name which sentence to cut first. + +## Field type: structured project entries + +Typically **project name, role, start date, end date, description.** + +**Project name.** Give the project a descriptive name, not the employer's name — "Warehouse Inventory Forecasting Platform" is a project, "Acme Corp" is an employer. Where a client is more recognisable than the employer, name the client only if the relationship is truthful (placed on-site with, delivered to). + +**Role.** The candidate's role *on that project*, which may be narrower than their job title. Do not upgrade it. + +**Dates.** The dates they worked on **that project**, which are not automatically the employment dates. If a role spanned two years but the named project occupied the later part, saying so is both more accurate and avoids the low-output reading described in `05-cv-templates.md` ("Check tenure against visible output"). Only narrow the dates when the candidate can say when the project actually started — never invent a boundary to improve the ratio. + +**Description.** 100–150 words: what the system did and who used it, then the hardest technical problem and how it was solved, then the outcome with its number. Supply a **~60-word short version** as well; portals vary and the candidate should not have to improvise a cut. + +**Scope discipline is stricter here than on a CV.** A CV bullet can be terse enough to be ambiguous about ownership. A project entry with the candidate's name and role attached reads as ownership of the whole thing. Where they contributed rather than owned, say so inside the description. + +## Field type: hard character limits + +These reward **a specific situation over an adjective**. Most applicants submit adjectives — "passionate", "fast learner", "team player" — so a concrete situation stands out by contrast. + +**Method:** +1. Pick the single most distinctive true thing: usually a number, an unusual combination of backgrounds, or a problem shape that maps onto the employer's own work. +2. Draft 4–6 candidates at different angles. +3. **Count characters programmatically. Do not estimate.** Over-limit text is truncated mid-word. +4. Present all candidates with counts, recommend one, and say why. + +Prefer the version that **maps the candidate's problem onto the employer's problem**, where a truthful mapping exists. That is what "stand out" is actually asking for. + +## Output format + +Save to a plain `.txt` file the candidate can copy from, alongside their other application material for that employer. One file per employer, containing every field that employer asked for. + +Include: +- A header naming the employer and the roles it covers +- Each field, labelled, with word or character counts stated +- Short variants where limits may be tighter than expected +- **`NOTE TO SELF` blocks** for scope reminders and prepared answers to questions the content invites — clearly marked as *not for pasting into the form* +- A dates quick-reference, so date fields stay consistent without re-deriving them + +## Verification before handing it over + +- [ ] Every factual claim traces to the union of `01-candidate-profile.md`, the master CV (`cv/main_example.tex`), and `CLAUDE.md`'s Candidate Profile section +- [ ] No claim contradicts the CV or cover letter submitted for the same role +- [ ] Ownership scoped correctly on contributory work +- [ ] Word and character counts measured, not estimated +- [ ] In-progress qualifications described as in progress +- [ ] `NOTE TO SELF` blocks clearly marked as internal diff --git a/.claude/skills/job-application-assistant/SKILL.md b/.claude/skills/job-application-assistant/SKILL.md index 8d0a49e..adc15bc 100644 --- a/.claude/skills/job-application-assistant/SKILL.md +++ b/.claude/skills/job-application-assistant/SKILL.md @@ -5,7 +5,7 @@ description: > and preparing for interviews. Triggers on keywords like: job posting, job application, CV, cover letter, resume, interview prep, job fit, career, application, apply, ansøgning, stilling allowed-tools: Read, Glob, Grep, WebFetch, WebSearch, Edit, Write, AskUserQuestion -framework_version: 1.0.1 +framework_version: 1.1.0 --- # Job Application Assistant @@ -56,6 +56,7 @@ When the user provides a job posting (URL or text), follow this workflow: | `05-cv-templates.md` | LaTeX CV structure and tailoring rules | | `06-cover-letter-templates.md` | LaTeX cover letter structure and tailoring rules | | `07-interview-prep.md` | STAR examples, tough questions, roleplay guidelines | +| `08-application-forms.md` | Portal free-text fields: self-introduction, project entries, character-limited pitches | --- diff --git a/tools/check_upstream_updates.py b/tools/check_upstream_updates.py index 483f7e3..3512941 100755 --- a/tools/check_upstream_updates.py +++ b/tools/check_upstream_updates.py @@ -28,6 +28,7 @@ FRAMEWORK_FILES = [ ".claude/skills/job-application-assistant/05-cv-templates.md", ".claude/skills/job-application-assistant/06-cover-letter-templates.md", ".claude/skills/job-application-assistant/07-interview-prep.md", + ".claude/skills/job-application-assistant/08-application-forms.md", ".claude/skills/job-application-assistant/SKILL.md", "AGENTS.md", ]