Favorite Staffing — case file

Favorite Staffing

PRD_ Qualification Agent Favorite · 8 nodes · HiringIn production

Checks everything the candidate said over SMS against the resume as ground truth, issues the final qualification verdict, and writes it into HubSpot. — 506 tasks (505 completed, 1 failed) in the 30 days to 2026-08-10; 290 tasks in the 14 days to 2026-07-13

PRD_ Qualification Agent Favorite2.50 credits = $0.25 per candidate
1
Validate the candidate's SMS replies against resume and summary — resume is the source of truth on conflict
2
Compress the running summary to under 2,000 characters
3
Update the HubSpot contact with the qualification verdict
4
Trigger the downstream scoring workflow
Where the money goes · per run
Step typeCountRateSubtotal
Code / integration steps3$0.025$0.075
Model calls · standard tier2$0.1$0.2
Other3—$0
Rate-card estimate (standard tier)$0.275

Whole graph: 3 integration nodes (2x hubspot-update-contact, 1x CustomApiTool_TriggerScoringWorkflow), 2 std-tier prompt nodes (Candidate Validation and Qualification 27,705-ch; Summary Compressor Tool 1,781-ch), 0 code, 0 parse, plus entry, condition and exit. Path: Entry -> Validate ($0.10) -> Update Contact ($0.025) -> Trigger Scoring ($0.025) -> condition on summary_length: <2000 -> exit, giving intake $0.025 + $0.15 = $0.175 (1.75 credits); >=2000 -> Compress ($0.10) -> second Update Contact ($0.025), giving $0.30 (3.0 credits). Measured (catalog): 2.50 credits = $0.25, 'exact menu match' (qualify-from-reply $0.225 + intake $0.025; menu.json /lines[1]/modules[3] calibration agrees). $0.25 sits between the two branch totals — consistent with std tier and the compress branch firing on roughly 60% of runs. No tier gap: mid tier on the validator alone would make even the short path $0.275 and the long path $0.50, both above the measurement.

Measured: 2.50 credits = $0.25 per candidate, exact menu match ('Qualify from the reply' $0.225 + intake $0.025) (credit-rail measured)

Models seen in the graph: preferredModel GEMINI_3_FLASH on both prompt nodes and all integration nodes (fallbacks GPT4_1_MINI/GPT4_1/CLAUDE_4_SONNET on the prompts, GEMINI_3_PRO/GPT4_1/CLAUDE_4_SONNET elsewhere); condition node on GEMINI_3_FLASH

Graph read: ama-solution/04-agents/favorite-staffing/prd-qualification-agent-favorite/agent.json (8 nodes, graph.agent.name 'PRD_ Qualification Agent Favorite'; flags disregarded per probe rule). Variants: 04-agents/favorite-staffing-us/qualification-agent-favorite/ and 04-agents/favorite-staffing-eu-public/3-qualification-agent/.

What a copycat build should know
  • Resume is ground truth: the single 27,705-char validation prompt reconciles everything the candidate said over SMS against the CV and summary, resolving conflicts toward the resume — this one node is what the menu prices as 'Qualify from the reply'.
  • Cost control by graph shape: the second model call (Summary Compressor) is gated by a deterministic edge condition (summary_length >= 2000 -> compress; summary_content < 2000 -> exit), keeping it off short-summary runs instead of prompting for brevity.
  • Trigger Scoring Workflow fires before the compression check, so downstream priority scoring never waits on the compress branch.
  • At 8 nodes it is the smallest of the three graphs because it is a pure verdict writer — no SMS channel, no code nodes; it exists as a separate agent only because the journey is split, which is what generates the re-entry-trigger overhead the catalog quantifies at $0.15/candidate.
Lessons from the client record
  • 2 of this agent's 3 HubSpot writes were part of the 2026-08-26 migration off Pipedream after silent value drops; a new qualification build should write the verdict via direct custom API and verify field persistence, not node status (ACTIVITY_LOG.md).
  • The atomic-PATCH enum trap (CLI-5913) hits exactly this agent's verdict fields: facility_confirmed / license_confirmed configured with capital 'Unknown' while the agent emits lowercase — one bad enum now 400s the whole contact update and blocks the downstream trigger node.
  • Pre-migration verification discipline worth copying: tested against a dummy contact that the properties wrapper is mandatory and that omitted params are omitted rather than sent as empty strings — so a 19-property tool does not clear fields a node leaves blank (live run wrote 4, preserved 13/13 untouched).
  • Qualification volume runs at roughly half of screening (506 vs 1,028 tasks/30d) — the funnel drop between screening and qualification is normal shape, not failure (agent-catalog volumes; ~290 tasks/two weeks per menu.json).
Reusable fragments cut from this agent
  • hrValidate Candidate Reply, Resume and Summary03-projects/26-hr/02-resources/module-library/08-资格判定.md#1
  • hrCompress Summary Content To Less Than 200003-projects/26-hr/02-resources/module-library/06-生成交付物.md#4
Qualify from the replyHubSpotcustom scoring workflow API

ama-solution/04-agents/favorite-staffing/prd-qualification-agent-favorite/agent.json · solution-intelligence/content/agent-catalog.json (id favorite-qualification) · solution-intelligence/content/menu.json (qualify-from-reply, price_per_item 0.225, calibration 2.50 credits) · sol-favorite-staffing/ACTIVITY_LOG.md · sol-favorite-staffing/CLIENT.md · ama-solution/03-projects/26-hr/02-resources/module-library/08-资格判定.md

Favorite Staffing · PRD_ Qualification Agent Favorite4 stepscase analysed