Job Autopilot — Search Agent
Searches LinkedIn (and optionally company career pages) for roles matching your criteria, applies hard filters, and writes results into a structured tracker file.
Setup
All env vars below are set by setup.sh (from jobautopilot-bundle). If you install standalone, add to ~/.openclaw/users/<you>/config.sh:
CODEBLOCK0
Initialize the tracker if it does not exist yet:
CODEBLOCK1
Read at session start
Every session, before searching, the agent must read in order:
- 1.
$RESUME_DIR — build a candidate profile from the user's resume pool (see below) - INLINECODE4 — check existing entries to avoid duplicates
- INLINECODE5 — pick up context from previous sessions
How to read the resume pool
Scan all files in $RESUME_DIR (.docx, .pdf, .md, .txt). From them, extract and record:
- - Skills — programming languages, tools, frameworks, domain knowledge, certifications
- Titles held — past and current job titles, seniority level
- Industries / asset classes — sectors the user has worked in
- Preferred roles — infer from the most recent or most polished resume; note any target roles the user has written explicitly
- Location / remote preference — extract from contact header or any explicit statement
- Seniority signals — years of experience, scope of responsibility, team size managed
Synthesize these into a short candidate profile (keep it in working memory for this session). Use the profile to:
- - Derive search keywords (e.g. titles, skills, domain terms)
- Set the seniority filter (reject roles that are clearly too junior or too senior)
- Prioritize industries and company types that match past experience
- Skip roles where the user clearly lacks the stated hard requirements
Search behavior
Use the browser tool with profile search. Search LinkedIn Jobs as the primary source. Also search company career pages for target employers when useful.
Keyword combinations to try (mix and match from config):
CODEBLOCK2
Repeat with multiple keyword pairs. Log each search query in $JOB_SEARCH_HANDOFF so future sessions do not repeat the same queries.
Hard filters — reject if ANY applies
- - Location is not
$JOB_SEARCH_LOCATION (or explicitly remote) - Posted more than
$JOB_SEARCH_MAX_AGE_DAYS days ago - Salary listed and below INLINECODE15
- Role is clearly junior (< 3 years required) unless explicitly configured otherwise
- Duplicate of an existing tracker entry (same company + title)
Tracker format
Append one row per kept result to $JOB_SEARCH_TRACKER. Use this format exactly:
CODEBLOCK3
Status values: shortlist | rejected | INLINECODE19
Both kept and rejected results must be recorded. Every kept result must include the exact job URL.
Handoff notes
After each search session, update $JOB_SEARCH_HANDOFF with:
- - Queries run this session
- Date range of listings found
- Any platforms or companies worth revisiting
- Anything unusual encountered
Optional: Find hiring managers (user-initiated only)
This step is only performed when the user explicitly asks (e.g. "find the hiring manager", "who should I contact at X"). It is never run automatically.
When requested, use the browser tool to look up the relevant person via:
- - LinkedIn — search for recruiters or engineering managers at the company
- Company website — check the careers page or team page for contact information
Record any found contacts in the tracker's Notes column.
Scope
This skill covers search, screening, and optional hiring manager outreach. Do not tailor resumes, write cover letters, or submit applications. Hand off shortlist entries to the jobautopilot-tailor skill.
Support
If Job Autopilot saved you time: paypal.me/ZLiu308
Job Autopilot — 搜索代理
在领英(以及可选的招聘官网)上搜索符合你条件的职位,应用硬性筛选条件,并将结果写入结构化的跟踪文件。
设置
以下所有环境变量均由 setup.sh(来自 jobautopilot-bundle)设置。若独立安装,请添加到 ~/.openclaw/users//config.sh:
bash
export JOBSEARCHKEYWORDS=quant risk python c++ developer
export JOBSEARCHLOCATION=New York City
export JOBSEARCHMIN_SALARY=200000 # 可选,用于已知薪资的职位
export JOBSEARCHMAXAGEDAYS=90 # 仅保留 N 天内发布的职位
export JOBSEARCHTRACKER=$HOME/.openclaw/workspace/jobsearch/jobapplication_tracker.md
export JOBSEARCHHANDOFF=$HOME/.openclaw/workspace/jobsearch/SEARCHAGENT_HANDOFF.md
export RESUME_DIR=$HOME/Documents/jobs/ # 简历文件路径
如果跟踪文件尚不存在,请初始化:
bash
mkdir -p ~/.openclaw/workspace/job_search
touch ~/.openclaw/workspace/jobsearch/jobapplication_tracker.md
touch ~/.openclaw/workspace/jobsearch/SEARCHAGENT_HANDOFF.md
会话开始时读取
每次会话开始搜索前,代理必须按顺序读取:
- 1. $RESUMEDIR — 从用户的简历库中构建候选人画像(见下文)
- $JOBSEARCHTRACKER — 检查已有条目以避免重复
- $JOBSEARCH_HANDOFF — 获取之前会话的上下文
如何读取简历库
扫描 $RESUME_DIR 中的所有文件(.docx、.pdf、.md、.txt)。从中提取并记录:
- - 技能 — 编程语言、工具、框架、领域知识、认证
- 曾任职衔 — 过去和当前的职位名称、资历级别
- 行业/资产类别 — 用户曾工作过的领域
- 偏好角色 — 从最新或最完善的简历中推断;注意用户明确写出的目标职位
- 地点/远程偏好 — 从联系信息头部或任何明确声明中提取
- 资历信号 — 工作年限、职责范围、管理团队规模
将这些综合成一份简短的候选人画像(在本会话中保留在工作记忆中)。使用该画像来:
- - 推导搜索关键词(例如职位名称、技能、领域术语)
- 设置资历筛选条件(排除明显过于初级或过于高级的职位)
- 优先选择与过往经验匹配的行业和公司类型
- 跳过用户明显不满足硬性要求的职位
搜索行为
使用浏览器工具并选择 search 配置文件。以领英职位为主要搜索源。必要时也可搜索目标雇主的招聘官网。
尝试的关键词组合(从配置中混合搭配):
<关键词1> <关键词2> <地点>
site:linkedin.com/jobs <关键词> <地点>
使用多组关键词重复搜索。在 $JOBSEARCHHANDOFF 中记录每次搜索查询,以便未来会话不重复相同的查询。
硬性筛选条件 — 满足任意一条即拒绝
- - 地点不是 $JOBSEARCHLOCATION(或明确标注为远程)
- 发布时间超过 $JOBSEARCHMAXAGEDAYS 天
- 薪资已列出且低于 $JOBSEARCHMIN_SALARY
- 职位明显为初级(要求 < 3 年经验),除非另有明确配置
- 与跟踪文件中已有条目重复(相同公司 + 职位)
跟踪文件格式
每保留一个结果,在 $JOBSEARCHTRACKER 中追加一行。请严格使用此格式:
markdown
| 公司 | 职位 | 地点 | 链接 | 发布日期 | 薪资 | 状态 | 备注 |
|---|
| Acme Corp | 量化开发 | 纽约 | https://... | 2026-03-15 | 25万美元底薪 | 候选 | 要求3年经验,Python+C++ |
| 被拒公司 |
初级分析师 | 纽约 | https://... | 2026-01-01 | 未知 | 已拒绝 | 过于初级 |
状态值:候选 | 已拒绝 | 错误
保留和拒绝的结果都必须记录。每个保留的结果必须包含准确的职位链接。
交接记录
每次搜索会话后,更新 $JOBSEARCHHANDOFF,包含:
- - 本次会话运行的查询
- 找到的职位发布日期范围
- 任何值得再次访问的平台或公司
- 遇到的任何异常情况
可选:寻找招聘经理(仅限用户发起)
此步骤仅在用户明确要求时执行(例如“找到招聘经理”、“我应该联系X公司的谁”)。绝不会自动运行。
当被要求时,使用浏览器工具通过以下方式查找相关人员:
- - 领英 — 搜索该公司的招聘人员或工程经理
- 公司官网 — 查看招聘页面或团队页面以获取联系信息
将找到的任何联系人记录在跟踪文件的备注列中。
范围
此技能涵盖搜索、筛选以及可选的招聘经理联系。不要定制简历、撰写求职信或提交申请。将 候选 条目移交给 jobautopilot-tailor 技能。
支持
如果 Job Autopilot 为你节省了时间:paypal.me/ZLiu308