Skip to content

Commit 5e6b28c

Browse files
Add Homebrew formula, cask, and packable simbroker npm CLI.
Why: Strangers still needed a clone or a manual tarball extract to get simbroker. The Alpha GitHub Release already had a CLI tarball, but there was no brew or npm one-liner, and docs said those packages did not exist. Changed: Formula/simbroker.rb installs the v0.1.0-alpha.1 CLI tarball through Homebrew. Casks/simulator-broker.rb installs Simulator Broker.app from the signed, notarized GitHub Release zip Simulator-Broker-<version>.zip when that zip is attached; it is not package:local. packages/simbroker is a packable npm CLI with a bin field; scripts/package_npm.sh stages the runtime without tests. The repo-root package stays private. README, getting-started, status, SECURITY, CHANGELOG, and front-door tests advertise brew and npm installs and drop the old not-yet wording. A signed notarized app zip is not attached in this change. Verification: npm run agent:verify -- --profile spec-only --paths .agents/manifests/specs.yaml,.agents/verify/spec-only.yaml,.github/ISSUE_TEMPLATE/feature.yml,Casks/simulator-broker.rb,Formula/simbroker.rb,packages/simbroker/package.json,packages/simbroker/bin/simbroker.js,packages/simbroker/README.md,scripts/package_npm.sh,scripts/package_cli.sh,package.json,README.md,CHANGELOG.md,SECURITY.md,docs/getting-started.md,docs/status.md,docs/test/front-door.test.mjs,spec/project-structure.md,spec/README.md,spec/build-and-test.md --session-dir task-sessions/20260819-homebrew-notarized-npm node --test docs/test/front-door.test.mjs npm run verify:public-surface Affected: .agents/manifests/specs.yaml .agents/verify/spec-only.yaml .github/ISSUE_TEMPLATE/feature.yml CHANGELOG.md Casks/simulator-broker.rb Formula/simbroker.rb README.md SECURITY.md docs/getting-started.md docs/status.md docs/test/front-door.test.mjs package.json packages/simbroker/README.md packages/simbroker/bin/simbroker.js packages/simbroker/package.json scripts/package_cli.sh scripts/package_npm.sh spec/README.md spec/build-and-test.md spec/project-structure.md Refs: https://github.com/fiveonecode/simulator-broker https://github.com/fiveonecode/simulator-broker/releases/tag/v0.1.0-alpha.1 spec/project-structure.md Session: task-sessions/20260819-homebrew-notarized-npm
1 parent ab1d25e commit 5e6b28c

20 files changed

Lines changed: 386 additions & 27 deletions

File tree

