Daily Coffee Chat Lead Finder

Automate F1 OPT job search networking with an AI agent and Discord.

Introduction

30 Second Summary

Job searching is exhausting. The hardest part isn't sending emails. It's spending hours every day hunting for the right people to email in the first place.

In this project, you will build an automated daily networking pipeline using OpenClaw, an AI agent platform. Every weekday morning, your agent searches the web for 5 fresh contacts at companies in New York and Austin that hire F1 OPT workers, drafts personalized coffee chat emails, and delivers everything to a private Discord channel.

What You'll Build

A fully automated lead finder that connects an OpenClaw agent to Discord, uses web search to research networking targets, and delivers structured leads with coffee chat email drafts on a daily schedule.

By the end of this project, you'll have:

  • A private Discord server with an OpenClaw bot connected and paired.
  • A custom skill file and email template that define your ideal networking targets and outreach style.
  • A recurring cron job that runs every weekday at 8 AM and delivers 5 leads with drafted emails to your Discord channel.
  • Secret Mission: Add a weekly outreach summary to track your networking progress over time.

Are there any prerequisites?

This project assumes you already have OpenClaw installed and running on your Mac, a Discord account, and Brave Search (web_search) already configured as a tool in OpenClaw. You will create an OpenRouter API key (free) and a new Discord bot during the project.

Before We Start

Before We Start...

Create a Discord Server and Bot

Your daily lead finder needs somewhere to deliver its results. Instead of checking a terminal or email, you will get your leads dropped into a private Discord channel you check over breakfast.

To make that work, you need a Discord bot that OpenClaw can talk through. In this step, you will create a private server, register a bot in the Discord Developer Portal, and wire it up to OpenClaw.

In this step, get ready to:
  • Create a private Discord server and a bot application.
  • Invite the bot to your server with the right permissions.
  • Connect and pair OpenClaw to Discord through the bot.
Create a private Discord server and application

You need two things: a private Discord server where your leads will land, and an application in the Discord Developer Portal that gives your bot an identity and a token.

  • Press Cmd+Space (macOS) or the Windows key (Windows) to open your search bar.
  • Type Discord and press Enter to open it.
  • Click the + icon in the left sidebar to add a new server.
  • Select Create My Own.
  • Select For me and my friends.
  • Name the server Job Search HQ and click Create.

You should see your new Job Search HQ server in the left sidebar with a default #general channel.

Now you will create the bot application in the Discord Developer Portal.

  • Open your browser and go to the Discord Developer Portal.
  • Click New Application in the top right.
  • Name the application OpenClaw and click Create.

You will land on the General Information page for your new app. Next, you will set up the bot user and enable the intents it needs.

  • Click Bot in the left sidebar.
  • Scroll down to the Privileged Gateway Intents section.
  • Enable the Message Content Intent toggle.
  • Enable the Server Members Intent toggle.
  • Click Save Changes at the bottom of the page.

Why enable these intents?

Message Content Intent lets the bot read the full text of messages in your server. Without it, the bot only sees messages that directly @mention it or arrive in DMs. OpenClaw needs this to process your commands in any channel.

Server Members Intent lets the bot see who is in the server. This is recommended for a smoother pairing experience with OpenClaw.

  • Scroll back up to the Token section on the Bot page.
  • Click Reset Token and confirm when prompted.
  • Click Copy to copy your bot token.
  • Paste the token into a safe place like a text file or password manager.

Save your token now

Discord only shows this token once. If you navigate away without copying it, you will need to click Reset Token again to generate a new one.

Set bot permissions and invite it to your server

Your bot exists in the Developer Portal, but it is not in your server yet. You need to generate an invite URL with the right OAuth2 scopes and permissions, then use that URL to add the bot to your server.

  • In the Discord Developer Portal, click OAuth2 in the left sidebar.
  • Scroll down to the OAuth2 URL Generator section.
  • Under Scopes, check the box for bot.
  • Also check the box for applications.commands.

A new Bot Permissions section appears below. This controls what the bot can do in your server.

  • Check View Channels.
  • Check Send Messages.
  • Check Read Message History.
  • Check Embed Links.
  • Check Attach Files.
  • Check Add Reactions.
  • Scroll to the bottom of the page and copy the generated URL.
  • Paste the URL into your browser's address bar and press Enter.
  • Select your Job Search HQ server from the dropdown.
  • Click Authorize.

Go back to Discord and open your Job Search HQ server. You should see the OpenClaw bot in the member list on the right side.

Don't see the bot in your server?

Make sure you selected the correct server in the authorization dropdown. If you picked the wrong server, paste the invite URL again and choose Job Search HQ.

If the member list panel is hidden, click the people icon in the top right of Discord to toggle it on.

Why isn't my Discord bot showing up in my server?

Connect OpenClaw to Discord and pair

The bot is in your server, but OpenClaw does not know about it yet. You need to give OpenClaw the bot token, start the gateway connection, and complete a pairing handshake so the two can communicate.

  • Press Cmd+Space (macOS) or the Windows key (Windows) to open your search bar.
  • Type Terminal and press Enter to open it.

The bot token is a secret credential. You will store it as an environment variable so OpenClaw can read it without hardcoding it into config files.

  • Set the bot token as an environment variable by running this command (replace your-bot-token-here with the token you copied earlier):
export DISCORD_BOT_TOKEN="your-bot-token-here"

What is an environment variable?

An environment variable is a value stored in your terminal session that programs can read. By setting DISCORD_BOT_TOKEN this way, OpenClaw can access the token without it being written into a config file.

This variable only lasts for the current terminal session. If you close and reopen the terminal, you will need to run the export command again.

  • Configure OpenClaw to use Discord by running these two commands:
openclaw config set channels.discord.token --ref-provider default --ref-source env --ref-id DISCORD_BOT_TOKEN
openclaw config set channels.discord.enabled true --strict-json

What do these commands do?

The first command tells OpenClaw where to find your bot token. It points to the DISCORD_BOT_TOKEN environment variable instead of storing the token directly in the config file.

The second command flips the Discord channel on. OpenClaw supports multiple channels, and each one must be explicitly enabled.

  • Start the OpenClaw gateway by running:
openclaw gateway

You should see the gateway starting up and connecting to Discord. This process takes over your terminal window, so keep it running.

Keep this terminal open

The gateway must stay running for the bot to work. You will need a second terminal tab for the next commands. Open one by pressing Cmd+T (macOS) or Ctrl+Shift+T (Windows/Linux).

Gateway won't start?

Make sure you ran the export DISCORD_BOT_TOKEN command in the same terminal session where you are starting the gateway. If you opened a new tab before exporting, the variable will not be set.

Double-check that you pasted the correct bot token with no extra spaces or line breaks.

Why won't my OpenClaw gateway connect to Discord?

Now you will pair your Discord account with OpenClaw so it recognizes your messages.

  • In Discord, find the OpenClaw bot in your server's member list.
  • Click on the bot's name and send it a direct message.

The bot will reply with a pairing code. Keep this code visible.

  • In your new terminal tab, list pending pairing requests by running:
openclaw pairing list discord

You should see your pairing request with a code that matches what the bot sent you in Discord.

  • Approve the pairing by running this command (replace the code with the one shown in your pairing list):
openclaw pairing approve discord [[PAIRING_CODE="the pairing code from the list"]]

Time to test. Go back to your Job Search HQ server in Discord.

  • In the #general channel, type @OpenClaw hello and press Enter.

The bot should respond within a few seconds. If it does, your Discord connection is working.

Bot not responding to your message?

Make sure the gateway terminal is still running. If you accidentally closed it, re-run export DISCORD_BOT_TOKEN="your-bot-token-here" and then openclaw gateway again.

Confirm the pairing was approved by running openclaw pairing list discord again. If the code still shows as pending, run the approve command once more.

My OpenClaw bot is paired and the gateway is running, but it won't respond in Discord. Help me debug.

Your bot is live and responding. Next up, you will configure OpenRouter with a free AI model so your agent has a brain to power the lead research.

Configure OpenRouter with a Free Model

Your Discord bot is connected and listening for messages. The next piece of the puzzle is giving your agent a brain to think with.

OpenClaw needs an external language model to reason, search the web, and generate text. In this step, you'll connect it to OpenRouter, a cloud API that routes your requests to language models from different providers at $0 cost.

In this step, get ready to:
  • Create an OpenRouter account and API key.
  • Onboard OpenClaw with your OpenRouter credentials.
  • Find and set a free model that supports tool use.
Create an OpenRouter API key
  • Open your browser and go to openrouter.ai/keys.
  • Sign up for a new account, or log in if you already have one.
  • Click **Create Key** to generate a free API key.
  • Copy the key. It starts with sk-or-.
  • Save it somewhere safe. You'll need it in the next substep.

What is OpenRouter?

OpenRouter is a cloud API that sits between your agent and language model providers like Google, Meta, and Mistral. Instead of signing up with each provider individually, you send requests through OpenRouter and it routes them to the model you choose.

OpenRouter offers free models that cost $0 per request. This makes it perfect for a daily automation that runs every morning without racking up a bill.

Onboard OpenClaw with OpenRouter
  • Connect OpenClaw to OpenRouter by running this command:
openclaw onboard --auth-choice openrouter-api-key

What does this command do?

The onboard command walks you through connecting OpenClaw to a model provider. The --auth-choice openrouter-api-key flag tells it you want to authenticate with an OpenRouter API key specifically.

  • The command prompts you for your API key. Paste your OpenRouter API key (starting with sk-or-) and press Enter.
  • You should see a confirmation that openrouter/auto is set as your default model.

Command not recognized?

  • Make sure you're running the command in the same terminal window where OpenClaw is installed and accessible.
  • Double-check that your API key starts with sk-or-. If you copied extra whitespace, the key will be rejected.
  • If the command hangs, try pressing Ctrl+C to cancel and run it again.

Why isn't my OpenClaw onboard command working?

Scan for free models with tool support

The default openrouter/auto model routes to free models, but not all free models support tool use. Your agent needs tool support to call Brave Search during lead research.

  • Find the best free model for your pipeline by running this command:
openclaw models scan --set-default

What does this command do?

This command inspects OpenRouter's free model catalog and probes each model for tool and image support. It ranks the results so you can pick the best candidate for your use case.

The --set-default flag automatically applies your selection to OpenClaw's config, so you don't need to run a separate command.

  • The scanner displays a ranked list of free models. Select the top-ranked model that shows tool support.
  • Verify your model is set by running this command:
openclaw models status

You should see your selected model listed as the default, along with a provider auth overview confirming OpenRouter is connected.

No models showing tool support?

  • Free model availability changes over time. If no models show tool support right now, wait a few hours and run the scan again.
  • Make sure your OpenRouter API key is valid. You can check at openrouter.ai/keys to confirm the key is active.
  • If the scan runs but shows zero results, try running openclaw models scan without --set-default first to see the full output. Then manually pick a model with tool support.

Help me find a free OpenRouter model with tool support for OpenClaw.

Your agent has a brain and can call tools like web search. Next up, you'll teach it exactly what kind of networking leads to find by writing a custom job search skill.

Write the Job Search Networking Skill

Your OpenClaw agent is connected to Discord and powered by a free model. Now it needs to know what to search for.

In this step, you will create two files in your OpenClaw workspace. The first is a skill file that tells the agent exactly what kind of networking leads to find. The second is an email template that teaches the agent how to draft coffee chat outreach in your voice.

In this step, get ready to:
  • Create a job search skill file that defines your target networking profile.
  • Create a coffee chat email template for personalized outreach.
  • Test that the agent can use the skill to find a lead and draft an email.
Create the skill file

OpenClaw agents read markdown files from their workspace to understand how to complete tasks. By placing a skill file in the skills/ directory inside the workspace, you give the agent a reusable set of instructions it can follow every time you ask it to find networking leads.

  • Create the skills directory and open a new file by running these commands:
mkdir -p ~/.openclaw/workspace/skills
nano ~/.openclaw/workspace/skills/job-search-leads.md

What is nano?

Nano is a simple text editor that runs inside your terminal. You will paste content into it, then save with Ctrl+O, press Enter, and exit with Ctrl+X.

  • Paste the following content into the nano editor:
# Job Search Networking Lead Finder

You are a job search networking assistant. Your goal is to find real people at real companies that the user can reach out to for coffee chats to support their job search.

## Target Profile

- **Locations**: New York, NY or Austin, TX
- **Company type**: Companies known to hire international workers on F1 OPT or that sponsor H1B visas
- **Company size**: Mid-size to large companies (50+ employees) with active job openings
- **Contact type**: Hiring managers, team leads, senior engineers, recruiters, or people in roles related to the user's target position

## Search Strategy

1. Search the web for companies in New York and Austin that are known to sponsor H1B visas or hire F1 OPT workers. Use sources like the H1B visa sponsor database, company career pages, and LinkedIn job postings.
2. For each company found, search for a specific person who would be a good networking contact. Look for people with titles like: Engineering Manager, Tech Lead, Senior Recruiter, Hiring Manager, Director of Engineering, or similar.
3. Find the person's full name, title, company, and city. If possible, find their LinkedIn profile URL and guess their professional email pattern (e.g., firstname@company.com or firstname.lastname@company.com).

## Output Format

For each lead, provide:

1. **Name**: Full name
2. **Title**: Their job title
3. **Company**: Company name
4. **City**: New York or Austin
5. **Why this contact**: One sentence on why they are a good person to reach out to
6. **LinkedIn**: LinkedIn profile URL (if found)
7. **Estimated email**: Best guess at their professional email based on company email patterns
8. **Coffee chat email**: A personalized coffee chat email draft using the coffee-chat-template

## Quality Rules

- Only include real people at real companies. Do not fabricate names or companies.
- Each batch of 5 leads should include a mix of New York and Austin companies.
- Prioritize companies with recent job openings in tech, product, data, or business roles.
- Avoid repeating companies or contacts from previous runs.
- If you cannot verify a person's name, say so and provide the company with a note to check LinkedIn manually.

What does this skill file do?

This file is a detailed instruction set for your agent. It defines four key things:

  • Target Profile narrows the search to companies in New York and Austin that hire F1 OPT or H1B workers.
  • Search Strategy tells the agent to use web search to find real companies and real people at those companies.
  • Output Format ensures every lead comes back with the same structured fields (name, title, company, city, reasoning, LinkedIn, email, and a drafted email).
  • Quality Rules prevent the agent from fabricating contacts and keep each batch fresh.
  • Save the file by pressing Ctrl+O, then Enter, then Ctrl+X to exit nano.
  • Confirm the file was created by running:
ls ~/.openclaw/workspace/skills/

You should see job-search-leads.md listed in the output.

Don't see the file?

Make sure you pressed Ctrl+O (that is the letter O, not zero) to save before exiting nano. If the file is missing, run the nano command again and re-paste the content.

Help me create the job search skill file in nano.

Create the coffee chat email template

The skill file references a coffee chat template for drafting emails. This template teaches the agent your preferred tone and structure so every outreach email sounds warm and genuine.

  • Open a new file for the email template by running:
nano ~/.openclaw/workspace/coffee-chat-template.md
  • Paste the following content into the editor:
# Coffee Chat Email Template

Use this template to draft personalized coffee chat outreach emails.

## Rules

- Keep the email under 100 words
- No hype, no pressure, no sales language
- Reference something specific about the person or their company
- Ask for a 15-minute virtual coffee chat, not a job
- Be genuine and curious. You are learning, not selling
- Include a specific reason why you are reaching out to them personally
- Sign off warmly

## Structure

- **Subject line**: Short and personal. Reference their company or a shared interest.
- **Opening**: One sentence connecting you to them or their company.
- **Context**: One sentence about who you are (international grad, F1 OPT, looking to learn).
- **Ask**: One sentence requesting a 15-minute virtual coffee chat.
- **Close**: Warm sign-off with your name.

## Example

Subject: Quick question about engineering at [Company]

Hi [Name],

I came across [Company]'s work on [specific project or product] and found it really interesting. I am an international graduate on F1 OPT exploring opportunities in [field], and I would love to hear about your experience at [Company].

Would you be open to a 15-minute virtual coffee chat sometime this week or next?

Thanks so much,
[Your Name]

What does this template do?

This file sets guardrails for the agent's email drafts. Each email must be under 100 words, mention something specific about the recipient, and ask for a 15-minute chat instead of a job.

The example at the bottom gives the agent a concrete reference for tone and structure. The agent will adapt this pattern for each lead it finds.

  • Save the file by pressing Ctrl+O, then Enter, then Ctrl+X to exit nano.
  • Confirm the file was created by running:
ls ~/.openclaw/workspace/

You should see coffee-chat-template.md listed alongside your other workspace files like AGENTS.md and SOUL.md.

File not showing up?

Double-check that you ran nano ~/.openclaw/workspace/coffee-chat-template.md with the full path. If you accidentally created the file in the wrong directory, move it with:

mv coffee-chat-template.md ~/.openclaw/workspace/

Help me find where my coffee chat template file ended up.

✔️ Awesome, I've got both files!

Great. Make sure both files are saved before moving on.

ⓧ I'd like to double check the full code

Here is the full content for each file. Compare your files against these.

The skill file at ~/.openclaw/workspace/skills/job-search-leads.md:

# Job Search Networking Lead Finder

You are a job search networking assistant. Your goal is to find real people at real companies that the user can reach out to for coffee chats to support their job search.

## Target Profile

- **Locations**: New York, NY or Austin, TX
- **Company type**: Companies known to hire international workers on F1 OPT or that sponsor H1B visas
- **Company size**: Mid-size to large companies (50+ employees) with active job openings
- **Contact type**: Hiring managers, team leads, senior engineers, recruiters, or people in roles related to the user's target position

## Search Strategy

1. Search the web for companies in New York and Austin that are known to sponsor H1B visas or hire F1 OPT workers. Use sources like the H1B visa sponsor database, company career pages, and LinkedIn job postings.
2. For each company found, search for a specific person who would be a good networking contact. Look for people with titles like: Engineering Manager, Tech Lead, Senior Recruiter, Hiring Manager, Director of Engineering, or similar.
3. Find the person's full name, title, company, and city. If possible, find their LinkedIn profile URL and guess their professional email pattern (e.g., firstname@company.com or firstname.lastname@company.com).

## Output Format

For each lead, provide:

1. **Name**: Full name
2. **Title**: Their job title
3. **Company**: Company name
4. **City**: New York or Austin
5. **Why this contact**: One sentence on why they are a good person to reach out to
6. **LinkedIn**: LinkedIn profile URL (if found)
7. **Estimated email**: Best guess at their professional email based on company email patterns
8. **Coffee chat email**: A personalized coffee chat email draft using the coffee-chat-template

## Quality Rules

- Only include real people at real companies. Do not fabricate names or companies.
- Each batch of 5 leads should include a mix of New York and Austin companies.
- Prioritize companies with recent job openings in tech, product, data, or business roles.
- Avoid repeating companies or contacts from previous runs.
- If you cannot verify a person's name, say so and provide the company with a note to check LinkedIn manually.

The email template at ~/.openclaw/workspace/coffee-chat-template.md:

# Coffee Chat Email Template

Use this template to draft personalized coffee chat outreach emails.

## Rules

- Keep the email under 100 words
- No hype, no pressure, no sales language
- Reference something specific about the person or their company
- Ask for a 15-minute virtual coffee chat, not a job
- Be genuine and curious. You are learning, not selling
- Include a specific reason why you are reaching out to them personally
- Sign off warmly

## Structure

- **Subject line**: Short and personal. Reference their company or a shared interest.
- **Opening**: One sentence connecting you to them or their company.
- **Context**: One sentence about who you are (international grad, F1 OPT, looking to learn).
- **Ask**: One sentence requesting a 15-minute virtual coffee chat.
- **Close**: Warm sign-off with your name.

## Example

Subject: Quick question about engineering at [Company]

Hi [Name],

I came across [Company]'s work on [specific project or product] and found it really interesting. I am an international graduate on F1 OPT exploring opportunities in [field], and I would love to hear about your experience at [Company].

Would you be open to a 15-minute virtual coffee chat sometime this week or next?

Thanks so much,
[Your Name]
Verify the agent can use the skill

The files are in place. Now you need to confirm the agent can actually read them, search the web, and produce a structured lead with a coffee chat email.

Why test with just 1 lead?

Asking for a single lead lets you quickly check quality without waiting for 5 full results. If the format, search behavior, or email tone is off, you can adjust before committing to the daily cron job.

  • Send a test message to your agent via Discord (mention your bot in a channel) or via the CLI. Use this prompt:
Find 1 networking contact at a company in New York that hires F1 OPT workers. Use the job-search-leads skill. Draft a coffee chat email for them.
  • Wait for the agent to respond. This may take 30 seconds to a minute depending on your model and web search speed.

You should see the agent perform a web search, return a structured lead with fields like name, title, company, and city, and include a personalized coffee chat email draft.

Getting a poor or empty response?

Free models vary in quality. If the agent returns generic results, ignores the skill file, or does not use web search, try switching to a different free model by running:

openclaw models scan --set-default

Select a different model with tool support and test again. Some free models handle structured output and tool calling better than others.

Also make sure your Brave Search integration is still working. If the agent skips web search entirely, it may be falling back to its training data instead of live results.

Help me debug why my agent is not using the skill file or web search.

Customize the skill for your field

The skill file targets general tech roles. If you are looking for positions in a specific area (data engineering, product management, frontend), edit the Contact type section in job-search-leads.md to mention those specific titles. The more specific you are, the better leads the agent will find.

Your skill files are ready and tested. Next, you will wire everything into a daily cron job that runs automatically every weekday morning.

Set Up the Daily Cron Job

