Install
openclaw skills install swelistHelps you find tech internships and new-grad jobs, track every application locally, and prep for interviews — no sign-up needed
openclaw skills install swelistswelist is a job-seeker CLI for finding software engineering internships and new-grad positions in real time, plus a local SQLite tracker for every application — no account, no API key, no subscription required. It pulls live data from SimplifyJobs, filters by role, location, and timeframe, and pairs with an AI writing assistant (jobgpt) for interview prep.
Trigger when the user asks to:
Keywords: find internships, new grad jobs, job listings, job search, application tracker, track my application, update application status, swelist, job search CLI, software engineer jobs, tech internship, interview prep, STAR answer, why this company
swelist run — stateless, read-only (fetches live data, no local state)swelist jobgpt — stateless (calls OpenAI API, no local state)swelist tracker — stateful (reads/writes local SQLite at ~/.offerplus/applications.db)swelist is a job-seeker CLI with three subcommand groups:
swelist run — retrieves recently added technology internship and
new‑graduate job postings from curated public GitHub repositories and
renders them in a predictable, text-based format.swelist jobgpt — AI-powered writing assistant for interview prep
(behavioral answers, "why this company", general career Q&A).swelist tracker — local SQLite application tracker; add, update,
query, list, and export job applications without any external account.It is optimized for: automation pipelines, periodic polling agents, and human-in-the-loop job search workflows.
Data is fetched live at runtime.
pip install swelist
swelist [--role ROLE] [--timeframe TIMEFRAME] [--location LOCATION]
The tool accepts only CLI flags. No stdin is consumed.
Controls which category of jobs to retrieve.
Value Meaning
internship Internship roles (default) newgrad New‑graduate roles
Example:
swelist --role newgrad
swelist --role internship --timeframe lastweek --location "Seattle, Remote"
Controls recency filtering.
Value Time Window
lastday Last 24 hours lastweek Last 7 days lastmonth Last 30 days
Example:
swelist --timeframe lastweek
swelist --role newgrad --timeframe lastmonth --location "New York, Boston"
Filters job postings by geographic location.
Input Meaning
Single location Canada or Toronto
Multiple locations (comma-separated) "Boston, New York, Remote"
State code (2-letter) CA matches "San Francisco, CA"
Example:
swelist --location Toronto
swelist --location "Boston, New York, Remote"
swelist --role newgrad --timeframe lastweek --location "San Francisco, Remote"
swelist --role internship --timeframe lastmonth --location CA
Local SQLite tracker for job applications synced from Gmail.
Before invoking any tracker command, read ~/.claude/profile.md:
Integrations > Tracker Backend — if tracker_backend is notion,
the tracker subcommand is not applicable; use the application-manager skill instead.tracker_backend is sqlite (or blank, defaulting to sqlite for local use),
read SQLite DB path from profile.md. Use that value as --db PATH.
Fall back to ~/.offerplus/applications.db only if the field is blank.# Resolve DB_PATH from profile.md first, then:
swelist tracker init [--db DB_PATH]
swelist tracker add "<Company — Role>" --status <S> [--job-id <id>] [--applied-on YYYY-MM-DD] [--db DB_PATH]
swelist tracker update "<Company — Role>" --status <S> [--notes <text>] [--db DB_PATH]
swelist tracker get "<Company — Role>" [--db DB_PATH] # JSON; exit 1 + null if not found
swelist tracker list [--status S] [--company C] [--db DB_PATH]
swelist tracker export [--format csv|json] [--db DB_PATH]
If the DB does not exist yet, run tracker init before any other tracker command.
Input: swelist tracker add "Stripe — Backend Engineer" --status "In progress" --job-id S789 --applied-on 2026-05-18
Added: Stripe — Backend Engineer → In progress
Input (duplicate):
Skipped (already exists): Stripe — Backend Engineer
Input: swelist tracker update "Amazon — SDE, AWS" --status "Rejected"
Updated: Amazon — SDE, AWS → Rejected
Input (not found):
Not found: Acme — Engineer
Input: swelist tracker get "Amazon — SDE, AWS"
{"name": "Amazon — SDE, AWS", "status": "Rejected", "job_id": "10414382", "applied_on": "2026-05-17", "notes": null, "updated_at": "2026-05-18 01:10:00"}
Input (not found) — exits with code 1:
null
Input: swelist tracker list
Application Status Job ID Applied Updated
Amazon — Software Development Engineer, AWS In progress 10414382 2026-05-17 2026-05-17 18:30:00
Amazon — Software Development Engineer In progress 3146673 2026-04-21 2026-04-21 20:50:00
Amazon — Software Development Engineer, Playback Team Rejected 3083065 2025-12-02 2025-12-02 17:20:00
3 application(s)
Input: swelist tracker list --status "In progress" --company amazon
Application Status Job ID Applied Updated
Amazon — Software Development Engineer, AWS In progress 10414382 2026-05-17 2026-05-17 18:30:00
Amazon — Software Development Engineer In progress 3146673 2026-04-21 2026-04-21 20:50:00
2 application(s)
Input: swelist tracker export --format json
[
{
"name": "Amazon — Software Development Engineer, AWS",
"status": "In progress",
"job_id": "10414382",
"applied_on": "2026-05-17",
"notes": null,
"updated_at": "2026-05-17 18:30:00"
},
{
"name": "Amazon — Software Development Engineer, Playback Team",
"status": "Rejected",
"job_id": "3083065",
"applied_on": "2025-12-02",
"notes": null,
"updated_at": "2025-12-02 17:20:00"
}
]
Input: swelist tracker export --format csv
name,status,job_id,applied_on,notes,updated_at
Amazon — Software Development Engineer,In progress,3146673,2026-04-21,,2026-04-21 20:50:00
Amazon — Software Development Engineer Playback Team,Rejected,3083065,2025-12-02,,2025-12-02 17:20:00
Each job entry contains:
Input: swelist --role internship --timeframe lastweek --location "Seattle, Remote"
Welcome to swelist.com
Last updated: Sun May 17 18:42:01 2026
Found 1284 tech internships from 2025Summer-Internships
Found 892 new-grad tech jobs from New-Grad-Positions
Sign-up below to receive updates when new internships/jobs are added
Found 3 postings for location 'Seattle, Remote' in TimeFilter.lastweek
Company: Amazon
Title: Software Development Engineer Intern
locations: ['Seattle, WA', 'Remote']
Link: https://www.amazon.jobs/en/jobs/2345678
Company: Microsoft
Title: Software Engineering Intern
locations: ['Redmond, WA', 'Remote']
Link: https://jobs.careers.microsoft.com/us/en/job/1234567
Company: Stripe
Title: Software Engineer, Intern
locations: ['Remote']
Link: https://stripe.com/jobs/listing/software-engineer-intern/9876543
When no postings match the filters:
# No jobs in the selected timeframe:
No postings found in TimeFilter.lastday
# Jobs exist but none match the location:
No postings found for location 'Austin' in TimeFilter.lastday
Agents should treat either message as a zero-result signal and not retry with the same flags.
Behavior may evolve with upstream data sources. CLI flags are considered stable within a major version.
This document defines the operational capabilities, invocation contract,
and usage semantics of the jobgpt command for AI-powered job application
assistance.
jobgpt is an AI writing assistant that helps job seekers prepare for
interviews and job applications by generating compelling answers and career
advice.
It is optimized for: - Interview preparation - Application materials - Career guidance
Ask any career or job-search question.
jobgpt ask "Your question here"
Parameters:
Options:
--model: OpenAI model to use (default: gpt-4o)--copy: Copy output to clipboard (flag)Example:
jobgpt ask "What should I focus on in my first internship?"
jobgpt ask "How do I negotiate salary?" --copy
Sample output:
╭─ Career Advice ────────────────────────────────────────────────────╮
│ │
│ Focus on three things in your first internship: │
│ │
│ 1. **Shipping something real** — even a small feature that goes │
│ to production teaches you more than any tutorial. │
│ 2. **Building relationships** — your intern cohort and your │
│ manager are your longest-lasting professional network. │
│ 3. **Asking good questions** — juniors who ask precise, well- │
│ researched questions are remembered positively. │
│ │
╰─────────────────────────────────────────────────────────────────────╯
Generate a compelling answer to "Why do you want to work at [Company]?"
jobgpt why-company "Company Name" --background "Your background"
Parameters:
Options:
--background: Your background summary (optional, recommended)--model: OpenAI model to use (default: gpt-4o)--copy: Copy output to clipboard (flag)Example:
jobgpt why-company "Google" --background "Software Engineering student with Python and web development experience"
jobgpt why-company "Meta" --background "Full-stack developer with React and Node.js expertise" --copy
Generate a STAR-format answer to a behavioral interview question.
jobgpt behavioral "Question here" [--resume path/to/resume.txt]
Parameters:
Options:
--resume: Path to resume text file (optional)--model: OpenAI model to use (default: gpt-4o)--copy: Copy output to clipboard (flag)Example:
jobgpt behavioral "Tell me about a time you dealt with conflict on a team"
jobgpt behavioral "Describe your biggest failure and how you learned from it" --resume resume.txt --copy
Sample output:
╭─ STAR Answer ───────────────────────────────────────────────────────╮
│ │
│ **Situation:** During my internship at Acme, our team disagreed │
│ on the API design for a new service — two engineers wanted REST, │
│ one pushed for GraphQL. │
│ │
│ **Task:** As the engineer writing the initial spec, I needed to │
│ drive us to a decision before our sprint planning the next day. │
│ │
│ **Action:** I drafted a one-page trade-off doc comparing latency, │
│ client complexity, and team familiarity for both options, then │
│ scheduled a 30-minute sync. I proposed REST with a versioning │
│ convention that addressed the GraphQL advocate's flexibility │
│ concerns. │
│ │
│ **Result:** We reached consensus in 20 minutes. The service │
│ shipped on time and has had zero breaking-change incidents in │
│ six months. │
│ │
╰──────────────────────────────────────────────────────────────────────╯
OPENAI_API_KEY environment variable)OPENAI_API_KEY environment variable produces clear error messageOPENAI_API_KEY)End of document.