Homebrew tap for shipping OpenClaw CLI tools.
brew tap openclaw/tap# formula
brew install openclaw/tap/<name>
# cask
brew install --cask openclaw/tap/<name>axorc— Inspect and automate macOS Accessibility from the shellclawscan— Agent-skill security scanner harness for ClawHubclawdex— Local-first address book backed by Markdowncrabbox— Remote Linux test boxes for dirty worktrees and CI hydrationcrabfleet— Fleet management CLI for Crabbox workerscrawlbar— macOS menu bar control plane for local-first crawler CLIsdiscrawl— Mirror Discord into SQLite and search server history locallygitcrawl— Local GitHub issue and PR archive, search, and clusteringgogcli— Google CLI for Gmail, Calendar, Drive, Docs, Sheets, and moregoplaces— Go client and CLI for the Google Places API (New)graincrawl— Local-first Granola crawler into SQLite and Markdownnotcrawl— Local-first Notion crawler into SQLite and normalized Markdownocm— Manage isolated OpenClaw environments, runtimes, and servicesoctopool— Org-authenticated GitHub read relay and gh-compatible cache shimpeekaboo— Capture macOS screenshots and automate the desktopslacrawl— Go-based CLI for mirroring Slack workspace data into local SQLitetelecrawl— Telegram Desktop archive CLI with encrypted Git backupswacli— WhatsApp CLI built on whatsmeowwacrawl— Read-only WhatsApp Desktop archive CLI
brew update
brew upgrade
brew uninstall <formula>
brew uninstall --cask <cask>
# casks only: remove user data
brew uninstall --cask --zap openclaw/tap/<name>- Run
brew info openclaw/tap/<name>for per-tool caveats (permissions, setup steps, etc.). - OCM supports macOS Apple Silicon/Intel and Linux x86_64. Install with
brew install openclaw/tap/ocmand update withbrew upgrade openclaw/tap/ocm, notocm self update, which refuses to replace Homebrew-managed binaries.
The automation uses Python's standard library and Homebrew's Ruby tooling:
python3 -B -m unittest discover -s tests -v
brew style Formula/*.rb
brew ruby tests/test_ocm_platforms.rb
brew ruby tests/test_crabbox_install.rbupdate_formula.py owns command validation, downloads, source-tag verification and
file writes. formula_text.py parses and renders formula text without network or
filesystem access. reconcile_formulae.py discovers release drift and invokes the
updater. These scripts live in .github/scripts/; formula-specific installation
behavior stays in Formula/*.rb.
Formula updates have two automated paths. Source-repository release workflows dispatch
Update Formula for immediate updates. That workflow accepts a Homebrew formula token, a semantic release tag, and a
GitHub repository in owner/repo form. Optional artifact inputs must resolve to HTTPS release
assets and may use only the placeholders documented by the workflow. Downloads use a 30-second
socket inactivity timeout and stream archive bytes without imposing a size limit. This timeout
bounds stalled socket operations, not the total duration of a progressing download.
Every redirect destination is validated before it is requested: HTTPS is required, and
credentials and fragments are rejected. Relative HTTPS redirects remain supported. This
does not impose a public-only host policy: private, localhost, and numeric host spellings
such as 127.1, 2130706433, and 0x7f000001 remain allowed, subject to normal TLS
certificate verification. DNS/IP restrictions are outside this download contract.
Crabbox uses the ordinary four-target assets handoff after publication. The
Crabbox release process
completes its prepublication checks, including native proof, before publishing. Publication
establishes tap eligibility: the operator explicitly dispatches Update Formula with the tag and
four published archive names/hashes. The updater downloads and hashes all four canonical GitHub
release assets before writing, preserves maintained formula content, and succeeds when already
current. Reconciliation is an independent fallback for stable published releases. Retry a failed tap
handoff on its own; do not rebuild or republish to retry Homebrew.
Crabbox releases with native JJ support install the helper, its build receipt,
notice text, and attribution report beside the CLI. The complete companion bundle
is required when any member is present; older releases without companions retain
their existing installation layout. Releases containing crabbox-runtime/ install
the entire directory beside the CLI in its keg, preserving both runtime binaries
and their manifest; older archives without a runtime pack remain supported.
Public native and proxy-only Go-install smokes remain required independent channel health checks,
not an additional approval gate for the tap. Installed-Homebrew smoke follows the update.
Crabbox's obsolete verified-hashes-v1 write mode fails with guidance to use ordinary assets;
caller-supplied hashes without public downloads cannot update that formula. Its read-only
--verify-source-tag-only check still accepts the complete verified-hash input set without writing.
Existing Formula/*.rb files own each tool's caveats and install instructions. The updater
preserves that content while changing release metadata. In legacy multi-target mode, a supplied
linux_url refreshes both the matching GitHub source-archive URL and its checksum. Maintain
formula-specific content here rather than in an upstream release workflow. Newly generated
formulae remain in memory until all required checksum downloads and rendering succeed, so
failed creation leaves no placeholder file. Combined formula/cask updates also finish
all downloads and rendering before writing either file, so a missing or invalid cask
leaves the formula unchanged.
For Gitcrawl, see the configuration reference
and gh shim migration to Octopool.
Reconcile Formulae is the self-healing fallback for formulae. Every three hours
it derives each source repository from the formula's GitHub homepage, compares the formula with that repository's latest
stable published release, and runs the same updater and checksum-download logic when the release is
newer. Invalid formula metadata is reported and skipped so later formulae are still inspected.
Resource URLs are excluded from release inference, including resources from the same
source repository; their pinned versions and checksums remain unchanged.
It never downgrades, skips drafts and prereleases, and makes no commit when every formula is
current. Manual reconciles default to dry-run and can target one formula. The reconciler reads public
release metadata and pushes with this tap's own GITHUB_TOKEN; it needs no cross-repository token or
other external credential. The dispatch path remains the preferred low-latency path.
OCM uses reconciliation directly: its three Rust-target archives are discovered from the formula, without a cross-repository dispatch token or a Linux ARM64 artifact. Installation preserves the published executable bytes, including the macOS Developer ID signature. Changes to the OCM formula or its updater run installed-Homebrew tests on macOS ARM64, macOS x86_64, and Linux x86_64, using the checked-out formula rather than the public tap.
Pull requests and updates to main run the automation tests and validate Ruby syntax
and Homebrew style for every formula and cask. Superseded pull-request validation runs
are canceled, while main-branch checks finish independently. They also load the checked-out
tap on every Homebrew OS/architecture combination,
including unsupported installation targets. Formulae must always define a URL; use an architecture
requirement to reject unsupported installs rather than leaving platform metadata empty.
Fleet release workflows use the optional assets JSON contract: exactly one name and sha256
for each Darwin/Linux amd64/arm64 target. The updater renders those names and hashes verbatim,
downloads all four public release assets, and refuses to commit on any digest mismatch. Legacy
multi-target updates preserve smaller target inventories and resources, but reject unrecognized
primary release assets before downloading or writing. Custom target names need target_aliases. Omitting
assets preserves the legacy template and filename-guessing behavior for older callers.
Other four-target binary releases can use the workflow's verified-hashes-v1 contract. Supply all four
canonical target SHA-256 inputs, source_tag_object, source_tag_commit, and request_id with an
explicit {target} artifact template. This mode requires an existing formula, checks that the live
source ref is the supplied annotated tag object and peeled commit, renders the target URL/checksum
pairs as literal release URLs directly from the supplied hashes, and never downloads release assets to recompute them.
Literal URLs also let Homebrew infer the version when the formula omits a redundant explicit version line.
Partial or mixed legacy/verified input sets fail closed. The source repository remains responsible
for verifying the public release bytes immediately before dispatch and again after the tap update,
including its clean downstream Homebrew install proof. Each source-tag git fetch and
git ls-remote verification has a 60-second deadline and aborts the update on timeout.
Each successful verified dispatch creates one direct-child provenance commit, including when the formula is already current. The workflow revalidates the exact public source tag without credentials immediately before its one-shot push and again after proving that the remote tap branch equals the pushed commit.
Verified run titles are Update <formula> for <tag> (request-id=<id>; source-tag-object=<object>; source-tag-commit=<commit>). A changed formula commit records
Source-Repository, Source-Tag-Object, Source-Tag-Commit, and Request-ID trailers so callers
can bind the protected workflow run, resulting tap commit, and formula bytes to one handoff.