stim 1.17.0 → 1.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/{android--GorydsK.mjs → android-B6rDWrTm.mjs} +15 -15
  2. package/dist/{budget-DM984mnd.mjs → budget-CUDz870h.mjs} +30 -9
  3. package/dist/{build-plan-CmQCoyT-.mjs → build-plan-BJSXzsCL.mjs} +14 -14
  4. package/dist/{idle-B2m-Ovod.mjs → build-progress-D0WkjCPd.mjs} +56 -183
  5. package/dist/{cli-Daxug5-K.mjs → cli-BLQqDGlX.mjs} +13 -13
  6. package/dist/cli.mjs +1 -1
  7. package/dist/{machines-C2XiNwh9.mjs → client-CxNotugx.mjs} +314 -303
  8. package/dist/{deps-DNWaQs4V.mjs → deps-CVxlsRFn.mjs} +1 -1
  9. package/dist/{device-capacity-D0GWHnTM.mjs → device-capacity-ZC4XSZ4R.mjs} +2 -2
  10. package/dist/device-host-worker.mjs +3 -3
  11. package/dist/{device-ios-Bc7vbGwl.mjs → device-ios-C2Um-XUR.mjs} +1 -1
  12. package/dist/{doctor-Cnk9d7Hm.mjs → doctor-BF_435OC.mjs} +14 -13
  13. package/dist/{gc-DxCL2A46.mjs → gc-BsWKa_-d.mjs} +9 -8
  14. package/dist/{gradle-D7-L2Th3.mjs → gradle-bsBRy6i9.mjs} +1 -1
  15. package/dist/{guide-DjrTQGik.mjs → guide-DC3n6-NH.mjs} +134 -110
  16. package/dist/{hosted-android-DwLS4Mse.mjs → hosted-android-DgU31wY3.mjs} +3 -3
  17. package/dist/{hosted-client-wk1W_CNW.mjs → hosted-client-CdSoH-G6.mjs} +4 -4
  18. package/dist/{hosted-ios-aMo7Cljf.mjs → hosted-ios-BTaVj4Jb.mjs} +1 -1
  19. package/dist/{hosted-logs-DqYmWtXc.mjs → hosted-logs-SxfBvSvc.mjs} +2 -2
  20. package/dist/{hosted-macos-dlHXEeF5.mjs → hosted-macos-CT9E3meL.mjs} +2 -2
  21. package/dist/{hosted-native-C9xJ9rpA.mjs → hosted-native-CZLOrMrN.mjs} +3 -3
  22. package/dist/idle-BXG__1BA.mjs +176 -0
  23. package/dist/{idle-shutdown-_3oOV1V_.mjs → idle-shutdown-IGyNV8Cr.mjs} +1 -1
  24. package/dist/{ios-DE6duQoz.mjs → ios-C7JuT1bI.mjs} +18 -18
  25. package/dist/{logs-DUoKlDoS.mjs → logs-DNxKcok9.mjs} +3 -3
  26. package/dist/{macos-32po3kUq.mjs → macos-BEs8cwKx.mjs} +66 -25
  27. package/dist/maintenance-run.mjs +2 -2
  28. package/dist/{metro-gateway-DmslUM30.mjs → metro-gateway-CHqK0p-a.mjs} +1 -1
  29. package/dist/{native-runtime-DhJI3IVQ.mjs → native-runtime-YhaSxP4v.mjs} +1 -1
  30. package/dist/offload-worker.mjs +5 -5
  31. package/dist/{preview-CxPRIEht.mjs → preview-C_JjkEy4.mjs} +1 -1
  32. package/dist/{reload-qZei6iWn.mjs → reload-byOjE3P4.mjs} +2 -2
  33. package/dist/settings.schema.json +84 -66
  34. package/dist/{start-BopZcr4n.mjs → start-BEP-XmEA.mjs} +1 -1
  35. package/dist/{start-uee1wWjY.mjs → start-BHIersSm.mjs} +1 -1
  36. package/dist/{status-dXX2JX1C.mjs → status-CqeWbIWW.mjs} +8 -8
  37. package/dist/{stop-BjizrQwv.mjs → stop-Cj01je8D.mjs} +3 -3
  38. package/dist/{stop-Cr1d8DSE.mjs → stop-D03prQnW.mjs} +1 -1
  39. package/dist/{stop-BCwvvs7F.mjs → stop-DOxwkH4j.mjs} +1 -1
  40. package/dist/supervisor-run.mjs +4 -4
  41. package/dist/{support-BJPgYCu-.mjs → support-BE-tbOP9.mjs} +4 -4
  42. package/dist/{support-F9-sr0Oi.mjs → support-WvD__tSV.mjs} +2 -2
  43. package/dist/{toolchain-CNIBTIOv.mjs → toolchain-CdrxgUeA.mjs} +1 -1
  44. package/dist/{web-exQtGkoc.mjs → web-DddUdJzr.mjs} +2 -2
  45. package/dist/{worktree-ZpZR3S1k.mjs → worktree-AK_m-d_m.mjs} +6 -6
  46. package/dist/{worktree-Dc98cE6_.mjs → worktree-CsAjSmEo.mjs} +1 -1
  47. package/package.json +5 -5
@@ -136,12 +136,12 @@ To learn whether the next build is a cache hit and how long it should take,
136
136
  without building, run stim ios --plan (or stim android --plan); see stim guide
137
137
  lifecycle builds.
138
138
 
139
- Agents never set STIM_ACCESS_TICKET, run stim-server setup, edit offload.*
140
- or hosting.* for the user, or approve requests. Read stim guide settings for
139
+ Agents never set STIM_ACCESS_TICKET, run stim-server setup, edit remote.*,
140
+ server.* or hosting.* for the user, or approve requests. Read stim guide settings for
141
141
  Desktop access tickets and person-owned approval.
142
- Read stim guide settings to select a build machine. Keep a requested named
142
+ Read stim guide settings to select a remote Mac. Keep a requested named
143
143
  placement when recovering STIM_OFFLOAD_REFUSED: report its reason and remedy.
144
- When the user mentions slow builds, a busy Mac or wanting updates away from the desk, tell them about Stim Desktop > Settings > Build machines > Add or Phones > Pair a Phone; see stim guide settings.
144
+ When the user mentions slow builds, a busy Mac or wanting updates away from the desk, tell them about Stim Desktop > Settings > Remote Macs > Add or Phones > Pair a Phone; see stim guide settings.
145
145
 
146
146
  Read stim guide lifecycle concurrency when a build waits on another workspace
147
147
  or a build call times out. A native build can outlive a shell timeout; if the