Your skill file and coffee chat template are tested and working. The agent can find leads, search the web, and draft personalized emails on demand.

The problem is that running this manually every morning defeats the purpose. In this step, you'll schedule a cron job that wakes up your OpenClaw agent every weekday at 8 AM and delivers fresh leads to your Discord channel automatically.

In this step, get ready to:
  • Create a cron job that runs every weekday morning at 8 AM Eastern.
  • Test the job by running it manually and checking Discord for results.
  • Fine-tune the prompt or schedule based on the quality of leads delivered.
Create the recurring cron job

A cron job is a scheduled task that runs automatically on a repeating schedule. OpenClaw supports cron expressions, which let you define the exact minute, hour, and days of the week the agent should execute a task.

Why cron instead of heartbeat?

OpenClaw has two scheduling mechanisms: heartbeats and cron jobs. Heartbeats run at approximate intervals and are designed for periodic monitoring tasks.

Cron is the better fit here because you need exact timing (every weekday at 8 AM). Cron jobs also run in isolated sessions by default, so each morning's lead search starts fresh without leftover context from previous runs.

  • Create the daily lead-finding cron job by running this command:
openclaw cron add \
  --name "Daily Coffee Chat Leads" \
  --cron "0 8 * * 1-5" \
  --tz "America/New_York" \
  --session isolated \
  --message "Run the job-search-leads skill. Find 5 new networking contacts at companies in New York or Austin that are known to hire F1 OPT workers. For each contact, provide: name, title, company, city, why they are a good contact, and a personalized coffee chat email draft using the coffee-chat-template. Format the output clearly with numbered entries. Make sure all 5 leads are different from any previously found leads." \
  --announce \
  --channel discord

What does each flag do?

  • --name gives the job a human-readable label so you can identify it in your cron list.
  • --cron "0 8 * * 1-5" sets the schedule: minute 0, hour 8, any day of month, any month, Monday through Friday.
  • --tz "America/New_York" pins the schedule to Eastern time so 8 AM means 8 AM ET regardless of your system clock.
  • --session isolated starts a fresh session for every run. This prevents old conversation context from influencing new results.
  • --message is the prompt the agent receives each time the job fires. This is where your skill file and template get referenced.
  • --announce tells OpenClaw to send the output to your configured channel.
  • --channel discord routes the announcement to your Discord server.
  • Verify the job was created by running:
openclaw cron list

You should see your "Daily Coffee Chat Leads" job listed with its cron schedule, timezone, and status. Note the job ID in the leftmost column. You'll need it in the next substep.

Don't see your cron job in the list?

  • Make sure the OpenClaw gateway is still running. If you closed your terminal since the last step, restart it with `openclaw gateway` in a separate terminal tab.
  • Check that your cron expression is wrapped in quotes. Without quotes, your shell may interpret the asterisks as wildcards.

Still stuck? Help me troubleshoot why my openclaw cron add command didn't create a job.

Test the cron job manually

You don't have to wait until 8 AM tomorrow to see if the job works. OpenClaw lets you force-run any cron job immediately.

  • Force-run your cron job by running this command:
openclaw cron run [[JOB_ID="your cron job ID from openclaw cron list"]]

What happens during a manual run?

The agent spins up a fresh isolated session, reads your message prompt, and starts searching the web for companies and contacts. This can take a few minutes depending on how many searches the agent needs to run.

Once it finishes, the results are announced to your Discord channel automatically because of the --announce flag.

  • Open your Discord server and check the channel where your bot posts.

You should see a message with 5 numbered leads, each containing a name, title, company, city, reasoning, and a coffee chat email draft.

No message appeared in Discord?

  • Give it a few minutes. The agent needs time to run multiple web searches and draft 5 emails. Free models can be slower than paid ones.
  • Confirm the gateway is still running in your other terminal tab. If it crashed, restart it with `openclaw gateway`.
  • Double-check that your bot is still a member of your server. Open your server's member list and look for the bot's name.

Need more help? Help me figure out why my OpenClaw cron job didn't deliver results to Discord.

Fine-tune if needed

If the leads aren't quite right (wrong locations, irrelevant companies, or generic emails), you can edit the cron job without deleting and recreating it.

  • To refine the prompt, edit the cron job's message by running:
openclaw cron edit [[JOB_ID="your cron job ID"]] --message "your refined prompt here"

