先研究目标岗位再下笔的简历与求职文书生成器。
文档
Serbia Job Search
试用Searches LinkedIn, Poslovi Infostud, and HelloWorld.rs for jobs matching your target roles. Scores each listing against your resume PDF (1-10).
它能做什么
Searches LinkedIn, Poslovi Infostud, and HelloWorld.rs for jobs matching your target roles. Scores each listing against your resume PDF (1-10 with justification) using your configured LLM. Results in chat, optional email digest, optional daily cron. No auto-applying. Cover letters on demand. Use when the user says: - "Run the job search" - "Find jobs for me" / "Search for jobs" - "Set up daily job search" / "Schedule the job search" - "Enable email for job results" - "Write a cover letter for [job title / company]" - "Generate a cover letter for [pasted job description]"
技能文档
Job Search — Serbia & Remote
Overview
Three modes:
- Job Digest — Scrape → extract resume → YOU score and output in chat
- Email — Optional. After chat output, send HTML digest via SMTP
- Cover Letter — On demand, YOU write it following strict human-voice rules
File Locations
| File | Purpose |
|---|---|
workspace/resume.pdf | Resume PDF. User replaces to update CV. |
workspace/roles.txt | Target job titles, one per line. |
workspace/config.json | Search, email, and cron settings. |
data/seen_jobs.db | SQLite — deduplication across runs. Auto-created. |
scripts/scrape.py | Fetches jobs from LinkedIn, Infostud, HelloWorld.rs. |
scripts/extract_resume.py | Extracts text from resume.pdf. Prints to stdout. |
scripts/mark_seen.py | Marks shown jobs as seen. Run after output. |
scripts/send_email.py | Sends HTML email digest. Only if email.enabled=true. |
Running the Job Digest
Step 1 — Scrape
python scripts/scrape.py
Writes new unseen jobs to data/raw_jobs.json.
Step 2 — Extract resume
python scripts/extract_resume.py
Read the printed resume text carefully — you need it for scoring.
Step 3 — YOU score each job
Read data/raw_jobs.json. For each job score the fit against the resume 1–10.
Scoring guide:
- 9–10: Exceptional. Meets nearly all requirements, strong stack + seniority match.
- 7–8: Strong. Meets most requirements, minor gaps won't block candidacy.
- 5–6: Moderate. Core match but notable gaps or a stretch.
- 3–4: Weak. Some overlap but significant mismatches.
- 1–2: Poor. Little alignment.
Be specific. Reference actual skills/experience from the resume against actual
requirements in the job. Use the tags field where descriptions are absent.
Only include jobs at or above config.json → search.min_score_to_include.
Step 4 — Output in chat
Sort by score descending, grouped by source. Format each job as:
🟢 [9/10] Strong fit
Senior .NET Developer
Luxoft Serbia · Belgrade
Tags: .NET, Azure, SQL
🔗 https://...
↳ [your 2-3 sentence justification]
🟢 = score 8–10 · 🟡 = 6–7 · 🔴 = below 6
Top summary line: "Found X jobs — Y 🟢 strong · Z 🟡 good · W 🔴 moderate"
Step 5 — Mark seen + optional email
Always run after outputting results:
python scripts/mark_seen.py
Then check config for email:
python scripts/send_email.py
If email.enabled is false in config.json, the email script prints "Email disabled"
and exits cleanly — no error, nothing to do.
If email is enabled, it sends the HTML digest automatically.
Setting Up Daily Cron (Automation)
When the user says "set up daily job search" or "schedule this" or "run it every day at [time]":
-
Read
workspace/config.jsonto get the preferred time and timezone. Default is 09:00 Europe/Belgrade unless the user specifies otherwise. -
Update config.json to set
cron.enabled = trueand the user's preferred time. -
Register the cron job with OpenClaw:
openclaw cron add \
--name "Daily Job Search" \
--cron "0 9 * * *" \
--tz "Europe/Belgrade" \
--session isolated \
--message "Run the job search"
Adjust the hour (0 9 = 9am) to match the user's chosen time.
- Confirm to the user: "Daily job search scheduled for 9:00 AM Belgrade time. Your OpenClaw gateway must be running for the schedule to fire."
To cancel: openclaw cron list to find the job ID, then openclaw cron delete
Enabling Email
When the user says "enable email" or "also send results by email":
-
Ask for: Gmail address, Gmail App Password (16-char, from myaccount.google.com/apppasswords), and recipient email (can be the same address).
-
Update
workspace/config.json:- Set
email.enabledtotrue - Fill in
smtp_user,smtp_pass,recipient
- Set
-
Confirm: "Email enabled. Results will be sent to [address] after each job search."
Note: Gmail requires an App Password (not the regular login password). Generate one at: myaccount.google.com/apppasswords
Cover Letter (On Demand)
When the user asks for a cover letter for a specific job:
- Run
python scripts/extract_resume.pyand read the output. - Use the job title, company, and any description the user provided.
- Write the letter yourself following these rules exactly:
Rules — non-negotiable:
- Do NOT open with "I am writing to apply for..." or any variation
- No AI buzzwords: cut "leverage", "passionate", "dynamic", "synergy", "results-driven", "excited to", "I believe I would be a great fit"
- Reference SPECIFIC things from the resume against SPECIFIC requirements in the job
- Vary sentence rhythm — mix short sentences with longer ones, not uniform blocks
- 3–4 paragraphs, under 350 words total
- End with a direct, confident close — not "I look forward to hearing from you"
- Sign off as the user's name (check resume for name)
- Must sound like a thoughtful person wrote it after reading the JD carefully
Output the letter in chat. The user copies and edits it themselves.
Important Rules
- Never auto-apply to any job under any circumstances.
- Never make external LLM API calls FROM SCRIPTS — scoring and cover letters are handled by YOU directly within this conversation session.
- If
workspace/resume.pdfis missing: stop and tell the user. - If
workspace/roles.txtis empty: stop and tell the user. - Email is always optional — skill works fully without it.
相关技能
Optimise a LinkedIn profile to be found and to convert. Use when asked to write or improve a LinkedIn headline, About section, or profile, or to make a profi...
Build, edit, and format professional resumes with PDF import, styled HTML/PDF export, and multi-language support. Use this skill whenever a user mentions res...
Reverse-engineer job descriptions: translate jargon ("5 years" → 3), infer company culture (red flags, vibes), match to your resume, detect negotiation signa...
Researches job postings, hiring signals, and freelance gigs via the Crawlora API — Indeed, Google/Amazon/Apple/Meta/Tesla careers sites, any company's ATS board (Greenhouse, Lever, Workday, SmartRecruiters, Ashby, and more), plus Upwork and Fiverr — returning clean JSON. Use when the user wants to search job postings, see what a specific company is hiring for, aggregate hiring signals for a company, or research freelance gigs and sellers.
Use for WorkorAI talent marketplace requests. Candidate triggers: "найди мне работу", "ищу работу", "подбери вакансию", "find me a job", "I need work", "help...