Guide · Agent skill
How to use the Authoring Patch Sets agent skill
Updated · written with AI from the project's own documentation and checked against our catalogue data
The authoring-patch-sets skill is a set of written conventions that teaches an AI agent how to add or change firmware patches in the vphone-cli virtual iPhone tool. It is for developers and maintainers who edit that project's source code. After reading this guide, you will know how to install the skill, ask an agent for patch work in a way that triggers it, and what rules the agent will follow.
Quick start
- 1Download the ZIP. Get authoring-patch-sets from this page. The package contains SKILL.md.
- 2Install the skill. Unzip it into ~/.claude/skills/ for personal use or into a project's .claude/skills/ folder, or upload the ZIP under Settings → Capabilities → Skills in the Claude apps.
- 3Open the vphone-cli source. Work inside the vphone-cli source repository, since the skill needs its Swift codebase and AGENTS.md.
- 4Ask for patch work in plain language. Describe the patch, its version target or its default state, and the agent will load the skill from the request.
- 5Review the declaration. Check the identifier name, version gate, bootEssential flag and summary the agent writes.
- 6Run the checks. Build, run the golden corpus and confirm the logs do not contain "declared by no patch set".
What the skill makes the agent do
Every firmware patch in the project is declared in a patch set, selected by a preset, and written only if its gate allows it. A patch that exists in code but in no manifest still applies, but it cannot be turned off and it prints a warning on every run. The skill teaches the agent to declare each new patch properly.
The skill is not a patching tool. It does not run patches or modify firmware. It gives the agent rules and examples for naming a patch identifier, setting version gates, marking boot-essential patches and creating new patch sets or presets.
- Declare a patch in a set's patches array using a VPhonePatchDeclaration
- Pick an identifier in the form {component}-{effect}-{name}
- Set version gates with VPhonePatchApplicability instead of strings
- Mark patches the guest needs to boot with bootEssential: true
- Create a new patch set or add a preset plist
How to install the authoring-patch-sets skill
Download the skill ZIP from this page. The skill is a single file, SKILL.md. Unzip it into one of two locations depending on how you want to use it.
For a personal setup available across projects, unzip it into ~/.claude/skills/. To limit it to one project, unzip it into that project's .claude/skills/ folder.
In the Claude apps you can instead upload the ZIP under Settings → Capabilities → Skills.
- Personal: ~/.claude/skills/authoring-patch-sets/
- Project only: .claude/skills/authoring-patch-sets/ inside the project
- Claude apps: Settings → Capabilities → Skills, then upload the ZIP
How to trigger the skill with natural requests
You do not need a special command. The skill's description tells the agent when to use it, so ask for patch work in plain language while working in the vphone-cli source repository. The skill is written for changes to that codebase, so make sure the agent can access it.
Requests that match the skill's description include adding or changing a patch in FirmwarePatcher, giving a patch a version gate, making a patch selectable or off by default, and building an out-of-tree .vphonepatchset.
- "Add a kernel boot patch for the new sandbox hook and declare it properly."
- "This patch only applies to iOS 18. Add a version gate."
- "Make the new txm patch off by default but selectable in the UI."
- "I want to package my patches as an out-of-tree .vphonepatchset. Set it up."
Follow the rules the skill enforces
Adding a patch to an existing set has five parts: write the patch, note the record identifier it emits, declare it, build, and check the logs. Naming follows a fixed scheme, and declarations cover their own record and any site written as <identifier>.<site>. Only a dot starts a site, so an underscore never separates one.
Version gates must be structured. A version gate is not a preference, and a preset cannot widen a gate. Boot-essential declarations must have a summary, because it is the text read before someone unticks a box that stops their VM booting.
- Identifier shape: {component}-{effect}-{name}, with snake_case names using only [a-z0-9_]
- Effect is derived: boot if bootEssential, else exp if standard leaves it off, else cfw
- No identifier may be a record-site prefix of another
- Do not add boolean flags to FirmwarePipeline or --force-something CLI flags for patches
VPhonePatchDeclaration(identifier: "kernel-boot-my_patch", title: "What it is, in three or four words", summary: "What it does and why the guest needs it.", target: .firmware(.kernelcache), applicability: VPhonePatchApplicability(iOSBase: .major(27)), bootEssential: true)Check the work with the test corpus
After adding a declaration, build and run the golden corpus. A record that no declaration covers prints a warning that it is declared by no patch set and is being applied anyway. Search the logs for that phrase and make sure it is absent.
The test named for patch identifiers in FirmwarePatchSetCatalogTests checks the shape, effect and uniqueness of every bundled declaration. The agent should be told to run these checks rather than assume the change is correct.
- Grep the build logs for "declared by no patch set"; it must not appear
- Run the FirmwarePatchSetCatalogTests suite
Create a new patch set or preset
Create a new set only when its patches share a reason to be on or off together. The skill points to FirmwareKernelFridaPatchSet.swift as the smallest example to copy. Register the new manifest in FirmwarePatchSetCatalog.bundled, and gate its patcher's construction on includesSet(...) so that leaving the set out also leaves the patcher out.
Add the set to both shipped preset plists. Each preset names every set, and presets differ by their selection rather than by which sets they use. The minimal preset is the one exception.
- Manifest fields include identifier, name, summary, patches, requires, provides, conflictsWith and after
- Shipped presets live in VPhoneExecutable/VPhoneVirtualization/Resources/patches_presets/
What people use it for
- Adding a new kernel patch to an existing in-tree patch set with the correct identifier and summary
- Restricting a patch to a specific iOS release using a version gate instead of a string check
- Making a non-essential patch available in the UI but off by default through a preset
- Creating a new patch set for patches that should be switched on or off together
- Packaging custom patches as an out-of-tree .vphonepatchset bundle
Frequently asked questions
What is the authoring-patch-sets skill?
It is an agent skill, a SKILL.md file of written rules, that teaches an AI agent the vphone-cli project's conventions for declaring firmware patches, patch sets and presets. It is intended for editing the project's source code. It does not apply patches itself.
How do I install the authoring-patch-sets skill?
Download the ZIP from this page and unzip it into ~/.claude/skills/ for personal use, or into a project's .claude/skills/ folder. In the Claude apps, you can upload the ZIP under Settings → Capabilities → Skills.
What do I need to use this skill?
You need access to the vphone-cli source repository, including the Swift codebase and AGENTS.md. The skill does not run scripts and does not use the network.
Is the authoring-patch-sets skill free?
The skill is released under the MIT licence. Check the repository's licence file for the full terms.
Can this skill patch firmware for me?
No. The skill only gives guidance to an agent. It does not run patches or modify firmware, so you still need to build and run the project's tests yourself.
Who should not use this skill?
If you only want to run the vphone tool, you do not need it, because it only matters when editing the tool's source code. Pick a different resource if you are looking for a way to operate the tool rather than change it.
New agent skills, repos and AI tools — every week
The best new skills and open-source projects, the fastest-growing repos, and one free prompt. Five minutes to read. Unsubscribe anytime.
Our verdict
This skill is worth installing if you contribute firmware patches or maintain patch sets for the vphone-cli codebase, because it encodes naming, gating and boot-essential rules that are easy to get wrong. It is not useful for people who only run the vphone tool or who expect it to modify firmware automatically.
Download the skill