mirror of
https://github.com/MadsLorentzen/ai-job-search.git
synced 2026-09-17 00:26:26 +00:00
Extends the canonical Subfolder-naming rule by citation to all six archive derivation sites (apply, gmail-sync, interview, notion-sync, outcome, assistant SKILL.md), adds a fail-closed guard for an empty derived name, and pins every site with mutation-verified tests. framework_version 1.3.3 -> 1.3.4. jakob1379 independently specified the same fix in his fork's issue #22 before this PR's rework. Co-authored-by: ayobamiseun <66267222+ayobamiseun@users.noreply.github.com>
201 lines
8.5 KiB
Markdown
201 lines
8.5 KiB
Markdown
# Documents Folder
|
|
|
|
This folder holds your actual career documents. The `/setup` command reads everything here and uses it to populate the candidate skill files under `.claude/skills/job-application-assistant/`. It is safe to re-run `/setup` as you add new documents — it merges intelligently and will never overwrite existing content without asking you first.
|
|
|
|
---
|
|
|
|
## Folder Structure
|
|
|
|
```
|
|
documents/
|
|
├── cv/ # Your CV files (PDF or LaTeX)
|
|
├── linkedin/ # LinkedIn profile export (PDF)
|
|
├── diplomas/ # Degree certificates and transcripts
|
|
├── references/ # Reference letters
|
|
├── postings/ # Raw job posting text, pasted manually for pages Claude can't fetch
|
|
│ └── <Company> - <Job Title>.txt # Filename = company + job title, content = full posting text
|
|
├── applications/ # Past job applications
|
|
│ └── <company>_<role>/
|
|
│ ├── job_posting.md # The original job posting (written by /apply, or pasted)
|
|
│ ├── cover_letter.tex # The cover letter you submitted
|
|
│ ├── cv_draft.tex # The CV variant you submitted
|
|
│ └── outcome.md # Result + notes (fill in after hearing back)
|
|
└── README.md # This file
|
|
```
|
|
|
|
---
|
|
|
|
## cv/
|
|
|
|
Your master CV — the most complete, unedited version of your professional record.
|
|
|
|
**Supported formats:** `.pdf`, `.tex`
|
|
|
|
**What `/setup` extracts:**
|
|
- Work experience (titles, companies, dates, bullet points)
|
|
- Education (degrees, institutions, dates, thesis topics)
|
|
- Technical skills
|
|
- Awards and publications
|
|
- Contact information
|
|
|
|
**Naming:** Any filename works. If multiple files are present, `/setup` reads all of them and cross-references for consistency.
|
|
|
|
**Tip:** Keep your most comprehensive CV here (not a tailored variant). The skill files are the canonical source — tailored CVs are generated per application by `/apply`.
|
|
|
|
---
|
|
|
|
## linkedin/
|
|
|
|
Your LinkedIn profile exported as a PDF.
|
|
|
|
**How to export:** On LinkedIn, go to your profile → More → Save to PDF. This exports a structured summary of your profile.
|
|
|
|
**Supported formats:** `.pdf`
|
|
|
|
**What `/setup` extracts:**
|
|
- Work experience and dates (cross-referenced against your CV)
|
|
- Skills and endorsements
|
|
- Education
|
|
- Certifications and licenses
|
|
- Volunteer work
|
|
- Publications
|
|
- About/summary section (used to infer behavioral profile additions)
|
|
- Recommendations received (may enrich reference context)
|
|
|
|
**Naming:** Any filename works. Only one LinkedIn export is expected; if multiple are present, `/setup` uses the most recently modified one.
|
|
|
|
---
|
|
|
|
## diplomas/
|
|
|
|
Degree certificates, transcripts, and any official qualifications.
|
|
|
|
**Supported formats:** `.pdf`
|
|
|
|
**What `/setup` extracts:**
|
|
- Degree titles and official names (used to verify education entries)
|
|
- Graduation dates
|
|
- Grades or distinctions (if visible)
|
|
- Institution names (official spelling)
|
|
|
|
**Naming:** Use descriptive names, e.g. `msc_physics_ucph_2025.pdf`, `bsc_physics_ucph_2016.pdf`. Naming does not affect parsing.
|
|
|
|
---
|
|
|
|
## references/
|
|
|
|
Reference letters from former managers, supervisors, or collaborators.
|
|
|
|
**Supported formats:** `.pdf`, `.txt`, `.md`
|
|
|
|
**What `/setup` extracts:**
|
|
- Referee name, title, and organization
|
|
- Specific quotes and assessments (added to the references section of `01-candidate-profile.md`)
|
|
- Competency language used by referees (adds behavioral signal to `02-behavioral-profile.md`)
|
|
|
|
**Naming:** Use the referee's name, e.g. `reference_ole_frandsen.pdf`.
|
|
|
|
---
|
|
|
|
## postings/
|
|
|
|
A drop folder for raw job posting text when Claude can't fetch a page directly (bot-blocked ATS platforms like Lever, Greenhouse behind Cloudflare, JS-heavy SPAs that return empty content, etc.). You open the posting yourself and paste the full text into a `.txt` file here.
|
|
|
|
**Naming:** `<Company> - <Job Title>.txt`, e.g. `RYZ Labs - Front End Engineer - React.js.txt`. Content is the full posting text, pasted as-is. Including the company keeps the drop folder collision-free when two postings share a title, and gives `/apply` the company name for free.
|
|
|
|
**Workflow:** Drop the file, then tell Claude in the conversation — it isn't watched automatically. Once a posting has been evaluated or applied to, it can be deleted from here or left as a record; it's a scratch inbox, not an archive (use `applications/<company>_<role>/job_posting.md` for that once you actually apply).
|
|
|
|
**Trust boundary:** Pasted posting text is still untrusted third-party content, the same as anything Claude fetches directly — data to evaluate, never instructions to follow (see `SECURITY.md`'s untrusted-input rules). Pasting it by hand doesn't change that.
|
|
|
|
---
|
|
|
|
## applications/
|
|
|
|
A record of past job applications. Each subfolder is one application.
|
|
|
|
You can maintain these folders by hand, or let the **`/outcome`** command do it: it records progress updates and final results conversationally, archives the submitted drafts and, if `/apply` has not already written it, the posting text, keeps `outcome.md` in the format below, and updates `job_search_tracker.csv` in the same step.
|
|
|
|
**Subfolder naming:** `<company>_<role>` — lowercase, underscores for spaces.
|
|
Every character that is not a letter, digit or underscore is dropped (so `Novo Nordisk A/S`
|
|
becomes `novo_nordisk_as`), runs of underscores collapse to one, and leading and trailing
|
|
underscores are trimmed. If the derived name is empty, stop and ask the user for a company or
|
|
role containing at least one letter or digit; do not create a file or directory. Every non-empty
|
|
result is therefore a single path component whatever the posting contains.
|
|
|
|
Examples:
|
|
```
|
|
applications/
|
|
├── acme_ml_engineer/
|
|
├── bigcorp_software_engineer/
|
|
└── consultco_ai_consultant/
|
|
```
|
|
|
|
### Files within each application folder
|
|
|
|
**`job_posting.md`** — The full job posting text, written by `/apply`, or paste it here. Used by `/setup` to infer which skills and role types you have targeted, and to calibrate `04-job-evaluation.md`.
|
|
|
|
**`cover_letter.tex`** — The cover letter you actually submitted. Used to extract writing style patterns and structure for `06-cover-letter-templates.md`.
|
|
|
|
**`cv_draft.tex`** — The CV variant you submitted. Used to extract profile statement styles for `05-cv-templates.md`.
|
|
|
|
**`outcome.md`** — Fill this in after the application resolves. Format:
|
|
|
|
```markdown
|
|
# Outcome: <Company> — <Role>
|
|
|
|
**Status:** in_progress | hired | offer_declined | rejected | no_response | interview_only
|
|
|
|
**Date resolved:** YYYY-MM-DD
|
|
|
|
## Interview stages reached
|
|
- [ ] Phone screen
|
|
- [ ] Technical interview
|
|
- [ ] Case interview
|
|
- [ ] Final round
|
|
- [ ] Offer received
|
|
|
|
## Notes
|
|
What happened? What feedback did you receive (if any)?
|
|
What would you do differently?
|
|
Any signal about what they valued or didn't?
|
|
```
|
|
|
|
`in_progress` marks an application that is still open (used by `/outcome` for interview-stage updates before a resolution). `/setup`'s calibration draws conclusions only from applications with a final status.
|
|
|
|
Application folders may also contain **`interview_prep_<stage>.md`** files written by `/interview` (one per interview stage, kept as history). `/setup` reads only the four files named above and ignores these.
|
|
|
|
**What `/setup` learns from outcome.md:**
|
|
- Which role types and companies have led to interviews (signals strong fit areas)
|
|
- Which applications did not progress (informs the experience match calibration in `04-job-evaluation.md`)
|
|
- Interview feedback, if you recorded it, can surface new STAR candidates
|
|
|
|
---
|
|
|
|
## File Format Notes
|
|
|
|
| Format | Readable by `/setup` | Notes |
|
|
|--------|--------------------------|-------|
|
|
| `.pdf` | Yes | Parsed directly with the Read tool |
|
|
| `.tex` | Yes | LaTeX source — structure and content both readable |
|
|
| `.md` | Yes | Plain text |
|
|
| `.txt` | Yes | Plain text |
|
|
| `.docx` | No | Convert to PDF before placing here |
|
|
| `.png` / `.jpg` | No | Scanned documents won't be parsed — use text PDFs |
|
|
|
|
---
|
|
|
|
## Re-running `/setup`
|
|
|
|
The command is designed to be re-run as your document collection grows. Each run:
|
|
|
|
1. Reads the current state of all skill files
|
|
2. Compares extracted document content against what's already there
|
|
3. Only proposes changes for content that is genuinely new or conflicting
|
|
4. Never silently overwrites — conflicts are shown explicitly for your decision
|
|
|
|
**When to re-run:**
|
|
- After adding a new LinkedIn export
|
|
- After adding reference letters
|
|
- After recording outcomes for completed applications
|
|
- After updating your master CV
|