Skip to content

Terminal-based job application tracker with TUI and CLI. Track applications through 8 stages, manage interviews, and automate with AI agents. Built with Go + Bubble Tea.

License

Notifications You must be signed in to change notification settings

celloopa/ghosted

Repository files navigation

GHOSTED 👻

     .-.
    (o o)  GHOSTED
    | O |  job application tracker
    |   |  for the perpetually ghosted
    '~~~'

A terminal-based job application tracker for those of us who know the void all too well.

Built with Go and Charm libraries.

Demo

TUI Overview

Navigate, search, filter, and manage your job applications from the terminal.

TUI Overview

AI Agent Integration

Drop a job posting into local/postings/ and let an AI agent (like Claude Code) extract the details and add it to your tracker.

Agent Integration

Edit Agent-Created Entries

Review and update the status of AI-created entries directly from the TUI.

Editing Entries

Features

  • Interactive TUI - Full keyboard-driven interface with vim-style navigation
  • CLI Commands - Script-friendly commands for automation and AI agents
  • JSON Storage - Human-readable data format, easy to backup and version control
  • Status Pipeline - Track applications from saved → applied → ghosted into oblivion
  • Search & Filter - Quickly find applications by company, position, or status
  • Quick Actions - Change status with single keystrokes (1-8)
  • Fetch Command - Auto-fetch job postings from Lever, Greenhouse, LinkedIn, and more
  • Agent Pipeline - Multi-agent system for automated resume and cover letter generation

Installation

From Source (Recommended)

git clone https://github.com/celloopa/ghosted.git
cd ghosted
make install

This installs ghosted to your Go bin directory (~/go/bin by default).

Make sure it's in your PATH:

export PATH="$HOME/go/bin:$PATH"

Go Install (Latest Release)

go install github.com/celloopa/ghosted@latest

Usage

Interactive TUI

ghosted

Keyboard Shortcuts:

Key Action
j/k or arrows Navigate up/down
a Add new application
e Edit selected
d Delete selected
Enter View details
1-8 Quick status change
/ Search
s Filter by status
f Fetch job posting or CV
c Clear filters
? Toggle help
q Quit

Status Keys:

  1. Saved
  2. Applied
  3. Screening
  4. Interview
  5. Offer
  6. Accepted
  7. Rejected
  8. Withdrawn

CLI Commands

# Add new application
ghosted add --json '{"company":"Acme","position":"Engineer","salary_min":150000}'

# List all applications
ghosted list
ghosted list --json

# Get single application (supports partial ID)
ghosted get abc123
ghosted get abc123 --json

# Update application
ghosted update abc123 --json '{"status":"interview","notes":"Phone screen scheduled"}'

# Delete application
ghosted delete abc123

# Fetch job posting or CV (auto-detects)
ghosted fetch https://jobs.lever.co/company/job-id
ghosted fetch cello.design  # Fetches CV from domain/cv.json
ghosted fetch --output acme-swe.md https://example.com/job

# Help
ghosted help

Fetch Command

Fetch job postings or CVs with auto-detection:

# Job postings (any URL with a path)
ghosted fetch https://jobs.lever.co/company/job-id
ghosted fetch https://boards.greenhouse.io/company/jobs/123

# CV/Resume (bare domain or /cv.json path)
ghosted fetch cello.design                    # Fetches domain/cv.json
ghosted fetch https://example.com/cv.json     # Explicit CV URL

Supported job boards:

  • Lever (jobs.lever.co)
  • Greenhouse (boards.greenhouse.io)
  • Microsoft Careers (careers.microsoft.com)
  • Workday
  • LinkedIn Jobs
  • Ashby
  • Generic HTML pages

CV fetching:

  • Fetches JSON Resume format from {domain}/cv.json
  • Saves to local/cv.json

Job postings are converted to markdown and saved to local/postings/.

You can also fetch from within the TUI by pressing f.

Data Storage

By default, data is stored at:

~/.local/share/ghosted/applications.json

Override with environment variable:

export GHOSTED_DATA=/path/to/your/applications.json

Sample Data

New installations are seeded with 3 sample applications to help you get started. Delete them with d in the TUI or start fresh:

rm ~/.local/share/ghosted/applications.json

JSON Schema

{
  "company": "string (required)",
  "position": "string (required)",
  "status": "saved|applied|screening|interview|offer|accepted|rejected|withdrawn",
  "date_applied": "2025-01-15T00:00:00Z",
  "salary_min": 150000,
  "salary_max": 200000,
  "job_url": "https://...",
  "location": "City, State",
  "remote": true,
  "contact_name": "string",
  "contact_email": "string",
  "resume_version": "string",
  "cover_letter": "string",
  "notes": "string",
  "interviews": [
    {
      "date": "2025-01-20T14:00:00Z",
      "type": "phone|video|onsite|technical",
      "notes": "string",
      "with_whom": "string"
    }
  ]
}

See schema.json for the complete JSON Schema specification.

Local Files (Optional)

For organizing job-related documents, create a local/ directory:

local/
├── postings/       # Job posting files (txt, md, png)
├── resumes/        # Resume versions
└── cover-letters/  # Cover letter templates

This directory is gitignored by default.

Agent Pipeline

Ghosted includes a multi-agent document generation pipeline for automating job applications:

Agent Purpose
Parser Extracts structured JSON from job postings
Resume Generator Creates tailored Typst resumes with skill matching
Cover Letter Generator Generates personalized cover letters
Reviewer Scores documents like a hiring manager (70+ to pass)
Tracker Integration Generates CLI commands to add applications

Prompt templates are in internal/agent/prompts/. See CLAUDE.md for integration details.

Development

Project Structure

├── main.go                 # Entry point, CLI commands
├── internal/
│   ├── agent/              # Agent pipeline implementation
│   │   ├── prompts/        # Agent prompt templates (parser, resume, cover, reviewer, tracker)
│   │   ├── resume.go       # Resume generator agent
│   │   ├── cover.go        # Cover letter generator agent
│   │   ├── reviewer.go     # Hiring manager review agent
│   │   └── tracker.go      # Tracker integration agent
│   ├── fetch/              # URL fetching and job board parsing
│   ├── model/
│   │   └── application.go  # Data structures, status constants
│   ├── store/
│   │   └── json.go         # JSON persistence, CRUD operations
│   └── tui/
│       ├── app.go          # Main TUI controller
│       ├── list.go         # List view
│       ├── detail.go       # Detail view
│       ├── form.go         # Add/edit form
│       ├── fetch.go        # Fetch URL view
│       ├── styles.go       # Lip Gloss styling
│       └── keys.go         # Key bindings
├── samples/
│   └── applications.json   # Sample data for new users
└── schema.json             # JSON Schema specification

Building

make build    # Build binary locally
make install  # Build and install to ~/go/bin
make clean    # Remove local binary

Dependencies

Changelog

See CHANGELOG.md for recent updates.

License

MIT License - see LICENSE for details.

Contributing

Contributions welcome! Please feel free to submit a Pull Request.


Built with tears and mass rejection emails 💀

About

Terminal-based job application tracker with TUI and CLI. Track applications through 8 stages, manage interviews, and automate with AI agents. Built with Go + Bubble Tea.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •