Mercury — AI-powered job search companion. LinkedIn profile optimization, job scouting, resume tailoring, and recruiter outreach as agent skills.
Overview
Your AI-powered job search companion Profile Optimizer • Job Scout • Experience Bank • Resume Tailor • Recruiter Outreach Audit and fix your LinkedIn profile, scout roles, tailor your resume, and reach recruiters — with a local dashboard to run it all. Runs your skills via opencode or Claude Code over ACP Installation · Dashboard · Skills · How it works Mercury is a collection of that automate your LinkedIn job search end-to-end, plus a local dashboard to run and track it all. It works with any AI coding assistant that supports skill files (opencode, Cursor, Claude Code, Cline, …) paired with a LinkedIn MCP Server and Chrome MCP. Re-run the . See Installation for prebuilt targets, env overrides, and the source-build fallback. See .github/assets/diagram.html for a visual of how the skills work together. Mercury ships a local web dashboard — a central hub for your whole job search.
README
Your AI-powered job search companion Profile Optimizer • Job Scout • Experience Bank • Resume Tailor • Recruiter Outreach Audit and fix your LinkedIn profile, scout roles, tailor your resume, and reach recruiters — with a local dashboard to run it all.
Runs your skills via opencode or Claude Code over ACP
Installation · Dashboard · Skills · How it works
Mercury is a collection of AI agent skills that automate your LinkedIn job search end-to-end, plus a local dashboard to run and track it all. It works with any AI coding assistant that supports skill files (opencode, Cursor, Claude Code, Cline, …) paired with a LinkedIn MCP Server and Chrome MCP.
Quick Start
# install (or update) — downloads a prebuilt binary and installs the skills
curl -fsSL https://raw.githubusercontent.com/Daniel-Boll/mercury/main/bootstrap.sh | bash
mercury setup # copy skills into your detected agents (opencode, Claude Code, …)
mercury dashboard # open the hub in your browser
Re-run the same curl command any time to update. See Installation for prebuilt targets, env overrides, and the source-build fallback.
The Pipeline
experience-bank (periodic, occasional)
│ read-only achievement pool
▼
profile-optimizer → job-scout → resume-tailor → recruiter-outreach
fix your find the tailor your reach the
profile roles resume recruiters
│
└──→ portal-filler
autofill the
ATS application
Skills
| Skill | What It Does |
|---|---|
| profile-optimizer | Audits your LinkedIn profile against recruiter-search signals and fixes gaps (Open to Work, headline, location, skills, languages, projects, About, experience) |
| job-scout | Searches LinkedIn Jobs by company/location/work-type, pulls full details, and presents a prioritized shortlist with fit assessment |
| experience-bank | “Grill me” — periodically interviews you about new achievements and stores them as a tagged, reusable pool in .mercury/experience/ that resume-tailor draws from. Run occasionally, not per application |
| resume-tailor | Takes your base resume + experience bank + scouted roles and produces role-tailored versions with gap analysis, ATS keyword alignment, and cover letters |
| recruiter-outreach | Finds technical recruiters at target companies, prioritizes by proximity/mutuals, and sends tailored connection requests |
| portal-filler | Autofills an external ATS application form (Greenhouse / Lever / Ashby + generic) from your stored answers and tailored resume, then pauses for you to review and submit — it never submits for you |
See .github/assets/diagram.html for a visual of how the skills work together.
The Dashboard
Mercury ships a local web dashboard — a central hub for your whole job search. Run one command and it opens in your browser:
mercury dashboard
What it gives you:
- Overview — profile score, recruiters contacted/accepted/replied, interviews, jobs
- Profile — recruiter-search metrics charted over time (views, search appearances, connections)
- Search — instant LinkedIn job/people search (hybrid: raw results via the LinkedIn MCP)
- Launch — run any Mercury skill through your agent (opencode or Claude Code) over ACP, with a live agent activity stream
- Recruiters — kanban pipeline (pending → accepted → replied → interviewing → closed)
- Jobs / Applications / Interviews / Activity — everything tracked
The dashboard is a single Bun-compiled binary with the UI embedded. It binds to
127.0.0.1 on a random port with a URL token, and stores everything in a local
SQLite database at ~/.mercury/mercury.db.
The mercury CLI is both the dashboard launcher and the write API the skills
call (mercury recruiter add, mercury job save, …) — one schema, one source of truth.
The .mercury/ Directory
Mercury stores all job search artifacts in a .mercury/ folder in your workspace:
.mercury/
├── base/
│ └── resume.typ # Your canonical base resume
├── experience/
│ ├── {slug}.md # One tagged achievement per entry (experience-bank)
│ └── index.md # Rollup for quick scanning
├── tailored/
│ ├── airbnb-4393940374.typ # Tailored per role (company-jobId)
│ ├── doordash-3969556398.typ
│ └── uber-4380982336.typ
├── cover-letters/
│ ├── airbnb-4393940374.md # Full cover letter per role
│ └── ...
├── reports/
│ ├── airbnb-4393940374.md # Gap/match analysis per role
│ └── ...
├── logs/
│ ├── 2026-06-26T14:30:00.md # Run history, diffs, keyword scores
│ └── ...
└── config.toml # Preferences (base resume path, format, targets)
Everything is tracked — you get full traceability of every tailoring run, outreach wave, and profile change.
Requirements
MCP Servers
- LinkedIn MCP Server — Profile reading, job search, people search, connection requests
- Chrome MCP — For profile edits that LinkedIn doesn’t expose via API (browser automation)
Windows gotcha (LinkedIn MCP login): don’t run the LinkedIn MCP login/setup (
uvx mcp-server-linkedin@latest --login) from an Administrator/elevated terminal. It creates%USERPROFILE%\.linkedin-mcp\{profile,trace-runs}\with admin-only ACLs; your agent then runs the MCP at normal integrity, can’t writetrace-runs\, and it crashes on startup (PermissionError: [WinError 5] Access is denied, shows as failed in/mcp). Run the login from a normal terminal. If you already hit it, fix the ACLs (preserves cookies/login — no re-login needed) from an elevated PowerShell:takeown /F "$env:USERPROFILE\.linkedin-mcp" /R /D Y icacls "$env:USERPROFILE\.linkedin-mcp" /reset /T /C /QThanks to @juanASP for confirming this on Win11.
Browser Setup
Chrome MCP auto-starts a Chrome session on its first tool call — no manual
--remote-debugging-port launch flags required. Just make sure you’re logged
into LinkedIn in that session.
Tip: For multi-step edit flows the skills use Chrome MCP’s
pipelinetool (navigate → snapshot → click/fill in one call), which is faster and more reliable than individual round-trips.
Installation
curl -fsSL https://raw.githubusercontent.com/Daniel-Boll/mercury/main/bootstrap.sh | bash
The one-liner installs (or updates) Mercury and copies the skills:
- detects your OS/arch and downloads a prebuilt binary from the latest GitHub Release (SHA256-verified) →
~/.local/bin/mercury— no build, justcurl; - copies the skills into detected agent dirs (
~/.config/opencode/skills,~/.claude/skills); - falls back to a source build with Bun if no prebuilt binary matches your platform.
Prebuilt targets: linux-x64, linux-arm64, darwin-x64, darwin-arm64, windows-x64.
Windows: run the one-liner from Git Bash (or WSL) — it installs
mercury.exe. There’s nowindows-arm64prebuilt (Bun doesn’t compile it); on Windows-arm64 the installer falls back to a source build with Bun.
Make sure
~/.local/binis on yourPATH(the installer prints a hint if not). Re-run the same command any time to update —mercuryalso prints a one-line notice when a newer release is available.
Env overrides: MERCURY_VERSION (pin a tag, e.g. v0.2.0), MERCURY_FROM_SOURCE=1,
MERCURY_BIN_DIR, MERCURY_SKILLS_DIR, MERCURY_NO_SKILLS=1, MERCURY_NO_UPDATE_CHECK=1.
Installing the skills (mercury setup)
The bootstrap copies skills for you. To (re)install them into your agents at any time — e.g. after adding a new agent:
mercury setup # every detected agent (opencode, Claude Code, Cursor, Codex, …)
mercury setup --agent opencode # just one
mercury setup --all # include agents that aren't detected yet
mercury setup --skills-dir # an explicit directory
For the Launch tab you also need an ACP-capable agent on PATH: opencode
(native opencode acp) or claude (Claude Code, via @zed-industries/claude-code-acp).
Contributing or running from a clone? See AGENTS.md for the build and dev workflow.
Usage
The agent loads these skills automatically when your request matches their description. Examples:
- “Audit my LinkedIn profile and help me get more recruiter messages” → loads
profile-optimizer - “Find backend engineer roles at DoorDash and Airbnb in São Paulo” → loads
job-scout - “Tailor my resume for these 3 roles I scouted” → loads
resume-tailor - “Find recruiters at Uber who hire in Brazil and connect with them” → loads
recruiter-outreach - “Fill out this Greenhouse application for me” (with a job URL) → loads
portal-filler
What Mercury Can Do
Profile Optimizer
- Pull full profile analytics (search appearances, views, impressions)
- Identify specific pitfalls ranked by recruiter-search impact
- Edit via browser automation: Open to Work (recruiter-only), headline, location, top skills, languages, projects, About section, experience descriptions
- Remove internal-mobility cards that signal “not looking”
Job Scout
- Search by company + location + work type + seniority
- Get full job descriptions with requirements and compensation
- Assess fit (Strong / Good / Stretch) based on your profile
- Flag diversity-scoped roles, staffing aggregators, and external ATS friction
Experience Bank
- “Grill me” — STAR-style interview that probes for impact, metrics, scope, and tech
- Seeds from your existing bank + base resume + LinkedIn profile, so it only asks about gaps and new material
- Stores tagged entries in
.mercury/experience/(skills, tech, domain, role-type, metrics) - Incremental + idempotent — run periodically (quarterly/after shipping), never re-grills what it already has
- Truthful by construction — structures real stories, never invents
Resume Tailor
- Parse your base resume (Typst/MD/PDF/txt) + experience bank + LinkedIn profile data
- Pulls role-relevant experience-bank entries even when they aren’t on the short base resume
- Batch-tailor to N scouted roles in one pass
- Produce ATS-keyword-aligned Typst output per role
- Generate full cover letters per role
- Gap/match analysis showing what’s strong, what’s a stretch, what’s in your bank, what’s missing
- All outputs stored in
.mercury/with full run logs
Recruiter Outreach
- Look up company URN IDs (required for LinkedIn’s people search filter)
- Find technical recruiters/sourcers at target companies in your region
- Prioritize by: same city > 2nd-degree > mutual connections > relevant title
- Send connection requests with short, specific notes (<300 chars)
- Provide follow-up templates for post-acceptance
Portal Filler
- Detects the ATS from the job URL (
mercury detect-portal) and loads its known field selectors — Greenhouse, Lever, Ashby, or a generic snapshot-driven fallback - Fills your contact / eligibility / links from a reusable answer store (
mercury answer set), maps the rest of the form’s labels withmercury match, and uploads your compiled resume PDF (mercury export) - Pauses for human review and never clicks Submit — you verify the open browser and submit yourself (mirrors
recruiter-outreach’s confirm step) - Never auto-fills EEO/demographic fields, and surfaces anything it couldn’t confidently map instead of guessing
- Edit your stored answers and watch application status (
draft → filled → submitted) in the dashboard’s Answers and Applications tabs
Application CLI (used by portal-filler)
mercury answer set --key phone --value "+1 555 ..." --category contact
mercury answer list
mercury detect-portal --url "https://job-boards.greenhouse.io/acme/jobs/123"
mercury match --labels '["Email *","Phone","LinkedIn Profile"]'
mercury export --typ resume.typ --out resume.pdf
mercury application update --id 1 --status filled --portal greenhouse --unfilled '["work_authorization"]'
Known Quirks & Limitations
- Auto-apply is fill-then-pause, not fully autonomous —
portal-fillerfills external ATS forms (Greenhouse/Lever/Ashby) but stops before Submit so you review and send. Workday, Taleo, and iCIMS (multi-step, iframe-heavy, account-gated) and opt-in auto-submit are not yet supported; CAPTCHA/SSO are left to the human. - LinkedIn rate limits — don’t send >10-15 connection requests per session
- Top Skills are managed inside the About editor (
/add-edit/SUMMARY/), not the Skills detail page - Company URN IDs are required for people search filters — plain names are silently ignored
- Typeahead fields (language, skills) require ArrowDown + Enter after typing
- “Notify network” toggle — always verify it’s OFF before saving experience edits
Keywords
LinkedIn automation, job search AI, recruiter outreach, resume tailoring, profile optimization, experience bank, achievement tracking, ATS optimization, LinkedIn MCP, AI job hunting, career toolkit, LinkedIn bot, job scout, cover letter generator, LinkedIn skills for AI agents
License
The Unlicense — public domain. Do whatever you want with it.
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add juanasp/mercury