← 返回 Skills 市场
nostrband

Find Recruiting Firm

作者 nostrband · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ✓ 安全检测通过
30
总下载
0
收藏
1
当前安装
1
版本数
在 OpenClaw 中安装
/install find-recruiting-firm
功能描述
Use whenever the user wants to find, shortlist, vet, or enrich US recruiting and staffing firms — executive search/retained search, RPO, tech/sales/healthcar...
使用说明 (SKILL.md)

find-recruiting-firm

Drive the ServiceGraph API (https://api.servicegraph.co) to find, shortlist, and enrich US recruiting and staffing firms via the pro_services dataset.

This skill is for procuring an external recruiting/staffing firm to do hiring on the user's behalf. It is NOT for:

  • recruiting an in-house employee (the user wants to hire someone for their own team — that's job-posting, not procurement),
  • candidate-side asks (an individual job-seeker looking for someone to represent them).

Both share keyword overlap with the positive case ("recruiter", "hire"), so the boundary matters.

Always pin industry:hr_recruiting_staffing. Sub-types (executive search, RPO, contingent staffing, temp, vertical specializations) are NOT separate tags — sub-type specialization is a keyword substring search on firm text.

Any HTTP client works (curl, fetch, requests). Examples below use curl.

When NOT to use this skill

  • "I want to hire a [role] for my team — where should I post the job?" → recruiting-an-employee.
  • "Find me a recruiter to represent me in my job search" → candidate side.
  • "Hire an in-house recruiter / Head of Talent" → recruiting an employee.
  • "Help me write a job description" → DIY/do-the-work.
  • ATS or HR-software comparisons (Greenhouse vs Lever, Workday).
  • Career coaching for individual job-seekers.
  • Non-US firms / individual freelance recruiters.

MCP server (preferred for authed calls)

If your harness has the ServiceGraph MCP server loaded (tools containing servicegraph), prefer those — OAuth 2.1 + PKCE keeps the token in the harness sandbox. Otherwise use the REST flow below.

API surface (dataset id: pro_services)

Every endpoint requires the bearer (Authorization: Bearer vk_…). No anonymous tier.

Endpoint Cost Use it for
GET /v1/datasets/pro_services/fields[?include_values=1] free Confirm hr_recruiting_staffing is in the industry value list.
GET /v1/datasets/pro_services/check?filter=… free Validate filter.
POST /v1/datasets/pro_services/translate-intent free {intent} → DSL filter + sanity count.
GET /v1/datasets/pro_services/search?filter=…&limit= free Brief firm cards + per-row unlock hint + total.
GET /v1/datasets/pro_services/:apex free One row brief; detail only if unlocked.
POST /v1/datasets/pro_services/unlocks 10 credits / firm {apexes:[...]} ≤100; atomic; 30-day TTL on detail.
GET /v1/me/credits free Balance.

Cost model. Discovery / validation / search / brief reads are free. Detail (url, phone, email, social, address, full platforms map) costs 10 credits per firm and lasts 30 days.

Auth

vk_* API keys minted in the dashboard. Keep the token out of the LLM context — never read .env* into your context; dispatch via shell.

  1. Try the call first through a shell wrapper that sources .env.local:

    ( set -a; [ -f .env.local ] && . ./.env.local; set +a;
      curl -sS -H "Authorization: Bearer $SERVICEGRAPH_API_KEY" \
           'https://api.servicegraph.co/v1/datasets/pro_services/fields' )
    
  2. On 401 prompt the user:

    "Open https://servicegraph.co/profile/api-keys, create a key, and add SERVICEGRAPH_API_KEY=vk_… to .env.local here (or export it). Tell me when done. Please don't paste the key into chat."

  3. Retry after the user signals ready.

Filter DSL

GitHub-search-style.

filter   := orExpr
orExpr   := andExpr ("OR" andExpr)*
andExpr  := notExpr (("AND")? notExpr)*    # whitespace = implicit AND
notExpr  := ("NOT" | "-") notExpr | atom
atom     := "(" filter ")" | predicate
predicate:= IDENT op valueOrList | bareword
op       := ":" | "=" | ">=" | "\x3C=" | ">" | "\x3C"
valueOrList := value ("," value)*
value    := IDENT | NUMBER | tagAtEvidence
tagAtEvidence := IDENT "@" ("low"|"medium"|"high")
bareword := IDENT | NUMBER          # → keyword:\x3Cbareword>

Four rules that bite: AND binds tighter than OR (use parens); comma list = OR within one predicate; negation is -x or NOT x; bareword = keyword search (quote multi-word phrases).

Recruiting-flavored examples (validate yours with /check):

industry:hr_recruiting_staffing "executive search"
industry:hr_recruiting_staffing "retained search" state:NY tech
industry:hr_recruiting_staffing rpo state:CA
industry:hr_recruiting_staffing contingent staffing
industry:hr_recruiting_staffing healthcare state:TX,FL
industry:hr_recruiting_staffing sales saas
industry:hr_recruiting_staffing rating>=4 has:clutch

Sub-type → keyword mapping:

User asks for Add as keyword(s)
Executive search / retained search executive, retained
RPO (recruitment process outsourcing) rpo, "recruitment process outsourcing"
Contingent / contract staffing contingent, contract
Temp / temporary staffing temp, temporary
Tech recruiting tech, technical, engineering
Sales recruiting sales
Healthcare recruiting healthcare, clinical, nursing
Finance / accounting recruiting finance, accounting
Legal recruiting legal, attorney

Identifying firms — apex

Firms are identified by their apex domain (korn-ferry.com, not www.korn-ferry.com/about).

Recipes

A. Executive search for a CFO

GET /v1/datasets/pro_services/search?filter=industry:hr_recruiting_staffing+executive+search&limit=10
# Present, get pick of 3. "Unlocking 3 = 30 credits, 30-day TTL."
POST /v1/datasets/pro_services/unlocks
  { "apexes": ["firm-a.com", "firm-b.com", "firm-c.com"] }

B. Retained boutique in a state, vertical

GET /v1/datasets/pro_services/search?filter=industry:hr_recruiting_staffing+retained+state:NY+tech+-company_size_signal:large_50plus&limit=10

C. RPO for a hiring surge

GET /v1/datasets/pro_services/search?filter=industry:hr_recruiting_staffing+rpo+(tech OR engineering)&limit=10

D. Indirect intent — "scaling fast, need help hiring"

GET /v1/datasets/pro_services/search?filter=industry:hr_recruiting_staffing+(rpo OR contingent)&limit=10

Or use the translator:

POST /v1/datasets/pro_services/translate-intent
  { "intent": "RPO or volume recruiting partner for a 50-engineer hiring push" }

E. Vertical: healthcare staffing

GET /v1/datasets/pro_services/search?filter=industry:hr_recruiting_staffing+healthcare+state:OH,IL,MI,IN,WI,MN&limit=10

F. Quality threshold + tech-sector

GET /v1/datasets/pro_services/search?filter=industry:hr_recruiting_staffing+executive+search+tech+rating>=4&limit=10

G. BYO apex list — enrich domains

User pastes 8–20 staffing/recruiting firm domains:

  1. GET /v1/datasets/pro_services/:apex per domain — free brief (404 = not in catalog, no charge).
  2. User picks N to fully enrich. POST /unlocks = 10×N credits, atomic, detail returned.
  3. Re-runs within 30-day TTL are free.

Gotchas

  • Always pin industry:hr_recruiting_staffing. Without it, "recruiter" / "executive search" keywords leak into other industries.
  • Distinguish "find me a recruiting firm" (procurement, fires) from "find me a recruiter / hire a recruiter for our team" (recruiting-an-employee, refuses). When ambiguous, lean on context: explicit firm/agency/RPO language or volume framing → procurement; "for our team" / "to post the job" / "I want to hire" → in-house hire.
  • Candidate-side asks ("represent me as a candidate", "find me a job") are out of scope.
  • Career coaching for individuals is a different need (and shares the executive-coaching keyword with management consulting). Refuse — this skill is firm-procurement.
  • Sub-types are keyword-only. Multi-word sub-types split into ANDed barewords unless quoted ("executive search" → one phrase).
  • Briefs DO include apex, name, location, ratings. They DON'T include url, phone_primary, email_primary, legal_name, address_full, full platforms — those require an unlock.
  • not_found / not_in_dataset 404 = not in pro_services. Skip; not charged.
  • Unlock is atomic. N apexes either all charge (up to 10×N credits) or none on 402.
  • Within-TTL re-views are free (was_cached:true).

Errors

JSON envelope: {"error": {"code": "...", "message": "..."}}.

Status Code What to do
400 filter_parse_error position included; fix and re-validate with /check.
400 kind_in_filter Strip any kind: from filter.
400 field_not_in_dataset Drop the disallowed field.
400 invalid_apex Re-normalize.
401 unauthorized / invalid_audience Re-prompt for fresh vk_….
402 insufficient_credits needed and balance; nothing charged.
404 not_found / not_in_dataset Skip; not charged.
429 rate_limited Honor Retry-After.

End-to-end example

User: "Three retained executive search firms in NY focused on tech CFOs, ideally with 4-star ratings and a Clutch profile."

GET /v1/datasets/pro_services/fields?include_values=1
GET /v1/datasets/pro_services/check?filter=industry:hr_recruiting_staffing+retained+executive+state:NY+tech+rating>=4+has:clutch
GET /v1/datasets/pro_services/search?filter=...&limit=10
# Present briefs. "Unlocking 3 = 30 credits, 30-day TTL."
POST /v1/datasets/pro_services/unlocks
  { "apexes": ["firm-a.com", "firm-b.com", "firm-c.com"] }
GET /v1/me/credits
安全使用建议
Install only if you intend to use ServiceGraph for recruiting-firm procurement. Expect outbound calls to api.servicegraph.co and possible credit charges when you ask the agent to unlock detailed firm records; review the requested unlock list before approving paid actions.
能力标签
requires-oauth-tokenrequires-sensitive-credentials
能力评估
Purpose & Capability
The stated purpose is to find, shortlist, and enrich US recruiting and staffing firms through ServiceGraph, and the API calls, filters, and examples all fit that purpose.
Instruction Scope
The skill defines clear in-scope and out-of-scope cases and instructs the agent to get user selection before paid firm-detail unlocks.
Install Mechanism
The artifact contains only a single markdown skill file with no executable scripts, dependencies, or install-time code.
Credentials
It uses a ServiceGraph API key from the user's environment and makes calls to api.servicegraph.co; this is expected for the integration and is disclosed.
Persistence & Privilege
No local persistence, background workers, privilege escalation, or file mutation are present; the API itself stores unlocked firm detail access for a disclosed 30-day TTL.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install find-recruiting-firm
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /find-recruiting-firm 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
Initial release of the find-recruiting-firm skill. - Enables searching, shortlisting, and enriching US recruiting and staffing firms using the ServiceGraph API. - Supports executive search, RPO, contingent/contract/temp staffing, and industry specializations via keyword filters. - Designed for procuring external firms to handle hiring (not in-house recruiter hires, job postings, or job-seeker/candidate help). - Provides sample API usage and DSL filter examples for common recruiting needs. - Details clear prerequisites, usage exclusions, and a cost model for detailed firm unlocks.
元数据
Slug find-recruiting-firm
版本 1.0.0
许可证 MIT-0
累计安装 1
当前安装数 1
历史版本数 1
常见问题

Find Recruiting Firm 是什么?

Use whenever the user wants to find, shortlist, vet, or enrich US recruiting and staffing firms — executive search/retained search, RPO, tech/sales/healthcar... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 30 次。

如何安装 Find Recruiting Firm?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install find-recruiting-firm」即可一键安装,无需额外配置。

Find Recruiting Firm 是免费的吗?

是的,Find Recruiting Firm 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Find Recruiting Firm 支持哪些平台?

Find Recruiting Firm 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Find Recruiting Firm?

由 nostrband(@nostrband)开发并维护,当前版本 v1.0.0。

💬 留言讨论