← projects

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:

  1. Paste in a resume.
  2. Paste in a job description.
  3. Ask for a draft.
  4. Correct inaccuracies.
  5. Repeat the process for the next application.

That workflow is fast at first, but it has several weaknesses:

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:

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:

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:

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:

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:

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:

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:

Future areas of exploration include:

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.