jscpd Code Migration Tracker
kucherenko/jscpd
Measures a code port between languages or frameworks with jscpd's function-level comparison, porting tests before code and tracking what is left unmatched.
Maintain the batched TSS-prefetch list of peripheral updaters (PREFETCHABLEUPDATERS in pymobiledevice3/restore/tss.py).
$ npx skills add doronz88/pymobiledevice3 --skill tss-batch-prefetch -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install doronz88/pymobiledevice3 tss-batch-prefetch --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/doronz88/pymobiledevice3.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.codex/skills/tss-batch-prefetch .claude/skills/tss-batch-prefetch && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "tss-batch-prefetch" agent skill from https://github.com/doronz88/pymobiledevice3/tree/master/.codex/skills/tss-batch-prefetch into .claude/skills/tss-batch-prefetch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tss-batch-prefetch", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/doronz88/pymobiledevice3/tree/master/.codex/skills/tss-batch-prefetchType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add doronz88/pymobiledevice3 --skill tss-batch-prefetch -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install doronz88/pymobiledevice3 tss-batch-prefetch --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/doronz88/pymobiledevice3.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.codex/skills/tss-batch-prefetch .agents/skills/tss-batch-prefetch && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "tss-batch-prefetch" agent skill from https://github.com/doronz88/pymobiledevice3/tree/master/.codex/skills/tss-batch-prefetch into .agents/skills/tss-batch-prefetch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tss-batch-prefetch", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add doronz88/pymobiledevice3 --skill tss-batch-prefetch -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install doronz88/pymobiledevice3 tss-batch-prefetch --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/doronz88/pymobiledevice3.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.codex/skills/tss-batch-prefetch .cursor/skills/tss-batch-prefetch && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "tss-batch-prefetch" agent skill from https://github.com/doronz88/pymobiledevice3/tree/master/.codex/skills/tss-batch-prefetch into .cursor/skills/tss-batch-prefetch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tss-batch-prefetch", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/doronz88/pymobiledevice3.git --path .codex/skills/tss-batch-prefetch--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add doronz88/pymobiledevice3 --skill tss-batch-prefetch -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install doronz88/pymobiledevice3 tss-batch-prefetch --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/doronz88/pymobiledevice3.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.codex/skills/tss-batch-prefetch .gemini/skills/tss-batch-prefetch && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "tss-batch-prefetch" agent skill from https://github.com/doronz88/pymobiledevice3/tree/master/.codex/skills/tss-batch-prefetch into .gemini/skills/tss-batch-prefetch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tss-batch-prefetch", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install doronz88/pymobiledevice3 tss-batch-prefetchInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add doronz88/pymobiledevice3 --skill tss-batch-prefetch -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/doronz88/pymobiledevice3.git skills-src && mkdir -p .github/skills && cp -r skills-src/.codex/skills/tss-batch-prefetch .github/skills/tss-batch-prefetch && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "tss-batch-prefetch" agent skill from https://github.com/doronz88/pymobiledevice3/tree/master/.codex/skills/tss-batch-prefetch into .github/skills/tss-batch-prefetch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tss-batch-prefetch", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add doronz88/pymobiledevice3 --skill tss-batch-prefetch -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install doronz88/pymobiledevice3 tss-batch-prefetch --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/doronz88/pymobiledevice3.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.codex/skills/tss-batch-prefetch .opencode/skills/tss-batch-prefetch && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "tss-batch-prefetch" agent skill from https://github.com/doronz88/pymobiledevice3/tree/master/.codex/skills/tss-batch-prefetch into .opencode/skills/tss-batch-prefetch/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tss-batch-prefetch", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
tss-batch-prefetchMaintain the batched TSS-prefetch list of peripheral updaters (PREFETCHABLEUPDATERS in pymobiledevice3/restore/tss.py).
Tss Batch Prefetch is an agent skill from doronz88/pymobiledevice3. Maintain the batched TSS-prefetch list of peripheral updaters (PREFETCHABLEUPDATERS in pymobiledevice3/restore/tss.py). Use when onboarding a new device model, debugging a TSS rejection of the combined POST, or extending the prefetch to cover additional chips (e.g. Cryptex1, Timer, TCON, future Apple peripherals). Walks through enumerating candidates from PreflightInfo.DeviceInfo, adding entries safely, and validating with a non-destructive dry-run before a live restore.
Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/chip-stability-matrix.md`).
It sits in Development. It works with Python and iOS. The repository describes itself as: Pure python3 implementation for working with iDevices (iPhone, etc...). The licence is GPL-3.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 03ba227. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uvx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Tss Batch Prefetch loads about 3.4k tokens when it runs, and up to ~10k if it reads all its reference files. Until then it costs about 125 tokens; SKILL.md has 1,234 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from doronz88/pymobiledevice3 at commit 03ba227, republished under its GPL-3.0 licence (© doronz88). 1,234 words, ~3,402 tokens.
.claude/skills/tss-batch-prefetch/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.pymobiledevice3 restore update --tss-batch collapses N standalone TSS POSTs (one per peripheral updater) into a single batched POST. The set of peripherals included is hardcoded in PREFETCHABLE_UPDATERS (pymobiledevice3/restore/tss.py), co-located with the add_*_tags helpers it references; Restore imports it and drives the orchestration. Each entry pairs a PreflightInfo.DeviceInfo key with the matching add_*_tags helper.
Use this skill when:
"This device isn't eligible for the requested build" or "An internal error occurred" from TSS for a peripheralRestore.update()
└─ Restore._prepare_tss_riders() ← if --tss-batch (opt-in, default off)
├─ per peripheral: _merge_device_info(params, DeviceInfo entry) + add_<chip>_tags on a
│ scratch TSSRequest → that chip's request entries (@<chip>,Ticket: True + fields)
└─ Recovery.tss_riders = all of them (one dict)
└─ Recovery.boot_ramdisk() → fetch_tss_record() → get_tss_response()
└─ Recovery._send_tss_request(): the AP request + the riders, ONE POST to gs.apple.com/TSS
(riders never override an AP entry; consumed once — the RecoveryVariant re-fetch goes without)
→ rejected? retry the AP request alone; peripherals go reactive (only extra request there is)
└─ Restore._store_tss_riders(): keep each <chip>,Ticket the AP response came back with,
together with the request entries that were signed
at restore time (from restored's DataRequestMsg):
Restore.send_firmware_updater_data()
└─ Restore.get_device_generated_firmware_data() ← iOS 18+ path
└─ _lookup_prefetched_tss_by_ticket(response_ticket, arguments)
compares the WHOLE arguments.DeviceGeneratedRequest against the signed entries
(bytes by content, dicts entry for entry; extra signed entries are fine)
→ identical : serve the prefetched ticket, skip the live request
→ any diff : log the keys, fall back to a live request (never a stale ticket)TSS signs the AP ticket and every peripheral ticket in that one request (verified on iPhone18,4 / iOS 27.0 24A435 for every combination of SE2, Rose, Savage, T200, Vinyl, Centauri). The prefetch therefore costs no request of its own; each hit is one live request saved during the restore.
Key invariant in _merge_device_info: a manifest-derived int never gets clobbered by a DeviceInfo-derived bytes value for the same key. Without this, Savage,ChipID (which the manifest gives as int 1 but PreflightInfo gives as raw bytes b'\x00\x00\x00\x01') gets sent as bytes and TSS rejects the whole batch with a misleading "not eligible" error.
Reverse-engineered from MobileDevice (macOS 27.0) and restored_external / restoreserviced (iOS 27.0):
AMRAuthInstallCopyAllPreflightOptions: updaters set up from a
per-chip DeviceInfo/DeviceInfoTags/DeviceInfoRequests dictionary, personalized in normal
mode, tickets written under <PersonalizedRestoreBundlePath>/amai/<Updater>/<tag>, and served
by _handleFirmwareUpdaterPreflight ({"FirmwareResponsePreflight": {tag: ticket}}) plus
AMRestoreUpdaterPersonalize (skips TSS on a stash hit unless MessageArgUpdaterLoopCount != 0
or MessageForceRepersonalization).DeviceInfoTags + DeviceInfoRequests. The lockdown path never supplies them, and the RemoteXPC
path (AMRemoteServiceDeviceProxy::Restore → restoreserviced getdevicesidepreflightinfo)
builds the payload only for DeviceClass == "AppleDisplay": Ace3 (USB-C port controllers) and
Banyan (Baobab,TCON). The device-side consumers of PreflightTickets are Ace3, PS190,
AppleTypeCRetimer, T200 and AppleConvergedFirmwareUpdater-based updaters, with contexts named
OTA Preflight, NeRD Preflight, Tethered Preflight: displays, Macs and OTA updates.FirmwareUpdaterPreflight only because the host option
PersonalizedDuringPreflight is set (Apple sets it whenever the AP/baseband were personalized in
normal mode; we set it unconditionally). Apple's host answers {} for every iPhone chip and
signs reactively; pymobiledevice3 does the same. --tss-batch is therefore a pymobiledevice3-only
use of the mechanism, and it deliberately serves on the later FirmwareUpdaterData request
(where the device's own request can be compared) rather than through FirmwareResponsePreflight.Run these against a fresh device in normal mode:
# 1. Confirm connectivity + capture build info
uvx --from . pymobiledevice3 lockdown info | head -20
# 2. Enumerate what PreflightInfo.DeviceInfo exposes on THIS device
# (`pymobiledevice3 restore preflight` prints the same three dictionaries as JSON; the snippet
# below shows the types/lengths that matter for add_*_tags)
uvx --from . python3 -c "
import asyncio
from pymobiledevice3.lockdown import create_using_usbmux
async def main():
ld = await create_using_usbmux()
p = await ld.get_value('', 'PreflightInfo')
di = p.get('DeviceInfo') or {}
print('peripherals exposed:', sorted(di.keys()))
for chip, fields in di.items():
print(f'\n[{chip}]')
for k, v in fields.items():
t = type(v).__name__
if isinstance(v, (bytes, bytearray)):
print(f' {k:35s} ({t} len={len(v)}): {bytes(v).hex()[:64]}')
elif isinstance(v, dict):
print(f' {k:35s} ({t}): keys={list(v.keys())[:6]}')
else:
print(f' {k:35s} ({t}): {v!r}')
asyncio.run(main())
"
# 3. Dry-run the existing batched POST (read-only against TSS, no device touch)
# See references/dryrun-batched.py.template for a starter — copy to /tmp/ and run.
# 4. If you want to find peripherals that DataRequestMsg fires for but DeviceInfo doesn't expose,
# do a real restore once with --tss-batch and look for `get_device_generated_firmware_data (X):`
# lines in the log. Anything not in PREFETCHABLE_UPDATERS is a candidate IF its state is also
# visible pre-restore (often it isn't — see references/chip-stability-matrix.md).For each candidate from step 2, you need four pieces of metadata. Find them by:
| Metadata | How to get it |
|---|---|
preflight_key | The exact key in PreflightInfo.DeviceInfo. Step 2 output. |
preflight_nonce | The nonce field name inside that DeviceInfo entry (e.g. Rap,Nonce, or bare Nonce for T200-style chips with no prefix). |
ticket_name | The response key TSS returns. Same as @<X>,Ticket in the request. Derive from add_<chip>_tags's self._request["@<X>,Ticket"] = True line in tss.py. |
devgen_nonce | The nonce field name in DataRequestMsg.Arguments.DeviceGeneratedRequest at restore time. Often differs from preflight_nonce for chips like T200 where PreflightInfo uses bare names but restored uses prefixed ones. Capture from a real restore log via get_device_generated_firmware_data (X): .... |
add_tags | The TSSRequest helper, passed as the function object itself (e.g. TSSRequest.add_se2_tags, TSSRequest.add_rose_tags) — not a string. It's called as add_tags(tss, parameters, None). |
Then add a PrefetchableUpdater to PREFETCHABLE_UPDATERS in tss.py (a tuple of
PrefetchableUpdater, each holding a list of PrefetchVariant — see the dataclass
definitions in tss.py for every field):
PrefetchableUpdater("NewChip", "<DeviceInfo key>", [
PrefetchVariant(
ticket_name="<X>,Ticket",
add_tags=TSSRequest.add_<chip>_tags,
preflight_nonce="<nonce field in DeviceInfo>",
devgen_nonce="<nonce field in DeviceGeneratedRequest>",
),
]),A chip with more than one on-device shape (cf. Savage's flat Savage,* vs nested
YonkersDeviceInfo) gets one PrefetchVariant per shape, tried in order until one
whose nonce is present wins. A composite nonce (cf. Vinyl's eUICC,Gold.Nonce +
eUICC,Main.Nonce) uses nonce_path= / devgen_nonce_path= instead of the single-key
preflight_nonce= / devgen_nonce=.
If the chip lacks an add_<chip>_tags helper in tss.py, add one mirroring the pattern of add_savage_tags / add_veridian_tags. The helper's job is to copy the chip's fields onto the request and set @<X>,Ticket: True.
A wrong entry will silently fail the batched POST and TSS returns useless error messages ("not eligible", "internal error"). Validate non-destructively before any restore:
Restore object with enable_tss_batch=True, call _prepare_tss_riders() and then recovery.get_tss_response(); do not call boot_ramdisk or restore_device. See references/dryrun-batched.py.template. Confirm recovery.tss_riders_applied is True and every expected <X>,Ticket key comes back in the response.--tss-batch and take the get_device_generated_firmware_data (X): {...} log entry for each chip (restored's own DeviceGeneratedRequest). Without a restore, pymobiledevice3 restore preflight-requests -i <ipsw> --updater <X> returns the request the device builds in normal mode; it is the ramdisk's for T200 and Rose, but two entries short for SE and merged for Savage, so prefer the restore log when you have one. Compare it entry for entry against the tracked request your rider built — Restore._request_mismatches(device_request, ours) is the same check the restore uses. Anything but the nonce must match, or the chip will never hit. See references/diff-against-ramrod.py.template. Typical gaps: entries restored synthesizes that PreflightInfo lacks (Rap,FdrRootCaDigest, Wireless1,UID_MODE, UniqueBuildID), typing (bytes vs int) on ChipID / PatchEpoch / SecurityDomain.--tss-batch only after that. Watch for TSS prefetch HIT for <chip> lines and the summary at the end.Read references/chip-stability-matrix.md for the full per-chip table. Short version:
com.apple.private.RestoreRemoteServices.restoreservice.remote, which pymobiledevice3 doesn't carry.DeviceInfo merges the JasmineIR1 and Yonkers parts, but restored asks for them as two separate loops (JasmineIR1 first, Yonkers second) with a nonce each; neither ever matches. Left in the table for the older flat-Savage,* SoCs.You can keep peripherals whose nonce rotates on the normal→restore mode transition (Rose, Centauri, Baseband, Savage): the mismatch is detected entry for entry in _lookup_prefetched_tss_by_ticket and falls back to a live request. They cost nothing (they ride in the AP request) but they also save nothing on such a device; see the matrix for which chips are stable where.
references/dryrun-batched.py.template — read-only TSS validation harnessreferences/diff-against-ramrod.py.template — diff our request against the working DataRequestMsg shapePer AGENTS.md:
restore: Add <Chip>,Ticket to batched TSS prefetch.PREFETCHABLE_UPDATERS edit and any new add_*_tags helper together in one commit — both now live in tss.py.com.apple.RestoreRemoteServices.restoreserviced (getdevicesidepreflightinfo) to replace the add_*_tags helpers. It works (see the matrix), but it needs the chip's firmware files pushed to the device, one RemoteXPC connection per command, and it returns the same normal-mode nonces PreflightInfo already reports — no extra hits.send_baseband_data to bypass live POSTs. The AP-batch BBTicket reuse path is already coded; live POSTs there are dictated by per-chip baseband nonce rotation and are not safe to skip.--tss-batch as default. The default is opt-in by design — the batched POST changes wire-traffic shape and the user should consent.© doronz88, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (references) in .codex/skills/tss-batch-prefetch of doronz88/pymobiledevice3.
Open the folder on GitHubat commit 03ba227
Tss Batch Prefetch next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Tss Batch Prefetch this skilldoronz88/pymobiledevice3 | 2.9k | — | ~3.4k | Automated safety check: Pass | GPL-3.0 | |
| jscpd Code Migration Trackerkucherenko/jscpd | 6.4k | — | ~5k | Automated safety check: Pass | MIT | |
| ExecuTorch Build Guidepytorch/executorch | 5.1k | — | ~2.3k | Automated safety check: Notes | Custom licence | |
| Mobilerun Docs Referencedroidrun/mobilerun | 9.6k | — | ~943 | Automated safety check: Pass | MIT | |
| Phoneagentrounak/PhoneAgent | 799 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Apple Higjustinwetch/HIGAgentSkills | 562 | — | ~2.4k | Automated safety check: Pass | None |
kucherenko/jscpd
Measures a code port between languages or frameworks with jscpd's function-level comparison, porting tests before code and tracking what is left unmatched.
pytorch/executorch
Builds ExecuTorch from source: the Python package, C++ runtime, model runners, Android and iOS cross-compilation and backend-specific builds, with environment checks.
droidrun/mobilerun
Answers questions about Mobilerun, the LLM-agent framework for automating Android and iOS devices, by pointing the agent to the right page of its v5 documentation.
rounak/PhoneAgent
Control a connected iPhone, iOS simulator, Android emulator, or Android device from macOS through PhoneAgent's JSON-RPC bridge.
justinwetch/HIGAgentSkills
Apple Human Interface Guidelines reference, updated for iPhone Duo and OS 27.
conorluddy/ios-simulator-skill
29 production-ready scripts for iOS app testing, building, and automation.
doronz88/pymobiledevice3
Operate iOS and iPadOS devices with pymobiledevice3, from a local checkout or straight from PyPI via uvx on a fresh workstation.
doronz88/pymobiledevice3
Cut a new pymobiledevice3 release — create the GitHub release (which publishes to PyPI) with a curated Highlights section.
Categories
Maintain the batched TSS-prefetch list of peripheral updaters (PREFETCHABLEUPDATERS in pymobiledevice3/restore/tss.py). Tss Batch Prefetch is an agent skill from doronz88/pymobiledevice3.py).
Tss Batch Prefetch fits situations like: onboarding a new device model; debugging a TSS rejection of the combined POST; extending the prefetch to cover additional chips (e.g.
Run `npx skills add doronz88/pymobiledevice3 --skill tss-batch-prefetch -a claude-code`. Or copy the skill folder (.codex/skills/tss-batch-prefetch in doronz88/pymobiledevice3) into .claude/skills/tss-batch-prefetch in your project. Claude Code loads it when a task matches its description.
Run `npx skills add doronz88/pymobiledevice3 --skill tss-batch-prefetch -a codex`. Or copy the skill folder (.codex/skills/tss-batch-prefetch in doronz88/pymobiledevice3) into .agents/skills/tss-batch-prefetch in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add doronz88/pymobiledevice3 --skill tss-batch-prefetch -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tss-batch-prefetch, .gemini/skills/tss-batch-prefetch, .github/skills/tss-batch-prefetch and .opencode/skills/tss-batch-prefetch in your project.
Going by SKILL.md and its folder, Tss Batch Prefetch needs the command-line tools its instructions call (uvx). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use uvx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Tss Batch Prefetch is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Tss Batch Prefetch: jscpd Code Migration Tracker (kucherenko/jscpd, 6.4k stars), ExecuTorch Build Guide (pytorch/executorch, 5.1k stars), Mobilerun Docs Reference (droidrun/mobilerun, 9.6k stars) and Phoneagent (rounak/PhoneAgent, 799 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
doronz88 (a GitHub user) maintains it in doronz88/pymobiledevice3, which has 2,851 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 8, 2026.
Source: doronz88/pymobiledevice3 on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.