Install
openclaw skills install hr-candidate-discovery-screeningUse when discovering and screening China-mainland AI recruitment candidates from accepted conference or journal papers, matching authors to multiple job descriptions, investigating public professional evidence, preparing individually approved outreach, or classifying recruitment email replies.
openclaw skills install hr-candidate-discovery-screeningKeep a human decision-maker in control. Automate collection, evidence organization, semantic assessment and draft preparation, but never automatically approve a candidate, infer missing personal data, or send recruitment mail.
config/jobs.yaml.outreach.mailbox, outreach.company_team_intro and outreach.sender_signature in config/settings.yaml.DEEPSEEK_API_KEY in the runtime environment. The configured model is deepseek-v4-pro, with thinking enabled and medium reasoning effort. Do not publish dotfiles such as .env, .env.example, .gitignore or .gitkeep with this Skill.python scripts/db.py init --database data/recruitment.db
Do not continue if no active complete JD exists or the outreach fields are empty.
config/sources.yaml, then run this once per requested source:python scripts/collect_papers.py --source cvpr --start-date 2026-01-01 --end-date 2026-06-11
python scripts/enrich_keywords.py only to fill missing source keywords. Generated keywords remain separately labeled.python scripts/match_jobs.py. Only 高度匹配 and 可能匹配 proceed automatically; 信息不足 goes to human review.python scripts/investigate_authors.py queue. Investigate only first, explicitly co-first and explicitly corresponding authors.investigate_authors.py add-evidence; do not infer email addresses or protected attributes.待人工核验.approve_candidate, then move the candidate to 已批准.prepare_outreach for each approved candidate, then run:python scripts/prepare_outreach.py initial --candidate-id <candidate-id>
lark-mail to create the returned message as a draft. Record the returned draft_id with prepare_outreach.py record-draft.authorize-send, send the existing Lark draft, query delivery status, and run record-sent.prepare_outreach.py due-followups --as-of YYYY-MM-DD. Day-7 and day-21 messages are separate drafts and approvals. Never generate more than two proactive follow-ups.lark-mail +thread to read the complete known recruitment thread. Save the normalized JSON to a temporary file and run process_replies.py --thread-file <file>.Stop and return to the user before:
An approval in conversation is not enough for a send action until the matching approval record is written to SQLite. Never reuse an approval for another candidate, action or message.
Use this command only after the user has approved the exact preview:
python scripts/db.py approve --database data/recruitment.db --action <action> --target-type <type> --target-id <id> --preview-json '<json-object>' --decided-by <operator>
Valid approval actions are:
| Action | Target |
|---|---|
approve_candidate | candidate |
prepare_outreach | candidate |
send_initial | mail_thread |
send_followup-1 | mail_thread |
send_followup-2 | mail_thread |
send_reply | mail_thread |
close_candidate | candidate |
stop_processing | candidate |
delete_candidate_data | candidate |
高度匹配 and 可能匹配 to author investigation.信息不足 to human review.不匹配 for audit without investigating its authors.Read references/data-sources.md before collecting, and references/screening-policy.md before investigating or screening.
Read the lark-shared and lark-mail Skills before mailbox operations. On Windows use lark-cli.cmd.
outreach.mailbox.lark-cli.cmd mail +send -h, +reply -h, +thread -h or the relevant command help before first use; do not guess parameters.user_mailbox.drafts send; do not recreate a separately worded message.退订 as a global terminal contact restriction.Read references/outreach-guidelines.md and references/reply-classification.md before preparing or processing mail.
The default database is data/recruitment.db; the scripts create its parent directory at runtime. API keys come from runtime environment variables; never store them in the Skill package, SQLite, logs or prompts. Before uploading to SkillHub, exclude all dotfiles, SQLite files, __pycache__, .pytest_cache and *.pyc files.
Use python scripts/db.py status --database data/recruitment.db to summarize current counts. Do not report a send, match or state transition as completed unless the script or mailbox tool returned a real successful result.
Run python scripts/manage_candidates.py retention-review --as-of YYYY-MM-DD to list records older than the configured 180-day retention period. This command never deletes data. stop-processing and delete-data require their own exact approvals; deletion removes personal evidence and mail content while preserving only a suppressed anonymous tombstone and minimal audit record.