Quickstart
This is a runnable local flow for trying Fairway in a repository with a small set of agent lanes.
Public docs: fairway.run.
Install
Tagged releases publish signed/notarized macOS artifacts and update the Homebrew cask:
brew tap fairway-run/tap
brew install --cask fairway # macOS
# or download from the releases page
Until the first tagged release is cut, install from source:
go install github.com/fairway-run/fairway/cmd/fairway@latest
# or, from a checkout:
make install
Bootstrap a repo
cd /path/to/your/repo
fairway init
$EDITOR .fairway/config.toml
A minimal config:
[fairway]
main_branch = "main"
[[roles]]
name = "backend"
branch = "agent/backend"
[[roles]]
name = "ui"
branch = "agent/ui"
[[roles]]
name = "orchestrator"
branch = "agent/orchestrator"
For architecture, release, migration, or security tracks, add a workstream profile. Profiles are optional; they give Fairway names for task kinds, dashboard groups, review domains, adoption route samples, readiness gates, and packet template fields without baking one project's workflow into the binary.
[[workstream_profiles]]
name = "platform-foundation"
task_kinds = ["architecture-map", "boundary-guard", "facade"]
dashboard_groups = ["architecture maps", "boundary guards", "facades"]
review_domains = ["architecture", "security"]
route_samples = ["doc/api/openapi.yaml", "cmd/api/routes.go"]
[[workstream_profiles.gates]]
name = "security-review"
mode = "advisory"
task_kinds = ["facade"]
evidence_type = "security-review"
required_evidence_count = 1
accepted_results = ["pass", "partial"]
artifact_required = true
[[packet_templates]]
profiles = ["platform-foundation"]
name = "architecture-map"
required_fields = ["scope", "current_owner", "target_owner", "migration_risk", "acceptance"]
optional_fields = ["source_doc"]
Validate after changing config:
fairway config validate
Set up lanes
fairway worktree setup
Creates the configured branches (off main_branch) and checks them out into the configured worktree root.
Define tasks
Create tasks via YAML import:
fairway import tasks.yaml
tasks.yaml:
- id: T-001
title: Wire up /v1/orders endpoint
role: backend
profile: service-extraction
owning_domain: orders
owning_layer: api
source_paths: ["internal/orders"]
target_paths: ["cmd/api/routes/orders.go"]
review_domains: ["architecture", "backend"]
risk_level: medium
migration_type: endpoint
notes: |
Returns the user's recent orders.
Acceptance:
- integration test passes
- p95 < 100ms
acceptance_checks:
- "go test ./internal/orders/..."
- id: T-002
title: Build the orders list page
role: ui
dependencies: [T-001]
Run the dashboard
If you are installing from a local checkout, make install writes
~/.local/bin/fairway by default. Override with
make install PREFIX=/opt/homebrew or make install BINDIR=/some/bin when
needed.
fairway dashboard
Opens http://127.0.0.1:7878. Leave it open on a second monitor.
For an operator dashboard that should survive the launching terminal or agent thread, use the detached lifecycle commands:
fairway dashboard start
fairway dashboard status
fairway dashboard restart
fairway dashboard stop
Detached mode writes .fairway/dashboard.pid and .fairway/dashboard.log by
default.
A typical loop
In the backend worktree:
fairway ready # what is available for me?
fairway claim T-001
# ... do the work, commit ...
fairway record evidence T-001 --command-text "go test ./..." --result pass --artifact internal/orders/orders_test.go --artifact-type test
fairway set-status T-001 done
fairway route review T-001 --path internal/orders/orders.go
fairway merge-ready T-001
If the task's kind belongs to a configured workstream profile, merge-ready
also evaluates that profile's gates. Missing blocking profile gates fail the
check; missing advisory/report-only gates are printed as warnings.
In the UI worktree:
fairway ready # T-002 is now ready (T-001 reached done)
fairway claim T-002
fairway record handoff T-002 --to backend --payload "Need an example payload for /v1/orders before finalizing the form."
What you see in the dashboard
- The track summary shows total, ready, in-progress, blocked, done, and workstream counts.
- Workstream progress cards group tasks by profile and kind when profile metadata is present.
- Profile gate readiness shows whether evidence-backed gates are satisfied across the track, with links to missing tasks.
- The lanes strip updates within a second of each transition.
- The activity feed shows the chain: claim -> evidence -> done; claim -> handoff, with kind and row-count filters for busy tracks.
- Task tables are bounded by a row limit so large queues stay usable; narrow filters or raise the table limit when you need more detail.
- Health badges flag the unacknowledged handoff to backend after one hour.
Long-running side work should use packets and checkpoints:
fairway packet context T-001 --goal "finish API contract" --owner backend --acceptance "tests pass"
fairway checkpoint record T-001 --state active --owner backend --summary "waiting on API fixture"
fairway checkpoint status
See coordinator-loop.md, context-packets.md, and checkpoints.md.
For architecture-heavy workstreams, start from the generic
examples/platform-foundation-queue.yaml
fixture to see profile-aware task metadata in context. For planning or
documentation tasks, prefer an orchestrator owner with architecture,
governance, security, ops, or frontend listed as review domains. That keeps
coordination ownership separate from review approval and avoids self-review
when review routes point back to the architecture lane.
Adoption Readiness
When you are trying Fairway in an existing project, generate an adoption artifact before switching your team over:
fairway adoption artifact --catalog examples/regression-packs.yaml
fairway --json adoption artifact --route cmd/api/routes.go
The artifact summarizes task counts, ready work, configured gates, workstream
profile gates, evidence-backed gate evaluation, review-route samples,
regression-pack validation, health, and evidence gaps. If no --route flags are
provided, Fairway samples paths from the configured route_samples. See
workstream-profile-guide.md for profile design
guidance.
If the project does not have regression packs yet, either add a tiny catalog for
the workstream or omit --catalog and treat the regression-pack section as
future coverage. The adoption artifact is still useful for profile gates,
review routes, evidence gaps, and worktree health.
Adoption Case Studies
Fairway is generic, but it was hardened against real multi-agent stabilization work. The GPUaaS adoption material is useful when you want a larger reference configuration with architecture, ops, frontend, backend, and governance lanes.
Start from gpuaas-parity-runbook.md if
you are comparing Fairway against an existing GPUaaS-style queue. Use
examples/gpuaas-a-b-c-d-e-config.toml
for the exact A/B/C/D/E lane mapping, platform-foundation workstream profile,
named advisory gates, packet templates, and
examples/gpuaas-regression-packs.yaml
to verify Fairway accepts GPUaaS-style per-environment regression blocking.