moonlighter
The job-application assistant that leaves the last word to you: scans the job boards you choose, scores postings against your profile, and drafts answer sheets from your own data. Self-hosted MCP server + CLIs.
Install / Use
claude mcp add albertosca -- npx -y github:albertosca/moonlighterIf the server publishes to npm under a different name, use that package instead β check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
AI & Machine LearningSupported Platforms
Our assessment of moonlighter
moonlighter scores 79/100 on our quality scale, 697th of 933 AI & Machine Learning skills we index.
Its MCP Server is 8.0 KB long, well organised into 8 sections with 1 code example: a thorough specification that gives an agent plenty to work with.
It has 10 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated yesterday, so moonlighter is actively maintained.
- It is released under AGPL-3.0, a copyleft license: you can use it, but modified versions you distribute must carry the same license.
- Its trust signals score 97/100, with no cautions. These come from repository metadata, not a code audit β read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands.
Automated pattern scan on 2026-10-01. It catches known dangerous patterns, not every risk β read a skill before letting an agent act on it.
moonlighter compared with similar skills
All 4 of these similar skills score higher than moonlighter; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| moonlighter (this skill)by albertosca | 79 | 10 | 1d ago | MCP Server |
| claude-memby thedotmack | 100 | 95.1k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 87.2k | 16d ago | CLAUDE.md |
| Understand-Anythingby Egonex-AI | 100 | 84.9k | 3d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 74.2k | today | CLAUDE.md |
Frequently asked questions
- How do I install moonlighter?
- Run
claude mcp add albertosca -- npx -y github:albertosca/moonlighter. The install tabs above show the steps for each supported agent. - Which AI agents does moonlighter work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is moonlighter safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. It is AGPL-3.0-licensed and scores 97/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is moonlighter still maintained?
- The repository was last updated yesterday, so moonlighter is actively maintained.
Skill content
View source on GitHubπΊπΈ English Β· π§π· PortuguΓͺs
moonlighter
The job-application assistant that leaves the last word to you.
Scans the job boards you choose, scores each posting against your profile, and drafts a complete answer sheet from your own data, flagging what it can't answer.
Built by Alberto Cavalcanti Β· Connect on LinkedIn Β· Read the docs Β· Install
<!-- facts -->1,900+ tests Β· 100% branch coverage (CI-gated) Β· 5 packages on PyPI Β· mypy strict<!-- /facts -->Sixty seconds of it
You: scan my companies
moonlighter: 3 sources scanned β 41 postings, 38 already known, 3 new
β NEW β Acme Robotics / Senior Backend Engineer
Score: 8.1/10 (threshold: 6.5)
β NEW β Nimbus Health / Staff Engineer
Score: 7.4/10
β Vandelay Industries / .NET Architect β 3.2/10, archived (hard filter: .NET)
You: prepare the application for the Acme one
moonlighter: Senior Backend Engineer β Acme Robotics
[1/9] Full name (required)
Ana Lima
[2/9] Email (required)
ana.jobs+k3xv9qhm@gmail.com β tracking alias: Acme's reply will match this application by itself
[3/9] Why do you want to work at Acme? (required)
Three sentences drafted from Ana's profile.
[4/9] Desired salary (required)
BRL 28.000/month
[5/9] Do you hold a US work visa? (required)
!! I DON'T KNOW β no basis in your profile to answer
1 of 9 need you
You: (review it, paste it into the form, hit send β moonlighter never does)
The conversation is illustrative: Claude relays the tool output in its own words. The gap is real behaviour β the model is told to answer UNKNOWN when your profile gives it no basis, and the sheet hands that question back to you.
How it works
<picture> <source media="(prefers-color-scheme: dark)" srcset="assets/diagrams/how-it-works-dark.svg"> <img alt="moonlighter scans, scores and drafts; only you paste and send the application" src="assets/diagrams/how-it-works-light.svg"> </picture>- Scan β reads job boards on Greenhouse, Lever, Ashby, Recruitee, Workable, SmartRecruiters and InHire for the companies you list, plus optional job portals you switch on in config.
- Evaluate β an LLM scores each posting against your profile; postings below your threshold are archived.
- Prepare β drafts an answer for every question on the form into one sheet you review, paste and send; optionally, a one-page CV tailored to the posting.
- Track β matches recruiter replies in Gmail to the right application by its
+aliasand moves your pipeline forward.
You drive it from a Claude conversation through MCP tools; the scan, apply and email packages also install JSON command lines for shells and cron jobs.
What it won't do
- It never sends an application. It drafts the sheet; you paste the answers into the employer's form and send it yourself.
- Your pipeline lives in a local SQLite file. Jobs, drafts and application history are stored under
MOONLIGHTER_HOME. What leaves your machine is only what goes to the LLM and the APIs you configure β Claude, Gmail, the job boards. PRIVACY.md has the details. - The model never answers a question the guards recognise as salary, compliance or demographic. Those come from your profile or config, or are left to you. The guards match known phrasings, and when you paste in a page's text, the model still reads all of it to find the questions.
The model can still get an answer wrong β which is why every sheet is yours to review.
Engineering decisions
Applications go out under your name, so the bar is trust. Each decision below bought safety at a price; the Engineering page records what each one cost and where to check it in the code.
| Decision | Trade-off we accepted | |---|---| | Stopped driving the browser | Every application costs you a paste and a click | | Deterministic guards around the drafting step | They recognise known phrasings only | | Model text escaped into the CV's LaTeX, never validated | Model output can't carry LaTeX formatting beyond bold | | Five slices with a tested import boundary and lockstep releases | Every release bumps five packages by hand | | 100% branch coverage as a gate, gates proven by canaries | Every new branch costs a test |
Install
You need uv (it fetches Python 3.14 for you) and an LLM backend: the Claude Code CLI by default, or an Anthropic API key.
- Claude Code:
/plugin marketplace add albertosca/moonlighter, then/plugin install moonlighter@moonlighter. - Any other MCP client: register the server command
uvx moonlighter. - Then:
uvx moonlighter initwrites your config; fill inprofile.yamlandcompany_list.yaml, and ask Claude to "scan my companies".
Documentation
- Getting started β requirements, the setup wizard, registering the MCP server
- Tailored CV β a one-page LaTeX CV per posting, built from bullets you curated
- Answer bank β screening answers you approved, reused on the next application
- Command line β a JSON CLI per slice, exit codes, what each install gives you
- MCP tools β the 18 tools Claude calls on your behalf
- Extensions β add a job source as a separate package
Questions and troubleshooting: FAQ. Working on the code: CONTRIBUTING.md.
License
AGPL-3.0 β see LICENSE: use it, fork it, modify it, as long as what you distribute or serve over a network stays open. Want to offer moonlighter as a hosted or paid service without the AGPL's obligations? A commercial license is available β open an issue to start that conversation; the CLA every contributor signs keeps that offer possible.
DISCLAIMER.md covers terms of service, automation and LLM backend usage; PRIVACY.md covers what the tool stores and where it goes.
Built by Alberto Cavalcanti β Connect on LinkedIn
Related Skills
claude-mem
95.1kPersistent Context Across Sessions for Every Agent β Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
87.2kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu β one CLI, zero API fees.
Understand-Anything
84.9kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
headroom
74.2kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit β see the Safety scan above for what the skill file itself contains.
