@nomac/cli 0.12.0 → 0.12.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.
- package/package.json +1 -1
- package/skill/SKILL.md +29 -3
- package/src/mcp.mjs +7 -1
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -8,8 +8,8 @@ description: >
|
|
|
8
8
|
|
|
9
9
|
# nomac: a Mac for your agent
|
|
10
10
|
|
|
11
|
-
NoMac
|
|
12
|
-
commands and tools. Mac time is prepaid credit
|
|
11
|
+
NoMac provides a full macOS VM with administrator access, Xcode and the iOS
|
|
12
|
+
Simulator. You choose the commands and tools. Mac time is prepaid credit.
|
|
13
13
|
|
|
14
14
|
## Cloud Mac setup and workflow
|
|
15
15
|
|
|
@@ -20,6 +20,8 @@ commands and tools. Mac time is prepaid credit, separate from Builder.
|
|
|
20
20
|
give them the printed link, and ask them to pay. Never enter payment
|
|
21
21
|
details yourself. Poll credits until the balance appears; a checkout URL is
|
|
22
22
|
not a payment. No Apple Developer account is needed for an unsigned build.
|
|
23
|
+
Under an hour left, answers say `low_credit` with a `buy_url`: tell the
|
|
24
|
+
human before a long build (a refill of 3 packs, $30, earns bonus credit).
|
|
23
25
|
2. Install `npm install -g @nomac/cli`, run `nomac login`, and give the human
|
|
24
26
|
the printed device URL and code. With a key the human made at
|
|
25
27
|
https://nomac.app/keys: `nomac login --with-token < key.txt`, or set
|
|
@@ -50,6 +52,9 @@ the Mac, logs included. Download what you need from outside `~/drive` before
|
|
|
50
52
|
stopping. SSH disconnects
|
|
51
53
|
do not stop the session. Ready time includes idle time; queue/setup are free.
|
|
52
54
|
One-minute minimum, then by the minute. One session at a time; no overage.
|
|
55
|
+
For work that needs two Macs at once, `nomac start --parallel` from another
|
|
56
|
+
folder (MCP `start_mac` with `parallel: true`) starts a second, for accounts
|
|
57
|
+
that bought credit while NoMac has a Mac to spare; it runs without `~/drive`.
|
|
53
58
|
If start returns `insufficient_credit`, buy credit as in step 1, then retry
|
|
54
59
|
with the same request key.
|
|
55
60
|
Keep the same request key and arguments after uncertain responses; inspect
|
|
@@ -82,6 +87,18 @@ Mac, in the Simulator either: test it on a device.
|
|
|
82
87
|
Report failures using `report_issue` with `session_id`, optional `job_id` and
|
|
83
88
|
a description without secrets. Read https://nomac.app/llms.txt for full limits.
|
|
84
89
|
|
|
90
|
+
## Your editor, an agent on the Mac, Mac-only MCP servers
|
|
91
|
+
|
|
92
|
+
After `nomac start`, `nomac ssh-config` (CLI 0.12+) names the folder's Mac
|
|
93
|
+
`nomac` in the human's SSH config, and each later start or attach points the
|
|
94
|
+
name at the new Mac. Then VS Code or Cursor Remote-SSH and Claude Code's SSH
|
|
95
|
+
sessions connect to `nomac`; `ssh -t nomac 'cd ~/drive/src/<folder> && npx -y
|
|
96
|
+
@anthropic-ai/claude-code'` runs an agent on the Mac itself (keep its API key
|
|
97
|
+
as a NoMac secret); and an MCP server that needs a Mac runs from Windows or
|
|
98
|
+
Linux over SSH: `claude mcp add xcode -- ssh nomac npx -y mobilebuildmcp@latest
|
|
99
|
+
mcp` (MobileBuildMCP, formerly XcodeBuildMCP). An open SSH connection keeps
|
|
100
|
+
the Mac running until its time or spend limit: `nomac stop` when done.
|
|
101
|
+
|
|
85
102
|
## A Mac fully enabled for you
|
|
86
103
|
|
|
87
104
|
The Mac is yours to do anything on: the `agent` account is an administrator,
|
|
@@ -132,7 +149,8 @@ the human, then call again.
|
|
|
132
149
|
|
|
133
150
|
The separate iOS Builder publishing product is closed to new subscriptions.
|
|
134
151
|
If `get_billing_status` shows a Builder plan, its tools are listed and
|
|
135
|
-
https://nomac.app/llms.txt describes them. Otherwise use the cloud Mac
|
|
152
|
+
https://nomac.app/llms-legacy.txt describes them. Otherwise use the cloud Mac
|
|
153
|
+
above.
|
|
136
154
|
|
|
137
155
|
## When stuck
|
|
138
156
|
|
|
@@ -143,3 +161,11 @@ tool returns a Private Relay warning, explain that Apple relay addresses may
|
|
|
143
161
|
reject later mail and offer a non-relay address. Never show that warning for a
|
|
144
162
|
normal address such as `@icloud.com`. Never retry-loop an identical failure
|
|
145
163
|
more than twice.
|
|
164
|
+
|
|
165
|
+
## Feedback
|
|
166
|
+
|
|
167
|
+
When you stop a Mac, its answer asks for feedback. If anything got in your
|
|
168
|
+
way, failed, was missing from the Mac or the tools, or would have saved you
|
|
169
|
+
time, send it in a sentence or two: `report_issue` with `kind: "feedback"` and
|
|
170
|
+
the `session_id`. Leave out code, secrets and personal data; skip it if nothing
|
|
171
|
+
did. Feedback needs no answer.
|
package/src/mcp.mjs
CHANGED
|
@@ -19,6 +19,7 @@ const PROTOCOL_FALLBACK = "2025-06-18";
|
|
|
19
19
|
/** How the tools fit together, sent once at initialize (the hosted server sends the same kind of text). */
|
|
20
20
|
const INSTRUCTIONS = [
|
|
21
21
|
"NoMac gives you a cloud Mac with Xcode, billed from prepaid credit ($0.80 an hour, by the minute).",
|
|
22
|
+
"Use it when work needs macOS that this machine does not have (Windows, Linux or a cloud sandbox): building, running or testing an iOS, iPadOS, watchOS, visionOS or macOS app (Swift, SwiftUI, React Native, Expo, Flutter, Capacitor), the iOS Simulator, Xcode, code signing, TestFlight or App Store submission.",
|
|
22
23
|
"Typical flow: get_mac_credits, start_mac, poll get_mac_session until ready, put code there (exec_mac with git clone into ~/drive/src, write_mac_file, fetch_to_mac, create_mac_upload_link), run exec_mac, get results with read_mac_file or create_mac_download_link, then stop_mac.",
|
|
23
24
|
"The account's drive at ~/drive (50 GB) is on every Mac and kept between sessions; everything outside it is deleted at stop. Clone and build in ~/drive/src/<repo>, so the next session rebuilds only what changed.",
|
|
24
25
|
"When an answer says low_credit (under an hour of Mac time left), tell the human before a long build and offer its buy_url: a Mac stops when the credit runs out. For a refill, suggest 3 packs ($30, +5%).",
|
|
@@ -370,7 +371,7 @@ export const TOOLS = [
|
|
|
370
371
|
{
|
|
371
372
|
name: "report_issue",
|
|
372
373
|
description:
|
|
373
|
-
"File an unknown/unfixable error with nomac support. For a Mac use session_id and optional job_id; for a build use ref_id (bld_…). Attaches account-scoped context and deduplicates repeats. An optional email requests a direct resolution update; replies are always available by calling with no description.",
|
|
374
|
+
"File an unknown/unfixable error with nomac support. For a Mac use session_id and optional job_id; for a build use ref_id (bld_…). Attaches account-scoped context and deduplicates repeats. An optional email requests a direct resolution update; replies are always available by calling with no description. kind feedback sends NoMac a note instead: what got in the way, failed or was missing.",
|
|
374
375
|
inputSchema: {
|
|
375
376
|
type: "object",
|
|
376
377
|
properties: {
|
|
@@ -384,6 +385,11 @@ export const TOOLS = [
|
|
|
384
385
|
maxLength: 320,
|
|
385
386
|
description: "optional follow-up email for a direct resolution update",
|
|
386
387
|
},
|
|
388
|
+
kind: {
|
|
389
|
+
type: "string",
|
|
390
|
+
enum: ["problem", "feedback"],
|
|
391
|
+
description: "problem (default): an error for support to answer. feedback: a note for NoMac about what got in the way, failed or was missing; it needs no answer. Leave out code, secrets and personal data.",
|
|
392
|
+
},
|
|
387
393
|
},
|
|
388
394
|
additionalProperties: false,
|
|
389
395
|
},
|