What should I refine?

  • If leads are in the wrong city, make the location requirement more explicit in the message.
  • If emails feel generic, add more detail about your background and interests to the message so the agent can personalize better.
  • If the agent returns fewer than 5 leads, try switching to a different free model with `openclaw models scan --set-default` and re-running.
  • To adjust the schedule (for example, running at 9 AM Central instead), edit the cron expression and timezone:
openclaw cron edit [[JOB_ID="your cron job ID"]] --cron "0 9 * * 1-5" --tz "America/Chicago"

Free model quality

Free models on OpenRouter can vary in quality. If your leads consistently feel low-effort or incomplete, the model may be the bottleneck. You can upgrade to a cheap paid model (some cost fractions of a cent per request) for noticeably better results.

  • After making edits, re-test with the same force-run command:
openclaw cron run [[JOB_ID="your cron job ID"]]
  • Check Discord again and compare the new results to your first run.

Once you're happy with the lead quality and email drafts, your daily pipeline is locked in. Next up, you'll verify the full end-to-end flow and make sure the gateway stays running so your agent never misses a morning delivery.

Verify the Full Pipeline

Your cron job is created and you've seen it deliver leads to Discord. The hard part is done.

Before you call it a day, you need to make sure the leads are actually useful and that the pipeline keeps running every morning without you. In this step, you'll review the quality of your delivered leads and ensure the OpenClaw gateway stays alive so your cron job fires on schedule.

In this step, get ready to:
  • Review lead quality and completeness in Discord.
  • Keep the OpenClaw gateway running persistently for daily cron execution.
Confirm Discord delivery and review lead quality

A lead that's missing a name or has a generic email template is not worth your time. You need to check that every lead the agent delivers is complete and actionable.

  • Open Discord and navigate to your Job Search HQ server.
  • Find the message your OpenClaw bot delivered from the manual test run in Step 4.
  • For each of the 5 leads, confirm the following fields are present:
  • A real person's full name (not a placeholder like "John Doe").
  • Their job title (e.g., Engineering Manager, Senior Recruiter).
  • Company name.
  • City (New York or Austin).
  • A reason why this person is a good contact.
  • A personalized coffee chat email draft that references something specific about the person or company.

What does a good lead look like?

A strong lead names a real person you can actually find on LinkedIn. The coffee chat email should feel personal, not like a form letter.

If the email just swaps the company name into a template without referencing anything specific, that's a sign the agent needs a more detailed prompt.

If leads are missing fields, contain fabricated names, or the emails feel generic, you can refine the cron job's prompt to give the agent better instructions.

  • Edit your cron job's message to be more specific by running this command:
openclaw cron edit [[JOBID="your cron job ID from openclaw cron list"]] --message "your refined prompt here"

Prompt refinement ideas

If companies are irrelevant, add specific industries to the prompt (e.g., "focus on fintech and healthtech companies"). If emails are generic, add "reference a specific product, blog post, or news item about each company."

  • After editing the prompt, re-run the cron job to test your changes:
openclaw cron run [[JOBID="your cron job ID from openclaw cron list"]]
  • Check Discord again for the new batch of leads.
  • Repeat the edit-and-run cycle until the leads meet your quality bar.

Why might free models produce weaker results?

Free models on OpenRouter are often smaller or more heavily quantized. They can struggle with complex multi-step instructions like "search, verify, and draft."

If quality is consistently poor after prompt refinement, try switching to a different free model with openclaw models scan --set-default and testing again.

Leads look fabricated or incomplete?

Spot-check one or two names by searching for them on LinkedIn. If the agent is making up names, add this line to your cron message: "If you cannot verify a person's name, say so and provide the company with a note to check LinkedIn manually."

If leads are only from one city, make your prompt more explicit: "Include at least 2 leads from New York and at least 2 from Austin."

Still getting poor results? Help me improve the quality of leads my OpenClaw agent finds. The emails feel generic and some names seem fabricated.

Ensure the gateway stays running

Your cron job is scheduled to fire every weekday at 8 AM Eastern. For that to actually happen, the OpenClaw gateway process must be running when the clock strikes 8.

Right now, the gateway is running in your terminal from an earlier step. If you close that terminal window, the gateway stops and your morning leads never arrive.

  • Go to the terminal tab where openclaw gateway is currently running.
  • Press Ctrl+C to stop the gateway.
  • Restart the gateway in the background so it survives terminal closure, by running this command:
nohup openclaw gateway &

What does this command do?

nohup stands for "no hang up." It tells your Mac to keep the process running even after you close the terminal window.

The & at the end pushes the process to the background so you get your terminal prompt back immediately.

  • Confirm the gateway is running in the background by running:
