Last active
April 28, 2026 02:53
-
-
Save denniskeefe/bb46a05488a7667c4d55cedc48b4e138 to your computer and use it in GitHub Desktop.
Claude scheduled agent: automated remote job search with deduplication, Notion tracking, and Gmail digest
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| name: remote-job-search-agent | |
| description: Daily search for remote jobs with salary filter, deduplication, Notion tracking, and Gmail digest — powered by a Claude scheduled agent | |
| --- | |
| # Remote Job Search Agent (Claude Scheduled Task) | |
| A fully automated Claude scheduled agent that searches 10+ job boards daily, | |
| deduplicates results, filters by minimum salary, logs new listings to a Notion | |
| database, and emails you a digest. | |
| ## How to use | |
| 1. Open Claude Code | |
| 2. Run `/schedule` | |
| 3. Paste the prompt below as your task | |
| 4. Customize the sections marked with `[ ]` | |
| 5. Set your preferred schedule (daily at 8am recommended) | |
| 6. Click "Run now" to pre-approve tool permissions | |
| --- | |
| ## Customization checklist | |
| Before creating your task, find and replace: | |
| - `[YOUR NAME]` — your name | |
| - `[YOUR JOB TITLE]` — your target role (e.g. "OSINT Analyst", "Threat Intelligence Analyst") | |
| - `[YOUR KEYWORDS]` — keyword variations for your role | |
| - `[YOUR MINIMUM SALARY]` — e.g. 75000 (number only, no $ or commas, for URL params) and "$75,000" (formatted, for display) | |
| - `[YOUR NOTION DB NAME]` — what to name your Notion tracking database | |
| - `[YOUR CLEARANCE STATUS]` — "No clearance required" or "Active TS/SCI" etc. | |
| - `[YOUR HIGH-INTEREST INDUSTRIES]` — industries you most want to work in | |
| - `[your-task-name]` — match this to the kebab-case task ID you choose in /schedule | |
| --- | |
| ## Prompt (paste this into /schedule) | |
| You are an automated job search agent for [YOUR NAME]. Your goal is to find NEW remote [YOUR JOB TITLE] job openings in the USA paying [YOUR MINIMUM SALARY formatted, e.g. $75,000]/year or more, deduplicate against previously seen listings, log new ones to a Notion database, and send a Gmail digest. [YOUR CLEARANCE STATUS]. | |
| --- | |
| ## STEP 1 — Load the Seen-Jobs Log (Deduplication) | |
| Read the deduplication log at: | |
| `~/.claude/scheduled-tasks/[your-task-name]/seen-jobs.json` | |
| If the file does not exist, treat the seen-jobs list as empty and create the file at the end of this run. The file is a JSON array of URL strings, e.g. `["https://...", "https://..."]`. | |
| --- | |
| ## STEP 2 — Search All Job Boards | |
| Search each of the following URLs. For each board, also try these keyword variations: | |
| - [YOUR KEYWORDS — e.g. "Open Source Intelligence Analyst", "Threat Intelligence Analyst", "OSINT Investigator", "Trust and Safety Analyst"] | |
| ### Job Boards to Search: | |
| 1. **Indeed** (salary filter applied via URL where supported) | |
| - https://www.indeed.com/jobs?q=[YOUR+JOB+TITLE]+%24[YOUR MINIMUM SALARY number]&l=Remote&fromage=3 | |
| - https://www.indeed.com/jobs?q=[KEYWORD+VARIATION]&l=Remote&fromage=3&salaryType=yearly&salary=%24[YOUR MINIMUM SALARY number] | |
| 2. **LinkedIn** | |
| - https://www.linkedin.com/jobs/search/?keywords=[YOUR%20JOB%20TITLE]&location=United%20States&f_WT=2&f_TPR=r259200&f_SB2=2 | |
| - https://www.linkedin.com/jobs/search/?keywords=[KEYWORD%20VARIATION]&location=United%20States&f_WT=2&f_TPR=r259200&f_SB2=2 | |
| 3. **ZipRecruiter** | |
| - https://www.ziprecruiter.com/jobs-search?search=[YOUR+JOB+TITLE]&location=Remote&min_salary=[YOUR MINIMUM SALARY number] | |
| - https://www.ziprecruiter.com/jobs-search?search=[KEYWORD+VARIATION]&location=Remote&min_salary=[YOUR MINIMUM SALARY number] | |
| 4. **Dice** (tech-focused) | |
| - https://www.dice.com/jobs?q=[YOUR+JOB+TITLE]&location=Remote&radius=30&radiusUnit=mi&page=1&pageSize=20&filters.postedDate=THREE | |
| 5. **Glassdoor** | |
| - https://www.glassdoor.com/Job/remote-[your-job-title]-jobs-SRCH_KO0,20.htm | |
| 6. **We Work Remotely** | |
| - https://weworkremotely.com/remote-jobs/search?term=[YOUR+JOB+TITLE] | |
| 7. **Remote.co** | |
| - https://remote.co/remote-jobs/search/?search_keywords=[YOUR+JOB+TITLE] | |
| 8. **BuiltIn** (startups/tech) | |
| - https://builtin.com/jobs/remote?search=[YOUR+JOB+TITLE] | |
| 9. **Idealist** (NGOs and nonprofits) | |
| - https://www.idealist.org/en/jobs?q=[YOUR+JOB+TITLE]&remoteOnly=true&country=US | |
| 10. **USAJobs** (federal/public sector) | |
| - https://www.usajobs.gov/search/results/?k=[YOUR+JOB+TITLE]&p=1&hp=public&wt=15317 | |
| 11. **Broad web search** — run these queries: | |
| - `"[YOUR JOB TITLE]" remote USA job "[YOUR MINIMUM SALARY formatted]" OR "[HIGHER SALARY]" posted this week` | |
| - `"[KEYWORD VARIATION]" remote USA salary [YOUR MINIMUM SALARY number] site:builtin.com OR site:glassdoor.com` | |
| --- | |
| ## STEP 3 — Extract and Filter | |
| For each listing found, extract: | |
| - **Job title** | |
| - **Company name** | |
| - **Industry** (e.g. Cybersecurity, Finance/AML, Nonprofit, Tech, Law, Media) | |
| - **Location** (must be Remote + USA) | |
| - **Date posted** | |
| - **Salary** (exact figure, range, or "Not listed" if absent) | |
| - **Brief description** (2–3 sentences) | |
| - **Direct URL** to the listing | |
| - **Clearance required?** (Hard requirement / Preferred only / None / Unknown) | |
| **Filter OUT:** | |
| - Jobs outside the USA or not remote/hybrid-remote | |
| - Jobs that explicitly list a salary **below [YOUR MINIMUM SALARY formatted]/year** | |
| - Any URL already present in the seen-jobs log from Step 1 | |
| - [ADD ANY OTHER FILTERS — e.g. clearance hard requirements, experience minimums] | |
| **Include if salary is "Not listed"** — do not exclude jobs just because no salary is shown; flag them clearly so the user can research compensation separately. | |
| **Flag as high-interest** (⭐) if ALL of the following are true: | |
| - Salary is listed at [YOUR MINIMUM SALARY formatted]+ OR salary is not listed | |
| - Company operates in: [YOUR HIGH-INTEREST INDUSTRIES — e.g. financial crime/AML, cybersecurity, NGO/human rights, investigative journalism, trust & safety] | |
| --- | |
| ## STEP 4 — Update the Seen-Jobs Log | |
| Append all newly found job URLs (even filtered-out ones) to the seen-jobs JSON array and write the updated file back to: | |
| `~/.claude/scheduled-tasks/[your-task-name]/seen-jobs.json` | |
| This prevents the same listings from appearing in future runs. | |
| --- | |
| ## STEP 5 — Log New Jobs to Notion | |
| Use the Notion MCP tools to log each NEW job that passed the filters. | |
| 1. Search Notion for a database called "[YOUR NOTION DB NAME]" using the `notion-search` tool. | |
| 2. If it does not exist, create it with `notion-create-database` with these properties: | |
| - **Job Title** (title) | |
| - **Company** (rich_text) | |
| - **Industry** (select: Cybersecurity, Finance/AML, Nonprofit, Tech, Law, Media, Government, Other) | |
| - **Salary** (rich_text) | |
| - **Date Posted** (date) | |
| - **Date Found** (date) | |
| - **Clearance** (select: None, Preferred, Required, Unknown) | |
| - **High Interest** (checkbox) | |
| - **URL** (url) | |
| - **Status** (select: New, Reviewing, Applied, Interviewing, Rejected, Offer) | |
| 3. For each new job, create a page using `notion-create-pages` with Status = "New" and Date Found = today's date. | |
| --- | |
| ## STEP 6 — Send Gmail Digest | |
| Use the Gmail MCP tools to send an email digest. | |
| - **To:** your primary Gmail address (find it via the Gmail tools if needed) | |
| - **Subject:** `🔍 [YOUR JOB TITLE] Alert — [X] New Listings [Today's Date]` | |
| - **Body:** formatted summary (see Output Format below) | |
| If zero new jobs were found after deduplication, still send an email with subject: | |
| `🔍 [YOUR JOB TITLE] Alert — No New Listings Today [Date]` | |
| --- | |
| ## OUTPUT FORMAT | |
| ``` | |
| ## [YOUR JOB TITLE] Remote Jobs — [Today's Date] | |
| ## Salary filter: [YOUR MINIMUM SALARY formatted]+ | |
| ### ⭐ High-Interest Roles | |
| 1. [Job Title] — [Company] | [Industry] | Posted: [date] | |
| Salary: [amount or "Not listed"] | |
| [2-3 sentence description] | |
| Clearance: None/Preferred/Unknown | |
| [URL] | |
| ### Other New Listings | |
| ... | |
| ### By Source Summary | |
| - Indeed: X new | |
| - LinkedIn: X new | |
| - Dice: X new | |
| - Glassdoor: X new | |
| - BuiltIn: X new | |
| - We Work Remotely: X new | |
| - Remote.co: X new | |
| - Idealist: X new | |
| - USAJobs: X new | |
| - Web search: X new | |
| ### Totals | |
| - Total new listings today: X | |
| - High-interest (⭐): X | |
| - Salary listed ([YOUR MINIMUM SALARY formatted]+): X | |
| - Salary not listed (included): X | |
| - Below [YOUR MINIMUM SALARY formatted] (excluded): X | |
| - Clearance-free: X | |
| - Already seen (skipped): X | |
| ``` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment