Icon Handler
Use this skill when a user adds a desired icon image at the project root and wants it applied consistently across website/app icon surfaces. It works like $hygiene: audit first, show findings and a correction plan, then modify files only after the user explicitly approves fix.
Process
1. Determine Mode and Asset
Parse $ARGUMENTS:
- Mode:
audit by default; fix applies approved corrections.
- Asset: optional filename or path. If omitted, search only the project root for likely icon assets.
Candidate asset names, in priority order:
- User-provided path.
- Root files matching
*-icon.png, *icon.png, *logo.png, favicon.png, or app-icon.png.
- Root SVG equivalents only when the app toolchain can rasterize them safely.
If multiple candidates exist, stop and ask which one to use.
2. Identify App Framework
Audit only what is relevant to the repository:
- Next App Router:
src/app/favicon.ico, src/app/icon.png, src/app/apple-icon.png, public/manifest.webmanifest, public/apple-touch-icon.png, and metadata.icons in src/app/layout.tsx.
- Next Pages Router:
public/favicon.ico, public/icon.png, public/app-icon.png, public/apple-touch-icon.png, _document or page/head icon links, and any manifest.
- Vite/React/static:
public/favicon.ico, public/icon.png, public/app-icon.png, public/apple-touch-icon.png, index.html, and any manifest.
- Other frameworks: report the detected framework and only apply conventional public-root assets unless the framework has clear local icon conventions.
Do not assume icon.ico is a standard favicon name. The conventional browser-probed file is favicon.ico.
3. Audit Icon Surfaces
Inspect without modifying:
- Source asset format and dimensions using available tools (
file, sips, identify, or framework tooling).
- Existing favicon/app icon files and whether they still contain stale assets.
- Metadata or HTML links for:
/favicon.ico
/icon.png
/app-icon.png
/apple-touch-icon.png
- Next App Router
/apple-icon.png
manifest.webmanifest
- Whether generated build output or static HTML emits
rel="icon", rel="shortcut icon", and rel="apple-touch-icon" links.
4. Produce Audit Report
Report:
- Detected framework and project root.
- Chosen source asset and dimensions.
- Existing icon surfaces found.
- Missing, stale, or non-standard surfaces.
- Proposed file writes, conversions, and metadata edits.
- Verification commands to run after changes.
Stop after the audit unless the user invoked fix or explicitly approves the proposed writes.
5. Apply Fixes After Approval
Only after approval:
- Preserve the source asset at its original path unless the user asks to move it.
- Copy the source asset to PNG surfaces that should remain full-size or app-install size.
- Generate
favicon.ico from a smaller source when conversion tools are available. Prefer:
magick/ImageMagick when installed.
- macOS
sips as a fallback: create a 256px PNG first, then convert that PNG to ICO.
- If no converter exists, stop and report the exact missing command rather than leaving a stale ICO.
- For Next App Router, prefer:
src/app/favicon.ico
src/app/icon.png
src/app/apple-icon.png
public/apple-touch-icon.png
public/icon.png
public/app-icon.png
- Add or update manifest icons when a manifest exists or when app-install behavior is expected.
- Update Next metadata or static HTML links so the generated site references the conventional paths.
6. Verify
Run the smallest relevant checks:
- File format checks for generated assets.
- Framework type/lint checks when metadata or source code changed.
- Production build or static render when available.
- Generated HTML/build-output search for
favicon.ico, apple-touch-icon, icon.png, and manifest.webmanifest.
For Next App Router, verify .next/server/app/favicon.ico.body, .next/server/app/icon.png.body, and .next/server/app/apple-icon.png.body when a build was run.
7. Document and Ship
If the project has task docs, add a concise review note with:
- Source icon path.
- Files changed.
- Verification results.
- Any cache caveat: browsers and iOS may require hard refresh, cache clear, reinstalling the home-screen icon, or waiting for deployment/CDN cache expiry.
Commit and push if the user asked to ship or the active workflow requires it.
Output
In audit mode:
## Icon Audit
Framework: Next App Router
Source asset: calc-mascot-icon.png (1024x1024 PNG)
Findings:
- Missing /apple-touch-icon.png
- Stale src/app/favicon.ico
Proposed fix:
- Generate src/app/favicon.ico from the source icon
- Copy source to src/app/icon.png, src/app/apple-icon.png, public/icon.png, public/app-icon.png, public/apple-touch-icon.png
- Update metadata.icons and manifest.webmanifest
Approval needed: reply "fix" to apply these changes.
In fix mode, include the same report plus changed files, validation, and next command.
Constraints
- Read-only by default.
- Do not overwrite existing branded icon assets without showing the diff/format evidence and getting approval.
- Do not invent framework conventions; verify local framework and file layout first.
- Do not use
icon.ico as the default favicon path.
- Do not commit generated binary assets until format checks pass.
- Do not touch unrelated visual branding, OG images, logos, or marketing copy unless the user explicitly asks.
- Prefer project-local tooling. Do not install image conversion dependencies without explicit approval.
Alignment Page
Follow the shared alignment-page convention via the packaged convention resolver; output path is alignment/icon-handler-{topic}.html.
Default Shipping Contract
- Next work: if audit finds issues and approval is missing, the next work is "approve
$icon-handler fix <asset>".
- Recommended next command:
$icon-handler fix <asset>
1---2name: icon-handler3description: Audit and apply project-root icon assets to favicon, app icon, Apple touch icon, and manifest surfaces4---5
6# Icon Handler
7
8Use this skill when a user adds a desired icon image at the project root and wants it applied consistently across website/app icon surfaces. It works like `$hygiene`: audit first, show findings and a correction plan, then modify files only after the user explicitly approves `fix`.
9
10## Process
11
12### 1. Determine Mode and Asset
13
14Parse `$ARGUMENTS`:
15
16- **Mode:** `audit` by default; `fix` applies approved corrections.
17- **Asset:** optional filename or path. If omitted, search only the project root for likely icon assets.
18
19Candidate asset names, in priority order:
20
211. User-provided path.
222. Root files matching `*-icon.png`, `*icon.png`, `*logo.png`, `favicon.png`, or `app-icon.png`.
233. Root SVG equivalents only when the app toolchain can rasterize them safely.
24
25If multiple candidates exist, stop and ask which one to use.
26
27### 2. Identify App Framework
28
29Audit only what is relevant to the repository:
30
31- **Next App Router:** `src/app/favicon.ico`, `src/app/icon.png`, `src/app/apple-icon.png`, `public/manifest.webmanifest`, `public/apple-touch-icon.png`, and `metadata.icons` in `src/app/layout.tsx`.
32- **Next Pages Router:** `public/favicon.ico`, `public/icon.png`, `public/app-icon.png`, `public/apple-touch-icon.png`, `_document` or page/head icon links, and any manifest.
33- **Vite/React/static:** `public/favicon.ico`, `public/icon.png`, `public/app-icon.png`, `public/apple-touch-icon.png`, `index.html`, and any manifest.
34- **Other frameworks:** report the detected framework and only apply conventional public-root assets unless the framework has clear local icon conventions.
35
36Do not assume `icon.ico` is a standard favicon name. The conventional browser-probed file is `favicon.ico`.
37
38### 3. Audit Icon Surfaces
39
40Inspect without modifying:
41
42- Source asset format and dimensions using available tools (`file`, `sips`, `identify`, or framework tooling).
43- Existing favicon/app icon files and whether they still contain stale assets.
44- Metadata or HTML links for:
45 - `/favicon.ico`
46 - `/icon.png`
47 - `/app-icon.png`
48 - `/apple-touch-icon.png`
49 - Next App Router `/apple-icon.png`
50 - `manifest.webmanifest`
51- Whether generated build output or static HTML emits `rel="icon"`, `rel="shortcut icon"`, and `rel="apple-touch-icon"` links.
52
53### 4. Produce Audit Report
54
55Report:
56
57- Detected framework and project root.
58- Chosen source asset and dimensions.
59- Existing icon surfaces found.
60- Missing, stale, or non-standard surfaces.
61- Proposed file writes, conversions, and metadata edits.
62- Verification commands to run after changes.
63
64Stop after the audit unless the user invoked `fix` or explicitly approves the proposed writes.
65
66### 5. Apply Fixes After Approval
67
68Only after approval:
69
70- Preserve the source asset at its original path unless the user asks to move it.
71- Copy the source asset to PNG surfaces that should remain full-size or app-install size.
72- Generate `favicon.ico` from a smaller source when conversion tools are available. Prefer:
73 - `magick`/ImageMagick when installed.
74 - macOS `sips` as a fallback: create a 256px PNG first, then convert that PNG to ICO.
75 - If no converter exists, stop and report the exact missing command rather than leaving a stale ICO.
76- For Next App Router, prefer:
77 - `src/app/favicon.ico`
78 - `src/app/icon.png`
79 - `src/app/apple-icon.png`
80 - `public/apple-touch-icon.png`
81 - `public/icon.png`
82 - `public/app-icon.png`
83- Add or update manifest icons when a manifest exists or when app-install behavior is expected.
84- Update Next metadata or static HTML links so the generated site references the conventional paths.
85
86### 6. Verify
87
88Run the smallest relevant checks:
89
90- File format checks for generated assets.
91- Framework type/lint checks when metadata or source code changed.
92- Production build or static render when available.
93- Generated HTML/build-output search for `favicon.ico`, `apple-touch-icon`, `icon.png`, and `manifest.webmanifest`.
94
95For Next App Router, verify `.next/server/app/favicon.ico.body`, `.next/server/app/icon.png.body`, and `.next/server/app/apple-icon.png.body` when a build was run.
96
97### 7. Document and Ship
98
99If the project has task docs, add a concise review note with:
100
101- Source icon path.
102- Files changed.
103- Verification results.
104- Any cache caveat: browsers and iOS may require hard refresh, cache clear, reinstalling the home-screen icon, or waiting for deployment/CDN cache expiry.
105
106Commit and push if the user asked to ship or the active workflow requires it.
107
108## Output
109
110In audit mode:
111
112```text
113## Icon Audit
114
115Framework: Next App Router
116Source asset: calc-mascot-icon.png (1024x1024 PNG)
117
118Findings:
119- Missing /apple-touch-icon.png
120- Stale src/app/favicon.ico
121
122Proposed fix:
123- Generate src/app/favicon.ico from the source icon
124- Copy source to src/app/icon.png, src/app/apple-icon.png, public/icon.png, public/app-icon.png, public/apple-touch-icon.png
125- Update metadata.icons and manifest.webmanifest
126
127Approval needed: reply "fix" to apply these changes.
128```
129
130In fix mode, include the same report plus changed files, validation, and next command.
131
132## Constraints
133
134- Read-only by default.
135- Do not overwrite existing branded icon assets without showing the diff/format evidence and getting approval.
136- Do not invent framework conventions; verify local framework and file layout first.
137- Do not use `icon.ico` as the default favicon path.
138- Do not commit generated binary assets until format checks pass.
139- Do not touch unrelated visual branding, OG images, logos, or marketing copy unless the user explicitly asks.
140- Prefer project-local tooling. Do not install image conversion dependencies without explicit approval.
141
142## Alignment Page
143
144Follow the shared alignment-page convention via the packaged convention resolver; output path is `alignment/icon-handler-{topic}.html`.
145
146## Default Shipping Contract
147
148- **Next work:** if audit finds issues and approval is missing, the next work is "approve `$icon-handler fix <asset>`".
149- **Recommended next command:** `$icon-handler fix <asset>`