{"id":9264,"plugin_id":"plugin_asdk_app_6a79de2b746881918127ddf42127ddc4","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T22:54:32.988Z","digest":"16eb6e774f2f20cfdef64616227935bd109e8cd3ea81b79f108974617ff971f7","against":null,"payload":{"name":"talent-sourcing","description":"Finds qualified candidates for a role by searching LinkedIn, Indeed, GitHub,\nand other professional platforms using Nimble Web Search Agents. Accepts a\njob description, role title, or freeform request and returns a ranked\ncandidate list with profiles, skills, and contact signals.\n\nUse this skill when the user wants to find, source, or recruit candidates for\na role. Common triggers: \"find candidates for\", \"source engineers in\",\n\"who can I hire for\", \"find me a [role]\", \"recruiting for\", \"talent search\",\n\"find a [role] in [city]\", \"build a candidate list\", \"sourcing for [role]\",\n\"who's available for\", \"find potential hires\". Also triggers on a pasted job\ndescription followed by a sourcing request.\n\nDo NOT use for job market research or salary benchmarking — use\nmarket-finder instead. Do NOT use for researching a single known person\n— use company-deep-dive or meeting-prep instead.\n","included_files":[{"relative_path":"references/memory-and-distribution.md","size_in_bytes":22058},{"relative_path":"references/nimble-playbook.md","size_in_bytes":37015},{"relative_path":"references/profile-and-onboarding.md","size_in_bytes":9344}],"skill_md_contents":"---\nname: talent-sourcing\ndescription: |\n  Finds qualified candidates for a role by searching LinkedIn, Indeed, GitHub,\n  and other professional platforms using Nimble Web Search Agents. Accepts a\n  job description, role title, or freeform request and returns a ranked\n  candidate list with profiles, skills, and contact signals.\n\n  Use this skill when the user wants to find, source, or recruit candidates for\n  a role. Common triggers: \"find candidates for\", \"source engineers in\",\n  \"who can I hire for\", \"find me a [role]\", \"recruiting for\", \"talent search\",\n  \"find a [role] in [city]\", \"build a candidate list\", \"sourcing for [role]\",\n  \"who's available for\", \"find potential hires\". Also triggers on a pasted job\n  description followed by a sourcing request.\n\n  Do NOT use for job market research or salary benchmarking — use\n  market-finder instead. Do NOT use for researching a single known person\n  — use company-deep-dive or meeting-prep instead.\nallowed-tools:\n  - Bash(nimble:*)\n  - Bash(date:*)\n  - Bash(cat:*)\n  - Bash(mkdir:*)\n  - Bash(python3:*)\n  - Bash(echo:*)\n  - Bash(jq:*)\n  - Bash(ls:*)\n  - Read\n  - Write\n  - Edit\n  - Glob\n  - Grep\n  - Agent\n  - AskUserQuestion\nmetadata:\n  author: Nimbleway\n  version: 1.6.1\n  category: human-resources\n---\n\n# Talent Sourcing\n\nCandidate discovery powered by Nimble Web Search Agents.\n\nUser request: $ARGUMENTS\n\n**Before running any commands**, read `references/nimble-playbook.md` for Claude Code\nconstraints (no shell state, no `&`/`wait`, sub-agent permissions, communication style).\n\n---\n\n## Instructions\n\n### Step 0: Preflight\n\nFollow the transport selection + standard preflight from `references/nimble-playbook.md` — pick CLI or MCP at session start, then run the standard preflight calls (date calc, today, profile, memory index) in parallel.\n\nAlso simultaneously:\n- `mkdir -p ~/.nimble/memory/{reports,talent-sourcing}`\n\nFrom the results:\n- CLI missing or API key unset → read `references/profile-and-onboarding.md`, stop\n- Tag all `nimble` CLI calls: `nimble --client-source nimble-agent-skills <subcommand>`. MCP requests are attributed at the transport level — see `references/nimble-playbook.md`.\n- Profile exists → note industry keywords if any; proceed to Step 1\n- No profile → fine, talent-sourcing doesn't require onboarding; proceed to Step 1\n\n### Step 1: Parse Request & Confirm Search Parameters\n\nParse `$ARGUMENTS` for:\n- **Role** — job title or function (e.g. \"Senior React Engineer\", \"Head of Sales\")\n- **Location** — city, metro, region, or remote (e.g. \"New York City\", \"remote US\")\n- **Skills / requirements** — specific technologies, years of experience, domain expertise\n- **Seniority** — junior, mid, senior, staff, director, VP, C-level\n- **Source preference** — specific platforms (LinkedIn, GitHub, Indeed, etc.) or \"all\"\n\nIf a full job description was pasted, extract the above fields from it.\n\nIf **role** is missing or ambiguous, ask with `AskUserQuestion`:\n\n> \"What role are you hiring for, and where? (e.g. 'Senior ML Engineer, remote US'\n> or paste a job description)\"\n\nOnce parameters are clear, confirm with the user using `AskUserQuestion`:\n\n> \"Searching for: **[Role]** | Location: **[Location]** | Key skills: **[Skills]**\n> | Seniority: **[Seniority]**\n>\n> Platforms to search: LinkedIn, Indeed, GitHub (for technical roles), AngelList /\n> Wellfound, and professional communities.\n>\n> - **Start search**\n> - **Adjust parameters first**\"\n\n### Step 2: WSA Discovery\n\nDiscover available Web Search Agents for candidate-sourcing platforms. Run\nsimultaneously:\n\n```bash\nnimble extract:templates list --limit 100  # then filter items for \"linkedin people\"\nnimble extract:templates list --limit 100  # then filter items for \"indeed resume\"\nnimble extract:templates list --limit 100  # then filter items for \"github profile\"\nnimble extract:templates list --limit 100  # then filter items for \"wellfound talent\"\n```\n\nFilter results for `entity_type: SERP` or `entity_type: PDP`. Prefer\n`managed_by: \"nimble\"`. Validate promising agents with:\n\n```bash\nnimble extract:templates get --extract-template-name {name}\n```\n\nCache discovered WSA names and required params. If no WSAs found for a platform,\nfall back to `nimble search` for that platform.\n\n### Step 3: Parallel Candidate Search (Sub-Agents)\n\nSpawn `nimble-researcher` agents (`agents/nimble-researcher.md`) with\n`mode: \"bypassPermissions\"`, max 4 concurrent. Assign one agent per platform:\n\n**Agent 1 — LinkedIn**\n\nSearch for people matching the role criteria. Use Boolean-style query construction:\n\n```bash\nnimble search --query \"site:linkedin.com/in [Role] [Location] [Key Skills]\" \\\n  --max-results 15 --search-depth fast\nnimble search --query \"[Role] [Location] linkedin profile [Skill1] [Skill2]\" \\\n  --max-results 10 --search-depth fast\n```\n\nIf a LinkedIn WSA was discovered in Step 2, use it instead with the role title,\nlocation, and skill keywords as inputs.\n\n**Agent 2 — Indeed / Resumes**\n\n```bash\nnimble search --query \"site:indeed.com resume [Role] [Location] [Key Skills]\" \\\n  --max-results 10 --search-depth fast\nnimble search --query \"[Role] resume [Location] [Key Skills]\" \\\n  --max-results 10 --search-depth fast\n```\n\n**Agent 3 — GitHub (technical roles only)**\n\nSkip this agent for non-technical roles (e.g. Sales, Marketing, Operations).\n\n```bash\nnimble search --query \"site:github.com [Role] [Location] [Key Skills]\" \\\n  --max-results 10 --search-depth fast\nnimble search --query \"github [Key Skills] developer [Location] open to work\" \\\n  --max-results 10 --search-depth fast\n```\n\n**Agent 4 — AngelList / Wellfound + Communities**\n\n```bash\nnimble search --query \"site:wellfound.com [Role] [Location] [Key Skills]\" \\\n  --max-results 10 --search-depth fast\nnimble search --query \"[Role] [Location] open to work OR seeking opportunities \\\n  [Key Skills]\" --max-results 10 --search-depth fast\n```\n\nEach agent returns: candidate name (if available), profile URL, current title,\nlocation snippet, inferred skills, availability signals (\"open to work\", \"seeking\",\n\"available\") with event date (if available) and source URL.\n\n### Step 4: Deep Profile Extraction\n\nFor the top candidates identified in Step 3 (aim for 10–20 unique profiles across\nall platforms), extract full profile details. Run all extractions simultaneously:\n\n```bash\nnimble extract --url \"[profile-url]\" --format markdown\n```\n\nFrom each extracted profile, pull:\n- **Full name**\n- **Current role & company**\n- **Location**\n- **Skills / tech stack**\n- **Experience summary** (years, notable employers)\n- **Education**\n- **Availability signals** (open to work, recent job change, posting activity)\n- **Contact signals** (email, personal site, GitHub handle)\n\nFor extraction failures, follow the fallback pattern in\n`references/nimble-playbook.md`. If a profile is behind a login wall and extraction\nfails, keep the search-snippet summary instead — do not skip the candidate.\n\n**Extraction budget:** extract up to 15 profiles. If more than 15 candidates were\nfound in Step 3, prioritize by relevance score (seniority match + skill overlap +\nlocation match) before extracting.\n\n### Step 5: Score & Rank Candidates\n\nScore each candidate (1–10) using these weighted signals:\n\n| Signal | Weight |\n|--------|--------|\n| Role / title match | 30% |\n| Skill overlap with requirements | 30% |\n| Location match | 20% |\n| Seniority match | 10% |\n| Availability signals | 10% |\n\nGroup candidates into tiers:\n- **Tier 1 (Strong match, 7–10):** All required signals present\n- **Tier 2 (Partial match, 4–6):** Most signals present, 1–2 gaps\n- **Tier 3 (Stretch, 1–3):** Worth reviewing if Tier 1/2 list is thin\n\n### Step 6: Output\n\nBefore presenting results, check `~/.nimble/memory/talent-sourcing/[role-slug].md` —\nif a candidate was surfaced in a prior run, mark them `(previously surfaced)` rather\nthan re-presenting them as new.\n\nPresent a structured candidate report:\n\n```\n## Candidate Report: [Role] in [Location]\nSearched: LinkedIn, Indeed, GitHub, Wellfound\nFound: [N] candidates | Tier 1: [N] | Tier 2: [N] | Tier 3: [N]\n\n**TL;DR:** [2-3 sentence summary of the strongest candidates and any notable patterns]\n\n---\n\n### Tier 1 — Strong Match\n\n#### 1. [Name] — [Score]/10\n- **Current role:** [Title] at [Company]\n- **Location:** [Location]\n- **Skills:** [Skill1], [Skill2], [Skill3]\n- **Experience:** [X years, notable employers]\n- **Availability:** [signal] — [event date or \"date unknown\"] — [source URL]\n- **Profile:** [URL]\n- **Contact signals:** [email / personal site / GitHub]\n\n...\n\n---\n\n### What This Means\n[1-2 sentences on hiring outlook: supply/demand signal, speed recommendation, any\nstandout sourcing channel]\n```\n\nOmit fields where data is unavailable. Do not fabricate details — use \"unknown\"\nfor missing fields. Add a one-sentence **\"Why this candidate\"** note for each\nTier 1 result.\n\n### Step 7: Save to Memory\n\nMake all Write calls simultaneously:\n\n- Report → `~/.nimble/memory/reports/talent-sourcing-{YYYY-MM-DD}.md` (full candidate report with all tiers)\n- Per-role → `~/.nimble/memory/talent-sourcing/[role-slug].md` (candidate list; write or update)\n- Profile → update `last_runs.talent-sourcing` in `~/.nimble/business-profile.json` using the python3 snippet in `references/profile-and-onboarding.md`. Skip if the file does not exist.\n\nUpdate `~/.nimble/memory/talent-sourcing/index.md` with a row for this search.\nFollow the wiki update pattern from `references/memory-and-distribution.md`.\n\n### Step 8: Share & Distribute\n\n**Always offer distribution — do not skip this step.** Follow\n`references/memory-and-distribution.md` for connector detection, sharing flow, and\nsource links enforcement.\n\n### Step 9: Follow-ups\n\nOffer next steps using `AskUserQuestion`:\n\n> **What's next?**\n> - **Go deeper on a candidate** — extract full profile + find contact info\n> - **Expand search** — broaden location, relax seniority, try more platforms\n> - **Narrow search** — add a required skill or tighten location\n> - **Export list** — save as CSV or formatted doc\n> - **Done**\n\n**Sibling skill suggestions:**\n\n> - Run `company-deep-dive` on a candidate's current employer for deal context\n> - Run `meeting-prep` before reaching out to a Tier 1 candidate\n\n---\n\n## Error Handling\n\nSee `references/nimble-playbook.md` for the standard error table. Skill-specific\nhandling:\n\n- **Profile behind login wall:** Keep search-snippet summary; note \"full profile\n  unavailable — LinkedIn/Indeed login required\" in the candidate entry.\n- **< 5 total candidates found:** Notify the user, suggest broadening location to\n  remote or relaxing seniority, then ask whether to re-run with adjusted params.\n- **Search 500 on a platform:** Retry once with a simplified query; if still failing,\n  skip that platform and note it in the report header.\n- **GitHub agent skipped for non-technical role:** Note \"GitHub not searched for\n  this role type\" in the report header.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}