What you won't need

No more
Apify
Zero scraping fees. Claude searches the web natively.
No more
API Keys
No pay-per-call charges. Your Claude Pro subscription covers it.
No more
Servers
Runs on your machine. No cloud. No hosting. No bill.

The Hard Part · Technical Guide

Build a job search agent that runs while you sleep.

A step-by-step guide to building an autonomous agent that finds, filters, and emails you relevant jobs every morning — no input required from you.

Claude Cowork Gmail MCP SKILL.md Python SMTP Scheduled task

Won't cost you extra

No more
Zapier
No automation tools. Claude is the automation layer.
No more
Coding
Claude writes it all. You describe. Claude builds.
No more
Premium
Works with free search. No LinkedIn Premium needed.
0

Lines of code you write

~45 min ~55 min

Total setup time

9am

When the digest arrives

12

Steps total, not 120

Without this agent
Manually check 5+ job boards daily
Read 30+ listings to filter relevant ones
Miss interview emails buried in inbox
Apply to agency roles by mistake
Search quality depends on your mood that day
With this agent
9 boards searched automatically every morning
Only pre-filtered roles land in your inbox
Interview and assessment alerts surface daily
Hard filter on role type blocks agencies entirely
Same criteria applied every day without fail

Select your operating system

Steps update automatically throughout the guide
Estimated time: ~45 minutes
Estimated time: ~55 minutes
01

How the system works

This is not a script you run manually. It is an autonomous agent that fires at 9am every morning, does its job, and emails you a digest — whether your machine is open or not.

The execution engine is Claude Cowork, Anthropic's desktop tool for running autonomous Claude tasks on a schedule. Each morning the task fires, Cowork loads a plain markdown file called SKILL.md into a fresh Claude session, and Claude runs the full workflow with zero memory from previous runs. Everything it needs is in the file.

Scheduled task fires at 9am Machine awake · Claude Cowork running 9 job board searches run Himalayas · Remotive · WeWorkRemotely · LinkedIn · more Every result screened against 5 filters Full listing URL fetched and read before judging Gmail inbox checked Interviews · assessments · rejections · last 24h Digest email delivered to your inbox Tools used WebSearch WebFetch Gmail MCP Read Bash Write

No browser tab open. No Terminal window. No manual trigger. Your machine just needs to be awake.


02

What you need first

Four things need to be in place before running anything. All four are required.

RequirementWhat it isWhy it is needed
Claude CoworkAnthropic's desktop agent toolRuns the scheduled task. Without it there is no execution engine.
Gmail accountThe inbox the agent reads and sends fromAgent checks for interview emails and sends your digest from here.
Gmail app password16-character token from Google settingsLets Claude send email via SMTP without your real password exposed.
Mac on powerMacBook connected to mains or powered monitorTask only fires if the machine is awake. Sleep = missed run.
Windows PC on powerPC connected to mains with sleep prevention onTask only fires if the machine is awake. Sleep = missed run.
You do not need to know how to code. Every file in this guide is plain text. Every command is copy-paste ready.

How the 5 filters work

Every job found gets passed through all 5 filters in sequence. Fail any one and it is dropped. Only roles that clear all 5 reach your inbox.

01 Location Remote from your country or hybrid your city only
drops US-only →
02 Shift timing Your timezone compatible, no overnight shifts
drops night shifts →
03 Seniority Senior, Lead, Principal, Specialist only
drops junior roles →
04 Role type Internal L&D teams only — no agencies
drops agencies →
05 Blocked companies Your personal no-fly list — hard block
drops blocked →
✓ Only what passes all 5 reaches your inbox

03

Gmail app password

This step is identical on Mac and Windows. Do not use your regular Gmail password — it will not work and it is not secure.

!Never use your actual Gmail password. A Gmail app password is a separate 16-character token that can be revoked at any time without changing your main password.

Enable 2-Step Verification

3.1

App passwords only work when 2FA is active. Go to myaccount.google.com, click Security, and enable 2-Step Verification if it is not already on.

Generate the app password

3.2

Still in myaccount.google.com, use the search bar and search for App passwords. Type Job Agent as the name and click Create. Google shows a 16-character password in groups of four:

