Ghost Applicant
A job application human-in-the-loop generative AI system
Ghost Applicant is a system that helps me organize my professional experience and create tailored resumes and cover letters using a generative AI workflow.
It began as a practical response to a frustrating problem: I wanted to use generative AI to help with job applications, but typical chat-based workflows required me to repeatedly provide the same background information. Worse, models could confidently invent details that were not part of my actual experience.
I built Ghost Applicant to give the AI better context, stronger constraints, and a more useful interface for collaboration.
View source on GitHub.
The Problem
A conventional AI-assisted cover-letter workflow often looks like this:
- Paste in a resume.
- Paste in a job description.
- Ask for a draft.
- Correct inaccuracies.
- Repeat the process for the next application.
That workflow is fast at first, but it has several weaknesses:
- Important experience is difficult to retrieve consistently.
- The model may invent responsibilities, technologies, or accomplishments.
- Feedback from one draft does not automatically improve the next one.
- The user must repeatedly reconstruct context.
- The process encourages accepting plausible language instead of verifying claims.
I wanted to create a system where the AI could work with structured, reusable information while keeping the user responsible for judgment and final decisions.
The concept
Ghost Applicant combines four related functions:
- A personal content management system for experience, projects, skills, and accomplishments
- A job-application tracker
- A document-generation workflow for resumes and cover letters
- An MCP-enabled interface that allows an AI agent to read and update application content through tools
Instead of asking an LLM to remember my background from a single prompt, I can maintain a structured body of source material and let the system retrieve relevant context for a particular opportunity.
The result is less like “ask an AI to write a cover letter” and more like collaborating with an assistant that has access to a carefully maintained knowledge base.
How it works
1. Maintain source content
I can enter and update information about:
- Employment history
- Projects
- Technical skills
- Professional accomplishments
- Case-study details
- Preferred language and positioning
- Job postings and application status
Content can be entered manually through the application or managed conversationally through an LLM connected to Ghost Applicant’s tools.
2. Add a job description
For each opportunity, the system stores the job description and related application information.
The job becomes the context for selecting relevant experience rather than simply a prompt pasted into a chat window.
3. Retrieve relevant experience
The system can identify and assemble source material that relates to the role, such as:
- Similar responsibilities
- Relevant technologies
- Related client or agency work
- Evidence of collaboration
- Projects demonstrating the required capabilities
The goal is not to generate the most impressive possible claims. It is to generate useful drafts from information that already exists in the system.
4. Draft and revise
The application can generate a draft based on the selected context. I can then provide feedback in natural language:
- Emphasize a particular project
- Remove a claim that feels overstated
- Make the tone warmer or more direct
- Reduce technical detail
- Connect an experience more clearly to the job
- Replace a generic paragraph with a specific example
The system can queue a revised draft while preserving the previous version, making the process iterative rather than destructive.
The MCP interface
Ghost Applicant includes an embedded MCP server that exposes application functionality as structured tools.
An attached agent can use those tools to:
- Search and retrieve content
- Read job descriptions
- Create or update records
- Associate experience with an application
- Add feedback
- Request new drafts
- Update application status
This lets me interact with the system conversationally without making the conversation itself the system of record.
That distinction is important. The model can help me navigate and modify the content, but the application remains the durable source of truth.
Designing for human judgment
The most important design decision was not to treat automation as the goal.
Ghost Applicant is designed around a human-in-the-loop workflow:
- The system provides structured context.
- The model proposes language and connections.
- The user reviews claims and tone.
- Feedback becomes part of the iteration.
- The final document remains a human decision.
This approach also helped me think more carefully about what generative AI should and should not do. It is useful for synthesis, revision, and exploring possible framings. It should not be trusted to invent professional history or make unreviewed claims on someone’s behalf.
What I learned
Building Ghost Applicant has been a practical exploration of several problems in AI product design:
Context is a product problem
Giving a model “more context” is not enough. The context needs to be organized, retrievable, relevant, and understandable at the moment it is used.
Tool access changes the interaction model
An LLM connected to application tools is not just a chatbot with a longer prompt. It becomes an interface for operating on structured data. That creates new possibilities, but it also requires clear tool boundaries and careful feedback.
Human review is part of the workflow
Review is not merely a final safety step. It is an active part of the creative process. The user’s feedback improves the draft and clarifies the desired result.
Good automation reduces repetition without hiding decisions
The system should remove tedious work while making important choices visible. I want Ghost Applicant to help me work faster, not make me less aware of what is being said on my behalf.
Why I built it
Ghost Applicant started as a job-search tool, but it has become a broader experiment in designing creative workflows around generative AI.
It explores a question I find increasingly interesting:
How can AI help people move from raw information to useful creative output without removing authorship, judgment, or accountability from the process?
That question applies far beyond job applications—to research, content management, client work, prototyping, and other collaborative creative systems.
Current status
Ghost Applicant is an actively evolving independent project.
Current capabilities include:
- Rails-based content and application management
- Structured storage for professional experience and project information
- Job-description tracking
- AI-assisted drafting and revision
- Embedded MCP server
- Tool-based record retrieval and updates
- Human feedback and iteration workflows
Future areas of exploration include:
- Better source attribution within generated drafts
- More transparent explanations of why particular experiences were selected
- Version comparison and change tracking
- Evaluation tools for unsupported or weakly grounded claims
- Improved portfolio and case-study generation
- Additional integrations with job-search and document workflows
The result
Ghost Applicant has helped me turn a repetitive, error-prone process into a more structured creative workflow.
It is not intended to replace the applicant. It is intended to help the applicant organize experience, explore possibilities, identify relevant evidence, and produce better work with less repetition.
And, appropriately, it is helping me apply for the kind of work I built it to do.