Install
openclaw skills install @jerronl/jobautopilot-searchReads your resume pool to build a candidate profile, then searches LinkedIn, Indeed, Glassdoor, ZipRecruiter, Google Jobs, and company career pages for matching roles. Filters by role, location, salary, and recency. Writes results to a structured tracker. Requires a browser tool (profile: search) and local config via environment variables. Part of the Job Autopilot pipeline.
openclaw skills install @jerronl/jobautopilot-searchSearches LinkedIn (and optionally company career pages) for roles matching your criteria, applies hard filters, and writes results into a structured tracker file.
All env vars below are set by setup.sh (from jobautopilot-bundle). If you install standalone, add to ~/.openclaw/users/<you>/config.sh:
export JOB_SEARCH_KEYWORDS="quant risk python c++ developer"
export JOB_SEARCH_LOCATION="New York City"
export JOB_SEARCH_MIN_SALARY=200000 # optional, for known listings
export JOB_SEARCH_MAX_AGE_DAYS=90 # only keep listings posted within N days
export JOB_SEARCH_TRACKER="$HOME/.openclaw/workspace/job_search/job_application_tracker.md"
export JOB_SEARCH_HANDOFF="$HOME/.openclaw/workspace/job_search/SEARCH_AGENT_HANDOFF.md"
export RESUME_DIR="$HOME/Documents/jobs/" # path to your resume files
Initialize the tracker if it does not exist yet:
mkdir -p ~/.openclaw/workspace/job_search
touch ~/.openclaw/workspace/job_search/job_application_tracker.md
touch ~/.openclaw/workspace/job_search/SEARCH_AGENT_HANDOFF.md
Every session, before searching, the agent must read in order:
$RESUME_DIR — build a candidate profile from the user's resume pool (see below)$JOB_SEARCH_TRACKER — check existing entries to avoid duplicates$JOB_SEARCH_HANDOFF — pick up context from previous sessionsScan all files in $RESUME_DIR (.docx, .pdf, .md, .txt). From them, extract and record:
Synthesize these into a short candidate profile (keep it in working memory for this session). Use the profile to:
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):
<keyword1> <keyword2> <location>
site:linkedin.com/jobs <keyword> <location>
Repeat with multiple keyword pairs. Log each search query in $JOB_SEARCH_HANDOFF so future sessions do not repeat the same queries.
$JOB_SEARCH_LOCATION (or explicitly remote)$JOB_SEARCH_MAX_AGE_DAYS days ago$JOB_SEARCH_MIN_SALARYAppend one row per kept result to $JOB_SEARCH_TRACKER. Use this format exactly:
| Company | Title | Location | URL | Posted | Salary | Status | Notes |
|---------|-------|----------|-----|--------|--------|--------|-------|
| Acme Corp | Quant Developer | NYC | https://... | 2026-03-15 | $250k base | shortlist | 3 YOE req, Python+C++ |
| Rejected Co | Junior Analyst | NYC | https://... | 2026-01-01 | unknown | rejected | too junior |
Status values: shortlist | rejected | error
Both kept and rejected results must be recorded. Every kept result must include the exact job URL.
After each search session, update $JOB_SEARCH_HANDOFF with:
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:
Record any found contacts in the tracker's Notes column.
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.
If Job Autopilot saved you time: paypal.me/ZLiu308