abcd efgh ijkl mnop

Copy it immediately. Google only shows it once.

Remove the spaces before saving

3.3

Google adds spaces for readability. Remove them before using it anywhere:

abcdefghijklmnop   # 16 chars, no spaces
Keep this ready. You will paste it into a file in the next section. Do not paste it into a chat or shared document.

04

Email config file

The Gmail app password lives in a plain text file on your machine. Claude reads it from disk at runtime — it is never hardcoded in the prompt, never exposed in a log.

Open Terminal and create the file

4.1
Mac
# Create the folder
mkdir -p ~/Downloads/Job\ Search

# Open the config file in nano
nano ~/Downloads/Job\ Search/email_config.txt

Type exactly this inside the file

4.2
Mac
GMAIL_USER=your.email@gmail.com
GMAIL_APP_PASSWORD=abcdefghijklmnop

Replace both values with your actual Gmail address and 16-character app password from Section 3.

Save and exit nano

4.3
Mac
Ctrl+O   # Write the file
Enter    # Confirm filename
Ctrl+X   # Exit nano

Verify the file

4.4
Mac
cat ~/Downloads/Job\ Search/email_config.txt

Both lines should print back. If not, repeat from step 4.1.

Open Notepad

4.1
Windows

Press Win + R, type notepad, and press Enter.

Type exactly this inside Notepad

4.2
Windows
GMAIL_USER=your.email@gmail.com
GMAIL_APP_PASSWORD=abcdefghijklmnop

Replace both values with your actual Gmail address and app password from Section 3.

Save to the right location

4.3
Windows

File → Save As → navigate to Downloads → create a folder called Job Search → save as email_config.txt. Set Save as type to All Files to avoid a .txt.txt double extension. Full path:

C:\Users\YourName\Downloads\Job Search\email_config.txt

Verify in PowerShell

4.4
Windows

Press Win + X → Terminal or PowerShell, then run:

Get-Content "$env:USERPROFILE\Downloads\Job Search\email_config.txt"

Both lines should print back. If not, re-check the save path.

If this file is missing at runtime, the agent logs a warning and skips sending rather than crashing the whole run.

05

Setting up Cowork

Cowork is Anthropic's desktop tool for running Claude autonomously on a schedule. The setup is the same on Mac and Windows.

Download and install the Claude desktop app

5.1

Go to claude.ai, download the desktop app for your OS, install it, and sign in with your Anthropic account.

Switch to Cowork mode

5.2

Open the Claude desktop app. Look for the Cowork option in the sidebar or via the mode switcher at the top. Switch to it. Cowork is the mode that supports scheduled autonomous tasks.

!Cowork requires Claude Pro or higher. Check your plan at claude.ai/settings before proceeding.
Cowork is a beta product. UI labels may differ slightly as Anthropic updates it. If a label does not match this guide exactly, look for anything related to "schedule", "automate", or "task" in the interface — the underlying capability is stable.

06

Connecting Gmail MCP

MCP stands for Model Context Protocol. It gives Claude live access to your Gmail inbox during each run. You authorize it once — it persists on both Mac and Windows.

Open Connectors in Cowork

6.1

Inside Cowork, look for a Connectors or Integrations section in the settings panel. Click Add connector.

Connect Gmail

6.2

Find Gmail in the list and click Connect. A Google OAuth screen will appear. Sign in with the same account your email_config.txt uses. Grant the read permissions.

Confirm the connection

6.3

Gmail should now appear as a connected service in your Cowork connectors list. The agent will use this to search your inbox for application emails from the past 24 hours on every run.

This authorization persists until you manually revoke it from your Google account settings. Note: Google may invalidate inactive tokens after several months of no use — if the connection drops after a long break, simply reconnect.

07

Getting Claude to write your SKILL.md

You do not write this file yourself. You open a Claude chat, describe what you want in plain language, and Claude writes the entire SKILL.md for you. Your job is to know what you want clearly enough to describe it.

The SKILL.md is the brain of the agent — a plain markdown file Claude reads cold at the start of every run with no memory from previous days. Everything the agent needs must be in this file. Claude builds it from your description.

SKILL.md the agent's full context PROFILE Who you are · role targets · stack HARD FILTERS 5 rules · all must pass before inbox SEARCH INSTRUCTIONS 9 boards · fetch full listing GMAIL CHECK Interviews · assessments · 24h EMAIL + FAILURE Digest format · log + handle errors 5 sections · claude reads this cold every run · zero memory from previous days

Open a new Claude chat

7.1

Go to claude.ai or open the Claude desktop app in standard chat mode (not Cowork). Start a new conversation.

Describe your profile and requirements

7.2

Tell Claude who you are and what you are looking for. Be specific — vague descriptions produce vague filters. Here is a template that works well:

Your message to Claude

I want you to write a SKILL.md file for an autonomous job search agent running in Claude Cowork.

About me:
[X]+ years in L&D
— Targeting: Senior Instructional Designer, Learning Technologist, Senior LXD, eLearning Developer
— Location: [Your City] — remote or hybrid [Your City] only
— Timezone: [Your timezone] — no overnight shifts
— Core tools: [Your stack — Storyline, xAPI, LMS, etc.]
— Email: your@gmail.com

My hard filters — every job must pass ALL of these:
1. Remote from [Country] or Hybrid [Your City] only
2. [Timezone]-compatible hours only, nothing past [time]
3. Senior, Lead, or Principal titles only — no Analyst or Associate
4. Internal L&D teams only — no agencies, no outsourcing firms
5. Blocked companies: [list any you want excluded]

Job boards to search: Himalayas, Remotive, WeWorkRemotely, Wellfound, Greenhouse, LinkedIn

The agent should check my Gmail inbox daily for interview calls, assessments, and rejections from the last 24 hours.

Credentials file: ~/Downloads/Job Search/email_config.txtC:\Users\YourName\Downloads\Job Search\email_config.txt

Send me a formatted daily email digest with new roles and application updates. Include filter reasoning for rejected roles. Handle failures gracefully — log them, never crash silently.

Iterate until it is right

7.3

Claude will generate the full SKILL.md. Read through it. If anything is wrong — a filter is too loose, a job board is missing, the email format is not what you want — just tell Claude in plain language. It revises immediately.

You are the product manager. Claude is the engineer writing the spec file. Keep going until the file reflects exactly what you want.

Save the file Claude produces

7.4

Once you are happy with it, copy the full SKILL.md content and save it as a plain text file:

~/Downloads/Job Search/SKILL.md

Open TextEdit, paste the content, go to Format → Make Plain Text, then save.

C:\Users\YourName\Downloads\Job Search\SKILL.md

Open Notepad, paste the content, and save as SKILL.md with Save as type set to All Files.

The reference blocks below show what a complete SKILL.md looks like — not for you to fill in manually, but so you can recognise what Claude builds and give better feedback during your review.

What Claude builds — reference only

SKILL.mdCandidate profile
## Candidate Profile
Name: Your Full Name
Role targets: Senior Learning Experience Designer,
              Learning Technologist, eLearning Developer
Location: [Your City, Country]
Work mode: Remote or Hybrid [Your City] only
Experience: [X]+ years across L&D
Core stack: [Your tools]
Email: your.email@gmail.com
SKILL.mdHard filters
## Hard Filters — ALL must pass

Filter 1 — Location: Remote [Country] OR Hybrid [City] only.
Filter 2 — Shift timing: [Timezone]-compatible only. No overnight.
Filter 3 — Seniority: Senior, Lead, Principal, Specialist only.
  Reject: Analyst, Associate, Coordinator, Intern, Trainee.
Filter 4 — Role type: Internal L&D only.
  Reject: agencies, outsourcing, client-billing models.
Filter 5 — Blocked companies: [List — one per line]
Filter 4 is the most important. Internal L&D means the company has its own team serving its own employees. An agency producing content for external clients fails this filter regardless of the job title.
SKILL.mdSearch, Gmail check, email config, format, failure handling
## Search Instructions
Run all 9 queries. Use WebFetch to read full listing before filtering.
# Queries cover: Himalayas, Remotive, WeWorkRemotely,
# Wellfound, Greenhouse, LinkedIn × multiple role titles

## Gmail Inbox Check
Use Gmail MCP. Search last 24h for: interview, assessment,
application, offer, next steps, unfortunately.
Classify and include in digest under APPLICATION UPDATES.

## Email Config
Read from: ~/Downloads/Job Search/email_config.txtRead from: C:\Users\YourName\Downloads\Job Search\email_config.txt
Use Python SMTP. Subject: Daily Job Search Update — [date] — [N] new roles.
If file missing: log warning, skip sending, continue run.

## Failure Handling
Never fail silently. Log every run to agent_log.txt.
Format: [DATE] [TIME] — Screened: N. Passed: N. Sent: yes/no
Once Claude has generated your SKILL.md and you have saved it, you are ready to schedule the task. Keep the file path handy for the next section.

08

Scheduling the task

WHAT HAPPENS EVERY DAY — ZERO INPUT FROM YOU overnight machine awake 9:00 am task fires cowork wakes ~8–15 min claude searches filters · composes ~9:15 am digest email in your inbox tomorrow repeats automatically you don't open the app · you don't trigger anything · you just get the email

On Mac, Cowork manages the schedule internally. No Terminal needed for this step.

Create a scheduled task in Cowork

8.1
Mac
Task name:     daily-job-search
Prompt source: ~/Downloads/Job Search/SKILL.md
Schedule:      Daily at 9:00 AM
Connectors:    Gmail MCP  (must be enabled)

Save and activate

8.2
Mac

Save the task. Cowork will fire it daily at your chosen time as long as the Mac is awake and the Claude app is running.

On Windows, Cowork manages the schedule internally. You also need Claude in Startup apps so it launches automatically after any reboot.

Create a scheduled task in Cowork

8.1
Windows
Task name:     daily-job-search
Prompt source: C:\Users\YourName\Downloads\Job Search\SKILL.md
Schedule:      Daily at 9:00 AM
Connectors:    Gmail MCP  (must be enabled)

Add Claude to Startup apps

8.2
Windows

Press Win + I → Apps → Startup → find Claude → toggle On. Without this, a reboot leaves Cowork offline and the task will not fire.

Verify in Task Scheduler (optional)

8.3
Windows

Press Win + S, search Task Scheduler, open it. Look for daily-job-search in the library. Next Run Time should show tomorrow at 9:00 AM.

Each run opens a completely fresh Claude session with no memory from previous days. SKILL.md is the entire context Claude works from.

09

Keeping your machine awake

The scheduled task only fires if the machine is awake. Sleep means a missed run — no catch-up, just a gap in that day's digest.

Prevent sleep on power adapter

9.1
Mac

System Settings → Battery → Options and enable:

Prevent automatic sleeping on power adapter when display is off  ON

This path applies to macOS Ventura (13) and later. On older macOS, find the equivalent in System Preferences → Energy Saver.

Add Claude to Login Items

9.2
Mac

System Settings → General → Login Items → click + → add the Claude desktop app. Cowork starts automatically on every boot.

Clamshell mode with a powered monitor

9.3
Mac

If your external monitor charges the Mac via USB-C Power Delivery, closing the laptop lid keeps the Mac fully awake without fan noise. The Mac draws power from the monitor, stays awake, and the agent fires at 9am regardless. This is the cleanest always-on setup for this workflow.

!On battery only, the Mac may sleep regardless of Battery settings. The agent requires mains power to run reliably overnight.

Disable sleep when plugged in

9.1
Windows

Settings → System → Power and sleep and set:

When plugged in, PC goes to sleep after: Never

This applies to both Windows 10 and Windows 11. The path is the same.

Screen can sleep, PC cannot

9.2
Windows

On the same screen you can allow the display to turn off while keeping the PC awake:

When plugged in, turn off display after: 30 minutes
When plugged in, PC goes to sleep after: Never

The agent fires regardless of whether the display is on or off.

Confirm Claude is in Startup apps

9.3
Windows

Settings → Apps → Startup → confirm Claude is toggled On. A reboot without this leaves Cowork offline and the task will not fire.

!On battery only, Windows may still sleep depending on your power plan. The agent requires mains power to run reliably.

10

Your first run

Before waiting until 9am tomorrow, trigger a manual test run to confirm everything works end to end.

Trigger a manual run in Cowork

10.1

Find your saved task in Cowork and look for a Run now or Test option. Trigger it. Watch the activity panel as Claude works through each step in sequence.

What to expect during the run

10.2

The first run takes longer because Claude fetches each listing URL to read the full description before filtering. Expect 8 to 15 minutes across 9 boards. Subsequent daily runs are faster as fewer new listings appear each day.

Check your inbox

10.3

The digest should arrive within a minute or two of the run completing. If it lands in spam, mark it as not spam and add your own Gmail address to your Contacts — this resolves permanently within one or two runs.

Check the log file

10.4
cat ~/Downloads/Job\ Search/agent_log.txt

Open PowerShell and run:

Get-Content "$env:USERPROFILE\Downloads\Job Search\agent_log.txt"

A timestamped entry should confirm: roles screened, roles passed, email sent yes/no.


11

What the email looks like

A representative example of the digest you receive each morning. This uses sanitized data — not real applications or companies.


12

Troubleshooting

No email received after a run

Fix

Check the log file first (Section 10). If it shows "Sent: no", the SMTP step failed. Most likely the Gmail app password in email_config.txt has spaces, is wrong, or the file path is incorrect. Re-check Section 4.

Email arrives but lands in spam

Fix

Gmail sometimes flags self-addressed SMTP email. Open it in spam, click Not spam, and add your own address to Google Contacts. Resolves permanently within one or two runs.

Scheduled task did not fire at 9am

Fix
Mac

Almost always because the Mac was asleep or Cowork was not running. Confirm System Settings → Battery → Options has sleep prevention enabled. Confirm Claude is in Login Items. The task will fire correctly from tomorrow.

Scheduled task did not fire at 9am

Fix
Windows

Confirm the PC was not asleep. Confirm Settings → Power and sleep → sleep is set to Never when plugged in. Confirm Claude is in Startup apps. Open Task Scheduler and check Last Run Time — if it shows never, re-create the task in Cowork.

Gmail MCP shows as disconnected

Fix

Go to Cowork → Connectors and reconnect Gmail. The OAuth token may have expired or been revoked — Google can invalidate tokens after extended inactivity (several months). Re-authorize using the same Google account. Takes under two minutes.

Too many irrelevant roles passing the filters

Fix

Open a new Claude chat, paste your current SKILL.md, and ask Claude to tighten Filter 4. Tell it which types of roles are slipping through. Also add specific agency names to Filter 5. Claude will rewrite the relevant sections — save the updated file and the next run will use the tighter criteria.

Gmail app password stopped working

Fix

App passwords are invalidated if you change your main Google password, disable 2FA, or revoke them manually. Go to myaccount.google.com, generate a new app password named "Job Agent", remove the spaces, update email_config.txt, and the next run picks it up automatically.

Questions about the setup?

Go back to the newsletter post on LinkedIn and leave a comment. If something here is unclear, your question probably helps the next person who reads this guide.

Find me on LinkedIn →
← Back to Articles

Build a Job Search Agent That Runs While You Sleep

A step-by-step guide to creating an autonomous agent in Claude Cowork that searches 9 job boards, applies your filters, and emails you a daily digest. Zero code. 45 minutes to setup.

SOURCES 9 JOB BOARDS LinkedIn · Indeed +7 CLAUDE FILTER salary · remote · role · agency · size 5 smart filters applied + Gmail inbox check DELIVERY DIGEST EMAIL 09:00 AM · daily Zero code. Runs while you sleep. 45 minutes to set up. Claude Cowork · Gmail MCP · Scheduled Task · 9 boards daily
0
Lines of Code
~45
Minutes Setup
9
Job Boards
12
Guide Sections
The Difference
Before vs. After: What Changes
❌ Before (Manual)
  • Spend 3 hours/day on job sites
  • Manual filtering by role, salary, location
  • Repeat every single day
  • Miss opportunities while sleeping
  • Burn out from repetition
✓ After (Automated)
  • +Agent works 24/7 while you sleep
  • +5 smart filters applied automatically
  • +Daily digest in your email
  • +Never miss an opportunity
  • +Focus on what you do best
