Skip to content

Releases: kevin-burns/linkedin-assist

v0.1.4

Choose a tag to compare

@github-actions github-actions released this 29 Jun 08:16

Changelog

Features

  • 6c9a7c8: feat(auth): status hint to run doctor for the live session check ( <>)

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 29 Jun 08:00

Changelog

Bug fixes

  • c4acec1: fix(cli): print the bare Chrome-not-found message, not the wrapped chain ( <>)
  • d7c97bc: fix(lint): lowercase ErrChromeNotFound string (staticcheck ST1005) ( <>)
  • 2de8357: fix: persist auth cookies and graceful Chrome shutdown to fix headless login loss ( <>)

Documentation

  • d8dc8c5: docs: add LICENSE (MIT), CONTRIBUTING, SECURITY, and Dependabot ( <>)

Other

  • b798a94: chore(precommit): sync gosec excludes with .golangci.yml and CI ( <>)

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 28 Jun 11:48

A small fix release.

go install builds now report their version. Previously go install …@vX.Y.Z printed 0.0.0-dev from --version, because go install builds from source and doesn't apply GoReleaser's build-time version stamp. It now falls back to the module version Go embeds in the build (e.g. v0.1.2).

Downloaded release binaries already reported the correct version and are unchanged.

Install

go install github.com/kevin-burns/linkedin-assist/cmd/li-assist@v0.1.2

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 28 Jun 11:30

A maintenance release. v0.1.0's binaries work fine — this brings the published/installable version in line with the latest fixes and is the first release built by the automated GoReleaser pipeline.

Changes

  • Ollama probe hardening. The reachability check now validates LI_ASSIST_OLLAMA_HOST (parses the URL and allows only http/https) and issues the request with a context deadline. Malformed or non-HTTP hosts are rejected before any call is made.
  • CI / security gate fixed. The standalone gosec step had drifted out of sync with the project's lint policy, breaking the build. The exclude set is now defined once in .golangci.yml (with a written rationale per rule) and mirrored by the Makefile and CI, so all three tools agree.
  • README accuracy. Documented --intros (the offline connection-to-job warm-intro feature) end to end, updated the Install section now that go install and pre-built binaries are available, and surfaced the bundled agent skill.
  • Automated releases. Tag pushes now build cross-platform binaries (macOS/Linux, amd64/arm64) + checksums via GoReleaser.

No user-facing behaviour changed for valid configurations.

Install

go install github.com/kevin-burns/linkedin-assist/cmd/li-assist@v0.1.1

Or download a pre-built binary from the assets below (verify against checksums.txt).

li-assist v0.1.0 — first public release

Choose a tag to compare

@kevin-burns kevin-burns released this 27 Jun 18:59

li-assist is a single-user, read-only command-line tool for hunting and researching jobs on LinkedIn. It drives your own signed-in Chromium session, reads jobs through LinkedIn's internal voyager API, caches what it sees locally, and can distill noisy job descriptions into structured insights with a local or hosted LLM. Everything goes through a jittered rate limiter with a daily cap — it never posts, messages, connects, or performs any write action.

This is the first public cut.

What's in it

Job search & tracking

  • jobs search <keywords…> — multi-word keywords with LinkedIn boolean operators (OR / AND / NOT / "phrases"), --location, --anywhere (worldwide), --limit, and repeatable --exclude-company / --exclude-title filters.
  • jobs get <urn> — full posting detail (description, apply URL, company, location). Cache-first; --refresh to force a re-fetch.
  • jobs sweep <keywords…> — runs a search, diffs it against a local cache, and prints only what's new since last run. Always writes a one-line audit (N new / M seen / K excluded) to stderr — never silent.

Warm intros (offline)

  • --intros on jobs get / jobs sweep cross-references your own LinkedIn Connections.csv export against each job's employer and surfaces who you already know there (name, profile URL, current title, connection date). 100% offline — zero extra network calls. Email is dropped at import; the export path is gitignored so it can't be committed.

LLM enrichment

  • --enrich turns a marketing-heavy description into structured insights (real summary, genuinely-required skills, salary, seniority, condensed description). Provider-agnostic with auto-detect: Ollama → OpenAI → Gemini → Anthropic. Local models keep everything on your machine. Insights are computed once per job and cached.

Setup & health

  • auth login / auth status (sessions treated as stale after 14 days), doctor health checks, and config location to set a default search location once.

Built in

  • Browser-resident transport (chromedp, in-page fetch() — no cookie/header replay), jittered rate limiter + daily cap, a capped self-evicting JSONL cache, and a 5-layer Clean Architecture with a CI-enforced dependency-direction gate.
  • An agent skill (skill/SKILL.md) so Claude Code / Codex can drive the tool while respecting the read-only and rate-limit constraints.

What it deliberately does not do

  • Never writes. No posting, commenting, reacting, messaging, connecting, or applying — by design, not omission.
  • Deferred (read surfaces LinkedIn moved behind Server-Driven UI): company search, people search, person profiles, reading post/article bodies, and browsing the feed. These have no clean voyager endpoint to parse.
  • Distance/radius job filtering: not available — LinkedIn removed distance from the clean jobs endpoint (it now lives only in the SDUI/AI search).

Install

Build from source (requires Go; a local Google Chrome / Chromium is needed at runtime):

go install github.com/kevin-burns/linkedin-assist/cmd/li-assist@v0.1.0
# or clone + `go build -o li-assist ./cmd/li-assist`

Pre-built GoReleaser binaries and a Homebrew tap are planned. See the README for macOS quarantine notes.

A note on safety

li-assist uses LinkedIn's private internal API via your own logged-in browser session. Automated access is contrary to LinkedIn's User Agreement, which is exactly why this tool is single-user, read-only, and rate-limited. Use it for your own personal job hunt; the account risk is yours.

Credits

  • The browser-resident transport and several voyager facts were informed by eracle/linkedin-cli (MIT).
  • The offline Connections.csv warm-intro approach was inspired by NetPrune (ChronoCoders), which reached the same read-only-export conclusion.