.agents/manifests/specs.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ globs:
1515
- examples/**/.simulator-broker/*.json
1616
- spec/**
1717
- references/**
18+
- Casks/**
19+
- Formula/**
20+
- packages/simbroker/**
1821
- scripts/package_cli.sh
22+
- scripts/package_npm.sh
1923
owner: spec-steward
2024
required_skills:
2125
- harness-engineering
@@ -44,7 +48,11 @@ allowed_paths:
4448
- examples/**/.simulator-broker/*.json
4549
- spec/**
4650
- references/**
51+
- Casks/**
52+
- Formula/**
53+
- packages/simbroker/**
4754
- scripts/package_cli.sh
55+
- scripts/package_npm.sh
4856
forbidden_paths: []
4957
required_evidence:
5058
- structured-git-commit

.agents/verify/spec-only.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ covers_scenarios: []
44
covers_boundaries: []
55
commands:
66
- id: spec-diff-check
7-
run: git diff --check -- WORKFLOW.md AGENTS.md CLAUDE.md README.md LICENSE SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md CHANGELOG.md docs spec .agents agent-harness package.json package-lock.json .gitignore .github .codex script scripts references app broker-core client && git diff --cached --check -- WORKFLOW.md AGENTS.md CLAUDE.md README.md LICENSE SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md CHANGELOG.md docs spec .agents agent-harness package.json package-lock.json .gitignore .github .codex script scripts references app broker-core client
7+
run: git diff --check -- WORKFLOW.md AGENTS.md CLAUDE.md README.md LICENSE SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md CHANGELOG.md docs spec .agents agent-harness package.json package-lock.json .gitignore .github .codex script scripts references app broker-core client Formula Casks packages && git diff --cached --check -- WORKFLOW.md AGENTS.md CLAUDE.md README.md LICENSE SECURITY.md CONTRIBUTING.md CODE_OF_CONDUCT.md CHANGELOG.md docs spec .agents agent-harness package.json package-lock.json .gitignore .github .codex script scripts references app broker-core client Formula Casks packages
88
- id: public-front-door-check
99
run: node --test docs/test/*.test.mjs
1010
- id: instruction-parity-check

.github/ISSUE_TEMPLATE/feature.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ body:
77
attributes:
88
value: |
99
Simulator Broker is **Alpha**, **macOS-only**, and needs **Xcode**.
10-
It is maintenance-only infrastructure. There is no Homebrew formula,
11-
notarized app, or npm package yet.
10+
It is maintenance-only infrastructure. The CLI installs through
11+
Homebrew or the packable `simbroker` npm package. A signed,
12+
notarized operator app zip is not attached to the current Alpha
13+
release.
1214
1315
Maintainers may decline requests that add a feature, commercialization,
1416
or UX roadmap.

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,18 @@ All notable changes to Simulator Broker are documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [Unreleased]
9+
10+
### Added
11+
12+
- Homebrew formula `Formula/simbroker.rb` installs the Alpha CLI tarball
13+
(`brew install fiveonecode/simulator-broker/simbroker`).
14+
- Homebrew cask `Casks/simulator-broker.rb` installs `Simulator Broker.app`
15+
from the signed, notarized GitHub Release zip `Simulator-Broker-<version>.zip`
16+
when that zip is attached.
17+
- Packable npm CLI `packages/simbroker` (`npm run package:npm`) with a `bin`
18+
field. The repo-root package stays private.
19+
820
## [0.1.0-alpha.1] - 2026-08-18
921

1022
First tagged Alpha. The CLI, local `brokerd` service, and macOS operator app

Casks/simulator-broker.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
cask "simulator-broker" do
2+
version "0.1.0-alpha.1"
3+
sha256 :no_check
4+
5+
url "https://github.com/fiveonecode/simulator-broker/releases/download/v#{version}/Simulator-Broker-#{version}.zip"
6+
name "Simulator Broker"
7+
desc "macOS operator app for the local iOS Simulator control plane"
8+
homepage "https://github.com/fiveonecode/simulator-broker"
9+
10+
depends_on macos: :ventura
11+
12+
app "Simulator Broker.app"
13+
14+
caveats <<~EOS
15+
This cask installs Simulator Broker.app from the signed, notarized
16+
GitHub Release zip Simulator-Broker-#{version}.zip. Produce that zip
17+
with npm run package:distribution (Developer ID Application + notarytool),
18+
using payload/app/Simulator Broker.app from the distribution bundle.
19+
The current Alpha GitHub Release attaches the CLI tarball, not this zip.
20+
EOS
21+
end

Formula/simbroker.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Simbroker < Formula
2+
desc "Local iOS Simulator control plane CLI"
3+
homepage "https://github.com/fiveonecode/simulator-broker"
4+
url "https://github.com/fiveonecode/simulator-broker/releases/download/v0.1.0-alpha.1/simulator-broker-0.1.0-alpha.1-cli.tar.gz"
5+
sha256 "699695bc65a5bcb25b9c9b5d01494fcc3f25a40dcc90b8b5bf1ec61ea87a8522"
6+
license "MIT"
7+
8+
depends_on :macos
9+
depends_on "node"
10+
11+
def install
12+
libexec.install Dir["*"]
13+
(bin/"simbroker").write <<~SH
14+
#!/bin/bash
15+
exec "#{formula_opt_bin("node")}/node" "#{libexec}/client/bin/simbroker.mjs" "$@"
16+
SH
17+
end
18+
19+
test do
20+
assert_match "simbroker", shell_output("#{bin}/simbroker --help")
21+
end
22+
end

README.md

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ A local control plane so humans, AI agents, and CI jobs can share iOS Simulators
44
on one Mac without stealing devices from each other.
55

66
> **Alpha.** macOS only. Xcode is required to create or run iOS Simulators.
7-
> Interfaces can change. There is no Homebrew formula, notarized app, or npm
8-
> package yet.
7+
> Interfaces can change. Install the CLI with Homebrew or the `simbroker`
8+
> npm package. A signed, notarized operator app is not attached to this
9+
> Alpha release yet.
910
1011
[![Node tests](https://github.com/fiveonecode/simulator-broker/actions/workflows/ci.yml/badge.svg)](https://github.com/fiveonecode/simulator-broker/actions/workflows/ci.yml)
1112

@@ -27,29 +28,42 @@ If you only ever use one simulator by hand, you may not need this yet.
2728

2829
## Use it
2930

30-
From a clone, with Node.js 20+ on `PATH`:
31+
One-line CLI install on macOS, with Node.js 20+ still required at runtime:
32+
33+
```bash
34+
brew install fiveonecode/simulator-broker/simbroker
35+
simbroker --help
36+
```
37+
38+
```bash
39+
npm install -g https://github.com/fiveonecode/simulator-broker/releases/download/v0.1.0-alpha.1/simbroker-0.1.0-alpha.1.tgz
40+
simbroker --help
41+
```
42+
43+
From a clone:
3144

3245
```bash
3346
bash scripts/install_local.sh --cli-only
3447
command -v simbroker
3548
simbroker --help
3649
```
3750

38-
That copies the CLI runtime only. It does not run XcodeGen or build the macOS
39-
app. If Homebrew is installed, `simbroker` lands in `$(brew --prefix)/bin`.
40-
Otherwise the installer writes `~/.local/bin/simbroker` and one guarded
41-
login-shell PATH line. Open a new terminal if this shell still cannot resolve
42-
`simbroker`. `source .../env.sh` remains a fallback.
51+
The clone installer copies the CLI runtime only. It does not run XcodeGen or
52+
build the macOS app. If Homebrew is installed, `simbroker` lands in
53+
`$(brew --prefix)/bin`. Otherwise the installer writes `~/.local/bin/simbroker`
54+
and one guarded login-shell PATH line. Open a new terminal if this shell still
55+
cannot resolve `simbroker`. `source .../env.sh` remains a fallback.
4356

44-
To try a tagged build without cloning, download
45-
`simulator-broker-<version>-cli.tar.gz` from
46-
[Releases](https://github.com/fiveonecode/simulator-broker/releases), extract
47-
it, and run `./bin/simbroker --help`. Node.js 20+ is still required.
57+
The Homebrew cask `fiveonecode/simulator-broker/simulator-broker` installs
58+
`Simulator Broker.app` from the signed, notarized GitHub Release zip
59+
`Simulator-Broker-<version>.zip`. That zip is not attached to the current
60+
Alpha release. Produce it with `npm run package:distribution` after Developer
61+
ID signing and notarytool notarization.
4862

4963
Xcode is still required to create and run iOS Simulators. Alpha CLI tarballs
5064
are attached to
5165
[GitHub Releases](https://github.com/fiveonecode/simulator-broker/releases).
52-
There is no Homebrew formula or npm package yet.
66+
Extract a tarball and run `./bin/simbroker --help`.
5367

5468
`simbroker` help and `simbroker doctor` print human-readable text by default.
5569
Pass `--json` for machine-readable payloads.

SECURITY.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44

55
Security fixes are considered for the current `main` branch and for the latest
66
tagged Alpha (`0.1.0-alpha.1`). Older Alpha tags are not supported. The
7-
published artifact is the CLI tarball on GitHub Releases, not a Homebrew
8-
formula, notarized app, or npm package.
7+
published CLI artifacts are the GitHub Release tarball, the Homebrew
8+
formula that installs that tarball, and the packable `simbroker` npm
9+
package. A signed, notarized operator app zip is not attached to this
10+
Alpha release.
911

1012
## Reporting A Vulnerability
1113

docs/getting-started.md

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ A small public patch follows the public-patches track in
99
[CONTRIBUTING.md](../CONTRIBUTING.md); it does not require the agent harness.
1010

1111
> **Alpha.** macOS only. Xcode is required to create or run iOS Simulators.
12-
> Interfaces can change. There is no Homebrew formula, notarized app, or npm
13-
> package yet.
12+
> Interfaces can change. Install the CLI with Homebrew or the `simbroker`
13+
> npm package. A signed, notarized operator app is not attached to this
14+
> Alpha release yet.
1415
1516
## Prerequisites
1617

@@ -21,6 +22,27 @@ A small public patch follows the public-patches track in
2122
Repo-owned macOS app entrypoints fail fast when `xcodegen` or `xcodebuild` is
2223
missing or unusable. The CLI-only installer does not call them.
2324

25+
## Install the CLI with Homebrew
26+
27+
```bash
28+
brew install fiveonecode/simulator-broker/simbroker
29+
command -v simbroker
30+
simbroker --help
31+
```
32+
33+
That formula installs the tagged Alpha CLI tarball from GitHub Releases.
34+
35+
## Install the CLI with npm
36+
37+
```bash
38+
npm install -g https://github.com/fiveonecode/simulator-broker/releases/download/v0.1.0-alpha.1/simbroker-0.1.0-alpha.1.tgz
39+
command -v simbroker
40+
simbroker --help
41+
```
42+
43+
From a clone, `npm run package:npm` writes the same tarball. The repo-root
44+
package stays private.
45+
2446
## Install the CLI from this checkout
2547

2648
```bash
@@ -145,8 +167,12 @@ SIMBROKER_DISTRIBUTION_SIGNING_IDENTITY='Developer ID Application: Example (TEAM
145167
npm run package:distribution
146168
```
147169

148-
GitHub Releases attach the Alpha CLI tarball. A signed, notarized app is not
149-
published there yet.
170+
GitHub Releases attach the Alpha CLI tarball. The Homebrew cask
171+
`fiveonecode/simulator-broker/simulator-broker` installs
172+
`Simulator Broker.app` from `Simulator-Broker-<version>.zip` on that
173+
release. Produce the zip with `npm run package:distribution` after Developer
174+
ID signing and notarytool notarization. The current Alpha release does not
175+
attach that zip.
150176

151177
## Report a problem
152178

docs/status.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ This Alpha already includes:
2929
harness-adoption, and public-surface checks
3030
- GitHub issue forms for install failure, bug, and feature, plus a light PR
3131
template that does not require a harness session
32+
- Homebrew formula `fiveonecode/simulator-broker/simbroker` for the Alpha CLI
33+
tarball, a packable `simbroker` npm CLI (`npm run package:npm`), and a
34+
Homebrew cask that installs `Simulator Broker.app` from the signed,
35+
notarized GitHub Release zip when that zip is attached
3236
- local-debug packaging through `npm run package:local`
3337
- signed distribution packaging through `npm run package:distribution`
3438
- `simbroker project init` for `.simulator-broker/project.json`
@@ -64,4 +68,5 @@ node client/bin/simbroker.mjs simulators boot --alias ui-1
6468

6569
## Lower-priority public follow-through
6670

67-
- Homebrew formula, notarized app, and npm package
71+
- Attach a signed, notarized `Simulator-Broker-<version>.zip` to GitHub
72+
Releases so the Homebrew cask has a downloadable app artifact

0 commit comments

Comments
 (0)