How the System Works
⚙️ The Pipeline: 5 Steps Each Morning
1
Agent wakes up and reads your SKILL.md file (your filters + search keywords)
2
Searches 9 job boards using your keywords (LinkedIn, Indeed, Greenhouse, etc.)
3
Applies 5 filters to each result (salary, remote, role match, company type, size)
4
Checks your Gmail for rejections, patterns, and recent application updates
5
Sends you a digest email with new roles, filtered results, and action items
Smart Filtering
🎯 The 5 Filters That Eliminate Noise
1
Role Relevance
Matches titles and descriptions against your resume keywords
2
Salary Range
Skips postings below your minimum threshold
3
Remote Eligibility
Filters out on-site or hybrid roles if you require remote
4
Internal L&D Only — No Agencies
🔑 Most important. Eliminates staffing agency postings. Only surfaces roles where L&D is the internal function.
5
Company Stage & Size
Prioritize Series A-C startups, avoid early-stage, set minimum employee count
Setup Steps (12 Total)
📧 Gmail & Credentials (Sections 03-04)
What you need:
  • Gmail account with 2-step verification enabled
  • App password (16-character, generated by Google)
  • Email address to send digests to
How to get the app password:
  1. Security settings (myaccount.google.com/security)
  2. Enable 2-step verification (if needed)
  3. Scroll to "App passwords"
  4. Select "Mail" + your OS
  5. Copy the 16-char password
🔗 Cowork + Gmail MCP (Sections 05-06)
What is Claude Cowork?

Anthropic's personal AI assistant for long-lived tasks. Runs on your machine, stays local, executes scheduled jobs 24/7.

What Gmail MCP enables:
  • Read recent emails
  • Send emails
  • Search inbox
  • Access only email — no Drive, Calendar, etc.
🧠 SKILL.md — The Agent's Brain (Section 07)

This is the most important file. A Markdown document living in your Cowork workspace that Claude reads cold on every run. Everything the agent needs to know lives here.

Profile section

Who you are and what you're looking for. Your title, experience, and job preferences.

Hard filters

Non-negotiable criteria: salary floor, remote requirement, company type, excluded companies.

Search instructions

Exactly which 9 boards to search and what keywords to use.

Gmail check

How to scan for rejections, patterns, and include feedback in the digest.

Email format

How to structure the digest email: sections, headers, content.

Failure handling

What to do if a board is down, Gmail fails, or no roles are found.

Key insight: Everything the agent needs must be in this file. Claude reads it cold on every run — no training, no memory, just instructions. Edit SKILL.md to change how the agent behaves. Next run picks it up automatically.
⏰ Scheduling + System Sleep (Sections 08-09)
In Cowork:

Create a scheduled task. Tell it when to run (cron expression: 0 9 * * 1-5 = 9 AM weekdays). Fires automatically.

Keep computer awake:
Mac: System Settings → Energy Saver → "Prevent automatic sleep when display is off"
Windows: Settings → Power → "Never sleep" when plugged in
🚀 First Run & Email Output (Sections 10-11)
First run duration: 8-15 minutes
Searching 9 boards (2-3 min ea) → Parsing & filtering (2-3 min) → Gmail check (1-2 min) → Compose email (1 min)
The digest email includes:
📊 APPLICATION UPDATES
🎯 NEW ROLES FOUND (top 5)
⏭️ FILTERED OUT (why)
💡 RECOMMENDED TO APPLY TODAY

[Direct links + one-line match reasons]
🔧 Troubleshooting (Section 12)
Agent isn't running at scheduled time?

Check: Computer asleep? Cowork running in background? On Mac, set "Allow in the Background" in Login Items.

Getting duplicate roles?

Agent caches results locally. Don't clear the cache manually or you'll re-surface old roles. Wait a few days and duplicates will age out.

Gmail integration not working?

Verify: 16-char app password (no spaces)? 2FA enabled? Gmail MCP connected in Cowork? Try re-connecting the MCP.

Digest email not being sent?

Check email config file location + correct "send to" address. Look at Cowork logs to see what error the agent hit.

Ready to automate your job search?

Read the full guide →