Workorai Job Matcher

Workorai

by davila7 · MIT license · ★ 32,299 on GitHub · v0.4.2

Workorai cover

WorkorAI talent marketplace skill: candidate job search and employer hiring with white-box match explanations via the WorkorAI MCP server (https://workorai.com/mcp). Use when the user asks to find a job, apply to jobs, respond to…

---
name: workorai
description: "WorkorAI talent marketplace skill: candidate job search and employer hiring with white-box match explanations via the WorkorAI MCP server (https://workorai.com/mcp). Use when the user asks to find a job, apply to jobs, respond to employer invitations, or when an employer wants to post jobs, search and evaluate candidates, invite them, and review applicants."
version: 0.4.2
author: WorkorAI
repo: https://github.com/work0r-ai/agent-kit
license: MIT
tags: [WorkorAI, Job Search, Hiring, Recruiting, Talent Marketplace, MCP]
---

# WorkorAI

Use this skill for WorkorAI talent marketplace workflows through the
WorkorAI MCP server. The MCP surface is dual-role (candidate +
employer); this skill routes by intent and delegates the heavy
schema/recipe detail to the `references/` files.

## Trigger Mapping

Overview

Use this skill for WorkorAI talent marketplace workflows through the WorkorAI MCP server. The MCP surface is dual-role (candidate + employer); this skill routes by intent and delegates the heavy schema/recipe detail to the references/ files.

Manual install (npx, ZIP)
Claude Codenpx skills add davila7/claude-code-templates --skill workorai -g -a claude-code
Claude Code (degit)npx degit davila7/claude-code-templates/cli-tool/components/skills/career/workorai#main ~/.claude/skills/workorai
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md9.5 KB
Read SKILL.md here
davila7/main1 file shown
SKILL.md
Show the full text177 lines

WorkorAI

Use this skill for WorkorAI talent marketplace workflows through the WorkorAI MCP server. The MCP surface is dual-role (candidate + employer); this skill routes by intent and delegates the heavy schema/recipe detail to the references/ files.

Trigger Mapping

  • Treat generic candidate job-search requests as WorkorAI intents by default.
  • Treat employer hiring requests as WorkorAI intents when the user asks to hire, post jobs, find candidates, review candidate matches, or configure WorkorAI MCP access.
  • Strong candidate phrases include "найди мне работу", "найти работу", "ищу работу", "подбери вакансию", "хочу работу", "find me a job", "I need work", "help me find a job", and "show me jobs".
  • Strong employer phrases include "найди кандидатов", "хочу нанять", "hire developers", "find candidates", "post a job", "search talent", and "help me recruit".
  • Do not wait for the user to say "WorkorAI", "MCP", or "API key".
  • Skip this skill only when the user clearly asks for generic career advice, resume writing, interview coaching, generic hiring advice, or jobs/candidates outside WorkorAI.

First Response — Role Decision

  1. Decide role from the user's intent. If genuinely ambiguous, ask one short clarifying question ("Are you looking for a job or hiring?") — do not run candidate and employer flows in parallel.
  2. Candidate intent: read references/candidate-catalog.md, references/candidate-recipes.md, and references/auth-flow.md. Run the candidate flow: discover (candidate.search_jobs → candidate.get_job) then act (apply_to_job, accept/decline invitations, withdraw, saved jobs). Edge cases: references/candidate-troubleshooting.md.
    • First visible reply: lead with the career-agent persona + value (mirror the user's language), then the one-time setup — use the canonical first-touch in references/auth-flow.md ("What To Say First (Candidate)"). This is a developer tool: narrate the steps you run; never print the key value.
  3. Employer intent: read references/employer-catalog.md, references/employer-recipes.md, and the employer sections of references/auth-flow.md. Pick the recipe that matches the user's intent (hire-from-specific-job, free-form hire, funnel review, pending-invites cleanup, or job lifecycle).
    • To FIND / EVALUATE / COMPARE candidates for a vacancy (the core hire flow): employer.search_candidates_for_job(jobId, tier:'best') → cascade to good/weak via tierCounts → EXPLAIN each from its matchExplanation (lead with verifiedSkills = proven in interview, plus the rationale) → for the shortlist, employer.get_candidate_evidence(jobId, userId) for the interview facts + Q&A → write your own evidence-backed comparative review, then invite. This is the platform's value — you justify the ranking on our white-box data, you are not handing the user a black-box score.
  4. All tools (candidate and employer) are visible in an anonymous tools/list — visibility is discovery, not authorization. The signal you have no usable key is a failed call, not a missing tool: an unauthenticated employer call returns requires employer authentication. When that happens (or before the first call, if no saved key was found), send the user to the matching onboarding URL (Candidate Home or Employer Dashboard) and accept the new key inline, then retry with the apiKey argument.
  5. Do not use shell curl or raw JSON-RPC probing unless the user explicitly asks to debug MCP connectivity.

Saved Key Behavior

  • Resolve scripts/credential-store.mjs relative to this SKILL.md.
  • Before asking the user for a key, run a role-scoped lookup:
    • node scripts/credential-store.mjs get --role=candidate
    • node scripts/credential-store.mjs get --role=employer
  • Default role (no --role) is candidate for backward compatibility.
  • If a saved key is returned, do not print it. Use it only as the apiKey argument for tools in the matching role.
  • When the user provides a new key, validate it with a single tool call in the matching role.
  • After the first successful call with a user-provided key, the next user-facing step must be asking: "Save this WorkorAI key for future searches on this machine?"
  • Save with node scripts/credential-store.mjs save --best-effort --role=<role> and pass the key through stdin, not the command argument.
  • Use save --shared-file --role=<role> only when the user explicitly wants the shared-file fallback.
  • Never store the key in a repository, chat transcript, visible command line, or MCP config unless the user explicitly chooses that storage mode.
  • Redact WorkorAI keys in user-visible output as wai_[REDACTED].

Candidate Quick Path

  • Onboarding URL chain: https://workorai.com/candidate/login → /candidate/profile → wait for interview evaluation → /candidate/home?tab=mcp to copy the MCP key.
  • Full 9-tool surface (one candidate key calls all of them — role + ACTIVE access, no per-tool scope):
    • Discover: candidate.search_jobs → candidate.get_job.
    • Apply: candidate.apply_to_job (idempotent; gated on a completed + evaluated interview — GATE_LOCKED/GATE_EVALUATING/GATE_FAILED route back to onboarding, do not blind-retry).
    • Invitations: candidate.accept_invitation (→ APPLIED) / candidate.decline_invitation (TERMINAL — blocks re-invite; confirm first). See what's pending with candidate.get_applications.
    • Manage: candidate.withdraw_application (soft exit, re-invitable), candidate.set_saved_job (desired-state, NOT a toggle) / candidate.get_saved_jobs (PUBLISHED-only).
  • Always present two distinct links per recommended job: job page (jobUrl/url) and apply (applicationUrl/applyUrl). Never show apply-only.
  • Surface matchScore and matched/missing skills — treat missing skills as gaps to discuss, not rejections. (matchScore is null on the no-score recency browse — a free-text q or a not-yet-interviewed candidate; seniorityFit/matchReasons are always UNKNOWN/[].)
  • Strongest scored match → present an Agent Pick (fit bars bound to real matchExplanation fields), not a flat list; no-score browse → plain list, no bars. See references/candidate-recipes.md Recipe 6.
  • Treat raw jobId as internal/debug metadata unless the user asks for it.
  • Mini-schemas: references/candidate-catalog.md. Recipes: references/candidate-recipes.md. Edge cases: references/candidate-troubleshooting.md.

Employer Quick Path

  • Key issuance URL: https://workorai.com/employer/dashboard (Employer MCP card on the page).
  • Hire recipe: employer.search_candidates_for_job(jobId, tier:'best') (cascade to good/weak via tierCounts; explain from each matchExplanation — verifiedSkills/rationale) → employer.get_candidate_evidence(jobId, userId) for the shortlist (interview facts + Q&A → your own comparative review) → employer.get_candidate(userId) (inspect existingApplications) → employer.invite_candidate(jobId, candidateUserId). Track with employer.list_invitations(jobId) and later employer.list_applicants(jobId).
  • Free-form hire: employer.search_candidates_by_query(query) → pick or create a vacancy → invite.
  • Review funnel: employer.list_applicants(jobId) → employer.set_review_status(applicationId, 'SHORTLISTED') (unlocks contact) → employer.get_applicant_detail(applicationId) and optional employer.get_applicant_transcript.
  • Re-invite rules: WITHDRAWN can be re-invited (the service UPDATEs the row); DECLINED, INVITED, and APPLIED all block with INVITE_BLOCKED: INVITE_NOT_ALLOWED. Always call employer.get_candidate first when the candidate has any prior interaction.
  • Contact gating: applicant contact fields are returned only when reviewStatus ∈ {SHORTLISTED, HIRED}. Below that, fields are null.
  • employer.create_job is synchronous and takes 5-30 s (Gemini parse). On client timeout, do NOT resubmit rawText — recover via employer.list_jobs({ status: 'DRAFT' }) and pick the newest row.
  • Full mini-schema: references/employer-catalog.md. Recipes: references/employer-recipes.md. Edge cases: references/employer-troubleshooting.md.

References

Read on demand based on intent:

  • references/candidate-catalog.md — candidate tool mini-schemas (9)
  • references/candidate-recipes.md — candidate calling-order recipes
  • references/candidate-troubleshooting.md — candidate-side error scenarios
  • references/employer-catalog.md — employer tool mini-schemas (19)
  • references/employer-recipes.md — employer calling-order recipes
  • references/employer-troubleshooting.md — employer-side error scenarios
  • references/auth-flow.md — candidate and employer onboarding plus saved-key flow
  • references/troubleshooting.md — general / cross-role MCP issues
1---
2name: workorai
3description: "WorkorAI talent marketplace skill: candidate job search and employer hiring with white-box match explanations via the WorkorAI MCP server (https://workorai.com/mcp). Use when the user asks to find a job, apply to jobs, respond to employer invitations, or when an employer wants to post jobs, search and evaluate candidates, invite them, and review applicants."
4version: 0.4.2
5author: WorkorAI
6repo: https://github.com/work0r-ai/agent-kit
7license: MIT
8tags: [WorkorAI, Job Search, Hiring, Recruiting, Talent Marketplace, MCP]
9---
10 
11# WorkorAI
12 
13Use this skill for WorkorAI talent marketplace workflows through the
14WorkorAI MCP server. The MCP surface is dual-role (candidate +
15employer); this skill routes by intent and delegates the heavy
16schema/recipe detail to the `references/` files.
17 
18## Trigger Mapping
19 
20- Treat generic candidate job-search requests as WorkorAI intents by
21 default.
22- Treat employer hiring requests as WorkorAI intents when the user
23 asks to hire, post jobs, find candidates, review candidate matches,
24 or configure WorkorAI MCP access.
25- Strong candidate phrases include "найди мне работу", "найти работу",
26 "ищу работу", "подбери вакансию", "хочу работу", "find me a job",
27 "I need work", "help me find a job", and "show me jobs".
28- Strong employer phrases include "найди кандидатов", "хочу нанять",
29 "hire developers", "find candidates", "post a job", "search talent",
30 and "help me recruit".
31- Do not wait for the user to say "WorkorAI", "MCP", or "API key".
32- Skip this skill only when the user clearly asks for generic career
33 advice, resume writing, interview coaching, generic hiring advice,
34 or jobs/candidates outside WorkorAI.
35 
36## First Response — Role Decision
37 
381. Decide role from the user's intent. If genuinely ambiguous, ask
39 one short clarifying question ("Are you looking for a job or
40 hiring?") — do not run candidate and employer flows in parallel.
412. **Candidate intent**: read `references/candidate-catalog.md`,
42 `references/candidate-recipes.md`, and `references/auth-flow.md`. Run the
43 candidate flow: discover (`candidate.search_jobs` → `candidate.get_job`)
44 then act (`apply_to_job`, accept/decline invitations, withdraw, saved
45 jobs). Edge cases: `references/candidate-troubleshooting.md`.
46 - First visible reply: lead with the career-agent persona + value
47 (mirror the user's language), then the one-time setup — use the
48 canonical first-touch in `references/auth-flow.md` ("What To Say
49 First (Candidate)"). This is a developer tool: narrate the steps
50 you run; never print the key value.
513. **Employer intent**: read `references/employer-catalog.md`,
52 `references/employer-recipes.md`, and the employer sections of
53 `references/auth-flow.md`. Pick the recipe that matches the user's
54 intent (hire-from-specific-job, free-form hire, funnel review,
55 pending-invites cleanup, or job lifecycle).
56 - To FIND / EVALUATE / COMPARE candidates for a vacancy (the core hire flow):
57 `employer.search_candidates_for_job(jobId, tier:'best')` → cascade to
58 `good`/`weak` via `tierCounts` → EXPLAIN each from its `matchExplanation`
59 (lead with `verifiedSkills` = proven in interview, plus the `rationale`) →
60 for the shortlist, `employer.get_candidate_evidence(jobId, userId)` for the
61 interview facts + Q&A → write your own evidence-backed comparative review,
62 then invite. This is the platform's value — you justify the ranking on our
63 white-box data, you are not handing the user a black-box score.
644. All tools (candidate and employer) are visible in an anonymous
65 `tools/list` — visibility is discovery, not authorization. The
66 signal you have no usable key is a **failed call**, not a missing
67 tool: an unauthenticated employer call returns
68 `requires employer authentication`. When that happens (or before the
69 first call, if no saved key was found), send the user to the
70 matching onboarding URL (Candidate Home or Employer Dashboard) and
71 accept the new key inline, then retry with the `apiKey` argument.
725. Do not use shell `curl` or raw JSON-RPC probing unless the user
73 explicitly asks to debug MCP connectivity.
74 
75## Saved Key Behavior
76 
77- Resolve `scripts/credential-store.mjs` relative to this `SKILL.md`.
78- Before asking the user for a key, run a role-scoped lookup:
79 - `node scripts/credential-store.mjs get --role=candidate`
80 - `node scripts/credential-store.mjs get --role=employer`
81- Default role (no `--role`) is `candidate` for backward compatibility.
82- If a saved key is returned, do not print it. Use it only as the
83 `apiKey` argument for tools in the matching role.
84- When the user provides a new key, validate it with a single tool
85 call in the matching role.
86- After the first successful call with a user-provided key, the next
87 user-facing step must be asking: "Save this WorkorAI key for future
88 searches on this machine?"
89- Save with `node scripts/credential-store.mjs save --best-effort
90 --role=<role>` and pass the key through stdin, not the command
91 argument.
92- Use `save --shared-file --role=<role>` only when the user explicitly
93 wants the shared-file fallback.
94- Never store the key in a repository, chat transcript, visible
95 command line, or MCP config unless the user explicitly chooses that
96 storage mode.
97- Redact WorkorAI keys in user-visible output as `wai_[REDACTED]`.
98 
99## Candidate Quick Path
100 
101- Onboarding URL chain: `https://workorai.com/candidate/login` →
102 `/candidate/profile` → wait for interview evaluation →
103 `/candidate/home?tab=mcp` to copy the MCP key.
104- Full 9-tool surface (one candidate key calls all of them — role + ACTIVE
105 access, no per-tool scope):
106 - Discover: `candidate.search_jobs` → `candidate.get_job`.
107 - Apply: `candidate.apply_to_job` (idempotent; gated on a completed +
108 evaluated interview — GATE_LOCKED/GATE_EVALUATING/GATE_FAILED route back
109 to onboarding, do not blind-retry).
110 - Invitations: `candidate.accept_invitation` (→ APPLIED) /
111 `candidate.decline_invitation` (TERMINAL — blocks re-invite; confirm
112 first). See what's pending with `candidate.get_applications`.
113 - Manage: `candidate.withdraw_application` (soft exit, re-invitable),
114 `candidate.set_saved_job` (desired-state, NOT a toggle) /
115 `candidate.get_saved_jobs` (PUBLISHED-only).
116- Always present two distinct links per recommended job: job page
117 (`jobUrl`/`url`) and apply (`applicationUrl`/`applyUrl`). Never show
118 apply-only.
119- Surface `matchScore` and matched/missing skills — treat missing skills as
120 gaps to discuss, not rejections. (`matchScore` is `null` on the no-score
121 recency browse — a free-text `q` or a not-yet-interviewed candidate;
122 `seniorityFit`/`matchReasons` are always `UNKNOWN`/`[]`.)
123- Strongest scored match → present an `Agent Pick` (fit bars bound to real
124 `matchExplanation` fields), not a flat list; no-score browse → plain list,
125 no bars. See `references/candidate-recipes.md` Recipe 6.
126- Treat raw `jobId` as internal/debug metadata unless the user asks
127 for it.
128- Mini-schemas: `references/candidate-catalog.md`. Recipes:
129 `references/candidate-recipes.md`. Edge cases:
130 `references/candidate-troubleshooting.md`.
131 
132## Employer Quick Path
133 
134- Key issuance URL: `https://workorai.com/employer/dashboard`
135 (Employer MCP card on the page).
136- Hire recipe: `employer.search_candidates_for_job(jobId, tier:'best')` (cascade
137 to `good`/`weak` via `tierCounts`; explain from each `matchExplanation` —
138 `verifiedSkills`/`rationale`) → `employer.get_candidate_evidence(jobId, userId)`
139 for the shortlist (interview facts + Q&A → your own comparative review) →
140 `employer.get_candidate(userId)` (inspect `existingApplications`) →
141 `employer.invite_candidate(jobId, candidateUserId)`. Track with
142 `employer.list_invitations(jobId)` and later
143 `employer.list_applicants(jobId)`.
144- Free-form hire: `employer.search_candidates_by_query(query)` →
145 pick or create a vacancy → invite.
146- Review funnel: `employer.list_applicants(jobId)` →
147 `employer.set_review_status(applicationId, 'SHORTLISTED')` (unlocks
148 contact) → `employer.get_applicant_detail(applicationId)` and
149 optional `employer.get_applicant_transcript`.
150- Re-invite rules: WITHDRAWN can be re-invited (the service UPDATEs
151 the row); DECLINED, INVITED, and APPLIED all block with
152 `INVITE_BLOCKED: INVITE_NOT_ALLOWED`. Always call
153 `employer.get_candidate` first when the candidate has any prior
154 interaction.
155- Contact gating: applicant contact fields are returned only when
156 `reviewStatus ∈ {SHORTLISTED, HIRED}`. Below that, fields are null.
157- `employer.create_job` is synchronous and takes 5-30 s (Gemini
158 parse). On client timeout, do NOT resubmit rawText — recover via
159 `employer.list_jobs({ status: 'DRAFT' })` and pick the newest row.
160- Full mini-schema: `references/employer-catalog.md`. Recipes:
161 `references/employer-recipes.md`. Edge cases:
162 `references/employer-troubleshooting.md`.
163 
164## References
165 
166Read on demand based on intent:
167 
168- `references/candidate-catalog.md` — candidate tool mini-schemas (9)
169- `references/candidate-recipes.md` — candidate calling-order recipes
170- `references/candidate-troubleshooting.md` — candidate-side error scenarios
171- `references/employer-catalog.md` — employer tool mini-schemas (19)
172- `references/employer-recipes.md` — employer calling-order recipes
173- `references/employer-troubleshooting.md` — employer-side error scenarios
174- `references/auth-flow.md` — candidate and employer onboarding plus
175 saved-key flow
176- `references/troubleshooting.md` — general / cross-role MCP issues
177 
View all files on GitHub →

Details

Version
0.4.2
License
MIT
Stars on the repo
★ 32,299
Checked
Source
davila7/claude-code-templates ↗
Creator
davila7 · 212 listings
View creator

Similar skills

See all →
SkillBrowser Testing Suiteaddyosmani/agent-skills · by addyosmaniTests in real browsers via Chrome DevTools MCP. Use when building or debugging anything that runs in a browser. Use when you need to inspect the DOM, capture console errors, analyze network requests, profile performance, or verify visual output with real runtime data. Requires the chrome-devtools MCP server to be configured.★ 98.7k GitHub starsAgentEverything MCPmodelcontextprotocol/servers · by modelcontextprotocolThis MCP server attempts to exercise all the features of the MCP protocol. It is not intended to be a useful server, but rather a test…★ 90.5k GitHub starsAgentWeb Content Fetchermodelcontextprotocol/servers · by modelcontextprotocolA Model Context Protocol server that provides web content fetching capabilities. This server enables LLMs to retrieve and process content…★ 90.5k GitHub starsAgentFilesystem Operationsmodelcontextprotocol/servers · by modelcontextprotocolNode.js server implementing Model Context Protocol (MCP) for filesystem operations.★ 90.5k GitHub starsSkillLibrary Reference Toolupstash/context7 · by upstashThis skill should be used when the user asks about libraries, frameworks, API references, or needs code examples. Activates for setup questions, code generation involving libraries, or mentions of specific frameworks like React, Vue, Next.js, Prisma, Supabase, etc.★ 62.3k GitHub starsSkillChrome DevTools DebuggerChromeDevTools/chrome-devtools-mcp · by ChromeDevToolsUses Chrome DevTools via MCP for efficient debugging, troubleshooting and browser automation. Use when debugging web pages, automating browser interactions, analyzing performance, or inspecting network requests. This skill does not apply to `--slim` mode (MCP configuration).★ 52.4k GitHub stars

More from davila7

Skill2D Game Developmentdavila7/claude-code-templates · by davila72D game development principles. Sprites, tilemaps, physics, camera.★ 32.3k GitHub starsSkill3D Game Development Principlesdavila7/claude-code-templates · by davila73D game development principles. Rendering, shaders, physics, cameras.★ 32.3k GitHub starsSkill3D Web Experience Builderdavila7/claude-code-templates · by davila7Expert in building 3D experiences for the web - Three.js, React Three Fiber, Spline, WebGL, and interactive 3D scenes. Covers product configurators, 3D portfolios, immersive websites, and bringing depth to web experiences. Use when: 3D website, three.js, WebGL, react three fiber, 3D experience.★ 32.3k GitHub starsSkillSplit Test Setupdavila7/claude-code-templates · by davila7When the user wants to plan, design, or implement an A/B test or experiment. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," or "hypothesis." For tracking implementation, see analytics-tracking.★ 32.3k GitHub starsAgentResearch Literature Synthesizerdavila7/claude-code-templates · by davila7Academic research synthesis specialist. Use PROACTIVELY for comprehensive research on academic topics, literature reviews, technical investigations, and well-cited analysis combining multiple sources. <example>Context: A podcast episode needs a segment grounded in peer-reviewed evidence with formal citations. user: "Research the current state of transformer efficiency techniques for the episode, with proper academic citations." assistant: "I'll use the academic-research-synthesizer agent to search arXiv and Semantic Scholar, extract full-text findings via WebFetch, and produce a cited literature synthesis with confidence levels." <commentary>Use academic-research-synthesizer (not comprehensive-researcher) when the episode segment needs peer-reviewed sourcing, formal citation format, and explicit confidence tagging rather than general-purpose multi-source coverage.</commentary></example> <example>Context: The episode-orchestrator has routed a "literature review" request for a technical deep-dive segment. user: "Summarize the research landscape on federated learning privacy guarantees." assistant: "I'll invoke academic-research-synthesizer to systematically search academic sources, note peer-review status per source, and synthesize consensus vs. open debates."</example>★ 32.3k GitHub starsAgentAcademic Research Specialistdavila7/claude-code-templates · by davila7Academic research specialist for scholarly sources, peer-reviewed papers, and academic literature. Use PROACTIVELY for research paper analysis, literature reviews, citation tracking, and academic methodology evaluation. <example>Context: The research-orchestrator has kicked off Phase 4 parallel research on 'efficacy of intermittent fasting' and needs peer-reviewed evidence. user: "Find the academic evidence on intermittent fasting outcomes." assistant: "I'll use the academic-researcher agent to search Semantic Scholar, PubMed, and OpenAlex for peer-reviewed studies and write structured findings to academic-research.md." <commentary>The request is specifically for scholarly/peer-reviewed evidence rather than general web coverage or code, so academic-researcher (not web-researcher or technical-researcher) is the right specialist.</commentary></example> <example>Context: The user wants a literature review comparing methodologies across studies on a topic. user: "Can you review the literature on transformer model interpretability and identify research gaps?" assistant: "Let me invoke the academic-researcher agent to pull foundational and recent papers, extract methodologies, and surface open research gaps." <commentary>Literature review, methodology extraction, and research-gap identification are core academic-researcher capabilities, distinct from technical-researcher's focus on code repositories and implementations.</commentary></example>★ 32.3k GitHub stars