remote-jobs-finder
Fully conversational remote job finder for WhatsApp powered by Remote Rocketship. Uses rr_jobs_search tool (server-side RR_API_KEY) and supports pagination ("20 more").
安装 / 下载方式
TotalClaw CLI推荐
totalclaw install clawskills:clawskills~lior539-remote-jobs-findercURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/clawskills%3Aclawskills~lior539-remote-jobs-finder/file -o lior539-remote-jobs-finder.md# Remote Rocketship × OpenClaw Skill (Natural Language Job Finder)
Use this skill whenever a user asks (in normal chat) to find remote jobs, browse opportunities, or set up an ongoing job search. This integration is powered by Remote Rocketship (https://www.remoterocketship.com).
Github repo: https://github.com/Lior539/openclaw-remote-jobs-finder
**UX rule:** fully conversational. Do not tell the user to run CLIs, use slash commands, or visit dashboards.
---
## Fetching jobs (MANDATORY)
When the user wants real job listings, you MUST call the OpenClaw tool `rr_jobs_search`.
Hard rules:
- Do NOT ask the user to run any CLI.
- Do NOT claim you can’t fetch listings (you can).
- Do NOT attempt raw HTTP calls from the model.
API key rules:
- The Remote Rocketship API key is provided server-side via environment variable `RR_API_KEY`.
- Never ask the user to paste secrets in WhatsApp.
Example call:
```json
{
"filters": {
"page": 1,
"itemsPerPage": 20,
"jobTitleFilters": ["Product Manager"],
"locationFilters": ["United Kingdom"]
},
"includeJobDescription": false
}
```
---
## When to Trigger
Trigger on messages like:
- “Help me find a remote job”
- “Find me remote Product Manager roles”
- “Show me remote jobs in the UK”
- “Any new backend roles since yesterday?”
- “Send me 20 more”
- “Set this up to check every hour”
---
## Conversation Flow
### A) Onboarding (keep it short)
Ask only what you need. Prefer 1–3 quick questions, then fetch.
1) Role / direction (required)
- “What kind of roles are you looking for? (job titles, function, seniority)”
2) Location eligibility (required)
- “Where can you legally work from? (country / region)”
3) Must-haves & deal-breakers (optional, single combined question)
- “Any must-haves (salary/industry/async) or deal-breakers?”
4) Monitoring cadence (optional)
- “Want me to check for new matches on a schedule (hourly/daily/off)?”
If the user doesn’t want to answer everything, proceed with what you have and fetch results anyway.
### B) First fetch (default)
- Default `itemsPerPage: 20` unless the user asks for a different batch size.
- Keep `includeJobDescription: false` unless the user asks for deeper detail.
---
## Preference Memory (important)
Maintain a simple user profile in memory so the user doesn’t need to repeat themselves:
- targetTitles: string[]
- locationFilters: string[]
- seniorityFilters: string[] (if known)
- employmentTypeFilters: string[] (if known)
- mustHaves: string[]
- dealBreakers: string[]
- rankingPreference: "best_fit" | "newest_first"
- pollingCadence: e.g. "hourly" / "daily" / "off"
- lastQueryFilters: the last `filters` object used (for “20 more”)
If the user updates anything (“Actually only contract roles”), update memory.
---
## Pagination & “20 more”
Store lightweight paging state:
- filters
- page
- itemsPerPage
- pagination.totalCount / hasNextPage
Rules:
1) When the user tweaks filters, reset `page` back to 1 and fetch again.
2) If they say “more”, “20 more”, “next page”, increment `filters.page` and call `rr_jobs_search` again with the last filters.
3) Always mention what you’re showing (e.g., “Showing 21–40 of 134”).
4) If `hasNextPage` is false, tell the user you’ve reached the end.
---
## Output formatting (WhatsApp-friendly)
For each job, show as a bulleted list:
**Role Title** — Company
- 🕒 Posted: <date and time posted, formatted nicely e.g. today @ 5:15pm, or yesterday @ 2:10pm, or 2 days ago, or 1 week ago etc. Only show time if it was today or yesterday>
- <flag emoji> Location (remote scope)
- 💰 Salary (or “Salary undisclosed”)
- 1–2 line summary
- 🔗 Link to apply
- 🏢 Link to company homepage
- 🌐 Link to company LinkedIn:
Keep it concise. After the list, ask what to do next:
- “Want 20 more, or should I narrow by industry/seniority/salary?”
---
## OpenClaw Tool to Use (required)
Tool: `rr_jobs_search`
Parameters:
- `filters` (object): passed through to Remote Rocketship API `filters`
- `includeJobDescription` (boolean, optional; default false)
The tool performs the POST to:
`https://www.remoterocketship.com/api/openclaw/jobs`
---
## Error handling
| Status | Meaning | Agent guidance |
| --- | --- | --- |
| 401 | Missing/invalid API key | Tell the admin to set/repair `RR_API_KEY` server-side and restart the gateway. Do NOT ask the user for keys in chat. |
| 403 | Subscription inactive | Tell the user they need an active Remote Rocketship plan to fetch jobs. |
| 429 | Rate limit | Inform the user you hit the daily limit and suggest retrying later. |
| 5xx | Backend issue | Apologize, retry once, then ask the user to try again later. |
---
## Filters (common)
Common filter keys you can use inside `filters`:
- `page` (int, default 1)
- `itemsPerPage` (int, default 20, max 50)
- `jobTitleFilters` (string[])
- `locationFilters` (string[]) — use canonical values like “United Kingdom”, “Worldwide”
- `keywordFilters` (string[])
- `excludedKeywordFilters` (string[])
- `seniorityFilters` (string[]) — e.g. `["senior"]`
- `employmentTypeFilters` (string[]) — e.g. `["full-time"]`
Prefer canonical titles/locations from RR lists when possible.