Skill: elfilalihamza/job-watch (version 1.0.0)

--- name: job-watch description: Automated job search with 7‑day filtering, scoring, and weekly report. To run the skill send "run job watch now". metadata: clawdbot: emoji: "💼" requires: env: [] files: [] --- # Job Watch Skill Automated job search across Moroccan job boards. Filters last 7 days, scores matches against your profile, and produces a structured report. ## When to Use - When you want a weekly automated job search across multiple platforms - When you need jobs filtered by your specific skills and preferences - When you want scored job matches delivered as structured reports ## External Endpoints | URL | Purpose | Data Sent | |-----|---------|-----------| | alwadifa-maroc.com | Job search | Search queries only | | dreamjob.ma | Job search | Search queries only | | rekrute.com | Job search | Search queries only | | emploi-public.ma | Job search | Search queries only | | anapec.org | Job search | Search queries only | ## Security & Privacy - **No credentials required**: This skill uses public job board scraping only - **No data persistence**: Job data is not stored externally; reports saved locally only - **Rate limiting respected**: Respects robots.txt and platform rate limits - **No PII transmission**: Your profile data stays in local memory files ## Version History - **1.0.0** (2026-04-03) - Initial release with Moroccan job market focus ## Execution Instructions (CRITICAL) When the user says **"run job watch now"**, **DO NOT run any shell commands** (including `find`, `ls`, `cat`, `bash`, `python`). This skill is designed to be executed entirely by the AI using web-scraping and browser tools, ensuring it works across all OpenClaw configurations without requiring local file system access. ### Steps to Execute 1. **Load user profile** from `~/.openclaw/workspace/skills/job-watch/memory/profile.md` 2. **Load scoring rules** from `~/.openclaw/workspace/skills/job-watch/memory/scoring.md` 3. **Load platform list** from `~/.openclaw/workspace/skills/job-watch/memory/platforms.md` 4. **For each platform**, scrape jobs posted in the last 7 days (use browser tools or HTTP requests) 5. **Filter** jobs that match user’s target role, location, and keywords 6. **Score** each job (0–100) based on scoring rules 7. **Generate report** in the format below 8. **Save report** to `~/.openclaw/workspace/skills/job-watch/memory/reports/YYYY-MM-DD-job-watch-report.md` ### Report Format (copy-paste friendly) ```markdown # Job Watch Report – YYYY-MM-DD ## Summary - Total jobs found: X - New matches this week: Y - Average score: Z ## Top Matches (score ≥ 80) | Score | Title | Company | Platform | Link | |-------|-------|---------|----------|------| ## Other Matches (score 60–79) | Score | Title | Company | Platform | Link | ## Low Matches (score < 60) – optional | Score | Title | Company | Platform | Link | ## Notes / Next Steps - Apply to top matches by [date] - Update profile keywords if low matches persist ``` ### Example Trigger User says: *"run job watch now"* AI executes the steps above and outputs the report directly in the chat.

path: examples/platforms.md
content: 
## examples/platforms.md.example

