How to Build a Dual-Subagent System to Extract Actionable Hiring Signals from Job Listings
Ads
Most job descriptions contain hundreds of words of company values, generic perks, and wishlist traits written by committee. Evaluating 20 postings a day causes fatigue, making it easy to miss core technical constraints tucked into a paragraph.

A two-pass job listing signal extractor cuts through this filler. Splitting the work between two small subagents keeps data cleaning separate from candidate evaluation.
Why Single Prompts Miss Operational Realities
Asking a single prompt to "read this listing and tell me if I qualify" forces the LLM to handle too many tasks at once: parsing raw formatting, stripping out perks, summarizing tasks, and checking requirements against your profile. Faced with all this, LLMs often overlook constraints like required travel, legacy systems, or mandatory on-site days.
Splitting this into two sequential steps prevents these oversights. The first agent cleans the data; the second evaluates the match.
Subagent 1: The Noise Filter Prompt
Paste this prompt and the unedited job description into your chat interface. It strips out culture statements and pulls only operational requirements.
You are Subagent 1: Noise Filter. Your sole responsibility is to extract verifiable operational data from a raw job description.
Extract and return only the following sections in clean Markdown:
1. Core Tech Stack & Tools (Only tools explicitly required for daily work)
2. Primary Deliverables (What will this person build, maintain, or deliver in month 1-6?)
3. Work Constraints (Location, hybrid schedule, on-call expectations, travel)
4. Hard Knockout Criteria (Years of experience, licenses, or clearance required)
Rules: Exclude all marketing copy, mission statements, employee benefits, and generic soft skills (e.g., 'collaborative', 'self-starter').
[PASTE JOB LISTING HERE]
Subagent 2: The Gap & Fit Analysis Prompt
In the same chat session, paste Subagent 1's output into this second prompt along with your career summary.
You are Subagent 2: Gap Analyzer. You evaluate extracted operational requirements against candidate background data.
Inputs:
- Requirements: [PASTE OUTPUT FROM SUBAGENT 1]
- My Profile: [PASTE SHORT SUMMARY OF YOUR SKILLS AND RECENT ROLES]
Task: Compare the requirements to my profile. Return:
1. Direct Matches: Requirements I fully satisfy with verified past work.
2. Potential Deficits: Tools or deliverables I lack direct evidence for.
3. Interview Vulnerabilities: Specific areas an interviewer is likely to probe based on these gaps.
4. Go/No-Go Recommendation: State clearly whether this role has >=75% technical overlap.
Executing the Pipeline Locally
This method runs in Claude, ChatGPT, or an offline model via Ollama without custom scripts or API subscriptions.
Save the prompt templates in a plain text file. When reviewing listings, copy the job description, run Agent 1, and immediately feed the output into Agent 2. The review takes under two minutes per listing.
FAQ
Can I run both subagents in a single chat prompt?
Yes, but output quality drops. LLMs perform more thorough extractions when they produce clean intermediate data before analyzing fit.
What if the job posting doesn't list daily deliverables?
Agent 1 will note that deliverables are missing. This usually indicates a generic listing or an undefined scope from the hiring team.
How long should my profile summary be for Agent 2?
Keep it between 200 and 400 words focused on your primary tools, domains, and past project scale.