@@ -661,8 +661,8 @@ leased until <time>" for each one.`,
661
661
  looked up", which is a different fact from "nothing was found"
662
662
  buildMachine selected auto, local or machine name, including cache hits
663
663
  builtOn here or machine name when a build ran; absent otherwise
664
- offloadedTo only on an app a build machine compiled: its
665
- offload.machines entry (see \`guide settings\`). cacheHit is
664
+ offloadedTo only on an app a remote Mac compiled: its
665
+ remote.machines entry (see \`guide settings\`). cacheHit is
666
666
  false for it. The Android payload carries it too
667
667
  offloadFallback only on an app compiled here after the run considered
668
668
  offloading it: why it built here -- one reason per
@@ -811,7 +811,7 @@ leased until <time>" for each one.`,
811
811
  sets its own CMake compiler launcher, or a Gradle run whose
812
812
  native work was all up to date. None of the three is an
813
813
  error, and this field is separate from cacheHit. On an
814
- offloaded APK it is the build machine's ccache
814
+ offloaded APK it is the remote Mac's ccache
815
815
  logs the workspace log directory
816
816
  agentDevice { stateDir }: absolute workspace agent-device state path
817
817
  durationMs wall time for the whole run
@@ -911,18 +911,18 @@ leased until <time>" for each one.`,
911
911
  android would reclaim, in the \`reclaimed\` shape without
912
912
  freedMb, and is empty while under budget
913
913
  deviceHosts one { machine, state, dnsName?, deviceId?, requestedAt?, host? }
914
- per hosting.machines entry. state is "approved", "pending",
914
+ per remote.machines entry. state is "approved", "pending",
915
915
  "not-asked", "revoked", "node-changed", "not-on-tailnet",
916
916
  "tailscale-off", "unreachable", "invalid",
917
917
  "credentials-unavailable" or "busy". Tokens stay private.
918
918
  Only --fix asks for access or forgets removed names.
919
- An approved hosting machine does not imply build approval
920
- or change ios/android placement; see \`guide settings\`.
919
+ A remote Mac approved for device hosting does not imply
920
+ build approval; see \`guide settings\`.
921
921
  host is { name, screenRecording, accessibility }, present
922
922
  only for approved machines whose worker reports it.
923
- buildMachines one { machine, state, dnsName?, deviceId?, requestedAt?,
923
+ remoteMachines one { machine, state, dnsName?, deviceId?, requestedAt?,
924
924
  offloadable?, reasons?, problems?, capacity?, host? } per
925
- offload.machines entry; state is "approved", "pending", "not-asked",
925
+ remote.machines entry, for its build approval; state is "approved", "pending", "not-asked",
926
926
  "revoked" (revoked, or the request lapsed), "node-changed",
927
927
  "not-on-tailnet", "tailscale-off", "unreachable" or
928
928
  "invalid". host has the same shape and presence rule as in
@@ -945,7 +945,7 @@ leased until <time>" for each one.`,
945
945
  optional fields
946
946
  findings the diagnostic findings; a lower resolved Stim is a
947
947
  costs-time finding with a PATH or installation remedy
948
- offload-candidate is a note after 3+ successful local cold builds in 7 days average over 3 min, with no offload.machines and an online tailnet Mac; open Stim Desktop Settings > Build machines > Add
948
+ offload-candidate is a note after 3+ successful local cold builds in 7 days average over 3 min, with no remote.machines and an online tailnet Mac; open Stim Desktop Settings > Remote Macs > Add
949
949
 
950
950
  ON FAILURE
951
951
  \`start\`, \`ios\`, \`android\` and \`web\` all print the error contract instead,
@@ -1658,8 +1658,8 @@ RULES
1658
1658
  finished request, status "ok" or "failed", durationMs from the
1659
1659
  request to the end of the response
1660
1660
 
1661
- Each entry of environments also carries build: null, or the ios or android
1662
- run that holds this workspace's native-run.lock:
1661
+ Each entry of environments also carries build: null, or the ios, android or
1662
+ macos run that holds this workspace's native-run.lock:
1663
1663
 
1664
1664
  build { platform, slot, state, phase, startedAt, phaseStartedAt,
1665
1665
  outcome, outcomeKnown, cacheLookupOutcome?, expectedMs, expectedPhaseMs,
@@ -1684,6 +1684,11 @@ RULES
1684
1684
  finishes during the build adds no device time. An
1685
1685
  --eas-profile run has no cache lookup, so its outcome
1686
1686
  stays the project's most recent one until install.
1687
+ A stim macos run enters only prepare, compile (SwiftPM,
1688
+ with detail), install (staging the bundle, or fetching
1689
+ it from a build machine) and launch. It has no cache
1690
+ lookup: outcome is null, plannedPhases is null, and
1691
+ builds.macos holds its finished runs and their phases.
1687
1692
  startedAt when the run started; phaseStartedAt when its phase did
1688
1693
  outcome "cold" after the local/provider lookups resolve a miss;
1689
1694
  "hit" after a cached artifact is ready to reuse, including
@@ -1733,20 +1738,24 @@ RULES
1733
1738
  reads: { step, unit, done, total, line, updatedAt }
1734
1739
  step the tool's step: configure, compile, link, resources,
1735
1740
  script, dex, package or sign; null before one is known
1736
- unit "targets" for xcodebuild, "tasks" for Gradle
1741
+ unit "targets" for xcodebuild, "tasks" for Gradle, "steps" for
1742
+ SwiftPM (stim macos)
1737
1743
  done xcodebuild: targets it finished (a target counts once
1738
1744
  xcodebuild touches or signs its product, so an
1739
1745
  incremental build can end below total); Gradle: tasks
1740
- it reported so far
1746
+ it reported so far; SwiftPM: the done of its latest
1747
+ [done / total] line
1741
1748
  total xcodebuild: targets in its dependency graph; Gradle: null,
1742
- since its plain output gives no total
1749
+ since its plain output gives no total; SwiftPM: the
1750
+ total of its latest [done / total] line, which can grow
1751
+ as SwiftPM plans more of the build
1743
1752
  line the latest compile, link or task line, paths shortened
1744
1753
  to file names, at most 160 characters
1745
1754
  updatedAt when the build last wrote it; the run writes it at most
1746
1755
  every 2 seconds
1747
1756
  placement where the build runs: "local", or while it is offloaded
1748
1757
  { host, phase, startedAt, phaseStartedAt }. host is the
1749
- offload.machines entry; phase is the step there: sync,
1758
+ remote.machines entry; phase is the step there: sync,
1750
1759
  deps, prebuild, pods, build (xcodebuild or Gradle) or fetch;
1751
1760
  startedAt is when the offload started and phaseStartedAt
1752
1761
  when that step did. Meanwhile phase above follows it as
@@ -1800,7 +1809,7 @@ RULES
1800
1809
  lookup, and create no lastBuild record or failed-run stats.
1801
1810
  buildMachine selected auto, local or configured machine entry; always on new build records
1802
1811
  builtOn here or machine name; absent when no build ran (cache/refusal)
1803
- offloadedTo only on a run a build machine compiled: its name
1812
+ offloadedTo only on a run a remote Mac compiled: its name
1804
1813
  offloadFallback
1805
1814
  only on a run that considered offloading and built here: one
1806
1815
  reason per machine when none took the build, or why the
@@ -1833,7 +1842,7 @@ RULES
1833
1842
  last 10 runs, newest first. Its newest entry that is not "interrupted" is
1834
1843
  the run lastBuilds reports, once a run has recorded builds.
1835
1844
 
1836
- builds { ios?, android? }, each a list of lastBuilds entries
1845
+ builds { ios?, android?, macos? }, each a list of lastBuilds entries
1837
1846
  with { result, slot, configuration, cacheKey, phases }
1838
1847
  result "succeeded", "failed", "cancelled" (Stim stopped the run
1839
1848
  after an interrupt or \`stim stop\`) or "interrupted": its
@@ -2062,7 +2071,7 @@ RULES
2062
2071
  A bucket carries runs, failed, hits, misses, coldRuns, coldRunMs, hitRuns,
2063
2072
  hitRunMs, timeSavedMs, firstRunAt and lastRunAt, plus lastColdBuildMs and
2064
2073
  lastPodsMs once the project has compiled or installed pods, and
2065
- offloadedRuns, offloadedRunMs and lastOffloadHost once a build machine
2074
+ offloadedRuns, offloadedRunMs and lastOffloadHost once a remote Mac
2066
2075
  compiled one. An offloaded run is a miss but not a cold run, so the cold
2067
2076
  average, time saved and build estimates stay local. Milliseconds are
2068
2077
  integers.
@@ -2181,10 +2190,10 @@ BUILD PLACEMENT (\`offload\`)
2181
2190
  decision, reason, machine?, buildMs?, slotWaitMs?, deviceSlotWaitMs?, localEstimateMs?, failed? }.
2182
2191
  slotWaitMs and deviceSlotWaitMs are whole milliseconds waiting for build
2183
2192
  and owned-device slots respectively, present only when positive.
2184
- decision is "here", "offloaded", or "fell-back" (it tried a build machine
2193
+ decision is "here", "offloaded", or "fell-back" (it tried a remote Mac
2185
2194
  and built here). reason is why: the run's \`placement:\` reason, such as
2186
2195
  "load 0.6/core, 1 of 3 build slots busy here" (auto keeps the build here
2187
- while this Mac has room) or "offload.mode is off" (which prints no line),
2196
+ while this Mac has room) or "remote.buildMode is off" (which prints no line),
2188
2197
  or for a fallback the cause, prefixed by the machine it concerns, such as
2189
2198
  "mini: no less loaded (load 1.2/core there, 0.6/core here)". buildMs is the compile here, or the offloaded build's
2190
2199
  total (offer, sync, build and fetch); localEstimateMs is this project's
@@ -2996,7 +3005,7 @@ Branch on the code, never on the message.`,
2996
3005
  logs prints a note on stderr and shows copied records. Update an older stim-server
2997
3006
  on the host to enable handoff and native logs (hello features hosted-ios-data
2998
3007
  for iOS and hosted-android-data for Android).
2999
- A name outside hosting.machines is STIM_BAD_ARG. Missing or pending hosting
3008
+ A name outside remote.machines is STIM_BAD_ARG. Missing or pending hosting
3000
3009
  approval keeps the doctor --fix and stim-server devices grant remedies.`
3001
3010
  },
3002
3011
  STIM_EAS_BUILD_MISSING: {
@@ -3295,10 +3304,10 @@ Branch on the code, never on the message.`,
3295
3304
  works. See stim guide macos.`
3296
3305
  },
3297
3306
  STIM_OFFLOAD_REFUSED: {
3298
- summary: "the selected build machine cannot build this app",
3307
+ summary: "the selected remote Mac cannot build this app",
3299
3308
  body: () => `STIM_OFFLOAD_REFUSED
3300
3309
 
3301
- A named --build-machine selection is strict. The message names the machine
3310
+ A named --remote-build selection is strict. The message names the machine
3302
3311
  and why it cannot take or finish the build: not configured or paired, approval
3303
3312
  pending or denied, unreachable or changed pinned identity, incompatible
3304
3313
  toolchain/runtime/CPU, low disk, busy, sync/build failure, artifact failure,
@@ -3310,12 +3319,12 @@ a build record or failed-run stats. A listed paired name with a cache hit needs
3310
3319
  no build and does not contact the selected machine.
3311
3320
 
3312
3321
  Run stim doctor --fix to ask for build access if not paired. Check
3313
- stim settings get offload.machines. A person on the worker finds the id with
3322
+ stim settings get remote.machines. A person on the worker finds the id with
3314
3323
  stim-server devices and approves this Mac with stim-server devices grant <id> --build,
3315
3324
  or runs stim-server setup on the worker with its node, ticket and expiry
3316
3325
  (guide settings). Agents never run setup or approve requests.
3317
- Rerun with --build-machine auto for normal placement and local fallback, or
3318
- --build-machine local to keep the build here.
3326
+ Rerun with --remote-build auto for normal placement and local fallback, or
3327
+ --remote-build local to keep the build here.
3319
3328
  `
3320
3329
  },
3321
3330
  STIM_WORKTREE_SERVICE: {
@@ -4799,7 +4808,7 @@ WAITING FOR A CHANGE
4799
4808
 
4800
4809
  If Stim is not installed globally, replace stim with npx stim.
4801
4810
 
4802
- stim settings set hosting.machines '["janics-mac-mini"]'
4811
+ stim settings set remote.machines '["janics-mac-mini"]'
4803
4812
  stim doctor --fix
4804
4813
  stim doctor
4805
4814
  stim android --remote janics-mac-mini --device-profile pixel_7
@@ -4821,7 +4830,7 @@ Unreadable android.host blocks only its slot; restore its recorded machine and
4821
4830
  session from the host before stopping that slot.
4822
4831
 
4823
4832
  --system-image and --device-profile select installed choices on the host.
4824
- The build targets the offered ABI and --build-machine independently selects a
4833
+ The build targets the offered ABI and --remote-build independently selects a
4825
4834
  compatible build worker. Stim builds before reserving, records the session as
4826
4835
  soon as it exists, then delivers one App.apk. The emulator boots headless;
4827
4836
  androidEmulatorApp is ignored with a note.
@@ -4941,7 +4950,7 @@ and show records already copied here.`
4941
4950
 
4942
4951
  If Stim is not installed globally, replace stim with npx stim.
4943
4952
 
4944
- stim settings set hosting.machines '["janics-mac-mini"]'
4953
+ stim settings set remote.machines '["janics-mac-mini"]'
4945
4954
  stim doctor --fix
4946
4955
  # A person there approves: stim-server devices grant <id> --device-host
4947
4956
  # Or runs stim-server setup on the worker with its client node, ticket and expiry.
@@ -4952,22 +4961,22 @@ If Stim is not installed globally, replace stim with npx stim.
4952
4961
  stim stop
4953
4962
 
4954
4963
  The same setup serves macos --remote. Approval is separate from build, read
4955
- and phone control. Set ios.remote to the machine name for a workspace default;
4964
+ and phone control. Set ios.remote to the machine name for a default (machine scope for the whole Mac);
4956
4965
  no flag or setting runs here. eas and proxy keep their remote backend meanings.
4957
4966
  --remote auto (or ios.remote = auto / android.remote = auto) stays here when
4958
4967
  there is a free concurrency.maxDevices slot (0 means unlimited), no device
4959
4968
  waiter ahead, normal host memory pressure, no budget shortfall,
4960
- and 5-minute load per core below offload.maxLoadPerCore. Without hosting.machines,
4969
+ and 5-minute load per core below server.maxLoadPerCore. Without remote.machines,
4961
4970
  auto is local. An unknown local device count also stays local; boot admission
4962
4971
  still decides. The default without a flag or setting stays local.
4963
4972
 
4964
- Otherwise Stim asks every approved hosting.machines host in parallel, with a
4973
+ Otherwise Stim asks every approved remote.machines host in parallel, with a
4965
4974
  3-second probe timeout and this run's model/runtime or image/profile selectors.
4966
4975
  A compatible choice, no declined reason, normal memory pressure and available
4967
4976
  capacity are required. With a free local slot, a host must report a lower load;
4968
4977
  with a full cap or a queue ahead, an admitted host with unknown load is allowed.
4969
- Hosts rank by the build preference (flag > STIM_OFFLOAD_MACHINE > offload.machine)
4970
- when it names a machine, then lowest load, most free memory and hosting.machines order. Automatic build
4978
+ Hosts rank by the build preference (flag > STIM_REMOTE_BUILD > remote.build)
4979
+ when it names a machine, then lowest load, most free memory and remote.machines order. Automatic build
4971
4980
  offload resolves later, after the device architecture is known.
4972
4981
 
4973
4982
  When no host admits, auto runs here and may wait in the existing FIFO device
@@ -4990,7 +4999,7 @@ here or elsewhere. --device cannot use a hosting Mac, and --simulator-app
4990
4999
  refuses. The host boots headless and ignores this Mac's iosSimulatorApp setting.
4991
5000
  --slot, --device-type and --runtime select the hosted simulator; --scheme,
4992
5001
  --configuration and --eas-profile select the app as usual. The build targets
4993
- the offered simulator architecture, not this Mac's. --build-machine remains
5002
+ the offered simulator architecture, not this Mac's. --remote-build remains
4994
5003
  independent and selects a compatible build worker for a Debug cache miss.
4995
5004
 
4996
5005
  The host's own owned devices count toward concurrency.maxDevices.
@@ -6307,8 +6316,8 @@ OPT-IN CONCURRENCY LIMITS (UNLIMITED BY DEFAULT)
6307
6316
  summary: "every flag per command, Android variants and flavors, the per-run simulator model, runtime and system image",
6308
6317
  body: () => `THE OPTION SURFACE, IN FULL
6309
6318
  start --json --wait <seconds> --remote --reset-cache
6310
- ios --build-machine <auto|local|name> --slot <name> --json --plan --no-metro-check --no-build-cache --scheme <name> --configuration <name> --device-type <name> --runtime <version> --simulator-app <xcode|siniulator|stim-desktop> --device [udid] --wait <seconds> --no-wait --remote <eas|proxy|auto|machine>
6311
- android --build-machine <auto|local|name> --slot <name> --json --plan --no-metro-check --no-build-cache --variant <name> --system-image <id> --device-profile <id> --device [serial] --wait <seconds> --no-wait --remote <proxy|eas>
6319
+ ios --remote-build <auto|local|name> --slot <name> --json --plan --no-metro-check --no-build-cache --scheme <name> --configuration <name> --device-type <name> --runtime <version> --simulator-app <xcode|siniulator|stim-desktop> --device [udid] --wait <seconds> --no-wait --remote <eas|proxy|auto|machine>
6320
+ android --remote-build <auto|local|name> --slot <name> --json --plan --no-metro-check --no-build-cache --variant <name> --system-image <id> --device-profile <id> --device [serial] --wait <seconds> --no-wait --remote <proxy|eas>
6312
6321
  ios/android --wait bounds owned-device slot waits (default 600s), or physical
6313
6322
  leases with --device (default 60s). Remote targets do not join this local
6314
6323
  slot queue. --no-wait refuses a full/queued owned
@@ -7186,7 +7195,10 @@ to stats.json.corrupt-<unix ms> and starts a new one.`,
7186
7195
  stim gc --delete --cache archived-logs delete logs, keep records
7187
7196
  stim gc --delete --cache archived-recordings delete recordings, keep records
7188
7197
  stim gc --delete --cache archived-agent delete agent actions, keep records
7189
- Per-kind selectors also accept --older-than, measured from removedAt.
7198
+ stim gc --delete --cache archived-logs:<id> one kind of one archive, keep its record
7199
+ (archived-recordings:<id> and archived-agent:<id> likewise; they ignore --older-than;
7200
+ an unknown id refuses with STIM_BAD_ARG)
7201
+ Per-kind selectors without an id also accept --older-than, measured from removedAt.
7190
7202
  Normal gc, --cache all, --worktrees and unscoped --older-than exclude archives.
7191
7203
  Archive scopes report abandoned staging directories and delete only those
7192
7204
  with no live or unresolved claim. An unresolved claim names its removal command.
@@ -7638,7 +7650,7 @@ THE ONE CASE GC WILL NOT REAP
7638
7650
  check and the stop fails and must be run again, so gc re-checks the build
7639
7651
  locks and the daemon's status right before each stop. Nothing is stopped while an Android build lock, or a build slot no
7640
7652
  iOS build holds, is live or unresolved. stim-server stops the daemons of
7641
- offloaded builds (offload.gradleDaemonIdleMinutes, \`guide settings\`), so
7653
+ offloaded builds (server.gradleDaemonIdleMinutes, \`guide settings\`), so
7642
7654
  while it runs gc keeps those. A daemon whose home, distribution or status cannot be read is
7643
7655
  kept. Gradle stops an idle daemon itself after 3 hours and Kotlin after 2
7644
7656
  hours by default.
@@ -7900,7 +7912,7 @@ KEYS STIM READS
7900
7912
  a JS-bundle swap on cache hits. The \`--configuration\`
7901
7913
  flag overrides this per invocation. Unset means Debug.
7902
7914
  ios.remote "proxy", "eas", or a named approved Mac from
7903
- hosting.machines, with the same meaning as --remote.
7915
+ remote.machines, with the same meaning as --remote.
7904
7916
  "auto" places on an approved Mac when this Mac is full or
7905
7917
  busy. Unset runs here. See lifecycle hosted-ios.
7906
7918
  ios.simslimProfile a SimSlim JSON profile under the app directory,
@@ -8043,7 +8055,7 @@ ${ANDROID_AVD_CONFIG_HELP.map((line) => ` ${line}`).joi
8043
8055
  bare string is used as the literal password. Unset
8044
8056
  means the debug keystore's fixed "android".
8045
8057
  android.remote "proxy", "eas", or a named approved Mac in
8046
- hosting.machines; "auto" places on an approved Mac when
8058
+ remote.machines; "auto" places on an approved Mac when
8047
8059
  this Mac is full or busy. Unset runs here.
8048
8060
  See lifecycle hosted-android.
8049
8061
  metro.tunnel selects how a remote device reaches this workspace's
@@ -8368,31 +8380,37 @@ wants a pool says so with the variable.
8368
8380
  DESKTOP ACCESS TICKETS
8369
8381
  Stim Desktop's Add wizard sets STIM_ACCESS_TICKET for one \`doctor --fix\`
8370
8382
  run. Agents never set it, never run \`stim-server setup\`, never edit
8371
- \`offload.*\` or \`hosting.*\` for the user, and never approve requests.
8383
+ \`remote.*\`, \`server.*\` or \`hosting.*\` for the user, and never approve requests.
8372
8384
  Stim sends the ticket (43 base64url characters) only in build and device-host access
8373
8385
  requests and stores only its SHA-256 ticketHash. With --fix, a still-pending
8374
8386
  request is replaced when its ticketHash is missing or differs from the current
8375
8387
  ticket; matching hashes and approved credentials are preserved.
8376
- Approved doctor entries under buildMachines and deviceHosts include host
8388
+ Approved doctor entries under remoteMachines and deviceHosts include host
8377
8389
  { name, screenRecording, accessibility } when the worker reports it.
8378
8390
 
8379
- BUILD MACHINES AND PHONE APP
8391
+ REMOTE MACS AND PHONE APP
8380
8392
  When the user mentions slow builds, a busy Mac, a full disk or device limit, or
8381
8393
  wanting updates away from the desk, tell them about Stim Desktop > Settings >
8382
- Build machines > Add (a Mac on the tailnet that builds or hosts simulators for
8394
+ Remote Macs > Add (a Mac on the tailnet that builds or hosts simulators for
8383
8395
  this one) or Phones > Pair a Phone (the Stim phone app). Stim Desktop also
8384
8396
  suggests these itself, at most once a day and never during a build. Agents only
8385
- tell the user: they never run \`stim-server setup\`, never edit \`offload.*\` or
8386
- \`hosting.*\` for the user, and never approve requests.
8397
+ tell the user: they never run \`stim-server setup\`, never edit \`remote.*\`,
8398
+ \`server.*\` or \`hosting.*\` for the user, and never approve requests.
8387
8399
 
8388
- HOSTING MACHINES ARE MACHINE-LEVEL
8389
- \`hosting.machines\` names Macs that may host owned simulator sessions,
8390
- by MagicDNS name with an optional serve port (default 7443). Name each node
8391
- and port once. This is separate from build offloading:
8400
+ REMOTE MACS ARE MACHINE-LEVEL
8401
+ \`remote.machines\` names the remote Macs this Mac may build on and host owned
8402
+ simulator sessions on, by MagicDNS name with an optional serve port (default
8403
+ 7443). Name each node and port once:
8392
8404
 
8393
- stim settings set hosting.machines '["janics-mac-mini"]'
8405
+ stim settings set remote.machines '["janics-mac-mini"]'
8394
8406
  stim doctor --fix
8395
8407
 
8408
+ A remote Mac is used for a capability only after it grants that approval. Build
8409
+ and device-host approvals are separate: a Mac in the list that never granted
8410
+ one is not an error, it is not used for that capability, and doctor reports
8411
+ it plainly.
8412
+
8413
+ DEVICE HOSTING
8396
8414
  Only \`doctor --fix\` asks for device-host access. A person on that Mac
8397
8415
  approves the printed id with \`stim-server devices grant <id> --device-host\`.
8398
8416
  A person can also run \`stim-server setup\` on the worker: one node, one ticket,
@@ -8404,7 +8422,7 @@ unless every chosen capability already has a matching approval. Desktop reuse
8404
8422
  requires an existing tailnet route. Ctrl-C or SIGTERM completes the journal,
8405
8423
  releases the setup claim and exits 1; a typed N also exits 1. Hosting grants
8406
8424
  include no read, control or build capability.
8407
- On the hosting Mac, Stim Desktop > Settings > Phones > Hosted here lists the
8425
+ On a remote Mac that hosts, Stim Desktop > Settings > Phones > Hosted here lists the
8408
8426
  simulators, emulators and apps approved Macs run there, below Device hosting
8409
8427
  approvals. Stop asks for confirmation, ends the session and deletes or parks
8410
8428
  its device on that Mac. Parked sessions remain listed without Stop. The list
@@ -8413,7 +8431,8 @@ support it.
8413
8431
  $STIM_HOME/device-host-machines.json stores a private token and pinned tailnet
8414
8432
  node. Doctor never prints the token; it reports each machine under deviceHosts
8415
8433
  in JSON. Desktop uses placement set by config or agents, such as
8416
- stim settings set ios.remote auto --scope workspace (or android.remote),
8434
+ stim settings set ios.remote auto --scope machine (or android.remote; workspace,
8435
+ repo and committed scopes override the machine default),
8417
8436
  or per run stim ios --remote auto / stim ios --remote <machine>.
8418
8437
  New Desktop runs pass no --remote flag; recorded hosted sessions keep their
8419
8438
  machine until stim stop. Only devices outside this Mac show "on <machine>"
@@ -8422,19 +8441,19 @@ as hover text.
8422
8441
  Stim sends tokens only to the pinned node's own tailnet address,
8423
8442
  with its MagicDNS name for TLS and Host routing. A changed node refuses
8424
8443
  access, and uncertain replies or unreadable credentials preserve the pin.
8425
- Invalid hosting settings report an error and preserve every saved credential.
8426
- \`doctor --fix\` forgets entries removed from hosting.machines; remove a
8444
+ An invalid remote.machines setting reports an error and preserves every saved credential.
8445
+ \`doctor --fix\` forgets entries removed from remote.machines; remove a
8427
8446
  replaced machine, run it, then re-add the name to request a new approval.
8428
8447
  A definite revoked or lapsed request can be requested again with --fix.
8429
8448
  An in-progress approval inspection reports busy rather than replacing its
8430
8449
  pending token. \`stim macos --remote <machine>\` runs a macOS app on an
8431
- approved machine (stim guide macos); \`ios\` and \`android\` do not yet
8432
- place sessions on these machines. To view or control a hosted macOS app, a person
8450
+ approved remote Mac (stim guide macos); \`ios\` and \`android\` do not yet
8451
+ place sessions on these Macs. To view or control a hosted macOS app, a person
8433
8452
  on that Mac approves Screen & System Audio Recording and Device Control and Data
8434
8453
  Access (Accessibility on macOS 26 and earlier) for Stim Host, the app
8435
8454
  \`stim-server service install\` runs the server under.
8436
8455
 
8437
- On a hosting Mac, \`hosting.agentDriver\` names the tool it starts so a
8456
+ On a remote Mac that hosts, \`hosting.agentDriver\` names the tool it starts so a
8438
8457
  client's coding agent can drive the macOS apps, iOS simulators and Android emulators it hosts for that client.
8439
8458
  The default, \`none\`, starts nothing. For macOS, \`agent-device\` starts its
8440
8459
  shared daemon only when that agent-device can lease a single app (its
@@ -8448,13 +8467,11 @@ uses one daemon per emulator, pinned by its serial policy, with agent-device
8448
8467
  hosted-ios. \`doctor\` on that Mac notes an installed hosted app that runs while
8449
8468
  the setting is \`none\`.
8450
8469
 
8451
- BUILD MACHINES ARE MACHINE-LEVEL
8452
- \`offload.machines\` lists the Macs on the tailnet that may build for this one,
8453
- by MagicDNS name, each optionally with the port of its \`tailscale serve\`
8454
- route (default 7443):
8470
+ REMOTE BUILDS
8471
+ The same \`remote.machines\` list names the Macs that may build for this one:
8455
8472
 
8456
8473
  {
8457
- "offload": { "machines": ["janics-mac-mini"] }
8474
+ "remote": { "machines": ["janics-mac-mini"] }
8458
8475
  }
8459
8476
 
8460
8477
  \`doctor --fix\`, run in any app directory, asks each named Mac for build access and pins its tailnet
@@ -8465,27 +8482,27 @@ ticket and expiry, under the approval rule above. Build never includes read
8465
8482
  or control.
8466
8483
  Stim connects to a named Mac only while its name still belongs to the pinned
8467
8484
  node and never sends the token to another node. \`doctor\` reports each
8468
- machine's pairing state and, for an approved machine, asks it for one build
8485
+ remote Mac's build pairing state and, for an approved one, asks it for one build
8469
8486
  offer and lists every reason it would not take this app's iOS build: no
8470
8487
  answer, another Stim build, CPU, Xcode, simulator SDK or CocoaPods, no
8471
8488
  Bundler for an app whose Gemfile.lock pins CocoaPods, no iPhone simulator on
8472
8489
  the runtime \`stim ios\` builds for here, low disk, or busy. With Package.swift
8473
8490
  and no platform selection on a Mac, it also checks the macOS Xcode and SDK.
8474
8491
 
8475
- \`offload.machine\` (machine scope, default auto) selects placement for
8476
- \`ios\`, \`android\` and \`macos\`. \`--build-machine <auto|local|name>\`
8477
- overrides STIM_OFFLOAD_MACHINE, which overrides the setting. A blank environment
8492
+ \`remote.build\` (machine scope, default auto) selects placement for
8493
+ \`ios\`, \`android\` and \`macos\`. \`--remote-build <auto|local|name>\`
8494
+ overrides STIM_REMOTE_BUILD, which overrides the setting. A blank environment
8478
8495
  value is unset. Trimmed auto/local are case-insensitive. Machine names match
8479
8496
  configured names case-insensitively, with port 7443 when omitted; reports use
8480
8497
  the configured entry.
8481
8498
 
8482
- auto follows offload.mode and keeps its local fallback behavior
8499
+ auto follows remote.buildMode and keeps its local fallback behavior
8483
8500
  local builds only on this Mac for this invocation
8484
- name requires a matching entry in offload.machines, already paired and
8485
- approved; ignores offload.mode and this Mac's load/slot gating
8501
+ name requires a matching entry in remote.machines, already paired and
8502
+ approved for builds; ignores remote.buildMode and this Mac's load/slot gating
8486
8503
 
8487
- A name never prompts for pairing, tries another machine or falls back here.
8488
- Any refusal or failure is STIM_OFFLOAD_REFUSED with the machine and reason.
8504
+ A name never prompts for pairing, tries another remote Mac or falls back here.
8505
+ Any refusal or failure is STIM_OFFLOAD_REFUSED with the remote Mac and reason.
8489
8506
  Device, Release/non-Debug, --remote, Android CAS compiler builds, builds with
8490
8507
  the build cache off, and an unknown simulator runtime cannot build there and
8491
8508
  refuse on a cache miss. Invalid values, unlisted names and unpaired names refuse
@@ -8498,39 +8515,39 @@ starts no local xcodebuild, Gradle or SwiftPM compile.
8498
8515
  Run stim doctor --fix to ask for build access if not paired. A person on the
8499
8516
  worker finds the id with stim-server devices and approves it with
8500
8517
  stim-server devices grant <id> --build, or runs stim-server setup there with
8501
- the client node, ticket and expiry. Check stim settings get offload.machines,
8502
- or rerun with --build-machine auto or --build-machine local. Ctrl-C cancels
8518
+ the client node, ticket and expiry. Check stim settings get remote.machines,
8519
+ or rerun with --remote-build auto or --remote-build local. Ctrl-C cancels
8503
8520
  the remote build without a local xcodebuild, Gradle or SwiftPM compile.
8504
8521
 
8505
8522
  Copyable agent prompt:
8506
- Run stim ios --build-machine janics-mac-mini. If it refuses, report the
8523
+ Run stim ios --remote-build janics-mac-mini. If it refuses, report the
8507
8524
  STIM_OFFLOAD_REFUSED reason and remedy; do not retry with another placement.
8508
8525
 
8509
- With offload.machine auto, \`offload.mode\` decides where an iOS simulator Debug build or an Android
8526
+ With remote.build auto, \`remote.buildMode\` decides where an iOS simulator Debug build or an Android
8510
8527
  emulator debug build or a stim macos SwiftPM Debug build compiles:
8511
8528
 
8512
8529
  auto (default) here while this Mac has capacity: a free
8513
8530
  \`concurrency.maxBuilds\` slot (always, with no build limit) and a
8514
- load per core under \`offload.maxLoadPerCore\`. Otherwise on a
8515
- build machine that accepts the build and is expected to be faster:
8516
- while every slot here is busy, any machine that accepts; while only
8517
- the load is high, a machine whose load per core is lower than this
8518
- Mac's. A machine too old to report its load counts only while every
8531
+ load per core under \`server.maxLoadPerCore\`. Otherwise on a
8532
+ remote Mac that accepts the build and is expected to be faster:
8533
+ while every slot here is busy, any remote Mac that accepts; while only
8534
+ the load is high, one whose load per core is lower than this
8535
+ Mac's. A Mac too old to report its load counts only while every
8519
8536
  slot here is busy.
8520
- force on a build machine whenever one accepts it
8537
+ force on a remote Mac whenever one accepts it
8521
8538
  off always here
8522
8539
 
8523
8540
  Load per core is the 5-minute load average divided by the CPU count; a Mac's
8524
8541
  native builds are its Stim runs in prebuild, pods or compile on that Mac, not
8525
8542
  the ones it offloaded.
8526
- \`offload.maxLoadPerCore\` (default 2) is also the busy threshold for
8543
+ \`server.maxLoadPerCore\` (default 2) is also the busy threshold for
8527
8544
  automatic iOS and Android device placement. It is the load per core at which a Mac
8528
- counts as saturated, both here and on a build machine.
8545
+ counts as saturated, both here and on a remote Mac.
8529
8546
 
8530
- STIM_OFFLOAD_MODE overrides it for one command. Device, Release and
8547
+ STIM_REMOTE_BUILD_MODE overrides it for one command. Device, Release and
8531
8548
  \`--remote eas|proxy\` builds, Android builds with the Apple Clang CAS compiler cache,
8532
8549
  and iOS/Android runs with the build cache off, always build here. Hosted iOS
8533
- Debug builds can use a separate --build-machine, targeting the hosting Mac's
8550
+ Debug builds can use a separate --remote-build, targeting the hosting Mac's
8534
8551
  architecture and runtime.
8535
8552
  macOS uses matching Xcode and macOS SDK, with a per-client SwiftPM dependency
8536
8553
  cache on the worker. It skips JavaScript dependencies, prebuild and pods; see
@@ -8577,27 +8594,27 @@ An offloaded app lands only in this Mac's build cache, not in a remote cache
8577
8594
  provider. A project whose xcodebuild changes its own fingerprinted inputs
8578
8595
  fails the offload fingerprint check: auto builds here; a named placement refuses.
8579
8596
 
8580
- On the build machine, stim-server keeps each client's checkouts, dependencies,
8597
+ On a remote Mac that builds for others, stim-server keeps each client's checkouts, dependencies,
8581
8598
  DerivedData, compilation cache, ccache and Gradle home under
8582
- \`offload.workerRoot\` (absolute; default $STIM_HOME/build-worker), one area
8599
+ \`server.workerRoot\` (absolute; default $STIM_HOME/build-worker), one area
8583
8600
  and Stim home per client and repository, and one Gradle home per client. It
8584
8601
  runs one offloaded build at a time. It declines a build while that volume has
8585
8602
  less than 10 GB free, while its own native builds and the offloaded one fill
8586
8603
  its \`concurrency.maxBuilds\`, or while its load per core is at or above its
8587
- \`offload.maxLoadPerCore\`, and reports the reason in its offer. It boots and
8604
+ \`server.maxLoadPerCore\`, and reports the reason in its offer. It boots and
8588
8605
  installs nothing. While an offloaded build runs there, it holds one of that
8589
8606
  Mac's \`concurrency.maxBuilds\` slots, so a local Stim build there waits for it
8590
8607
  and counts it as busy; the slot is freed when the build ends, is cancelled or
8591
8608
  its process is gone. Android builds there run on the JDK in stim-server's
8592
8609
  JAVA_HOME (else the macOS default JDK) with the SDK in its ANDROID_HOME (else
8593
8610
  ~/Library/Android/sdk). The client's Gradle daemon stays warm there for
8594
- \`offload.gradleDaemonIdleMinutes\` (default 30; 0 stops it when each build
8611
+ \`server.gradleDaemonIdleMinutes\` (default 30; 0 stops it when each build
8595
8612
  ends; a new value applies from the next daemon) and never holds a build
8596
8613
  slot. While none of the client's builds runs, stim-server stops it sooner
8597
8614
  when a build is cancelled, the client is revoked, or the machine has less
8598
8615
  than 2 GB of memory available, and deleting the client's directory under the
8599
8616
  worker root stops it too.
8600
- \`stim-server service install [--serve]\` on the build machine keeps stim-server
8617
+ \`stim-server service install [--serve]\` on the remote Mac keeps stim-server
8601
8618
  running as a login LaunchAgent; \`--path-prepend <dir>\` and \`--env KEY=VALUE\`
8602
8619
  pin a PATH entry or variable such as a private CocoaPods that stim-server's
8603
8620
  login-shell environment would otherwise replace.
@@ -9120,7 +9137,7 @@ var macos_default = {
9120
9137
 
9121
9138
  If Stim is not installed globally, replace stim with npx stim.
9122
9139
 
9123
- ios --remote <machine> shares hosting.machines and its separate device-host
9140
+ ios --remote <machine> shares remote.machines and its separate device-host
9124
9141
  approval. Read guide lifecycle hosted-ios for simulator placement and Metro.
9125
9142
 
9126
9143
  Run from the directory containing Package.swift. This prototype builds one
@@ -9172,6 +9189,13 @@ Stim Desktop honors. An app that activates itself at launch still takes focus.
9172
9189
  Hosted launches (macos --remote) do not set it.
9173
9190
  macOS artifacts are not cached. This prototype has no --plan, --slot, or reload command.
9174
9191
  A failed build records its error and compiler output without launching an app.
9192
+ While it runs, stim status --json reports it as environments[].build with
9193
+ platform "macos": phase prepare, compile, install, then launch, and during
9194
+ compile detail.unit "steps" with SwiftPM's [done / total] counts (fetching and
9195
+ planning are detail.step "configure"). It has no cache lookup, so outcome and
9196
+ plannedPhases are null; finished runs and their phase times are in
9197
+ environments[].builds.macos. An offloaded build reports the worker's steps the
9198
+ same way.
9175
9199
  Runtime stdout and stderr become client records; build output becomes build
9176
9200
  records, all with platform "macos". Unexpected app exits are error records.
9177
9201
  Stim runs the app with NSUnbufferedIO=YES, so Swift print output arrives per
@@ -9179,16 +9203,16 @@ line instead of when the app exits.
9179
9203
 
9180
9204
  BUILD OFFLOAD
9181
9205
 
9182
- --build-machine <auto|local|name> overrides STIM_OFFLOAD_MACHINE and the
9183
- machine setting offload.machine (default auto). local builds here; a name
9184
- requires the matching configured and paired build machine, ignoring offload.mode
9206
+ --remote-build <auto|local|name> overrides STIM_REMOTE_BUILD and the
9207
+ machine setting remote.build (default auto). local builds here; a name
9208
+ requires the matching configured and paired remote Mac, ignoring remote.buildMode
9185
9209
  and this Mac's capacity. Any failure is STIM_OFFLOAD_REFUSED without a local xcodebuild, Gradle or
9186
9210
  SwiftPM compile or another machine. Invalid, unlisted or unpaired selections
9187
9211
  refuse before stopping the app or changing its build record. See stim guide errors STIM_OFFLOAD_REFUSED.
9188
9212
 
9189
- With offload.machine auto, offload.mode places these SwiftPM Debug builds:
9213
+ With remote.build auto, remote.buildMode places these SwiftPM Debug builds:
9190
9214
  auto builds here while this Mac has capacity, force uses an approved build
9191
- machine when one accepts, and off always builds here. Configure offload.machines
9215
+ machine when one accepts, and off always builds here. Configure remote.machines
9192
9216
  and approve build access as described in stim guide settings. The worker needs
9193
9217
  matching Stim, CPU architecture, Xcode and macOS SDK, plus network access to
9194
9218
  fetch package dependencies the first time. It keeps SwiftPM dependencies in a
@@ -9362,15 +9386,15 @@ used.
9362
9386
  ON ANOTHER MAC
9363
9387
 
9364
9388
  stim macos --remote <machine> builds the Debug app on this Mac and runs it on an
9365
- approved hosting Mac over the tailnet, without SSH. The machine must be listed
9366
- in hosting.machines and approved: stim doctor --fix asks it, a person on that
9389
+ approved remote Mac over the tailnet, without SSH. The machine must be listed
9390
+ in remote.machines and approved: stim doctor --fix asks it, a person on that
9367
9391
  Mac runs stim-server devices grant <id> --device-host or stim-server setup
9368
9392
  with that client node, ticket and expiry (guide settings), and stim doctor then
9369
9393
  records the approval. Stim connects only to the machine's pinned tailnet node.
9370
9394
  A refusal or an unreachable host fails the command; it never launches here
9371
9395
  instead.
9372
9396
 
9373
- The --remote value is a hosting Mac name from hosting.machines. macOS refuses
9397
+ The --remote value is a remote Mac name from remote.machines. macOS refuses
9374
9398
  eas and proxy because it has neither backend. It also refuses auto until
9375
9399
  automatic placement ships. These reserved names are case-insensitive and
9376
9400
  trimmed; they refuse with STIM_BAD_ARG before state access or a connection.
@@ -9765,7 +9789,7 @@ const TUTORIAL_STEPS = [
9765
9789
  optional: true,
9766
9790
  prompt: TUTORIAL_PROMPTS.machine,
9767
9791
  section: "machine",
9768
- manual: ["cd \"{tour}\"", "stim ios --build-machine \"{machine}\" --no-build-cache"]
9792
+ manual: ["cd \"{tour}\"", "stim ios --remote-build \"{machine}\" --no-build-cache"]
9769
9793
  },
9770
9794
  {
9771
9795
  id: "finish",
@@ -9963,7 +9987,7 @@ the app. The intentional button errors may still be in the error log; check
9963
9987
  whether the edit introduced a new error.
9964
9988
 
9965
9989
  PAUSE: end the turn. Point at the purple title in the device view or simulator
9966
- and the title color log line. Phone viewing and an approved build machine are
9990
+ and the title color log line. Phone viewing and an approved remote Mac are
9967
9991
  optional user steps; skip them if unwanted. Never pair, approve, or grant
9968
9992
  anything. If the user names an approved machine, the next prompt is
9969
9993
  "${TUTORIAL_PROMPTS.machine}". Otherwise give
@@ -9971,11 +9995,11 @@ anything. If the user names an approved machine, the next prompt is
9971
9995
  },
9972
9996
  machine: {
9973
9997
  summary: "Optionally build using a machine the user names and has approved",
9974
- body: () => `BUILD MACHINE (OPTIONAL)
9998
+ body: () => `REMOTE MAC (OPTIONAL)
9975
9999
 
9976
10000
  ${paths}
9977
10001
 
9978
- Proceed only when the user names an approved build machine. Substitute that
10002
+ Proceed only when the user names an approved remote Mac. Substitute that
9979
10003
  name for {machine}. Never approve, pair, or grant anything. If none is named,
9980
10004
  ask for the name or let the user skip this step.
9981
10005
 
@@ -9983,7 +10007,7 @@ ${commands("machine")}
9983
10007
 
9984
10008
  This step bypasses the artifact cache so the build can use the named machine.
9985
10009
  A named machine refuses without a local fallback. If it refuses, report the
9986
- refusal and offer --build-machine auto or local; do not retry silently.
10010
+ refusal and offer --remote-build auto or local; do not retry silently.
9987
10011
 
9988
10012
  PAUSE: end the turn. Point at the build's machine in Desktop or its report in
9989
10013
  stim status --json. Give the next prompt: "${TUTORIAL_PROMPTS.finish}".`