with one click
job-search-custom
// Persistent job-search pipeline with SQLite deduplication, low-volume maintenance search, resume scoring, application material prep, ASI06/ASI01/ASI02 detector checks, and ClawGuard telemetry.
// Persistent job-search pipeline with SQLite deduplication, low-volume maintenance search, resume scoring, application material prep, ASI06/ASI01/ASI02 detector checks, and ClawGuard telemetry.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | job-search-custom |
| description | Persistent job-search pipeline with SQLite deduplication, low-volume maintenance search, resume scoring, application material prep, ASI06/ASI01/ASI02 detector checks, and ClawGuard telemetry. |
| metadata | {"openclaw":{"requires":{"bins":["python3"]},"optionalEnv":["OXYLABS_AISTUDIO_API_KEY","BRAVE_SEARCH_API_KEY","USAJOBS_AUTH_KEY","USAJOBS_USER_AGENT"]}} |
Persistent, low-volume job-search pipeline used as the primary OpenClaw telemetry source for ClawGuard Phase 1.
The skill searches selected job sources, deduplicates results in SQLite, scores jobs against local profile data, prepares application materials on demand, and records ASI06, ASI01, and ASI02 findings. Human approval is required for any submission.
Daily 9:00 AM PT LinkedIn -> DB insert and dedup
Daily 9:10 AM PT CyberSecJobs -> DB insert and dedup
Daily 9:20 AM PT USAJobs API -> DB insert and dedup
Daily 9:30 AM PT Compile digest, no auto-prepare, no JD enrichment
-> ClawGuard post-compile telemetry summary
Maintenance mode intentionally keeps volume low because the user is already in active interview and offer loops.
USAJOBS_AUTH_KEY and USAJOBS_USER_AGENT are configured.CLAWGUARD_DISABLE_OXYLABS=1.400 Bad Request issue is not blocking the active maintenance path.Initialize database:
python3 job_search_secure.py init-db
Search jobs:
# Single site
python3 job_search_secure.py search --query "SOC Analyst" --location "Seattle, WA" --sites linkedin
# All configured sites with a budget cap
python3 job_search_secure.py search --query "Security Engineer" --location "Seattle, WA" --sites all --budget 30
# Force Brave or USAJobs provider during verification
python3 job_search_secure.py search --query "SOC Analyst" --location "Remote" --sites linkedin --provider brave
python3 job_search_secure.py search --query "Security Analyst" --location "Seattle, WA" --sites usajobs --provider usajobs
Run digest:
# Single-site maintenance run, normally called by cron
python3 job_search_secure.py digest --site linkedin --budget 2 --max-results-per-site 5 --no-notify
# Compile current-day results without preparing applications
python3 job_search_secure.py digest --compile --format telegram --no-prepare
# Manual validation compile with JSON output and no notification
python3 job_search_secure.py digest --compile --no-prepare --no-notify --format json
Score and browse:
python3 job_search_secure.py score --status found --min-score 0.40
python3 job_search_secure.py browse --summary
python3 job_search_secure.py browse --since 24h
python3 job_search_secure.py browse --job-id abc123
Prepare, track, and submit:
python3 job_search_secure.py prepare --job-id abc123def456
python3 job_search_secure.py track --job-id abc123def456 --status applied
python3 job_search_secure.py submit --job-id abc123def456 --confirmation-code A1B2C3D4
Utility:
python3 job_search_secure.py quota
python3 job_search_secure.py sites
python3 job_search_secure.py export --status scored --output scored.json
python3 job_search_secure.py migrate --source /path/to/old/digests/
| Site | Key | Active Maintenance | Primary Maintenance Provider |
|---|---|---|---|
linkedin | Yes | Brave | |
| CyberSecJobs | cybersecjobs | Yes | Brave |
| USAJobs | usajobs | Yes | Native USAJobs API |
| Indeed | indeed | No | Oxylabs when re-enabled |
| Monster | monster | No | Oxylabs when re-enabled |
| Dice | dice | No | Oxylabs when re-enabled |
| InfoSec Jobs | infosecjobs | No | Oxylabs or Brave when re-enabled |
| SimplyHired | simplyhired | No | Oxylabs when re-enabled |
| RemoteHunter | remotehunter | No | Oxylabs when re-enabled |
All persistent runtime data is under /data/clawguard/ inside the container-backed volume:
/data/clawguard/
jobs.db
tailoring_rules.json
applications/{job_id}/
digests/
telemetry/
logs/
Provider and runtime controls:
CLAWGUARD_DATA_DIR=/data/clawguard
BRAVE_SEARCH_API_KEY=<secret>
USAJOBS_AUTH_KEY=<secret>
USAJOBS_USER_AGENT=<registered email>
OXYLABS_AISTUDIO_API_KEY=<secret>
CLAWGUARD_SEARCH_PROVIDER=auto
CLAWGUARD_DISABLE_OXYLABS=1
CLAWGUARD_FALLBACK_ON_EMPTY=0
CLAWGUARD_HTTP_TIMEOUT_SECONDS=20
Maintenance volume controls:
CLAWGUARD_AUTO_PREPARE_THRESHOLD=0.75
CLAWGUARD_ENRICHMENT_DAILY_CAP=0
CLAWGUARD_DIGEST_MAX_RESULTS_PER_SITE=5
CLAWGUARD_DIGEST_TOP_MATCH_LIMIT=10
ASI06 tuning:
CLAWGUARD_SKILL_STUFFING_THRESHOLD=15
CLAWGUARD_SKILL_STUFFING_PENALTY=0.15
Detector-backed rules record findings to job_security_findings:
ASI06_SKILL_STUFFINGASI06_PROMPT_INJECTIONASI06_PII_REQUESTASI06_URL_MISMATCHASI01_EXTERNAL_GOAL_REDIRECTASI02_EGRESS_REDIRECTASI02_NOTIFY_REDIRECTASI02_SHELL_INJECTIONASI02_FILE_PATH_REDIRECTFindings preserve:
job_idagent_session_idrule_idseveritymessageevidencecontextdetected_atPrompt-injection evidence includes pattern, matched_text, and snippet.
The standalone ClawGuard detector module lives at:
detections/asi06_jd_content/detector.py
The OpenClaw runtime imports this module directly. Deploy job_search_secure.py and the detections/ package together.
Materials are generated using local resume/profile data only:
CLAWGUARD_PROFILE_PATH for real profile data outside Git.Use this skill when the user asks to:
Always prefer this skill over generic web search for job-related queries in the OpenClaw target.