job-hunting-organizer
Builds a structured candidate profile from your GitHub repositories, including target roles, stack, and experience, using a configured GitHub token.
Fetches job descriptions from Indeed URLs to generate tailored cover letters, application answers, and track applications.
Supports local Ollama models as the LLM backend for private, on-device generation of cover letters, answers, and command parsing.
Uses OpenAI's API as the LLM backend for generating cover letters, tailoring answers, and parsing natural-language commands.
job-hunting-organizer
A local-first CLI and MCP server for running a job-hunting campaign.
What it does
Builds your profile from a CV (PDF / DOCX / Markdown) and your GitHub repos — including a structured list of target roles (level, domain, stack, comp floor, priority) you can refine.
Suggests the best-matching target role for every new job description, so the cover letter and Q&A know which version of "you" to emphasize.
Generates tailored cover letters from job-description URLs (Seek, LinkedIn, Indeed, others).
Tailors answers to application questions — given as text or as a screenshot.
Tracks every application in a structured folder per role, with the full interview pipeline.
After a failed interview, captures your weak topics and generates a personal learning plan for each, then aggregates recurring weak areas across applications.
Schedules interviews via an ICS file you can import into any calendar.
Related MCP server: Job Tracker MCP Server
Privacy
Your data stays local.
job-hunting-organizerreads your CV from a path you configure, fetches job descriptions from URLs you provide, and calls the LLM endpoint you configure. Nothing is sent to the tool author or to any third party. With a local model (Ollama, OpenCode, LM Studio) the LLM call stays on your machine. The tool has zero telemetry, zero analytics, and zero outbound calls except those you explicitly configure.
All user data lives outside the repo under two external directories. The config home (default ~/.job-hunting-organizer/, override with $JHO_CONFIG_HOME) holds the global config.json (LLM endpoint, GitHub token) and .locks/. The data root (default ~/job-hunting-organizer-data/, override with $JHO_DATA) holds campaigns/<name>/ and all per-campaign working data — each campaign has its own profile.md, applied/, and knowledge-base/. Nothing user-specific is committed to this repo. You can run multiple independent campaigns by creating more under campaigns/.
The data layout (folder-per-application, markdown + JSON, no DB) leaves room for an optional local web client in the future. The CLI and MCP server are the v1 surfaces; see docs/PLAN.md §20 for the forward-looking design notes.
Install
From npm (recommended)
npm install -g job-hunting-organizerThen run jho init to set up your first campaign.
From source
git clone https://github.com/koalyptus/job-hunting-organizer.git
cd job-hunting-organizer
npm install
npm run buildThe binaries are then available at ./bin/jho and ./bin/jho-mcp.
Build & test commands
npm run build # tsup → dist/
npm run typecheck # tsc --noEmit
npm run lint # eslint
npm run format:check # prettier
npm test # vitest (unit tests)
npm run test:integration # vitest (integration tests)
npm run eval # lightweight LLM eval suite (manual)Cross-platform notes
Runs unchanged on Linux, macOS, and Windows.
Linux / macOS:
./bin/jho --versionornpx jho --version.Windows: use
npx jho --version(orjho --versionafternpm install -g). Direct invocation of./bin/jhorequires Git Bash or WSL because Windows shells don't honor shebangs; the npm shim handles this transparently.All shell commands above work in PowerShell, cmd, bash, and zsh. No platform-specific flags.
CI runs the full check matrix on
ubuntu-latest,windows-latest, andmacos-latest(Node 20 + 22).
Quickstart
# 1. Initialize your campaign (wizard builds your profile from CV + GitHub,
# then reviews the suggested target roles with you)
jho init
# 2. Record an application from a job URL
# (suggests a target role from your profile; you confirm or override)
jho track https://au.seek.com.au/job/12345
> **Job ID extraction**: URLs are parsed for a job-board ID used in the folder slug. Built-in patterns support Seek, LinkedIn, Indeed, and a generic trailing-number fallback. Custom patterns can be added via the `JHO_URL_PATTERNS` environment variable — a JSON array of `{ name, pattern, group }` objects that are tried before the built-in patterns.
# 3. Generate a tailored cover letter
jho cover-letter 2026-Jun-03-SE-Nuage-Technology-Group-12345
# 4. Tailor an answer to an application question
jho answer 2026-Jun-03-SE-Nuage-Technology-Group-12345 "Why this company?"
# 5. Track interview stages
jho interview 2026-Jun-03-SE-Nuage-Technology-Group-12345 add \
--when "2026-06-10 10:00" --type hr --duration 30
# 5b. Before the interview: get a prep plan (tech stack, depth-tagged topics, timeline)
jho prepare 2026-Jun-03-SE-Nuage-Technology-Group-12345 --days 7
# ... write prepare.md to the app folder; append with --add
# 6. After a rejection: jot down weak topics, get a learning plan
jho retro 2026-Jun-03-SE-Nuage-Technology-Group-12345
# ... answer "what topics did you struggle with?" ...
# 7. See recurring weak topics across all interviews
jho retro aggregate
# 8. Get a snapshot of the campaign (counts, funnel, this-month delta)
jho stats
# 9. Read the log file (pretty-printed; log file is always JSON for tools)
jho logs --tail 50
jho logs --json | jq 'select(.level == 50)' # pipe to jq for filteringTip: you can omit the slug and just
cdinto the application folder —jho show,jho cover-letter,jho answer,jho interview ...,jho prepare,jho retro,jho retro show,jho retro appendall infer the slug from the current directory.cd ~/job-hunting-organizer-data/campaigns/default/applied/2026-Jun-03-SE-Nuage-Technology-Group-12345 jho show # same as passing the slug explicitly jho retro # works from any subfolder tooMultiple campaigns: each one lives at
<data-root>/campaigns/<name>/. Create them withjho init <name>(omit the name to use thedefaultcampaign). All commands accept--campaign <name>to target a specific one; otherwise the campaign is inferred from your cwd.jho init freelance jho --campaign freelance track https://au.seek.com.au/job/12345 jho --campaign ft-jobs statsRenaming a campaign: the folder name is the only thing that identifies a campaign — nothing on disk references it elsewhere, so
jho rename-campaign <old> <new>(or justjho rename-campaign <new>from inside the campaign folder) is enough. It validates the new name, takes a lock, and logs the move. You can also justmvthe folder directly; the tool will pick up the new name on the next call.
Natural language
Any command can also be invoked in plain English. If the first argument contains a space and isn't a known command, jho asks an LLM to map it to the equivalent command and re-runs the real implementation — no behaviour is reimplemented, so output is identical to the explicit form.
jho "list all applications for javascript-developer campaign"
jho "create cover letter for application-xyz"
jho "show retro for application-xyz"
jho "add interview for application-xyz tomorrow at 2pm"Global flags work too: jho --yes "list apps". Lower-confidence parses are echoed back for confirmation (unless --yes); very low confidence errors out with a rephrase hint. Natural-language parsing requires a configured LLM (same as the other LLM-backed commands).
As an MCP server
This package ships an MCP server via the jho-mcp binary.
Check your harness documentation for correct configuration, as an example:
GitHub Copilot (.vscode/mcp.json):
{
"servers": {
"jho-mcp": {
"type": "stdio",
"command": "node",
"args": ["bin/jho-mcp"],
"cwd": "C:\\path\\to\\job-hunting-organizer"
}
}
}Opencode (opencode.json):
{
"mcp": {
"jho-mcp": {
"type": "local",
"command": ["node", "bin/jho-mcp"],
"cwd": "path/to/job-hunting-organizer/bin/jho-mcp",
"enabled": true,
"timeout": 60000
}
}
}Local model tip: If you use a local LLM (Ollama, LM Studio, OpenCode), add
"timeout": 60000to the MCP server config. Local models can be slow on first load, and the default 5-second timeout may fire before the server responds toinitializeortools/list.
Note: MCP client configs are not standardized — each client uses its own schema and key names. To set a custom data location, add
"JHO_DATA": "/path/to/data"to theenvblock (Claude Desktop, Cursor, Copilot) orenvironmentblock (Opencode).
LLM configuration
jho uses the OpenAI API format for all LLM calls. Any OpenAI-compatible endpoint works:
Ollama —
http://localhost:11434/v1(free, private, on-device)LM Studio —
http://localhost:1234/v1(free, private, on-device)OpenAI —
https://api.openai.com/v1(cloud)Any OpenAI-compatible proxy (LiteLLM, OpenRouter, etc.)
Anthropic / Claude users: Anthropic native API uses a different format (
/v1/messagesinstead of/v1/chat/completions). To use Claude withjho, run LiteLLM as a local proxy:pip install litellm litellm --model anthropic/claude-3-5-sonnet-20241022 --api_base http://localhost:4000Then configure
jhowith baseUrlhttp://localhost:4000/v1and an empty API key.
During jho init, the tool automatically detects locally-installed Ollama and LM Studio instances (via the detect-local-agents package) and pre-fills the recommended LLM config. Run jho doctor --detect-agents at any time to see what's detected.
Environment variables
All env var names are uppercase. Prefix JHO_ denotes jho-internal config; prefix LLM_ overrides the corresponding field in config.json's llm block (only relevant when the LLM is called).
Variable | Description |
| Override the config home directory (default |
| Override the data root directory (default |
| Default campaign name when |
| JSON array of |
| Pre-fill the CV path during |
| Pre-fill the LinkedIn profile URL during |
| Override the log file path (default |
| Override the minimum log level written to file |
| Override the LLM endpoint base URL from |
| Override the API key from |
| Override the model from |
| Comma-separated |
| Set to disable ANSI colour output in terminal output |
Documentation
docs/PLAN.md— full design plandocs/ROADMAP.md— phased build plan with statusAGENTS.md— for AI agents using the MCP server
License
Available Tools
37 toolsadd_interviewC
Add a new interview entry for an application
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| type | No | Interview type | |
| when | Yes | Interview datetime (e.g. "2026-06-15 10:00") | |
| title | No | Interview title | |
| campaign | Yes | Campaign name (e.g. "default") | |
| duration | No | Duration in minutes | |
| location | No | Interview location | |
| interviewers | No | Interviewer names |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Add' implies a mutation, but it says nothing about permissions, whether an existing entry is overwritten or rejected, whether the campaign/slug must already exist, or what a successful call returns. For a write tool with zero annotation coverage this is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the action front-loaded and no filler. It is appropriately sized for the message, though it is arguably too short to count as strongly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation with no annotations and no output schema, the description should at minimum flag required inputs (campaign, slug, when), the duplicate-handling behavior, and that it operates within a campaign context. None of that is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 8 parameters, including the enum of interview types and the datetime format example, so the schema does the documentation work. The description adds no parameter meaning beyond it, which places this at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Add a new interview entry') qualified by scope ('for an application'). That is enough to distinguish it from read-side siblings like list_interviews or read_prep, and from mark_interview, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives. The toolset contains list_interviews and mark_interview, and nothing here tells an agent which one applies when it wants to record vs. view vs. update interview state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aggregate_retrosC
Aggregate weak topics across all application retro files for a campaign
| Name | Required | Description | Default |
|---|---|---|---|
| campaign | Yes | Campaign name (e.g. "default") | |
| targetRole | No | Filter by target role slug | |
| includeAbandoned | No | Include abandoned applications |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only states what is aggregated. It does not disclose whether this is a read-only operation, how costly scanning all retro files is, or what form the aggregated result takes. Only the bare 'aggregate' semantics are inferable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the action and scope come first. It is efficient, though the extreme brevity leaves little room for the context the tool otherwise lacks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Parameters are fully documented by the schema and there is no output schema to explain, so the remaining need is behavioral context. For a tool that scans every retro file in a campaign, the description says nothing about result shape, ordering, or cost, leaving a modest but real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents campaign, targetRole, and includeAbandoned. The description reiterates the campaign scoping but adds no semantics for the role filter or abandoned-inclusion behavior. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (aggregate), the derived resource (weak topics), and the source scope (all application retro files for a campaign). This distinguishes it from read_retro and append_retro, which operate on a single retro, without explicitly naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus read_retro or post_mortem, no stated prerequisites, and no exclusions. The scope phrase implies batch use but the agent must infer when aggregation is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
answer_questionB
Answer a question for an application and append it to qa.md
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| steer | No | Custom LLM instructions | |
| noSave | No | Do not save to file (stdout only) | |
| campaign | Yes | Campaign name (e.g. "default") | |
| question | Yes | Question to answer | |
| imagePath | No | Path to image file (screenshot of the question) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it does disclose the key side effect (an append to qa.md, implying non-destructive but cumulative writes). However it says nothing about permissions, whether answering invokes an LLM, cost/latency, or how the append behaves on repeat calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action, target, and destination artifact; nothing wasted and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutating tool with neither annotations nor an output schema, the description covers purpose and the write side effect but omits the LLM-driven nature, save/skip semantics, and any error or auth conditions. Adequate minimum, with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters including steer, noSave, and imagePath are already documented in the schema. The description adds no syntax or format meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (answer) plus resource (question for an application) and names the artifact it writes (qa.md), which distinguishes it from the read_qa sibling. It falls short of 5 only because it never explicitly names that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this over read_qa, no prerequisites (e.g. whether an application or campaign must exist first), and no guidance on the steer/imagePath inputs. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
append_retroC
Append additional weak topics and notes to an existing retro
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| notes | No | Additional notes | |
| steer | No | Custom LLM instructions | |
| status | No | Status at the time of writing | |
| campaign | Yes | Campaign name (e.g. "default") | |
| weakTopics | No | Weak topics to add | |
| noCarryOver | No | Do not carry prior weak topics/notes forward |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It signals an additive write but omits the consequential noCarryOver behavior that discards prior weak topics/notes, says nothing about whether a retro is created when absent, and gives no permission or rate-limit context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with no filler, and the verb and target resource are front-loaded. It is efficient, though arguably under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter mutation tool with no annotations and no output schema, one sentence is thin. Key behaviors an agent needs before calling it — the destructive noCarryOver flag, campaign/slug requirements, and whether it creates or only appends — are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters including their types and meanings. The description surfaces only two of them (weak topics, notes) and adds no syntax, format, or interaction detail beyond the schema, which is the expected baseline here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Append') and resource ('retro') plus the content being added (weak topics and notes). It does not, however, differentiate itself from close siblings like read_retro or aggregate_retros, so the agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance, no prerequisites, and no reference to an alternative tool. The word 'existing' faintly implies a retro must already exist, but nothing tells the agent when appending is preferable to read_retro or aggregate_retros.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cover_letterC
Generate a tailored cover letter for an application
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| steer | No | Custom LLM instructions | |
| noSave | No | Do not save to file (stdout only) | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose that generation is an LLM call, that the result is saved to file by default (implied only by the noSave parameter), any cost/latency, or auth requirements. For a generation tool this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste. It is efficient, though arguably minimal enough that it sacrifices useful detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a generation behavior that persists output by default, the description is too thin. It omits side effects (file save), input format expectations, and what the generated result looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so slug, steer, noSave, and campaign are already documented. The description adds no additional meaning about any of them; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Generate') plus resource ('tailored cover letter') plus scope ('for an application'). It does not explicitly distinguish itself from the sibling read_cover_letter, but the generate-vs-read contrast is inferable from the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no pointer to alternatives such as read_cover_letter for retrieving an existing letter. The agent must infer the operating context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doctorA
Diagnose campaign or application issues (missing files, invalid frontmatter, toolhash mismatches)
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Optional application slug to diagnose a single app | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the scope of checks performed, but says nothing about whether it mutates anything, requires specific access, or what the result looks like. The check enumeration is real value; the safety/mutation profile is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single parenthetical sentence that front-loads the verb and resource and packs the detail into a compact list. Nothing is wasted and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter diagnostic tool with no annotations and no output schema, the description covers purpose but not behavior — no indication of whether it is read-only, whether it can auto-fix, or how to act on results. Adequate minimum, but incomplete for an unannotated tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema. The description's phrase 'campaign or application' loosely mirrors the campaign/slug split, adding only marginal meaning beyond the structured fields. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('diagnose') and two concrete resources (campaign or application) and enumerates the problem classes it detects (missing files, invalid frontmatter, toolhash mismatches). It is clearly distinguishable from data-reading siblings, though it never explicitly contrasts itself with 'repair', which is the natural fix-counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and the enumerated issue types — you run it when you suspect something is broken — but there is no explicit when-to-use statement, no mention of when to use 'repair' instead, and no prerequisites. An agent can infer intent but is not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_jdC
Extract structured job description from a URL or raw text
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Job posting URL | |
| text | No | Raw job description text | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether this is a read-only scrape (network fetch, possible failures/timeouts), whether results are persisted under the required 'campaign', or what the caller gets back beyond the vague phrase 'structured job description'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the verb and resource front-loaded and no filler. It is efficient, though its brevity is also the source of the missing usage detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no annotations and no output schema, the description leaves too much uncovered: which of url/text is expected, that neither is schema-required while campaign is, and what 'structured' means in terms of returned fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents url, text, and campaign. The description only echoes the url/text duality and adds no format, precedence, or campaign semantics beyond what the schema provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (extract) and resource (structured job description) plus the two accepted input sources (URL or raw text). It does not differentiate from any sibling, but the siblings listed are in an unrelated domain so the purpose is still unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no instruction on whether to supply url, text, or both. The description mentions two input modes but never states the selection rule or what happens if both are passed or neither is passed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaignC
Get campaign configuration (secrets redacted)
| Name | Required | Description | Default |
|---|---|---|---|
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It adds one genuinely useful behavioral fact — that secrets are redacted in the output — but omits whether this is a read-only operation, whether permissions are required, or how redaction affects the returned config.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded verb+resource with no wasted words; the redaction caveat is placed in parentheses as a secondary detail. It is efficient, though brevity here shades into under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and two confusable siblings, this description is too thin: it neither explains the returned configuration shape nor routes the agent away from read_campaign_config/list_campaigns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter with 100% schema coverage, and the schema already supplies the name plus an example ("default"). The description adds nothing about the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (campaign configuration), so the basic purpose is clear. However, siblings include both read_campaign_config and list_campaigns, and the description makes no attempt to distinguish this tool from them — an agent cannot tell which of the three to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no pointer to the obvious alternatives (read_campaign_config, list_campaigns). The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rootB
Resolve the campaign root directory path
| Name | Required | Description | Default |
|---|---|---|---|
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not state whether the path is absolute or relative, whether it validates that the campaign exists, what happens with an unknown campaign name, or whether it creates the directory. For a resolver with zero annotation coverage this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no waste. It is appropriately sized, though it is a fragment that could state one more useful fact instead of stopping.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple one-parameter tool with full schema coverage and no output schema, so not much explanation is needed. Still, with no annotations the description should say what the return value is (a path string) and how errors are handled, which it omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents the single required campaign parameter with an example. Baseline for a fully documented single-parameter schema is a 4; the description adds nothing beyond the schema but does not need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (resolve) and resource (campaign root directory path), which is clearer than the bare name get_root. Siblings like get_campaign and read_campaign_config are related but the description's focus on a filesystem path rather than campaign metadata or config distinguishes it reasonably well.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus get_campaign, read_campaign_config, or list_campaigns. The agent must infer that this returns a path for filesystem operations rather than campaign data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsA
Compute campaign statistics: counts by status, role, site, employment type, funnel, interview entries, and this-month delta
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Filter by date range (e.g. "7d", "30d", "2026-01-01") | |
| campaign | Yes | Campaign name (e.g. "default") | |
| targetRole | No | Filter by target role slug | |
| employmentType | No | Filter by employment type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full behavioral burden. It does usefully disclose the shape of the result (which aggregate dimensions are returned), which compensates somewhat for the missing output schema, but it says nothing about whether the operation is read-only, requires permissions, or is scoped to a specific campaign.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the verb and then lists outputs. Every clause earns its place and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only aggregate tool with fully documented parameters but no output schema, enumerating the computed dimensions is exactly what an agent needs to know the return shape. The only gap is the absence of any routing guidance versus sibling listing/retrieval tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all four parameters documented (since, campaign, targetRole, employmentType) including an enum. The description adds no meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (Compute) and resource (campaign statistics) and then enumerates the exact breakdowns produced: status, role, site, employment type, funnel, interview entries, and this-month delta. No sibling tool (get_campaign, list_campaigns, read_campaign_config) does aggregation, so the agent can distinguish it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what is computed but never states when to reach for this tool rather than get_campaign, list_applications, or aggregate_retros, nor does it mention any prerequisites. There is no when-to-use or when-not-to-use guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
initC
Initialize a new campaign with optional CV, GitHub, and LinkedIn
| Name | Required | Description | Default |
|---|---|---|---|
| cvPath | No | Path to CV file (PDF, DOCX, MD) | |
| campaign | No | Campaign name (default: "default") | |
| githubUser | No | GitHub username | |
| linkedinUrl | No | LinkedIn profile URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It says nothing about what initializing actually does (side effects, directory/file creation), what happens if the campaign already exists, or whether it overwrites existing config. For a creation operation this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the action front-loaded and no wasted words. It is efficient, though it underspecifies rather than over-explains.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter creation tool with no annotations and no output schema, the description omits prerequisites, side effects, and conflict/overwrite behavior. An agent can guess the inputs but not the consequences of calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents cvPath, campaign, githubUser, and linkedinUrl. The description echoes three of those four (CV, GitHub, LinkedIn) and omits 'campaign', adding essentially no meaning beyond the schema — the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Initialize a new campaign'), which separates it from siblings like remove_campaign and rename_campaign. It does not explicitly name which sibling it supersedes or how it relates to list_campaigns/get_campaign, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance: no mention that this is the first step before other campaign tools, no preconditions, and no named alternatives. The only usage cue is the list of optional inputs, which is weak.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_addB
Copy knowledge-base docs (PDF, DOCX, MD, TXT) into the campaign
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | One or more file or folder paths to ingest | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a copy (source preserved, KB mutated) and names accepted formats, but says nothing about duplicate handling, overwrite behavior, permissions, or whether ingestion is synchronous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler that conveys verb, resource, formats, and destination.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter ingest tool with no output schema and no annotations, the description covers the basics. However, it omits the when-to-use distinction from kb_update and the behavior on re-ingesting existing documents, which matter for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented there, so baseline is 3. The description adds the accepted file formats (PDF, DOCX, MD, TXT), a small amount of meaning beyond the schema's 'file or folder paths'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (copy) and resource (knowledge-base docs) plus the destination (campaign) and supported file types. It is clear what the tool does, though it does not distinguish itself from the sibling kb_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus kb_update, nor on prerequisites such as whether paths must exist or the campaign must already be initialized. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_updateC
Re-sync the knowledge base from sources recorded at init
| Name | Required | Description | Default |
|---|---|---|---|
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Re-sync' implies a mutation that could overwrite or disturb the existing knowledge base, but the description never says what gets replaced, whether the operation is idempotent, what permissions/failed-init state it requires, or how long it runs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource front-loaded and zero filler. It is efficient, though the brevity borders on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation-style tool with no annotations and no output schema, the description is too thin: it does not explain the effect on existing data, the init dependency, or the outcome. An agent could invoke it correctly but cannot predict consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'campaign' parameter is documented with an example ('default') in the schema itself. The description adds nothing about the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('re-sync') and resource ('the knowledge base') and scopes it to sources recorded at init, which distinguishes it from the sibling kb_add (additive) reasonably well. However, 're-sync' is left undefined, so the agent must infer what the operation actually changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no comparison to the obvious alternative kb_add. The phrase 'recorded at init' implies a dependency on init but never states it as a condition for calling this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_applicationsC
List applications with optional status, tags, role, employment type, and text filters
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | AND-combined tag filter | |
| filter | No | General-purpose text filter (case-insensitive) | |
| status | No | Filter by application status | |
| campaign | Yes | Campaign name (e.g. "default") | |
| targetRole | No | Filter by target role slug | |
| employmentType | No | Filter by employment type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It never states ordering, pagination, result limits, or whether an empty filter set returns all applications, and it does not disclose that the required campaign scopes the result set. Only the read-only nature is inferable from 'List'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the operation first and the filter dimensions after. It is efficient, though the terse phrasing leaves no room for the behavioral context the rest of the definition lacks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description is the only place behavioral context could live, yet it omits pagination, ordering, default result scope, and the significance of the required campaign parameter. For a six-parameter list tool this is notably thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the enum values, tag AND-combination, and case-insensitive filter behavior are already documented in the schema. The description's filter list largely restates the schema and adds no syntax or format detail beyond it, which matches the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('List applications') and enumerates the filter dimensions, so the agent knows this is a filtered read of applications rather than interviews or campaigns. It does not explicitly differentiate itself from siblings like show_application or list_interviews, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus show_application, list_interviews, or get_stats, and no prerequisites (such as the required campaign being in scope) are mentioned. The enumerated filters imply a search use case, but nothing tells the agent when this is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_campaignsB
List all campaigns under the data root
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'List all ... under the data root' implies complete enumeration with no filtering and a read-only nature, and the zero-parameter schema is consistent with that, but nothing is said about ordering, pagination, or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope phrase 'under the data root' earns its place by bounding the enumeration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial no-arg list tool with no output schema and no annotations, the description is adequate but leaves the return contents (what a campaign record looks like) and any ordering/pagination unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is nothing parameter-side for the description to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('campaigns') plus scope ('all... under the data root'). It is distinguishable from siblings like list_applications or list_interviews by resource, though it does not explicitly contrast itself with get_campaign or read_campaign_config.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_campaign (single campaign), read_campaign_config, or the other list_* tools. The agent must infer that this is the enumeration entry point from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_interviewsB
List all interviews for an application
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It implies a read-only operation but says nothing about pagination, result ordering, empty-state behavior, or whether interviews from all campaigns are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the resource and scope front-loaded. Nothing is wasted or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple two-parameter read tool with a fully documented schema. However, with no output schema and no annotations, it should at least hint at what is returned or how results are ordered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both required parameters (slug, campaign) are already documented in the schema with examples. The description adds no scoping detail beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb (list) plus resource (interviews) scoped to an application. An agent can distinguish it from add_interview and mark_interview, though the description never names those siblings to make the routing explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as add_interview or mark_interview. The context of use is only implied by the verb 'list'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_interviewC
Change the status of an existing interview
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| index | Yes | Interview index (0-based) | |
| notes | No | Additional notes | |
| status | Yes | New interview status | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet only implies a mutation. It says nothing about whether status transitions are validated, whether notes replace or append, whether the operation is reversible, or what permissions/state are needed. The enumeration of valid statuses lives only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient, though the brevity borders on under-specification rather than genuine conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no annotations and no output schema, the description omits the notes parameter entirely, never explains the required campaign/slug/index coordinate system, and gives no return-value expectations. It is too thin for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (including the enum for status and 0-based index) are already documented in the schema. The description adds no syntax, format, or interaction detail beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('change') and resource ('status of an existing interview'), which cleanly separates it from add_interview, list_interviews, and read_* siblings. It stops short of explicitly naming which sibling to prefer, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus add_interview or list_interviews, no mention of prerequisites, and no indication of what 'existing' requires (campaign/slug/index must already resolve). The agent must infer all routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ownershipA
Show file ownership rules (which files the tool writes, which you can edit). Returns a human-readable markdown table, not JSON.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the output contract ('human-readable markdown table, not JSON'), which is real behavioral value since there is no output schema. However, it does not state that the tool is read-only/side-effect free, nor whether it requires an initialized project — both meaningful for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the purpose front-loaded and the return-format caveat second. Every clause earns its place; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description covers the essentials, including the non-JSON return shape that an agent would otherwise have to discover empirically. It could be more complete by noting the tool is read-only and any project-context prerequisite.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema has no properties, so there is nothing to disambiguate; the baseline of 4 applies. No parameter meaning is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Show file ownership rules') and unpacks the ambiguous term 'ownership' with a parenthetical about which files the tool writes vs. which the user can edit. It is distinguishable from the read_*/list_* siblings, but it never names a related tool (e.g., read_config, get_root) to sharpen the boundary, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance anywhere in the description; no trigger condition, prerequisite, or alternative tool is mentioned. For a zero-parameter informational tool this is less damaging, but the agent is left to infer that this is the diagnostic command to run when unsure about write access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_mortemC
Generate a post-mortem learning plan for an application
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| notes | No | Additional notes | |
| steer | No | Custom LLM instructions | |
| status | No | Status at the time of writing | |
| campaign | Yes | Campaign name (e.g. "default") | |
| weakTopics | No | Weak topics to include |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It says it generates a plan but does not state whether this is a read or write operation, whether it creates or modifies records, what permissions are required, or what side effects occur. The single verb 'Generate' gives minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It immediately states the action and output, making it easy to scan and parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, no output schema, and no annotations, the description is too thin. It does not explain what a 'post-mortem learning plan' contains, how parameters like steer, weakTopics, or status affect the output, or when this tool should be chosen over related retros tools. The schema covers parameter descriptions, but the definition lacks sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented in the schema. The description adds no meaning beyond the schema, only saying the plan is 'for an application', which loosely relates to the slug parameter. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Generate a post-mortem learning plan for an application'. It clearly tells the agent what the tool produces. However, it does not distinguish the tool from similar siblings such as aggregate_retros, append_retro, or prepare, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives. It does not mention prerequisites, timing, or exclusions, and it does not reference any sibling tool. The agent is given only the bare purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Days until interview | |
| slug | Yes | Application slug | |
| steer | No | Custom LLM instructions | |
| topics | No | Topic names to brush up on | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one genuinely useful trait: that steer/days are inert when topics is supplied. It still omits whether generation overwrites an existing plan, permission/prerequisite needs, and any side effects on stored state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler; the core capability is stated first and the mode-specific caveat second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, 2-required mutation tool with no annotations and no output schema, the description covers modes but leaves the campaign/slug requirements and the resulting artifact unexplained, so it is only adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by explaining that topics triggers an append mode which renders steer and days ineffective, clarifying parameter interaction beyond the schema's per-field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: generating or appending topics to a pre-interview prep plan, which clearly distinguishes it from the read-side sibling read_prep. It does not name or contrast any sibling explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It describes two operational modes (generate a fresh plan vs. append topics) and notes steer/days are ignored in append mode. However, it never says when an agent should choose generate versus append, nor how it relates to read_prep or list_interviews, leaving the usage decision implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_campaign_configB
Read campaign configuration (redacted)
| Name | Required | Description | Default |
|---|---|---|---|
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It adds the useful detail that output is redacted, but it does not clarify read-only safety, authorization requirements, or whether any side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately concise, though the parenthetical redaction note carries most of its added value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema, the description is minimally adequate. It leaves open what the campaign configuration contains, how redaction affects fields, and whether authorization is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single campaign parameter is fully documented in the input schema. The description adds no parameter-level detail beyond what the schema already provides, which is the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: read campaign configuration. It clearly distinguishes the campaign-level config from a generic config read, but it does not explicitly differentiate itself from siblings such as read_config or get_campaign.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus read_config, get_campaign, or list_campaigns. The intended usage is only implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_configA
Read global configuration (secrets redacted)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose a meaningful trait — "secrets redacted" — which tells the agent the return is sanitized, but it says nothing about permissions, scope resolution, or failure behavior for a config read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no wasted words; the redaction caveat is parenthetical and secondary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read with no output schema and no annotations, the description covers the essentials and adds the redaction detail. It is nearly complete, though scope/auth context would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and resource (global configuration). The qualifier "global" usefully distinguishes it from the sibling read_campaign_config, which is campaign-scoped, though the description does not explicitly name that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this is the read counterpart to update_config, and that it targets global rather than campaign scope. There is no explicit when-to-use/when-not guidance or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_cover_letterB
Read an existing saved cover letter for an application
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Read' implies a non-mutating lookup, but the description says nothing about behavior when no letter exists, auth/scoping needs, or output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. 'existing saved' is mildly redundant but does not waste meaningful space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema, the description is adequate but incomplete: it never mentions the error case (no saved letter) or whether it returns the letter body verbatim.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both `campaign` and `slug` documented, so the baseline is 3. The description adds no parameter-level detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read), resource (cover letter), and scope (an existing saved one for an application), which separates it from the sibling `cover_letter` (generation) and other `read_*` tools. It is clear without naming a specific sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'existing saved' implies the letter must already have been created, hinting that `cover_letter` is the tool that produces it. However, no explicit when-to-use/when-not or prerequisite is stated, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_logsB
Read the log file with optional filtering (tail, level, JSON format)
| Name | Required | Description | Default |
|---|---|---|---|
| json | No | Output raw JSON lines instead of pretty-printing | |
| tail | No | Show only the last N lines | |
| level | No | Filter by minimum level |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose important traits such as what happens when no filters are supplied, whether reading the entire log could be large or slow, where the log file comes from, or whether permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It states the action, resource, and optional filters immediately, making it easy for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with all parameters documented in the schema, the description is minimally adequate. However, with no annotations and no output schema, it should clarify default behavior and output format more explicitly, especially since omitting tail may return the entire log.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents tail, level, and json fully. The description lists the parameter names and adds a small amount of context, but it misleadingly groups JSON format under 'filtering' and does not add syntax or default-value details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb and resource: 'Read the log file'. It also names the supported filters, so an agent can understand the basic operation. However, it does not distinguish this tool from nearby read_* siblings such as read_config or read_retro beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Read the log file with optional filtering', but there is no explicit when-to-use guidance, no prerequisites, and no statement about when another sibling might be preferred. The optional filters provide some context but not real selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_prepC
Read an existing pre-interview prep plan for an application
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Read' implies a safe non-mutating operation, but the description says nothing about what happens if no prep plan exists, whether it requires the campaign to match, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the verb and resource front-loaded and no redundancy. It is efficient, though it leaves obvious questions (existence, return shape) unanswered rather than being maximally informative for its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple two-parameter read with fully documented params and no output schema, so the description is roughly adequate. However, with no annotations and no output schema, it should still say what the read yields or how it fails when no plan exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both 'slug' and 'campaign' are documented with descriptions and examples), so the schema already does the parameter work. The description adds no format, scoping, or default-value detail beyond it, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and a specific resource ('pre-interview prep plan for an application'), which is far more informative than the sibling naming pattern alone. It does not explicitly contrast itself with 'prepare' or 'read_cover_letter', but the resource noun makes the target unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus 'prepare' (which plausibly generates the plan) or the other read_* tools. The word 'existing' hints that it only works on a plan that already exists, but this constraint is never stated as a condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_profileB
Read the candidate profile for a campaign
| Name | Required | Description | Default |
|---|---|---|---|
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. The verb 'Read' does communicate a non-mutating operation, which is meaningful, but the description says nothing about behavior when the campaign does not exist, permissions, or what the profile contains. For a simple one-parameter read this is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the scope constraint placed immediately after the action. No filler, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool, the description covers the action and resource but does not describe what the returned profile contains or how a missing campaign is handled, and there is no output schema to fill that gap. Minimum viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'campaign' parameter already includes a type and an example ('default') in the schema. The description adds only the framing that campaign scopes the profile lookup, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (candidate profile) scoped to a campaign, which cleanly separates it from the sibling update_profile. It does not explicitly contrast itself with other read siblings like read_campaign_config or read_cover_letter, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance and names no alternatives. An agent must infer from the name alone that this is the read counterpart to update_profile, and nothing tells it how this differs from other read tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_qaC
Read existing Q&A entries for an application
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden but discloses little. "Read existing" implies a non-destructive operation, but nothing is said about permissions, pagination, empty-result behavior, or the relationship between campaign and slug.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the resource front-loaded and no wasted words. It is terse to the point of being thin, but structurally sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema, the description is minimally adequate but omits key context: whether both campaign and slug are mandatory in practice, and what the returned Q&A entries look like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (slug, campaign) are already documented in the schema. The description adds no syntax, format, or default-value detail beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ("Read existing Q&A entries") scoped to "an application", which distinguishes it from mutating siblings like answer_question. However it does not explicitly differentiate itself from related read tools such as read_cover_letter or read_retro.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like answer_question, nor any stated prerequisites. The read intent is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_retroC
Read an existing retro/learning plan for an application
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a safe read but says nothing about what happens if no retro exists, permission requirements, or what is returned — significant gaps for a tool whose entire job is retrieval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource and scope front-loaded; nothing is wasted, though it is arguably too terse given the missing behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameter-light read tool with full schema coverage this is minimally adequate, but with no annotations and no output schema the description could still say what a retro contains or when one is available. It is complete enough to invoke but not to anticipate results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (slug, campaign) are already documented in the schema. The description's 'for an application' only loosely echoes the slug parameter and adds no format or constraint detail, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (retro/learning plan) scoped to an application, so the agent knows what it does. However, it does not distinguish itself from close siblings like append_retro or aggregate_retros, and the 'retro/learning plan' phrasing leaves the resource name slightly ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as aggregate_retros for summaries or append_retro for writes. The agent must infer the context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_applicationB
Permanently remove an application folder — cleans metadata, index, and sidecars
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| confirm | No | Skip confirmation prompt | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that removal is permanent and enumerates what gets cleaned (metadata, index, sidecars), but it says nothing about downstream effects on tracked applications/interviews or how the 'confirm' skip-prompt parameter interacts with the deletion flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the destructive verb and scope front-loaded. No filler, though it packs the cleanup list into one clause without room for the operational warnings an agent would want.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter destructive tool with no annotations and no output schema, the description covers purpose and permanence but omits the confirmation-prompt behavior implied by 'confirm' and any indication of what a call returns or errors on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents slug, campaign, and confirm. The description adds no parameter-level meaning beyond confirming the destructive nature, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specifies verb (remove), resource (application folder), and scope (permanently, plus metadata/index/sidecars). It is clearly distinct from siblings like rename_application or remove_campaign, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus alternatives such as remove_campaign, nor any prerequisites or warnings about the operation being irreversible beyond the word 'permanently'. Usage must be inferred entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_campaignB
Permanently remove a campaign folder — destructive, cannot be undone
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Skip confirmation prompt | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the two most important traits: the operation is destructive and irreversible. However, it says nothing about the confirmation prompt behavior (relevant given the 'confirm' parameter), required permissions, or whether nested contents are also deleted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the destructive warning is placed prominently after the action. Nothing could be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter mutation with no annotations and no output schema, the description covers the critical warning but omits confirmation-flow behavior and the scope of deletion (folder vs. contained data). Adequate but with clear gaps an agent would want resolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are documented in the schema, giving a baseline of 3. The description adds only that the target is a 'folder' and does not clarify the confirm-skip semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Permanently remove a campaign folder'), which is enough to distinguish it from read_campaign_config, get_campaign, and list_campaigns. It does not explicitly contrast itself with rename_campaign or remove_application, but the destructive remove action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when this tool is appropriate versus siblings such as remove_application or rename_campaign, and no stated prerequisites or preconditions. The agent must infer that it is the campaign-deletion counterpart of the other campaign tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_applicationC
Rename an application folder
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | New application slug | |
| from | Yes | Current application slug | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. 'Rename' implies a mutation, but the description fails to disclose whether the rename is reversible, what happens to references, whether permissions are required, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded phrase with no wasted words. However, for a mutation tool with no annotations, it is under-specified rather than optimally concise, so it falls short of a higher score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with three required parameters, no annotations, and no output schema, the description should explain side effects, return behavior, or permission needs. It provides none of these, leaving the agent with insufficient context to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (campaign, from, to). The description adds no parameter semantics beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Rename) and resource (application folder), making the core action clear. It does not, however, distinguish this tool from siblings such as rename_campaign or remove_application, leaving the agent to infer scope from the tool name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives, nor any prerequisites or conditions. It simply restates the operation, leaving the agent with no routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_campaignC
Rename a campaign folder
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | New campaign name | |
| from | Yes | Current campaign name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a mutation but says nothing about whether the folder is moved, whether related applications/interviews reference the old name, whether the operation is reversible, or what errors occur on name collision.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single four-word phrase with zero padding and the verb front-loaded. It is efficient, though arguably under-specified rather than genuinely concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description leaves key gaps: collision/error behavior, permission requirements, and whether renaming affects other artifacts that reference the campaign name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both 'from' and 'to' are documented as current/new campaign name, so the baseline of 3 applies. The description adds only the word 'folder', a marginal nuance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Rename a campaign folder'), which is enough to distinguish it from most siblings like read_campaign_config or remove_campaign. It does not explicitly distinguish itself from rename_application, but the resource noun does most of that work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives or of what happens when the new name collides with an existing campaign. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repairC
Repair application toolhash sidecars, rebuild index and counters
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Optional application slug to repair a single app | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies mutation via 'repair' and 'rebuild', but does not state whether the operation is destructive, reversible, requires elevated permissions, or how it affects existing data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the action and affected artifacts front-loaded. It is telegraphic but contains no wasted words, though it could be slightly clearer about scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a repair/mutation tool with no annotations and no output schema, the description is insufficient. It omits when to run the tool, safety and impact details, and what the result would be, leaving the agent with too little context beyond the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `slug` and `campaign` are already documented in the input schema. The description adds no additional parameter-level detail, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (repair) and names the artifacts affected: application toolhash sidecars, index, and counters. This is clearer than a tautology, but it does not differentiate itself from the sibling tool `doctor`, which may also diagnose or repair application state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives such as `doctor`, `prepare`, or `init`. There are no prerequisites, no when-not-to-use exclusions, and no indication of what condition should trigger a repair.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_applicationB
Show a single application: metadata (meta.md) and job description (jd.md)
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Application slug | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It does usefully disclose the return contents (metadata and job description files), which is genuine behavioral context, but says nothing about errors, missing-file behavior, or output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the action and resource, followed by the returned artifacts. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with full schema coverage and no output schema, the description names what is returned (meta.md and jd.md), which is the key missing information an agent would otherwise lack. Minor gaps around error/missing-application behavior remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'campaign' and 'slug' are already documented in the schema. The description adds no syntax or format detail beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (show) and resource (a single application), and even names the two artifacts returned (meta.md metadata, jd.md job description). It implicitly distinguishes itself from the list_applications sibling via 'single', though it does not name the alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. The phrase 'a single application' hints at the contrast with list_applications, but no alternative is named and no prerequisite is stated, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_applicationB
Track a job application — create from URL or update by slug
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Job posting URL (create mode) | |
| note | No | Note to append to jd.md | |
| slug | No | Application slug (update mode) | |
| tags | No | Tags to add | |
| steer | No | Custom LLM instructions for JD extraction | |
| salary | No | Salary or pay range | |
| status | No | New status | |
| refresh | No | Re-fetch JD from stored URL | |
| campaign | Yes | Campaign name (e.g. "default") | |
| targetRole | No | Target role slug | |
| employmentType | No | Employment type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies read-write behavior via 'create' and 'update' but says nothing about permissions, merge/overwrite semantics, side effects, or what happens to existing fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero waste. It immediately conveys the resource and the two modes without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutating tool with no annotations and no output schema, the description is too thin. It does not explain update semantics, return behavior, or how the various optional fields interact with the two modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 parameters. The description only reinforces the create-vs-update mode split, which the schema parameter descriptions already convey, so it adds little beyond the structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (job application) and clarifies the two operating modes: create from URL and update by slug. This is more precise than the bare tool name, though it does not explicitly distinguish itself from siblings such as show_application or add_interview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage by mapping modes to parameters ('create from URL or update by slug'), which gives an agent a reasonable signal. However, it names no alternatives and gives no explicit when-not-to-use or prerequisite guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_configC
Update global configuration settings
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Partial config patch to merge |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden for a mutation tool, and it delivers almost nothing: it doesn't state whether the patch is merged or replaces values, whether omitted keys are preserved, what permissions are required, whether the change is reversible, or what a bad key does. The only merge semantics ('Partial config patch to merge') come from the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; it is efficiently structured. It is arguably too sparse, but sparseness is captured under contextual completeness rather than conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-annotation mutation tool with a free-form nested patch object and no output schema, the definition omits critical context: what global settings exist, how the merge behaves, and what happens on invalid keys. An agent has essentially no basis for constructing a correct patch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the patch parameter is documented in the schema as a partial config patch to merge, so the baseline is 3. The description adds no syntax, key names, or value-shape detail beyond the schema, which matters given the nested object with unrestricted additionalProperties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Update') and resource ('global configuration settings'), with 'global' implicitly distinguishing it from the sibling read_config and read_campaign_config. It does not name a sibling explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus read_config or read_campaign_config, no prerequisites, and no note on when a config change is appropriate. Usage is only inferable from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_profileB
Overwrite the campaign profile.md with new markdown content
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | New profile markdown content | |
| campaign | Yes | Campaign name (e.g. "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Overwrite' usefully discloses that the file is fully replaced rather than appended, which is meaningful for a mutation tool. However it omits permissions, reversibility, and behavior when the campaign does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the action, target, and payload with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no annotations and no output schema, the description covers what changes but not error cases or authorization. Adequate but leaves gaps an agent might need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented as campaign name and new markdown content. The description adds only that the content replaces the existing profile, matching the baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (overwrite) and resource (campaign profile.md) with the content type (markdown), which separates it from siblings like read_profile and update_config. It doesn't explicitly name an alternative, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this over siblings such as update_config or append_retro, and no prerequisites or exclusions. The overwrite framing implies a full-replace intent, but the agent must infer that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
37 tool updates
v0.1.0- First observed
add_interview - First observed
aggregate_retros - First observed
answer_question - First observed
append_retro - First observed
cover_letter - First observed
doctor - First observed
extract_jd - First observed
get_campaign - First observed
get_root - First observed
get_stats - First observed
init - First observed
kb_add - First observed
kb_update - First observed
list_applications - First observed
list_campaigns - First observed
list_interviews - First observed
mark_interview - First observed
ownership - First observed
post_mortem - First observed
prepare - First observed
read_campaign_config - First observed
read_config - First observed
read_cover_letter - First observed
read_logs - First observed
read_prep - First observed
read_profile - First observed
read_qa - First observed
read_retro - First observed
remove_application - First observed
remove_campaign - First observed
rename_application - First observed
rename_campaign - First observed
repair - First observed
show_application - First observed
track_application - First observed
update_config - First observed
update_profile
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.
Maintenance
Related MCP Connectors
Job search management: applications, interviews, offers, recruiter email, and company openings.
- ResuMaxOAuthai.resumax
Find jobs, improve resumes, prepare for interviews, and manage your application pipeline.
Career assistant: resumes, job-match analysis, interview results and career memory.
Analyze job listings against your resume, track applications, and generate cover letters.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceA multi-domain productivity tool that currently enables job search automation, application tracking, and pipeline analysis for Career management. Future phases plan to add health tracking, workout management, and family expense monitoring capabilities.-
- FlicenseAqualityCmaintenanceEnables tracking job applications through a pipeline, scheduling follow-ups, and summarizing job search progress via natural language.7-
- FlicenseNot gradedqualityCmaintenanceEnables job-search application tracking through a private application board, managing application facts, stage history, and interview prep documents while leaving summarization and decision-making to the connected agent.-
- AlicenseNot gradedqualityBmaintenanceEnables an MCP-capable coding agent to run a local-first job search: recording verified opportunities in a private SQLite tracker, tracking follow-ups and outcomes, and preparing evidence-based resumes, application answers, and outreach drafts. It keeps all personal data on the user's machine and stops before submitting applications, uploading documents, or contacting anyone.1MIT