shbernal/hermes-linkedin-jobsearch
Let your agent apply for you: find postings, research companies, tailor resumes, apply and track applications.
hermes-linkedin-jobsearch is a Hermes profile distribution that searches LinkedIn on a schedule, researches employers, prepares tailored resumes and application answers, and tracks applications. It presents ready entries for your approval; Easy Apply is sent after you name an entry, while external forms are sent only if you opt in.
- Organizes job searches into tracks with separate queries and base resumes.
- Creates employer dossiers and prepares resumes and answers from your profile facts.
- Tracks application status from LinkedIn and, optionally, email.
full readme from github
A job-search agent for Hermes that works your LinkedIn pipeline from posting to answer.
Install • Quickstart • How it works
hermes-linkedin-jobsearch is a Hermes profile distribution. It installs an agent that searches LinkedIn on a schedule, researches the employers behind the postings, tailors a resume and answers for each one, and keeps track of every application. You decide what gets sent.
- Discovery per track: a kind of role with its own LinkedIn queries, fit scoring and base resume.
- An employer dossier for every new entry, then a shortlist or drop with the reason.
- A resume and form answers per entry, written from your profile facts, never invented.
- Easy Apply sent once you name the entry. External forms are read and filled through atsfill, and sent only if you opt in.
- Status tracking from LinkedIn and, optionally, your email.
- A weekly report on what each track's postings ask for.
Install
You need Hermes 0.22.2 or later, a LinkedIn account and uv. Setup checks for the other tools (node, git, cratecv, optionally Himalaya for email and gh for filing issues) and offers to install what is missing.
hermes profile install github.com/shbernal/hermes-linkedin-jobsearch --alias
This creates a jobsearch profile and a jobsearch command next to your other Hermes profiles.
Quickstart
Pick the model the agent runs on, if the profile has none yet:
jobsearch modelOpen a chat with the agent:
jobsearch chatRun the setup and answer its questions:
/jobsearch-init
Setup logs in to LinkedIn, builds your profile facts from LinkedIn and your CV, interviews you for your criteria, sets what may be sent without asking, creates a first track and schedules the jobs. It can stop at any step: running it again picks up where it left off.
Tested with gpt-5.6-sol through the openai-codex provider, and glm-5.3 through zai on the Z.ai coding plan.
What it never does on its own
| Action | Default | You can change it to |
|---|---|---|
| Send Easy Apply | after you name the entry ("apply 1 and 3") | prepare only, or send unattended |
| Send an external form | never: you send it yourself | after approval, or unattended |
| Hide a job from LinkedIn search for good | never | on |
| Archive email | never | on |
| File an issue upstream when a tool fails | never: recorded in ~/jobsearch/issues/ with a link to file it |
after asking, or unattended |
| Message or connect with anyone | never: the tools are disabled | not available |
Sends are capped at 2 a day by default, attended or not.
Set issues to unattended if you can: upstream fixes come from these reports, and they carry the tool call, the system and the result, never your data.
All of these live in ~/jobsearch/workspace.yaml.
[!CAUTION] LinkedIn's user agreement prohibits automated access to the site. This agent reads and applies through your own logged-in session, and LinkedIn may restrict or ban an account it flags. You use it at your own risk.
How it works
flowchart LR
D["Discovery<br/>per track"] --> P[("~/jobsearch<br/>pipeline")]
P --> A["Advance<br/>research, prepare"]
A --> R["pipeline/ready.md"]
R -- "you: apply 1 and 3" --> S["Apply<br/>Easy Apply, atsfill"]
S --> P
T["Tracking<br/>LinkedIn, email"] --> P
Everything personal lives in ~/jobsearch, a git repository the agent commits to: your criteria, profile facts, resumes, employer dossiers and the pipeline.
The profile itself holds only the skills and the configuration, so hermes profile update jobsearch never touches your data.
Scheduled runs report to the chat you choose during setup (Telegram, Discord, or the local log). An Advance report ends with the numbered list of ready entries, and you approve by replying to it.
LinkedIn access goes through a pinned fork of linkedin-mcp-server that adds Easy Apply and job close-out tools.
More
- Architecture decisions: workspace, scope, action policy, dependencies
- Changelog