ps aux | grep openclaw
  • You should see a line containing openclaw gateway in the output.

Prefer keeping a terminal tab open?

If nohup feels unfamiliar, you can skip it and just keep a dedicated terminal tab open with openclaw gateway running. The tradeoff is that closing the tab stops the gateway. Pick whichever approach you'll remember to keep alive.

Gateway not showing in the process list?

Make sure you stopped the old gateway with Ctrl+C before running the nohup command. Two gateway instances can conflict.

Check that your DISCORD_BOT_TOKEN environment variable is still set by running echo $DISCORD_BOT_TOKEN. If it's empty, re-export it before starting the gateway.

My OpenClaw gateway won't start in the background with nohup. Help me troubleshoot my nohup openclaw gateway setup.

  • Send a quick test message to your bot in Discord: @OpenClaw hello.
  • The bot should reply within a few seconds, confirming the background gateway is connected and responsive.

Your gateway needs to survive reboots too

If you restart your Mac, the nohup process stops. After a reboot, re-export your DISCORD_BOT_TOKEN and run nohup openclaw gateway & again to get your morning leads flowing.

Secret mission

Add a Weekly Outreach Summary

Your daily lead pipeline is delivering 5 contacts every weekday morning. But are you keeping track of patterns across the week? Add a weekly review cron job that summarizes your outreach and tells you where to focus next.

Before you go

Clean Up Your Resources

Decide whether to keep your resources running, pause them to come back later, or delete them entirely. This project runs on free tools and APIs, so there are no ongoing cloud costs.

Resources you used:

  • Private Discord server ("Job Search HQ").
  • Discord bot application (in the Discord Developer Portal).
  • OpenRouter account and free API key.
  • OpenClaw configuration (Discord channel, model settings).
  • Skill file at ~/.openclaw/workspace/skills/job-search-leads.md.
  • Coffee chat template at ~/.openclaw/workspace/coffee-chat-template.md.
  • Daily cron job ("Daily Coffee Chat Leads").
  • OpenClaw gateway process (running locally).

Keep everything running

No action needed. Choose this if you are still actively using the daily lead pipeline and want it to keep delivering leads every weekday morning.

  • Keep the OpenClaw gateway running in a terminal tab or via nohup openclaw gateway &.
  • Your Discord server, bot, skill files, cron job, and OpenRouter key all stay as-is.
  • The Brave Search free tier allows 2,000 queries per month. At 5 leads per day, you are well within that limit.

Pause - I'll come back to this later

Stop the gateway to free up local resources. Your configuration, skill files, and cron job definition are all saved on disk and will still be there when you restart.

  • Stop the OpenClaw gateway by pressing Ctrl+C in the terminal where it is running.
  • If you started it with nohup, find the process ID and stop it.
  • Your Discord server, bot, cron job, and skill files remain intact. The cron job simply will not fire until the gateway is running again.
  • To resume later, open a terminal and run openclaw gateway. Your daily leads will start flowing again on the next scheduled run.

Delete - I don't want to use this again

Remove all project resources and start fresh. This deletes the cron job, skill files, Discord bot, and server.

  • Stop the OpenClaw gateway by pressing Ctrl+C in the terminal.
  • Delete the cron job by running openclaw cron list to find the job ID, then openclaw cron remove <job-id>.
  • Delete the skill file and template from your workspace.
  • In the Discord Developer Portal, go to your "OpenClaw" application and click Delete App to remove the bot.
  • In Discord, right-click your "Job Search HQ" server and select Delete Server.
  • Optionally, revoke your OpenRouter API key at openrouter.ai/keys.

Mission accomplished

That's a Wrap!

Nice work! You just built a fully automated daily networking pipeline for your F1 OPT job search.

Every weekday morning, your OpenClaw agent wakes up, researches 5 fresh contacts at companies in New York and Austin, drafts personalized coffee chat emails, and delivers everything to your private Discord channel.

Here's what you learned:

  • Created a Discord bot from scratch, connected it to OpenClaw, and configured OpenRouter with a free model for $0 inference.
  • Wrote a custom skill file that targets companies known to hire F1 OPT workers, paired with a coffee chat email template for warm, personalized outreach.
  • Configured a daily cron job that automatically researches 5 networking contacts and delivers leads with drafted emails to your Discord channel every weekday morning.
  • Secret Mission: Added a weekly outreach summary cron job to review your networking progress and suggest focus areas for the week ahead.

Ready to quiz yourself?