---
title: "Curated landing output and Homebrew-aware upgrades"
date: "2026-04-17"
---

## Curated landing output for bare `fabro`

Running `fabro` with no subcommand used to dump the full clap `--help` reference, which buried the commands most users actually need. The bare command now prints a short, colorized guide organized by lifecycle stage — Set up, Author workflows, Run workflows, Inspect runs — with a Discord callout and a pointer to `fabro help` for the full reference.

`fabro --help` and `fabro help` still render the comprehensive command listing unchanged.

## Homebrew-aware upgrade flow

If you installed Fabro via Homebrew, the upgrade path now knows. The background upgrade nag fetches the Fabro tap's `versions.json` instead of GitHub's latest release, so notifications stay in sync with what `brew update` can actually install. Running `fabro upgrade` on a Homebrew-managed binary refuses to overwrite it and prints the correct `brew upgrade` command instead.

```
$ fabro upgrade
Fabro was installed via Homebrew. To upgrade, run:
  brew upgrade fabro
```

The cache distinguishes `fabro`, `fabro-nightly`, and tarball installs, so switching between them no longer leaves stale version data behind.

## More

<Accordion title="CLI">
- Added `fabro docs` to the landing output's Set up section
- `fabro upgrade --dry-run` on Homebrew installs prints the `brew upgrade` command and exits 0
</Accordion>

<Accordion title="Improvements">
- Published multi-arch (linux/amd64, linux/arm64) server images to `ghcr.io/fabro-sh/fabro` with `:latest`, `:nightly`, and per-version tags
- Added an automated nightly release pipeline that publishes a fresh pre-release at 09:00 UTC each day
- The Fabro Homebrew tap now publishes a `fabro-beta` formula on pre-release tags alongside the stable `fabro` formula
</Accordion>

<Accordion title="Fixes">
- Fixed `fabro uninstall` leaving behind `~/.fabro/tmp/` in release builds when background telemetry flushing would re-create the directory after removal
</Accordion>
