Build a Local AI Job Hunter with Markdown and an Agent
Most AI job-search tools begin with the wrong goal: generate more applications, faster.
That was not the system I wanted. I wanted a small workspace that could remember my actual experience, compare it with each new job description, tell me when a role was not worth pursuing, and produce a tailored set of materials without inventing anything.
The result is a local, Markdown-based Job Hunter. It has no database, no dashboard, and no automatic application feature. It is just a folder that an AI agent can read and write.
This note explains the structure and includes the prompts needed to reproduce it.
What the system does
For every new job description, the agent turns one raw input into four useful outputs:
1. A structured job card that explains what the employer is actually looking for. 2. A clear decision: apply, apply after adjustments, or do not apply. 3. A tailored resume draft based only on verified facts. 4. Interview preparation and an updated application tracker.
The important part is not the number of files. It is the separation of responsibilities:
- The job description says what the employer wants. - The profile files say what you can actually prove. - The templates define the expected output. - The agent compares the two but is not allowed to turn requirements into experience.
That last rule matters. If a JD asks for something you have never done, the system should identify the gap—not quietly add it to your resume.
The folder structure
The entire workspace can live in Obsidian, VS Code, or any folder-based writing tool.
```text Job-Hunter/ ├── 00-Inbox/ ├── 01-Profile/ │ ├── resume-master.md │ ├── fact-bank.md │ └── project-stories.md ├── 02-Jobs/ │ └── _job-card-template.md ├── 03-Resume-Versions/ │ └── _tailored-resume-template.md ├── 04-Interview-Prep/ │ └── _interview-prep-template.md ├── 05-Tracker/ │ └── job-tracker.md └── 90-Prompts/ └── job-agent-prompt.md ```
Each folder has one job:
- `00-Inbox` holds raw job descriptions. - `01-Profile` is the evidence base. - `02-Jobs` holds structured analysis and the application decision. - `03-Resume-Versions` holds role-specific resume drafts. - `04-Interview-Prep` holds likely questions, risk areas, and questions to ask. - `05-Tracker` records status and next actions. - `90-Prompts` stores the operating rules for the agent.
Use a predictable filename such as:
```text Company-Role-YYYYMMDD.md ```
This is deliberately boring. Boring file structures are easy for both people and agents to navigate.
Download the starter kit
If you want to skip the initial file setup, download the ready-to-use, privacy-safe template pack:
[Download the Job Hunter Starter Kit](/downloads/job-hunter-starter-kit.zip)
The ZIP contains the folder structure, blank profile files, output templates, tracker, README, and agent operating prompt. It contains no personal resume, application history, or example candidate data.
Prompt 1: Build the workspace
Give the following prompt to an agent that can create and edit local files. Replace `[PATH]` with the folder where you want the system.
```text Create a lightweight, local job-search workspace at [PATH].
Use Markdown files only. Do not create a website, frontend, database, or automatic application system.
Create this structure:
Job-Hunter/ 00-Inbox/ 01-Profile/ resume-master.md fact-bank.md project-stories.md 02-Jobs/ _job-card-template.md 03-Resume-Versions/ _tailored-resume-template.md 04-Interview-Prep/ _interview-prep-template.md 05-Tracker/ job-tracker.md 90-Prompts/ job-agent-prompt.md
The job-card template must contain: - basic information and source - the original JD - a short interpretation of what the role is really hiring for - core requirements and bonus requirements - industry, function, skill, tool, and soft-skill keywords - evidence-backed strengths - gaps and missing information - one of three decisions: APPLY / APPLY AFTER ADJUSTMENTS / DO NOT APPLY - resume changes - likely interview questions - next action
The tailored-resume template must contain: - target company and role - tailored summary - reordered and rewritten project experience - reordered and rewritten work experience - a table mapping JD keywords to verified evidence - missing information - claims that must not be used
The interview-prep template must contain: - an interpretation of the role - a one-minute introduction - 10 likely questions - 3 pressure questions - candidate risk areas - questions for the interviewer - facts or examples still needed before the interview
The tracker must contain these columns: Date | Company | Role | Status | Fit | Next action | Related files | Notes
Write a job-agent prompt that instructs the agent to: - read the master resume, fact bank, project stories, and all three templates - preserve the original JD - distinguish verified matches, partial matches, non-matches, and missing information - cite the profile file used for every important match - make a clear three-way application decision - create a job card, tailored resume draft, and interview-prep file - update the tracker - never invent experience, employers, education, metrics, tools, certificates, awards, links, or outcomes - mark unsupported information as NEEDS USER INPUT - never apply to a role automatically
Use concise, practical Markdown. After creating the workspace, list every file created and explain what the user must fill in before processing the first JD. ```
This prompt creates the shell. The quality of the system still depends on the profile you put inside it.
Prompt 2: Build the evidence base
The profile is more than a resume. A resume is compressed for presentation; the agent needs a richer source of truth.
Prepare your current resume, project notes, portfolio material, and any verified achievement records in a temporary source folder. Then run:
```text Read all source materials in [SOURCE PATH] and prepare the profile files in [JOB-HUNTER PATH]/01-Profile.
Create or update: 1. resume-master.md 2. fact-bank.md 3. project-stories.md
Rules: - Use only facts explicitly supported by the source materials. - Do not infer missing employers, titles, dates, metrics, tools, clients, certificates, awards, or outcomes. - Preserve uncertainty. Write NEEDS USER INPUT where evidence is missing or inconsistent. - If two sources conflict, list the conflict instead of choosing one silently. - Do not turn aspirations or job requirements into past experience. - Keep sensitive personal details only in resume-master.md. Do not duplicate them unnecessarily.
resume-master.md should contain: - contact details - target roles - professional summary - skills - complete work history - complete project history - education - certificates and awards - languages - portfolio links - a section called Immutable or Unverified Facts
fact-bank.md should organize reusable evidence by: - work experience - project experience - skills - domain knowledge - methods and tools - metrics and outcomes - certificates and awards - evidence links - facts the AI is forbidden to invent
For every important fact, record its source and whether it is verified.
project-stories.md should convert reusable examples into Situation / Task / Action / Result format. For each story, include: - the situation - the task - the candidate's actual actions - the verified result - relevant role types and keywords - capabilities the story can prove - known gaps or unsupported claims
Do not optimize the writing for a specific JD yet. This step creates the reusable source of truth.
When finished, report: - which files were used - which facts were verified - which conflicts or gaps need human review - which claims must not be used in future applications ```
This step is worth doing carefully. Once the evidence base is stable, every later application becomes a comparison and selection task rather than a fresh attempt to remember your own history.
Prompt 3: Process a new JD
When you find a role, copy the full JD into `00-Inbox`. Keep the original wording and source link if available. Then give the agent this prompt:
```text Process the new job description at: [PATH TO JD]
Use the Job-Hunter workspace at: [JOB-HUNTER PATH]
Before writing anything, read: - 01-Profile/resume-master.md - 01-Profile/fact-bank.md - 01-Profile/project-stories.md - 02-Jobs/_job-card-template.md - 03-Resume-Versions/_tailored-resume-template.md - 04-Interview-Prep/_interview-prep-template.md - 05-Tracker/job-tracker.md - 90-Prompts/job-agent-prompt.md
Then complete this workflow:
1. Preserve the complete original JD. 2. Extract the company, role, location, responsibilities, requirements, bonus qualifications, and keywords. If the JD does not say something, write JD NOT SPECIFIED. 3. Explain in 3-5 sentences what problem this role is actually expected to solve and what kind of candidate the company appears to want. 4. Compare every core requirement with the profile and classify it as: - VERIFIED MATCH - PARTIAL MATCH - NO EVIDENCE - NEEDS USER INPUT 5. For every match, name the source file and the supporting fact. Never copy a JD requirement into the candidate profile as if it were experience. 6. Make one clear decision: - APPLY - APPLY AFTER ADJUSTMENTS - DO NOT APPLY Give the reason in plain language. Do not hide behind a numerical score. 7. Create a job card in 02-Jobs using the template. 8. Create a tailored resume draft in 03-Resume-Versions. You may reorder, select, and rewrite verified facts, but you may not add new ones. 9. Create an interview-prep file in 04-Interview-Prep. Base suggested answers on verified stories; mark missing examples as NEEDS USER INPUT. 10. Add or update one row in 05-Tracker/job-tracker.md with the current status, decision, next action, and relative links to the generated files.
Use the JD filename as the basis for all output filenames.
At the end, report only: - files created or updated - the application decision - the 1-3 most important resume changes - missing evidence the user should supply - the new tracker status
Do not submit an application or contact anyone. ```
The output is not meant to be accepted blindly. The agent is performing evidence retrieval and first-pass editing. The human still owns the decision, the final wording, and every external action.
Why the templates matter
Without templates, the agent tends to produce whatever looks useful in the moment. One role gets a long essay, another gets a score, and a third gets a rewritten resume with no explanation of where the claims came from.
Templates make the workflow inspectable. The same questions are asked every time:
- What does this role actually require? - Which requirements can I prove? - Which gaps are real? - Is this worth the time? - What exactly should change in the resume? - What must I verify before an interview?
The tracker then preserves decisions across sessions. It prevents the workflow from becoming a pile of disconnected AI chats.
What I deliberately did not automate
I did not add automatic job discovery, one-click applications, outreach, or a database. Those features increase complexity before improving judgment.
The expensive part of a serious application is not pasting text into a form. It is deciding whether the role deserves attention, selecting the strongest evidence, and refusing to overstate weak matches.
This system keeps those decisions visible.
Privacy and safety boundaries
A local Markdown workspace keeps your application materials under your control and avoids copying them into another dedicated job-search platform. But “stored locally” does not automatically mean “processed privately.” If your agent sends file contents to a hosted model, the provider's retention and training policies still matter.
Before using real materials:
- Check what files the agent can access. - Check the model provider's data and retention policy. - Remove identity numbers, financial records, and unrelated sensitive documents. - Keep contact details in one file instead of duplicating them across the workspace. - Review every tailored resume before sending it. - Never let the agent invent missing evidence to make a role look like a better fit.
The system is useful because it makes the boundary between fact and inference explicit. The folder structure is simple. That boundary is the real product.