Give every repository its own memory. So your agent never gets lost.

Fairlead keeps a coding agent on course in your repository: the lessons your team already paid for, the tests a change can reach, and numbers that say whether it worked.

$ curl -fsSL https://github.com/mahkassem/fairlead/releases/latest/download/fairlead-installer.sh | sh

Why Fairlead

Join a good team and someone tells you which module never to touch without the migration check, and which test lies on Windows. A coding agent gets none of that. Fairlead gives it the team's knowledge before it acts.

A memory for every repository

Hard lessons live with the code, per module, short and dated, and turn into checks when they can.

since 0.2.0: owner rules, quarantine with expiry; since 0.7.0: tests that lie on one platform; since 0.8.0: lessons, learn, find

Set up once, never start cold

The agent learns the repository into one checked config, so each session starts where the last one ended.

since 0.1.1: config check, show --origin

The right tool, not the nearest one

The rule, the command and the next step for exactly the files in front of it.

since 0.2.0: plan, test --explain

Plans the change, not just the tests

Before an edit: what it touches, what depends on it, the rules and lessons there, and what has to pass.

since 0.6.0: brief, done, receipt, next

The right skills for the code

A frontend change shouldn't come with database advice. Skills are picked by what a change reaches.

since 0.8.0: skill routes, skills sync, skills report

Measured, not guessed

Recall on real CI failures, rework, escaped defects, tokens and cost, as numbers.

since 0.2.0: replay, weekly benchmarks; 0.6.0: escapes judged in CI

Fast because it remembers

No rereading the codebase to rediscover last week's lesson. The graph and the plan are already there.

since 0.2.0: graph without an install, cached

It learns where it's blind

A change that reaches no test is flagged, with the rule that would have caught it.

since 0.3.0: unreached files, suggested rules

Stopped before the mistake

Your rules run as the agent works, in seconds instead of minutes later in CI.

since 0.4.0: guard rules, edit and commit hooks

Works with the stack you have

No plugins and no new CI. Fairlead reads your code and runs the tools already in your repository.

VitestJestPlaywrightnode --testBun pnpmnpmyarnbun workspaces GitHub Actionsany CI via JSON LinuxmacOSWindows

Any test runner

A runner is one command in your config, so your stack never waits for a plugin.

Monorepos, precisely

A pnpm lockfile change runs only the packages whose dependencies changed, and, with bun, a dependency's version bump only the tests of the files that import it.

No install to read your code

The import graph comes from source alone, cached, in a fraction of a second.

Private by default

The CLI sends nothing you didn't ask for: no telemetry, and it never phones home.

Proven by replaying public CI history: JavaScript and TypeScript (Effect, pnpm, vitest), Python (poetry, 99.2%) and PHP (pterodactyl and invoiceninja, 100%). It also reads Go, Java and Kotlin, and Vue, Svelte and Astro components, which replay hasn't proven yet. An external provider feeds any other language, and a coverage map adds what imports can't show. Framework packs and folders of several repositories are on the roadmap.

Recall on real CI failures

The share of failed tests the plan would have selected, replayed from each project's CI history every week.

The latest numbers are on the benchmarks page.