For job seekers
Run the whole search from one workspace.
Profile, opportunities, tailored drafts, approvals, application pipeline, interview preparation, company research, and the agent conversation stay connected.

JobHunter gives job seekers and recruiters separate React workspaces backed by purpose-built ADK-Rust agent teams. One side researches roles, prepares applications, and tracks a search. The other defines openings, finds consenting candidates, explains matches, and manages a hiring pipeline.

One platform · two users
A candidate and a recruiter should not share the same dashboard or the same agent instructions. JobHunter uses the authenticated role to select the workspace, navigation, coordinator, tools, and data the person is allowed to use.
For job seekers
Profile, opportunities, tailored drafts, approvals, application pipeline, interview preparation, company research, and the agent conversation stay connected.

For recruiters
Open roles, candidate search, scored matches, editable outreach, pipeline stages, analytics, and the headhunter agent are built for the recruiter’s decisions.

Job seeker agent team
The coordinator stays responsible for the conversation. It delegates focused work to agents with narrower instructions and toolsets, then brings the result back into the same session.
Routes each request and keeps the user-facing conversation together.
Searches configured job connectors and saves useful leads.
Scores roles against the candidate profile and explains strengths and gaps.
Builds truthful, market-aware resumes, cover letters, and screening answers.
Checks board policy, prepares the browser workflow, and stops for approval.
Keeps applications, follow-ups, and outcomes in one pipeline.
Prepares interview practice and feedback.
Researches companies, roles, and interview patterns.
Supports offer comparison and negotiation.
Skills, achievements, target roles, locations, salary preferences, resume content, and market format become shared context for the specialists.
The sourcing agent calls configured connectors. Ranking then compares saved roles with the profile and makes the fit rationale visible.
The tailoring agent selects the target-market format and creates truthful materials from the candidate’s own experience.
The apply agent checks site policy and the prepared draft. Submission tools require the correct scope and an approved request.
The tracker, coach, company-intelligence, networking, and offer agents continue the work around the application itself.
Recruiter agent team
Recruiter work starts with an opening and a clear set of constraints. The agent team searches only profiles that candidates have made recruiter-visible, records why each match was made, and prepares outreach for human review.
Turns a hiring request into role, sourcing, ranking, and outreach work.
Finds recruiter-visible profiles that meet the role constraints.
Scores candidates and records the reasons and risks behind each match.
Drafts a reviewable first message without sending it automatically.

A recruiter records the title, locations, work policy, skills, experience, compensation, and hiring context.
Search is limited to profiles marked visible to recruiters; filters narrow skills, location, experience, and remote preference.
The ranking agent stores a fit score, positive evidence, and risks so a recruiter can understand why a candidate surfaced.
Sourced, shortlisted, contacted, interviewing, offered, hired, and rejected remain explicit states in the recruiter workspace.
The outreach agent produces an editable subject and message. The recruiter remains responsible for the relationship and the send action.
Architecture
Authentication selects the job-seeker or recruiter surface. ADK-Rust then loads the matching coordinator and keeps model calls, tools, sessions, memory, browser work, and streamed events inside the same runtime contract.
Human control
An application changes a person’s relationship with an employer. JobHunter separates preparation from execution: board policy is checked, an approval record is created, scoped tools verify that approval, and the pipeline records the final outcome.
The same principle applies to hiring. Candidate visibility is opt-in, matching evidence is stored, and outreach is drafted for a recruiter to inspect rather than silently sent.
let coordinator = LlmAgentBuilder::new("job_hunter_coordinator")
.model(pro)
.sub_agent(Arc::new(sourcing_agent))
.sub_agent(Arc::new(ranking_agent))
.sub_agent(Arc::new(tailoring_agent))
.sub_agent(Arc::new(apply_agent))
.sub_agent(Arc::new(tracker_agent))
.sub_agent(Arc::new(coach_agent))
.build()?;if !matches!(record.status, ApprovalStatus::Approved) {
return Ok(json!({
"error": "approval_required",
"approval": record,
}));
}
state.pipeline.upsert(&user_id, &item).await?;What was verified
The repository, React routes, Rust agent builders, recruiter API, persistence layer, approval tools, and local stack were inspected. The captures on this page were taken from that React application with local data.
Build role-aware agent products
JobHunter shows how ADK-Rust can support two substantial workflows in one product without flattening them into a generic chatbot.