How the `/outcome` Command Tracks Application Results and Archives Materials in AI-Job-Search

The /outcome command records application results by simultaneously updating a central tracker CSV and creating a per-application archive folder with four preserved files: cv_draft.tex, cover_letter.tex, job_posting.md, and outcome.md.

The /outcome command serves as the central hub for tracking what happens after a job application is submitted in the MadsLorentzen/ai-job-search framework. It maintains a complete audit trail by writing to two distinct locations: a master spreadsheet that drives other workflows and a dedicated archive folder for each application. This dual-write approach ensures that application results remain queryable for analysis while preserving every submission artifact for future reference.

Dual Destination Architecture

The /outcome command writes to two destination locations whenever a user records an application result.

The Master Tracker: job_search_tracker.csv

The command updates job_search_tracker.csv—the same spreadsheet that powers the /scrape and /rank workflows. According to the source code in .claude/commands/outcome.md (lines 30-34, 124-125), this update involves:

  • Modifying the status column to reflect the new state (e.g., interview, offer, hired, rejected)
  • Appending a dated entry to the notes column

The command reads the CSV first; if it does not exist, it creates the file with a standard header (lines 30-33). Row matching uses case-insensitive company and role names. No rows are reordered or removed, guaranteeing idempotent behavior (lines 124-125, 162-166).

The Per-Application Archive: documents/applications/<company>_<role>/

Each application gets its own folder under documents/applications/. The folder name follows a strict convention: lowercase company and role with underscores replacing spaces, derived in Step 1.3 (line 36). Inside this folder, the command creates or updates four files (lines 89-97):

File Purpose
cv_draft.tex Archived copy of the submitted CV
cover_letter.tex Archived copy of the submitted cover letter
job_posting.md Saved job posting text
outcome.md Structured outcome record with status, dates, and notes

How Archive Materials Are Captured

Preserving Application Documents

The cv_draft.tex and cover_letter.tex files are copied, never moved from their source locations (line 93). The command resolves source paths in priority order:

  1. Paths recorded in the tracker (cv_file and cover_letter_file columns)
  2. Fallback locations: cv/main_<company>*.tex and cover_letters/cover_<company>_*.tex

Existing files remain untouched to prevent accidental overwrites.

Fetching Job Postings

The job_posting.md file is populated using the repository's WebFetch logic to retrieve content from the URL stored in the tracker's source column. If fetching fails, the command either prompts the user to paste the posting or creates a stub noting unavailability (lines 94-95).

Structured Outcome Documentation

The outcome.md file follows a strict markdown schema defined in documents/README.md. The command writes (lines 97-115):

  • Current status
  • Optional resolution date
  • Interview-stage checklist (e.g., phone screen, technical interview, final round)
  • Free-form "Notes" section

Subsequent runs only tick new stages and append notes, preserving complete history (lines 166-168).

Automated Follow-Up Branch

When invoked with followup, the command enters a dedicated follow-up mode (lines 70-81). It scans the tracker for open applications that have been quiet longer than the default 10-day threshold (or a user-specified value). For qualifying applications:

  1. It drafts a polite follow-up note (80-120 words) using the archived cover_letter.tex and job_posting.md as style and context references
  2. Upon user approval, it:
    • Appends followed up YYYY-MM-DD to the CSV's notes column (line 80)
    • Saves the draft as followup_YYYY-MM-DD.md in the archive folder (line 81)

# Trigger follow-up mode for all quiet applications

$outcome followup

# Use custom threshold (e.g., 14 days)

$outcome followup --threshold 14

Calibration Hand-Off to /setup

After recording an outcome, the command performs a calibration check (lines 30-31). It counts how many outcome.md files have reached a final status. If enough resolved applications exist, it suggests running /setup (Path A) so the framework can:

  • Calibrate fit scoring parameters
  • Mine STAR-type interview examples from archived materials

The command never edits evaluation files directly, preserving the single-source-of-truth principle (lines 34-35).

Usage Examples

Recording a Simple Resolution


# Mark as hired (interactive prompts for dates and notes)

$outcome acme "hired"

Resulting changes:

File Change
job_search_tracker.csv status → hired; dated note appended to notes
documents/applications/acme_software_engineer/outcome.md Status set, resolution date added, interview checklist updated, notes appended
documents/applications/acme_software_engineer/cv_draft.tex Copied from original cv_file
documents/applications/acme_software_engineer/cover_letter.tex Copied from original cover_letter_file
documents/applications/acme_software_engineer/job_posting.md Fetched from tracker URL or user-provided

Adding an Application Outside the Workflow


# Interactive mode for manually submitted applications

$outcome

# → prompts for company, role, date, channel, source URL, etc.

# → appends new row to tracker

# → creates empty archive folder for future material

Key Implementation Files

File Role
[.claude/commands/outcome.md](https://github.com/MadsLorentzen/ai-job-search/blob/master/.claude/commands/outcome.md) Full command specification with steps, CSV handling, and archiving logic
job_search_tracker.csv (generated) Central CSV storing status, dates, and notes for every application
documents/applications/<company>_<role>/outcome.md Per-application outcome record; parsed by /setup for calibration
documents/applications/<company>_<role>/cv_draft.tex Archived submitted CV
documents/applications/<company>_<role>/cover_letter.tex Archived submitted cover letter
documents/applications/<company>_<role>/job_posting.md Saved job posting text
documents/README.md Defines the markdown schema for outcome.md

Summary

  • /outcome uses dual-write architecture: updates job_search_tracker.csv and populates documents/applications/<company>_<role>/ folders
  • Four archived files per application: cv_draft.tex, cover_letter.tex, job_posting.md, and structured outcome.md
  • Idempotent CSV updates: rows are never reordered or removed, only modified in place
  • Follow-up automation: scans for quiet applications, drafts context-aware notes, and logs actions
  • Calibration trigger: suggests /setup when enough resolved outcomes exist for model refinement
  • Single-source-of-truth preserved: evaluation files remain read-only for this command

Frequently Asked Questions

What happens if the tracker CSV doesn't exist?

The command creates job_search_tracker.csv with a standard header (lines 30-33). This ensures first-time users can immediately start recording outcomes without manual setup.

Can I overwrite archived files like cv_draft.tex?

No. The command copies files using a preserve-existing strategy (line 93). Once an application document is archived, it remains immutable to maintain historical accuracy.

How does the follow-up mode determine which applications need attention?

It filters the tracker for rows where status indicates an open application and the last activity exceeds the threshold—default 10 days or user-specified. The logic draws exclusively from archived cover_letter.tex and job_posting.md to maintain context (lines 70-76).

What interview stages appear in outcome.md?

The checklist schema in documents/README.md typically includes: phone screen, technical interview, take-home assignment, behavioral interview, final round, and reference check. The command ticks stages as you update outcomes, building a complete timeline.

Does /outcome modify my evaluation or scoring configuration?

No. The command only reads evaluation files and suggests running /setup for calibration. It never writes to fit-scoring parameters or interview example databases (lines 34-35), ensuring clean separation between data collection and model training.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →