Argent
NPM · @SWMANSION/ARGENT · SCANNED AUG 13
Drive iOS Simulators, Android emulators, TVs and Electron/web apps from your coding agent
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 62 of 180 dependencies flagged as unhealthy (1 deprecated). View diagnostics → Partial
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to software-mansion/argent). View diagnostics → Pass
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 1 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability64
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 25021 tokens (~342/item across 73 items; 73 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
npm · @swmansion/argent
claude mcp add software-mansion-argent -- npx -y @swmansion/argent
codex mcp add software-mansion-argent -- npx -y @swmansion/argent
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"software-mansion-argent": {
"type": "local",
"command": [
"npx",
"-y",
"@swmansion/argent"
],
"enabled": true
}
}
} openclaw mcp add software-mansion-argent --command npx --arg -y --arg @swmansion/argent
mcp_servers:
software-mansion-argent:
command: "npx"
args: ["-y", "@swmansion/argent"] {
"mcpServers": {
"software-mansion-argent": {
"command": "npx",
"args": [
"-y",
"@swmansion/argent"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 12 Aug 26 0
- Security disclosure: unverified → fail ▼ functional
- 11 Aug 26 +2
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 10 Aug 26 75
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 13 Aug 2026 · Analysed npm/@swmansion/argent@0.19.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | software-mansion/argent |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/software-mansion/argent/.github/workflows/publish-npm.yml@refs/heads/main |
| Rekor log index | 2348174598 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:9a4d02ec8f334d8901437f39d4a0096c986f6a161856ad915d49d88e42af6c50262d0c14af32be65fd4e0771c53a6c764973d275650e9723bc735214f |
Dependencies 180 packages
| Packages resolved | 180 |
|---|---|
| Deprecated | 1 |
| Stale | 61 |
| Tree resolution | Complete |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
react-profiler-analyze ~388
Analyze stored profiling data and return a markdown performance report. Returns { report, reportFile, hotCommitsTotal, hotCommitsShown, sessionFiles }. The report is structured around hot React commits (≥16ms absolute floor) with per-commit render cascades, root cause identification, and a top components table. Raw profiling data is saved to disk with a unique session timestamp for later reload via profiler-load. After presenting the report, ask the user whether to investigate further (drill-down with profiler-cpu-query / profiler-commit-query) or implement fixes and re-profile for comparison. Requires react-profiler-stop to have been called first. Optional annotations param: provide Array<{offsetMs, label}> to annotate commits with the user action that preceded them. Compute offsetMs = tapTimestampMs - startedAtEpochMs where tapTimestampMs is the timestampMs returned by the tap/swipe tool and startedAtEpochMs is returned by react-profiler-start. Use when the profiling session is complete and you need to interpret the collected data. Fails if react-profiler-stop has not been called or no profiling data is stored.
| Name | Type | Req | Description |
|---|---|---|---|
| annotations | array | – | Optional list of user actions with their time offset from profiling start. Compute offsetMs = tapTimestampMs - startedAtEpochMs, where tapTimestampMs comes from the tap/swipe tool return value and st… |
| device_id | string | yes | Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). |
| platform | string | – | Target platform |
| port | number | – | Metro server port |
| project_root | string | yes | Absolute path to the RN project root for session context detection |
| rn_version | string | – | React Native version (e.g. "0.73.4") |
No output schema declared.
No examples provided.
react-profiler-component-source ~191
Find a React component's source via tree-sitter AST lookup: returns file path, line number, memoization status (isMemoized, hasUseCallback, hasUseMemo), and 50 lines of source for a named React component. Call this per-finding after react-profiler-analyze to inspect source before proposing a fix. Returns found: false if the component is not found in user-owned code (e.g. lives in node_modules). When several files define a component with the same name (e.g. platform variants like List.tsx and List.web.tsx), returns the primary match and lists the rest under otherMatches[] (file/line/col) — check it before assuming the returned file is the one you meant.
| Name | Type | Req | Description |
|---|---|---|---|
| component_name | string | yes | Name of the React component to look up |
| project_root | string | yes | Absolute path to the RN project root |
No output schema declared.
No examples provided.
react-profiler-cpu-summary ~225
Return a raw Hermes CPU flamegraph summary (top hotspot functions by self-time). FOR DEDICATED CPU INVESTIGATION ONLY — do NOT call this as part of a normal profiling session. Use react-profiler-analyze instead; it covers all React rendering performance analysis. Use when you specifically need to investigate JS CPU hotspots that are NOT tied to React rendering (e.g. regex slowness, cryptography, heavy computations). Call react-profiler-stop first. Reads directly from the stored cpuProfile. Returns a markdown table of the top hotspot functions with self-time, total-time, and location. Fails if react-profiler-stop has not been called or no CPU profile is stored.
| Name | Type | Req | Description |
|---|---|---|---|
| device_id | string | yes | Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). |
| port | number | – | Metro server port |
| react_only | boolean | – | If true, only show React component functions (PascalCase names) |
| top_n | integer | – | Number of top hotspot functions to return (default 20) |
No output schema declared.
No examples provided.
react-profiler-fiber-tree ~161
Inspect the React fiber tree and return a JSON representation of the component hierarchy. Use when tracing ancestry of a library component or checking for useMemoCache hook (confirms React Compiler is active on a component). Returns a nested JSON tree of fiber nodes with name, tag, actualDuration, selfBaseDuration, and children. Fails if the React DevTools hook is not present or no fiber roots have been committed yet.
| Name | Type | Req | Description |
|---|---|---|---|
| device_id | string | yes | Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). |
| filter | string | – | Regex string to filter component names |
| max_depth | integer | – | Maximum tree depth to traverse (default 10) |
| port | number | – | Metro server port |
No output schema declared.
No examples provided.
react-profiler-renders ~142
Scan the live React fiber tree to collect component render counts and durations. Returns a markdown table of the top re-rendering components. No profiling session required — works on a live connected app. Use when you want a quick snapshot of render counts without a full profiling session. Fails if the React DevTools hook is not present in the runtime or the app is not connected.
| Name | Type | Req | Description |
|---|---|---|---|
| device_id | string | yes | Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). |
| port | number | – | Metro server port |
| top_n | integer | – | Number of top re-rendering components to return (default 20) |
No output schema declared.
No examples provided.
react-profiler-start ~304
Start CPU profiling + React commit capture on the connected Hermes runtime. Delegates React commit capture to the in-app React DevTools backend (ri.startProfiling). If another tool-server already owns the session, returns { already_running: true, owner, stale, how_to_reclaim } without clobbering their data. Pass { force: true } to reclaim a fresh owner's session, but BEFORE OVERTAKING - ask the user for approval first, see relevant skill for guidance. Before calling this, ask the user if they also want native profiling (native-profiler-start) — recommend running both in parallel for a complete picture. After starting, ask the user to perform the interaction to profile, then call react-profiler-stop. Returns { started_at, startedAtEpochMs, hermes_version, detected_architecture } on success, or the already_running payload described above. Fails if the Hermes runtime is not reachable or the Metro CDP connection cannot be established.
| Name | Type | Req | Description |
|---|---|---|---|
| device_id | string | yes | Device id from list-devices — the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). |
| force | boolean | – | Take over an active profiling session even when it is owned by another tool-server and still fresh. Set to true only when you know the prior owner is gone. |
| port | number | – | Metro server port |
| sample_interval_us | integer | – | CPU sampling interval in microseconds (default 100) |
No output schema declared.
No examples provided.
react-profiler-status ~160
Check the state of the React profiler session without side effects. Use after an interruption (debugger disconnect, unexpected error, agent pause) to decide whether to continue with react-profiler-stop, start a new session, or reconnect the debugger. Ownership is verified server-side against this tool-server's in-memory session — no token-threading is required. Returns { session_status, is_running, current_owner, … }. If this tool-server process restarted after react-profiler-start, status will report 'taken_over'; use react-profiler-start { force: true } to reclaim.
| Name | Type | Req | Description |
|---|---|---|---|
| device_id | string | yes | Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). |
| port | number | – | Metro server port |
No output schema declared.
No examples provided.
react-profiler-stop ~240
Stop CPU profiling and collect the cpuProfile + React commit tree. Reads commit data from the in-app React DevTools backend. Stores results in the ReactProfilerSession for later use by react-profiler-analyze or react-profiler-cpu-summary. Call react-profiler-start first, then exercise the app, then call this. Returns { duration_ms, sample_count, fiber_renders_captured, total_react_commits, hot_commit_indices } summarizing the session. When any commit had fibers whose display name could not be resolved at stop time (typically transient components like modals/tooltips/animations that unmounted before stop), the response also includes { unattributed_ms, unattributed_fiber_count, unattributed_commit_count } — these quantify how much work is not accounted for in the per-component breakdown (the per-commit duration itself remains correct). Fails if no active profiling session exists or the CDP connection was lost during recording.
| Name | Type | Req | Description |
|---|---|---|---|
| device_id | string | yes | Device id from list-devices — the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). |
| port | number | – | Metro server port |
No output schema declared.
No examples provided.
reinstall-app ~262
Install or reinstall an app on the device. The previous installation (if any) is uninstalled first so app data and runtime permissions are cleared. Use for a full reinstall after rebuilding, or to start from a clean app state. Returns { reinstalled, bundleId }. Fails if the app path does not exist or the package does not match the platform (.app for iOS, .apk for Android, .vpkg for Vega).
| Name | Type | Req | Description |
|---|---|---|---|
| appPath | string | yes | Path to the app bundle. iOS: `.app` directory (e.g. ./build/.../MyApp.app). Android: `.apk` file (e.g. android/app/build/outputs/apk/debug/app-debug.apk). Vega: `.vpkg` file. Relative paths are resol… |
| bundleId | string | yes | App identifier that matches the bundle at `appPath`. iOS: bundle id (used to uninstall first). Android: package name (used to uninstall first; the install itself identifies the app from the APK). Veg… |
| udid | string | yes | Target device id from `list-devices` (iOS UDID or Android serial). |
No output schema declared.
No examples provided.
restart-app ~197
Terminate then relaunch an app by bundle id / package name. Use when you need a clean in-memory state without a full reinstall. Also refreshes the native-devtools injection before the relaunch (the iOS slice on iOS, the tvOS slice on Apple TV); on tvOS, interaction is focus-driven — use the tv-* tools rather than coordinate taps. Returns { restarted, bundleId }. Fails if the app is not installed.
| Name | Type | Req | Description |
|---|---|---|---|
| activity | string | – | Android-only: relaunch a non-launcher Activity (e.g. `.SettingsActivity` or `com.example/com.example.SettingsActivity`). If omitted, the app's default launcher activity is used. Ignored on iOS. |
| bundleId | string | yes | App identifier. iOS: bundle id. Android: package name. |
| udid | string | yes | Target device id from `list-devices` (iOS UDID or Android serial). |
No output schema declared.
No examples provided.
rotate ~98
Set the device orientation to Portrait, LandscapeLeft, LandscapeRight, or PortraitUpsideDown. Use to test layout in a different orientation. Re-run `describe` afterwards — frame coordinates change with the orientation. Returns { orientation }. Fails if the target device is not booted.
| Name | Type | Req | Description |
|---|---|---|---|
| orientation | string | yes | Target orientation |
| udid | string | yes | Target device id from `list-devices` (iOS UDID or Android serial). |
No output schema declared.
No examples provided.
run-sequence ~1,312
Execute multiple device interaction steps in a single call (iOS simulator, Android emulator, Apple TV / Android TV, or Chromium app). Use when you need sequential actions and do NOT need to observe the screen between them (e.g. scrolling multiple times, typing then pressing enter, rotating back and forth). Returns { completed, total, steps } with per-step results. Fails if an unrecognised tool name is used in a step (error returned at that step, execution stops). No screenshot is captured automatically — call screenshot separately after the sequence if needed. ONLY use this when every step is known in advance. If any step depends on the result of a previous one (e.g. tapping a menu item that only appears after a prior tap), use individual tool calls instead. Allowed tools and their args (udid is auto-injected, do NOT include it in args): gesture-tap: { x: number, y: number, clickCount?: number } [ios/android/chromium] gesture-swipe: { fromX: number, fromY: number, toX: number, toY: number, durationMs?: number } [ios/android] gesture-scroll: { x: number, y: number, deltaX?: number, deltaY?: number, durationMs?: number } [chromium only] gesture-drag: { fromX: number, fromY: number, toX: number, toY: number, durationMs?: number } [chromium only] gesture-custom: { events: [{ type: "Down"|"Move"|"Up", x: number, y: number, x2?: number, y2?: number, delayMs?: number }], interpolate?: number } [ios/android] gesture-pinch: { centerX: number, centerY: number, startDistance: number, endDistance: number, endCenterX?: number, endCenterY?: number, angle?: number, durationMs?: number } [ios/android] gesture-rotate: { centerX: number, centerY: number, radius?: number, radiusX?: number, radiusY?: number, startAngle: number, endAngle: number, durationMs?: number } [ios/android] button: { button: "home"|"back"|"power"|"volumeUp…
| Name | Type | Req | Description |
|---|---|---|---|
| steps | array | yes | Ordered list of interaction steps to execute sequentially |
| udid | string | yes | Target device id from `list-devices` (iOS UDID, Android serial, Vega serial, or Chromium id) — shared across all steps. |
No output schema declared.
No examples provided.
screen-recording-start ~490
Start recording the device screen to a video file (h264 mp4, 30fps at the device's native resolution). By default stretches where the screen does not change are trimmed out (see trimStatic), so a long session with only brief activity comes back as a short clip instead of minutes of dead air. By default every tap, swipe, drag, pinch and rotate is drawn into the video as an on-screen touch marker (see showTouches), so the recording shows where each interaction landed. The recording keeps running across other tool calls (every result carries a reminder) until `screen-recording-stop` is called or timeLimitSeconds elapses — immediately after starting, set yourself a reminder/wakeup for the expected end of the recording so it is never left running. Use when the user wants a video of an interaction, animation, or app behavior — for a single still frame use `screenshot` instead. Returns { status: "recording", timeLimitSeconds, outputFile } — the video is retrieved later by `screen-recording-stop`, not by reading outputFile directly. Fails if a recording is already running on the device, the device is not booted, ffmpeg is not installed, or the platform cannot be recorded (tvOS, Chromium, Vega and remote simulators are unsupported).
| Name | Type | Req | Description |
|---|---|---|---|
| showTouches | boolean | – | Default true. Draw simulator-server's touch visualizer into the recording: a pulse marks each tap, a comet trail follows swipes and drags, and paired markers show two-finger pinch/rotate, so the vide… |
| timeLimitSeconds | integer | – | Auto-stop cap in seconds (default 180, max 600). Set it to slightly more than the interaction you plan to capture. |
| trimStatic | boolean | – | Default true. Collapse stretches where the screen does not change: the first second of each still stretch is kept, then unchanged frames are dropped until something moves again, so a long recording w… |
| udid | string | yes | Target device id from `list-devices` (iOS Simulator UDID or Android serial). |
No output schema declared.
No examples provided.
screen-recording-stop ~199
Stop the screen recording started by `screen-recording-start` and retrieve the video: frame capture ends and ffmpeg finalizes the mp4. Also retrieves the video when the recording already ended on its own (time limit reached, capture process died) — call it even after the cap fired. Use when the interaction being captured is finished, or a tool-result note reminds you a recording is still running. Returns { video, durationMs, wallClockMs?, trimmedMs?, warning? }; video is a downloadable artifact materialized to a local path. When static-frame trimming removed dead air, durationMs is the trimmed video length and wallClockMs/trimmedMs report the real duration and how much was cut. Fails if no recording (running or finished-but-unretrieved) exists for the given udid.
| Name | Type | Req | Description |
|---|---|---|---|
| udid | string | yes | Target device id from `list-devices` (iOS Simulator UDID or Android serial). |
No output schema declared.
No examples provided.
screenshot ~325
Capture a screenshot of the device screen (iOS simulator, Android emulator, Apple TV simulator, Vega, or Chromium app). Returns { image }; the MCP adapter renders it as a visible image unless the caller passed includeImageInContext: false. Use when you need a baseline image before an interaction or to inspect the current screen state after a delay. Fails if the simulator-server / emulator backend / Chromium CDP is not reachable for the given device.
| Name | Type | Req | Description |
|---|---|---|---|
| downscaler | string | – | Downscaling algorithm when scale<1 on Chromium. Defaults to lanczos3 (highest quality). Mirrors sim-server's wire enum. |
| includeImageInContext | boolean | – | Default true. Set false only when capturing a full-resolution PNG (scale: 1.0) to save as a baseline/current for screenshot-diff — the file is still written, but the image bytes are not attached to t… |
| rotation | string | – | Orientation override for the screenshot (rotates the captured image after Page.captureScreenshot on Chromium). |
| scale | number | – | Scale factor (0.01-1.0). Defaults to ARGENT_SCREENSHOT_SCALE env var, or 0.3 if unset for iOS/Android. On Chromium the default is 1.0 (no downscale); pass <1 to opt in. Downscaling on Chromium requir… |
| udid | string | yes | Target device id from `list-devices` (iOS UDID, Android serial, Apple TV UDID, Vega serial, or Chromium id). |
No output schema declared.
No examples provided.
screenshot-diff ~385
Compare two PNG screenshots and return a compact visual-diff summary. Accepts saved baseline/current PNG paths, or one saved PNG plus one live full-resolution capture from a device. Always provide udid so the simulator-server dependency can be resolved. Use when stable before/after screenshots exist and the expected result is pixel-visible: layout, spacing, color, typography, image/icon rendering, clipping, overflow, or text rendering. For live captures, set exactly one of captureBaseline or captureCurrent; use baselinePath + captureCurrent for the common visual-regression flow. Returns { summary, diffPath, contextDiffPath }. The summary uses normalized [0,1] screen locations matching describe coordinates; diffPath is the full-size diff image and contextDiffPath is a downscaled image for MCP/agent display. Ignores the fixed top status-bar band for both pixel and OCR text comparisons. Fails if the input sources are invalid, PNG files cannot be read, outputDir cannot be written, or the simulator-server / emulator backend is not reachable.
| Name | Type | Req | Description |
|---|---|---|---|
| baselinePath | string | – | Path to the baseline PNG file. Required unless captureBaseline is true. |
| captureBaseline | boolean | – | Capture the baseline screenshot live at full resolution before diffing. Cannot be combined with captureCurrent. |
| captureCurrent | boolean | – | Capture the current screenshot live at full resolution before diffing. Cannot be combined with captureBaseline. |
| currentPath | string | – | Path to the current PNG file. Required unless captureCurrent is true. |
| outputDir | string | – | Directory where diff artifacts should be written. Optional — defaults to a temp directory; the diff images are returned in the result either way. |
| rotation | string | – | Orientation override for live baseline/current captures. |
| udid | string | yes | Target device id from `list-devices` (iOS UDID or Android serial). |
No output schema declared.
No examples provided.
settings-permissions ~577
Grant, deny, or reset a runtime permission for an app without navigating the system Settings UI. Use during test setup to pre-authorize (or explicitly deny) a service before the app asks, or `reset` so the permission dialog appears again on next use. Always per-app: bundleId is required. Permissions: camera, microphone, photos, contacts, notifications, calendar, location, location-always, media-library, motion, reminders. iOS simulator: edits the simulator's TCC store, always per-app. `notifications` is not supported (no iOS equivalent). `reset` is per-app — a device-wide reset is a no-op for existing grants on recent iOS, so it is not offered. `grant location`/`location-always` needs the app already installed (location auth isn't stored in TCC and isn't applied to a bundle id until the app exists) — enforced on local simulators; a remote simulator can't be probed for install state, so ensure the app is installed there first. Other services can be granted before install. Android: changes the mapped `android.permission.*` runtime permissions (reset also best-effort clears the user-set permission flags). The app must be installed and declare them in its manifest; `reminders` has no Android equivalent. Some permission changes terminate the app if it is running (system behavior on both platforms) — set permissions before launching, or relaunch after. Returns { action, permission, bundleId, applied, skipped? }: `applied` lists the platform-level services/permissions actually changed; `skipped` (Android) lists mapped permissions the package manager rejected, e.g. ones the manifest doesn't declare. Fails if nothing could be applied.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | `grant` pre-authorizes the permission, `deny` refuses it, `reset` returns it to the not-yet-asked state so the app prompts on next use. |
| bundleId | string | yes | App to change the permission for — required for every action. iOS: bundle id (e.g. com.example.app). Android: package name. `reset` is per-app too: simctl's device-wide reset (no bundleId) silently l… |
| permission | string | yes | The permission to change. `notifications` is Android-only (iOS has no simctl service for it); `reminders` is iOS-only; `camera` works on Android and on iOS only when the target simulator's runtime mo… |
| udid | string | yes | Target device id from `list-devices` (iOS simulator UDID or Android serial). |
No output schema declared.
No examples provided.
stop-all-simulator-servers ~77
Stop all running simulator-server processes (iOS + Android), native devtools services, and Chromium CDP sessions, freeing their resources. Call this when your session ends or the user says they are done. Returns { stopped } — an array of URNs that were shut down. Fails silently if no servers are running.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
stop-metro ~111
Stop the Metro bundler process listening on a given port (default 8081). Use when ending a React Native session or when Metro must be restarted. Returns { stopped, port, pids }; stopped=false if no process is found on the port. Fails if the port lookup command times out or the process cannot be killed. This is DESTRUCTIVE — always ask the user for confirmation before calling this tool.
| Name | Type | Req | Description |
|---|---|---|---|
| port | integer | – | TCP port Metro is listening on (default 8081) |
No output schema declared.
No examples provided.
stop-simulator-server ~105
Stop the transport session for a specific device (iOS / Android: simulator-server process; Chromium: CDP WebSocket) and free its resources. Use when you are done interacting with one device but want to keep others running. Returns { stopped, udid }. Fails silently if no session is open for the given id.
| Name | Type | Req | Description |
|---|---|---|---|
| udid | string | yes | Target device id (iOS UDID, Android serial, or Chromium id) whose transport session to stop |
No output schema declared.
No examples provided.
tv-remote ~464
Press a TV remote / D-pad button (or a whole path of them) on a TV device — Apple TV (tvOS), Android TV (leanback), or Vega (Fire TV). A TV is navigated with a directional remote, not touch — use this instead of gesture-tap/swipe (which do not apply on a TV). Move focus with up/down/left/right, confirm with select, go back with back/menu, exit with home, and use playPause/rewind/fastForward/next/previous/volumeUp/volumeDown/mute for the corresponding remote keys. (On the Apple TV simulator the media-transport and volume keys are rejected — its HID stack ignores them; they work on Android TV and Vega.) Single press: { button: "down" }. Repeat the same button: { button: "down", repeat: 3 }. Multi-step navigation: pass a path as { button: ["up","right","right","select"] } — it runs in one tool call, far cheaper than separate presses. Read the screen with `describe` before and after to see where focus landed. Returns { pressed, count }.
| Name | Type | Req | Description |
|---|---|---|---|
| button | – | – | A single TV-remote button, or a path of them run in one call. Buttons: up/down/left/right (D-pad), select (OK), back, home, menu, playPause, rewind, fastForward, next, previous, volumeUp, volumeDown,… |
| repeat | integer | – | Repeat the whole `button` value this many times (default 1). Compact for long same-button runs, e.g. { button: "down", repeat: 12 }. |
| udid | string | yes | Target TV device id from `list-devices` (Apple TV, Android TV, or Vega). |
No output schema declared.
No examples provided.
update-argent ~175
Apply a pending Argent update. Only call this tool when the user has explicitly consented to updating Argent in this conversation. Use when an update notification indicates a new version is available and the user agrees to update. By default updates the install serving this session; pass `target` to choose global/local/both. Returns { message } with the update status and version info. The tool server will restart automatically after the update. Fails if no update is available or an update is already in progress.
| Name | Type | Req | Description |
|---|---|---|---|
| target | string | – | Which install to update. 'auto' (default) updates the install serving this session — the global PATH install or this project's local devDependency, whichever this server runs from. Pass 'global' / 'l… |
No output schema declared.
No examples provided.
view-network-logs ~223
Retrieve captured network (HTTP) requests from the running app. Returns a paginated list of requests with method, URL, status, resource type, size, and duration. Each entry includes a requestId that can be passed to view-network-request-details for full details. On React Native (iOS / Android / Vega) interception is injected into the JS runtime — it captures fetch() calls. On Chromium it reads the browser's native CDP Network domain (the active tab; all request types). Use when inspecting outbound HTTP traffic or debugging API calls in the running app. Fails if the app is not connected (RN) or the device is not reachable (Chromium).
| Name | Type | Req | Description |
|---|---|---|---|
| device_id | string | yes | Device id from list-devices (iOS simulator UDID or Android serial) — the same id used with debugger-connect. |
| pageIndex | – | – | Page index (0-based) or "latest" for the most recent page. Each page contains up to 50 entries. |
| port | number | – | Metro server port (RN only; ignored on Chromium) |
No output schema declared.
No examples provided.
view-network-request-details ~184
Get full details of a specific network request by its requestId (from view-network-logs). Returns request/response headers (sensitive headers redacted), status, timing, and optionally the response body. Large response bodies are truncated. Use when you need headers, body, or timing for a specific request after listing logs. Returns an error message string if the requestId is not found — use view-network-logs to get valid requestId values.
| Name | Type | Req | Description |
|---|---|---|---|
| device_id | string | yes | Device id from list-devices (iOS simulator UDID or Android serial) — the same id used with debugger-connect. |
| includeBody | boolean | – | Whether to include the response body (if captured). Defaults to true. |
| port | number | – | Metro server port |
| requestId | string | yes | The requestId from view-network-logs to get full details for |
No output schema declared.
No examples provided.