agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites,…
Generate a complete set of favicons from a source image and update HTML. Use when setting up favicons for a web project.
$ npx -y skills add brianlovin/agent-config --skill favicon --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/faviconContext preview
The summary Claude sees to decide when to auto-load this skill.
Generate a complete set of favicons from a source image and update HTML. Use when setting up favicons for a web project.
name: favicon description: Generate a complete set of favicons from a source image and update HTML. Use when setting up favicons for a web project. argument-hint: [path to source image]
Generate a complete set of favicons from the source image at `$1` and update the project's HTML with the appropriate link tags.
First, verify ImageMagick v7+ is installed by running:
which magick
If not found, stop and instruct the user to install it:
1. Verify the source image exists at the provided path: `$1` 2. Check the file extension is a supported format (PNG, JPG, JPEG, SVG, WEBP, GIF) 3. If the file doesn't exist or isn't a valid image format, report the error and stop
Note whether the source is an SVG file - if so, it will also be copied as `favicon.svg`.
Detect the project type and determine where static assets should be placed. Check in this order:
| Framework | Detection | Static Assets Directory | |-----------|-----------|------------------------| | **Rails** | `config/routes.rb` exists | `public/` | | **Next.js** | `next.config.*` exists | `public/` | | **Gatsby** | `gatsby-config.*` exists | `static/` | | **SvelteKit** | `svelte.config.*` exists | `static/` | | **Astro** | `astro.config.*` exists | `public/` | | **Hugo** | `hugo.toml` or `config.toml` with Hugo markers | `static/` | | **Jekyll** | `_config.yml` with Jekyll markers | Root directory (same as `index.html`) | | **Vite** | `vite.config.*` exists | `public/` | | **Create React App** | `package.json` has `react-scripts` dependency | `public/` | | **Vue CLI** | `vue.config.*` exists | `public/` | | **Angular** | `angular.json` exists | `src/assets/` | | **Eleventy** | `.eleventy.js` or `eleventy.config.*` exists | Check `_site` output or root | | **Static HTML** | `index.html` in root | Same directory as `index.html` |
**Important**: If existing favicon files are found (e.g., `favicon.ico`, `apple-touch-icon.png`), use their location as the target directory regardless of framework detection.
Report the detected project type and the static assets directory that will be used.
**When in doubt, ask**: If you are not 100% confident about where static assets should be placed (e.g., ambiguous project structure, multiple potential locations, unfamiliar framework), use `AskUserQuestionTool` to confirm the target directory before proceeding. It's better to ask than to put files in the wrong place.
Find the app name from these sources (in priority order):
1. **Existing `site.webmanifest`** - Check the detected static assets directory for an existing manifest and extract the `name` field 2. **`package.json`** - Extract the `name` field if it exists 3. **Rails `config/application.rb`** - Extract the module name (e.g., `module MyApp` → "MyApp") 4. **Directory name** - Use the current working directory name as fallback
Convert the name to title case if needed (e.g., "my-app" → "My App").
Check if the detected static assets directory exists. If not, create it.
Run these ImageMagick commands to generate all favicon files. Replace `[STATIC_DIR]` with the detected static assets directory from Step 2.
magick "$1" \ \( -clone 0 -resize 16x16 \) \ \( -clone 0 -resize 32x32 \) \ \( -clone 0 -resize 48x48 \) \ -delete 0 -alpha on -background none \ [STATIC_DIR]/favicon.ico
magick "$1" -resize 96x96 -background none -alpha on [STATIC_DIR]/favicon-96x96.png
magick "$1" -resize 180x180 -background none -alpha on [STATIC_DIR]/apple-touch-icon.png
magick "$1" -resize 192x192 -background none -alpha on [STATIC_DIR]/web-app-manifest-192x192.png
magick "$1" -resize 512x512 -background none -alpha on [STATIC_DIR]/web-app-manifest-512x512.png
If the source file has a `.svg` extension, copy it:
cp "$1" [STATIC_DIR]/favicon.svg
Create or update `[STATIC_DIR]/site.webmanifest` with this content (substitute the detected app name):
{
"name": "[APP_NAME]",
"short_name": "[APP_NAME]",
"icons": [
{
"src": "/web-app-manifest-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/web-app-manifest-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}If `site.webmanifest` already exists in the static directory, preserve the existing `theme_color`, `background_color`, and `display` values while updating the `name`, `short_name`, and `icons` array.
Based on the detected project type, update the appropriate file. Adjust the `href` paths based on where the static assets directory is relative to the web root:
Edit `app/views/layouts/application.html.erb`. Find the `<head>` section and add/replace favicon-related tags with:
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="shortcut icon" href="/favicon.ico" /> <link rel="apple-touch-icon" sizes="1
My agent configuration for Claude Code and Codex.
Repo: brianlovin/claude-config
Browser automation CLI for AI agents. Use when the user needs to interact with websites,…
Use Bun instead of Node.js, npm, pnpm, or vite. Provides command mappings, Bun-specific APIs,…
Guide a user end-to-end through setting up Chrome Web Store API release automation in any…
Remove AI-generated code slop from the current branch. Use after writing code to clean up…
Helps users discover and install agent skills when they ask questions like "how do I do X",…
Use Sentry MCP to discover, triage, and fix production issues with root-cause analysis. Use…