job-hunting-organizer
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| JHO_DATA | No | Override the data root directory (default `~/job-hunting-organizer-data/`) | |
| LLM_TAGS | No | Comma-separated `key=value` tags sent on every LLM call (e.g. `user=jho`). Some providers (notably Nous Research's inference gateway) require a `user=<value>` tag or return `400 missing tags`. `jho` ships with a default `user=jho` tag so this is handled automatically for Nous; override it here if you need a different value. | |
| NO_COLOR | No | Set to disable ANSI colour output in terminal output | |
| LLM_MODEL | No | Override the model from `config.json` | |
| JHO_CV_PATH | No | Pre-fill the CV path during `jho init` | |
| LLM_API_KEY | No | Override the API key from `config.json` | |
| JHO_LOG_FILE | No | Override the log file path (default `<config-home>/jho.log`); set to any falsy value via `logging.disableFileLogging` in `config.json` to suppress file logging | |
| LLM_BASE_URL | No | Override the LLM endpoint base URL from `config.json` | |
| JHO_LOG_LEVEL | No | Override the minimum log level written to file | |
| JHO_CONFIG_HOME | No | Override the config home directory (default `~/.job-hunting-organizer/`) | |
| JHO_LINKEDIN_URL | No | Pre-fill the LinkedIn profile URL during `jho init` | |
| JHO_URL_PATTERNS | No | JSON array of `{ name, pattern, group }` URL-pattern objects used to extract job IDs from job ad URLs; tried before the built-in Seek/LinkedIn/Indeed patterns | |
| JHO_DEFAULT_CAMPAIGN | No | Default campaign name when `--campaign` is omitted (default `default`) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_applicationsC | List applications with optional status, tags, role, employment type, and text filters |
| show_applicationB | Show a single application: metadata (meta.md) and job description (jd.md) |
| list_interviewsB | List all interviews for an application |
| read_profileB | Read the candidate profile for a campaign |
| get_statsA | Compute campaign statistics: counts by status, role, site, employment type, funnel, interview entries, and this-month delta |
| get_rootB | Resolve the campaign root directory path |
| get_campaignC | Get campaign configuration (secrets redacted) |
| list_campaignsB | List all campaigns under the data root |
| ownershipA | Show file ownership rules (which files the tool writes, which you can edit). Returns a human-readable markdown table, not JSON. |
| doctorA | Diagnose campaign or application issues (missing files, invalid frontmatter, toolhash mismatches) |
| repairC | Repair application toolhash sidecars, rebuild index and counters |
| track_applicationB | Track a job application — create from URL or update by slug |
| add_interviewC | Add a new interview entry for an application |
| mark_interviewC | Change the status of an existing interview |
| update_profileB | Overwrite the campaign profile.md with new markdown content |
| update_configC | Update global configuration settings |
| initC | Initialize a new campaign with optional CV, GitHub, and LinkedIn |
| post_mortemC | Generate a post-mortem learning plan for an application |
| append_retroC | Append additional weak topics and notes to an existing retro |
| cover_letterC | Generate a tailored cover letter for an application |
| read_cover_letterB | Read an existing saved cover letter for an application |
| answer_questionB | Answer a question for an application and append it to qa.md |
| extract_jdC | Extract structured job description from a URL or raw text |
| prepareA | Generate or add topics to a pre-interview prep plan. Provide topics to append to an existing plan (steer/days ignored in this mode). |
| aggregate_retrosC | Aggregate weak topics across all application retro files for a campaign |
| read_configA | Read global configuration (secrets redacted) |
| read_logsB | Read the log file with optional filtering (tail, level, JSON format) |
| read_retroC | Read an existing retro/learning plan for an application |
| read_prepC | Read an existing pre-interview prep plan for an application |
| read_qaC | Read existing Q&A entries for an application |
| remove_applicationB | Permanently remove an application folder — cleans metadata, index, and sidecars |
| rename_applicationC | Rename an application folder |
| remove_campaignB | Permanently remove a campaign folder — destructive, cannot be undone |
| rename_campaignC | Rename a campaign folder |
| read_campaign_configB | Read campaign configuration (redacted) |
| kb_addB | Copy knowledge-base docs (PDF, DOCX, MD, TXT) into the campaign |
| kb_updateC | Re-sync the knowledge base from sources recorded at init |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| cover_letter | Generate a tailored cover letter for an application |
| interview | Generate a pre-interview prep plan for an application |
| answer | Answer a question for an application |
| extract_jd | Extract structured job description from a URL or raw text |
| retro | Generate a post-mortem learning plan for an application |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| config | Global configuration |
TDQS
Scored across 37 tools
Most tools target distinct resources or actions, but get_campaign and read_campaign_config are near-duplicate config readers, and prepare/read_prep plus the retro family create some boundary questions. Descriptions usually clarify, but the config overlap is an avoidable ambiguity.
All names use snake_case, but verb conventions are mixed: read_/list_/get_/add_/update_/remove_ coexist with noun-only names like cover_letter, post_mortem, ownership, doctor, repair, and init. Readable overall, but not a predictable verb_noun pattern.
37 tools is heavy for a job-hunting organizer; many administrative, diagnostic, and document-generation tools could likely be consolidated. This exceeds the 25-tool threshold and feels overgrown rather than well-scoped.
The surface covers campaigns, applications, interviews, profile, Q&A, prep, retro, cover letters, knowledge base, config, logs, stats, and repair. Some lifecycle gaps exist, such as deleting or editing interviews and generated documents, but core workflows are well represented.