```markdown
# platforms.md – List of job boards to scrape

Each platform must include:
- Name
- Search URL template (use {query} and {location} placeholders)
- Selector rules for job title, company, date, link (if needed by AI)

Example:

## Platform 1: Alwadifa Maroc
- url: "https://alwadifa-maroc.com/search?q={query}&location={location}"
- date filter: look for "publié le" or "il y a X jours"
- job card selector: ".job-item" (if using browser tools)

## Platform 2: Rekrute
- url: "https://rekrute.com/emploi/{query}/{location}"
- date filter: check for "Date de publication" within last 7 days

## Platform 3: Dreamjob.ma
- url: "https://dreamjob.ma/search?keywords={query}&city={location}"
- date filter: "Posté le" – parse DD/MM/YYYY

## Platform 4: Emploi Public
- url: "https://emploi-public.ma/offres"
- date filter: look for date in "Publiée le"

## Platform 5: Anapec
- url: "https://anapec.org/offres-d-emploi"
- date filter: use the "Date" column

path: examples/profile.md
content: # profile.md – Your job search profile

## Basic Info
- Target role: Full Stack Developer
- Preferred location: Casablanca, Rabat (or remote)
- Experience level: Senior (5+ years)
- Availability: Immediate

## Skills (keywords)
- Frontend: React, Vue.js, TypeScript, Tailwind
- Backend: Node.js, Python (Django), PHP (Laravel)
- Database: PostgreSQL, MySQL, MongoDB
- DevOps: Docker, AWS basics
- Languages: French (fluent), English (professional), Arabic (native)

## Preferences
- Contract types: CDI, Freelance
- Avoid: call centers, sales roles
- Salary expectation: 15k–25k MAD/month (optional)
- Must have: health insurance, remote option
- Nice to have: learning budget, flexible hours

## Exclusion keywords
- "stage", "internship", "apprenticeship", "commission only"

path: examples/scoring.md
content: # scoring.md – How to score each job (0–100)

Start from 50 points, then add or subtract.

## Add points
- +20 if title contains exact target role ("Full Stack Developer")
- +15 if title contains any skill from your profile (e.g., "React", "Node.js")
- +10 if location matches preference (Casablanca, Rabat, remote)
- +10 if contract is CDI or Freelance
- +5 for each additional skill match (max +25)
- +5 if company is well-known or rated 4+ stars
- +5 if posted within last 3 days

## Subtract points
- -20 if any exclusion keyword appears (e.g., "stage", "internship")
- -15 if location is outside preferred cities and not remote
- -10 if contract is "CDD" or "temporary"
- -5 if posted 5–7 days ago
- -30 if salary mentioned is below expectation (optional)

## Scoring levels
- 90–100: Apply immediately
- 70–89: Strong candidate – apply this week
- 50–69: Apply if nothing better
- <50: Skip

path: README.md
content: # Job Watch – Automated Job Search for OpenClaw

[![ClawHub Skill](https://img.shields.io/badge/ClawHub-Skill-blue)](https://clawhub.com)

**Automated job search across Moroccan job boards. Filters last 7 days, scores matches, and produces a clean report.**

## ✨ Value
- Saves hours of manual searching
- Finds jobs matching your exact profile and scoring rules
- Works entirely in OpenClaw – no scripts, no shell commands
- Respects rate limits and public data only

## 📦 Installation

```bash
clawhub install job-watch
```

Or install from source:
```bash
clawhub install https://github.com/ElFilaliHamza/job-watch-skill
```

## 🚀 Quick Start

1. After installation, set up your profile in `~/.openclaw/workspace/skills/job-watch/memory/profile.md`
2. Customize scoring rules in `memory/scoring.md`
3. List your target platforms in `memory/platforms.md`
4. Say to your OpenClaw agent: **"run job watch now"**

The AI will scrape, filter, score, and output a report directly in the chat.

## 📋 Example Report

```
# Job Watch Report – 2026-04-03

## Summary
- Total jobs found: 24
- New matches this week: 7
- Average score: 73

## Top Matches (score ≥ 80)
| Score | Title | Company | Platform | Link |
|-------|-------|---------|----------|------|
| 95 | Senior Full Stack Developer | ABC Corp | rekrute.com | [link] |
| 88 | Data Engineer | XYZ Ltd | dreamjob.ma | [link] |
```

## 🔧 Configuration Files (in `memory/`)

| File | Purpose |
|------|---------|
| `profile.md` | Your target role, skills, location, preferred keywords |
| `scoring.md` | Points system (e.g., +10 for "remote", +20 for exact title match) |
| `platforms.md` | List of job boards and search URLs |

See the `examples/` directory for templates.

## 🔒 Security & Privacy
- No credentials or API keys required
- All data stays on your local machine
- No personal information is ever transmitted
- Public job boards only – respects `robots.txt`

## 🤝 Contributing
Issues and pull requests welcome at [GitHub repo](https://github.com/ElFilaliHamza/job-watch-skill).

## 📄 License
MIT – see LICENSE file in GitHub repo.

## ⚠️ Disclaimer
This skill is for personal use only. Always verify job listings on the original platform before applying.

path: references/initial-setup.md
content: # Job Watch – Initial Setup (Skill‑Owned Memory)

## First Run Instructions

When the skill runs for the first time, it will look for these three files inside its own folder:

~/.openclaw/workspace/skills/job-watch/memory/
├── platforms.md
├── profile.md
└── scoring.md

If any are missing, the skill will ask you to provide the missing information.

### 1. Platforms (`platforms.md`)
List each platform on a new line with a dash:
```markdown
- dreamjob.ma
- Glassdoor
```

### 2. Profile (`profile.md`)
Use the format shown in the example above (desired roles, skills, experience, location, salary).

### 3. Scoring (`scoring.md`)
Define weights and matching rules as shown in the example.

## Testing the Skill

Send a message to OpenClaw:
```
run job watch now
```

## Scheduling (Cron)

You can schedule the skill using OpenClaw’s cron.

path: references/url-extraction-guide.md
content: # URL Extraction Guide for Job Watch Skill

## Problem
When extracting job URLs from websites, constructed URLs based on job titles often result in 404 errors. The correct URLs contain numeric IDs.

### General Best Practices:
1. **Always verify URLs**: Test a sample of extracted URLs to ensure they work.
2. **Use direct extraction**: Prefer extracting URLs from HTML over constructing them.
3. **Handle special characters**: URLs are often slugified (lowercase, hyphens, no special chars).
4. **Include numeric IDs**: When present, numeric IDs are crucial for URL validity.


### Implementation Notes:
When implementing the job watch skill:
1. Use `web_fetch` to get HTML content
2. Parse HTML to extract actual URLs using regex or HTML parsing
3. Never construct URLs based on job titles alone
4. Always include the report with verified, working URLs

Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)