Repository navigation
Building from Source
You need Go 1.26.7 or later, plus the GitHub CLI and Claude Code to run it.
git clone https://github.com/drlholloway/fast-lane.git
cd fast-lane
go build -o fast-lane .
./fast-laneA build from a checkout reports its version as the commit and date, such as dev (ea0a369, 2026-10-21), with modified if the checkout had uncommitted changes. A build of a tagged commit reports the tag. To set it explicitly:
go build -ldflags "-X github.com/drlholloway/fast-lane/internal/version.Version=v0.2.0" -o fast-lane .go test -race ./...The tests need git on your PATH; they create throwaway repositories to test worktrees. They never touch GitHub, your config, or your code folders. Claude Code is played by a stand-in.
The images in this wiki are rendered from made-up data (a fictional acme organization), not from a real account, so they can be re-taken whenever the screens change. A test writes each screen, in color, as terminal output; freeze turns them into images:
go install github.com/charmbracelet/freeze@latest
FASTLANE_SCREENSHOTS=/tmp/shots go test ./internal/tui -run TestScreenshots
cd /tmp/shots
for f in *.ansi; do
freeze "$f" -o "${f%.ansi}.png" --window --padding 20 --margin 0 --border.radius 8 --font.size 14 --background "#171717" </dev/null
doneThe demo data and the list of screens are in internal/tui/screenshots_test.go.
| Package | Role |
|---|---|
main.go |
Flags, wiring, start-up |
internal/tui |
The terminal interface, built with Bubble Tea: tabs, dialogs, the rules editor and settings |
internal/claude |
Session manager: runs claude -p in stream-json mode, answers its permission requests through the TUI, worktrees |
internal/github |
REST and GraphQL client built on go-gh (so it uses gh's login), change detection, the notifications inbox |
internal/auto |
Matches items and triggers to auto rules and decides what auto-runs |
internal/config |
Settings, rules, actions, validation |
internal/prompt |
Built-in prompts and Claude's system prompt |
internal/state |
What Fast Lane has seen, fired and run, saved between runs |
internal/local |
Finds local checkouts in the code folders |
internal/doctor |
Prerequisite checks for the Settings tab |
internal/version |
Works out the version from the build |
Move the Unreleased section of CHANGELOG.md under a new ## X.Y.Z — date heading, commit, then tag that commit and push the tag:
git tag -a v0.2.0 -m "Fast Lane v0.2.0"
git push origin v0.2.0The release workflow runs the tests, builds macOS and Linux archives with the version baked in, and publishes a GitHub Release with those archives, a SHA256SUMS file, and that changelog section as its notes. go install …@latest picks up the new version, and running copies of Fast Lane notice it within a day: they look for a newer release when they start and once a day after that. A build from a checkout counts as out of date when a release was published after its commit.
See CONTRIBUTING.md. CI builds, vets, checks gofmt, and runs the tests with the race detector on Linux and macOS for every push and pull request. Please report security problems privately, as SECURITY.md describes.