Skip to content
joaovjoPublic

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

82 Commits

Folders and files

Repository files navigation

Mercury

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.

opencode     Claude Code

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
# Bash / zsh:
curl -fsSL https://raw.githubusercontent.com/joaovjo/mercury/main/app/scripts/bootstrap.ts | bun run -

# PowerShell 7.x+:
irm https://raw.githubusercontent.com/joaovjo/mercury/main/app/scripts/bootstrap.ts | bun run -

Re-run the same 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
outreach-tracker Runs the daily due-action queue (withdraw stale invites, draft follow-ups, detect replies via LinkedIn inbox, close unresponsive contacts) — all behind explicit user consent (never auto-sends)
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.

How Mercury works

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), with one-click Sync to detect accepted invites
  • Outreach — lifecycle funnel (queued → invited → accepted → engaged), due-action queue (withdraw / follow-up / close), per-company blocked counts, and InMail credit budget
  • Jobs / Applications / Interviews / Answers / Activity — everything tracked
Overview Recruiters
Overview — pipeline health at a glance Recruiters — kanban pipeline + one-click Sync to detect accepted invites
Launch Profile
Launch — run any skill through your agent, with an optional free-text nudge Profile — recruiter-search visibility charted over time

Screenshots use synthetic demo data.

The dashboard is a single Bun-compiled binary with the UI embedded (React 19 + Tailwind v4 + shadcn). It binds to 127.0.0.1 on a random port with a URL token, stores everything in a local SQLite database at ~/.mercury/mercury.db, and supports English and Brazilian Portuguese (selectable in the UI).

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 state in ~/.mercury/ (override with MERCURY_HOME):

~/.mercury/
├── mercury.db                  # SQLite (WAL): recruiters, jobs, metrics, outreach, …
├── config.json                 # Provider + preferences (outreach thresholds, InMail budget, …)
├── dashboard.lock              # {port, token, pid} of a running dashboard
├── update-check.json           # Cached release-check result
├── 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
    └── ...

Everything is tracked — you get full traceability of every tailoring run, outreach wave, and profile change.

Requirements

MCP Servers

  1. LinkedIn MCP Server — Profile reading, job search, people search, connection requests
  2. 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 (bunx linkedin-mcp-server-ts@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 write trace-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 /Q

Thanks 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 pipeline tool (navigate → snapshot → click/fill in one call), which is faster and more reliable than individual round-trips.

Installation

# Bash / zsh:
curl -fsSL https://raw.githubusercontent.com/joaovjo/mercury/main/app/scripts/bootstrap.ts | bun run -

# PowerShell 7.x+:
irm https://raw.githubusercontent.com/joaovjo/mercury/main/app/scripts/bootstrap.ts | bun run -

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, just curl;
  • 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 no windows-arm64 prebuilt (Bun doesn't compile it); on Windows-arm64 the installer falls back to a source build with Bun.

Make sure ~/.local/bin is on your PATH (the installer prints a hint if not). Re-run the same command any time to update — mercury also 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 <path># 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 with mercury 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-filler fills 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 MCP stale browsers (Windows) — the LinkedIn MCP can leave orphaned headless Chromium processes that lock the profile directory. Run mercury linkedin reset to sweep them (skills do this automatically as a preflight). See the Windows gotcha above for ACL fixes.
  • 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
  • Self-update — run mercury update (or re-run the bootstrap one-liner) to update to the latest release in-place

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.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages