agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking…
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/agent-config
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking…
Use Bun instead of Node.js, npm, pnpm, or vite. Provides command mappings, Bun-specific APIs, and development patterns.
Guide a user end-to-end through setting up Chrome Web Store API release automation in any repository. Use when asked to walk someone through OAuth/CWS…
Remove AI-generated code slop from the current branch. Use after writing code to clean up unnecessary comments, defensive checks, and inconsistent style.
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express…
Use Sentry MCP to discover, triage, and fix production issues with root-cause analysis. Use when asked to fix Sentry issues, triage production errors,…