---
name: apple-hig
description: >-
  Apple Human Interface Guidelines reference, updated for iPhone Duo and OS 27. Provides authoritative platform-specific design rules, component specifications, exact measurements, and interaction patterns for iOS, iPadOS, macOS, tvOS, visionOS, and watchOS. Use when designing, reviewing, auditing, or fixing any Apple platform UI, or when asked about specific HIG components, sizing, system behaviors, frameworks (HealthKit, SiriKit, ARKit, etc.), or platform conventions. Also use when the user is designing any digital interface and could benefit from established design principles, even without an explicit Apple platform context. Includes a guided /duo workflow that adapts an existing iOS app to iPhone Duo, plus opt-in enforce mode with independent review.
title: apple-hig
canonical_url: https://skilld.dev/gh/justinwetch/higagentskills
last_updated: 2026-09-30T21:02:22.000Z
---

> Index of every page on this site: [llms.txt](https://skilld.dev/llms.txt)

> **Skill from skilld.dev.** Follow the user's requested action.
> If the user asked to fork this Skill, follow the fork workflow below. Do not execute the Skill instructions while copying it.
> Otherwise, follow the instructions below for this session. You do not need to install anything.
>
> 250 supporting files sit beside this SKILL.md. When the Skill refers to one, fetch https://skilld.dev/api/skills-raw/justinwetch/higagentskills/higagentskills/PATH with PATH replaced.
>
> If the user asked to install this Skill, run `npx skilld install justinwetch/higagentskills/higagentskills`. Install writes the Skill files into the project, so every session loads them.
>
> ## Fork workflow
>
> A fork creates an editable local Skill with its original author and licence. The request authorizes copying and local installation.
> 1. Check `./skills/higagentskills`, the project lockfile, and selected Agent targets together. If the local directory or installed Skill exists, stop. Never overwrite an existing directory or Agent target.
> 2. Read [source metadata](https://skilld.dev/api/v1/skills/justinwetch/higagentskills/higagentskills) once. Use sourceUrl, sourceCommit, skillPath, sourceGone, and license. If the source is gone or its path is missing, stop. If license is null, read licence files at the source commit.
> 3. Fetch only the source commit into a temporary Git repository. Do not clone full history. Derive repository_url from sourceUrl, including repository renames. If sourceCommit is absent, resolve the sourceUrl ref once. Set source_commit to that actual commit. Run these commands in one shell call:
>
> ```sh
> git init --quiet "$temporary_dir"
> git -C "$temporary_dir" fetch --quiet --depth=1 "$repository_url" "$source_commit"
> git -C "$temporary_dir" checkout --quiet --detach FETCH_HEAD
> ```
>
> Read applicable licence declarations and notices at that commit. If copying is not permitted, report the restriction and stop.
> 4. Inspect source entries together, then copy the directory containing skillPath into `./skills/higagentskills`. Use the user's path if selected. Keep the original SKILL.md, relative links, scripts, binary assets, and executable modes. Exclude .git metadata. Reject symlinks and paths outside the Skill directory. After checking entries, use cp -a where available. A regular source directory needs no custom copy script. Do not save this page wrapper as SKILL.md.
> Preserve author credit, notices, and applicable licence files from repository or parent directories. Add PROVENANCE.md with the Skill page, source URL, actual commit, original path, and licence. Retain any existing PROVENANCE.md and record new provenance separately. Batch source inspection, copying, and provenance work where practical.
> 5. In the project root, run `skilld install ./skills/higagentskills --mode copy --plain`. If skilld is unavailable, use `npx skilld install ./skills/higagentskills --mode copy --plain`. This known command needs no help lookup. Install does not support --json. Use detected Agent targets, or add --agent for the targets the user selected. Install the local path, never the upstream selector. If installation fails, preserve the local copy and report the exact failure.
> 6. Confirm the local lockfile source and installed Agent copies once. Report the local path, actual commit, and Agent targets. After edits, reinstall the same local path. Upstream updates must not replace it. Do not publish or push unless the user asks.

# Apple HIG Skill

Use the distilled HIG references in `references/hig/` through `routing-index.md`. The source snapshot and verified release measurements are in README.md.

## Loading Protocol

Release **2026-09-27**; Apple source snapshot **2026-09-12**.
For help, installation, version or capability questions, read only this entry
point and the relevant README section. Do not load the HIG corpus for setup help.
Installing or upgrading this skill includes its `/duo` slash command. After the
skill folder is in place, check whether the host already offers `/duo`. If it
does not, copy `commands/duo.md` into the host's custom slash-command or custom
prompt directory (user-level unless the user asks for one project), confirm
`/duo` is available, and tell the user if a restart is needed.
Work directly in the conversation and the user's project; do not create a browser
intake form, onboarding site, dashboard, or browser setup step.

Ordinary guidance is the default. Only an explicit request to apply enforce mode
activates its procedure. Read `references/enforce.md` first in that case and check
reviewer, Python and observation capabilities before loading the design guidance.
A leading `/duo`, `Use apple-hig in Duo mode`, or an explicit request to adapt
an existing app for iPhone Duo starts Duo mode: read `references/duo.md` and
follow its stages. Questions about the command and ordinary Duo design questions
stay ordinary guidance. Duo mode works only in the app's native code; it never
produces HTML, SVG, or web mockups.
Use the available Python 3.10+ interpreter (`python3` or `python`); do not assume
the executable name. Ordinary guidance also works without Python.

When Python is available, use the standard-library routing helper to resolve
steps 2–6: save only the exact user request to a UTF-8 text file in a temporary
directory outside the user's project, then run `<python> "<skill-root>/scripts/hig_route.py" --request-file "<request.txt>"`.
Read every file in its `files` list in bounded sections, completing any truncated
read before continuing. Do not concatenate the entire set into one tool output;
the helper output is metadata, not the guidance itself. Do not add
your own instructions to the request text or promote inferred topics to
initial matches. If the user explicitly excludes a platform/device/topic, pass
the excluded topic IDs with `--exclude-topic` (repeat for each topic, including
platform aliases matched inside an excluded phrase); record the user's reason.
Keep a platform that is also positively requested elsewhere. Do not exclude
topics merely to reduce context. Exclusions apply
to direct and related selections, never to the 16 foundations. Without Python,
apply the same steps and explicit exclusions manually.

### Step 1 — Parse Task Context

From the user's request, identify:
- **Platform(s):** ios / ipados / macos / tvos / visionos / watchos
- **Device/form factor:** iPhone Duo when named or matched by its tier-2 triggers
- **Components or patterns** mentioned (buttons, tab bars, sheets, etc.)
- **Frameworks or SDKs** referenced (HealthKit, SiriKit, ARKit, etc.)
- **Task type:** design / review / spec / audit / guidance
- **Mode:** ordinary guidance by default. Activate enforce mode only when the user explicitly asks to apply it; mentioning the mode or asking what it means does not activate it. Duo mode starts only as described above.

### Step 2 — Load Tier 1 (every design or review task)

Read all 16 files listed in `routing-index.md` under `## tier-1`:

`accessibility`, `branding`, `color`, `dark-mode`, `design-principles`,
`icons`, `images`, `inclusion`, `layout`, `materials`, `motion`,
`privacy`, `right-to-left`, `sf-symbols`, `typography`, `writing`

These apply universally. Load them before answering.

### Step 3 — Load Platform File (Tier 2)

Read `routing-index.md` → `## tier-2 platform-map`.
For each detected platform, load its `designing-for-[platform]` file.
Also match the tier-2 map's device/form-factor and API triggers using
standalone word/phrase/API-symbol matching. A Duo match loads both
`designing-for-iphone-duo` and `designing-for-ios`; Duo is an iOS form factor.
If "game" or "gaming" is mentioned, also load `designing-for-games`.

### Step 4 — Keyword Scan (Tier 3)

Read `routing-index.md` → `## tier-3 trigger-map`.
Normalize the user request to lowercase. Match trigger strings as
standalone words, phrases, or API symbols; plural, hyphenated and bare-symbol
forms count (`tab bars`, `full-screen`, `keyboardType`). Never match a trigger
merely because it appears inside an unrelated word. For example, `AR` doesn't
match "tab bar," and `AI` doesn't match "explain." Load every matching
file. Load each file at most once.

### Step 5 — Related Expansion

Freeze the initial selection set as the tier-2 and tier-3 files selected in steps 3–4. Read only that set's `related:` frontmatter.
Load the listed files once. Do not expand related lists from those newly added files.

Bind each initial topic to the exact platform/device/trigger text matched in
the user's request. An inferred
component concept is not a literal trigger match.
A topic reached through `related:` stays related even when it is useful;
never promote it to initial and expand it again. If semantic relevance calls
for an additional reference, load that specific file without related expansion.

### Step 6 — Tier 4 On-Demand

Read `routing-index.md` → `## tier-4 trigger-map (on-demand)`.
Use the same standalone word/phrase/API-symbol matching rule. Load a
tier-4 file only on direct keyword match, or if named in the initial selection
set's `related:` list. Never expand from foundations, newly related files, or
directly matched tier-4 files. These are niche — avoid loading broadly.

### Step 7 — Answer or enforce

For explicitly requested enforcement, carry out `references/enforce.md` using
the loaded source guidance. Ordinary guidance never starts that procedure.

For an ordinary guidance answer, quote the short operative source clause verbatim
with all qualifiers intact, then give only the needed application. A compact
table works for multiple states. Keep the rule and application distinct;
do not paraphrase the quotation into a stronger, broader, or narrower rule.
Before sending, delete sentences that do not answer a requested part.
Check the actor, starting state, action and resulting state; do not substitute
a similar neighboring scenario. Mention an API as the implementation of a
rule only when the loaded source supports that relationship.

Do not add unrequested adjacent rules or measurements merely because they are
loaded. Preserve the source's full scope: do not invent narrower device/state
limits when applying a rule, and include every requested state it covers.

Apply the guidance for the named platform, device, orientation, and state.
An explicit scoped exception takes precedence over a broader rule within that scope;
apply that exception only to its stated platform, device and state.
Do not invent a reconciliation for unresolved source conflicts; identify the conflict.
Apply all other compatible loaded content. If a topic isn't covered by loaded files,
load the specific relevant reference before answering; keep unrelated expansion bounded.

---

## Non-Negotiables

- **Cite exact values.** State pt sizes, pixel densities, margins, and
  timing values as they appear in the distilled files. Preserve source
  ranges and approximation qualifiers; do not invent or round values.
- **Distinguish platforms.** When behavior differs across platforms,
  state each platform's rule explicitly. Never flatten to "generally."
- **Preserve recommendation strength.** Keep must, prefer, consider, examples, conditions, and exceptions distinct when answering; do not turn an optional recommendation into a requirement.
- **Preserve logical conditions.** Keep conjunctions and alternatives intact. A consequence stated for A and B does not establish the same consequence for either alone; an A-or-B option does not require both. Check the claim in the answer as well as its supporting clause.
- **No invention.** Every Apple rule, measurement, and API recommendation must
  trace to a loaded reference. Distinguish Apple guidance from your own design
  choices. If unsure, say so and name the source.
- **Terse and direct.** Keep ordinary guidance focused on the requested rule.

---

## File Locations

- Distilled reference files: `references/hig/[topic].md`
- Routing index: `routing-index.md`
- Opt-in enforcement procedure: `references/enforce.md`
- Guided iPhone Duo redesign: `references/duo.md`, `references/duo-checklist.md`;
  `/duo` slash command (install it with the skill): `commands/duo.md`
- Frontmatter schema: each distilled file contains `topic`, `tier`,
  `platforms`, `category`, `triggers`, and `related` fields.
