Install
openclaw skills install jobs-hunter-clawAutomate job discovery, application submission, status tracking, and activity logging using Google Sheets as the central data store for your job hunt.
openclaw skills install jobs-hunter-clawUnified skill for job hunting automation: Discover → Apply → Track.
ClawHub: https://clawhub.ai/QuantDeveloperUSA/jobs-hunter-claw
GitHub: https://github.com/ABFS-Inc/jobs-hunter-claw
# Install the skill
clawhub install jobs-hunter-claw
# Verify installation
clawhub list
# Fix executable permission (required after install)
chmod +x /path/to/skills/jobs-hunter-claw/scripts/job-tracker.sh
# Clone to your skills directory
git clone https://github.com/ABFS-Inc/jobs-hunter-claw.git /path/to/skills/jobs-hunter-claw
The skill uses gog for Google Sheets access:
# Install gog
brew install steipete/tap/gogcli
# Authenticate with Google
gog auth credentials /path/to/client_secret.json
gog auth add your@gmail.com --services sheets
Create a Google Sheet with these tabs:
| Tab | Purpose |
|---|---|
| Jobs | Main tracker (columns A-P) |
| Activity Log | Timestamped event history |
| Add or Edit Job | Form interface (optional) |
See references/google-sheet-setup.md for detailed setup.
Set the environment variable with your Google Sheet ID:
export JOB_TRACKER_SPREADSHEET_ID="your-google-sheet-id"
The ID is found in your Google Sheet URL:
https://docs.google.com/spreadsheets/d/[THIS-IS-THE-ID]/edit
For persistent configuration, add to your shell profile (~/.bashrc, ~/.zshrc):
echo 'export JOB_TRACKER_SPREADSHEET_ID="your-google-sheet-id"' >> ~/.bashrc
For OpenClaw agents, set in the agent's environment or TOOLS.md.
# Set your spreadsheet ID first
export JOB_TRACKER_SPREADSHEET_ID="your-google-sheet-id"
# View all commands
./scripts/job-tracker.sh help
# Add a discovered job
./scripts/job-tracker.sh add --company "Morgan Stanley" --role "AI Architect" --source LinkedIn
# List active interviews
./scripts/job-tracker.sh list --status interview
# Log an event
./scripts/job-tracker.sh log JOB002 --event interview_scheduled --details "3rd round Monday 10am"
# Search jobs
./scripts/job-tracker.sh search "citi" --columns company,role
Create a dedicated agent to run job hunting automation.
This skill requires google/gemini-flash-latest for optimal performance and cost efficiency.
Gemini Flash provides:
Do not use Opus, Sonnet, or other premium models — they're overkill for this skill and will incur unnecessary costs.
openclaw agents create job-hunter \
--model google/gemini-flash-latest \
--workspace /path/to/workspace-job-hunter
Create IDENTITY.md in the agent workspace:
# IDENTITY.md
- **Name:** [First Name] [Last Name]
- **Creature:** Career automation assistant
- **Vibe:** Proactive, organized, candidate-focused
- **Emoji:** 🎯
Create TOOLS.md in the agent workspace with the spreadsheet ID:
# TOOLS.md
## Environment Variables
Set before running job-tracker commands:
- `JOB_TRACKER_SPREADSHEET_ID` — Your Google Sheet ID
## Jobs Hunter Claw Skill
**Installed at:** `/openclaw/skills/jobs-hunter-claw`
### Usage
```bash
# Set spreadsheet ID
export JOB_TRACKER_SPREADSHEET_ID="your-sheet-id"
# Run commands
/openclaw/skills/jobs-hunter-claw/scripts/job-tracker.sh list
/openclaw/skills/jobs-hunter-claw/scripts/job-tracker.sh add --company "X" --role "Y"
### 4. Configure Heartbeat (Optional)
Create `HEARTBEAT.md` for periodic checks:
```markdown
# HEARTBEAT.md
## Periodic Checks
- [ ] Scan email for recruiter messages
- [ ] Check calendar for upcoming interviews
- [ ] Review jobs with status "Interview" for follow-ups
- [ ] Look for new job postings matching profile
Automate job hunting tasks with OpenClaw cron jobs.
Important: Cron jobs need the spreadsheet ID in the task prompt or agent environment.
openclaw cron add \
--id job-email-scan \
--schedule "0 14-23 * * 1-5" \
--agent job-hunter \
--channel "channel:YOUR_DISCORD_CHANNEL_ID" \
--task "Set JOB_TRACKER_SPREADSHEET_ID from TOOLS.md, then scan email for job-related messages. Use /openclaw/skills/jobs-hunter-claw/scripts/job-tracker.sh for updates."
Schedule: Every hour from 9 AM - 6 PM EST (14-23 UTC), Monday-Friday.
openclaw cron add \
--id job-weekly-review \
--schedule "0 14 * * 1" \
--agent job-hunter \
--channel "channel:YOUR_DISCORD_CHANNEL_ID" \
--task "Weekly pipeline review. Set JOB_TRACKER_SPREADSHEET_ID, then:
1. job-tracker.sh list --status Interview
2. job-tracker.sh list --status Applied
3. job-tracker.sh list --status Discovered
Report summary and recommended actions."
Schedule: Monday 9 AM EST (14:00 UTC).
# List all cron jobs
openclaw cron list
# Pause/resume a job
openclaw cron pause job-email-scan
openclaw cron resume job-email-scan
# Delete a job
openclaw cron delete job-email-scan
| Command | Description |
|---|---|
add | Add new job with auto-generated ID |
update | Modify existing job fields |
delete | Delete a job (clears row, preserves logs) |
log | Add timestamped activity entry |
show | Display detailed job view |
list | List jobs with optional filters |
search | Search with regex or fuzzy matching |
logs | View activity history |
next-id | Get next available job ID |
schema | Show valid statuses and event types |
help | Show command help |
./scripts/job-tracker.sh add \
--company "Goldman Sachs" \
--role "VP, AI Engineering" \
--location "NYC" \
--salary "$200k-$275k" \
--source "LinkedIn" \
--url "https://linkedin.com/jobs/view/123456" \
--status Discovered
Required: --company, --role
./scripts/job-tracker.sh update JOB015 \
--status Applied \
--resume "AI-Architect-Resume-v3" \
--applied-date "2026-03-19"
./scripts/job-tracker.sh log JOB015 \
--event interview_scheduled \
--details "3rd round with VP Engineering, Monday 10am"
# Delete with confirmation prompt
./scripts/job-tracker.sh delete JOB015
# Delete without confirmation (for scripts/automation)
./scripts/job-tracker.sh delete JOB015 --force
Note: Delete clears the row data but preserves the activity log history.
# Simple text search
./scripts/job-tracker.sh search "goldman"
# Search specific columns
./scripts/job-tracker.sh search "AI.*Architect" --columns role --regex
# Fuzzy search
./scripts/job-tracker.sh search "goldmn" --fuzzy
# By status
./scripts/job-tracker.sh list --status interview
# Limit results
./scripts/job-tracker.sh list --limit 10
# JSON output
./scripts/job-tracker.sh list --json
| Status | Meaning |
|---|---|
Discovered | Found but not yet applied |
Applied | Application submitted |
Screening | Initial review/HR screen |
Interview | Active interview process |
Karat Test Scheduled | Technical assessment pending |
Offer | Offer received |
Rejected | Not selected |
Withdrawn | Candidate withdrew |
Accepted | Offer accepted |
Closed | Position no longer available |
The CLI auto-normalizes status to Title Case (interview → Interview).
| Event | Meaning |
|---|---|
discovered | Initial job discovery |
applied | Application submitted |
recruiter_contact | Recruiter reached out |
user_reply | You responded to recruiter |
interview_scheduled | Interview booked |
interview_completed | Interview done |
test_scheduled | Assessment booked |
test_completed | Assessment done |
offer_received | Offer extended |
rejection | Application rejected |
follow_up | Follow-up action needed |
status_change | Status was updated |
note | General note |
Contacts must be Google Contacts links:
https://contacts.google.com/person/c[alphanumeric]
Bypass with --no-strict-contacts flag.
For manual job entry via the Google Sheet form tab, install the Apps Script:
Code.gsscripts/job-tracker-appscript.jsjobs-hunter-claw/
├── SKILL.md # This file
├── README.md # GitHub readme
├── scripts/
│ ├── job-tracker.sh # CLI for CRUD operations
│ └── job-tracker-appscript.js # Google Apps Script
└── references/
└── google-sheet-setup.md # Sheet setup guide
Set the environment variable:
export JOB_TRACKER_SPREADSHEET_ID="your-google-sheet-id"
Install gog CLI:
brew install steipete/tap/gogcli
Authenticate gog with Sheets access:
gog auth add your@gmail.com --services sheets
Fix executable permission:
chmod +x /path/to/skills/jobs-hunter-claw/scripts/job-tracker.sh
Use the full channel format: channel:CHANNEL_ID (not just discord).
google/gemini-flash-latest as required model for cost efficiencydelete command for removing jobs; uses gog sheets clear for proper row clearingJOB_TRACKER_SPREADSHEET_ID env var