mirror of
https://github.com/MadsLorentzen/ai-job-search.git
synced 2026-09-17 00:26:26 +00:00
RFC feat(08): application-form fields as a third /apply artifact (#212)
* feat(08): add application-form fields as a third /apply artifact /apply produces a CV and a cover letter. Many applications need a third thing: free-text typed into a portal. Graduate programs, large-employer ATS systems and startup forms ask for self-introductions, structured project entries, motivation questions and pitches under a hard character limit - none of which either document covers, and all of which the interviewer reads alongside the CV. Governing rule: a form field selects from what is already true and arranges it for the question asked. It never introduces a new claim. All accuracy rules from 03 and 05 apply unchanged. Covers three field types (self-introduction, structured project entries, hard character limits), the output format (a plain .txt the candidate pastes from, with counts stated and internal NOTE TO SELF blocks marked as not-for-pasting), and a verification checklist. Two places where form fields are stricter than a CV, because both are easy to get wrong: - Project entries carry a name and a role, so they read as ownership of the whole project in a way a terse CV bullet does not. Contributory work has to be scoped inside the description. - Project dates are the dates of the project, not of the employment. Narrowing them is more accurate where the candidate can say when the project started - but never invent a boundary to improve the ratio. Registers the file in SKILL.md (framework_version 1.0.1 -> 1.1.0) and in the FRAMEWORK_FILES list in tools/check_upstream_updates.py, so it is covered by the update check like every other framework file. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fixup(08,apply): wire as optional /apply offer; align grounding to three-source union - apply.md Step 6: offer the third artifact after CV/cover letter are produced, mirroring the /outcome house pattern for optional capabilities (offer, act only on yes, default output unchanged). - 08-application-forms.md: ground claims against the framework's 01-candidate-profile.md + master CV + CLAUDE.md union (per #185) instead of only 01, in both the governing rule and the checklist. Per MadsLorentzen review on PR #212. Rebase onto merged #210 (the tenure-check reference this file cites) still pending — #210 hasn't landed on upstream/master yet. --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
1969d0ea70
commit
41ddc0c73c
@@ -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."
|
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
|
### Next Steps
|
||||||
- **Submitted?** `/outcome <company>` logs it in the tracker and starts the per-application record that `/setup` later uses to calibrate the fit framework.
|
- **Submitted?** `/outcome <company>` 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.
|
- **Interview scheduled?** `/interview` builds a stage-specific prep pack from this posting and the documents you just created.
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -5,7 +5,7 @@ description: >
|
|||||||
and preparing for interviews. Triggers on keywords like: job posting, job application, CV,
|
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
|
cover letter, resume, interview prep, job fit, career, application, apply, ansøgning, stilling
|
||||||
allowed-tools: Read, Glob, Grep, WebFetch, WebSearch, Edit, Write, AskUserQuestion
|
allowed-tools: Read, Glob, Grep, WebFetch, WebSearch, Edit, Write, AskUserQuestion
|
||||||
framework_version: 1.0.1
|
framework_version: 1.1.0
|
||||||
---
|
---
|
||||||
|
|
||||||
# Job Application Assistant
|
# 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 |
|
| `05-cv-templates.md` | LaTeX CV structure and tailoring rules |
|
||||||
| `06-cover-letter-templates.md` | LaTeX cover letter 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 |
|
| `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 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ FRAMEWORK_FILES = [
|
|||||||
".claude/skills/job-application-assistant/05-cv-templates.md",
|
".claude/skills/job-application-assistant/05-cv-templates.md",
|
||||||
".claude/skills/job-application-assistant/06-cover-letter-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/07-interview-prep.md",
|
||||||
|
".claude/skills/job-application-assistant/08-application-forms.md",
|
||||||
".claude/skills/job-application-assistant/SKILL.md",
|
".claude/skills/job-application-assistant/SKILL.md",
|
||||||
"AGENTS.md",
|
"AGENTS.md",
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user