@aarwitz/tapp 0.17.0-rc.12 → 0.17.0-rc.13

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tapp",
3
3
  "description": "Test real iOS, Android, and web apps with Tapp. Includes the Tapp agent skill plus MCP hands, eyes, exploration, replayable Flows, and deterministic release evidence.",
4
- "version": "0.17.0-rc.12",
4
+ "version": "0.17.0-rc.13",
5
5
  "author": {
6
6
  "name": "Aaron Horowitz",
7
7
  "url": "https://github.com/aarwitz"
@@ -21,9 +21,10 @@
21
21
  ],
22
22
  "mcpServers": {
23
23
  "tapp": {
24
- "command": "node",
24
+ "command": "npx",
25
25
  "args": [
26
- "${CLAUDE_PLUGIN_ROOT}/bin/tapp.js",
26
+ "-y",
27
+ "@aarwitz/tapp@0.17.0-rc.13",
27
28
  "mcp"
28
29
  ],
29
30
  "cwd": "${CLAUDE_PROJECT_DIR}"
package/AGENTS.md CHANGED
@@ -11,15 +11,15 @@ the app already on the simulator); it also accepts a repo dir, a `path/to/App.ap
11
11
  bundle id, or (web) an http(s) URL. You never need to know a bundle id up front.
12
12
 
13
13
  ```bash
14
- npx -y @aarwitz/tapp explore [target] # autonomous exploration → findings + evidence (observation, not a gate; ≈ tapp_explore)
15
- npx -y @aarwitz/tapp explore https://your-app.example --watch # web: visibly follow the same exploration
16
- npx -y @aarwitz/tapp open [target] # launch + screen summary + screenshot saved to a file (≈ tapp_open_app)
17
- npx -y @aarwitz/tapp tree [target] # accessibility tree, --json for every element (≈ tapp_ui_tree)
18
- npx -y @aarwitz/tapp shot # screenshot the booted sim → file path (≈ tapp_screenshot)
19
- npx -y @aarwitz/tapp apps # what's installed on the simulator, with bundle ids
20
- npx -y @aarwitz/tapp build [dir] # build the app in an Xcode repo + install it (≈ tapp_build)
21
- npx -y @aarwitz/tapp explore app.apk --platform android --app-id com.acme.app
22
- npx -y @aarwitz/tapp flow run .tapp/flows/smoke.yml # committed, keyless E2E replay
14
+ npx -y @aarwitz/tapp@latest explore [target] # autonomous exploration → findings + evidence (observation, not a gate; ≈ tapp_explore)
15
+ npx -y @aarwitz/tapp@latest explore https://your-app.example --watch # web: visibly follow the same exploration
16
+ npx -y @aarwitz/tapp@latest open [target] # launch + screen summary + screenshot saved to a file (≈ tapp_open_app)
17
+ npx -y @aarwitz/tapp@latest tree [target] # accessibility tree, --json for every element (≈ tapp_ui_tree)
18
+ npx -y @aarwitz/tapp@latest shot # screenshot the booted sim → file path (≈ tapp_screenshot)
19
+ npx -y @aarwitz/tapp@latest apps # what's installed on the simulator, with bundle ids
20
+ npx -y @aarwitz/tapp@latest build [dir] # build the app in an Xcode repo + install it (≈ tapp_build)
21
+ npx -y @aarwitz/tapp@latest explore app.apk --platform android --app-id com.acme.app
22
+ npx -y @aarwitz/tapp@latest flow run .tapp/flows/smoke.yml # committed, keyless E2E replay
23
23
  ```
24
24
 
25
25
  If repository onboarding detects multiple application targets, target detection is deterministic but
package/README.md CHANGED
@@ -6,8 +6,8 @@
6
6
  [![license](https://img.shields.io/badge/license-MIT-blue)](./LICENSE)
7
7
  [![Agent Skill](https://img.shields.io/badge/Agent_Skill-install-6b5cff)](https://skills.sh/aarwitz/tapp)
8
8
  [![VS Code extension](https://img.shields.io/badge/VS_Code-extension-0098FF)](https://marketplace.visualstudio.com/items?itemName=lidi-solutions.tapp)
9
- [![Install in Cursor](https://img.shields.io/badge/Cursor-Install_MCP-000000)](cursor://anysphere.cursor-deeplink/mcp/install?name=tapp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBhYXJ3aXR6L3RhcHAiLCJtY3AiXX0=)
10
- [![VS Code MCP](https://img.shields.io/badge/VS_Code-Install_MCP-0098FF)](https://insiders.vscode.dev/redirect/mcp/install?name=tapp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40aarwitz%2Ftapp%22%2C%22mcp%22%5D%7D)
9
+ [![Install in Cursor](https://img.shields.io/badge/Cursor-Install_MCP-000000)](cursor://anysphere.cursor-deeplink/mcp/install?name=tapp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBhYXJ3aXR6L3RhcHBAbGF0ZXN0IiwibWNwIl19)
10
+ [![VS Code MCP](https://img.shields.io/badge/VS_Code-Install_MCP-0098FF)](https://insiders.vscode.dev/redirect/mcp/install?name=tapp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40aarwitz%2Ftapp%40latest%22%2C%22mcp%22%5D%7D)
11
11
 
12
12
  **Tapp is the release-contract and evidence layer for teams shipping agent-authored applications.**
13
13
  It turns a repository and real product into an observed UI Map, a compact reviewed deterministic
@@ -51,8 +51,8 @@ claude plugin install tapp@tapp
51
51
  ```
52
52
 
53
53
  Restart Claude Code after installation, open the application repository, and use the short prompt
54
- above. The plugin bundles both the `tapp` Agent Skill and the local stdio MCP server; no additional
55
- prompt block or bundle id is required.
54
+ above. The plugin installs the `tapp` Agent Skill and launches the matching version of Tapp's stdio
55
+ MCP server through npm; no additional prompt block, MCP configuration, or bundle id is required.
56
56
 
57
57
  **Claude, Codex, Cursor, Copilot, and other Agent Skills clients — skill only:**
58
58
 
@@ -67,7 +67,7 @@ or `--agent claude-code`, `--agent codex`, and similar selectors to constrain th
67
67
  **No agent integration:** run the npm package directly from an app repository:
68
68
 
69
69
  ```bash
70
- npx -y @aarwitz/tapp init . --explore
70
+ npx -y @aarwitz/tapp@latest init . --explore
71
71
  ```
72
72
 
73
73
  **VS Code:** install [Tapp from the Marketplace](https://marketplace.visualstudio.com/items?itemName=lidi-solutions.tapp).
@@ -89,8 +89,8 @@ emulator/device; web needs Playwright + Chromium.
89
89
  From the app repository, let the agent see the current screen and then explore it:
90
90
 
91
91
  ```bash
92
- npx -y @aarwitz/tapp open # builds/launches as needed; prints a screenshot path + screen summary
93
- npx -y @aarwitz/tapp explore # explores the real app; prints findings + evidence (an observation, not a gate)
92
+ npx -y @aarwitz/tapp@latest open # builds/launches as needed; prints a screenshot path + screen summary
93
+ npx -y @aarwitz/tapp@latest explore # explores the real app; prints findings + evidence (an observation, not a gate)
94
94
  ```
95
95
 
96
96
  Claude Code can read the saved image with its file-reading tool; Codex can open it with
@@ -105,22 +105,22 @@ To bootstrap maintained release infrastructure, preview the repository model and
105
105
  before Tapp writes anything:
106
106
 
107
107
  ```bash
108
- npx -y @aarwitz/tapp init . --dry-run --json-out /tmp/tapp-init.json
108
+ npx -y @aarwitz/tapp@latest init . --dry-run --json-out /tmp/tapp-init.json
109
109
  # Build/start the detected web target, ground the first UI Map, then stop it.
110
- npx -y @aarwitz/tapp init . --explore --platform web
110
+ npx -y @aarwitz/tapp@latest init . --explore --platform web
111
111
  # Or build/install the detected Xcode target, ground the map, and persist the validated scheme.
112
- npx -y @aarwitz/tapp init . --explore --platform ios --target .
112
+ npx -y @aarwitz/tapp@latest init . --explore --platform ios --target .
113
113
  # Or connect to an already-running owned URL:
114
- npx -y @aarwitz/tapp init . --explore --platform web --url http://127.0.0.1:4173
114
+ npx -y @aarwitz/tapp@latest init . --explore --platform web --url http://127.0.0.1:4173
115
115
  # If the app has roles/accounts, bind names once; values stay in local/CI secrets.
116
- npx -y @aarwitz/tapp actor set alice . --role member --session isolated \
116
+ npx -y @aarwitz/tapp@latest actor set alice . --role member --session isolated \
117
117
  --credential email=ALICE_EMAIL --credential password=ALICE_PASSWORD
118
118
  # Review-only path: tapp init . → tapp plan show → tapp plan review --approve ...
119
119
 
120
120
  # After approved drafts replay and are promoted, establish the selected target's baseline
121
121
  # through the ordinary full gate, then generate the reviewable GitHub workflow.
122
- npx -y @aarwitz/tapp baseline create . --platform web
123
- npx -y @aarwitz/tapp ci install .
122
+ npx -y @aarwitz/tapp@latest baseline create . --platform web
123
+ npx -y @aarwitz/tapp@latest ci install .
124
124
  ```
125
125
 
126
126
  In a repository containing multiple apps (for example, iOS plus web),
@@ -144,14 +144,14 @@ Every verb takes whatever you have: nothing (auto-detects the repo you're in, or
144
144
  already on the simulator), a repo directory, a `path/to/App.app`, or a bundle id:
145
145
 
146
146
  ```bash
147
- npx -y @aarwitz/tapp open [target] # launch the app → screen summary + screenshot file
148
- npx -y @aarwitz/tapp tree [target] # accessibility tree of the current screen
149
- npx -y @aarwitz/tapp shot # screenshot the booted simulator
150
- npx -y @aarwitz/tapp apps # what's installed on the simulator (names + bundle ids)
151
- npx -y @aarwitz/tapp build [dir] # just build + install (scheme auto-detected)
147
+ npx -y @aarwitz/tapp@latest open [target] # launch the app → screen summary + screenshot file
148
+ npx -y @aarwitz/tapp@latest tree [target] # accessibility tree of the current screen
149
+ npx -y @aarwitz/tapp@latest shot # screenshot the booted simulator
150
+ npx -y @aarwitz/tapp@latest apps # what's installed on the simulator (names + bundle ids)
151
+ npx -y @aarwitz/tapp@latest build [dir] # just build + install (scheme auto-detected)
152
152
  ```
153
153
 
154
- Web (beta): `npx -y @aarwitz/tapp explore http://localhost:3000` *(one-time setup:
154
+ Web (beta): `npx -y @aarwitz/tapp@latest explore http://localhost:3000` *(one-time setup:
155
155
  `npm i -g playwright && npx playwright install chromium`)*. Add `--watch` to open Tapp's controlled,
156
156
  isolated Chromium window and follow its clicks with an on-page pointer/action label. Tapp hides that
157
157
  watch UI from saved evidence screenshots and does not automate your personal/default browser profile.
@@ -160,26 +160,26 @@ Focused web inspection waits briefly for loading states to settle. If a consent
160
160
  blocks the screen, dismiss it and wait for the content you care about in the same package-only call:
161
161
 
162
162
  ```bash
163
- npx -y @aarwitz/tapp open https://example.com --tap "Not now" --wait-for "Dashboard"
164
- npx -y @aarwitz/tapp tree https://example.com --tap "Not now" --wait-for "Dashboard" --json
163
+ npx -y @aarwitz/tapp@latest open https://example.com --tap "Not now" --wait-for "Dashboard"
164
+ npx -y @aarwitz/tapp@latest tree https://example.com --tap "Not now" --wait-for "Dashboard" --json
165
165
  ```
166
166
 
167
167
  Android:
168
168
 
169
169
  ```bash
170
- npx -y @aarwitz/tapp explore path/to/app-debug.apk --platform android --app-id com.acme.app
171
- npx -y @aarwitz/tapp open com.acme.app --platform android
170
+ npx -y @aarwitz/tapp@latest explore path/to/app-debug.apk --platform android --app-id com.acme.app
171
+ npx -y @aarwitz/tapp@latest open com.acme.app --platform android
172
172
  ```
173
173
 
174
174
  Optional but recommended (prebuilds the test harness so the first run is fast):
175
175
  ```bash
176
- npx -y @aarwitz/tapp install # ~2 min, one time
177
- npx -y @aarwitz/tapp doctor # verify Xcode / simulators / toolchain
176
+ npx -y @aarwitz/tapp@latest install # ~2 min, one time
177
+ npx -y @aarwitz/tapp@latest doctor # verify Xcode / simulators / toolchain
178
178
  ```
179
179
 
180
180
  ### Optional browser workspace
181
181
 
182
- `npx -y @aarwitz/tapp app .` opens a local Release Studio for people who want visual repository
182
+ `npx -y @aarwitz/tapp@latest app .` opens a local Release Studio for people who want visual repository
183
183
  onboarding, release-plan review, and CI preparation. It is not required for the coding-agent
184
184
  `open`/`explore` workflow.
185
185
 
@@ -191,14 +191,14 @@ context** (the model literally sees the screen) and the **interactive session lo
191
191
 
192
192
  **Claude Code:**
193
193
  ```bash
194
- claude mcp add tapp -- npx -y @aarwitz/tapp mcp
194
+ claude mcp add tapp -- npx -y @aarwitz/tapp@latest mcp
195
195
  ```
196
196
 
197
197
  **Cursor / VS Code (Copilot)** — add to `~/.cursor/mcp.json` (Cursor) or `.vscode/mcp.json` (VS Code):
198
198
  ```json
199
199
  {
200
200
  "servers": {
201
- "tapp": { "type": "stdio", "command": "npx", "args": ["-y", "@aarwitz/tapp", "mcp"] }
201
+ "tapp": { "type": "stdio", "command": "npx", "args": ["-y", "@aarwitz/tapp@latest", "mcp"] }
202
202
  }
203
203
  }
204
204
  ```
@@ -207,10 +207,10 @@ claude mcp add tapp -- npx -y @aarwitz/tapp mcp
207
207
  ```toml
208
208
  [mcp_servers.tapp]
209
209
  command = "npx"
210
- args = ["-y", "@aarwitz/tapp", "mcp"]
210
+ args = ["-y", "@aarwitz/tapp@latest", "mcp"]
211
211
  ```
212
212
 
213
- **Any other MCP client:** stdio command `npx -y @aarwitz/tapp mcp`.
213
+ **Any other MCP client:** stdio command `npx -y @aarwitz/tapp@latest mcp`.
214
214
 
215
215
  Then ask your agent:
216
216
  > "Explore my app and show me what breaks."
@@ -353,7 +353,7 @@ accepts that `.app`, detects its bundle id, writes report artifacts, and exits n
353
353
  gate fails:
354
354
 
355
355
  ```bash
356
- npx -y @aarwitz/tapp ci --app path/to/MyApp.app \
356
+ npx -y @aarwitz/tapp@latest ci --app path/to/MyApp.app \
357
357
  --project-dir . --pr-base origin/main --pr-head HEAD \
358
358
  --target-key target_ios_myapp \
359
359
  --pr-plan-out tapp-pr-plan.json \
@@ -401,9 +401,9 @@ your agent proves its UI work instead of claiming it:
401
401
  ```markdown
402
402
  ## Verifying UI changes
403
403
  This repo uses tapp (https://github.com/aarwitz/tapp) to verify UI work on a real app surface
404
- (iOS simulator, Android emulator/device, or a browser for web). After any UI change, run `npx -y @aarwitz/tapp open` from the
404
+ (iOS simulator, Android emulator/device, or a browser for web). After any UI change, run `npx -y @aarwitz/tapp@latest open` from the
405
405
  repo root (it finds and builds the Xcode project itself) and look at the screenshot it saves as
406
- proof. Before declaring a feature done, run `npx -y @aarwitz/tapp explore` (or `explore <url>` for web)
406
+ proof. Before declaring a feature done, run `npx -y @aarwitz/tapp@latest explore` (or `explore <url>` for web)
407
407
  and report the findings + evidence. A change is not "done" until it has been seen working.
408
408
  (If the tapp MCP server is connected, the tapp_* tools do the same with inline screenshots —
409
409
  tapp_build builds + installs the app and returns the bundle id for tapp_explore.)
package/bin/tapp.js CHANGED
@@ -1256,7 +1256,7 @@ switch (command) {
1256
1256
 
1257
1257
  console.log(`\n Home: ${tappHome}`);
1258
1258
  console.log(healthy
1259
- ? "\nReady. Start with:\n npx -y @aarwitz/tapp open [target]\n npx -y @aarwitz/tapp explore [target]"
1259
+ ? "\nReady. Start with:\n npx -y @aarwitz/tapp@latest open [target]\n npx -y @aarwitz/tapp@latest explore [target]"
1260
1260
  : "\nFix the ❌ items above, then re-run: tapp doctor");
1261
1261
  process.exit(healthy ? 0 : 1);
1262
1262
  }
@@ -1642,9 +1642,9 @@ Agent Skill (optional — so a short “Use Tapp to test this app” prompt is e
1642
1642
  claude plugin install tapp@tapp
1643
1643
 
1644
1644
  MCP hookup (optional — for inline screenshots and the tap/type/inspect session loop):
1645
- Claude Code: claude mcp add tapp -- npx -y @aarwitz/tapp mcp
1645
+ Claude Code: claude mcp add tapp -- npx -y @aarwitz/tapp@latest mcp
1646
1646
  Cursor/VS Code (mcp.json):
1647
- { "servers": { "tapp": { "type": "stdio", "command": "npx", "args": ["-y", "@aarwitz/tapp", "mcp"] } } }
1647
+ { "servers": { "tapp": { "type": "stdio", "command": "npx", "args": ["-y", "@aarwitz/tapp@latest", "mcp"] } } }
1648
1648
 
1649
1649
  Then ask your agent things like:
1650
1650
  "Explore com.mycompany.app and show me what breaks"
@@ -12,7 +12,7 @@ in [`PRODUCT-ENGINE.md`](PRODUCT-ENGINE.md).
12
12
  ## Start locally
13
13
 
14
14
  ```bash
15
- npx -y @aarwitz/tapp app
15
+ npx -y @aarwitz/tapp@latest app
16
16
  ```
17
17
 
18
18
  Tapp prints an authenticated one-time launch URL and opens it in the default browser. Use
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aarwitz/tapp",
3
- "version": "0.17.0-rc.12",
3
+ "version": "0.17.0-rc.13",
4
4
  "mcpName": "io.github.aarwitz/tapp",
5
5
  "description": "Release contracts, autonomous QA, and evidence-backed CI gates for iOS, Android, and web.",
6
6
  "license": "MIT",
@@ -20,15 +20,15 @@ screen or journey works from source inspection alone.
20
20
  | Decide whether a merge passes policy | `ci`; exploration never decides this |
21
21
 
22
22
  Prefer connected `tapp_*` MCP tools when available: they keep interactive sessions alive and return
23
- screenshots inline. Otherwise run `npx -y @aarwitz/tapp` from the app repository. Do not require MCP,
23
+ screenshots inline. Otherwise run `npx -y @aarwitz/tapp@latest` from the app repository. Do not require MCP,
24
24
  an account, an API key, or a global install for the core workflow.
25
25
 
26
26
  ## Start source-connected
27
27
 
28
28
  When the user asks for a general first test of a repository:
29
29
 
30
- 1. If `.tapp/application-model.json` exists, run `npx -y @aarwitz/tapp explore`.
31
- 2. Otherwise run `npx -y @aarwitz/tapp init . --explore` or call `tapp_init` with
30
+ 1. If `.tapp/application-model.json` exists, run `npx -y @aarwitz/tapp@latest explore`.
31
+ 2. Otherwise run `npx -y @aarwitz/tapp@latest init . --explore` or call `tapp_init` with
32
32
  `{operation:"explore", projectDir:"."}`.
33
33
  3. If Tapp returns `target-selection-required`, present its actual choices and ask the user to pick.
34
34
  Never guess among multiple targets. Re-run with the selected platform/target exactly as Tapp
@@ -6,34 +6,34 @@ Run from the application repository. `[target]` is optional when Tapp can read t
6
6
  or detect one unambiguous target.
7
7
 
8
8
  ```bash
9
- npx -y @aarwitz/tapp init . --explore
10
- npx -y @aarwitz/tapp explore [target]
11
- npx -y @aarwitz/tapp open [target]
12
- npx -y @aarwitz/tapp tree [target] --json
13
- npx -y @aarwitz/tapp shot
14
- npx -y @aarwitz/tapp report latest
15
- npx -y @aarwitz/tapp doctor
9
+ npx -y @aarwitz/tapp@latest init . --explore
10
+ npx -y @aarwitz/tapp@latest explore [target]
11
+ npx -y @aarwitz/tapp@latest open [target]
12
+ npx -y @aarwitz/tapp@latest tree [target] --json
13
+ npx -y @aarwitz/tapp@latest shot
14
+ npx -y @aarwitz/tapp@latest report latest
15
+ npx -y @aarwitz/tapp@latest doctor
16
16
  ```
17
17
 
18
18
  Platform examples:
19
19
 
20
20
  ```bash
21
21
  # Web: Tapp may build/start/stop a source target; --watch is human-visible.
22
- npx -y @aarwitz/tapp explore --platform web --target website --watch
23
- npx -y @aarwitz/tapp explore https://staging.example.com
22
+ npx -y @aarwitz/tapp@latest explore --platform web --target website --watch
23
+ npx -y @aarwitz/tapp@latest explore https://staging.example.com
24
24
 
25
25
  # iOS: source repo, .app, or bundle id.
26
- npx -y @aarwitz/tapp explore MyApp.xcodeproj --platform ios
27
- npx -y @aarwitz/tapp open com.example.MyApp --platform ios
26
+ npx -y @aarwitz/tapp@latest explore MyApp.xcodeproj --platform ios
27
+ npx -y @aarwitz/tapp@latest open com.example.MyApp --platform ios
28
28
 
29
29
  # Android: app id is required; APK is optional if already installed.
30
- npx -y @aarwitz/tapp explore app-debug.apk --platform android --app-id com.example.app
30
+ npx -y @aarwitz/tapp@latest explore app-debug.apk --platform android --app-id com.example.app
31
31
  ```
32
32
 
33
33
  Focused web evidence can perform one semantic interaction and wait for async content:
34
34
 
35
35
  ```bash
36
- npx -y @aarwitz/tapp open https://example.com --tap "Not now" --wait-for "Dashboard"
36
+ npx -y @aarwitz/tapp@latest open https://example.com --tap "Not now" --wait-for "Dashboard"
37
37
  ```
38
38
 
39
39
  ## MCP mapping
@@ -84,8 +84,8 @@ ask the user rather than pretending the explored surface was complete.
84
84
  Flow YAML belongs under `.tapp/flows/` and can replay without a model or API key:
85
85
 
86
86
  ```bash
87
- npx -y @aarwitz/tapp flow run .tapp/flows/smoke.yml
88
- npx -y @aarwitz/tapp ci
87
+ npx -y @aarwitz/tapp@latest flow run .tapp/flows/smoke.yml
88
+ npx -y @aarwitz/tapp@latest ci
89
89
  ```
90
90
 
91
91
  `tapp explore` observes. `tapp ci` applies versioned deterministic policy to evidence, selected