From fiber
Build a recruiting-grade audience of candidates using Fiber AI - search, enrich work and personal emails, reveal phones, and export prospect CSVs. Use this when the user says "build a recruiting list", "find me candidates for role X at companies like Y", "talent audience", "recruiting audience", "sourcing list", "candidate outreach list", "recruiting prospect list", or otherwise asks for a saved, exportable list of people for hiring.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fiber:build-recruiting-audience <role + target companies or JD - e.g. "staff iOS engineers at Series B fintechs"><role + target companies or JD - e.g. "staff iOS engineers at Series B fintechs">The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Stand up a persistent, exportable audience optimized for recruiting - prospects first, company metadata as context. This is the right flow when the user wants a saved candidate list, not just a chat-time search.
Stand up a persistent, exportable audience optimized for recruiting - prospects first, company metadata as context. This is the right flow when the user wants a saved candidate list, not just a chat-time search.
/fiber:enrich/fiber:search or /fiber:find-and-enrich-by-role/fiber:audience (more generic)/fiber:sdk-ts or /fiber:sdk-pyIf the user pasted a JD instead of a structured brief, first sanity-check candidates with jdToProfileSearch and show the top 10. Then move into the audience lifecycle:
createAudience in DRAFT. For people-first recruiting flows, set creationMethod: START_FROM_PROSPECTS so the audience prioritizes prospect results over companies. Save the audienceId.updateAudienceSearchParams on the same audienceId. Recruiting-relevant prospectSearchParams fields typically include seniority, departments, jobTitleV2, yearsOfExperience, and location. Call get_endpoint_details_full("updateAudienceSearchParams") on the Core MCP for the exact current schema - do not guess field names. Echo the filters back to the user and confirm.buildAudience. Poll getAudienceStatus every 30 seconds until status === "NORMAL". Report the prospect count when done.estimateEnrichmentCost selecting recruiter-relevant enrichment types (work emails, personal emails, phone numbers, and optionally live profile). This step is free.triggerEnrichment. Poll getEnrichmentStatus every 30 seconds until progressPercent === 100.exportProspects. Recruiting cares about prospects, not companies - skip exportCompanies unless the user asks.This flow has two charged steps. Never auto-advance past either.
createAudience and updateAudienceSearchParams: free.buildAudience: charges credits per entity found. Required script: "Building this audience will scan for prospects matching your filters and charge credits per match. Ready to build?" Wait for an explicit "yes".estimateEnrichmentCost: free, and never skippable. Always run it before triggerEnrichment.triggerEnrichment: charges credits per successful reveal. Required script: "The estimate is {totalCredits} credits ({breakdown}). Your balance is {getOrgCredits}. Proceed with enrichment?" Wait for an explicit "yes".Call getOrgCredits before presenting each estimate. If headroom looks thin, flag it.
jobTitleV2 - try broader seniority or additional departments. Do not re-build until filters change; re-builds charge again.ERROR: check filter validity (enum mismatches are the usual cause), then create a fresh audience rather than mutating a failed one.progressPercent for > 10 minutes: keep polling but tell the user and offer to wait or cancel. Never call triggerEnrichment twice on the same audience - it re-charges.progressPercent === 100 before exporting.updateAudienceSearchParams (e.g. a made-up industry string): the API will 400. Surface the error verbatim and use getIndustries / getRegions to show valid enum values.creationMethod set to NORMAL when the user wanted people-first: the audience will over-index on companies. Delete and recreate with START_FROM_PROSPECTS.seniority + yearsOfExperience bands on the first pass.jobTitleV2 accepts multiple normalized title variants; include common synonyms ("Staff Engineer", "Staff Software Engineer") rather than a single string.estimateEnrichmentCost unless the user explicitly opts out.prospectSearchParams rather than running two separate audiences.location normalization - always surface the audience's post-build location histogram before triggering enrichment.getRateLimits response if the user is running several audiences back-to-back; polling cadence is not the bottleneck - per-org build concurrency is.Accept: text/markdown to https://api.fiber.ai/openapi.json to get the agent-friendly index at the same URL (Stripe pattern).The full audience lifecycle is scripted in /fiber:sdk-ts and /fiber:sdk-py reference folders. The agent path (MCP call_operation) is primary here - writing this as one-off code is rarely the right move for recruiting workflows. Use the SDK only when embedding this flow into a product.
npx claudepluginhub fiber-ai/fiber-ai-plugin --plugin fiberGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.