WorkorAI talent marketplace skill: candidate job search and employer hiring with white-box match explanations via the WorkorAI MCP server (https://workorai.com/
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-workorai-56d56ca83d6b ,按照其中的说明把「workorai」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
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.
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.
references/auth-flow.md ("What To Say
First (Candidate)"). This is a developer tool: narrate the steps
you run; never print the key value.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).
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.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.curl or raw JSON-RPC probing unless the user
explicitly asks to debug MCP connectivity.scripts/credential-store.mjs relative to this SKILL.md.node scripts/credential-store.mjs get --role=candidatenode scripts/credential-store.mjs get --role=employer--role) is candidate for backward compatibility.apiKey argument for tools in the matching role.node scripts/credential-store.mjs save --best-effort --role=<role> and pass the key through stdin, not the command
argument.save --shared-file --role=<role> only when the user explicitly
wants the shared-file fallback.wai_[REDACTED].https://workorai.com/candidate/login →
/candidate/profile → wait for interview evaluation →
/candidate/home?tab=mcp to copy the MCP key.candidate.search_jobs → candidate.get_job.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).candidate.accept_invitation (→ APPLIED) /
candidate.decline_invitation (TERMINAL — blocks re-invite; confirm
first). See what's pending with candidate.get_applications.candidate.withdraw_application (soft exit, re-invitable),
candidate.set_saved_job (desired-state, NOT a toggle) /
candidate.get_saved_jobs (PUBLISHED-only).jobUrl/url) and apply (applicationUrl/applyUrl). Never show
apply-only.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/[].)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.jobId as internal/debug metadata unless the user asks
for it.references/candidate-catalog.md. Recipes:
references/candidate-recipes.md. Edge cases:
references/candidate-troubleshooting.md.https://workorai.com/employer/dashboard
(Employer MCP card on the page).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).employer.search_candidates_by_query(query) →
pick or create a vacancy → invite.employer.list_applicants(jobId) →
employer.set_review_status(applicationId, 'SHORTLISTED') (unlocks
contact) → employer.get_applicant_detail(applicationId) and
optional employer.get_applicant_transcript.INVITE_BLOCKED: INVITE_NOT_ALLOWED. Always call
employer.get_candidate first when the candidate has any prior
interaction.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.references/employer-catalog.md. Recipes:
references/employer-recipes.md. Edge cases:
references/employer-troubleshooting.md.Read on demand based on intent:
references/candidate-catalog.md — candidate tool mini-schemas (9)references/candidate-recipes.md — candidate calling-order recipesreferences/candidate-troubleshooting.md — candidate-side error scenariosreferences/employer-catalog.md — employer tool mini-schemas (19)references/employer-recipes.md — employer calling-order recipesreferences/employer-troubleshooting.md — employer-side error scenariosreferences/auth-flow.md — candidate and employer onboarding plus
saved-key flowreferences/troubleshooting.md — general / cross-role MCP issues