Jobs: Job Search
Problem Statement
Job search involves querying listings by keywords, location, experience level, salary range, and job type. Results need structured data including company, title, salary, and requirements.
Why Human-Only Semantics Fail
- Job search forms mix free-text with structured filters
- Location fields use autocomplete with varying granularity (city/state/remote)
- Salary ranges are displayed in varied formats ("$80K-$120K", "Competitive")
- Experience levels use non-standard labels ("Mid-Senior", "Associate", "IC3")
Why Scraping Fails Here
- Job board HTML varies dramatically between platforms
- Many listings lazy-load job details on click
- Salary data is often hidden or shown only after interaction
- Remote/hybrid/onsite flags are represented inconsistently
How AXAG Eliminates Scraping
job.search declares structured parameters with enums for job type and experience, numeric ranges for salary, and standardized location handling.
Annotated UI Example
Jobs — search listings
<button
axag-intent="job.search"
axag-entity="job_listing"
axag-action-type="read"
axag-required-parameters='["query"]'
axag-optional-parameters='["location","job_type","experience_level","salary_min","salary_max","remote","posted_within_days","page"]'
axag-scope="public"
axag-risk-level="none"
axag-idempotent="true"
axag-description="Search for job listings matching criteria"
>Search Jobs</button>
Semantic Manifest Excerpt
Manifest — job.search
{
"intent": "job.search",
"entity": "job_listing",
"operation_id": "job_search",
"action_type": "read",
"parameters": {
"query": { "type": "string", "required": true },
"location": { "type": "string", "required": false },
"job_type": {
"type": "string",
"required": false,
"enum": ["full_time","part_time","contract","internship","freelance"]
},
"experience_level": {
"type": "string",
"required": false,
"enum": ["entry","mid","senior","lead","executive"]
},
"salary_min": { "type": "number", "required": false, "minimum": 0 },
"salary_max": { "type": "number", "required": false, "minimum": 0 },
"remote": { "type": "boolean", "required": false },
"posted_within_days": { "type": "integer", "required": false, "minimum": 1 },
"page": { "type": "integer", "required": false, "minimum": 1 }
},
"scope": "public",
"risk_level": "none",
"idempotent": true
}
Generated Tool Example
Tool — job_search
{
"tool_name": "job_search",
"description": "Search for job listings matching criteria",
"input_schema": {
"type": "object",
"properties": {
"query": { "type": "string" },
"location": { "type": "string" },
"job_type": { "type": "string", "enum": ["full_time","part_time","contract","internship","freelance"] },
"experience_level": { "type": "string", "enum": ["entry","mid","senior","lead","executive"] },
"salary_min": { "type": "number", "minimum": 0 },
"salary_max": { "type": "number", "minimum": 0 },
"remote": { "type": "boolean" }
},
"required": ["query"]
},
"safety": { "risk_level": "none", "idempotent": true }
}
Constraints & Safety Notes
- Read-only, no side-effects
- Public scope — no authentication required for search
- Salary values are annual and in USD by default
posted_within_dayshelps filter for freshness