get_job
Retrieve a specific job record by id, URL, or custom title, with optional full description and linked resume summaries. Handles ambiguous matches by returning all matching IDs.
Instructions
Retrieve a single job record by id, url, or custom_title (D6, the REQUIRED read path for jd_text — without this tool, jd_text is write-only).
custom_title exists as a lookup key because it exists as a SAVE
affordance: a job saved without a url is findable ONLY by the
custom_title the user agreed to (analyze.py's _NO_URL_NOTICE
promises exactly this). Without this parameter, that promise had no
retrieval path at all — a caller could only dump every job via
list_jobs and eyeball it.
custom_title is NOT unique (save_job_analysis deliberately never
matches an existing record by it — R3/SC-08), so a lookup CAN match more
than one job. Silently returning the first match would hide that
ambiguity from the caller and could resolve to the wrong job. Instead:
0 matches -> not_found; exactly 1 -> that job; more than 1 ->
error="ambiguous", naming every matching id so the caller can retry
with a specific id.
has_description is ALWAYS present in the response, regardless of
include_description — it is the affordance that makes the jd_text
opt-in discoverable without dragging JD text into context by default.
Also returns the linked resume version SUMMARIES (no content) — the
headline query is "did I apply to X?" -> "yes, and with this resume."
(SC-22). The full text still comes from get_resume_version.
This tool NEVER raises.
Args:
id: Job id. Exactly one of id/url/custom_title
must be given.
url: Alternate lookup key (url is UNIQUE).
custom_title: Alternate lookup key for a URL-less job. NOT
unique — see above for the multi-match rule.
include_description: When True and a description was captured,
populates description with the full pasted
JD text. Defaults to False so a routine status
check does not drag JD text into context.
Returns: GetJobResult with success=True, job, description, has_description, resume_versions on success; success=False with error="not_found" | "invalid_input" | "corrupt" | "ambiguous" on failure.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| url | No | ||
| custom_title | No | ||
| include_description | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| job | No | ||
| error | No | ||
| message | No | ||
| success | Yes | ||
| description | No | ||
| has_description | No | ||
| resume_versions | No |