协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
workorai【开发与工程】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 appl…
独立 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