This skill should be used when the user asks to "add a new style", "create a style", "add an art style", "new aesthetic", "custom style", "make a style for", or needs to add a new art style to the gemskills style library. Guides the complete workflow from defining the style to generating and optimizing the reference tile.
From gemskillsnpx claudepluginhub b-open-io/claude-plugins --plugin gemskillsThis skill uses the workspace's default tool permissions.
references/tile-prompt-guide.mdDesigns and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Add new art styles to the gemskills style library with properly crafted prompts, reference tiles, and registry entries.
All file edits and commands operate relative to ${CLAUDE_PLUGIN_ROOT} (the plugin root).
Sharp may fail in the plugin cache. If bun run optimize fails, the tile generation script auto-optimizes. If both fail, use sips as a fallback:
sips -s format png -s formatOptions best <tile-path> --out <tile-path>
Follow these steps in order. Do not skip steps.
Gather from the user:
miami-aesthetic)miam)traditional, digital, illustration, photography, design, retro, technique, decorative, creative, culturalIf the user provides only a name or concept, derive the ID and short name automatically. Choose the category that best fits.
The promptHints field is a comma-separated string of descriptors prepended to user prompts when the style is used. Focus on:
Keep to 8-12 descriptors. These guide the model when generating user images, not the tile itself.
Apply these principles — do NOT read external reference files, the rules are right here:
Core principle: Texture vs Object. The tile must transfer materiality/medium/technique, NOT a scene. A tile showing "a cyberpunk city" will bleed city elements into every user prompt. A tile showing "neon refractions on chrome with film grain" transfers only the visual physics.
6-part prompt structure:
Full-bleed [style] filling the entire canvasextreme close-up macro texture, seamless pattern, abstract compositioncracked canvas, halftone dots, VHS static, watercolor bleedchiaroscuro, pastel gradients, neon rim light, sepia tonesEdge to edge, no frame, no border, no [style-specific items]Category tips:
dense montage or extreme macro of brushworkAnti-container items to add based on style:
no canvas, no easel, no gallery, no museum, no wallno hoop, no frame, no desk, no tableno letterbox, no black bars, no monitor, no screenno cloth edge, no fabric edge, no bed, no furnitureAdd the new style entry to the styles array in:
${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/assets/styles.json
Entry format:
{
"id": "style-id",
"shortName": "shrt",
"name": "Style Name",
"category": "category",
"promptHints": "descriptor1, descriptor2, descriptor3",
"tilePrompt": "Full-bleed ... Edge to edge, no frame, no border."
}
Verify the ID and short name are unique across all existing styles before adding.
Generate the reference tile using the tile generation script:
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/scripts/generate_tiles.ts --style <style-id>
This generates a 512x512 PNG tile at assets/tiles/<style-id>.png and auto-optimizes it.
If auto-optimization fails, try manually from the plugin root:
bun run ${CLAUDE_PLUGIN_ROOT}/optimize -- --file=skills/browsing-styles/assets/tiles/<style-id>.png
If sharp is unavailable, use sips:
sips -s format png -s formatOptions best ${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/assets/tiles/<style-id>.png --out ${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/assets/tiles/<style-id>.png
If the style benefits from a reference image (e.g. a regional aesthetic), use the generate-image script with --input:
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts \
"<tilePrompt text>" \
--input /path/to/reference.jpg \
--aspect 1:1 --size 1K \
--output ${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/assets/tiles/<style-id>.png
Do not read the generated tile back into context. Ask the user to visually inspect it. Common issues:
If it fails, update the tilePrompt and regenerate.
After adding styles, update the style count in these files:
${CLAUDE_PLUGIN_ROOT}/README.md (style count mentions)${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json (description text and version bump)${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/SKILL.md (count)${CLAUDE_PLUGIN_ROOT}/skills/team-group-photo/SKILL.md (count)Regenerate STYLES.md from the plugin root:
bun -e "
const root = process.env.CLAUDE_PLUGIN_ROOT;
const data = JSON.parse(require('fs').readFileSync(root + '/skills/browsing-styles/assets/styles.json', 'utf8'));
const styles = data.styles;
const cats = data.categories;
const grouped = {};
for (const s of styles) { if (!grouped[s.category]) grouped[s.category] = []; grouped[s.category].push(s); }
let md = '# Art Styles Reference\n\n' + styles.length + ' styles across ' + Object.keys(grouped).length + ' categories. Use \\\`--style <id>\\\` or \\\`--style <short>\\\` with any image generation skill.\n\n## Categories\n\n| Category | Count | Description |\n|----------|-------|-------------|\n';
for (const [cat, desc] of Object.entries(cats)) { md += '| ' + cat + ' | ' + (grouped[cat]?.length || 0) + ' | ' + desc + ' |\n'; }
md += '\n';
for (const [cat, desc] of Object.entries(cats)) { const items = grouped[cat] || []; if (!items.length) continue; md += '## ' + cat.charAt(0).toUpperCase() + cat.slice(1) + '\n\n| Tile | ID | Short | Name |\n|------|-----|-------|------|\n'; for (const s of items) { md += '| <img src=\"skills/browsing-styles/assets/tiles/' + s.id + '.png\" width=\"80\" /> | ' + s.id + ' | ' + s.shortName + ' | ' + s.name + ' |\n'; } md += '\n'; }
require('fs').writeFileSync(root + '/STYLES.md', md);
console.log('STYLES.md written with ' + styles.length + ' styles');
"
Bump the patch version in ${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json and commit all changes.
Do not read generated tile images back into context. The scripts output file paths only. Ask the user to visually inspect tiles and provide feedback for iteration.