Agent Skills › sediman-agent/OpenSkynet

sediman-agent/OpenSkynet

GitHub

用于生成基于p5.js的算法艺术。通过创建算法哲学宣言并编写代码实现交互式生成艺术,强调 seeded randomness、粒子系统和参数探索,避免抄袭,确保作品具有原创性和计算美学。

337 skills 435

Install All Skills

npx skills add sediman-agent/OpenSkynet --all -g -y
More Options

List skills in collection

npx skills add sediman-agent/OpenSkynet --list

Skills in Collection (337)

用于生成基于p5.js的算法艺术。通过创建算法哲学宣言并编写代码实现交互式生成艺术,强调 seeded randomness、粒子系统和参数探索,避免抄袭,确保作品具有原创性和计算美学。
用户请求使用代码创作艺术 需要生成算法艺术或生成式艺术 涉及流场或粒子系统的需求
skills/anthropics_skills/algorithmic-art/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill algorithmic-art -g -y
SKILL.md
Frontmatter
{
    "name": "algorithmic-art",
    "license": "Complete terms in LICENSE.txt",
    "description": "Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations."
}

Algorithmic philosophies are computational aesthetic movements that are then expressed through code. Output .md files (philosophy), .html files (interactive viewer), and .js files (generative algorithms).

This happens in two steps:

  1. Algorithmic Philosophy Creation (.md file)
  2. Express by creating p5.js generative art (.html + .js files)

First, undertake this task:

ALGORITHMIC PHILOSOPHY CREATION

To begin, create an ALGORITHMIC PHILOSOPHY (not static images or templates) that will be interpreted through:

  • Computational processes, emergent behavior, mathematical beauty
  • Seeded randomness, noise fields, organic systems
  • Particles, flows, fields, forces
  • Parametric variation and controlled chaos

THE CRITICAL UNDERSTANDING

  • What is received: Some subtle input or instructions by the user to take into account, but use as a foundation; it should not constrain creative freedom.
  • What is created: An algorithmic philosophy/generative aesthetic movement.
  • What happens next: The same version receives the philosophy and EXPRESSES IT IN CODE - creating p5.js sketches that are 90% algorithmic generation, 10% essential parameters.

Consider this approach:

  • Write a manifesto for a generative art movement
  • The next phase involves writing the algorithm that brings it to life

The philosophy must emphasize: Algorithmic expression. Emergent behavior. Computational beauty. Seeded variation.

HOW TO GENERATE AN ALGORITHMIC PHILOSOPHY

Name the movement (1-2 words): "Organic Turbulence" / "Quantum Harmonics" / "Emergent Stillness"

Articulate the philosophy (4-6 paragraphs - concise but complete):

To capture the ALGORITHMIC essence, express how this philosophy manifests through:

  • Computational processes and mathematical relationships?
  • Noise functions and randomness patterns?
  • Particle behaviors and field dynamics?
  • Temporal evolution and system states?
  • Parametric variation and emergent complexity?

CRITICAL GUIDELINES:

  • Avoid redundancy: Each algorithmic aspect should be mentioned once. Avoid repeating concepts about noise theory, particle dynamics, or mathematical principles unless adding new depth.
  • Emphasize craftsmanship REPEATEDLY: The philosophy MUST stress multiple times that the final algorithm should appear as though it took countless hours to develop, was refined with care, and comes from someone at the absolute top of their field. This framing is essential - repeat phrases like "meticulously crafted algorithm," "the product of deep computational expertise," "painstaking optimization," "master-level implementation."
  • Leave creative space: Be specific about the algorithmic direction, but concise enough that the next Claude has room to make interpretive implementation choices at an extremely high level of craftsmanship.

The philosophy must guide the next version to express ideas ALGORITHMICALLY, not through static images. Beauty lives in the process, not the final frame.

PHILOSOPHY EXAMPLES

"Organic Turbulence" Philosophy: Chaos constrained by natural law, order emerging from disorder. Algorithmic expression: Flow fields driven by layered Perlin noise. Thousands of particles following vector forces, their trails accumulating into organic density maps. Multiple noise octaves create turbulent regions and calm zones. Color emerges from velocity and density - fast particles burn bright, slow ones fade to shadow. The algorithm runs until equilibrium - a meticulously tuned balance where every parameter was refined through countless iterations by a master of computational aesthetics.

"Quantum Harmonics" Philosophy: Discrete entities exhibiting wave-like interference patterns. Algorithmic expression: Particles initialized on a grid, each carrying a phase value that evolves through sine waves. When particles are near, their phases interfere - constructive interference creates bright nodes, destructive creates voids. Simple harmonic motion generates complex emergent mandalas. The result of painstaking frequency calibration where every ratio was carefully chosen to produce resonant beauty.

"Recursive Whispers" Philosophy: Self-similarity across scales, infinite depth in finite space. Algorithmic expression: Branching structures that subdivide recursively. Each branch slightly randomized but constrained by golden ratios. L-systems or recursive subdivision generate tree-like forms that feel both mathematical and organic. Subtle noise perturbations break perfect symmetry. Line weights diminish with each recursion level. Every branching angle the product of deep mathematical exploration.

"Field Dynamics" Philosophy: Invisible forces made visible through their effects on matter. Algorithmic expression: Vector fields constructed from mathematical functions or noise. Particles born at edges, flowing along field lines, dying when they reach equilibrium or boundaries. Multiple fields can attract, repel, or rotate particles. The visualization shows only the traces - ghost-like evidence of invisible forces. A computational dance meticulously choreographed through force balance.

"Stochastic Crystallization" Philosophy: Random processes crystallizing into ordered structures. Algorithmic expression: Randomized circle packing or Voronoi tessellation. Start with random points, let them evolve through relaxation algorithms. Cells push apart until equilibrium. Color based on cell size, neighbor count, or distance from center. The organic tiling that emerges feels both random and inevitable. Every seed produces unique crystalline beauty - the mark of a master-level generative algorithm.

These are condensed examples. The actual algorithmic philosophy should be 4-6 substantial paragraphs.

ESSENTIAL PRINCIPLES

  • ALGORITHMIC PHILOSOPHY: Creating a computational worldview to be expressed through code
  • PROCESS OVER PRODUCT: Always emphasize that beauty emerges from the algorithm's execution - each run is unique
  • PARAMETRIC EXPRESSION: Ideas communicate through mathematical relationships, forces, behaviors - not static composition
  • ARTISTIC FREEDOM: The next Claude interprets the philosophy algorithmically - provide creative implementation room
  • PURE GENERATIVE ART: This is about making LIVING ALGORITHMS, not static images with randomness
  • EXPERT CRAFTSMANSHIP: Repeatedly emphasize the final algorithm must feel meticulously crafted, refined through countless iterations, the product of deep expertise by someone at the absolute top of their field in computational aesthetics

The algorithmic philosophy should be 4-6 paragraphs long. Fill it with poetic computational philosophy that brings together the intended vision. Avoid repeating the same points. Output this algorithmic philosophy as a .md file.


DEDUCING THE CONCEPTUAL SEED

CRITICAL STEP: Before implementing the algorithm, identify the subtle conceptual thread from the original request.

THE ESSENTIAL PRINCIPLE: The concept is a subtle, niche reference embedded within the algorithm itself - not always literal, always sophisticated. Someone familiar with the subject should feel it intuitively, while others simply experience a masterful generative composition. The algorithmic philosophy provides the computational language. The deduced concept provides the soul - the quiet conceptual DNA woven invisibly into parameters, behaviors, and emergence patterns.

This is VERY IMPORTANT: The reference must be so refined that it enhances the work's depth without announcing itself. Think like a jazz musician quoting another song through algorithmic harmony - only those who know will catch it, but everyone appreciates the generative beauty.


P5.JS IMPLEMENTATION

With the philosophy AND conceptual framework established, express it through code. Pause to gather thoughts before proceeding. Use only the algorithmic philosophy created and the instructions below.

⚠️ STEP 0: READ THE TEMPLATE FIRST ⚠️

CRITICAL: BEFORE writing any HTML:

  1. Read templates/viewer.html using the Read tool
  2. Study the exact structure, styling, and Anthropic branding
  3. Use that file as the LITERAL STARTING POINT - not just inspiration
  4. Keep all FIXED sections exactly as shown (header, sidebar structure, Anthropic colors/fonts, seed controls, action buttons)
  5. Replace only the VARIABLE sections marked in the file's comments (algorithm, parameters, UI controls for parameters)

Avoid:

  • ❌ Creating HTML from scratch
  • ❌ Inventing custom styling or color schemes
  • ❌ Using system fonts or dark themes
  • ❌ Changing the sidebar structure

Follow these practices:

  • ✅ Copy the template's exact HTML structure
  • ✅ Keep Anthropic branding (Poppins/Lora fonts, light colors, gradient backdrop)
  • ✅ Maintain the sidebar layout (Seed → Parameters → Colors? → Actions)
  • ✅ Replace only the p5.js algorithm and parameter controls

The template is the foundation. Build on it, don't rebuild it.


To create gallery-quality computational art that lives and breathes, use the algorithmic philosophy as the foundation.

TECHNICAL REQUIREMENTS

Seeded Randomness (Art Blocks Pattern):

// ALWAYS use a seed for reproducibility
let seed = 12345; // or hash from user input
randomSeed(seed);
noiseSeed(seed);

Parameter Structure - FOLLOW THE PHILOSOPHY:

To establish parameters that emerge naturally from the algorithmic philosophy, consider: "What qualities of this system can be adjusted?"

let params = {
  seed: 12345,  // Always include seed for reproducibility
  // colors
  // Add parameters that control YOUR algorithm:
  // - Quantities (how many?)
  // - Scales (how big? how fast?)
  // - Probabilities (how likely?)
  // - Ratios (what proportions?)
  // - Angles (what direction?)
  // - Thresholds (when does behavior change?)
};

To design effective parameters, focus on the properties the system needs to be tunable rather than thinking in terms of "pattern types".

Core Algorithm - EXPRESS THE PHILOSOPHY:

CRITICAL: The algorithmic philosophy should dictate what to build.

To express the philosophy through code, avoid thinking "which pattern should I use?" and instead think "how to express this philosophy through code?"

If the philosophy is about organic emergence, consider using:

  • Elements that accumulate or grow over time
  • Random processes constrained by natural rules
  • Feedback loops and interactions

If the philosophy is about mathematical beauty, consider using:

  • Geometric relationships and ratios
  • Trigonometric functions and harmonics
  • Precise calculations creating unexpected patterns

If the philosophy is about controlled chaos, consider using:

  • Random variation within strict boundaries
  • Bifurcation and phase transitions
  • Order emerging from disorder

The algorithm flows from the philosophy, not from a menu of options.

To guide the implementation, let the conceptual essence inform creative and original choices. Build something that expresses the vision for this particular request.

Canvas Setup: Standard p5.js structure:

function setup() {
  createCanvas(1200, 1200);
  // Initialize your system
}

function draw() {
  // Your generative algorithm
  // Can be static (noLoop) or animated
}

CRAFTSMANSHIP REQUIREMENTS

CRITICAL: To achieve mastery, create algorithms that feel like they emerged through countless iterations by a master generative artist. Tune every parameter carefully. Ensure every pattern emerges with purpose. This is NOT random noise - this is CONTROLLED CHAOS refined through deep expertise.

  • Balance: Complexity without visual noise, order without rigidity
  • Color Harmony: Thoughtful palettes, not random RGB values
  • Composition: Even in randomness, maintain visual hierarchy and flow
  • Performance: Smooth execution, optimized for real-time if animated
  • Reproducibility: Same seed ALWAYS produces identical output

OUTPUT FORMAT

Output:

  1. Algorithmic Philosophy - As markdown or text explaining the generative aesthetic
  2. Single HTML Artifact - Self-contained interactive generative art built from templates/viewer.html (see STEP 0 and next section)

The HTML artifact contains everything: p5.js (from CDN), the algorithm, parameter controls, and UI - all in one file that works immediately in claude.ai artifacts or any browser. Start from the template file, not from scratch.


INTERACTIVE ARTIFACT CREATION

REMINDER: templates/viewer.html should have already been read (see STEP 0). Use that file as the starting point.

To allow exploration of the generative art, create a single, self-contained HTML artifact. Ensure this artifact works immediately in claude.ai or any browser - no setup required. Embed everything inline.

CRITICAL: WHAT'S FIXED VS VARIABLE

The templates/viewer.html file is the foundation. It contains the exact structure and styling needed.

FIXED (always include exactly as shown):

  • Layout structure (header, sidebar, main canvas area)
  • Anthropic branding (UI colors, fonts, gradients)
  • Seed section in sidebar:
    • Seed display
    • Previous/Next buttons
    • Random button
    • Jump to seed input + Go button
  • Actions section in sidebar:
    • Regenerate button
    • Reset button

VARIABLE (customize for each artwork):

  • The entire p5.js algorithm (setup/draw/classes)
  • The parameters object (define what the art needs)
  • The Parameters section in sidebar:
    • Number of parameter controls
    • Parameter names
    • Min/max/step values for sliders
    • Control types (sliders, inputs, etc.)
  • Colors section (optional):
    • Some art needs color pickers
    • Some art might use fixed colors
    • Some art might be monochrome (no color controls needed)
    • Decide based on the art's needs

Every artwork should have unique parameters and algorithm! The fixed parts provide consistent UX - everything else expresses the unique vision.

REQUIRED FEATURES

1. Parameter Controls

  • Sliders for numeric parameters (particle count, noise scale, speed, etc.)
  • Color pickers for palette colors
  • Real-time updates when parameters change
  • Reset button to restore defaults

2. Seed Navigation

  • Display current seed number
  • "Previous" and "Next" buttons to cycle through seeds
  • "Random" button for random seed
  • Input field to jump to specific seed
  • Generate 100 variations when requested (seeds 1-100)

3. Single Artifact Structure

<!DOCTYPE html>
<html>
<head>
  <!-- p5.js from CDN - always available -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/p5.min.js"></script>
  <style>
    /* All styling inline - clean, minimal */
    /* Canvas on top, controls below */
  </style>
</head>
<body>
  <div id="canvas-container"></div>
  <div id="controls">
    <!-- All parameter controls -->
  </div>
  <script>
    // ALL p5.js code inline here
    // Parameter objects, classes, functions
    // setup() and draw()
    // UI handlers
    // Everything self-contained
  </script>
</body>
</html>

CRITICAL: This is a single artifact. No external files, no imports (except p5.js CDN). Everything inline.

4. Implementation Details - BUILD THE SIDEBAR

The sidebar structure:

1. Seed (FIXED) - Always include exactly as shown:

  • Seed display
  • Prev/Next/Random/Jump buttons

2. Parameters (VARIABLE) - Create controls for the art:

<div class="control-group">
    <label>Parameter Name</label>
    <input type="range" id="param" min="..." max="..." step="..." value="..." oninput="updateParam('param', this.value)">
    <span class="value-display" id="param-value">...</span>
</div>

Add as many control-group divs as there are parameters.

3. Colors (OPTIONAL/VARIABLE) - Include if the art needs adjustable colors:

  • Add color pickers if users should control palette
  • Skip this section if the art uses fixed colors
  • Skip if the art is monochrome

4. Actions (FIXED) - Always include exactly as shown:

  • Regenerate button
  • Reset button
  • Download PNG button

Requirements:

  • Seed controls must work (prev/next/random/jump/display)
  • All parameters must have UI controls
  • Regenerate, Reset, Download buttons must work
  • Keep Anthropic branding (UI styling, not art colors)

USING THE ARTIFACT

The HTML artifact works immediately:

  1. In claude.ai: Displayed as an interactive artifact - runs instantly
  2. As a file: Save and open in any browser - no server needed
  3. Sharing: Send the HTML file - it's completely self-contained

VARIATIONS & EXPLORATION

The artifact includes seed navigation by default (prev/next/random buttons), allowing users to explore variations without creating multiple files. If the user wants specific variations highlighted:

  • Include seed presets (buttons for "Variation 1: Seed 42", "Variation 2: Seed 127", etc.)
  • Add a "Gallery Mode" that shows thumbnails of multiple seeds side-by-side
  • All within the same single artifact

This is like creating a series of prints from the same plate - the algorithm is consistent, but each seed reveals different facets of its potential. The interactive nature means users discover their own favorites by exploring the seed space.


THE CREATIVE PROCESS

User requestAlgorithmic philosophyImplementation

Each request is unique. The process involves:

  1. Interpret the user's intent - What aesthetic is being sought?
  2. Create an algorithmic philosophy (4-6 paragraphs) describing the computational approach
  3. Implement it in code - Build the algorithm that expresses this philosophy
  4. Design appropriate parameters - What should be tunable?
  5. Build matching UI controls - Sliders/inputs for those parameters

The constants:

  • Anthropic branding (colors, fonts, layout)
  • Seed navigation (always present)
  • Self-contained HTML artifact

Everything else is variable:

  • The algorithm itself
  • The parameters
  • The UI controls
  • The visual outcome

To achieve the best results, trust creativity and let the philosophy guide the implementation.


RESOURCES

This skill includes helpful templates and documentation:

  • templates/viewer.html: REQUIRED STARTING POINT for all HTML artifacts.

    • This is the foundation - contains the exact structure and Anthropic branding
    • Keep unchanged: Layout structure, sidebar organization, Anthropic colors/fonts, seed controls, action buttons
    • Replace: The p5.js algorithm, parameter definitions, and UI controls in Parameters section
    • The extensive comments in the file mark exactly what to keep vs replace
  • templates/generator_template.js: Reference for p5.js best practices and code structure principles.

    • Shows how to organize parameters, use seeded randomness, structure classes
    • NOT a pattern menu - use these principles to build unique algorithms
    • Embed algorithms inline in the HTML artifact (don't create separate .js files)

Critical reminder:

  • The template is the STARTING POINT, not inspiration
  • The algorithm is where to create something unique
  • Don't copy the flow field example - build what the philosophy demands
  • But DO keep the exact UI structure and Anthropic branding from the template
将 Anthropic 官方品牌色彩与字体应用于内容,确保视觉风格符合公司规范。适用于需要统一品牌形象、应用特定配色或排版的设计场景。
需要应用 Anthropic 品牌色彩 需要设置官方指定字体样式 生成符合公司设计规范的内容
skills/anthropics_skills/brand-guidelines/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill brand-guidelines -g -y
SKILL.md
Frontmatter
{
    "name": "brand-guidelines",
    "license": "Complete terms in LICENSE.txt",
    "description": "Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply."
}

Anthropic Brand Styling

Overview

To access Anthropic's official brand identity and style resources, use this skill.

Keywords: branding, corporate identity, visual identity, post-processing, styling, brand colors, typography, Anthropic brand, visual formatting, visual design

Brand Guidelines

Colors

Main Colors:

  • Dark: #141413 - Primary text and dark backgrounds
  • Light: #faf9f5 - Light backgrounds and text on dark
  • Mid Gray: #b0aea5 - Secondary elements
  • Light Gray: #e8e6dc - Subtle backgrounds

Accent Colors:

  • Orange: #d97757 - Primary accent
  • Blue: #6a9bcc - Secondary accent
  • Green: #788c5d - Tertiary accent

Typography

  • Headings: Poppins (with Arial fallback)
  • Body Text: Lora (with Georgia fallback)
  • Note: Fonts should be pre-installed in your environment for best results

Features

Smart Font Application

  • Applies Poppins font to headings (24pt and larger)
  • Applies Lora font to body text
  • Automatically falls back to Arial/Georgia if custom fonts unavailable
  • Preserves readability across all systems

Text Styling

  • Headings (24pt+): Poppins font
  • Body text: Lora font
  • Smart color selection based on background
  • Preserves text hierarchy and formatting

Shape and Accent Colors

  • Non-text shapes use accent colors
  • Cycles through orange, blue, and green accents
  • Maintains visual interest while staying on-brand

Technical Details

Font Management

  • Uses system-installed Poppins and Lora fonts when available
  • Provides automatic fallback to Arial (headings) and Georgia (body)
  • No font installation required - works with existing system fonts
  • For best results, pre-install Poppins and Lora fonts in your environment

Color Application

  • Uses RGB color values for precise brand matching
  • Applied via python-pptx's RGBColor class
  • Maintains color fidelity across different systems
用于根据用户指令创建原创视觉艺术设计的技能。通过先制定设计哲学(.md),再将其转化为高工艺水平的静态图像(.png/.pdf)。强调形式、色彩与空间表达,严格避免抄袭,确保作品体现大师级匠心与极简文字点缀。
用户要求制作海报 用户要求创作艺术作品 用户要求生成视觉设计 用户请求其他静态视觉内容
skills/anthropics_skills/canvas-design/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill canvas-design -g -y
SKILL.md
Frontmatter
{
    "name": "canvas-design",
    "license": "Complete terms in LICENSE.txt",
    "description": "Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations."
}

These are instructions for creating design philosophies - aesthetic movements that are then EXPRESSED VISUALLY. Output only .md files, .pdf files, and .png files.

Complete this in two steps:

  1. Design Philosophy Creation (.md file)
  2. Express by creating it on a canvas (.pdf file or .png file)

First, undertake this task:

DESIGN PHILOSOPHY CREATION

To begin, create a VISUAL PHILOSOPHY (not layouts or templates) that will be interpreted through:

  • Form, space, color, composition
  • Images, graphics, shapes, patterns
  • Minimal text as visual accent

THE CRITICAL UNDERSTANDING

  • What is received: Some subtle input or instructions by the user that should be taken into account, but used as a foundation; it should not constrain creative freedom.
  • What is created: A design philosophy/aesthetic movement.
  • What happens next: Then, the same version receives the philosophy and EXPRESSES IT VISUALLY - creating artifacts that are 90% visual design, 10% essential text.

Consider this approach:

  • Write a manifesto for an art movement
  • The next phase involves making the artwork

The philosophy must emphasize: Visual expression. Spatial communication. Artistic interpretation. Minimal words.

HOW TO GENERATE A VISUAL PHILOSOPHY

Name the movement (1-2 words): "Brutalist Joy" / "Chromatic Silence" / "Metabolist Dreams"

Articulate the philosophy (4-6 paragraphs - concise but complete):

To capture the VISUAL essence, express how the philosophy manifests through:

  • Space and form
  • Color and material
  • Scale and rhythm
  • Composition and balance
  • Visual hierarchy

CRITICAL GUIDELINES:

  • Avoid redundancy: Each design aspect should be mentioned once. Avoid repeating points about color theory, spatial relationships, or typographic principles unless adding new depth.
  • Emphasize craftsmanship REPEATEDLY: The philosophy MUST stress multiple times that the final work should appear as though it took countless hours to create, was labored over with care, and comes from someone at the absolute top of their field. This framing is essential - repeat phrases like "meticulously crafted," "the product of deep expertise," "painstaking attention," "master-level execution."
  • Leave creative space: Remain specific about the aesthetic direction, but concise enough that the next Claude has room to make interpretive choices also at a extremely high level of craftmanship.

The philosophy must guide the next version to express ideas VISUALLY, not through text. Information lives in design, not paragraphs.

PHILOSOPHY EXAMPLES

"Concrete Poetry" Philosophy: Communication through monumental form and bold geometry. Visual expression: Massive color blocks, sculptural typography (huge single words, tiny labels), Brutalist spatial divisions, Polish poster energy meets Le Corbusier. Ideas expressed through visual weight and spatial tension, not explanation. Text as rare, powerful gesture - never paragraphs, only essential words integrated into the visual architecture. Every element placed with the precision of a master craftsman.

"Chromatic Language" Philosophy: Color as the primary information system. Visual expression: Geometric precision where color zones create meaning. Typography minimal - small sans-serif labels letting chromatic fields communicate. Think Josef Albers' interaction meets data visualization. Information encoded spatially and chromatically. Words only to anchor what color already shows. The result of painstaking chromatic calibration.

"Analog Meditation" Philosophy: Quiet visual contemplation through texture and breathing room. Visual expression: Paper grain, ink bleeds, vast negative space. Photography and illustration dominate. Typography whispered (small, restrained, serving the visual). Japanese photobook aesthetic. Images breathe across pages. Text appears sparingly - short phrases, never explanatory blocks. Each composition balanced with the care of a meditation practice.

"Organic Systems" Philosophy: Natural clustering and modular growth patterns. Visual expression: Rounded forms, organic arrangements, color from nature through architecture. Information shown through visual diagrams, spatial relationships, iconography. Text only for key labels floating in space. The composition tells the story through expert spatial orchestration.

"Geometric Silence" Philosophy: Pure order and restraint. Visual expression: Grid-based precision, bold photography or stark graphics, dramatic negative space. Typography precise but minimal - small essential text, large quiet zones. Swiss formalism meets Brutalist material honesty. Structure communicates, not words. Every alignment the work of countless refinements.

These are condensed examples. The actual design philosophy should be 4-6 substantial paragraphs.

ESSENTIAL PRINCIPLES

  • VISUAL PHILOSOPHY: Create an aesthetic worldview to be expressed through design
  • MINIMAL TEXT: Always emphasize that text is sparse, essential-only, integrated as visual element - never lengthy
  • SPATIAL EXPRESSION: Ideas communicate through space, form, color, composition - not paragraphs
  • ARTISTIC FREEDOM: The next Claude interprets the philosophy visually - provide creative room
  • PURE DESIGN: This is about making ART OBJECTS, not documents with decoration
  • EXPERT CRAFTSMANSHIP: Repeatedly emphasize the final work must look meticulously crafted, labored over with care, the product of countless hours by someone at the top of their field

The design philosophy should be 4-6 paragraphs long. Fill it with poetic design philosophy that brings together the core vision. Avoid repeating the same points. Keep the design philosophy generic without mentioning the intention of the art, as if it can be used wherever. Output the design philosophy as a .md file.


DEDUCING THE SUBTLE REFERENCE

CRITICAL STEP: Before creating the canvas, identify the subtle conceptual thread from the original request.

THE ESSENTIAL PRINCIPLE: The topic is a subtle, niche reference embedded within the art itself - not always literal, always sophisticated. Someone familiar with the subject should feel it intuitively, while others simply experience a masterful abstract composition. The design philosophy provides the aesthetic language. The deduced topic provides the soul - the quiet conceptual DNA woven invisibly into form, color, and composition.

This is VERY IMPORTANT: The reference must be refined so it enhances the work's depth without announcing itself. Think like a jazz musician quoting another song - only those who know will catch it, but everyone appreciates the music.


CANVAS CREATION

With both the philosophy and the conceptual framework established, express it on a canvas. Take a moment to gather thoughts and clear the mind. Use the design philosophy created and the instructions below to craft a masterpiece, embodying all aspects of the philosophy with expert craftsmanship.

IMPORTANT: For any type of content, even if the user requests something for a movie/game/book, the approach should still be sophisticated. Never lose sight of the idea that this should be art, not something that's cartoony or amateur.

To create museum or magazine quality work, use the design philosophy as the foundation. Create one single page, highly visual, design-forward PDF or PNG output (unless asked for more pages). Generally use repeating patterns and perfect shapes. Treat the abstract philosophical design as if it were a scientific bible, borrowing the visual language of systematic observation—dense accumulation of marks, repeated elements, or layered patterns that build meaning through patient repetition and reward sustained viewing. Add sparse, clinical typography and systematic reference markers that suggest this could be a diagram from an imaginary discipline, treating the invisible subject with the same reverence typically reserved for documenting observable phenomena. Anchor the piece with simple phrase(s) or details positioned subtly, using a limited color palette that feels intentional and cohesive. Embrace the paradox of using analytical visual language to express ideas about human experience: the result should feel like an artifact that proves something ephemeral can be studied, mapped, and understood through careful attention. This is true art.

Text as a contextual element: Text is always minimal and visual-first, but let context guide whether that means whisper-quiet labels or bold typographic gestures. A punk venue poster might have larger, more aggressive type than a minimalist ceramics studio identity. Most of the time, font should be thin. All use of fonts must be design-forward and prioritize visual communication. Regardless of text scale, nothing falls off the page and nothing overlaps. Every element must be contained within the canvas boundaries with proper margins. Check carefully that all text, graphics, and visual elements have breathing room and clear separation. This is non-negotiable for professional execution. IMPORTANT: Use different fonts if writing text. Search the ./canvas-fonts directory. Regardless of approach, sophistication is non-negotiable.

Download and use whatever fonts are needed to make this a reality. Get creative by making the typography actually part of the art itself -- if the art is abstract, bring the font onto the canvas, not typeset digitally.

To push boundaries, follow design instinct/intuition while using the philosophy as a guiding principle. Embrace ultimate design freedom and choice. Push aesthetics and design to the frontier.

CRITICAL: To achieve human-crafted quality (not AI-generated), create work that looks like it took countless hours. Make it appear as though someone at the absolute top of their field labored over every detail with painstaking care. Ensure the composition, spacing, color choices, typography - everything screams expert-level craftsmanship. Double-check that nothing overlaps, formatting is flawless, every detail perfect. Create something that could be shown to people to prove expertise and rank as undeniably impressive.

Output the final result as a single, downloadable .pdf or .png file, alongside the design philosophy used as a .md file.


FINAL STEP

IMPORTANT: The user ALREADY said "It isn't perfect enough. It must be pristine, a masterpiece if craftsmanship, as if it were about to be displayed in a museum."

CRITICAL: To refine the work, avoid adding more graphics; instead refine what has been created and make it extremely crisp, respecting the design philosophy and the principles of minimalism entirely. Rather than adding a fun filter or refactoring a font, consider how to make the existing composition more cohesive with the art. If the instinct is to call a new function or draw a new shape, STOP and instead ask: "How can I make what's already here more of a piece of art?"

Take a second pass. Go back to the code and refine/polish further to make this a philosophically designed masterpiece.

MULTI-PAGE OPTION

To create additional pages when requested, create more creative pages along the same lines as the design philosophy but distinctly different as well. Bundle those pages in the same .pdf or many .pngs. Treat the first page as just a single page in a whole coffee table book waiting to be filled. Make the next pages unique twists and memories of the original. Have them almost tell a story in a very tasteful way. Exercise full creative freedom.

引导用户通过结构化流程协作撰写文档。包含上下文收集、迭代优化及读者测试三阶段,确保内容清晰有效。适用于提案、技术规格等写作任务。
用户提及撰写文档或草案 创建PRD、设计文档、决策文档或RFC 开始实质性的写作任务
skills/anthropics_skills/doc-coauthoring/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill doc-coauthoring -g -y
SKILL.md
Frontmatter
{
    "name": "doc-coauthoring",
    "description": "Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks."
}

Doc Co-Authoring Workflow

This skill provides a structured workflow for guiding users through collaborative document creation. Act as an active guide, walking users through three stages: Context Gathering, Refinement & Structure, and Reader Testing.

When to Offer This Workflow

Trigger conditions:

  • User mentions writing documentation: "write a doc", "draft a proposal", "create a spec", "write up"
  • User mentions specific doc types: "PRD", "design doc", "decision doc", "RFC"
  • User seems to be starting a substantial writing task

Initial offer: Offer the user a structured workflow for co-authoring the document. Explain the three stages:

  1. Context Gathering: User provides all relevant context while Claude asks clarifying questions
  2. Refinement & Structure: Iteratively build each section through brainstorming and editing
  3. Reader Testing: Test the doc with a fresh Claude (no context) to catch blind spots before others read it

Explain that this approach helps ensure the doc works well when others read it (including when they paste it into Claude). Ask if they want to try this workflow or prefer to work freeform.

If user declines, work freeform. If user accepts, proceed to Stage 1.

Stage 1: Context Gathering

Goal: Close the gap between what the user knows and what Claude knows, enabling smart guidance later.

Initial Questions

Start by asking the user for meta-context about the document:

  1. What type of document is this? (e.g., technical spec, decision doc, proposal)
  2. Who's the primary audience?
  3. What's the desired impact when someone reads this?
  4. Is there a template or specific format to follow?
  5. Any other constraints or context to know?

Inform them they can answer in shorthand or dump information however works best for them.

If user provides a template or mentions a doc type:

  • Ask if they have a template document to share
  • If they provide a link to a shared document, use the appropriate integration to fetch it
  • If they provide a file, read it

If user mentions editing an existing shared document:

  • Use the appropriate integration to read the current state
  • Check for images without alt-text
  • If images exist without alt-text, explain that when others use Claude to understand the doc, Claude won't be able to see them. Ask if they want alt-text generated. If so, request they paste each image into chat for descriptive alt-text generation.

Info Dumping

Once initial questions are answered, encourage the user to dump all the context they have. Request information such as:

  • Background on the project/problem
  • Related team discussions or shared documents
  • Why alternative solutions aren't being used
  • Organizational context (team dynamics, past incidents, politics)
  • Timeline pressures or constraints
  • Technical architecture or dependencies
  • Stakeholder concerns

Advise them not to worry about organizing it - just get it all out. Offer multiple ways to provide context:

  • Info dump stream-of-consciousness
  • Point to team channels or threads to read
  • Link to shared documents

If integrations are available (e.g., Slack, Teams, Google Drive, SharePoint, or other MCP servers), mention that these can be used to pull in context directly.

If no integrations are detected and in Claude.ai or Claude app: Suggest they can enable connectors in their Claude settings to allow pulling context from messaging apps and document storage directly.

Inform them clarifying questions will be asked once they've done their initial dump.

During context gathering:

  • If user mentions team channels or shared documents:

    • If integrations available: Inform them the content will be read now, then use the appropriate integration
    • If integrations not available: Explain lack of access. Suggest they enable connectors in Claude settings, or paste the relevant content directly.
  • If user mentions entities/projects that are unknown:

    • Ask if connected tools should be searched to learn more
    • Wait for user confirmation before searching
  • As user provides context, track what's being learned and what's still unclear

Asking clarifying questions:

When user signals they've done their initial dump (or after substantial context provided), ask clarifying questions to ensure understanding:

Generate 5-10 numbered questions based on gaps in the context.

Inform them they can use shorthand to answer (e.g., "1: yes, 2: see #channel, 3: no because backwards compat"), link to more docs, point to channels to read, or just keep info-dumping. Whatever's most efficient for them.

Exit condition: Sufficient context has been gathered when questions show understanding - when edge cases and trade-offs can be asked about without needing basics explained.

Transition: Ask if there's any more context they want to provide at this stage, or if it's time to move on to drafting the document.

If user wants to add more, let them. When ready, proceed to Stage 2.

Stage 2: Refinement & Structure

Goal: Build the document section by section through brainstorming, curation, and iterative refinement.

Instructions to user: Explain that the document will be built section by section. For each section:

  1. Clarifying questions will be asked about what to include
  2. 5-20 options will be brainstormed
  3. User will indicate what to keep/remove/combine
  4. The section will be drafted
  5. It will be refined through surgical edits

Start with whichever section has the most unknowns (usually the core decision/proposal), then work through the rest.

Section ordering:

If the document structure is clear: Ask which section they'd like to start with.

Suggest starting with whichever section has the most unknowns. For decision docs, that's usually the core proposal. For specs, it's typically the technical approach. Summary sections are best left for last.

If user doesn't know what sections they need: Based on the type of document and template, suggest 3-5 sections appropriate for the doc type.

Ask if this structure works, or if they want to adjust it.

Once structure is agreed:

Create the initial document structure with placeholder text for all sections.

If access to artifacts is available: Use create_file to create an artifact. This gives both Claude and the user a scaffold to work from.

Inform them that the initial structure with placeholders for all sections will be created.

Create artifact with all section headers and brief placeholder text like "[To be written]" or "[Content here]".

Provide the scaffold link and indicate it's time to fill in each section.

If no access to artifacts: Create a markdown file in the working directory. Name it appropriately (e.g., decision-doc.md, technical-spec.md).

Inform them that the initial structure with placeholders for all sections will be created.

Create file with all section headers and placeholder text.

Confirm the filename has been created and indicate it's time to fill in each section.

For each section:

Step 1: Clarifying Questions

Announce work will begin on the [SECTION NAME] section. Ask 5-10 clarifying questions about what should be included:

Generate 5-10 specific questions based on context and section purpose.

Inform them they can answer in shorthand or just indicate what's important to cover.

Step 2: Brainstorming

For the [SECTION NAME] section, brainstorm [5-20] things that might be included, depending on the section's complexity. Look for:

  • Context shared that might have been forgotten
  • Angles or considerations not yet mentioned

Generate 5-20 numbered options based on section complexity. At the end, offer to brainstorm more if they want additional options.

Step 3: Curation

Ask which points should be kept, removed, or combined. Request brief justifications to help learn priorities for the next sections.

Provide examples:

  • "Keep 1,4,7,9"
  • "Remove 3 (duplicates 1)"
  • "Remove 6 (audience already knows this)"
  • "Combine 11 and 12"

If user gives freeform feedback (e.g., "looks good" or "I like most of it but...") instead of numbered selections, extract their preferences and proceed. Parse what they want kept/removed/changed and apply it.

Step 4: Gap Check

Based on what they've selected, ask if there's anything important missing for the [SECTION NAME] section.

Step 5: Drafting

Use str_replace to replace the placeholder text for this section with the actual drafted content.

Announce the [SECTION NAME] section will be drafted now based on what they've selected.

If using artifacts: After drafting, provide a link to the artifact.

Ask them to read through it and indicate what to change. Note that being specific helps learning for the next sections.

If using a file (no artifacts): After drafting, confirm completion.

Inform them the [SECTION NAME] section has been drafted in [filename]. Ask them to read through it and indicate what to change. Note that being specific helps learning for the next sections.

Key instruction for user (include when drafting the first section): Provide a note: Instead of editing the doc directly, ask them to indicate what to change. This helps learning of their style for future sections. For example: "Remove the X bullet - already covered by Y" or "Make the third paragraph more concise".

Step 6: Iterative Refinement

As user provides feedback:

  • Use str_replace to make edits (never reprint the whole doc)
  • If using artifacts: Provide link to artifact after each edit
  • If using files: Just confirm edits are complete
  • If user edits doc directly and asks to read it: mentally note the changes they made and keep them in mind for future sections (this shows their preferences)

Continue iterating until user is satisfied with the section.

Quality Checking

After 3 consecutive iterations with no substantial changes, ask if anything can be removed without losing important information.

When section is done, confirm [SECTION NAME] is complete. Ask if ready to move to the next section.

Repeat for all sections.

Near Completion

As approaching completion (80%+ of sections done), announce intention to re-read the entire document and check for:

  • Flow and consistency across sections
  • Redundancy or contradictions
  • Anything that feels like "slop" or generic filler
  • Whether every sentence carries weight

Read entire document and provide feedback.

When all sections are drafted and refined: Announce all sections are drafted. Indicate intention to review the complete document one more time.

Review for overall coherence, flow, completeness.

Provide any final suggestions.

Ask if ready to move to Reader Testing, or if they want to refine anything else.

Stage 3: Reader Testing

Goal: Test the document with a fresh Claude (no context bleed) to verify it works for readers.

Instructions to user: Explain that testing will now occur to see if the document actually works for readers. This catches blind spots - things that make sense to the authors but might confuse others.

Testing Approach

If access to sub-agents is available (e.g., in Claude Code):

Perform the testing directly without user involvement.

Step 1: Predict Reader Questions

Announce intention to predict what questions readers might ask when trying to discover this document.

Generate 5-10 questions that readers would realistically ask.

Step 2: Test with Sub-Agent

Announce that these questions will be tested with a fresh Claude instance (no context from this conversation).

For each question, invoke a sub-agent with just the document content and the question.

Summarize what Reader Claude got right/wrong for each question.

Step 3: Run Additional Checks

Announce additional checks will be performed.

Invoke sub-agent to check for ambiguity, false assumptions, contradictions.

Summarize any issues found.

Step 4: Report and Fix

If issues found: Report that Reader Claude struggled with specific issues.

List the specific issues.

Indicate intention to fix these gaps.

Loop back to refinement for problematic sections.


If no access to sub-agents (e.g., claude.ai web interface):

The user will need to do the testing manually.

Step 1: Predict Reader Questions

Ask what questions people might ask when trying to discover this document. What would they type into Claude.ai?

Generate 5-10 questions that readers would realistically ask.

Step 2: Setup Testing

Provide testing instructions:

  1. Open a fresh Claude conversation: https://claude.ai
  2. Paste or share the document content (if using a shared doc platform with connectors enabled, provide the link)
  3. Ask Reader Claude the generated questions

For each question, instruct Reader Claude to provide:

  • The answer
  • Whether anything was ambiguous or unclear
  • What knowledge/context the doc assumes is already known

Check if Reader Claude gives correct answers or misinterprets anything.

Step 3: Additional Checks

Also ask Reader Claude:

  • "What in this doc might be ambiguous or unclear to readers?"
  • "What knowledge or context does this doc assume readers already have?"
  • "Are there any internal contradictions or inconsistencies?"

Step 4: Iterate Based on Results

Ask what Reader Claude got wrong or struggled with. Indicate intention to fix those gaps.

Loop back to refinement for any problematic sections.


Exit Condition (Both Approaches)

When Reader Claude consistently answers questions correctly and doesn't surface new gaps or ambiguities, the doc is ready.

Final Review

When Reader Testing passes: Announce the doc has passed Reader Claude testing. Before completion:

  1. Recommend they do a final read-through themselves - they own this document and are responsible for its quality
  2. Suggest double-checking any facts, links, or technical details
  3. Ask them to verify it achieves the impact they wanted

Ask if they want one more review, or if the work is done.

If user wants final review, provide it. Otherwise: Announce document completion. Provide a few final tips:

  • Consider linking this conversation in an appendix so readers can see how the doc was developed
  • Use appendices to provide depth without bloating the main doc
  • Update the doc as feedback is received from real readers

Tips for Effective Guidance

Tone:

  • Be direct and procedural
  • Explain rationale briefly when it affects user behavior
  • Don't try to "sell" the approach - just execute it

Handling Deviations:

  • If user wants to skip a stage: Ask if they want to skip this and write freeform
  • If user seems frustrated: Acknowledge this is taking longer than expected. Suggest ways to move faster
  • Always give user agency to adjust the process

Context Management:

  • Throughout, if context is missing on something mentioned, proactively ask
  • Don't let gaps accumulate - address them as they come up

Artifact Management:

  • Use create_file for drafting full sections
  • Use str_replace for all edits
  • Provide artifact link after every change
  • Never use artifacts for brainstorming lists - that's just conversation

Quality over Speed:

  • Don't rush through stages
  • Each iteration should make meaningful improvements
  • The goal is a document that actually works for readers
指导创建独特且生产级的前端界面,避免通用AI美学。适用于构建网页、组件、仪表盘等,强调大胆的美学方向、精细排版与动效,生成高质量代码。
用户要求构建网页或着陆页 需要设计React/Vue组件 请求美化Web UI或布局
skills/anthropics_skills/frontend-design/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill frontend-design -g -y
SKILL.md
Frontmatter
{
    "name": "frontend-design",
    "license": "Complete terms in LICENSE.txt",
    "description": "Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML\/CSS layouts, or when styling\/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics."
}

This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.

The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.

Design Thinking

Before coding, understand the context and commit to a BOLD aesthetic direction:

  • Purpose: What problem does this interface solve? Who uses it?
  • Tone: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
  • Constraints: Technical requirements (framework, performance, accessibility).
  • Differentiation: What makes this UNFORGETTABLE? What's the one thing someone will remember?

CRITICAL: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.

Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:

  • Production-grade and functional
  • Visually striking and memorable
  • Cohesive with a clear aesthetic point-of-view
  • Meticulously refined in every detail

Frontend Aesthetics Guidelines

Focus on:

  • Typography: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
  • Color & Theme: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
  • Motion: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
  • Spatial Composition: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
  • Backgrounds & Visual Details: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.

NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.

Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.

IMPORTANT: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.

Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.

该技能用于撰写公司内部沟通内容,涵盖状态报告、领导层更新、3P更新、新闻通讯、FAQ及事件报告等。通过识别类型并加载对应示例指南,确保格式和语气符合公司规范。
需要撰写内部沟通文档 请求生成状态报告或项目更新 询问如何编写公司新闻通讯或FAQ
skills/anthropics_skills/internal-comms/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill internal-comms -g -y
SKILL.md
Frontmatter
{
    "name": "internal-comms",
    "license": "Complete terms in LICENSE.txt",
    "description": "A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.)."
}

When to use this skill

To write internal communications, use this skill for:

  • 3P updates (Progress, Plans, Problems)
  • Company newsletters
  • FAQ responses
  • Status reports
  • Leadership updates
  • Project updates
  • Incident reports

How to use this skill

To write any internal communication:

  1. Identify the communication type from the request
  2. Load the appropriate guideline file from the examples/ directory:
    • examples/3p-updates.md - For Progress/Plans/Problems team updates
    • examples/company-newsletter.md - For company-wide newsletters
    • examples/faq-answers.md - For answering frequently asked questions
    • examples/general-comms.md - For anything else that doesn't explicitly match one of the above
  3. Follow the specific instructions in that file for formatting, tone, and content gathering

If the communication type doesn't match any existing guideline, ask for clarification or more context about the desired format.

Keywords

3P updates, company newsletter, company comms, weekly update, faqs, common questions, updates, internal comms

指导构建高质量 MCP 服务器的开发指南,涵盖 Python (FastMCP) 和 Node/TypeScript。提供从需求分析、协议研究到框架选型及最佳实践的完整工作流,旨在通过精心设计的工具增强 LLM 与外部服务的交互能力。
需要创建或集成 MCP 服务器 使用 FastMCP 或 TypeScript SDK 开发 LLM 工具 优化 MCP 工具命名、错误处理及上下文管理
skills/anthropics_skills/mcp-builder/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill mcp-builder -g -y
SKILL.md
Frontmatter
{
    "name": "mcp-builder",
    "license": "Complete terms in LICENSE.txt",
    "description": "Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\/TypeScript (MCP SDK)."
}

MCP Server Development Guide

Overview

Create MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. The quality of an MCP server is measured by how well it enables LLMs to accomplish real-world tasks.


Process

🚀 High-Level Workflow

Creating a high-quality MCP server involves four main phases:

Phase 1: Deep Research and Planning

1.1 Understand Modern MCP Design

API Coverage vs. Workflow Tools: Balance comprehensive API endpoint coverage with specialized workflow tools. Workflow tools can be more convenient for specific tasks, while comprehensive coverage gives agents flexibility to compose operations. Performance varies by client—some clients benefit from code execution that combines basic tools, while others work better with higher-level workflows. When uncertain, prioritize comprehensive API coverage.

Tool Naming and Discoverability: Clear, descriptive tool names help agents find the right tools quickly. Use consistent prefixes (e.g., github_create_issue, github_list_repos) and action-oriented naming.

Context Management: Agents benefit from concise tool descriptions and the ability to filter/paginate results. Design tools that return focused, relevant data. Some clients support code execution which can help agents filter and process data efficiently.

Actionable Error Messages: Error messages should guide agents toward solutions with specific suggestions and next steps.

1.2 Study MCP Protocol Documentation

Navigate the MCP specification:

Start with the sitemap to find relevant pages: https://modelcontextprotocol.io/sitemap.xml

Then fetch specific pages with .md suffix for markdown format (e.g., https://modelcontextprotocol.io/specification/draft.md).

Key pages to review:

  • Specification overview and architecture
  • Transport mechanisms (streamable HTTP, stdio)
  • Tool, resource, and prompt definitions

1.3 Study Framework Documentation

Recommended stack:

  • Language: TypeScript (high-quality SDK support and good compatibility in many execution environments e.g. MCPB. Plus AI models are good at generating TypeScript code, benefiting from its broad usage, static typing and good linting tools)
  • Transport: Streamable HTTP for remote servers, using stateless JSON (simpler to scale and maintain, as opposed to stateful sessions and streaming responses). stdio for local servers.

Load framework documentation:

For TypeScript (recommended):

  • TypeScript SDK: Use WebFetch to load https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.md
  • ⚡ TypeScript Guide - TypeScript patterns and examples

For Python:

  • Python SDK: Use WebFetch to load https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.md
  • 🐍 Python Guide - Python patterns and examples

1.4 Plan Your Implementation

Understand the API: Review the service's API documentation to identify key endpoints, authentication requirements, and data models. Use web search and WebFetch as needed.

Tool Selection: Prioritize comprehensive API coverage. List endpoints to implement, starting with the most common operations.


Phase 2: Implementation

2.1 Set Up Project Structure

See language-specific guides for project setup:

2.2 Implement Core Infrastructure

Create shared utilities:

  • API client with authentication
  • Error handling helpers
  • Response formatting (JSON/Markdown)
  • Pagination support

2.3 Implement Tools

For each tool:

Input Schema:

  • Use Zod (TypeScript) or Pydantic (Python)
  • Include constraints and clear descriptions
  • Add examples in field descriptions

Output Schema:

  • Define outputSchema where possible for structured data
  • Use structuredContent in tool responses (TypeScript SDK feature)
  • Helps clients understand and process tool outputs

Tool Description:

  • Concise summary of functionality
  • Parameter descriptions
  • Return type schema

Implementation:

  • Async/await for I/O operations
  • Proper error handling with actionable messages
  • Support pagination where applicable
  • Return both text content and structured data when using modern SDKs

Annotations:

  • readOnlyHint: true/false
  • destructiveHint: true/false
  • idempotentHint: true/false
  • openWorldHint: true/false

Phase 3: Review and Test

3.1 Code Quality

Review for:

  • No duplicated code (DRY principle)
  • Consistent error handling
  • Full type coverage
  • Clear tool descriptions

3.2 Build and Test

TypeScript:

  • Run npm run build to verify compilation
  • Test with MCP Inspector: npx @modelcontextprotocol/inspector

Python:

  • Verify syntax: python -m py_compile your_server.py
  • Test with MCP Inspector

See language-specific guides for detailed testing approaches and quality checklists.


Phase 4: Create Evaluations

After implementing your MCP server, create comprehensive evaluations to test its effectiveness.

Load ✅ Evaluation Guide for complete evaluation guidelines.

4.1 Understand Evaluation Purpose

Use evaluations to test whether LLMs can effectively use your MCP server to answer realistic, complex questions.

4.2 Create 10 Evaluation Questions

To create effective evaluations, follow the process outlined in the evaluation guide:

  1. Tool Inspection: List available tools and understand their capabilities
  2. Content Exploration: Use READ-ONLY operations to explore available data
  3. Question Generation: Create 10 complex, realistic questions
  4. Answer Verification: Solve each question yourself to verify answers

4.3 Evaluation Requirements

Ensure each question is:

  • Independent: Not dependent on other questions
  • Read-only: Only non-destructive operations required
  • Complex: Requiring multiple tool calls and deep exploration
  • Realistic: Based on real use cases humans would care about
  • Verifiable: Single, clear answer that can be verified by string comparison
  • Stable: Answer won't change over time

4.4 Output Format

Create an XML file with this structure:

<evaluation>
  <qa_pair>
    <question>Find discussions about AI model launches with animal codenames. One model needed a specific safety designation that uses the format ASL-X. What number X was being determined for the model named after a spotted wild cat?</question>
    <answer>3</answer>
  </qa_pair>
<!-- More qa_pairs... -->
</evaluation>

Reference Files

📚 Documentation Library

Load these resources as needed during development:

Core MCP Documentation (Load First)

  • MCP Protocol: Start with sitemap at https://modelcontextprotocol.io/sitemap.xml, then fetch specific pages with .md suffix
  • 📋 MCP Best Practices - Universal MCP guidelines including:
    • Server and tool naming conventions
    • Response format guidelines (JSON vs Markdown)
    • Pagination best practices
    • Transport selection (streamable HTTP vs stdio)
    • Security and error handling standards

SDK Documentation (Load During Phase 1/2)

  • Python SDK: Fetch from https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.md
  • TypeScript SDK: Fetch from https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.md

Language-Specific Implementation Guides (Load During Phase 2)

  • 🐍 Python Implementation Guide - Complete Python/FastMCP guide with:

    • Server initialization patterns
    • Pydantic model examples
    • Tool registration with @mcp.tool
    • Complete working examples
    • Quality checklist
  • ⚡ TypeScript Implementation Guide - Complete TypeScript guide with:

    • Project structure
    • Zod schema patterns
    • Tool registration with server.registerTool
    • Complete working examples
    • Quality checklist

Evaluation Guide (Load During Phase 4)

  • ✅ Evaluation Guide - Complete evaluation creation guide with:
    • Question creation guidelines
    • Answer verification strategies
    • XML format specifications
    • Example questions and answers
    • Running an evaluation with the provided scripts
用于处理PDF文件的全能技能,涵盖读取、文本表格提取、合并拆分、旋转、加水印、创建、表单填写、加解密及OCR等功能。当用户提及或需生成PDF时触发。
用户提到 .pdf 文件 用户要求生成 PDF 涉及PDF阅读、编辑、转换或分析的任务
skills/anthropics_skills/pdf/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill pdf -g -y
SKILL.md
Frontmatter
{
    "name": "pdf",
    "license": "Proprietary. LICENSE.txt has complete terms",
    "description": "Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\/tables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\/decrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill."
}

PDF Processing Guide

Overview

This guide covers essential PDF processing operations using Python libraries and command-line tools. For advanced features, JavaScript libraries, and detailed examples, see REFERENCE.md. If you need to fill out a PDF form, read FORMS.md and follow its instructions.

Quick Start

from pypdf import PdfReader, PdfWriter

# Read a PDF
reader = PdfReader("document.pdf")
print(f"Pages: {len(reader.pages)}")

# Extract text
text = ""
for page in reader.pages:
    text += page.extract_text()

Python Libraries

pypdf - Basic Operations

Merge PDFs

from pypdf import PdfWriter, PdfReader

writer = PdfWriter()
for pdf_file in ["doc1.pdf", "doc2.pdf", "doc3.pdf"]:
    reader = PdfReader(pdf_file)
    for page in reader.pages:
        writer.add_page(page)

with open("merged.pdf", "wb") as output:
    writer.write(output)

Split PDF

reader = PdfReader("input.pdf")
for i, page in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(page)
    with open(f"page_{i+1}.pdf", "wb") as output:
        writer.write(output)

Extract Metadata

reader = PdfReader("document.pdf")
meta = reader.metadata
print(f"Title: {meta.title}")
print(f"Author: {meta.author}")
print(f"Subject: {meta.subject}")
print(f"Creator: {meta.creator}")

Rotate Pages

reader = PdfReader("input.pdf")
writer = PdfWriter()

page = reader.pages[0]
page.rotate(90)  # Rotate 90 degrees clockwise
writer.add_page(page)

with open("rotated.pdf", "wb") as output:
    writer.write(output)

pdfplumber - Text and Table Extraction

Extract Text with Layout

import pdfplumber

with pdfplumber.open("document.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        print(text)

Extract Tables

with pdfplumber.open("document.pdf") as pdf:
    for i, page in enumerate(pdf.pages):
        tables = page.extract_tables()
        for j, table in enumerate(tables):
            print(f"Table {j+1} on page {i+1}:")
            for row in table:
                print(row)

Advanced Table Extraction

import pandas as pd

with pdfplumber.open("document.pdf") as pdf:
    all_tables = []
    for page in pdf.pages:
        tables = page.extract_tables()
        for table in tables:
            if table:  # Check if table is not empty
                df = pd.DataFrame(table[1:], columns=table[0])
                all_tables.append(df)

# Combine all tables
if all_tables:
    combined_df = pd.concat(all_tables, ignore_index=True)
    combined_df.to_excel("extracted_tables.xlsx", index=False)

reportlab - Create PDFs

Basic PDF Creation

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

c = canvas.Canvas("hello.pdf", pagesize=letter)
width, height = letter

# Add text
c.drawString(100, height - 100, "Hello World!")
c.drawString(100, height - 120, "This is a PDF created with reportlab")

# Add a line
c.line(100, height - 140, 400, height - 140)

# Save
c.save()

Create PDF with Multiple Pages

from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, PageBreak
from reportlab.lib.styles import getSampleStyleSheet

doc = SimpleDocTemplate("report.pdf", pagesize=letter)
styles = getSampleStyleSheet()
story = []

# Add content
title = Paragraph("Report Title", styles['Title'])
story.append(title)
story.append(Spacer(1, 12))

body = Paragraph("This is the body of the report. " * 20, styles['Normal'])
story.append(body)
story.append(PageBreak())

# Page 2
story.append(Paragraph("Page 2", styles['Heading1']))
story.append(Paragraph("Content for page 2", styles['Normal']))

# Build PDF
doc.build(story)

Subscripts and Superscripts

IMPORTANT: Never use Unicode subscript/superscript characters (₀₁₂₃₄₅₆₇₈₉, ⁰¹²³⁴⁵⁶⁷⁸⁹) in ReportLab PDFs. The built-in fonts do not include these glyphs, causing them to render as solid black boxes.

Instead, use ReportLab's XML markup tags in Paragraph objects:

from reportlab.platypus import Paragraph
from reportlab.lib.styles import getSampleStyleSheet

styles = getSampleStyleSheet()

# Subscripts: use <sub> tag
chemical = Paragraph("H<sub>2</sub>O", styles['Normal'])

# Superscripts: use <super> tag
squared = Paragraph("x<super>2</super> + y<super>2</super>", styles['Normal'])

For canvas-drawn text (not Paragraph objects), manually adjust font the size and position rather than using Unicode subscripts/superscripts.

Command-Line Tools

pdftotext (poppler-utils)

# Extract text
pdftotext input.pdf output.txt

# Extract text preserving layout
pdftotext -layout input.pdf output.txt

# Extract specific pages
pdftotext -f 1 -l 5 input.pdf output.txt  # Pages 1-5

qpdf

# Merge PDFs
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf

# Split pages
qpdf input.pdf --pages . 1-5 -- pages1-5.pdf
qpdf input.pdf --pages . 6-10 -- pages6-10.pdf

# Rotate pages
qpdf input.pdf output.pdf --rotate=+90:1  # Rotate page 1 by 90 degrees

# Remove password
qpdf --password=mypassword --decrypt encrypted.pdf decrypted.pdf

pdftk (if available)

# Merge
pdftk file1.pdf file2.pdf cat output merged.pdf

# Split
pdftk input.pdf burst

# Rotate
pdftk input.pdf rotate 1east output rotated.pdf

Common Tasks

Extract Text from Scanned PDFs

# Requires: pip install pytesseract pdf2image
import pytesseract
from pdf2image import convert_from_path

# Convert PDF to images
images = convert_from_path('scanned.pdf')

# OCR each page
text = ""
for i, image in enumerate(images):
    text += f"Page {i+1}:\n"
    text += pytesseract.image_to_string(image)
    text += "\n\n"

print(text)

Add Watermark

from pypdf import PdfReader, PdfWriter

# Create watermark (or load existing)
watermark = PdfReader("watermark.pdf").pages[0]

# Apply to all pages
reader = PdfReader("document.pdf")
writer = PdfWriter()

for page in reader.pages:
    page.merge_page(watermark)
    writer.add_page(page)

with open("watermarked.pdf", "wb") as output:
    writer.write(output)

Extract Images

# Using pdfimages (poppler-utils)
pdfimages -j input.pdf output_prefix

# This extracts all images as output_prefix-000.jpg, output_prefix-001.jpg, etc.

Password Protection

from pypdf import PdfReader, PdfWriter

reader = PdfReader("input.pdf")
writer = PdfWriter()

for page in reader.pages:
    writer.add_page(page)

# Add password
writer.encrypt("userpassword", "ownerpassword")

with open("encrypted.pdf", "wb") as output:
    writer.write(output)

Quick Reference

Task Best Tool Command/Code
Merge PDFs pypdf writer.add_page(page)
Split PDFs pypdf One page per file
Extract text pdfplumber page.extract_text()
Extract tables pdfplumber page.extract_tables()
Create PDFs reportlab Canvas or Platypus
Command line merge qpdf qpdf --empty --pages ...
OCR scanned PDFs pytesseract Convert to image first
Fill PDF forms pdf-lib or pypdf (see FORMS.md) See FORMS.md

Next Steps

  • For advanced pypdfium2 usage, see REFERENCE.md
  • For JavaScript libraries (pdf-lib), see REFERENCE.md
  • If you need to fill out a PDF form, follow the instructions in FORMS.md
  • For troubleshooting guides, see REFERENCE.md
用于创建、修改和优化技能,通过编写测试用例运行评估并迭代改进。支持从构思到部署的全流程,包括性能基准测试、描述优化及灵活的用户交互引导。
从零开始创建新技能 编辑或优化现有技能 运行评估以测试技能性能 通过方差分析进行技能性能基准测试 优化技能描述以提高触发准确性
skills/anthropics_skills/skill-creator/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill skill-creator -g -y
SKILL.md
Frontmatter
{
    "name": "skill-creator",
    "description": "Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy."
}

Skill Creator

A skill for creating new skills and iteratively improving them.

At a high level, the process of creating a skill goes like this:

  • Decide what you want the skill to do and roughly how it should do it
  • Write a draft of the skill
  • Create a few test prompts and run claude-with-access-to-the-skill on them
  • Help the user evaluate the results both qualitatively and quantitatively
    • While the runs happen in the background, draft some quantitative evals if there aren't any (if there are some, you can either use as is or modify if you feel something needs to change about them). Then explain them to the user (or if they already existed, explain the ones that already exist)
    • Use the eval-viewer/generate_review.py script to show the user the results for them to look at, and also let them look at the quantitative metrics
  • Rewrite the skill based on feedback from the user's evaluation of the results (and also if there are any glaring flaws that become apparent from the quantitative benchmarks)
  • Repeat until you're satisfied
  • Expand the test set and try again at larger scale

Your job when using this skill is to figure out where the user is in this process and then jump in and help them progress through these stages. So for instance, maybe they're like "I want to make a skill for X". You can help narrow down what they mean, write a draft, write the test cases, figure out how they want to evaluate, run all the prompts, and repeat.

On the other hand, maybe they already have a draft of the skill. In this case you can go straight to the eval/iterate part of the loop.

Of course, you should always be flexible and if the user is like "I don't need to run a bunch of evaluations, just vibe with me", you can do that instead.

Then after the skill is done (but again, the order is flexible), you can also run the skill description improver, which we have a whole separate script for, to optimize the triggering of the skill.

Cool? Cool.

Communicating with the user

The skill creator is liable to be used by people across a wide range of familiarity with coding jargon. If you haven't heard (and how could you, it's only very recently that it started), there's a trend now where the power of Claude is inspiring plumbers to open up their terminals, parents and grandparents to google "how to install npm". On the other hand, the bulk of users are probably fairly computer-literate.

So please pay attention to context cues to understand how to phrase your communication! In the default case, just to give you some idea:

  • "evaluation" and "benchmark" are borderline, but OK
  • for "JSON" and "assertion" you want to see serious cues from the user that they know what those things are before using them without explaining them

It's OK to briefly explain terms if you're in doubt, and feel free to clarify terms with a short definition if you're unsure if the user will get it.


Creating a skill

Capture Intent

Start by understanding the user's intent. The current conversation might already contain a workflow the user wants to capture (e.g., they say "turn this into a skill"). If so, extract answers from the conversation history first — the tools used, the sequence of steps, corrections the user made, input/output formats observed. The user may need to fill the gaps, and should confirm before proceeding to the next step.

  1. What should this skill enable Claude to do?
  2. When should this skill trigger? (what user phrases/contexts)
  3. What's the expected output format?
  4. Should we set up test cases to verify the skill works? Skills with objectively verifiable outputs (file transforms, data extraction, code generation, fixed workflow steps) benefit from test cases. Skills with subjective outputs (writing style, art) often don't need them. Suggest the appropriate default based on the skill type, but let the user decide.

Interview and Research

Proactively ask questions about edge cases, input/output formats, example files, success criteria, and dependencies. Wait to write test prompts until you've got this part ironed out.

Check available MCPs - if useful for research (searching docs, finding similar skills, looking up best practices), research in parallel via subagents if available, otherwise inline. Come prepared with context to reduce burden on the user.

Write the SKILL.md

Based on the user interview, fill in these components:

  • name: Skill identifier
  • description: When to trigger, what it does. This is the primary triggering mechanism - include both what the skill does AND specific contexts for when to use it. All "when to use" info goes here, not in the body. Note: currently Claude has a tendency to "undertrigger" skills -- to not use them when they'd be useful. To combat this, please make the skill descriptions a little bit "pushy". So for instance, instead of "How to build a simple fast dashboard to display internal Anthropic data.", you might write "How to build a simple fast dashboard to display internal Anthropic data. Make sure to use this skill whenever the user mentions dashboards, data visualization, internal metrics, or wants to display any kind of company data, even if they don't explicitly ask for a 'dashboard.'"
  • compatibility: Required tools, dependencies (optional, rarely needed)
  • the rest of the skill :)

Skill Writing Guide

Anatomy of a Skill

skill-name/
├── SKILL.md (required)
│   ├── YAML frontmatter (name, description required)
│   └── Markdown instructions
└── Bundled Resources (optional)
    ├── scripts/    - Executable code for deterministic/repetitive tasks
    ├── references/ - Docs loaded into context as needed
    └── assets/     - Files used in output (templates, icons, fonts)

Progressive Disclosure

Skills use a three-level loading system:

  1. Metadata (name + description) - Always in context (~100 words)
  2. SKILL.md body - In context whenever skill triggers (<500 lines ideal)
  3. Bundled resources - As needed (unlimited, scripts can execute without loading)

These word counts are approximate and you can feel free to go longer if needed.

Key patterns:

  • Keep SKILL.md under 500 lines; if you're approaching this limit, add an additional layer of hierarchy along with clear pointers about where the model using the skill should go next to follow up.
  • Reference files clearly from SKILL.md with guidance on when to read them
  • For large reference files (>300 lines), include a table of contents

Domain organization: When a skill supports multiple domains/frameworks, organize by variant:

cloud-deploy/
├── SKILL.md (workflow + selection)
└── references/
    ├── aws.md
    ├── gcp.md
    └── azure.md

Claude reads only the relevant reference file.

Principle of Lack of Surprise

This goes without saying, but skills must not contain malware, exploit code, or any content that could compromise system security. A skill's contents should not surprise the user in their intent if described. Don't go along with requests to create misleading skills or skills designed to facilitate unauthorized access, data exfiltration, or other malicious activities. Things like a "roleplay as an XYZ" are OK though.

Writing Patterns

Prefer using the imperative form in instructions.

Defining output formats - You can do it like this:

## Report structure
ALWAYS use this exact template:
# [Title]
## Executive summary
## Key findings
## Recommendations

Examples pattern - It's useful to include examples. You can format them like this (but if "Input" and "Output" are in the examples you might want to deviate a little):

## Commit message format
**Example 1:**
Input: Added user authentication with JWT tokens
Output: feat(auth): implement JWT-based authentication

Writing Style

Try to explain to the model why things are important in lieu of heavy-handed musty MUSTs. Use theory of mind and try to make the skill general and not super-narrow to specific examples. Start by writing a draft and then look at it with fresh eyes and improve it.

Test Cases

After writing the skill draft, come up with 2-3 realistic test prompts — the kind of thing a real user would actually say. Share them with the user: [you don't have to use this exact language] "Here are a few test cases I'd like to try. Do these look right, or do you want to add more?" Then run them.

Save test cases to evals/evals.json. Don't write assertions yet — just the prompts. You'll draft assertions in the next step while the runs are in progress.

{
  "skill_name": "example-skill",
  "evals": [
    {
      "id": 1,
      "prompt": "User's task prompt",
      "expected_output": "Description of expected result",
      "files": []
    }
  ]
}

See references/schemas.md for the full schema (including the assertions field, which you'll add later).

Running and evaluating test cases

This section is one continuous sequence — don't stop partway through. Do NOT use /skill-test or any other testing skill.

Put results in <skill-name>-workspace/ as a sibling to the skill directory. Within the workspace, organize results by iteration (iteration-1/, iteration-2/, etc.) and within that, each test case gets a directory (eval-0/, eval-1/, etc.). Don't create all of this upfront — just create directories as you go.

Step 1: Spawn all runs (with-skill AND baseline) in the same turn

For each test case, spawn two subagents in the same turn — one with the skill, one without. This is important: don't spawn the with-skill runs first and then come back for baselines later. Launch everything at once so it all finishes around the same time.

With-skill run:

Execute this task:
- Skill path: <path-to-skill>
- Task: <eval prompt>
- Input files: <eval files if any, or "none">
- Save outputs to: <workspace>/iteration-<N>/eval-<ID>/with_skill/outputs/
- Outputs to save: <what the user cares about — e.g., "the .docx file", "the final CSV">

Baseline run (same prompt, but the baseline depends on context):

  • Creating a new skill: no skill at all. Same prompt, no skill path, save to without_skill/outputs/.
  • Improving an existing skill: the old version. Before editing, snapshot the skill (cp -r <skill-path> <workspace>/skill-snapshot/), then point the baseline subagent at the snapshot. Save to old_skill/outputs/.

Write an eval_metadata.json for each test case (assertions can be empty for now). Give each eval a descriptive name based on what it's testing — not just "eval-0". Use this name for the directory too. If this iteration uses new or modified eval prompts, create these files for each new eval directory — don't assume they carry over from previous iterations.

{
  "eval_id": 0,
  "eval_name": "descriptive-name-here",
  "prompt": "The user's task prompt",
  "assertions": []
}

Step 2: While runs are in progress, draft assertions

Don't just wait for the runs to finish — you can use this time productively. Draft quantitative assertions for each test case and explain them to the user. If assertions already exist in evals/evals.json, review them and explain what they check.

Good assertions are objectively verifiable and have descriptive names — they should read clearly in the benchmark viewer so someone glancing at the results immediately understands what each one checks. Subjective skills (writing style, design quality) are better evaluated qualitatively — don't force assertions onto things that need human judgment.

Update the eval_metadata.json files and evals/evals.json with the assertions once drafted. Also explain to the user what they'll see in the viewer — both the qualitative outputs and the quantitative benchmark.

Step 3: As runs complete, capture timing data

When each subagent task completes, you receive a notification containing total_tokens and duration_ms. Save this data immediately to timing.json in the run directory:

{
  "total_tokens": 84852,
  "duration_ms": 23332,
  "total_duration_seconds": 23.3
}

This is the only opportunity to capture this data — it comes through the task notification and isn't persisted elsewhere. Process each notification as it arrives rather than trying to batch them.

Step 4: Grade, aggregate, and launch the viewer

Once all runs are done:

  1. Grade each run — spawn a grader subagent (or grade inline) that reads agents/grader.md and evaluates each assertion against the outputs. Save results to grading.json in each run directory. The grading.json expectations array must use the fields text, passed, and evidence (not name/met/details or other variants) — the viewer depends on these exact field names. For assertions that can be checked programmatically, write and run a script rather than eyeballing it — scripts are faster, more reliable, and can be reused across iterations.

  2. Aggregate into benchmark — run the aggregation script from the skill-creator directory:

    python -m scripts.aggregate_benchmark <workspace>/iteration-N --skill-name <name>
    

    This produces benchmark.json and benchmark.md with pass_rate, time, and tokens for each configuration, with mean ± stddev and the delta. If generating benchmark.json manually, see references/schemas.md for the exact schema the viewer expects. Put each with_skill version before its baseline counterpart.

  3. Do an analyst pass — read the benchmark data and surface patterns the aggregate stats might hide. See agents/analyzer.md (the "Analyzing Benchmark Results" section) for what to look for — things like assertions that always pass regardless of skill (non-discriminating), high-variance evals (possibly flaky), and time/token tradeoffs.

  4. Launch the viewer with both qualitative outputs and quantitative data:

    nohup python <skill-creator-path>/eval-viewer/generate_review.py \
      <workspace>/iteration-N \
      --skill-name "my-skill" \
      --benchmark <workspace>/iteration-N/benchmark.json \
      > /dev/null 2>&1 &
    VIEWER_PID=$!
    

    For iteration 2+, also pass --previous-workspace <workspace>/iteration-<N-1>.

    Cowork / headless environments: If webbrowser.open() is not available or the environment has no display, use --static <output_path> to write a standalone HTML file instead of starting a server. Feedback will be downloaded as a feedback.json file when the user clicks "Submit All Reviews". After download, copy feedback.json into the workspace directory for the next iteration to pick up.

Note: please use generate_review.py to create the viewer; there's no need to write custom HTML.

  1. Tell the user something like: "I've opened the results in your browser. There are two tabs — 'Outputs' lets you click through each test case and leave feedback, 'Benchmark' shows the quantitative comparison. When you're done, come back here and let me know."

What the user sees in the viewer

The "Outputs" tab shows one test case at a time:

  • Prompt: the task that was given
  • Output: the files the skill produced, rendered inline where possible
  • Previous Output (iteration 2+): collapsed section showing last iteration's output
  • Formal Grades (if grading was run): collapsed section showing assertion pass/fail
  • Feedback: a textbox that auto-saves as they type
  • Previous Feedback (iteration 2+): their comments from last time, shown below the textbox

The "Benchmark" tab shows the stats summary: pass rates, timing, and token usage for each configuration, with per-eval breakdowns and analyst observations.

Navigation is via prev/next buttons or arrow keys. When done, they click "Submit All Reviews" which saves all feedback to feedback.json.

Step 5: Read the feedback

When the user tells you they're done, read feedback.json:

{
  "reviews": [
    {"run_id": "eval-0-with_skill", "feedback": "the chart is missing axis labels", "timestamp": "..."},
    {"run_id": "eval-1-with_skill", "feedback": "", "timestamp": "..."},
    {"run_id": "eval-2-with_skill", "feedback": "perfect, love this", "timestamp": "..."}
  ],
  "status": "complete"
}

Empty feedback means the user thought it was fine. Focus your improvements on the test cases where the user had specific complaints.

Kill the viewer server when you're done with it:

kill $VIEWER_PID 2>/dev/null

Improving the skill

This is the heart of the loop. You've run the test cases, the user has reviewed the results, and now you need to make the skill better based on their feedback.

How to think about improvements

  1. Generalize from the feedback. The big picture thing that's happening here is that we're trying to create skills that can be used a million times (maybe literally, maybe even more who knows) across many different prompts. Here you and the user are iterating on only a few examples over and over again because it helps move faster. The user knows these examples in and out and it's quick for them to assess new outputs. But if the skill you and the user are codeveloping works only for those examples, it's useless. Rather than put in fiddly overfitty changes, or oppressively constrictive MUSTs, if there's some stubborn issue, you might try branching out and using different metaphors, or recommending different patterns of working. It's relatively cheap to try and maybe you'll land on something great.

  2. Keep the prompt lean. Remove things that aren't pulling their weight. Make sure to read the transcripts, not just the final outputs — if it looks like the skill is making the model waste a bunch of time doing things that are unproductive, you can try getting rid of the parts of the skill that are making it do that and seeing what happens.

  3. Explain the why. Try hard to explain the why behind everything you're asking the model to do. Today's LLMs are smart. They have good theory of mind and when given a good harness can go beyond rote instructions and really make things happen. Even if the feedback from the user is terse or frustrated, try to actually understand the task and why the user is writing what they wrote, and what they actually wrote, and then transmit this understanding into the instructions. If you find yourself writing ALWAYS or NEVER in all caps, or using super rigid structures, that's a yellow flag — if possible, reframe and explain the reasoning so that the model understands why the thing you're asking for is important. That's a more humane, powerful, and effective approach.

  4. Look for repeated work across test cases. Read the transcripts from the test runs and notice if the subagents all independently wrote similar helper scripts or took the same multi-step approach to something. If all 3 test cases resulted in the subagent writing a create_docx.py or a build_chart.py, that's a strong signal the skill should bundle that script. Write it once, put it in scripts/, and tell the skill to use it. This saves every future invocation from reinventing the wheel.

This task is pretty important (we are trying to create billions a year in economic value here!) and your thinking time is not the blocker; take your time and really mull things over. I'd suggest writing a draft revision and then looking at it anew and making improvements. Really do your best to get into the head of the user and understand what they want and need.

The iteration loop

After improving the skill:

  1. Apply your improvements to the skill
  2. Rerun all test cases into a new iteration-<N+1>/ directory, including baseline runs. If you're creating a new skill, the baseline is always without_skill (no skill) — that stays the same across iterations. If you're improving an existing skill, use your judgment on what makes sense as the baseline: the original version the user came in with, or the previous iteration.
  3. Launch the reviewer with --previous-workspace pointing at the previous iteration
  4. Wait for the user to review and tell you they're done
  5. Read the new feedback, improve again, repeat

Keep going until:

  • The user says they're happy
  • The feedback is all empty (everything looks good)
  • You're not making meaningful progress

Advanced: Blind comparison

For situations where you want a more rigorous comparison between two versions of a skill (e.g., the user asks "is the new version actually better?"), there's a blind comparison system. Read agents/comparator.md and agents/analyzer.md for the details. The basic idea is: give two outputs to an independent agent without telling it which is which, and let it judge quality. Then analyze why the winner won.

This is optional, requires subagents, and most users won't need it. The human review loop is usually sufficient.


Description Optimization

The description field in SKILL.md frontmatter is the primary mechanism that determines whether Claude invokes a skill. After creating or improving a skill, offer to optimize the description for better triggering accuracy.

Step 1: Generate trigger eval queries

Create 20 eval queries — a mix of should-trigger and should-not-trigger. Save as JSON:

[
  {"query": "the user prompt", "should_trigger": true},
  {"query": "another prompt", "should_trigger": false}
]

The queries must be realistic and something a Claude Code or Claude.ai user would actually type. Not abstract requests, but requests that are concrete and specific and have a good amount of detail. For instance, file paths, personal context about the user's job or situation, column names and values, company names, URLs. A little bit of backstory. Some might be in lowercase or contain abbreviations or typos or casual speech. Use a mix of different lengths, and focus on edge cases rather than making them clear-cut (the user will get a chance to sign off on them).

Bad: "Format this data", "Extract text from PDF", "Create a chart"

Good: "ok so my boss just sent me this xlsx file (its in my downloads, called something like 'Q4 sales final FINAL v2.xlsx') and she wants me to add a column that shows the profit margin as a percentage. The revenue is in column C and costs are in column D i think"

For the should-trigger queries (8-10), think about coverage. You want different phrasings of the same intent — some formal, some casual. Include cases where the user doesn't explicitly name the skill or file type but clearly needs it. Throw in some uncommon use cases and cases where this skill competes with another but should win.

For the should-not-trigger queries (8-10), the most valuable ones are the near-misses — queries that share keywords or concepts with the skill but actually need something different. Think adjacent domains, ambiguous phrasing where a naive keyword match would trigger but shouldn't, and cases where the query touches on something the skill does but in a context where another tool is more appropriate.

The key thing to avoid: don't make should-not-trigger queries obviously irrelevant. "Write a fibonacci function" as a negative test for a PDF skill is too easy — it doesn't test anything. The negative cases should be genuinely tricky.

Step 2: Review with user

Present the eval set to the user for review using the HTML template:

  1. Read the template from assets/eval_review.html
  2. Replace the placeholders:
    • __EVAL_DATA_PLACEHOLDER__ → the JSON array of eval items (no quotes around it — it's a JS variable assignment)
    • __SKILL_NAME_PLACEHOLDER__ → the skill's name
    • __SKILL_DESCRIPTION_PLACEHOLDER__ → the skill's current description
  3. Write to a temp file (e.g., /tmp/eval_review_<skill-name>.html) and open it: open /tmp/eval_review_<skill-name>.html
  4. The user can edit queries, toggle should-trigger, add/remove entries, then click "Export Eval Set"
  5. The file downloads to ~/Downloads/eval_set.json — check the Downloads folder for the most recent version in case there are multiple (e.g., eval_set (1).json)

This step matters — bad eval queries lead to bad descriptions.

Step 3: Run the optimization loop

Tell the user: "This will take some time — I'll run the optimization loop in the background and check on it periodically."

Save the eval set to the workspace, then run in the background:

python -m scripts.run_loop \
  --eval-set <path-to-trigger-eval.json> \
  --skill-path <path-to-skill> \
  --model <model-id-powering-this-session> \
  --max-iterations 5 \
  --verbose

Use the model ID from your system prompt (the one powering the current session) so the triggering test matches what the user actually experiences.

While it runs, periodically tail the output to give the user updates on which iteration it's on and what the scores look like.

This handles the full optimization loop automatically. It splits the eval set into 60% train and 40% held-out test, evaluates the current description (running each query 3 times to get a reliable trigger rate), then calls Claude to propose improvements based on what failed. It re-evaluates each new description on both train and test, iterating up to 5 times. When it's done, it opens an HTML report in the browser showing the results per iteration and returns JSON with best_description — selected by test score rather than train score to avoid overfitting.

How skill triggering works

Understanding the triggering mechanism helps design better eval queries. Skills appear in Claude's available_skills list with their name + description, and Claude decides whether to consult a skill based on that description. The important thing to know is that Claude only consults skills for tasks it can't easily handle on its own — simple, one-step queries like "read this PDF" may not trigger a skill even if the description matches perfectly, because Claude can handle them directly with basic tools. Complex, multi-step, or specialized queries reliably trigger skills when the description matches.

This means your eval queries should be substantive enough that Claude would actually benefit from consulting a skill. Simple queries like "read file X" are poor test cases — they won't trigger skills regardless of description quality.

Step 4: Apply the result

Take best_description from the JSON output and update the skill's SKILL.md frontmatter. Show the user before/after and report the scores.


Package and Present (only if present_files tool is available)

Check whether you have access to the present_files tool. If you don't, skip this step. If you do, package the skill and present the .skill file to the user:

python -m scripts.package_skill <path/to/skill-folder>

After packaging, direct the user to the resulting .skill file path so they can install it.


Claude.ai-specific instructions

In Claude.ai, the core workflow is the same (draft → test → review → improve → repeat), but because Claude.ai doesn't have subagents, some mechanics change. Here's what to adapt:

Running test cases: No subagents means no parallel execution. For each test case, read the skill's SKILL.md, then follow its instructions to accomplish the test prompt yourself. Do them one at a time. This is less rigorous than independent subagents (you wrote the skill and you're also running it, so you have full context), but it's a useful sanity check — and the human review step compensates. Skip the baseline runs — just use the skill to complete the task as requested.

Reviewing results: If you can't open a browser (e.g., Claude.ai's VM has no display, or you're on a remote server), skip the browser reviewer entirely. Instead, present results directly in the conversation. For each test case, show the prompt and the output. If the output is a file the user needs to see (like a .docx or .xlsx), save it to the filesystem and tell them where it is so they can download and inspect it. Ask for feedback inline: "How does this look? Anything you'd change?"

Benchmarking: Skip the quantitative benchmarking — it relies on baseline comparisons which aren't meaningful without subagents. Focus on qualitative feedback from the user.

The iteration loop: Same as before — improve the skill, rerun the test cases, ask for feedback — just without the browser reviewer in the middle. You can still organize results into iteration directories on the filesystem if you have one.

Description optimization: This section requires the claude CLI tool (specifically claude -p) which is only available in Claude Code. Skip it if you're on Claude.ai.

Blind comparison: Requires subagents. Skip it.

Packaging: The package_skill.py script works anywhere with Python and a filesystem. On Claude.ai, you can run it and the user can download the resulting .skill file.

Updating an existing skill: The user might be asking you to update an existing skill, not create a new one. In this case:

  • Preserve the original name. Note the skill's directory name and name frontmatter field -- use them unchanged. E.g., if the installed skill is research-helper, output research-helper.skill (not research-helper-v2).
  • Copy to a writeable location before editing. The installed skill path may be read-only. Copy to /tmp/skill-name/, edit there, and package from the copy.
  • If packaging manually, stage in /tmp/ first, then copy to the output directory -- direct writes may fail due to permissions.

Cowork-Specific Instructions

If you're in Cowork, the main things to know are:

  • You have subagents, so the main workflow (spawn test cases in parallel, run baselines, grade, etc.) all works. (However, if you run into severe problems with timeouts, it's OK to run the test prompts in series rather than parallel.)
  • You don't have a browser or display, so when generating the eval viewer, use --static <output_path> to write a standalone HTML file instead of starting a server. Then proffer a link that the user can click to open the HTML in their browser.
  • For whatever reason, the Cowork setup seems to disincline Claude from generating the eval viewer after running the tests, so just to reiterate: whether you're in Cowork or in Claude Code, after running tests, you should always generate the eval viewer for the human to look at examples before revising the skill yourself and trying to make corrections, using generate_review.py (not writing your own boutique html code). Sorry in advance but I'm gonna go all caps here: GENERATE THE EVAL VIEWER BEFORE evaluating inputs yourself. You want to get them in front of the human ASAP!
  • Feedback works differently: since there's no running server, the viewer's "Submit All Reviews" button will download feedback.json as a file. You can then read it from there (you may have to request access first).
  • Packaging works — package_skill.py just needs Python and a filesystem.
  • Description optimization (run_loop.py / run_eval.py) should work in Cowork just fine since it uses claude -p via subprocess, not a browser, but please save it until you've fully finished making the skill and the user agrees it's in good shape.
  • Updating an existing skill: The user might be asking you to update an existing skill, not create a new one. Follow the update guidance in the claude.ai section above.

Reference files

The agents/ directory contains instructions for specialized subagents. Read them when you need to spawn the relevant subagent.

  • agents/grader.md — How to evaluate assertions against outputs
  • agents/comparator.md — How to do blind A/B comparison between two outputs
  • agents/analyzer.md — How to analyze why one version beat another

The references/ directory has additional documentation:

  • references/schemas.md — JSON structures for evals.json, grading.json, etc.

Repeating one more time the core loop here for emphasis:

  • Figure out what the skill is about
  • Draft or edit the skill
  • Run claude-with-access-to-the-skill on test prompts
  • With the user, evaluate the outputs:
    • Create benchmark.json and run eval-viewer/generate_review.py to help the user review them
    • Run quantitative evals
  • Repeat until you and the user are satisfied
  • Package the final skill and return it to the user.

Please add steps to your TodoList, if you have such a thing, to make sure you don't forget. If you're in Cowork, please specifically put "Create evals JSON and run eval-viewer/generate_review.py so human can review test cases" in your TodoList to make sure it happens.

Good luck!

用于创建优化适配 Slack 的动画 GIF。提供尺寸、帧率等参数约束,以及基于 PIL 的绘图工具和美化技巧,支持直接绘制或参考用户上传图像生成高质量动态图。
用户请求为 Slack 制作动画 GIF 需要生成符合 Slack 规范的 GIF 文件 询问如何优化 GIF 大小或质量
skills/anthropics_skills/slack-gif-creator/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill slack-gif-creator -g -y
SKILL.md
Frontmatter
{
    "name": "slack-gif-creator",
    "license": "Complete terms in LICENSE.txt",
    "description": "Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like \"make me a GIF of X doing Y for Slack.\""
}

Slack GIF Creator

A toolkit providing utilities and knowledge for creating animated GIFs optimized for Slack.

Slack Requirements

Dimensions:

  • Emoji GIFs: 128x128 (recommended)
  • Message GIFs: 480x480

Parameters:

  • FPS: 10-30 (lower is smaller file size)
  • Colors: 48-128 (fewer = smaller file size)
  • Duration: Keep under 3 seconds for emoji GIFs

Core Workflow

from core.gif_builder import GIFBuilder
from PIL import Image, ImageDraw

# 1. Create builder
builder = GIFBuilder(width=128, height=128, fps=10)

# 2. Generate frames
for i in range(12):
    frame = Image.new('RGB', (128, 128), (240, 248, 255))
    draw = ImageDraw.Draw(frame)

    # Draw your animation using PIL primitives
    # (circles, polygons, lines, etc.)

    builder.add_frame(frame)

# 3. Save with optimization
builder.save('output.gif', num_colors=48, optimize_for_emoji=True)

Drawing Graphics

Working with User-Uploaded Images

If a user uploads an image, consider whether they want to:

  • Use it directly (e.g., "animate this", "split this into frames")
  • Use it as inspiration (e.g., "make something like this")

Load and work with images using PIL:

from PIL import Image

uploaded = Image.open('file.png')
# Use directly, or just as reference for colors/style

Drawing from Scratch

When drawing graphics from scratch, use PIL ImageDraw primitives:

from PIL import ImageDraw

draw = ImageDraw.Draw(frame)

# Circles/ovals
draw.ellipse([x1, y1, x2, y2], fill=(r, g, b), outline=(r, g, b), width=3)

# Stars, triangles, any polygon
points = [(x1, y1), (x2, y2), (x3, y3), ...]
draw.polygon(points, fill=(r, g, b), outline=(r, g, b), width=3)

# Lines
draw.line([(x1, y1), (x2, y2)], fill=(r, g, b), width=5)

# Rectangles
draw.rectangle([x1, y1, x2, y2], fill=(r, g, b), outline=(r, g, b), width=3)

Don't use: Emoji fonts (unreliable across platforms) or assume pre-packaged graphics exist in this skill.

Making Graphics Look Good

Graphics should look polished and creative, not basic. Here's how:

Use thicker lines - Always set width=2 or higher for outlines and lines. Thin lines (width=1) look choppy and amateurish.

Add visual depth:

  • Use gradients for backgrounds (create_gradient_background)
  • Layer multiple shapes for complexity (e.g., a star with a smaller star inside)

Make shapes more interesting:

  • Don't just draw a plain circle - add highlights, rings, or patterns
  • Stars can have glows (draw larger, semi-transparent versions behind)
  • Combine multiple shapes (stars + sparkles, circles + rings)

Pay attention to colors:

  • Use vibrant, complementary colors
  • Add contrast (dark outlines on light shapes, light outlines on dark shapes)
  • Consider the overall composition

For complex shapes (hearts, snowflakes, etc.):

  • Use combinations of polygons and ellipses
  • Calculate points carefully for symmetry
  • Add details (a heart can have a highlight curve, snowflakes have intricate branches)

Be creative and detailed! A good Slack GIF should look polished, not like placeholder graphics.

Available Utilities

GIFBuilder (core.gif_builder)

Assembles frames and optimizes for Slack:

builder = GIFBuilder(width=128, height=128, fps=10)
builder.add_frame(frame)  # Add PIL Image
builder.add_frames(frames)  # Add list of frames
builder.save('out.gif', num_colors=48, optimize_for_emoji=True, remove_duplicates=True)

Validators (core.validators)

Check if GIF meets Slack requirements:

from core.validators import validate_gif, is_slack_ready

# Detailed validation
passes, info = validate_gif('my.gif', is_emoji=True, verbose=True)

# Quick check
if is_slack_ready('my.gif'):
    print("Ready!")

Easing Functions (core.easing)

Smooth motion instead of linear:

from core.easing import interpolate

# Progress from 0.0 to 1.0
t = i / (num_frames - 1)

# Apply easing
y = interpolate(start=0, end=400, t=t, easing='ease_out')

# Available: linear, ease_in, ease_out, ease_in_out,
#           bounce_out, elastic_out, back_out

Frame Helpers (core.frame_composer)

Convenience functions for common needs:

from core.frame_composer import (
    create_blank_frame,         # Solid color background
    create_gradient_background,  # Vertical gradient
    draw_circle,                # Helper for circles
    draw_text,                  # Simple text rendering
    draw_star                   # 5-pointed star
)

Animation Concepts

Shake/Vibrate

Offset object position with oscillation:

  • Use math.sin() or math.cos() with frame index
  • Add small random variations for natural feel
  • Apply to x and/or y position

Pulse/Heartbeat

Scale object size rhythmically:

  • Use math.sin(t * frequency * 2 * math.pi) for smooth pulse
  • For heartbeat: two quick pulses then pause (adjust sine wave)
  • Scale between 0.8 and 1.2 of base size

Bounce

Object falls and bounces:

  • Use interpolate() with easing='bounce_out' for landing
  • Use easing='ease_in' for falling (accelerating)
  • Apply gravity by increasing y velocity each frame

Spin/Rotate

Rotate object around center:

  • PIL: image.rotate(angle, resample=Image.BICUBIC)
  • For wobble: use sine wave for angle instead of linear

Fade In/Out

Gradually appear or disappear:

  • Create RGBA image, adjust alpha channel
  • Or use Image.blend(image1, image2, alpha)
  • Fade in: alpha from 0 to 1
  • Fade out: alpha from 1 to 0

Slide

Move object from off-screen to position:

  • Start position: outside frame bounds
  • End position: target location
  • Use interpolate() with easing='ease_out' for smooth stop
  • For overshoot: use easing='back_out'

Zoom

Scale and position for zoom effect:

  • Zoom in: scale from 0.1 to 2.0, crop center
  • Zoom out: scale from 2.0 to 1.0
  • Can add motion blur for drama (PIL filter)

Explode/Particle Burst

Create particles radiating outward:

  • Generate particles with random angles and velocities
  • Update each particle: x += vx, y += vy
  • Add gravity: vy += gravity_constant
  • Fade out particles over time (reduce alpha)

Optimization Strategies

Only when asked to make the file size smaller, implement a few of the following methods:

  1. Fewer frames - Lower FPS (10 instead of 20) or shorter duration
  2. Fewer colors - num_colors=48 instead of 128
  3. Smaller dimensions - 128x128 instead of 480x480
  4. Remove duplicates - remove_duplicates=True in save()
  5. Emoji mode - optimize_for_emoji=True auto-optimizes
# Maximum optimization for emoji
builder.save(
    'emoji.gif',
    num_colors=48,
    optimize_for_emoji=True,
    remove_duplicates=True
)

Philosophy

This skill provides:

  • Knowledge: Slack's requirements and animation concepts
  • Utilities: GIFBuilder, validators, easing functions
  • Flexibility: Create the animation logic using PIL primitives

It does NOT provide:

  • Rigid animation templates or pre-made functions
  • Emoji font rendering (unreliable across platforms)
  • A library of pre-packaged graphics built into the skill

Note on user uploads: This skill doesn't include pre-built graphics, but if a user uploads an image, use PIL to load and work with it - interpret based on their request whether they want it used directly or just as inspiration.

Be creative! Combine concepts (bouncing + rotating, pulsing + sliding, etc.) and use PIL's full capabilities.

Dependencies

pip install pillow imageio numpy
提供10种预设及自定义主题,用于为演示文稿、文档等工件应用专业的字体和配色方案。通过展示主题供选择,读取配置并统一应用样式,确保视觉一致性与可读性。
用户需要为PPT或文档设置风格 用户希望统一页面配色与字体 现有主题不满足需求需创建新主题
skills/anthropics_skills/theme-factory/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill theme-factory -g -y
SKILL.md
Frontmatter
{
    "name": "theme-factory",
    "license": "Complete terms in LICENSE.txt",
    "description": "Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors\/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly."
}

Theme Factory Skill

This skill provides a curated collection of professional font and color themes themes, each with carefully selected color palettes and font pairings. Once a theme is chosen, it can be applied to any artifact.

Purpose

To apply consistent, professional styling to presentation slide decks, use this skill. Each theme includes:

  • A cohesive color palette with hex codes
  • Complementary font pairings for headers and body text
  • A distinct visual identity suitable for different contexts and audiences

Usage Instructions

To apply styling to a slide deck or other artifact:

  1. Show the theme showcase: Display the theme-showcase.pdf file to allow users to see all available themes visually. Do not make any modifications to it; simply show the file for viewing.
  2. Ask for their choice: Ask which theme to apply to the deck
  3. Wait for selection: Get explicit confirmation about the chosen theme
  4. Apply the theme: Once a theme has been chosen, apply the selected theme's colors and fonts to the deck/artifact

Themes Available

The following 10 themes are available, each showcased in theme-showcase.pdf:

  1. Ocean Depths - Professional and calming maritime theme
  2. Sunset Boulevard - Warm and vibrant sunset colors
  3. Forest Canopy - Natural and grounded earth tones
  4. Modern Minimalist - Clean and contemporary grayscale
  5. Golden Hour - Rich and warm autumnal palette
  6. Arctic Frost - Cool and crisp winter-inspired theme
  7. Desert Rose - Soft and sophisticated dusty tones
  8. Tech Innovation - Bold and modern tech aesthetic
  9. Botanical Garden - Fresh and organic garden colors
  10. Midnight Galaxy - Dramatic and cosmic deep tones

Theme Details

Each theme is defined in the themes/ directory with complete specifications including:

  • Cohesive color palette with hex codes
  • Complementary font pairings for headers and body text
  • Distinct visual identity suitable for different contexts and audiences

Application Process

After a preferred theme is selected:

  1. Read the corresponding theme file from the themes/ directory
  2. Apply the specified colors and fonts consistently throughout the deck
  3. Ensure proper contrast and readability
  4. Maintain the theme's visual identity across all slides

Create your Own Theme

To handle cases where none of the existing themes work for an artifact, create a custom theme. Based on provided inputs, generate a new theme similar to the ones above. Give the theme a similar name describing what the font/color combinations represent. Use any basic description provided to choose appropriate colors/fonts. After generating the theme, show it for review and verification. Following that, apply the theme as described above.

用于构建复杂交互式HTML组件的工具集。基于React、Tailwind和shadcn/ui,通过初始化项目、开发及打包脚本生成单文件HTML,避免AI生成的廉价感设计,适用于需状态管理或路由的复杂场景。
用户要求创建复杂的交互式前端组件 需要包含状态管理、路由或shadcn/ui组件的多部分应用 请求生成可分享的独立HTML artifact
skills/anthropics_skills/web-artifacts-builder/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill web-artifacts-builder -g -y
SKILL.md
Frontmatter
{
    "name": "web-artifacts-builder",
    "license": "Complete terms in LICENSE.txt",
    "description": "Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\/ui). Use for complex artifacts requiring state management, routing, or shadcn\/ui components - not for simple single-file HTML\/JSX artifacts."
}

Web Artifacts Builder

To build powerful frontend claude.ai artifacts, follow these steps:

  1. Initialize the frontend repo using scripts/init-artifact.sh
  2. Develop your artifact by editing the generated code
  3. Bundle all code into a single HTML file using scripts/bundle-artifact.sh
  4. Display artifact to user
  5. (Optional) Test the artifact

Stack: React 18 + TypeScript + Vite + Parcel (bundling) + Tailwind CSS + shadcn/ui

Design & Style Guidelines

VERY IMPORTANT: To avoid what is often referred to as "AI slop", avoid using excessive centered layouts, purple gradients, uniform rounded corners, and Inter font.

Quick Start

Step 1: Initialize Project

Run the initialization script to create a new React project:

bash scripts/init-artifact.sh <project-name>
cd <project-name>

This creates a fully configured project with:

  • ✅ React + TypeScript (via Vite)
  • ✅ Tailwind CSS 3.4.1 with shadcn/ui theming system
  • ✅ Path aliases (@/) configured
  • ✅ 40+ shadcn/ui components pre-installed
  • ✅ All Radix UI dependencies included
  • ✅ Parcel configured for bundling (via .parcelrc)
  • ✅ Node 18+ compatibility (auto-detects and pins Vite version)

Step 2: Develop Your Artifact

To build the artifact, edit the generated files. See Common Development Tasks below for guidance.

Step 3: Bundle to Single HTML File

To bundle the React app into a single HTML artifact:

bash scripts/bundle-artifact.sh

This creates bundle.html - a self-contained artifact with all JavaScript, CSS, and dependencies inlined. This file can be directly shared in Claude conversations as an artifact.

Requirements: Your project must have an index.html in the root directory.

What the script does:

  • Installs bundling dependencies (parcel, @parcel/config-default, parcel-resolver-tspaths, html-inline)
  • Creates .parcelrc config with path alias support
  • Builds with Parcel (no source maps)
  • Inlines all assets into single HTML using html-inline

Step 4: Share Artifact with User

Finally, share the bundled HTML file in conversation with the user so they can view it as an artifact.

Step 5: Testing/Visualizing the Artifact (Optional)

Note: This is a completely optional step. Only perform if necessary or requested.

To test/visualize the artifact, use available tools (including other Skills or built-in tools like Playwright or Puppeteer). In general, avoid testing the artifact upfront as it adds latency between the request and when the finished artifact can be seen. Test later, after presenting the artifact, if requested or if issues arise.

Reference

基于Playwright的本地Web应用测试工具包。支持管理服务器生命周期、验证前端功能、调试UI行为、捕获截图及查看日志。推荐通过决策树选择方案,并采用‘侦察-行动’模式确保动态页面加载完成后再进行DOM检查和操作。
需要测试本地运行的Web应用 需要验证前端页面功能或UI交互 需要捕获浏览器截图或调试UI行为 需要自动化执行Web页面的点击或输入操作
skills/anthropics_skills/webapp-testing/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill webapp-testing -g -y
SKILL.md
Frontmatter
{
    "name": "webapp-testing",
    "license": "Complete terms in LICENSE.txt",
    "description": "Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs."
}

Web Application Testing

To test local web applications, write native Python Playwright scripts.

Helper Scripts Available:

  • scripts/with_server.py - Manages server lifecycle (supports multiple servers)

Always run scripts with --help first to see usage. DO NOT read the source until you try running the script first and find that a customized solution is abslutely necessary. These scripts can be very large and thus pollute your context window. They exist to be called directly as black-box scripts rather than ingested into your context window.

Decision Tree: Choosing Your Approach

User task → Is it static HTML?
    ├─ Yes → Read HTML file directly to identify selectors
    │         ├─ Success → Write Playwright script using selectors
    │         └─ Fails/Incomplete → Treat as dynamic (below)
    │
    └─ No (dynamic webapp) → Is the server already running?
        ├─ No → Run: python scripts/with_server.py --help
        │        Then use the helper + write simplified Playwright script
        │
        └─ Yes → Reconnaissance-then-action:
            1. Navigate and wait for networkidle
            2. Take screenshot or inspect DOM
            3. Identify selectors from rendered state
            4. Execute actions with discovered selectors

Example: Using with_server.py

To start a server, run --help first, then use the helper:

Single server:

python scripts/with_server.py --server "npm run dev" --port 5173 -- python your_automation.py

Multiple servers (e.g., backend + frontend):

python scripts/with_server.py \
  --server "cd backend && python server.py" --port 3000 \
  --server "cd frontend && npm run dev" --port 5173 \
  -- python your_automation.py

To create an automation script, include only Playwright logic (servers are managed automatically):

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True) # Always launch chromium in headless mode
    page = browser.new_page()
    page.goto('http://localhost:5173') # Server already running and ready
    page.wait_for_load_state('networkidle') # CRITICAL: Wait for JS to execute
    # ... your automation logic
    browser.close()

Reconnaissance-Then-Action Pattern

  1. Inspect rendered DOM:

    page.screenshot(path='/tmp/inspect.png', full_page=True)
    content = page.content()
    page.locator('button').all()
    
  2. Identify selectors from inspection results

  3. Execute actions using discovered selectors

Common Pitfall

Don't inspect the DOM before waiting for networkidle on dynamic apps ✅ Do wait for page.wait_for_load_state('networkidle') before inspection

Best Practices

  • Use bundled scripts as black boxes - To accomplish a task, consider whether one of the scripts available in scripts/ can help. These scripts handle common, complex workflows reliably without cluttering the context window. Use --help to see usage, then invoke directly.
  • Use sync_playwright() for synchronous scripts
  • Always close the browser when done
  • Use descriptive selectors: text=, role=, CSS selectors, or IDs
  • Add appropriate waits: page.wait_for_selector() or page.wait_for_timeout()

Reference Files

  • examples/ - Examples showing common patterns:
    • element_discovery.py - Discovering buttons, links, and inputs on a page
    • static_html_automation.py - Using file:// URLs for local HTML
    • console_logging.py - Capturing console logs during automation
通过 CLI 自动化浏览器操作,支持网页导航、表单填写、截图及数据提取。利用持久化后台守护进程实现低延迟交互,兼容本地 Chrome、指定配置文件及云端浏览器模式,适用于 Web 测试与信息抓取。
需要自动登录或保持 Cookie 状态 执行复杂的网页表单填写任务 从动态网页中提取结构化数据 生成网页截图或进行 UI 测试
skills/browser-use_browser-use/browser-use/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill browser-use -g -y
SKILL.md
Frontmatter
{
    "name": "browser-use",
    "description": "Automates browser interactions for web testing, form filling, screenshots, and data extraction. Use when the user needs to navigate websites, interact with web pages, fill forms, take screenshots, or extract information from web pages.",
    "allowed-tools": "Bash(browser-use:*)"
}

Browser Automation with browser-use CLI

The browser-use command provides fast, persistent browser automation. A background daemon keeps the browser open across commands, giving ~50ms latency per call.

Prerequisites

browser-use doctor    # Verify installation

For setup details, see https://github.com/browser-use/browser-use/blob/main/browser_use/skill_cli/README.md

Core Workflow

  1. Navigate: browser-use open <url> — launches headless browser and opens page
  2. Inspect: browser-use state — returns clickable elements with indices
  3. Interact: use indices from state (browser-use click 5, browser-use input 3 "text")
  4. Verify: browser-use state or browser-use screenshot to confirm
  5. Repeat: browser stays open between commands

If a command fails, run browser-use close first to clear any broken session, then retry.

To use the user's existing Chrome (preserves logins/cookies): run browser-use connect first. To use a cloud browser instead: run browser-use cloud connect first. After either, commands work the same way.

If browser-use connect fails

When browser-use connect cannot find a running Chrome with remote debugging, prompt the user with two options:

  1. Use their real Chrome browser — they need to enable remote debugging first:
    • Open chrome://inspect/#remote-debugging in Chrome, or relaunch Chrome with --remote-debugging-port=9222
    • Then retry browser-use connect
  2. Use managed Chromium with their Chrome profile — no Chrome setup needed:
    • Run browser-use profile list to show available profiles
    • Ask which profile they want, then use browser-use --profile "ProfileName" open <url>
    • This launches a separate Chromium instance with their profile data (cookies, logins, extensions)

Let the user choose — don't assume one path over the other.

Browser Modes

browser-use open <url>                         # Default: headless Chromium (no setup needed)
browser-use --headed open <url>                # Visible window (for debugging)
browser-use connect                            # Connect to user's Chrome (preserves logins/cookies)
browser-use cloud connect                      # Cloud browser (zero-config, requires API key)
browser-use --profile "Default" open <url>     # Real Chrome with specific profile

After connect or cloud connect, all subsequent commands go to that browser — no extra flags needed.

Commands

# Navigation
browser-use open <url>                    # Navigate to URL
browser-use back                          # Go back in history
browser-use scroll down                   # Scroll down (--amount N for pixels)
browser-use scroll up                     # Scroll up
browser-use tab list                      # List all tabs
browser-use tab new [url]                 # Open a new tab (blank or with URL)
browser-use tab switch <index>            # Switch to tab by index
browser-use tab close <index> [index...]  # Close one or more tabs

# Page State — always run state first to get element indices
browser-use state                         # URL, title, clickable elements with indices
browser-use screenshot [path.png]         # Screenshot (base64 if no path, --full for full page)

# Interactions — use indices from state
browser-use click <index>                 # Click element by index
browser-use click <x> <y>                 # Click at pixel coordinates
browser-use type "text"                   # Type into focused element
browser-use input <index> "text"          # Click element, clear existing text, then type
browser-use input <index> ""              # Clear a field without typing new text
browser-use keys "Enter"                  # Send keyboard keys (also "Control+a", etc.)
browser-use select <index> "option"       # Select dropdown option
browser-use upload <index> <path>         # Upload file to file input
browser-use hover <index>                 # Hover over element
browser-use dblclick <index>              # Double-click element
browser-use rightclick <index>            # Right-click element

# Data Extraction
browser-use eval "js code"                # Execute JavaScript, return result
browser-use get title                     # Page title
browser-use get html [--selector "h1"]    # Page HTML (or scoped to selector)
browser-use get text <index>              # Element text content
browser-use get value <index>             # Input/textarea value
browser-use get attributes <index>        # Element attributes
browser-use get bbox <index>              # Bounding box (x, y, width, height)

# Wait
browser-use wait selector "css"           # Wait for element (--state visible|hidden|attached|detached, --timeout ms)
browser-use wait text "text"              # Wait for text to appear

# Cookies
browser-use cookies get [--url <url>]     # Get cookies (optionally filtered)
browser-use cookies set <name> <value>    # Set cookie (--domain, --secure, --http-only, --same-site, --expires)
browser-use cookies clear [--url <url>]   # Clear cookies
browser-use cookies export <file>         # Export to JSON
browser-use cookies import <file>         # Import from JSON

# Session
browser-use close                         # Close browser and stop daemon
browser-use sessions                      # List active sessions
browser-use close --all                   # Close all sessions

For advanced browser control (CDP, device emulation, tab activation), see references/cdp-python.md.

Cloud API

browser-use cloud connect                 # Provision cloud browser and connect (zero-config)
browser-use cloud login <api-key>         # Save API key (or set BROWSER_USE_API_KEY)
browser-use cloud logout                  # Remove API key
browser-use cloud v2 GET /browsers        # REST passthrough (v2 or v3)
browser-use cloud v2 POST /tasks '{"task":"...","url":"..."}'
browser-use cloud v2 poll <task-id>       # Poll task until done
browser-use cloud v2 --help               # Show API endpoints

cloud connect provisions a cloud browser with a persistent profile (auto-created on first use), connects via CDP, and prints a live URL. browser-use close disconnects AND stops the cloud browser. For custom browser settings (proxy, timeout, specific profile), use cloud v2 POST /browsers directly with the desired parameters.

Agent Self-Registration

Only use this if you don't already have an API key (check browser-use doctor to see if api_key is set). If already logged in, skip this entirely.

  1. browser-use cloud signup — get a challenge
  2. Solve the challenge
  3. browser-use cloud signup --verify <challenge-id> <answer> — verify and save API key
  4. browser-use cloud signup --claim — generate URL for a human to claim the account

Tunnels

browser-use tunnel <port>                 # Start Cloudflare tunnel (idempotent)
browser-use tunnel list                   # Show active tunnels
browser-use tunnel stop <port>            # Stop tunnel
browser-use tunnel stop --all             # Stop all tunnels

Profile Management

browser-use profile list                  # List detected browsers and profiles
browser-use profile sync --all            # Sync profiles to cloud
browser-use profile update                # Download/update profile-use binary

Command Chaining

Commands can be chained with &&. The browser persists via the daemon, so chaining is safe and efficient.

browser-use open https://example.com && browser-use state
browser-use input 5 "user@example.com" && browser-use input 6 "password" && browser-use click 7

Chain when you don't need intermediate output. Run separately when you need to parse state to discover indices first.

Common Workflows

Authenticated Browsing

When a task requires an authenticated site (Gmail, GitHub, internal tools), use Chrome profiles:

browser-use profile list                           # Check available profiles
# Ask the user which profile to use, then:
browser-use --profile "Default" open https://github.com  # Already logged in

Exposing Local Dev Servers

browser-use tunnel 3000                            # → https://abc.trycloudflare.com
browser-use open https://abc.trycloudflare.com     # Browse the tunnel

Multiple Browsers

For subagent workflows or running multiple browsers in parallel, use --session NAME. Each session gets its own browser. See references/multi-session.md.

Configuration

browser-use config list                            # Show all config values
browser-use config set cloud_connect_proxy jp      # Set a value
browser-use config get cloud_connect_proxy         # Get a value
browser-use config unset cloud_connect_timeout     # Remove a value
browser-use doctor                                 # Shows config + diagnostics
browser-use setup                                  # Interactive post-install setup

Config stored in ~/.browser-use/config.json.

Global Options

Option Description
--headed Show browser window
--profile [NAME] Use real Chrome (bare --profile uses "Default")
--cdp-url <url> Connect via CDP URL (http:// or ws://)
--session NAME Target a named session (default: "default")
--json Output as JSON
--mcp Run as MCP server via stdin/stdout

Tips

  1. Always run state first to see available elements and their indices
  2. Use --headed for debugging to see what the browser is doing
  3. Sessions persist — browser stays open between commands
  4. CLI aliases: bu, browser, and browseruse all work
  5. If commands fail, run browser-use close first, then retry

Troubleshooting

  • Browser won't start? browser-use close then browser-use --headed open <url>
  • Element not found? browser-use scroll down then browser-use state
  • Run diagnostics: browser-use doctor

Cleanup

browser-use close                         # Close browser session
browser-use tunnel stop --all             # Stop tunnels (if any)
专为沙箱环境设计的浏览器自动化技能,支持在无GUI的远程机器上控制无头浏览器。涵盖导航、元素交互、截图及数据提取,适用于网页测试、表单填写和本地开发服务器隧道暴露等场景。
需要在无图形界面的沙箱或云端环境中浏览网页 需要自动化操作Web页面如点击、输入、截图 需要从远程服务器访问本地Web服务或调试页面
skills/browser-use_browser-use/remote-browser/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill remote-browser -g -y
SKILL.md
Frontmatter
{
    "name": "remote-browser",
    "description": "Controls a local browser from a sandboxed remote machine. Use when the agent is running in a sandbox (no GUI) and needs to navigate websites, interact with web pages, fill forms, take screenshots, or expose local dev servers via tunnels.",
    "allowed-tools": "Bash(browser-use:*)"
}

Browser Automation for Sandboxed Agents

This skill is for agents running on sandboxed remote machines (cloud VMs, CI, coding agents) that need to control a headless browser.

Prerequisites

browser-use doctor    # Verify installation

For setup details, see https://github.com/browser-use/browser-use/blob/main/browser_use/skill_cli/README.md

Core Workflow

  1. Navigate: browser-use open <url> — starts headless browser if needed
  2. Inspect: browser-use state — returns clickable elements with indices
  3. Interact: use indices from state (browser-use click 5, browser-use input 3 "text")
  4. Verify: browser-use state or browser-use screenshot to confirm
  5. Repeat: browser stays open between commands
  6. Cleanup: browser-use close when done

Browser Modes

browser-use open <url>                                    # Default: headless Chromium
browser-use cloud connect                                 # Provision cloud browser and connect
browser-use --connect open <url>                          # Auto-discover running Chrome via CDP
browser-use --cdp-url ws://localhost:9222/... open <url>  # Connect via CDP URL

Commands

# Navigation
browser-use open <url>                    # Navigate to URL
browser-use back                          # Go back in history
browser-use scroll down                   # Scroll down (--amount N for pixels)
browser-use scroll up                     # Scroll up
browser-use tab list                      # List all tabs with lock status
browser-use tab new [url]                 # Open a new tab (blank or with URL)
browser-use tab switch <index>            # Switch to tab by index
browser-use tab close <index> [index...]  # Close one or more tabs

# Page State — always run state first to get element indices
browser-use state                         # URL, title, clickable elements with indices
browser-use screenshot [path.png]         # Screenshot (base64 if no path, --full for full page)

# Interactions — use indices from state
browser-use click <index>                 # Click element by index
browser-use click <x> <y>                 # Click at pixel coordinates
browser-use type "text"                   # Type into focused element
browser-use input <index> "text"          # Click element, then type
browser-use keys "Enter"                  # Send keyboard keys (also "Control+a", etc.)
browser-use select <index> "option"       # Select dropdown option
browser-use upload <index> <path>         # Upload file to file input
browser-use hover <index>                 # Hover over element
browser-use dblclick <index>              # Double-click element
browser-use rightclick <index>            # Right-click element

# Data Extraction
browser-use eval "js code"                # Execute JavaScript, return result
browser-use get title                     # Page title
browser-use get html [--selector "h1"]    # Page HTML (or scoped to selector)
browser-use get text <index>              # Element text content
browser-use get value <index>             # Input/textarea value
browser-use get attributes <index>        # Element attributes
browser-use get bbox <index>              # Bounding box (x, y, width, height)

# Wait
browser-use wait selector "css"           # Wait for element (--state visible|hidden|attached|detached, --timeout ms)
browser-use wait text "text"              # Wait for text to appear

# Cookies
browser-use cookies get [--url <url>]     # Get cookies (optionally filtered)
browser-use cookies set <name> <value>    # Set cookie (--domain, --secure, --http-only, --same-site, --expires)
browser-use cookies clear [--url <url>]   # Clear cookies
browser-use cookies export <file>         # Export to JSON
browser-use cookies import <file>         # Import from JSON

# Python — persistent session with browser access
browser-use python "code"                 # Execute Python (variables persist across calls)
browser-use python --file script.py       # Run file
browser-use python --vars                 # Show defined variables
browser-use python --reset                # Clear namespace

# Session
browser-use close                         # Close browser and stop daemon
browser-use sessions                      # List active sessions
browser-use close --all                   # Close all sessions

The Python browser object provides: browser.url, browser.title, browser.html, browser.goto(url), browser.back(), browser.click(index), browser.type(text), browser.input(index, text), browser.keys(keys), browser.upload(index, path), browser.screenshot(path), browser.scroll(direction, amount), browser.wait(seconds).

Tunnels

Expose local dev servers to the browser via Cloudflare tunnels.

browser-use tunnel <port>                 # Start tunnel (idempotent)
browser-use tunnel list                   # Show active tunnels
browser-use tunnel stop <port>            # Stop tunnel
browser-use tunnel stop --all             # Stop all tunnels

Command Chaining

Commands can be chained with &&. The browser persists via the daemon, so chaining is safe and efficient.

browser-use open https://example.com && browser-use state
browser-use input 5 "user@example.com" && browser-use input 6 "password" && browser-use click 7

Chain when you don't need intermediate output. Run separately when you need to parse state to discover indices first.

Common Workflows

Exposing Local Dev Servers

python -m http.server 3000 &                      # Start dev server
browser-use tunnel 3000                            # → https://abc.trycloudflare.com
browser-use open https://abc.trycloudflare.com     # Browse the tunnel

Tunnels are independent of browser sessions and persist across browser-use close.

Multi-Agent (--connect mode)

Multiple agents can share one browser via --connect. Each agent gets its own tab — other agents can't interfere.

Setup: Register once, then pass the index with every --connect command:

INDEX=$(browser-use register)                    # → prints "1"
browser-use --connect $INDEX open <url>          # Navigate in agent's own tab
browser-use --connect $INDEX state               # Get state from agent's tab
browser-use --connect $INDEX click <element>     # Click in agent's tab
  • Tab locking: When an agent mutates a tab (click, type, navigate), that tab is locked to it. Other agents get an error if they try to mutate the same tab.
  • Read-only access: state, screenshot, get, and wait commands work on any tab regardless of locks.
  • Agent sessions expire after 5 minutes of inactivity. Run browser-use register again to get a new index.

Global Options

Option Description
--headed Show browser window
--connect Auto-discover running Chrome via CDP
--cdp-url <url> Connect via CDP URL (http:// or ws://)
--session NAME Target a named session (default: "default")
--json Output as JSON

Tips

  1. Always run state first to see available elements and their indices
  2. Sessions persist — browser stays open between commands until you close it
  3. Tunnels are independent — they persist across browser-use close
  4. tunnel is idempotent — calling again for the same port returns the existing URL

Troubleshooting

  • Browser won't start? browser-use close then retry. Run browser-use doctor to check.
  • Element not found? browser-use scroll down then browser-use state
  • Tunnel not working? which cloudflared to check, browser-use tunnel list to see active tunnels

Cleanup

browser-use close                         # Close browser session
browser-use tunnel stop --all             # Stop tunnels (if any)
基于Manim社区版的数学与技术动画制作流水线,生成3Blue1Brown风格视频。涵盖概念解释、公式推导、算法可视化及数据故事等场景,强调几何直观、视觉层次与叙事节奏,无需GPU即可渲染高质量教育动画。
用户请求制作数学或技术类动画视频 需要3Blue1Brown风格的几何直觉解释 要求将算法执行过程可视化 需要动态展示数据对比或统计图表 请求用程序化方式呈现抽象数学概念
skills/browser-use_video-use/manim-video/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill manim-video -g -y
SKILL.md
Frontmatter
{
    "name": "manim-video",
    "version": "1.0.0",
    "description": "Production pipeline for mathematical and technical animations using Manim Community Edition. Creates 3Blue1Brown-style explainer videos, algorithm visualizations, equation derivations, architecture diagrams, and data stories. Use when users request: animated explanations, math animations, concept visualizations, algorithm walkthroughs, technical explainers, 3Blue1Brown style videos, or any programmatic animation with geometric\/mathematical content."
}

Manim Video Production Pipeline

Creative Standard

This is educational cinema. Every frame teaches. Every animation reveals structure.

Before writing a single line of code, articulate the narrative arc. What misconception does this correct? What is the "aha moment"? What visual story takes the viewer from confusion to understanding? The user's prompt is a starting point — interpret it with pedagogical ambition.

Geometry before algebra. Show the shape first, the equation second. Visual memory encodes faster than symbolic memory. When the viewer sees the geometric pattern before the formula, the equation feels earned.

First-render excellence is non-negotiable. The output must be visually clear and aesthetically cohesive without revision rounds. If something looks cluttered, poorly timed, or like "AI-generated slides," it is wrong.

Opacity layering directs attention. Never show everything at full brightness. Primary elements at 1.0, contextual elements at 0.4, structural elements (axes, grids) at 0.15. The brain processes visual salience in layers.

Breathing room. Every animation needs self.wait() after it. The viewer needs time to absorb what just appeared. Never rush from one animation to the next. A 2-second pause after a key reveal is never wasted.

Cohesive visual language. All scenes share a color palette, consistent typography sizing, matching animation speeds. A technically correct video where every scene uses random different colors is an aesthetic failure.

Prerequisites

Run scripts/setup.sh to verify all dependencies. Requires: Python 3.10+, Manim Community Edition v0.20+ (pip install manim), LaTeX (texlive-full on Linux, mactex on macOS), and ffmpeg. Reference docs tested against Manim CE v0.20.1.

Modes

Mode Input Output Reference
Concept explainer Topic/concept Animated explanation with geometric intuition references/scene-planning.md
Equation derivation Math expressions Step-by-step animated proof references/equations.md
Algorithm visualization Algorithm description Step-by-step execution with data structures references/graphs-and-data.md
Data story Data/metrics Animated charts, comparisons, counters references/graphs-and-data.md
Architecture diagram System description Components building up with connections references/mobjects.md
Paper explainer Research paper Key findings and methods animated references/scene-planning.md
3D visualization 3D concept Rotating surfaces, parametric curves, spatial geometry references/camera-and-3d.md

Stack

Single Python script per project. No browser, no Node.js, no GPU required.

Layer Tool Purpose
Core Manim Community Edition Scene rendering, animation engine
Math LaTeX (texlive/MiKTeX) Equation rendering via MathTex
Video I/O ffmpeg Scene stitching, format conversion, audio muxing
TTS ElevenLabs / Qwen3-TTS (optional) Narration voiceover

Pipeline

PLAN --> CODE --> RENDER --> STITCH --> AUDIO (optional) --> REVIEW
  1. PLAN — Write plan.md with narrative arc, scene list, visual elements, color palette, voiceover script
  2. CODE — Write script.py with one class per scene, each independently renderable
  3. RENDERmanim -ql script.py Scene1 Scene2 ... for draft, -qh for production
  4. STITCH — ffmpeg concat of scene clips into final.mp4
  5. AUDIO (optional) — Add voiceover and/or background music via ffmpeg. See references/rendering.md
  6. REVIEW — Render preview stills, verify against plan, adjust

Project Structure

project-name/
  plan.md                # Narrative arc, scene breakdown
  script.py              # All scenes in one file
  concat.txt             # ffmpeg scene list
  final.mp4              # Stitched output
  media/                 # Auto-generated by Manim
    videos/script/480p15/

Creative Direction

Color Palettes

Palette Background Primary Secondary Accent Use case
Classic 3B1B #1C1C1C #58C4DD (BLUE) #83C167 (GREEN) #FFFF00 (YELLOW) General math/CS
Warm academic #2D2B55 #FF6B6B #FFD93D #6BCB77 Approachable
Neon tech #0A0A0A #00F5FF #FF00FF #39FF14 Systems, architecture
Monochrome #1A1A2E #EAEAEA #888888 #FFFFFF Minimalist

Animation Speed

Context run_time self.wait() after
Title/intro appear 1.5s 1.0s
Key equation reveal 2.0s 2.0s
Transform/morph 1.5s 1.5s
Supporting label 0.8s 0.5s
FadeOut cleanup 0.5s 0.3s
"Aha moment" reveal 2.5s 3.0s

Typography Scale

Role Font size Usage
Title 48 Scene titles, opening text
Heading 36 Section headers within a scene
Body 30 Explanatory text
Label 24 Annotations, axis labels
Caption 20 Subtitles, fine print

Fonts

Use monospace fonts for all text. Manim's Pango renderer produces broken kerning with proportional fonts at all sizes. See references/visual-design.md for full recommendations.

MONO = "Menlo"  # define once at top of file

Text("Fourier Series", font_size=48, font=MONO, weight=BOLD)  # titles
Text("n=1: sin(x)", font_size=20, font=MONO)                  # labels
MathTex(r"\nabla L")                                            # math (uses LaTeX)

Minimum font_size=18 for readability.

Per-Scene Variation

Never use identical config for all scenes. For each scene:

  • Different dominant color from the palette
  • Different layout — don't always center everything
  • Different animation entry — vary between Write, FadeIn, GrowFromCenter, Create
  • Different visual weight — some scenes dense, others sparse

Workflow

Step 1: Plan (plan.md)

Before any code, write plan.md. See references/scene-planning.md for the comprehensive template.

Step 2: Code (script.py)

One class per scene. Every scene is independently renderable.

from manim import *

BG = "#1C1C1C"
PRIMARY = "#58C4DD"
SECONDARY = "#83C167"
ACCENT = "#FFFF00"
MONO = "Menlo"

class Scene1_Introduction(Scene):
    def construct(self):
        self.camera.background_color = BG
        title = Text("Why Does This Work?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
        self.add_subcaption("Why does this work?", duration=2)
        self.play(Write(title), run_time=1.5)
        self.wait(1.0)
        self.play(FadeOut(title), run_time=0.5)

Key patterns:

  • Subtitles on every animation: self.add_subcaption("text", duration=N) or subcaption="text" on self.play()
  • Shared color constants at file top for cross-scene consistency
  • self.camera.background_color set in every scene
  • Clean exits — FadeOut all mobjects at scene end: self.play(FadeOut(Group(*self.mobjects)))

Step 3: Render

manim -ql script.py Scene1_Introduction Scene2_CoreConcept  # draft
manim -qh script.py Scene1_Introduction Scene2_CoreConcept  # production

Step 4: Stitch

cat > concat.txt << 'EOF'
file 'media/videos/script/480p15/Scene1_Introduction.mp4'
file 'media/videos/script/480p15/Scene2_CoreConcept.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy final.mp4

Step 5: Review

manim -ql --format=png -s script.py Scene2_CoreConcept  # preview still

Critical Implementation Notes

Raw Strings for LaTeX

# WRONG: MathTex("\frac{1}{2}")
# RIGHT:
MathTex(r"\frac{1}{2}")

buff >= 0.5 for Edge Text

label.to_edge(DOWN, buff=0.5)  # never < 0.5

FadeOut Before Replacing Text

self.play(ReplacementTransform(note1, note2))  # not Write(note2) on top

Never Animate Non-Added Mobjects

self.play(Create(circle))  # must add first
self.play(circle.animate.set_color(RED))  # then animate

Performance Targets

Quality Resolution FPS Speed
-ql (draft) 854x480 15 5-15s/scene
-qm (medium) 1280x720 30 15-60s/scene
-qh (production) 1920x1080 60 30-120s/scene

Always iterate at -ql. Only render -qh for final output.

References

File Contents
references/animations.md Core animations, rate functions, composition, .animate syntax, timing patterns
references/mobjects.md Text, shapes, VGroup/Group, positioning, styling, custom mobjects
references/visual-design.md 12 design principles, opacity layering, layout templates, color palettes
references/equations.md LaTeX in Manim, TransformMatchingTex, derivation patterns
references/graphs-and-data.md Axes, plotting, BarChart, animated data, algorithm visualization
references/camera-and-3d.md MovingCameraScene, ThreeDScene, 3D surfaces, camera control
references/scene-planning.md Narrative arcs, layout templates, scene transitions, planning template
references/rendering.md CLI reference, quality presets, ffmpeg, voiceover workflow, GIF export
references/troubleshooting.md LaTeX errors, animation errors, common mistakes, debugging
references/animation-design-thinking.md When to animate vs show static, decomposition, pacing, narration sync
references/updaters-and-trackers.md ValueTracker, add_updater, always_redraw, time-based updaters, patterns
references/paper-explainer.md Turning research papers into animations — workflow, templates, domain patterns
references/decorations.md SurroundingRectangle, Brace, arrows, DashedLine, Angle, annotation lifecycle
references/production-quality.md Pre-code, pre-render, post-render checklists, spatial layout, color, tempo

Creative Divergence (use only when user requests experimental/creative/unique output)

If the user asks for creative, experimental, or unconventional explanatory approaches, select a strategy and reason through it BEFORE designing the animation.

  • SCAMPER — when the user wants a fresh take on a standard explanation
  • Assumption Reversal — when the user wants to challenge how something is typically taught

SCAMPER Transformation

Take a standard mathematical/technical visualization and transform it:

  • Substitute: replace the standard visual metaphor (number line → winding path, matrix → city grid)
  • Combine: merge two explanation approaches (algebraic + geometric simultaneously)
  • Reverse: derive backward — start from the result and deconstruct to axioms
  • Modify: exaggerate a parameter to show why it matters (10x the learning rate, 1000x the sample size)
  • Eliminate: remove all notation — explain purely through animation and spatial relationships

Assumption Reversal

  1. List what's "standard" about how this topic is visualized (left-to-right, 2D, discrete steps, formal notation)
  2. Pick the most fundamental assumption
  3. Reverse it (right-to-left derivation, 3D embedding of a 2D concept, continuous morphing instead of steps, zero notation)
  4. Explore what the reversal reveals that the standard approach hides
通过对话编辑视频,支持转录、剪辑、调色及字幕生成。遵循严格的生产规范,如最后应用字幕、无损拼接和音频淡入淡出。强调以语音为主、视觉为辅,用户确认后执行,并保留艺术创作自由。
需要编辑视频文件 希望将视频转录为文本 需要为视频添加字幕或动画 进行视频剪辑或颜色校正
skills/browser-use_video-use/video-use/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill video-use -g -y
SKILL.md
Frontmatter
{
    "name": "video-use",
    "description": "Edit any video by conversation. Transcribe, cut, color grade, generate overlay animations, burn subtitles — for talking heads, montages, tutorials, travel, interviews. No presets, no menus. Ask questions, confirm the plan, execute, iterate, persist. Production-correctness rules are hard; everything else is artistic freedom."
}

Video Use

Principle

  1. LLM reasons from raw transcript + on-demand visuals. The only derived artifact that earns its keep is a packed phrase-level transcript (takes_packed.md). Everything else — filler tagging, retake detection, shot classification, emphasis scoring — you derive at decision time.
  2. Audio is primary, visuals follow. Cut candidates come from speech boundaries and silence gaps. Drill into visuals only at decision points.
  3. Ask → confirm → execute → iterate → persist. Never touch the cut until the user has confirmed the strategy in plain English.
  4. Generalize. Do not assume what kind of video this is. Look at the material, ask the user, then edit.
  5. Artistic freedom is the default. Every specific value, preset, font, color, duration, pitch structure, and technique in this document is a worked example from one proven video — not a mandate. Read them to understand what's possible and why each worked. Then make your own taste calls based on what the material actually is and what the user actually wants. The only things you MUST do are in the Hard Rules section below. Everything else is yours.
  6. Invent freely. If the material calls for a technique not described here — split-screen, picture-in-picture, lower-third identity cards, reaction cuts, speed ramps, freeze frames, crossfades, match cuts, L-cuts, J-cuts, speed ramps over breath, whatever — build it. The helpers are ffmpeg and PIL. They can do anything the format supports. Do not wait for permission.
  7. Verify your own output before showing it to the user. If you wouldn't ship it, don't present it.

Hard Rules (production correctness — non-negotiable)

These are the things where deviation produces silent failures or broken output. They are not taste, they are correctness. Memorize them.

  1. Subtitles are applied LAST in the filter chain, after every overlay. Otherwise overlays hide captions. Silent failure.
  2. Per-segment extract → lossless -c copy concat, not single-pass filtergraph. Otherwise you double-encode every segment when overlays are added.
  3. 30ms audio fades at every segment boundary (afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03). Otherwise audible pops at every cut.
  4. Overlays use setpts=PTS-STARTPTS+T/TB to shift the overlay's frame 0 to its window start. Otherwise you see the middle of the animation during the overlay window.
  5. Master SRT uses output-timeline offsets: output_time = word.start - segment_start + segment_offset. Otherwise captions misalign after segment concat.
  6. Never cut inside a word. Snap every cut edge to a word boundary from the Scribe transcript.
  7. Pad every cut edge. Working window: 30–200ms. Scribe timestamps drift 50–100ms — padding absorbs the drift. Tighter for fast-paced, looser for cinematic.
  8. Word-level verbatim ASR only. Never SRT/phrase mode (loses sub-second gap data). Never normalized fillers (loses editorial signal).
  9. Cache transcripts per source. Never re-transcribe unless the source file itself changed.
  10. Parallel sub-agents for multiple animations. Never sequential. Spawn N at once via the Agent tool; total wall time ≈ slowest one.
  11. Strategy confirmation before execution. Never touch the cut until the user has approved the plain-English plan.
  12. All session outputs in <videos_dir>/edit/. Never write inside the video-use/ project directory.

Everything else in this document is a worked example. Deviate whenever the material calls for it.

Directory layout

The skill lives in video-use/. User footage lives wherever they put it. All session outputs go into <videos_dir>/edit/.

<videos_dir>/
├── <source files, untouched>
└── edit/
    ├── project.md               ← memory; appended every session
    ├── takes_packed.md          ← phrase-level transcripts, the LLM's primary reading view
    ├── edl.json                 ← cut decisions
    ├── transcripts/<name>.json  ← cached raw Scribe JSON
    ├── animations/slot_<id>/    ← per-animation source + render + reasoning
    ├── clips_graded/            ← per-segment extracts with grade + fades
    ├── master.srt               ← output-timeline subtitles
    ├── downloads/               ← yt-dlp outputs
    ├── verify/                  ← debug frames / timeline PNGs
    ├── preview.mp4
    └── final.mp4

Setup

First-time install lives in install.md (clone, deps, ffmpeg, skill registration, API key). Don't re-run it every session; on cold start just verify:

  • ELEVENLABS_API_KEY resolves — either in the environment or in .env at the video-use repo root. If missing, ask the user to paste one and write it to .env (never to the user's <videos_dir>).
  • ffmpeg + ffprobe on PATH.
  • Python deps installed (uv sync or pip install -e . inside the repo).
  • Node.js + npm available if the session needs HyperFrames or Remotion slots. HyperFrames currently requires Node.js 22+.
  • yt-dlp, HyperFrames, Remotion, Manim installed only on first use.
  • First-use animation setup happens inside the slot directory, never at the video-use repo root. HyperFrames can be invoked with npx --yes hyperframes ...; Remotion can be scaffolded with npx create-video@latest or installed as a project-local dependency before using its remotion render command.
  • This skill vendors skills/manim-video/. Read its SKILL.md when building a Manim slot.

Helpers (helpers/transcribe.py, helpers/render.py, etc.) live alongside this SKILL.md. Resolve their paths relative to the directory containing this file — the skill is typically symlinked at ~/.claude/skills/video-use/ or ~/.codex/skills/video-use/.

Helpers

  • transcribe.py <video> — single-file Scribe call. --num-speakers N optional. Cached.
  • transcribe_batch.py <videos_dir> — 4-worker parallel transcription. Use for multi-take.
  • pack_transcripts.py --edit-dir <dir>transcripts/*.jsontakes_packed.md (phrase-level, break on silence ≥ 0.5s).
  • timeline_view.py <video> <start> <end> — filmstrip + waveform PNG. On-demand visual drill-down. Not a scan tool — use it at decision points, not constantly.
  • render.py <edl.json> -o <out> — per-segment extract → concat → overlays (PTS-shifted) → subtitles LAST. --preview for 720p fast. --build-subtitles to generate master.srt inline.
  • grade.py <in> -o <out> — ffmpeg filter chain grade. Presets + --filter '<raw>' for custom.

For animations, create <edit>/animations/slot_<id>/ with Bash and spawn a sub-agent via the Agent tool.

The process

  1. Inventory. ffprobe every source. transcribe_batch.py on the directory. pack_transcripts.py to produce takes_packed.md. Sample one or two timeline_views for a visual first impression.

  2. Pre-scan for problems. One pass over takes_packed.md to note verbal slips, obvious mis-speaks, or phrasings to avoid. Plain list, feed into the editor brief.

  3. Converse. Describe what you see in plain English. Ask questions shaped by the material. Collect: content type, target length/aspect, aesthetic/brand direction, pacing feel, must-preserve moments, must-cut moments, animation and grade preferences, subtitle needs. Do not use a fixed checklist — the right questions are different every time.

  4. Propose strategy. 4–8 sentences: shape, take choices, cut direction, animation plan, grade direction, subtitle style, length estimate. Wait for confirmation.

  5. Execute. Produce edl.json via the editor sub-agent brief. Drill into timeline_view at ambiguous moments. Build animations in parallel sub-agents. Apply grade per-segment. Compose via render.py.

  6. Preview. render.py --preview.

  7. Self-eval (before showing the user). Run timeline_view on the rendered output (not the sources) at every cut boundary (±1.5s window). Check each image for:

    • Visual discontinuity / flash / jump at the cut
    • Waveform spike at the boundary (audio pop that slipped past the 30ms fade)
    • Subtitle hidden behind an overlay (Rule 1 violation)
    • Overlay misaligned or showing wrong frames (Rule 4 violation)

    Also sample: first 2s, last 2s, and 2–3 mid-points — check grade consistency, subtitle readability, overall coherence. Run ffprobe on the output to verify duration matches the EDL expectation.

    If anything fails: fix → re-render → re-eval. Cap at 3 self-eval passes — if issues remain after 3, flag them to the user rather than looping forever. Only present the preview once the self-eval passes.

  8. Iterate + persist. Natural-language feedback, re-plan, re-render. Never re-transcribe. Final render on confirmation. Append to project.md.

Cut craft (techniques)

  • Audio-first. Candidate cuts from word boundaries and silence gaps.
  • Preserve peaks. Laughs, punchlines, emphasis beats. Extend past punchlines to include reactions — the laugh IS the beat.
  • Speaker handoffs benefit from air between utterances. Common values: 400–600ms. Less for fast-paced, more for cinematic. Taste call.
  • Audio events as signals. (laughs), (sighs), (applause) mark beats. Extend past them.
  • Silence gaps are cut candidates. Silences ≥400ms are usually the cleanest. 150–400ms phrase boundaries are usable with a visual check. <150ms is unsafe (mid-phrase).
  • Example cut padding (the launch video shipped with this): 50ms before the first kept word, 80ms after the last. Tighter for montage energy, looser for documentary. Stay in the 30–200ms working window (Hard Rule 7).
  • Never reason audio and video independently. Every cut must work on both tracks.

The packed transcript (primary reading view)

pack_transcripts.py reads all transcripts/*.json and produces one markdown file where each take is a list of phrase-level lines, each prefixed with its [start-end] time range. Phrases break on any silence ≥ 0.5s OR speaker change. This is the artifact the editor sub-agent reads to pick cuts — it gives word-boundary precision from text alone at 1/10 the tokens of raw JSON.

Example line:

## C0103  (duration: 43.0s, 8 phrases)
  [002.52-005.36] S0 Ninety percent of what a web agent does is completely wasted.
  [006.08-006.74] S0 We fixed this.

Editor sub-agent brief (for multi-take selection)

When the task is "pick the best take of each beat across many clips," spawn a dedicated sub-agent with a brief shaped like this. The structure is load-bearing; the pitch-shape example is not.

You are editing a <type> video. Pick the best take of each beat and 
assemble them chronologically by beat, not by source clip order.

INPUTS:
  - takes_packed.md (time-annotated phrase-level transcripts of all takes)
  - Product/narrative context: <2 sentences from the user>
  - Speaker(s): <name, role, delivery style note>
  - Expected structure: <pick an archetype or invent one>
  - Verbal slips to avoid: <list from the pre-scan pass>
  - Target runtime: <seconds>

Common structural archetypes (pick, adapt, or invent):
  - Tech launch / demo:   HOOK → PROBLEM → SOLUTION → BENEFIT → EXAMPLE → CTA
  - Tutorial:             INTRO → SETUP → STEPS → GOTCHAS → RECAP
  - Interview:            (QUESTION → ANSWER → FOLLOWUP) repeat
  - Travel / event:       ARRIVAL → HIGHLIGHTS → QUIET MOMENTS → DEPARTURE
  - Documentary:          THESIS → EVIDENCE → COUNTERPOINT → CONCLUSION
  - Music / performance:  INTRO → VERSE → CHORUS → BRIDGE → OUTRO
  - Or invent your own.

RULES:
  - Start/end times must fall on word boundaries from the transcript.
  - Pad cut boundaries (working window 30–200ms).
  - Prefer silences ≥ 400ms as cut targets.
  - Unavoidable slips are kept if no better take exists. Note them in "reason".
  - If over budget, revise: drop a beat or trim tails. Report total and self-correct.

OUTPUT (JSON array, no prose):
  [{"source": "C0103", "start": 2.42, "end": 6.85, "beat": "HOOK",
    "quote": "...", "reason": "..."}, ...]

Return the final EDL and a one-line total runtime check.

Color grade (when requested)

Your job is to reason about the image, not apply a preset. Look at a frame (via timeline_view), decide what's wrong, adjust one thing, look again.

Mental model is ASC CDL. Per channel: out = (in * slope + offset) ** power, then global saturation. slope → highlights, offset → shadows, power → midtones.

Example filter chains (grade.py has --list-presets; use them as starting points or mix your own):

  • warm_cinematic — retro/technical, subtle teal/orange split, desaturated. Shipped in a real launch video. Safe for talking heads.
  • neutral_punch — minimal corrective: contrast bump + gentle S-curve. No hue shifts.
  • none — straight copy. Default when the user hasn't asked.

For anything else — portraiture, nature, product, music video, documentary — invent your own chain. grade.py --filter '<raw ffmpeg>' accepts any filter string.

Hard rules: apply per-segment during extraction (not post-concat, which re-encodes twice). Never go aggressive without testing skin tones.

Subtitles (when requested)

Subtitles have three dimensions worth reasoning about: chunking (1/2/3/sentence per line), case (UPPER/Title/Natural), and placement (margin from bottom). The right combo depends on content.

Worked styles — pick, adapt, or invent:

bold-overlay — short-form tech launch, fast-paced social. 2-word chunks, UPPERCASE, break on punctuation, Helvetica 18 Bold, white-on-outline, MarginV=35. render.py ships with this as SUB_FORCE_STYLE.

FontName=Helvetica,FontSize=18,Bold=1,
PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BackColour=&H00000000,
BorderStyle=1,Outline=2,Shadow=0,
Alignment=2,MarginV=35

natural-sentence (if you invent this mode) — narrative, documentary, education. 4–7 word chunks, sentence case, break on natural pauses, MarginV=60–80, larger font for readability, slightly wider max-width. No shipped force_style — design one if you need it.

Invent a third style if neither fits. Hard rules: subtitles LAST (Rule 1), output-timeline offsets (Rule 5).

Animations (when requested)

Animations match the content and the brand. Get the palette, font, and visual language from the conversation — never assume a default. If the user hasn't told you, propose a palette in the strategy phase and wait for confirmation before building anything.

Tool options:

Pick the engine per animation slot. Do not default to Remotion just because the animation is web-adjacent.

  • HyperFrames — Browser-native HTML/CSS/GSAP video compositions: product UI motion, website-to-video or mockup-to-video captures, kinetic typography, landing-page/storyboard promos, data-driven UI states, transparent WebM overlays, and clips that need deterministic frame capture plus HyperFrames lint/validate/render checks. Best when the animation should be authored and verified like a web composition instead of a React component tree.
  • Remotion — React/CSS compositions with component state, reusable React primitives, or an existing Remotion brand system. Best when the user specifically asks for React/Remotion or when React composition is the simpler authoring model.
  • Manim — formal diagrams, state machines, equation derivations, graph morphs. Read skills/manim-video/SKILL.md and its references for depth.
  • PIL + PNG sequence + ffmpeg — simple overlay cards: counters, typewriter text, single bar reveals, progressive draws. Fast to iterate, any aesthetic you want. The launch video used this.

For HyperFrames slots, scaffold the slot inside edit/animations/slot_<id>/ with npx --yes hyperframes init . --example blank --non-interactive --skip-skills, build the HTML composition there, run the HyperFrames checks that fit the slot (lint, validate, and a draft render when practical), then produce the final overlay video with npx --yes hyperframes render . -o render.mp4 or --format webm -o render.webm when alpha is required. Point the EDL overlay file at the actual rendered path.

For Remotion slots, keep the Remotion project isolated inside the same slot directory, scaffold with npx create-video@latest or install Remotion locally there, render the composition to render.mp4 with the project-local remotion render command, and verify duration and dimensions with ffprobe.

None is mandatory. Invent hybrids if useful (e.g., PIL background with a HyperFrames or Remotion layer on top).

Duration rules of thumb, context-dependent:

  • Sync-to-narration explanations. A viewer needs to parse the content at 1×. Rough floor 3s, typical 5–7s for simple cards, 8–14s for complex diagrams. The launch video shipped at 5–7s per simple card.
  • Beat-synced accents (music video, fast montage). 0.5–2s is fine — they're visual accents, not information. The "readable at 1×" rule becomes "recognizable at 1×", not "fully parseable."
  • Hold the final frame ≥ 1s before the cut (universal).
  • Over voiceover: total duration ≥ narration_length + 1s (universal).
  • Never parallel-reveal independent elements — the eye can't track two new things at once. One thing, pause, next thing.

Animation payoff timing (rule for sync-to-narration): get the payoff word's timestamp. Start the overlay reveal_duration seconds earlier so the landing frame coincides with the spoken payoff word. Without this sync the animation feels disconnected.

Easing (universal — never linear, it looks robotic):

def ease_out_cubic(t):    return 1 - (1 - t) ** 3
def ease_in_out_cubic(t):
    if t < 0.5: return 4 * t ** 3
    return 1 - (-2 * t + 2) ** 3 / 2

ease_out_cubic for single reveals (slow landing). ease_in_out_cubic for continuous draws.

Typing text anchor trick: center on the FULL string's width, not the partial-string width — otherwise text slides left during reveal.

Example palette (the launch video — one aesthetic among infinite):

  • Background (10, 10, 10) near-black
  • Accent #FF5A00 / (255, 90, 0) orange
  • Labels (110, 110, 110) dim gray
  • Font: Menlo Bold at /System/Library/Fonts/Menlo.ttc (index 1)
  • ≤ 2 accent colors, ~40% empty space, minimal chrome
  • Result: terminal / retro tech feel

This is one style. If the brand is warm and serif, use that. If it's colorful and playful, use that. If the user handed you a style guide, follow it. If they didn't, propose one and confirm.

Parallel sub-agent brief — each animation is one sub-agent spawned via the Agent tool. Each prompt is self-contained (sub-agents have no parent context). Include:

  1. One-sentence goal: "Build ONE animation: [spec]. Nothing else."
  2. Absolute output path (<edit>/animations/slot_<id>/render.mp4)
  3. Exact technical spec: resolution, fps, codec, pix_fmt, CRF, duration
  4. Style palette as concrete values (RGB tuples, hex, or reference to a design system)
  5. Font path with index
  6. Frame-by-frame timeline (what happens when, with easing)
  7. Anti-list ("no chrome, no extras, no titles unless specified")
  8. Code pattern reference (copy helpers inline, don't import across slots)
  9. Deliverable checklist (script, render, verify duration via ffprobe, report)
  10. "Do not ask questions. If anything is ambiguous, pick the most obvious interpretation and proceed."

One sub-agent = one file (unique filenames, parallel agents don't overwrite each other).

Output spec

Match the source unless the user asked for something specific. Common targets: 1920×1080@24 cinematic, 1920×1080@30 screen content, 1080×1920@30 vertical social, 3840×2160@24 4K cinema, 1080×1080@30 square. render.py defaults the scale to 1080p from any source; pass --filter or edit the extract command for other targets. Worth asking the user which delivery format matters.

EDL format

{
  "version": 1,
  "sources": {"C0103": "/abs/path/C0103.MP4", "C0108": "/abs/path/C0108.MP4"},
  "ranges": [
    {"source": "C0103", "start": 2.42, "end": 6.85,
     "beat": "HOOK", "quote": "...", "reason": "Cleanest delivery, stops before slip at 38.46."},
    {"source": "C0108", "start": 14.30, "end": 28.90,
     "beat": "SOLUTION", "quote": "...", "reason": "Only take without the false start."}
  ],
  "grade": "warm_cinematic",
  "overlays": [
    {"file": "edit/animations/slot_1/render.mp4", "start_in_output": 0.0, "duration": 5.0}
  ],
  "subtitles": "edit/master.srt",
  "total_duration_s": 87.4
}

grade is a preset name or raw ffmpeg filter. overlays are rendered animation clips. subtitles is optional and applied LAST.

Memory — project.md

Append one section per session at <edit>/project.md:

## Session N — YYYY-MM-DD

**Strategy:** one paragraph describing the approach
**Decisions:** take choices, cuts, grades, animations + why
**Reasoning log:** one-line rationale for non-obvious decisions
**Outstanding:** deferred items

On startup, read project.md if it exists and summarize the last session in one sentence before asking whether to continue.

Anti-patterns

Things that consistently fail regardless of style:

  • Hierarchical pre-computed codec formats with USABILITY / tone tags / shot layers. Over-engineering. Derive from the transcript at decision time.
  • Hand-tuned moment-scoring functions. The LLM picks better than any heuristic you'll write.
  • Whisper SRT / phrase-level output. Loses sub-second gap data. Always word-level verbatim.
  • Running Whisper locally on CPU. Slow and it normalizes fillers. Use hosted Scribe.
  • Burning subtitles into base before compositing overlays. Overlays hide them. (Hard Rule 1.)
  • Single-pass filtergraph when you have overlays. Double re-encodes. Use per-segment extract → concat.
  • Linear animation easing. Looks robotic. Always cubic.
  • Hard audio cuts at segment boundaries. Audible pops. (Hard Rule 3.)
  • Typing text centered on the partial string. Text slides left as it grows.
  • Sequential sub-agents for multiple animations. Always parallel.
  • Editing before confirming the strategy. Never.
  • Re-transcribing cached sources. Immutable outputs of immutable inputs.
  • Assuming what kind of video it is. Look first, ask second, edit last.
用于在 Cloudflare Workers 上构建 AI Agent,涵盖状态管理、工作流、RPC、MCP 及实时通信。强调优先检索官方文档以获取最新 API 信息,支持创建聊天、语音或自动化应用。
创建 Cloudflare Workers AI Agent 实现持久化工作流或定时任务 集成 MCP 客户端或服务端 开发基于 WebSocket 的实时应用 使用 React hooks 连接 Agent
skills/cloudflare_skills/agents-sdk/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill agents-sdk -g -y
SKILL.md
Frontmatter
{
    "name": "agents-sdk",
    "description": "Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, chat applications, voice agents, or browser automation. Covers Agent class, state management, callable RPC, Workflows, durable execution, queues, retries, observability, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge."
}

Cloudflare Agents SDK

Your knowledge of the Agents SDK may be outdated. Prefer retrieval over pre-training for any Agents SDK task.

Retrieval Sources

Cloudflare docs: https://developers.cloudflare.com/agents/

Topic Docs URL Use for
Getting started Quick start First agent, project setup
Adding to existing project Add to existing project Install into existing Workers app
Configuration Configuration wrangler.jsonc, bindings, assets, deployment
Agent class Agents API Agent lifecycle, patterns, pitfalls
State Store and sync state setState, validateStateChange, persistence
Routing Routing URL patterns, routeAgentRequest
Callable methods Callable methods @callable, RPC, streaming, timeouts
Scheduling Schedule tasks schedule(), scheduleEvery(), cron
Workflows Run workflows AgentWorkflow, durable multi-step tasks
HTTP/WebSockets WebSockets Lifecycle hooks, hibernation
Chat agents Chat agents AIChatAgent, streaming, tools, persistence
Client SDK Client SDK useAgent, useAgentChat, React hooks
Client tools Client tools Client-side tools, autoContinueAfterToolResult
Server-driven messages Trigger patterns saveMessages, waitUntilStable, server-initiated turns
Resumable streaming Resumable streaming Stream recovery on disconnect
Email Email Email routing, secure reply resolver
MCP client MCP client Connecting to MCP servers
MCP server MCP server Building MCP servers with McpAgent
MCP transports MCP transports Streamable HTTP, SSE, RPC transport options
Securing MCP servers Securing MCP OAuth, proxy MCP, hardening
Human-in-the-loop Human-in-the-loop Approval flows, needsApproval, workflows
Durable execution Durable execution runFiber(), stash(), surviving DO eviction
Queue Queue Built-in FIFO queue, queue()
Retries Retries this.retry(), backoff/jitter
Observability Observability Diagnostics-channel events
Push notifications Push notifications Web Push + VAPID from agents
Webhooks Webhooks Receiving external webhooks
Cross-domain auth Cross-domain auth WebSocket auth, tokens, CORS
Readonly connections Readonly shouldConnectionBeReadonly
Voice Voice Experimental STT/TTS, withVoice
Browse the web Browser tools Experimental CDP browser automation
Think Think Experimental higher-level chat agent class
Migrations AI SDK v5, AI SDK v6 Upgrading @cloudflare/ai-chat

Capabilities

The Agents SDK provides:

  • Persistent state — SQLite-backed, auto-synced to clients via setState
  • Callable RPC@callable() methods invoked over WebSocket
  • Scheduling — One-time, recurring (scheduleEvery), and cron tasks
  • Workflows — Durable multi-step background processing via AgentWorkflow
  • Durable executionrunFiber() / stash() for work that survives DO eviction
  • Queue — Built-in FIFO queue with retries via queue()
  • Retriesthis.retry() with exponential backoff and jitter
  • MCP integration — Connect to MCP servers or build your own with McpAgent
  • Email handling — Receive and reply to emails with secure routing
  • Streaming chatAIChatAgent with resumable streams, message persistence, tools
  • Server-driven messagessaveMessages, waitUntilStable for proactive agent turns
  • React hooksuseAgent, useAgentChat for client apps
  • Observabilitydiagnostics_channel events for state, RPC, schedule, lifecycle
  • Push notifications — Web Push + VAPID delivery from agents
  • Webhooks — Receive and verify external webhooks
  • Voice (experimental) — STT/TTS via @cloudflare/voice
  • Browser tools (experimental) — CDP-powered browsing via agents/browser
  • Think (experimental) — Higher-level chat agent via @cloudflare/think

FIRST: Verify Installation

npm ls agents  # Should show agents package

If not installed:

npm install agents

For chat agents:

npm install agents @cloudflare/ai-chat ai @ai-sdk/react

Wrangler Configuration

{
  "compatibility_flags": ["nodejs_compat"],
  "durable_objects": {
    "bindings": [{ "name": "MyAgent", "class_name": "MyAgent" }]
  },
  "migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyAgent"] }]
}

Gotchas:

  • Do NOT enable experimentalDecorators in tsconfig (breaks @callable)
  • Never edit old migrations — always add new tags
  • Each agent class needs its own DO binding + migration entry
  • Add "ai": { "binding": "AI" } for Workers AI

Agent Class

import { Agent, routeAgentRequest, callable } from "agents";

type State = { count: number };

export class Counter extends Agent<Env, State> {
  initialState = { count: 0 };

  validateStateChange(nextState: State, source: Connection | "server") {
    if (nextState.count < 0) throw new Error("Count cannot be negative");
  }

  onStateUpdate(state: State, source: Connection | "server") {
    console.log("State updated:", state);
  }

  @callable()
  increment() {
    this.setState({ count: this.state.count + 1 });
    return this.state.count;
  }
}

export default {
  fetch: (req, env) => routeAgentRequest(req, env) ?? new Response("Not found", { status: 404 })
};

Routing

Requests route to /agents/{agent-name}/{instance-name}:

Class URL
Counter /agents/counter/user-123
ChatRoom /agents/chat-room/lobby

Client: useAgent({ agent: "Counter", name: "user-123" })

Custom routing: use getAgentByName(env.MyAgent, "instance-id") then agent.fetch(request).

Core APIs

Task API
Read state this.state.count
Write state this.setState({ count: 1 })
SQL query this.sql`SELECT * FROM users WHERE id = ${id}`
Schedule (delay) await this.schedule(60, "task", payload)
Schedule (cron) await this.schedule("0 * * * *", "task", payload)
Schedule (interval) await this.scheduleEvery(30, "poll")
RPC method @callable() myMethod() { ... }
Streaming RPC @callable({ streaming: true }) stream(res) { ... }
Start workflow await this.runWorkflow("ProcessingWorkflow", params)
Durable fiber await this.runFiber("name", async (ctx) => { ... })
Enqueue work this.queue("handler", payload)
Retry with backoff await this.retry(fn, { maxAttempts: 5 })
Broadcast to clients this.broadcast(message)
Get connections this.getConnections(tag?)

React Client

import { useAgent } from "agents/react";

function App() {
  const [state, setLocalState] = useState({ count: 0 });

  const agent = useAgent({
    agent: "Counter",
    name: "my-instance",
    onStateUpdate: (newState) => setLocalState(newState),
    onIdentity: (name, agentType) => console.log(`Connected to ${name}`)
  });

  return (
    <button onClick={() => agent.setState({ count: state.count + 1 })}>
      Count: {state.count}
    </button>
  );
}

References

Core

Chat & Streaming

Background Processing

Integrations

Experimental

Cloudflare平台开发技能,覆盖Workers、Pages、KV/D1/R2存储、AI及网络安全等。强调优先检索官方文档而非依赖预训练知识,提供决策树引导选择具体产品,并定义获取最新API和配置信息的来源。
需要部署Cloudflare Workers或Pages应用 查询Cloudflare KV、D1、R2等存储服务配置 集成Cloudflare AI模型或Vectorize向量搜索 配置Cloudflare WAF、Tunnel或Flagship功能标志 使用Terraform或Pulumi进行Cloudflare基础设施编排
skills/cloudflare_skills/cloudflare/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill cloudflare -g -y
SKILL.md
Frontmatter
{
    "name": "cloudflare",
    "references": [
        "workers",
        "pages",
        "d1",
        "durable-objects",
        "workers-ai"
    ],
    "description": "Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), feature flags (Flagship), networking (Tunnel, Spectrum), security (WAF, DDoS), and infrastructure-as-code (Terraform, Pulumi). Use for any Cloudflare development task. Biases towards retrieval from Cloudflare docs over pre-trained knowledge."
}

Cloudflare Platform Skill

Consolidated skill for building on the Cloudflare platform. Use decision trees below to find the right product, then load detailed references.

Your knowledge of Cloudflare APIs, types, limits, and pricing may be outdated. Prefer retrieval over pre-training — the references in this skill are starting points, not source of truth.

Retrieval Sources

Fetch the latest information before citing specific numbers, API signatures, or configuration options. Do not rely on baked-in knowledge or these reference files alone.

Source How to retrieve Use for
Cloudflare docs cloudflare-docs search tool or https://developers.cloudflare.com/ Limits, pricing, API reference, compatibility dates/flags
Workers types npm pack @cloudflare/workers-types or check node_modules Type signatures, binding shapes, handler types
Wrangler config schema node_modules/wrangler/config-schema.json Config fields, binding shapes, allowed values
Product changelogs https://developers.cloudflare.com/changelog/ Recent changes to limits, features, deprecations

When a reference file and the docs disagree, trust the docs. This is especially important for: numeric limits, pricing tiers, type signatures, and configuration options.

Quick Decision Trees

"I need feature flags"

Need feature flags?
└─ Feature toggles, targeting rules, percentage rollouts → flagship/
   ├─ Evaluate in Workers → Flagship binding (env.FLAGS)
   ├─ Evaluate in Node.js / browser → OpenFeature SDK (@cloudflare/flagship)
   └─ Manage flags via API → Flagship REST API

"I need to run code"

Need to run code?
├─ Serverless functions at the edge → workers/
├─ Full-stack web app with Git deploys → pages/
├─ Stateful coordination/real-time → durable-objects/
├─ Long-running multi-step jobs → workflows/
├─ Run containers → containers/
├─ Multi-tenant (customers deploy code) → workers-for-platforms/
├─ Scheduled tasks (cron) → cron-triggers/
├─ Lightweight edge logic (modify HTTP) → snippets/
├─ Process Worker execution events (logs/observability) → tail-workers/
└─ Optimize latency to backend infrastructure → smart-placement/

"I need to store data"

Need storage?
├─ Key-value (config, sessions, cache) → kv/
├─ Relational SQL → d1/ (SQLite) or hyperdrive/ (existing Postgres/MySQL)
├─ Object/file storage (S3-compatible) → r2/
├─ Versioned file trees (repos, build outputs, checkpoints) → artifacts/
├─ Message queue (async processing) → queues/
├─ Vector embeddings (AI/semantic search) → vectorize/
├─ Strongly-consistent per-entity state → durable-objects/ (DO storage)
├─ Secrets management → secrets-store/
├─ Streaming ETL to R2 → pipelines/
└─ Persistent cache (long-term retention) → cache-reserve/

"I need AI/ML"

Need AI?
├─ Run inference (LLMs, embeddings, images) → workers-ai/
├─ Vector database for RAG/search → vectorize/
├─ Build stateful AI agents → agents-sdk/
├─ Gateway for any AI provider (caching, routing) → ai-gateway/
└─ AI-powered search widget → ai-search/

"I need networking/connectivity"

Need networking?
├─ Expose local service to internet → tunnel/
├─ TCP/UDP proxy (non-HTTP) → spectrum/
├─ WebRTC TURN server → turn/
├─ Private network connectivity → network-interconnect/
├─ Optimize routing → argo-smart-routing/
├─ Optimize latency to backend (not user) → smart-placement/
└─ Real-time video/audio → realtimekit/ or realtime-sfu/

"I need security"

Need security?
├─ Web Application Firewall → waf/
├─ DDoS protection → ddos/
├─ Bot detection/management → bot-management/
├─ API protection → api-shield/
├─ CAPTCHA alternative → turnstile/
└─ Credential leak detection → waf/ (managed ruleset)

"I need media/content"

Need media?
├─ Image optimization/transformation → images/
├─ Video streaming/encoding → stream/
├─ Browser automation/screenshots → browser-rendering/
└─ Third-party script management → zaraz/

"I need analytics/metrics data"

Need analytics?
├─ Query across all Cloudflare products (HTTP, Workers, DNS, etc.) → graphql-api/
├─ Custom high-cardinality metrics from Workers → analytics-engine/
├─ Client-side (RUM) performance data → web-analytics/
├─ Workers Logs and real-time debugging → observability/
└─ Raw logs (Logpush to external tools) → Cloudflare docs

"I need infrastructure-as-code"

Need IaC? → pulumi/ (Pulumi), terraform/ (Terraform), or api/ (REST API)

Product Index

Feature Flags

Product Reference
Flagship references/flagship/

Compute & Runtime

Product Reference
Workers references/workers/
Pages references/pages/
Pages Functions references/pages-functions/
Durable Objects references/durable-objects/
Workflows references/workflows/
Containers references/containers/
Workers for Platforms references/workers-for-platforms/
Cron Triggers references/cron-triggers/
Tail Workers references/tail-workers/
Snippets references/snippets/
Smart Placement references/smart-placement/

Storage & Data

Product Reference
KV references/kv/
D1 references/d1/
R2 references/r2/
Artifacts references/artifacts/
Queues references/queues/
Hyperdrive references/hyperdrive/
DO Storage references/do-storage/
Secrets Store references/secrets-store/
Pipelines references/pipelines/
R2 Data Catalog references/r2-data-catalog/
R2 SQL references/r2-sql/

AI & Machine Learning

Product Reference
Workers AI references/workers-ai/
Vectorize references/vectorize/
Agents SDK references/agents-sdk/
AI Gateway references/ai-gateway/
AI Search references/ai-search/

Networking & Connectivity

Product Reference
Tunnel references/tunnel/
Spectrum references/spectrum/
TURN references/turn/
Network Interconnect references/network-interconnect/
Argo Smart Routing references/argo-smart-routing/
Workers VPC references/workers-vpc/

Security

Product Reference
WAF references/waf/
DDoS Protection references/ddos/
Bot Management references/bot-management/
API Shield references/api-shield/
Turnstile references/turnstile/

Media & Content

Product Reference
Images references/images/
Stream references/stream/
Browser Rendering references/browser-rendering/
Zaraz references/zaraz/

Real-Time Communication

Product Reference
RealtimeKit references/realtimekit/
Realtime SFU references/realtime-sfu/

Developer Tools

Product Reference
Wrangler references/wrangler/
Miniflare references/miniflare/
C3 references/c3/
Observability references/observability/
GraphQL Analytics API references/graphql-api/
Analytics Engine references/analytics-engine/
Web Analytics references/web-analytics/
Sandbox references/sandbox/
Workerd references/workerd/
Workers Playground references/workers-playground/

Infrastructure as Code

Product Reference
Pulumi references/pulumi/
Terraform references/terraform/
API references/api/

Other Services

Product Reference
Email Routing references/email-routing/
Email Workers references/email-workers/
Static Assets references/static-assets/
Bindings references/bindings/
Cache Reserve references/cache-reserve/
用于创建、配置和审查 Cloudflare Durable Objects。涵盖状态协调(如聊天室)、RPC、SQLite存储、WebSocket及测试。优先检索官方文档,避免预训练知识偏差,指导Wrangler配置与最佳实践。
创建或配置 Durable Objects 实现 RPC、Alarm 或 WebSocket 审查 DO 代码最佳实践 设计分片策略 编写 Vitest 测试
skills/cloudflare_skills/durable-objects/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill durable-objects -g -y
SKILL.md
Frontmatter
{
    "name": "durable-objects",
    "description": "Create and review Cloudflare Durable Objects. Use when building stateful coordination (chat rooms, multiplayer games, booking systems), implementing RPC methods, SQLite storage, alarms, WebSockets, or reviewing DO code for best practices. Covers Workers integration, wrangler config, and testing with Vitest. Biases towards retrieval from Cloudflare docs over pre-trained knowledge."
}

Durable Objects

Build stateful, coordinated applications on Cloudflare's edge using Durable Objects.

Retrieval Sources

Your knowledge of Durable Objects APIs and configuration may be outdated. Prefer retrieval over pre-training for any Durable Objects task.

Resource URL
Docs https://developers.cloudflare.com/durable-objects/
API Reference https://developers.cloudflare.com/durable-objects/api/
Best Practices https://developers.cloudflare.com/durable-objects/best-practices/
Examples https://developers.cloudflare.com/durable-objects/examples/

Fetch the relevant doc page when implementing features.

When to Use

  • Creating new Durable Object classes for stateful coordination
  • Implementing RPC methods, alarms, or WebSocket handlers
  • Reviewing existing DO code for best practices
  • Configuring wrangler.jsonc/toml for DO bindings and migrations
  • Writing tests with @cloudflare/vitest-pool-workers
  • Designing sharding strategies and parent-child relationships

Reference Documentation

  • ./references/rules.md - Core rules, storage, concurrency, RPC, alarms
  • ./references/testing.md - Vitest setup, unit/integration tests, alarm testing
  • ./references/workers.md - Workers handlers, types, wrangler config, observability

Search: blockConcurrencyWhile, idFromName, getByName, setAlarm, sql.exec

Core Principles

Use Durable Objects For

Need Example
Coordination Chat rooms, multiplayer games, collaborative docs
Strong consistency Inventory, booking systems, turn-based games
Per-entity storage Multi-tenant SaaS, per-user data
Persistent connections WebSockets, real-time notifications
Scheduled work per entity Subscription renewals, game timeouts

Do NOT Use For

  • Stateless request handling (use plain Workers)
  • Maximum global distribution needs
  • High fan-out independent requests

Quick Reference

Wrangler Configuration

// wrangler.jsonc
{
  "durable_objects": {
    "bindings": [{ "name": "MY_DO", "class_name": "MyDurableObject" }]
  },
  "migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyDurableObject"] }]
}

Basic Durable Object Pattern

import { DurableObject } from "cloudflare:workers";

export interface Env {
  MY_DO: DurableObjectNamespace<MyDurableObject>;
}

export class MyDurableObject extends DurableObject<Env> {
  constructor(ctx: DurableObjectState, env: Env) {
    super(ctx, env);
    ctx.blockConcurrencyWhile(async () => {
      this.ctx.storage.sql.exec(`
        CREATE TABLE IF NOT EXISTS items (
          id INTEGER PRIMARY KEY AUTOINCREMENT,
          data TEXT NOT NULL
        )
      `);
    });
  }

  async addItem(data: string): Promise<number> {
    const result = this.ctx.storage.sql.exec<{ id: number }>(
      "INSERT INTO items (data) VALUES (?) RETURNING id",
      data
    );
    return result.one().id;
  }
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const stub = env.MY_DO.getByName("my-instance");
    const id = await stub.addItem("hello");
    return Response.json({ id });
  },
};

Critical Rules

  1. Model around coordination atoms - One DO per chat room/game/user, not one global DO
  2. Use getByName() for deterministic routing - Same input = same DO instance
  3. Use SQLite storage - Configure new_sqlite_classes in migrations
  4. Initialize in constructor - Use blockConcurrencyWhile() for schema setup only
  5. Use RPC methods - Not fetch() handler (compatibility date >= 2024-04-03)
  6. Persist first, cache second - Always write to storage before updating in-memory state
  7. One alarm per DO - setAlarm() replaces any existing alarm

Anti-Patterns (NEVER)

  • Single global DO handling all requests (bottleneck)
  • Using blockConcurrencyWhile() on every request (kills throughput)
  • Storing critical state only in memory (lost on eviction/crash)
  • Using await between related storage writes (breaks atomicity)
  • Holding blockConcurrencyWhile() across fetch() or external I/O

Stub Creation

// Deterministic - preferred for most cases
const stub = env.MY_DO.getByName("room-123");

// From existing ID string
const id = env.MY_DO.idFromString(storedIdString);
const stub = env.MY_DO.get(id);

// New unique ID - store mapping externally
const id = env.MY_DO.newUniqueId();
const stub = env.MY_DO.get(id);

Storage Operations

// SQL (synchronous, recommended)
this.ctx.storage.sql.exec("INSERT INTO t (c) VALUES (?)", value);
const rows = this.ctx.storage.sql.exec<Row>("SELECT * FROM t").toArray();

// KV (async)
await this.ctx.storage.put("key", value);
const val = await this.ctx.storage.get<Type>("key");

Alarms

// Schedule (replaces existing)
await this.ctx.storage.setAlarm(Date.now() + 60_000);

// Handler
async alarm(): Promise<void> {
  // Process scheduled work
  // Optionally reschedule: await this.ctx.storage.setAlarm(...)
}

// Cancel
await this.ctx.storage.deleteAlarm();

Testing Quick Start

import { env } from "cloudflare:test";
import { describe, it, expect } from "vitest";

describe("MyDO", () => {
  it("should work", async () => {
    const stub = env.MY_DO.getByName("test");
    const result = await stub.addItem("test");
    expect(result).toBe(1);
  });
});
用于在 Cloudflare Workers 上构建安全隔离的代码执行环境。支持 AI 代码解释器、CI/CD 及不可信代码运行,涵盖 SDK 安装、配置、核心 API 及文件操作模式。
构建沙箱化应用 实现 AI 代码解释器 执行不可信代码 搭建 CI/CD 系统 创建交互式开发环境
skills/cloudflare_skills/sandbox-sdk/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill sandbox-sdk -g -y
SKILL.md
Frontmatter
{
    "name": "sandbox-sdk",
    "description": "Build sandboxed applications for secure code execution. Load when building AI code execution, code interpreters, CI\/CD systems, interactive dev environments, or executing untrusted code. Covers Sandbox SDK lifecycle, commands, files, code interpreter, and preview URLs. Biases towards retrieval from Cloudflare docs over pre-trained knowledge."
}

Cloudflare Sandbox SDK

Build secure, isolated code execution environments on Cloudflare Workers.

FIRST: Verify Installation

npm install @cloudflare/sandbox
docker info  # Must succeed - Docker required for local dev

Retrieval Sources

Your knowledge of the Sandbox SDK may be outdated. Prefer retrieval over pre-training for any Sandbox SDK task.

Resource URL
Docs https://developers.cloudflare.com/sandbox/
API Reference https://developers.cloudflare.com/sandbox/api/
Examples https://github.com/cloudflare/sandbox-sdk/tree/main/examples
Get Started https://developers.cloudflare.com/sandbox/get-started/

When implementing features, fetch the relevant doc page or example first.

Required Configuration

wrangler.jsonc (exact - do not modify structure):

{
  "containers": [{
    "class_name": "Sandbox",
    "image": "./Dockerfile",
    "instance_type": "lite",
    "max_instances": 1
  }],
  "durable_objects": {
    "bindings": [{ "class_name": "Sandbox", "name": "Sandbox" }]
  },
  "migrations": [{ "new_sqlite_classes": ["Sandbox"], "tag": "v1" }]
}

Worker entry - must re-export Sandbox class:

import { getSandbox } from '@cloudflare/sandbox';
export { Sandbox } from '@cloudflare/sandbox';  // Required export

Quick Reference

Task Method
Get sandbox getSandbox(env.Sandbox, 'user-123')
Run command await sandbox.exec('python script.py')
Run code (interpreter) await sandbox.runCode(code, { language: 'python' })
Write file await sandbox.writeFile('/workspace/app.py', content)
Read file await sandbox.readFile('/workspace/app.py')
Create directory await sandbox.mkdir('/workspace/src', { recursive: true })
List files await sandbox.listFiles('/workspace')
Expose port await sandbox.exposePort(8080)
Destroy await sandbox.destroy()

Core Patterns

Execute Commands

const sandbox = getSandbox(env.Sandbox, 'user-123');
const result = await sandbox.exec('python --version');
// result: { stdout, stderr, exitCode, success }

Code Interpreter (Recommended for AI)

Use runCode() for executing LLM-generated code with rich outputs:

const ctx = await sandbox.createCodeContext({ language: 'python' });

await sandbox.runCode('import pandas as pd; data = [1,2,3]', { context: ctx });
const result = await sandbox.runCode('sum(data)', { context: ctx });
// result.results[0].text = "6"

Languages: python, javascript, typescript

State persists within context. Create explicit contexts for production.

File Operations

await sandbox.mkdir('/workspace/project', { recursive: true });
await sandbox.writeFile('/workspace/project/main.py', code);
const file = await sandbox.readFile('/workspace/project/main.py');
const files = await sandbox.listFiles('/workspace/project');

When to Use What

Need Use Why
Shell commands, scripts exec() Direct control, streaming
LLM-generated code runCode() Rich outputs, state persistence
Build/test pipelines exec() Exit codes, stderr capture
Data analysis runCode() Charts, tables, pandas

Extending the Dockerfile

Base image (docker.io/cloudflare/sandbox:0.7.0) includes Python 3.11, Node.js 20, and common tools.

Add dependencies by extending the Dockerfile:

FROM docker.io/cloudflare/sandbox:0.7.0

# Python packages
RUN pip install requests beautifulsoup4

# Node packages (global)
RUN npm install -g typescript

# System packages
RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/*

EXPOSE 8080  # Required for local dev port exposure

Keep images lean - affects cold start time.

Preview URLs (Port Exposure)

Expose HTTP services running in sandboxes:

const { url } = await sandbox.exposePort(8080);
// Returns preview URL for the service

Production requirement: Preview URLs need a custom domain with wildcard DNS (*.yourdomain.com). The .workers.dev domain does not support preview URL subdomains.

See: https://developers.cloudflare.com/sandbox/guides/expose-services/

OpenAI Agents SDK Integration

The SDK provides helpers for OpenAI Agents at @cloudflare/sandbox/openai:

import { Shell, Editor } from '@cloudflare/sandbox/openai';

See examples/openai-agents for complete integration pattern.

Sandbox Lifecycle

  • getSandbox() returns immediately - container starts lazily on first operation
  • Containers sleep after 10 minutes of inactivity (configurable via sleepAfter)
  • Use destroy() to immediately free resources
  • Same sandboxId always returns same sandbox instance

Anti-Patterns

  • Don't use internal clients (CommandClient, FileClient) - use sandbox.* methods
  • Don't skip the Sandbox export - Worker won't deploy without export { Sandbox }
  • Don't hardcode sandbox IDs for multi-user - use user/session identifiers
  • Don't forget cleanup - call destroy() for temporary sandboxes

Detailed References

利用 Chrome DevTools MCP 进行网页性能审计,测量核心 Web 指标(LCP、INP、CLS)并识别渲染阻塞及缓存问题。适用于页面加载优化、Lighthouse 评分调试及速度分析。
用户要求审计或优化网页性能 需要分析 Lighthouse 评分或网站加载速度 请求调试页面加载问题
skills/cloudflare_skills/web-perf/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill web-perf -g -y
SKILL.md
Frontmatter
{
    "name": "web-perf",
    "description": "Analyzes web performance using Chrome DevTools MCP. Measures Core Web Vitals (LCP, INP, CLS) and supplementary metrics (FCP, TBT, Speed Index), identifies render-blocking resources, network dependency chains, layout shifts, caching issues, and accessibility gaps. Use when asked to audit, profile, debug, or optimize page load performance, Lighthouse scores, or site speed. Biases towards retrieval from current documentation over pre-trained knowledge."
}

Web Performance Audit

Your knowledge of web performance metrics, thresholds, and tooling APIs may be outdated. Prefer retrieval over pre-training when citing specific numbers or recommendations.

Retrieval Sources

Source How to retrieve Use for
web.dev https://web.dev/articles/vitals Core Web Vitals thresholds, definitions
Chrome DevTools docs https://developer.chrome.com/docs/devtools/performance Tooling APIs, trace analysis
Lighthouse scoring https://developer.chrome.com/docs/lighthouse/performance/performance-scoring Score weights, metric thresholds

FIRST: Verify MCP Tools Available

Run this before starting. Try calling navigate_page or performance_start_trace. If unavailable, STOP—the chrome-devtools MCP server isn't configured.

Ask the user to add this to their MCP config:

"chrome-devtools": {
  "type": "local",
  "command": ["npx", "-y", "chrome-devtools-mcp@latest"]
}

Key Guidelines

  • Be assertive: Verify claims by checking network requests, DOM, or codebase—then state findings definitively.
  • Verify before recommending: Confirm something is unused before suggesting removal.
  • Quantify impact: Use estimated savings from insights. Don't prioritize changes with 0ms impact.
  • Skip non-issues: If render-blocking resources have 0ms estimated impact, note but don't recommend action.
  • Be specific: Say "compress hero.png (450KB) to WebP" not "optimize images".
  • Prioritize ruthlessly: A site with 200ms LCP and 0 CLS is already excellent—say so.

Quick Reference

Task Tool Call
Load page navigate_page(url: "...")
Start trace performance_start_trace(autoStop: true, reload: true)
Analyze insight performance_analyze_insight(insightSetId: "...", insightName: "...")
List requests list_network_requests(resourceTypes: ["Script", "Stylesheet", ...])
Request details get_network_request(reqid: <id>)
A11y snapshot take_snapshot(verbose: true)

Workflow

Copy this checklist to track progress:

Audit Progress:
- [ ] Phase 1: Performance trace (navigate + record)
- [ ] Phase 2: Core Web Vitals analysis (includes CLS culprits)
- [ ] Phase 3: Network analysis
- [ ] Phase 4: Accessibility snapshot
- [ ] Phase 5: Codebase analysis (skip if third-party site)

Phase 1: Performance Trace

  1. Navigate to the target URL:

    navigate_page(url: "<target-url>")
    
  2. Start a performance trace with reload to capture cold-load metrics:

    performance_start_trace(autoStop: true, reload: true)
    
  3. Wait for trace completion, then retrieve results.

Troubleshooting:

  • If trace returns empty or fails, verify the page loaded correctly with navigate_page first
  • If insight names don't match, inspect the trace response to list available insights

Phase 2: Core Web Vitals Analysis

Use performance_analyze_insight to extract key metrics.

Note: Insight names may vary across Chrome DevTools versions. If an insight name doesn't work, check the insightSetId from the trace response to discover available insights.

Common insight names:

Metric Insight Name What to Look For
LCP LCPBreakdown Time to largest contentful paint; breakdown of TTFB, resource load, render delay
CLS CLSCulprits Elements causing layout shifts (images without dimensions, injected content, font swaps)
Render Blocking RenderBlocking CSS/JS blocking first paint
Document Latency DocumentLatency Server response time issues
Network Dependencies NetworkRequestsDepGraph Request chains delaying critical resources

Example:

performance_analyze_insight(insightSetId: "<id-from-trace>", insightName: "LCPBreakdown")

Key thresholds (good/needs-improvement/poor):

  • TTFB: < 800ms / < 1.8s / > 1.8s
  • FCP: < 1.8s / < 3s / > 3s
  • LCP: < 2.5s / < 4s / > 4s
  • INP: < 200ms / < 500ms / > 500ms
  • TBT: < 200ms / < 600ms / > 600ms
  • CLS: < 0.1 / < 0.25 / > 0.25
  • Speed Index: < 3.4s / < 5.8s / > 5.8s

Phase 3: Network Analysis

List all network requests to identify optimization opportunities:

list_network_requests(resourceTypes: ["Script", "Stylesheet", "Document", "Font", "Image"])

Look for:

  1. Render-blocking resources: JS/CSS in <head> without async/defer/media attributes
  2. Network chains: Resources discovered late because they depend on other resources loading first (e.g., CSS imports, JS-loaded fonts)
  3. Missing preloads: Critical resources (fonts, hero images, key scripts) not preloaded
  4. Caching issues: Missing or weak Cache-Control, ETag, or Last-Modified headers
  5. Large payloads: Uncompressed or oversized JS/CSS bundles
  6. Unused preconnects: If flagged, verify by checking if ANY requests went to that origin. If zero requests, it's definitively unused—recommend removal. If requests exist but loaded late, the preconnect may still be valuable.

For detailed request info:

get_network_request(reqid: <id>)

Phase 4: Accessibility Snapshot

Take an accessibility tree snapshot:

take_snapshot(verbose: true)

Flag high-level gaps:

  • Missing or duplicate ARIA IDs
  • Elements with poor contrast ratios (check against WCAG AA: 4.5:1 for normal text, 3:1 for large text)
  • Focus traps or missing focus indicators
  • Interactive elements without accessible names

Phase 5: Codebase Analysis

Skip if auditing a third-party site without codebase access.

Analyze the codebase to understand where improvements can be made.

Detect Framework & Bundler

Search for configuration files to identify the stack:

Tool Config Files
Webpack webpack.config.js, webpack.*.js
Vite vite.config.js, vite.config.ts
Rollup rollup.config.js, rollup.config.mjs
esbuild esbuild.config.js, build scripts with esbuild
Parcel .parcelrc, package.json (parcel field)
Next.js next.config.js, next.config.mjs
Nuxt nuxt.config.js, nuxt.config.ts
SvelteKit svelte.config.js
Astro astro.config.mjs

Also check package.json for framework dependencies and build scripts.

Tree-Shaking & Dead Code

  • Webpack: Check for mode: 'production', sideEffects in package.json, usedExports optimization
  • Vite/Rollup: Tree-shaking enabled by default; check for treeshake options
  • Look for: Barrel files (index.js re-exports), large utility libraries imported wholesale (lodash, moment)

Unused JS/CSS

  • Check for CSS-in-JS vs. static CSS extraction
  • Look for PurgeCSS/UnCSS configuration (Tailwind's content config)
  • Identify dynamic imports vs. eager loading

Polyfills

  • Check for @babel/preset-env targets and useBuiltIns setting
  • Look for core-js imports (often oversized)
  • Check browserslist config for overly broad targeting

Compression & Minification

  • Check for terser, esbuild, or swc minification
  • Look for gzip/brotli compression in build output or server config
  • Check for source maps in production builds (should be external or disabled)

Output Format

Present findings as:

  1. Core Web Vitals Summary - Table with metric, value, and rating (good/needs-improvement/poor)
  2. Top Issues - Prioritized list of problems with estimated impact (high/medium/low)
  3. Recommendations - Specific, actionable fixes with code snippets or config changes
  4. Codebase Findings - Framework/bundler detected, optimization opportunities (omit if no codebase access)
审查和编写Cloudflare Workers代码,遵循生产最佳实践。优先检索官方文档而非依赖预训练知识,涵盖配置、流处理、架构及可观测性规范,防止常见反模式。
编写新的Workers代码 审查Worker代码 配置wrangler.jsonc 检查Workers反模式
skills/cloudflare_skills/workers-best-practices/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill workers-best-practices -g -y
SKILL.md
Frontmatter
{
    "name": "workers-best-practices",
    "description": "Reviews and authors Cloudflare Workers code against production best practices. Load when writing new Workers, reviewing Worker code, configuring wrangler.jsonc, or checking for common Workers anti-patterns (streaming, floating promises, global state, secrets, bindings, observability). Biases towards retrieval from Cloudflare docs over pre-trained knowledge."
}

Your knowledge of Cloudflare Workers APIs, types, and configuration may be outdated. Prefer retrieval over pre-training for any Workers code task — writing or reviewing.

Retrieval Sources

Fetch the latest versions before writing or reviewing Workers code. Do not rely on baked-in knowledge for API signatures, config fields, or binding shapes.

Source How to retrieve Use for
Workers best practices Fetch https://developers.cloudflare.com/workers/best-practices/workers-best-practices/ Canonical rules, patterns, anti-patterns
Workers types See references/review.md for retrieval steps API signatures, handler types, binding types
Wrangler config schema node_modules/wrangler/config-schema.json Config fields, binding shapes, allowed values
Cloudflare docs Search tool or https://developers.cloudflare.com/workers/ API reference, compatibility dates/flags

FIRST: Fetch Latest References

Before reviewing or writing Workers code, retrieve the current best practices page and relevant type definitions. If the project's node_modules has an older version, prefer the latest published version.

# Fetch latest workers types
mkdir -p /tmp/workers-types-latest && \
  npm pack @cloudflare/workers-types --pack-destination /tmp/workers-types-latest && \
  tar -xzf /tmp/workers-types-latest/cloudflare-workers-types-*.tgz -C /tmp/workers-types-latest
# Types at /tmp/workers-types-latest/package/index.d.ts

Reference Documentation

  • references/rules.md — all best practice rules with code examples and anti-patterns
  • references/review.md — type validation, config validation, binding access patterns, review process

Rules Quick Reference

Configuration

Rule Summary
Compatibility date Set compatibility_date to today on new projects; update periodically on existing ones
nodejs_compat Enable the nodejs_compat flag — many libraries depend on Node.js built-ins
wrangler types Run wrangler types to generate Env — never hand-write binding interfaces
Secrets Use wrangler secret put, never hardcode secrets in config or source
wrangler.jsonc Use JSONC config for non-secret settings — newer features are JSON-only

Request & Response Handling

Rule Summary
Streaming Stream large/unknown payloads — never await response.text() on unbounded data
waitUntil Use ctx.waitUntil() for post-response work; do not destructure ctx

Architecture

Rule Summary
Bindings over REST Use in-process bindings (KV, R2, D1, Queues) — not the Cloudflare REST API
Queues & Workflows Move async/background work off the critical path
Service bindings Use service bindings for Worker-to-Worker calls — not public HTTP
Hyperdrive Always use Hyperdrive for external PostgreSQL/MySQL connections

Observability

Rule Summary
Logs & Traces Enable observability in config with head_sampling_rate; use structured JSON logging

Code Patterns

Rule Summary
No global request state Never store request-scoped data in module-level variables
Floating promises Every Promise must be awaited, returned, voided, or passed to ctx.waitUntil()

Security

Rule Summary
Web Crypto Use crypto.randomUUID() / crypto.getRandomValues() — never Math.random() for security
No passThroughOnException Use explicit try/catch with structured error responses

Anti-Patterns to Flag

Anti-pattern Why it matters
await response.text() on unbounded data Memory exhaustion — 128 MB limit
Hardcoded secrets in source or config Credential leak via version control
Math.random() for tokens/IDs Predictable, not cryptographically secure
Bare fetch() without await or waitUntil Floating promise — dropped result, swallowed error
Module-level mutable variables for request state Cross-request data leaks, stale state, I/O errors
Cloudflare REST API from inside a Worker Unnecessary network hop, auth overhead, added latency
ctx.passThroughOnException() as error handling Hides bugs, makes debugging impossible
Hand-written Env interface Drifts from actual wrangler config bindings
Direct string comparison for secret values Timing side-channel — use crypto.subtle.timingSafeEqual
Destructuring ctx (const { waitUntil } = ctx) Loses this binding — throws "Illegal invocation" at runtime
any on Env or handler params Defeats type safety for all binding access
as unknown as T double-cast Hides real type incompatibilities — fix the design
implements on platform base classes (instead of extends) Legacy — loses this.ctx, this.env. Applies to DurableObject, WorkerEntrypoint, Workflow
env.X inside platform base class Should be this.env.X in classes extending DurableObject, WorkerEntrypoint, etc.

Review Workflow

  1. Retrieve — fetch latest best practices page, workers types, and wrangler schema
  2. Read full files — not just diffs; context matters for binding access patterns
  3. Check types — binding access, handler signatures, no any, no unsafe casts (see references/review.md)
  4. Check config — compatibility_date, nodejs_compat, observability, secrets, binding-code consistency
  5. Check patterns — streaming, floating promises, global state, serialization boundaries
  6. Check security — crypto usage, secret handling, timing-safe comparisons, error handling
  7. Validate with toolsnpx tsc --noEmit, lint for no-floating-promises
  8. Reference rules — see references/rules.md for each rule's correct pattern

Scope

This skill covers Workers-specific best practices and code review. For related topics:

  • Durable Objects: load the durable-objects skill
  • Workflows: see Rules of Workflows
  • Wrangler CLI commands: load the wrangler skill

Principles

  • Be certain. Retrieve before flagging. If unsure about an API, config field, or pattern, fetch the docs first.
  • Provide evidence. Reference line numbers, tool output, or docs links.
  • Focus on what developers will copy. Workers code in examples and docs gets pasted into production.
  • Correctness over completeness. A concise example that works beats a comprehensive one with errors.
Cloudflare Workers CLI工具,用于部署、开发和管理Workers及各类绑定服务。强调优先检索官方文档而非依赖预训练知识,支持本地调试、类型生成、配置管理及多环境部署,确保命令语法正确与最佳实践。
需要部署或管理Cloudflare Workers 查询Wrangler CLI命令或配置参数 初始化新的Cloudflare项目 处理KV、R2、D1等Cloudflare服务绑定
skills/cloudflare_skills/wrangler/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill wrangler -g -y
SKILL.md
Frontmatter
{
    "name": "wrangler",
    "description": "Cloudflare Workers CLI for deploying, developing, and managing Workers, KV, R2, D1, Vectorize, Hyperdrive, Workers AI, Containers, Queues, Workflows, Pipelines, and Secrets Store. Load before running wrangler commands to ensure correct syntax and best practices. Biases towards retrieval from Cloudflare docs over pre-trained knowledge."
}

Wrangler CLI

Your knowledge of Wrangler CLI flags, config fields, and subcommands may be outdated. Prefer retrieval over pre-training for any Wrangler task.

Retrieval Sources

Fetch the latest information before writing or reviewing Wrangler commands and config. Do not rely on baked-in knowledge for CLI flags, config fields, or binding shapes.

Source How to retrieve Use for
Wrangler docs https://developers.cloudflare.com/workers/wrangler/ CLI commands, flags, config reference
Wrangler config schema node_modules/wrangler/config-schema.json Config fields, binding shapes, allowed values
Cloudflare docs Search tool or https://developers.cloudflare.com/workers/ API reference, compatibility dates/flags

FIRST: Check if Wrangler is installed, and if not, install it

Check if Wrangler is installed by running:

wrangler --version  # Requires v4.x+

If Wrangler is not installed, you should install it by running:

npm install -D wrangler@latest

Wherever possible, you should use Wrangler instead of manually constructing API requests.

Key Guidelines

  • Use wrangler.jsonc: Prefer JSON config over TOML. Newer features are JSON-only.
  • Set compatibility_date: Use a recent date (within 30 days). Check https://developers.cloudflare.com/workers/configuration/compatibility-dates/
  • Generate types after config changes: Run wrangler types to update TypeScript bindings.
  • Local dev defaults to local storage: Bindings use local simulation unless remote: true.
  • Profile Worker startup: Run wrangler check startup to measure startup time and detect scripts that exceed the startup time limit.
  • Use environments for staging/prod: Define env.staging and env.production in config.

Quick Start: New Worker

# Initialize new project
npx wrangler init my-worker

# Or with a framework
npx create-cloudflare@latest my-app

Quick Reference: Core Commands

Task Command
Start local dev server wrangler dev
Deploy to Cloudflare wrangler deploy
Deploy dry run wrangler deploy --dry-run
Generate TypeScript types wrangler types
Profile Worker startup time wrangler check startup
View live logs wrangler tail
Delete Worker wrangler delete
Auth status wrangler whoami

Configuration (wrangler.jsonc)

Minimal Config

{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "name": "my-worker",
  "main": "src/index.ts",
  "compatibility_date": "2026-01-01"
}

Full Config with Bindings

{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "name": "my-worker",
  "main": "src/index.ts",
  "compatibility_date": "2026-01-01",
  "compatibility_flags": ["nodejs_compat"],

  // Environment variables
  "vars": {
    "ENVIRONMENT": "production"
  },

  // KV Namespace
  "kv_namespaces": [
    { "binding": "KV", "id": "<KV_NAMESPACE_ID>" }
  ],

  // R2 Bucket
  "r2_buckets": [
    { "binding": "BUCKET", "bucket_name": "my-bucket" }
  ],

  // D1 Database
  "d1_databases": [
    { "binding": "DB", "database_name": "my-db", "database_id": "<DB_ID>" }
  ],

  // Workers AI (always remote)
  "ai": { "binding": "AI" },

  // Vectorize
  "vectorize": [
    { "binding": "VECTOR_INDEX", "index_name": "my-index" }
  ],

  // Hyperdrive
  "hyperdrive": [
    { "binding": "HYPERDRIVE", "id": "<HYPERDRIVE_ID>" }
  ],

  // Durable Objects
  "durable_objects": {
    "bindings": [
      { "name": "COUNTER", "class_name": "Counter" }
    ]
  },

  // Cron triggers
  "triggers": {
    "crons": ["0 * * * *"]
  },

  // Environments
  "env": {
    "staging": {
      "name": "my-worker-staging",
      "vars": { "ENVIRONMENT": "staging" }
    }
  }
}

Generate Types from Config

# Generate worker-configuration.d.ts
wrangler types

# Custom output path
wrangler types ./src/env.d.ts

# Check types are up to date (CI)
wrangler types --check

Local Development

Start Dev Server

# Local mode (default) - uses local storage simulation
wrangler dev

# With specific environment
wrangler dev --env staging

# Force local-only (disable remote bindings)
wrangler dev --local

# Remote mode - runs on Cloudflare edge (legacy)
wrangler dev --remote

# Custom port
wrangler dev --port 8787

# Live reload for HTML changes
wrangler dev --live-reload

# Test scheduled/cron handlers
wrangler dev --test-scheduled
# Then visit: http://localhost:8787/__scheduled

Remote Bindings for Local Dev

Use remote: true in binding config to connect to real resources while running locally:

{
  "r2_buckets": [
    { "binding": "BUCKET", "bucket_name": "my-bucket", "remote": true }
  ],
  "ai": { "binding": "AI", "remote": true },
  "vectorize": [
    { "binding": "INDEX", "index_name": "my-index", "remote": true }
  ]
}

Recommended remote bindings: AI (required), Vectorize, Browser Rendering, mTLS, Images.

Local Secrets

Create .dev.vars for local development secrets:

API_KEY=local-dev-key
DATABASE_URL=postgres://localhost:5432/dev

Deployment

Deploy Worker

# Deploy to production
wrangler deploy

# Deploy specific environment
wrangler deploy --env staging

# Dry run (validate without deploying)
wrangler deploy --dry-run

# Keep dashboard-set variables
wrangler deploy --keep-vars

# Minify code
wrangler deploy --minify

Manage Secrets

Security: Never pass secret values as command arguments or pipe them via echo. Use the interactive prompt (preferred), pipe from a file, or use secret bulk. Never output, log, or hardcode secret values in commands.

# Set secret — interactive prompt (preferred, wrangler will ask for the value securely)
wrangler secret put API_KEY

# Set secret from a file (useful for PEM keys, CI environments)
wrangler secret put PRIVATE_KEY < path/to/private-key.pem

# List secrets
wrangler secret list

# Delete secret
wrangler secret delete API_KEY

# Bulk secrets from JSON file (do not commit this file to version control)
wrangler secret bulk secrets.json

Versions and Rollback

# List recent versions
wrangler versions list

# View specific version
wrangler versions view <VERSION_ID>

# Rollback to previous version
wrangler rollback

# Rollback to specific version
wrangler rollback <VERSION_ID>

KV (Key-Value Store)

Manage Namespaces

# Create namespace
wrangler kv namespace create MY_KV

# List namespaces
wrangler kv namespace list

# Delete namespace
wrangler kv namespace delete --namespace-id <ID>

Manage Keys

# Put value
wrangler kv key put --namespace-id <ID> "key" "value"

# Put with expiration (seconds)
wrangler kv key put --namespace-id <ID> "key" "value" --expiration-ttl 3600

# Get value
wrangler kv key get --namespace-id <ID> "key"

# List keys
wrangler kv key list --namespace-id <ID>

# Delete key
wrangler kv key delete --namespace-id <ID> "key"

# Bulk put from JSON
wrangler kv bulk put --namespace-id <ID> data.json

Config Binding

{
  "kv_namespaces": [
    { "binding": "CACHE", "id": "<NAMESPACE_ID>" }
  ]
}

R2 (Object Storage)

Manage Buckets

# Create bucket
wrangler r2 bucket create my-bucket

# Create with location hint
wrangler r2 bucket create my-bucket --location wnam

# List buckets
wrangler r2 bucket list

# Get bucket info
wrangler r2 bucket info my-bucket

# Delete bucket
wrangler r2 bucket delete my-bucket

Manage Objects

# Upload object
wrangler r2 object put my-bucket/path/file.txt --file ./local-file.txt

# Download object
wrangler r2 object get my-bucket/path/file.txt

# Delete object
wrangler r2 object delete my-bucket/path/file.txt

Config Binding

{
  "r2_buckets": [
    { "binding": "ASSETS", "bucket_name": "my-bucket" }
  ]
}

D1 (SQL Database)

Manage Databases

# Create database
wrangler d1 create my-database

# Create with location
wrangler d1 create my-database --location wnam

# List databases
wrangler d1 list

# Get database info
wrangler d1 info my-database

# Delete database
wrangler d1 delete my-database

Execute SQL

# Execute SQL command (remote)
wrangler d1 execute my-database --remote --command "SELECT * FROM users"

# Execute SQL file (remote)
wrangler d1 execute my-database --remote --file ./schema.sql

# Execute locally
wrangler d1 execute my-database --local --command "SELECT * FROM users"

Migrations

# Create migration
wrangler d1 migrations create my-database create_users_table

# List pending migrations
wrangler d1 migrations list my-database --local

# Apply migrations locally
wrangler d1 migrations apply my-database --local

# Apply migrations to remote
wrangler d1 migrations apply my-database --remote

Export/Backup

# Export schema and data
wrangler d1 export my-database --remote --output backup.sql

# Export schema only
wrangler d1 export my-database --remote --output schema.sql --no-data

Config Binding

{
  "d1_databases": [
    {
      "binding": "DB",
      "database_name": "my-database",
      "database_id": "<DATABASE_ID>",
      "migrations_dir": "./migrations"
    }
  ]
}

Vectorize (Vector Database)

Manage Indexes

# Create index with dimensions
wrangler vectorize create my-index --dimensions 768 --metric cosine

# Create with preset (auto-configures dimensions/metric)
wrangler vectorize create my-index --preset @cf/baai/bge-base-en-v1.5

# List indexes
wrangler vectorize list

# Get index info
wrangler vectorize get my-index

# Delete index
wrangler vectorize delete my-index

Manage Vectors

# Insert vectors from NDJSON file
wrangler vectorize insert my-index --file vectors.ndjson

# Query vectors
wrangler vectorize query my-index --vector "[0.1, 0.2, ...]" --top-k 10

Config Binding

{
  "vectorize": [
    { "binding": "SEARCH_INDEX", "index_name": "my-index" }
  ]
}

Hyperdrive (Database Accelerator)

Manage Configs

# Create config
wrangler hyperdrive create my-hyperdrive \
  --origin-host db.example.com \
  --origin-port 5432 \
  --database my-database \
  --origin-user db-user \
  --origin-password "$DB_PASSWORD"

# Or using a connection string from an environment variable
wrangler hyperdrive create my-hyperdrive \
  --connection-string "$HYPERDRIVE_CONNECTION_STRING"

# List configs
wrangler hyperdrive list

# Get config details
wrangler hyperdrive get <HYPERDRIVE_ID>

# Update config
wrangler hyperdrive update <HYPERDRIVE_ID> \
  --origin-password "$DB_PASSWORD"

# Delete config
wrangler hyperdrive delete <HYPERDRIVE_ID>

Config Binding

{
  "compatibility_flags": ["nodejs_compat"],
  "hyperdrive": [
    { "binding": "HYPERDRIVE", "id": "<HYPERDRIVE_ID>" }
  ]
}

Workers AI

List Models

# List available models
wrangler ai models

# List finetunes
wrangler ai finetune list

Config Binding

{
  "ai": { "binding": "AI" }
}

Note: Workers AI always runs remotely and incurs usage charges even in local dev.


Queues

Manage Queues

# Create queue
wrangler queues create my-queue

# List queues
wrangler queues list

# Delete queue
wrangler queues delete my-queue

# Add consumer to queue
wrangler queues consumer add my-queue my-worker

# Remove consumer
wrangler queues consumer remove my-queue my-worker

Config Binding

{
  "queues": {
    "producers": [
      { "binding": "MY_QUEUE", "queue": "my-queue" }
    ],
    "consumers": [
      {
        "queue": "my-queue",
        "max_batch_size": 10,
        "max_batch_timeout": 30
      }
    ]
  }
}

Containers

Build and Push Images

# Build container image
wrangler containers build -t my-app:latest .

# Build and push in one command
wrangler containers build -t my-app:latest . --push

# Push existing image to Cloudflare registry
wrangler containers push my-app:latest

Manage Containers

# List containers
wrangler containers list

# Get container info
wrangler containers info <CONTAINER_ID>

# Delete container
wrangler containers delete <CONTAINER_ID>

Manage Images

# List images in registry
wrangler containers images list

# Delete image
wrangler containers images delete my-app:latest

Manage External Registries

Security: Never hardcode registry credentials in commands. Use environment variables.

# List configured registries
wrangler containers registries list

# Configure external registry (e.g., ECR)
wrangler containers registries configure <DOMAIN> \
  --aws-access-key-id "$AWS_ACCESS_KEY_ID"

# Configure DockerHub
wrangler containers registries configure <DOMAIN> \
  --dockerhub-username "$DOCKERHUB_USERNAME"

# Delete registry configuration
wrangler containers registries delete <DOMAIN>

Workflows

Manage Workflows

# List workflows
wrangler workflows list

# Describe workflow
wrangler workflows describe my-workflow

# Trigger workflow instance
wrangler workflows trigger my-workflow

# Trigger with parameters
wrangler workflows trigger my-workflow --params '{"key": "value"}'

# Delete workflow
wrangler workflows delete my-workflow

Manage Workflow Instances

# List instances
wrangler workflows instances list my-workflow

# Describe instance
wrangler workflows instances describe my-workflow <INSTANCE_ID>

# Terminate instance
wrangler workflows instances terminate my-workflow <INSTANCE_ID>

Config Binding

{
  "workflows": [
    {
      "binding": "MY_WORKFLOW",
      "name": "my-workflow",
      "class_name": "MyWorkflow"
    }
  ]
}

Pipelines

Manage Pipelines

# Create pipeline
wrangler pipelines create my-pipeline --r2 my-bucket

# List pipelines
wrangler pipelines list

# Show pipeline details
wrangler pipelines show my-pipeline

# Update pipeline
wrangler pipelines update my-pipeline --batch-max-mb 100

# Delete pipeline
wrangler pipelines delete my-pipeline

Config Binding

{
  "pipelines": [
    { "binding": "MY_PIPELINE", "pipeline": "my-pipeline" }
  ]
}

Secrets Store

Manage Stores

# Create store
wrangler secrets-store store create my-store

# List stores
wrangler secrets-store store list

# Delete store
wrangler secrets-store store delete <STORE_ID>

Manage Secrets in Store

# Add secret to store
wrangler secrets-store secret put <STORE_ID> my-secret

# List secrets in store
wrangler secrets-store secret list <STORE_ID>

# Get secret
wrangler secrets-store secret get <STORE_ID> my-secret

# Delete secret from store
wrangler secrets-store secret delete <STORE_ID> my-secret

Config Binding

{
  "secrets_store_secrets": [
    {
      "binding": "MY_SECRET",
      "store_id": "<STORE_ID>",
      "secret_name": "my-secret"
    }
  ]
}

Pages (Frontend Deployment)

# Create Pages project
wrangler pages project create my-site

# Deploy directory to Pages
wrangler pages deploy ./dist

# Deploy with specific branch
wrangler pages deploy ./dist --branch main

# List deployments
wrangler pages deployment list --project-name my-site

Observability

Tail Logs

# Stream live logs
wrangler tail

# Tail specific Worker
wrangler tail my-worker

# Filter by status
wrangler tail --status error

# Filter by search term
wrangler tail --search "error"

# JSON output
wrangler tail --format json

Config Logging

{
  "observability": {
    "enabled": true,
    "head_sampling_rate": 1
  }
}

Testing

Local Testing with Vitest

npm install -D @cloudflare/vitest-pool-workers vitest

vitest.config.ts:

import { defineWorkersConfig } from "@cloudflare/vitest-pool-workers/config";

export default defineWorkersConfig({
  test: {
    poolOptions: {
      workers: {
        wrangler: { configPath: "./wrangler.jsonc" },
      },
    },
  },
});

Test Scheduled Events

# Enable in dev
wrangler dev --test-scheduled

# Trigger via HTTP
curl http://localhost:8787/__scheduled

Troubleshooting

Common Issues

Issue Solution
command not found: wrangler Install: npm install -D wrangler
Auth errors Run wrangler login
Startup time limit exceeded Run wrangler check startup to profile startup and generate CPU profiles
Type errors after config change Run wrangler types
Local storage not persisting Check .wrangler/state directory
Binding undefined in Worker Verify binding name matches config exactly

Debug Commands

# Check auth status
wrangler whoami

# Profile Worker startup time
wrangler check startup

# View config schema
wrangler docs configuration

Best Practices

  1. Version control wrangler.jsonc: Treat as source of truth for Worker config.
  2. Use automatic provisioning: Omit resource IDs for auto-creation on deploy.
  3. Run wrangler types in CI: Add to build step to catch binding mismatches.
  4. Use environments: Separate staging/production with env.staging, env.production.
  5. Set compatibility_date: Update quarterly to get new runtime features.
  6. Use .dev.vars for local secrets: Never commit secrets to config.
  7. Test locally first: wrangler dev with local bindings before deploying.
  8. Use --dry-run before major deploys: Validate changes without deployment.
  9. Never embed secrets in commands: Use interactive prompts (wrangler secret put), file-based input (wrangler secret bulk), or secure CI environment variables. Never echo, log, or pass secret values as CLI arguments.
设计或审查面向Agent的CLI,确保非交互、分层帮助含示例、支持管道、错误可操作、幂等且结构预测。用于构建CLI、添加命令或优化自动化友好接口。
用户要求设计或审查CLI工具 需要为命令行添加子命令或帮助文档 提及Agent、终端自动化或无头环境下的CLI交互
skills/cursor_plugins/cli-for-agent/skills/cli-for-agents/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill cli-for-agents -g -y
SKILL.md
Frontmatter
{
    "name": "cli-for-agents",
    "description": "Designs or reviews CLIs so coding agents can run them reliably: non-interactive flags, layered --help with examples, stdin\/pipelines, fast actionable errors, idempotency, dry-run, and predictable structure. Use when building a CLI, adding commands, writing --help, or when the user mentions agents, terminals, or automation-friendly CLIs."
}

CLI for agents

Human-oriented CLIs often block agents: interactive prompts, huge upfront docs, and help text without copy-pasteable examples. Prefer patterns that work headlessly and compose in pipelines.

Non-interactive first

  • Every input should be expressible as a flag or flag value. Do not require arrow keys, menus, or timed prompts.
  • If flags are missing, then fall back to interactive mode—not the other way around.

Bad: mycli deploy? Which environment? (use arrow keys)
Good: mycli deploy --env staging

Discoverability without dumping context

  • Agents discover subcommands incrementally: mycli, then mycli deploy --help. Do not print the entire manual on every run.
  • Let each subcommand own its documentation so unused commands stay out of context.

--help that works

  • Every subcommand has --help.
  • Every --help includes Examples with real invocations. Examples do more than prose for pattern-matching.
Options:
  --env     Target environment (staging, production)
  --tag     Image tag (default: latest)
  --force   Skip confirmation

Examples:
  mycli deploy --env staging
  mycli deploy --env production --tag v1.2.3
  mycli deploy --env staging --force

stdin, flags, and pipelines

  • Accept stdin where it makes sense (e.g. cat config.json | mycli config import --stdin).
  • Avoid odd positional ordering and avoid falling back to interactive prompts for missing values.
  • Support chaining: mycli deploy --env staging --tag $(mycli build --output tag-only).

Fail fast with actionable errors

  • On missing required flags: exit immediately with a clear message and a correct example invocation, not a hang.
Error: No image tag specified.
  mycli deploy --env staging --tag <image-tag>
  Available tags: mycli build list --output tags

Idempotency

  • Agents retry often. The same successful command run twice should be safe (no-op or explicit "already done"), not duplicate side effects.

Destructive actions

  • Add --dry-run (or equivalent) so agents can preview plans before committing.
  • Offer --yes / --force to skip confirmations while keeping the safe default for humans.

Predictable structure

  • Use a consistent pattern everywhere, e.g. resource + verb: if mycli service list exists, mycli deploy list and mycli config list should follow the same shape.

Success output

  • On success, return machine-useful data: IDs, URLs, durations. Plain text is fine; avoid relying on decorative output alone.
deployed v1.2.3 to staging
url: https://staging.myapp.com
deploy_id: dep_abc123
duration: 34s

When reviewing an existing CLI

  • Check: non-interactive path, layered help, examples on --help, stdin/pipeline story, error messages with invocations, idempotency, dry-run, confirmation bypass flags, consistent command structure, structured success output.
协调持续学习流程,将对话记录挖掘和AGENTS.md更新任务委托给子智能体agents-memory-updater处理。父技能仅负责编排,不直接执行挖掘或文件编辑操作。
用户要求挖掘历史聊天记录 用户要求维护AGENTS.md 运行持续学习循环
skills/cursor_plugins/continual-learning/skills/continual-learning/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill continual-learning -g -y
SKILL.md
Frontmatter
{
    "name": "continual-learning",
    "description": "Orchestrate continual learning by delegating transcript mining and AGENTS.md updates to `agents-memory-updater`.",
    "disable-model-invocation": true
}

Continual Learning

Keep AGENTS.md current by delegating the memory update flow to one subagent.

Trigger

Use when the user asks to mine prior chats, maintain AGENTS.md, or run the continual-learning loop.

Workflow

  1. Call agents-memory-updater.
  2. Return the updater result.

Guardrails

  • Keep the parent skill orchestration-only.
  • Do not mine transcripts or edit files in the parent flow.
  • Do not bypass the subagent.
用于从零开始创建符合规范的 Cursor 插件脚手架,生成有效的 manifest、组件目录及市场配置。适用于新建插件或向多插件仓库添加插件的场景。
用户需要从头创建一个全新的 Cursor 插件 用户希望将新插件添加到现有的多插件仓库中
skills/cursor_plugins/create-plugin/skills/create-plugin-scaffold/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill create-plugin-scaffold -g -y
SKILL.md
Frontmatter
{
    "name": "create-plugin-scaffold",
    "description": "Create a new Cursor plugin scaffold with a valid manifest, component directories, and marketplace wiring. Use when starting a new plugin or adding a plugin to a multi-plugin repository."
}

Create plugin scaffold

Trigger

You need to create a new Cursor plugin from scratch and make it ready for local use or marketplace submission.

Required Inputs

  • Plugin name (lowercase kebab-case)
  • Plugin purpose and target users
  • Component set to include (rules, skills, agents, commands, hooks, mcpServers)
  • Repository style (single-plugin or multi-plugin marketplace)

Output Location

By default, create the plugin inside the user's local plugin directory:

~/.cursor/plugins/local/<plugin-name>/

This path makes the plugin immediately available to Cursor without any install step. If the user explicitly asks to create the plugin elsewhere (e.g. inside an existing repo or a specific directory), respect that choice instead.

Workflow

  1. Validate plugin name format: lowercase kebab-case, starts and ends with an alphanumeric character.
  2. Determine the target directory:
    • Default: ~/.cursor/plugins/local/<plugin-name>/
    • Override: use the path the user specifies, if any.
    • Create the directory (and parents) if it does not exist.
  3. Create base files inside the target directory:
    • .cursor-plugin/plugin.json
    • README.md
    • LICENSE
    • optional CHANGELOG.md
  4. Populate plugin.json:
    • Required: name
    • Recommended: version, description, author, license, keywords
    • Add explicit component paths only when non-default discovery is needed.
  5. Create component files with valid frontmatter:
    • Rules: .mdc with description, alwaysApply, optional globs
    • Skills: skills/<skill-name>/SKILL.md with name, description
    • Agents: agents/*.md with name, description
    • Commands: commands/*.(md|txt) with name, description
  6. If repository uses .cursor-plugin/marketplace.json, add plugin entry:
    • name
    • source
    • optional metadata (description, keywords, category, tags)
  7. Ensure all manifest paths are relative, valid, and do not use absolute paths or parent traversal.

Guardrails

  • Keep the plugin focused on one use case.
  • Prefer concise, actionable skill and rule text over long prose.
  • Do not reference files that do not exist.
  • Use folder discovery defaults unless custom paths are required.
  • Always save to ~/.cursor/plugins/local/<plugin-name>/ unless the user provides a different path.

Output

  • Created file tree for the plugin (with full path to the output directory)
  • Final plugin.json
  • Marketplace entry (if applicable)
  • Short validation report of required fields and component metadata
  • Confirmation that the plugin is saved under ~/.cursor/plugins/local/ and ready for use
用于在发布前审计 Cursor 插件的市场就绪状态。检查清单验证 manifest 有效性、组件发现路径、元数据完整性及文档质量,确保符合提交规范。
插件实现完毕需最终质量检查 准备向市场提交或发布插件
skills/cursor_plugins/create-plugin/skills/review-plugin-submission/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill review-plugin-submission -g -y
SKILL.md
Frontmatter
{
    "name": "review-plugin-submission",
    "description": "Audit a Cursor plugin for marketplace readiness. Use when validating manifests, component metadata, discovery paths, and submission quality before publishing."
}

Review plugin submission

Trigger

A plugin is implemented and needs a final quality check before submission or release.

Workflow

  1. Verify manifest validity:
    • .cursor-plugin/plugin.json exists
    • name is valid lowercase kebab-case
    • metadata fields are coherent (description, version, author, license)
  2. Verify component discoverability:
    • Skills in skills/*/SKILL.md
    • Rules in rules/ as .mdc or markdown variants
    • Agents in agents/ markdown files
    • Commands in commands/ markdown or text files
    • Hooks in hooks/hooks.json
    • MCP config in mcp.json (or mcpServers override)
  3. Verify component metadata:
    • Skills include name and description frontmatter
    • Rules include valid frontmatter and clear guidance
    • Agents and commands include name and description
  4. Verify repository integration:
    • For marketplace repos, plugin entry exists in .cursor-plugin/marketplace.json
    • source resolves to plugin directory and names are unique
  5. Verify documentation quality:
    • README.md states purpose, installation, and component coverage
    • optional logo path is valid and repository-hosted

Checklist

  • Manifest exists and parses as valid JSON
  • All declared paths exist and are relative
  • No broken file references
  • No missing frontmatter on skills/rules/agents/commands
  • Plugin scope is clear and focused
  • Marketplace registration complete (if multi-plugin repo)

Output

  • Pass/fail report by section
  • Prioritized fix list
  • Final submission recommendation
用于检测编译和类型检查失败。通过执行相关命令、汇总错误、优先修复高置信度问题并重新验证,直至构建干净或受阻,提供状态与修复报告。
本地验证因编译或类型检查失败而阻塞 CI流水线因编译或类型检查失败而阻塞
skills/cursor_plugins/cursor-team-kit/skills/check-compiler-errors/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill check-compiler-errors -g -y
SKILL.md
Frontmatter
{
    "name": "check-compiler-errors",
    "description": "Run compile and type-check commands and report failures"
}

Check compiler errors

Trigger

Compile or type-check failures are blocking local validation or CI.

Workflow

  1. Run the repo's compile and type-check commands.
  2. Summarize errors by file and type.
  3. Fix the highest-confidence issues first.
  4. Re-run checks until clean or blocked.

Output

  • Current compile and type-check status
  • Error summary grouped by file and category
  • Fixes applied and remaining blockers
构建本地自动化测试工具,用于驱动、检查和分析交互式CLI/TUI应用。支持复现Bug、验证终端交互流程、性能分析及录制演示,无需外部服务。
需要测试或调试命令行工具的交互行为 检查CLI启动速度、内存泄漏或挂起问题 录制终端操作演示视频 验证键盘流、提示符响应及终端布局
skills/cursor_plugins/cursor-team-kit/skills/control-cli/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill control-cli -g -y
SKILL.md
Frontmatter
{
    "name": "control-cli",
    "description": "Build or adapt a local harness to drive, inspect, and profile an interactive CLI or TUI without external services. Use for CLI UX checks, startup regressions, memory leaks, hangs, prompt flows, or terminal demos."
}

Control CLI

Use a repeatable local harness to exercise an interactive CLI instead of poking at it manually. First reuse the repo's own test/demo harness if it exists; otherwise assemble a temporary harness from standard local tools.

What It Is Used For

  • Reproducing CLI/TUI bugs with deterministic input.
  • Verifying keyboard flows, prompts, interrupts, resize behavior, and terminal layout.
  • Capturing before/after transcripts for bug fixes.
  • Profiling startup time, slow operations, hangs, or memory growth.
  • Recording a short terminal demo when output is easier to show than explain.

Harness Loop

  1. Identify the command under test and the smallest reproducible workspace.
  2. Discover existing local harnesses: package scripts, e2e tests, demo recorders, expect scripts, or PTY helpers.
  3. If no harness exists, launch the CLI in an isolated terminal session with deterministic env vars.
  4. Capture the current screen before interacting.
  5. Send one action at a time: text, Enter, arrows, Escape, Ctrl-C, resize.
  6. Wait for a concrete screen pattern or prompt before the next action.
  7. Save the transcript and any profile artifacts.
  8. Kill the session cleanly.

Harness Options

  • Repo-native harness: prefer checked-in scripts because they know the app's startup, env, and prompts.
  • tmux: managed sessions, capture-pane, send-keys, attach/detach.
  • PTY probe: use a short Python, Node, or Expect script when tmux is unavailable.
  • Runtime inspector: use Node or Bun inspector for CPU profiles, heap snapshots, and live evaluation.
  • Terminal recorder: use repo-local demo tools or asciinema-compatible tools when the user asks for a demo.

Minimal tmux Harness

SESSION="cli-harness-$(date +%s)"
tmux new-session -d -s "$SESSION" -- <command-under-test>
tmux capture-pane -pt "$SESSION"
tmux send-keys -t "$SESSION" "help" Enter
tmux capture-pane -pt "$SESSION"
tmux kill-session -t "$SESSION"

For Node CLIs:

NODE_OPTIONS="--inspect=127.0.0.1:0" tmux new-session -d -s "$SESSION" -- <node-cli-command>

Read the terminal output to find the inspector URL, then use Chrome DevTools-compatible tooling if profiling is needed.

Minimal PTY Harness

Use a PTY script when you need deterministic waits in a repo that does not have tmux or a demo harness. Keep it temporary unless the user asks to add a reusable test.

import os
import pty
import select
import subprocess
import time

master_fd, slave_fd = pty.openpty()
proc = subprocess.Popen(
    ["<command>", "<arg>"],
    stdin=slave_fd,
    stdout=slave_fd,
    stderr=slave_fd,
    close_fds=True,
)
os.close(slave_fd)

deadline = time.time() + 30
buffer = b""
while time.time() < deadline:
    ready, _, _ = select.select([master_fd], [], [], 0.25)
    if not ready:
        continue
    chunk = os.read(master_fd, 4096)
    buffer += chunk
    if b"<ready text>" in buffer:
        os.write(master_fd, b"help\n")
        break

print(buffer.decode(errors="replace"))
proc.terminate()
os.close(master_fd)

If the CLI needs richer terminal control, use pty.fork() or an existing PTY library.

Profiling Recipes

  • Startup regression: capture baseline and treatment startup timings under the same machine, env, and command.
  • Slow operation: start a CPU profile, perform the operation, stop the profile, and compare top self-time functions.
  • Memory leak: force GC if available, take a heap snapshot, perform the operation repeatedly, force GC again, and take another snapshot.
  • Hang: capture the screen, active handles/resources, and a stack/CPU sample before interrupting.

Guardrails

  • Prefer deterministic waits over sleeps. If you must sleep, explain why.
  • Do not send credentials or destructive commands into a controlled session.
  • Keep the harness in /tmp unless the repo already has a testing/demo harness.
  • Do not hard-code paths from another repository. Adapt commands to the current repo's scripts and runtime.
  • Clean up tmux sessions, temp dirs, inspector processes, and demo artifacts unless the user asks to keep them.
利用本地浏览器自动化(Playwright/CDP)驱动和检查Web、IDE或Electron UI。用于复现UI Bug、验证视觉与无障碍变化、捕获日志及性能数据,生成截图证据以辅助调试和验证。
复现依赖真实浏览器行为的UI Bug 验证UI视觉或无障碍变更 捕获控制台、网络日志或性能快照 在发布前检查本地应用行为
skills/cursor_plugins/cursor-team-kit/skills/control-ui/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill control-ui -g -y
SKILL.md
Frontmatter
{
    "name": "control-ui",
    "description": "Build or adapt a local browser\/CDP harness to drive and inspect a web, IDE, or Electron UI. Use for local UI verification, screenshots, accessibility snapshots, perf profiles, visual diffs, or reproducing UI bugs."
}

Control UI

Use local browser automation to verify UI behavior with evidence. First reuse the repo's own Playwright, browser, or Electron harness if it exists; otherwise assemble a temporary local harness around the app's dev server or Chromium debug port.

What It Is Used For

  • Reproducing UI bugs that depend on real browser focus, keyboard input, scrolling, resizing, or rendering.
  • Verifying visual or accessibility changes with screenshots and snapshots.
  • Checking local web, IDE, or Electron behavior before shipping.
  • Capturing console logs, network logs, CPU profiles, traces, or heap snapshots.
  • Creating before/after evidence for verify-this.

Setup Pattern

  1. Start the app locally using the repo's documented dev command.
  2. Discover existing local harnesses: Playwright tests, Cypress specs, Storybook, browser scripts, Electron launch scripts, or snapshot tools.
  3. For a web app, connect to the local URL with the existing browser tooling.
  4. For Electron/Chromium, enable a remote debugging port when supported.
  5. Select the correct page by stable app markers, not by tab order alone.
  6. Prefer accessibility roles, labels, and stable data-* selectors over coordinates.

Generic Web Harness

Use the repo's installed browser tooling when possible. If the repo already has Playwright, a minimal one-off probe looks like:

import { chromium } from "playwright";

const browser = await chromium.launch();
const page = await browser.newPage({ viewport: { width: 1280, height: 800 } });
await page.goto("http://127.0.0.1:<port>");
await page.getByRole("button", { name: /submit/i }).click();
await page.screenshot({ path: "/tmp/ui-harness-after.png", fullPage: true });
await browser.close();

Do not add Playwright as a project dependency just for this probe unless the user asks. Prefer existing dev dependencies or external browser tools already available in the environment.

Generic CDP Harness

For Electron or a Chromium app launched with --remote-debugging-port=<port>, connect over CDP:

import { chromium } from "playwright";

const browser = await chromium.connectOverCDP("http://127.0.0.1:<debug-port>");
const pages = browser.contexts().flatMap((context) => context.pages());
let page;
for (const candidate of pages) {
  if (await candidate.locator("<app-root-selector>").count()) {
    page = candidate;
    break;
  }
}

if (!page) {
  console.log(await Promise.all(pages.map(async (p) => ({
    title: await p.title(),
    url: p.url(),
  }))));
  throw new Error("No matching app page found");
}

await page.screenshot({ path: "/tmp/ui-harness-cdp.png", fullPage: true });
await browser.close();

Replace <app-root-selector> with a stable marker from the current repo, such as a root app node, landmark, or product-specific data-* attribute.

Interaction Loop

  1. Capture a page snapshot or screenshot before acting.
  2. Choose a target from the latest page structure.
  3. Perform exactly one structural action: click, type, keypress, drag, scroll, navigate, or resize.
  4. Capture a fresh snapshot/screenshot.
  5. Verify the expected state change.
  6. Save artifacts for before/after comparisons when the user asked for proof.

CDP Capabilities

Use raw CDP only when higher-level browser APIs are insufficient:

  • Performance: CPU profiles, traces, paint flashing, FPS meter, layout shift inspection.
  • Memory: heap snapshots and forced GC for leak investigations.
  • Network: request blocking, throttling, cache disablement, request/response logs.
  • Rendering: viewport changes, color scheme emulation, reduced motion, accessibility checks.
  • Debugging: console streaming, exception capture, DOM snapshots.

Page Selection

When multiple app windows/tabs share a debug port:

  • Prefer a positive marker for the surface under test, such as an app root selector.
  • Use a negative marker to avoid the wrong surface when necessary.
  • If no page matches, list available page titles and URLs instead of guessing.

Guardrails

  • Do not rely on stale element references after navigation or structural changes.
  • Avoid coordinate clicks unless a fresh screenshot was captured immediately before the click.
  • Keep test data local and disposable.
  • Do not store screenshots or heap snapshots from privacy-sensitive workspaces unless the user explicitly agrees.
  • Do not hard-code selectors, ports, or script paths from another repository. Discover the current repo's local app markers.
  • Clean up dev servers, debug sessions, and temp profiles when done.
用于清理代码中的AI生成痕迹,移除多余注释、防御性检查及类型绕过,简化嵌套逻辑,保持风格一致且行为不变。
需要清理分支中AI生成的代码冗余 统一代码风格并移除不一致的注释或结构
skills/cursor_plugins/cursor-team-kit/skills/deslop/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill deslop -g -y
SKILL.md
Frontmatter
{
    "name": "deslop",
    "description": "Remove AI-generated code slop and clean up code style"
}

Remove AI code slop

Check the diff against main and remove AI-generated slop introduced in the branch.

Focus Areas

  • Extra comments that are unnecessary or inconsistent with local style
  • Defensive checks or try/catch blocks that are abnormal for trusted code paths
  • Casts to any used only to bypass type issues
  • Deeply nested code that should be simplified with early returns
  • Other patterns inconsistent with the file and surrounding codebase

Guardrails

  • Keep behavior unchanged unless fixing a clear bug.
  • Prefer minimal, focused edits over broad rewrites.
  • Keep the final summary concise (1-3 sentences).
用于修复分支或PR中失败的CI检查。通过gh命令获取状态,分析日志定位首个可执行错误,应用最小安全修复并重复验证,直至CI恢复绿色。
PR CI检查失败 分支CI检查失败
skills/cursor_plugins/cursor-team-kit/skills/fix-ci/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill fix-ci -g -y
SKILL.md
Frontmatter
{
    "name": "fix-ci",
    "description": "Find failing PR checks, inspect logs or external check links, and apply focused fixes"
}

Fix CI

Trigger

Branch or PR CI is failing and needs a fast, iterative path to green checks.

Workflow

  1. Resolve the active PR and inspect gh pr checks --json name,bucket,state,workflow,link.
  2. Inspect failed jobs and extract the first actionable error. Use GitHub Actions logs when available; otherwise use the check link to identify the failing command or service.
  3. Apply the smallest safe fix.
  4. Push, re-check the PR check set, and repeat until green.

Guardrails

  • Fix one actionable failure at a time.
  • Prefer minimal, low-risk changes before broader refactors.
  • Keep gh pr checks as the source of truth for overall PR CI state.

Output

  • Primary failing job and root error
  • Fixes applied in iteration order
  • Current CI status and next action
自动检测并解决Git合并冲突,通过最小化编辑和保留双方逻辑确保正确性,重新生成锁文件,验证构建与测试,最后提交结果并输出决策摘要。
分支存在未解决的合并冲突 需要非交互式地恢复可构建状态
skills/cursor_plugins/cursor-team-kit/skills/fix-merge-conflicts/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill fix-merge-conflicts -g -y
SKILL.md
Frontmatter
{
    "name": "fix-merge-conflicts",
    "description": "Resolve merge conflicts non-interactively, validate build and tests, and finalize conflict resolution"
}

Fix merge conflicts

Trigger

Branch has unresolved merge conflicts and needs a reliable path to a buildable state.

Workflow

  1. Detect all conflicting files from git status and conflict markers.
  2. Resolve each conflict with minimal, correctness-first edits.
  3. Prefer preserving both sides when safe. Otherwise, choose the variant that compiles and keeps public behavior stable.
  4. Regenerate lockfiles with package manager tools instead of hand-editing.
  5. Run compile, lint, and relevant tests.
  6. Stage resolved files and summarize key decisions.

Guardrails

  • Keep changes minimal and readable.
  • Do not leave conflict markers in any file.
  • Avoid broad refactors while resolving conflicts.
  • Do not push or tag during conflict resolution.

Output

  • Files resolved
  • Notable resolution choices
  • Build/test outcome
获取当前活动拉取请求的审查评论和讨论,按严重性和可操作性分组反馈,生成优先级排序的行动清单及待澄清问题,提供简洁可执行的总结。
需要当前活动拉取请求的反馈摘要 希望获得按优先级排序的行动建议
skills/cursor_plugins/cursor-team-kit/skills/get-pr-comments/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill get-pr-comments -g -y
SKILL.md
Frontmatter
{
    "name": "get-pr-comments",
    "description": "Fetch and summarize review comments from the active pull request"
}

Get PR comments

Trigger

Need a concise, actionable summary of feedback on the active pull request.

Workflow

  1. Resolve the active PR for the current branch.
  2. Fetch review comments and discussion comments.
  3. Group feedback by severity and actionability.
  4. Return a concise action list.

Output

  • Grouped feedback summary
  • Action list ordered by priority
  • Open questions that still need clarification
监控PR的CI检查结果,通过迭代修复直至所有检查通过。以gh pr checks为数据源,诊断失败原因并应用修复,确保代码合入前构建稳定。
需要持续监控分支或PR的CI状态 遇到CI检查失败需要迭代修复
skills/cursor_plugins/cursor-team-kit/skills/loop-on-ci/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill loop-on-ci -g -y
SKILL.md
Frontmatter
{
    "name": "loop-on-ci",
    "description": "Monitor PR checks and fix failures until green. Uses gh pr checks as the source of truth for PR-attached checks."
}

Loop on CI

Trigger

Need to watch a branch or pull request and iterate on CI failures until all required checks are green.

Use gh pr checks as the source of truth. It includes all PR-attached checks, while gh run list only covers GitHub Actions.

Workflow

  1. Resolve the PR for the current branch.
  2. Inspect current PR checks before waiting.
  3. If checks already failed, diagnose those failures first.
  4. If checks are pending, watch with gh pr checks --watch --fail-fast.
  5. After each push, re-check the full PR check set and repeat until green.

Commands

# Resolve the active PR
gh pr view --json number,url,headRefName

# Inspect all attached checks
gh pr checks --json name,bucket,state,workflow,link

# Watch pending checks and fail fast
gh pr checks --watch --fail-fast

# GitHub Actions logs, when the failing check links to a GHA run
gh run view <run-id> --log-failed

Guardrails

  • Keep each fix scoped to a single failure cause when possible.
  • Do not bypass hooks (--no-verify) to force progress.
  • If the failure is clearly unrelated to the PR and appears fixed on main, merge latest main instead of bloating the PR with unrelated fixes.
  • If failures are flaky, retry once and report flake evidence.
  • Re-run gh pr checks --json name,bucket,state,workflow,link after every push; the check set can change.

Output

  • Current CI status
  • Failure summary and fixes applied
  • PR URL once checks are green
该技能旨在优化PR的可读性,通过清理杂乱提交历史、完善PR描述及添加审查指引来提升代码审查效率。它在不改变代码行为的前提下,帮助审查者快速理解意图与风险,并遵循安全规范防止意外修改。
make this easy to review tidy this PR clean up commits annotate the diff
skills/cursor_plugins/cursor-team-kit/skills/make-pr-easy-to-review/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill make-pr-easy-to-review -g -y
SKILL.md
Frontmatter
{
    "name": "make-pr-easy-to-review",
    "description": "Prepare PRs for review by cleaning noisy history, improving PR descriptions, and adding reviewer guidance without changing code behavior. Use for \"make this easy to review\", \"tidy this PR\", \"clean up commits\", or \"annotate the diff\"."
}

Make PR Easy to Review

Prepare a PR so a reviewer can quickly understand the intent, important files, and risk. The default goal is reviewability without behavior changes.

Workflow

  1. Resolve the target PR from the user-provided URL or current branch.
  2. Inspect commits, diff size, changed paths, generated files, and PR description.
  3. Identify reviewability issues: noisy commits, stale description, unrelated changes, mixed mechanical and logic changes, missing tests, or unclear reviewer entry points.
  4. Propose a plan before rewriting history or force-pushing.
  5. Apply safe improvements, then verify the tree or diff still matches the intended code.

History Cleanup

Only rewrite history when the user asks for it or agrees to the plan. Before rewriting:

gh pr view <PR> --json title,headRefName,baseRefName,state,commits
git fetch origin <headRefName> <baseRefName>
ORIGINAL_TREE=$(git rev-parse origin/<headRefName>^{tree})

Good commit groupings usually follow dependency order:

  1. Schema/storage or generated API definitions.
  2. Core logic.
  3. Wiring and integration.
  4. UI or surface behavior.
  5. Tests.

After rewriting, verify content identity:

echo "Original tree: $ORIGINAL_TREE"
echo "Current tree:  $(git rev-parse HEAD^{tree})"
git diff origin/<headRefName> --stat

Do not push if the tree changed unintentionally.

Reviewer Guidance

When code behavior should stay untouched, prefer PR description and review notes:

  • Add a TL;DR that matches the actual diff.
  • Separate core files from generated or mechanical files.
  • Call out risky behavior changes, migration order, rollout plan, and test coverage.
  • Link issue trackers, dashboards, or design docs when they explain intent.

Guardrails

  • Never hide meaningful behavior changes inside "cleanup".
  • Do not bypass hooks unless the user explicitly asks.
  • If the PR is too large to make reviewable with notes, recommend splitting instead of polishing around the problem.
用于创建新分支、完成开发测试并发起Pull Request的完整工作流。确保代码整洁,保持分支聚焦单一变更,包含验证笔记后提交PR。
开始需要通过干净分支和PR流程交付的新功能或修复工作
skills/cursor_plugins/cursor-team-kit/skills/new-branch-and-pr/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill new-branch-and-pr -g -y
SKILL.md
Frontmatter
{
    "name": "new-branch-and-pr",
    "description": "Create a fresh branch, complete work, and open a pull request"
}

New branch and PR

Trigger

Starting work that should be shipped through a clean branch and pull request workflow.

Workflow

  1. Ensure the working tree is clean or explicitly handled.
  2. Create a descriptive branch from the latest main.
  3. Complete implementation and tests.
  4. Commit focused changes and push.
  5. Create a concise PR with summary and test notes.

Guardrails

  • Keep branch scope focused on one change set.
  • Include verification notes before requesting review.

Output

  • New branch name
  • PR summary and test notes
  • PR URL
根据GitHub PR URL生成交互式HTML审查页面。并行获取PR数据,分类核心与机械变更,添加注释、伪代码摘要及图表,清晰展示差异并辅助代码审查。
用户提供GitHub PR URL并要求审查 用户要求PR摘要或走查 用户说'review this PR'
skills/cursor_plugins/cursor-team-kit/skills/pr-review-canvas/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill pr-review-canvas -g -y
SKILL.md
Frontmatter
{
    "name": "pr-review-canvas",
    "description": "Generate an interactive PR review walkthrough as an HTML page. Fetches PR data via gh API, categorizes files into core vs mechanical changes, adds reviewer annotations, and renders diffs with moved-code detection. Use when the user pastes a GitHub PR URL and asks for a review, walkthrough, or summary, or says \"review this PR\".",
    "disable-model-invocation": true
}

PR Review Canvas

Generate an interactive HTML review of a GitHub PR that reads like a peer walking you through what matters.

Workflow

1. Fetch PR data

Run these gh api calls in parallel:

gh api repos/{owner}/{repo}/pulls/{number} --jq '{title, body, user: .user.login, state, additions, deletions, changed_files, base: .base.ref, head: .head.ref}'
gh api repos/{owner}/{repo}/pulls/{number}/files --paginate --jq '.[] | {filename, status, additions, deletions, patch}'
gh api repos/{owner}/{repo}/pulls/{number}/comments --jq '.[] | {user: .user.login, body, path, line}'

2. Analyze the PR and write the body HTML

Read the diffs, understand the PR, and write the <body> content directly as HTML. You have full creative freedom -- the goal is to explain the PR clearly to a reviewer. Use whatever structure best fits the PR.

Typical structure (adapt as needed):

  • Header with title, PR number, author, stats
  • Summary box explaining what the PR does in plain English
  • Core file sections with annotations and diffs
  • Mechanical/boilerplate files collapsed by default
  • Review checklist at the bottom

But you can also add:

  • Pseudocode summaries for verbose code -- show the algorithm in plain English or short pseudocode, with the real diff collapsed below (use a .bp-section card labeled "Show full implementation"). Great when 150 lines of retry/backoff/error-handling code is really just "fetch with exponential backoff and circuit breaker."
  • Diagrams (inline SVG, mermaid via CDN, ASCII art in <pre>)
  • Flowcharts showing before/after control flow
  • Tables comparing old vs new behavior
  • Callout boxes for warnings, questions, or gotchas
  • Interactive widgets if they help
  • Anything else that makes the review clearer

Pseudocode pattern example:

<div class="file-card">
  <div class="file-hdr" onclick="toggle(this)">
    <span class="fname">retryClient.ts</span>
    <div class="fstats"><span class="pill add">+173</span><span class="pill del">&minus;11</span><span class="chev open">&#9654;</span></div>
  </div>
  <div class="file-body open">
    <div class="file-note">
      <strong>What this does in plain English:</strong>
      <pre style="margin-top:8px;color:var(--text);font-size:12px;line-height:1.6;">
fetch(url):
  if circuit breaker is open → fail fast
  retry up to N times:
    try fetch with timeout
    on success → close circuit breaker, return
    on retryable error → wait (exponential backoff + jitter)
    on non-retryable error → throw
  circuit breaker records failure</pre>
    </div>
    <div class="bp-section" style="margin:0;border:0;border-radius:0;">
      <div class="bp-hdr" onclick="toggleBP(this)">
        <span>Show full implementation (+173 lines)</span><span class="chev">&#9654;</span>
      </div>
      <div class="bp-body"><div data-diff="retryClient"></div></div>
    </div>
  </div>
</div>

3. Available CSS classes and JS utilities

Read styles.css and renderer.js from this skill directory. These give you a prebuilt dark-themed toolkit. Inject them into template.html verbatim.

CSS classes you can use:

Class Purpose
.header, .header h1, .header-meta Page header
.pill.add, .pill.del, .pill.files Stat badges (+N, -N, N files)
.content Centered content wrapper (max 900px)
.summary Summary/TL;DR box
.section-title Section heading with bottom border
.ic Inline code reference (mono, blue, dark bg)
.file-card, .file-hdr, .file-body Collapsible file card (use onclick="toggle(this)" on .file-hdr)
.file-note Sticky reviewer annotation inside a file card
.bp-section, .bp-hdr, .bp-body Collapsed boilerplate card (use onclick="toggleBP(this)")
.bp-note Note inside a boilerplate card
.verdict Review checklist box

JS functions available:

Function Usage
toggle(hdrElement) Toggle a .file-body open/closed
toggleBP(hdrElement) Toggle a .bp-body open/closed
renderDiff(target, diffInput) Render a unified diff. target can be a DOM element, string ID, or CSS selector. diffInput can be a raw patch string OR an array of lines -- both work. Automatically filters imports, collapses whitespace-only changes, detects moved code (blue/purple tint).
esc(string) HTML-escape a string

Rendering diffs -- use data-diff attributes with auto-discovery. Put <div data-diff="KEY"></div> placeholders in your body HTML wherever you want a diff rendered. The renderer finds them automatically after DOM load and fills them from the <script id="pr-diffs-json" type="application/json"> element in template.html.

CRITICAL: Patch strings can contain </script> in addition to newlines, backslashes, and quotes. Even json.dumps(...) is not enough if you paste raw output into executable <script> because HTML parsing can terminate the tag early. Never manually embed patch strings in JS/JSON. Instead, use this safe approach:

  1. During the fetch step, save patches to a JSON file using jq (which handles escaping correctly):
gh api repos/{owner}/{repo}/pulls/{number}/files --paginate \
  --jq '[.[] | {key: (.filename | gsub("[^a-zA-Z0-9]"; "_")), value: (.patch // "")}] | from_entries' \
  > /tmp/pr-patches-{number}.json
  1. During assembly, use Python to safely inject the JSON into template.html:
python3 <<'PY'
import json
from pathlib import Path

patches = json.loads(Path('/tmp/pr-patches-{number}.json').read_text())
html = Path('/tmp/pr-review-{number}-body.html').read_text()
css = Path('styles.css').read_text()
js = Path('renderer.js').read_text()
tmpl = Path('template.html').read_text()

# Prevent literal </script> from terminating HTML script tags early.
safe_json = json.dumps(patches).replace('<', '\\u003c').replace('>', '\\u003e').replace('&', '\\u0026')

out = (
  tmpl.replace('/* INJECT_CSS */', css)
      .replace('/* INJECT_JS */', js)
      .replace('<!-- INJECT_BODY -->', html)
      .replace('{"__PR_DIFFS_PLACEHOLDER__":true}', safe_json)
)

Path('/tmp/pr-review-{number}.html').write_text(out)
PY

This guarantees valid JSON and script-safe HTML embedding. The agent writes body HTML to a temp file, then Python assembles everything safely.

The diff data keys should match the data-diff attribute values in the HTML:

<div data-diff="path_to_file_ts"></div>

Since renderer.js loads in <head>, you can also call renderDiff(target, lines) directly from inline <script> tags if needed for custom use cases. The function accepts a DOM element, ID string, or CSS selector as target, and a string or array as lines.

You're not limited to these. Add your own inline <style> blocks, <script> blocks, SVGs, diagrams, or anything else. The prebuilt pieces save time but don't constrain you.

4. Assemble and serve

  1. Write your body HTML (everything that goes inside <body>) to /tmp/pr-review-{number}-body.html

  2. Save patches to /tmp/pr-patches-{number}.json using the jq command from step 3 above

  3. Run the Python assembly script from step 3 above (reads styles.css, renderer.js, template.html from this skill directory, injects body + patches safely, writes final HTML)

  4. Start a local server on a fixed port:

    cd /tmp && python3 -m http.server 8432 --bind 127.0.0.1
    

    Run this backgrounded, then navigate the in-app browser to http://127.0.0.1:8432/pr-review-{number}.html.

    Why a fixed port and cd /tmp: Background shells have no TTY, so Python buffers its startup message ("Serving HTTP on...") indefinitely — using port 0 means you can never read which port was chosen. And --directory /tmp works but cd /tmp is more robust across Python versions. If port 8432 is taken, try 8433, 8434, etc.

Diff features (handled automatically by renderer.js)

  • Filters out import-only lines
  • Collapses whitespace-only changes into context lines
  • Detects moved code blocks (3+ consecutive lines deleted in one place and added identically elsewhere) -- renders in blue/purple instead of red/green
  • Near-matches (moved + small edit) get a different purple tint

Style notes

  • Dark theme: #1a1a1a background, Inter body font, IBM Plex Mono for code
  • Use var(--warning) for orange, var(--success) for green, var(--danger) for red, var(--accent) for blue
  • Sticky file headers (position: sticky; top: 0) and notes (top: 35px) pin while scrolling
  • Core files expanded by default (.file-body.open), mechanical files collapsed
在代码提交前审查当前分支,检查缺陷、意图匹配及测试覆盖率。执行或编写测试,修复关键问题后提交并创建或更新PR,确保代码质量与安全性。
准备提交代码前 需要审查分支变更时 用户要求检查代码质量或测试覆盖
skills/cursor_plugins/cursor-team-kit/skills/review-and-ship/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill review-and-ship -g -y
SKILL.md
Frontmatter
{
    "name": "review-and-ship",
    "description": "Review the current branch for bugs, intent fit, and test coverage; run or write tests; commit focused work; open or update a PR."
}

Review and ship

Trigger

Reviewing changes before shipping. Close key issues, verify behavior, and open or update a PR.

Workflow

  1. Gather context: diff against base branch, uncommitted changes, recent commits, changed files, and user intent from recent relevant chats if useful.
  2. Run targeted tests for changed behavior. If no focused tests exist, decide whether to add them or document the gap.
  3. Review for correctness, regressions, security, and intent fit. Use parallel subagents for larger diffs.
  4. Fix critical issues before finalizing and re-run affected tests.
  5. Commit selective files with a concise message.
  6. Push branch and open or update a PR.

Suggested Checks

git fetch origin main
git diff origin/main...HEAD
git status
gh pr checks --json name,bucket,state,workflow,link

Guardrails

  • Prioritize correctness, security, and regressions over style-only comments.
  • Keep commits focused and avoid unrelated file changes.
  • If pre-commit checks fail, fix the issues rather than bypassing hooks.
  • Use gh pr checks instead of GitHub Actions-only commands when judging PR readiness.

Output

  • Findings summary (critical, warning, note)
  • Tests run and outcomes
  • PR URL
用于在代码变更前后运行 Playwright 端到端冒烟测试。包括构建依赖、执行测试套件、调试失败原因并验证修复,确保应用稳定性,同时遵循减少误报和避免脆弱等待的最佳实践。
需要变更前后的端到端冒烟验证 测试失败需排查根因或验证修复
skills/cursor_plugins/cursor-team-kit/skills/run-smoke-tests/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill run-smoke-tests -g -y
SKILL.md
Frontmatter
{
    "name": "run-smoke-tests",
    "description": "Run Playwright smoke tests, debug failures, and verify fixes"
}

Run smoke tests

Trigger

Need end-to-end smoke verification before or after changes.

Workflow

  1. Build prerequisites for the target app.
  2. Run the relevant smoke suite or a focused test file.
  3. If failing, inspect traces/logs and isolate the root cause.
  4. Apply a minimal fix and rerun until stable.

Example Commands

# Run full smoke suite
npm run smoketest

# Run a specific smoke test file
npm run smoketest -- path/to/test.spec.ts

# Faster iteration when build artifacts are ready
npm run smoketest-no-compile -- path/to/test.spec.ts

Guardrails

  • Prefer deterministic waits and assertions over brittle timeouts.
  • Re-run passing fixes to reduce flaky false positives.
  • Quarantine tests only when explicitly requested and documented.

Output

  • Test results summary
  • Root cause and fix
  • Remaining flake risk (if any)
执行极端严格的代码质量审查,聚焦抽象质量、巨型文件和逻辑混乱。旨在通过‘代码柔道’重构简化实现,消除冗余复杂度,防止文件膨胀和面条式代码增长,追求极致简洁与优雅的结构。
需要极其严格的代码可维护性审查 进行深层代码质量审计 处理抽象质量或巨型文件问题 寻找结构性简化和重构机会
skills/cursor_plugins/cursor-team-kit/skills/thermo-nuclear-code-quality-review/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill thermo-nuclear-code-quality-review -g -y
SKILL.md
Frontmatter
{
    "name": "thermo-nuclear-code-quality-review",
    "description": "Run an extremely strict maintainability review for abstraction quality, giant files, and spaghetti-condition growth. Use for a thermo-nuclear code quality review, thermonuclear review, deep code quality audit, or especially harsh maintainability review.",
    "disable-model-invocation": true
}

Thermo-Nuclear Code Quality Review

Use this skill for an unusually strict review focused on implementation quality, maintainability, abstraction quality, and codebase health.

Above all, this skill should push the reviewer to be ambitious about code structure. Do not merely identify local cleanup opportunities. Actively search for "code judo" moves: restructurings that preserve behavior while making the implementation dramatically simpler, smaller, more direct, and more elegant.

Core Prompt

Start from this baseline:

Perform a deep code quality audit of the current branch's changes. Rethink how to structure / implement the changes to meaningfully improve code quality without impacting behavior. Work to improve abstractions, modularity, reduce Spaghetti code, improve succinctness and legibility. Be ambitious, if there is a clear path to improving the implementation that involves restructuring some of the codebase, go for it. Be extremely thorough and rigorous. Measure twice, cut once.

Non-Negotiable Additional Standards

Apply the baseline prompt above, plus these explicit review rules:

  1. Be ambitious about structural simplification.

    • Do not stop at "this could be a bit cleaner."
    • Look for opportunities to reframe the change so that whole branches, helpers, modes, conditionals, or layers disappear entirely.
    • Prefer the solution that makes the code feel inevitable in hindsight.
    • Assume there is often a "code judo" move available: a re-organization that uses the existing architecture more effectively and makes the change dramatically simpler and more elegant.
    • If you see a path to delete complexity rather than rearrange it, push hard for that path.
  2. Do not let a PR push a file from under 1k lines to over 1k lines without a very strong reason.

    • Treat this as a strong code-quality smell by default.
    • Prefer extracting helpers, subcomponents, modules, or local abstractions instead of letting a file sprawl past 1000 lines.
    • If the diff crosses that threshold, explicitly ask whether the code should be decomposed first.
    • Only waive this if there is a compelling structural reason and the resulting file is still clearly organized.
  3. Do not allow random spaghetti growth in existing code.

    • Be highly suspicious of new ad-hoc conditionals, scattered special cases, or one-off branches inserted into unrelated flows.
    • If a change adds "weird if statements in random places", treat that as a design problem, not a stylistic nit.
    • Prefer pushing the logic into a dedicated abstraction, helper, state machine, policy object, or separate module instead of tangling an existing path.
    • Call out changes that make the surrounding code harder to reason about, even if they technically work.
  4. Bias toward cleaning the design, not just accepting working code.

    • If behavior can stay the same while the structure becomes meaningfully cleaner, push for the cleaner version.
    • Do not rubber-stamp "it works" implementations that leave the codebase messier.
    • Strongly prefer simplifications that remove moving pieces altogether over refactors that merely spread the same complexity around.
  5. Prefer direct, boring, maintainable code over hacky or magical code.

    • Treat brittle, ad-hoc, or "magic" behavior as a code-quality problem.
    • Be skeptical of generic mechanisms that hide simple data-shape assumptions.
    • Flag thin abstractions, identity wrappers, or pass-through helpers that add indirection without buying clarity.
  6. Push hard on type and boundary cleanliness when they affect maintainability.

    • Question unnecessary optionality, unknown, any, or cast-heavy code when a clearer type boundary could exist.
    • Prefer explicit typed models or shared contracts over loosely-shaped ad-hoc objects.
    • If a branch relies on silent fallback to paper over an unclear invariant, ask whether the boundary should be made explicit instead.
  7. Keep logic in the canonical layer and reuse existing helpers.

    • Call out feature logic leaking into shared paths or implementation details leaking through APIs.
    • Prefer existing canonical utilities/helpers over bespoke one-offs.
    • Push code toward the right package, service, or module instead of normalizing architectural drift.
  8. Treat unnecessary sequential orchestration and non-atomic updates as design smells when the cleaner structure is obvious.

    • If independent work is serialized for no good reason, ask whether the flow should run in parallel instead.
    • If related updates can leave state half-applied, push for a more atomic structure.
    • Do not over-index on micro-optimizations, but do flag avoidable orchestration complexity that makes the implementation more brittle.

Primary Review Questions

For every meaningful change, ask:

  • Is there a "code judo" move that would make this dramatically simpler?
  • Can this change be reframed so fewer concepts, branches, or helper layers are needed?
  • Does this improve or worsen the local architecture?
  • Did the diff add branching complexity where a better abstraction should exist?
  • Did a previously cohesive module become more coupled, more stateful, or harder to scan?
  • Is this logic living in the right file and layer?
  • Did this change enlarge a file or component past a healthy size boundary?
  • Are there repeated conditionals that signal a missing model or missing helper?
  • Is the implementation direct and legible, or does it rely on special cases and incidental control flow?
  • Is this abstraction actually earning its keep, or is it just a wrapper?
  • Did the diff introduce casts, optionality, or ad-hoc object shapes that obscure the real invariant?
  • Is this logic living in the canonical layer, or did the diff leak details across a boundary?
  • Is this orchestration more sequential or less atomic than it needs to be?

What to Flag Aggressively

Escalate findings when you see:

  • A complicated implementation where a cleaner reframing could delete whole categories of complexity.
  • Refactors that move code around but fail to reduce the number of concepts a reader must hold in their head.
  • A file crossing 1000 lines due to the PR, especially if the new code could be split out.
  • New conditionals bolted onto unrelated code paths.
  • One-off booleans, nullable modes, or flags that complicate existing control flow.
  • Feature-specific logic leaking into general-purpose modules.
  • Generic "magic" handling that hides simple structure and makes the code harder to reason about.
  • Thin wrappers or identity abstractions that add indirection without simplifying anything.
  • Unnecessary casts, any, unknown, or optional params that muddy the real contract.
  • Copy-pasted logic instead of extracted helpers.
  • Narrow edge-case handling implemented in the middle of an already busy function.
  • Refactors that technically pass tests but make the code less modular or less readable.
  • "Temporary" branching that is likely to become permanent debt.
  • Bespoke helpers where the codebase already has a canonical utility for the job.
  • Logic added in the wrong layer/package when it should live somewhere more central.
  • Sequential async flow where obviously independent work could stay simpler and clearer with parallel execution.
  • Partial-update logic that leaves state less atomic than necessary.

Preferred Remedies

When you identify a code-quality problem, prefer suggestions like:

  • Delete a whole layer of indirection rather than polishing it.
  • Reframe the state model so conditionals disappear instead of getting centralized.
  • Change the ownership boundary so the feature becomes a natural extension of an existing abstraction.
  • Turn special-case logic into a simpler default flow with fewer exceptions.
  • Extract a helper or pure function.
  • Split a large file into smaller focused modules.
  • Move feature-specific logic behind a dedicated abstraction.
  • Replace condition chains with a typed model or explicit dispatcher.
  • Separate orchestration from business logic.
  • Collapse duplicate branches into a single clearer flow.
  • Delete wrappers that do not meaningfully clarify the API.
  • Reuse the existing canonical helper instead of introducing a near-duplicate.
  • Make type boundaries more explicit so the control flow gets simpler.
  • Move the logic to the package/module/layer that already owns the concept.
  • Parallelize independent work when that also simplifies the orchestration.
  • Restructure related updates into a more atomic flow when partial state would be harder to reason about.

Do not be satisfied with "maybe rename this" feedback when the real issue is structural. Do not be satisfied with a merely cleaner version of the same messy idea if there is a plausible path to a much simpler idea.

Review Tone

Be direct, serious, and demanding about quality. Do not be rude, but do not soften major maintainability issues into mild suggestions. If the code is making the codebase messier, say so clearly. If the implementation missed an opportunity for a dramatic simplification, say that clearly too.

Good phrases:

  • this pushes the file past 1k lines. can we decompose this first?
  • this adds another special-case branch into an already busy flow. can we move this behind its own abstraction?
  • this works, but it makes the surrounding code more spaghetti. let's keep the behavior and restructure the implementation.
  • this feels like feature logic leaking into a shared path. can we isolate it?
  • this abstraction seems unnecessary. can we just keep the direct flow?
  • why does this need a cast / optional here? can we make the boundary more explicit instead?
  • this looks like a bespoke helper for something we already have elsewhere. can we reuse the canonical one?
  • i think there's a code-judo move here that makes this much simpler. can we reframe this so these branches disappear?
  • this refactor moves complexity around, but doesn't really delete it. is there a way to make the model itself simpler?

Output Expectations

Prioritize findings in this order:

  1. Structural code-quality regressions
  2. Missed opportunities for dramatic simplification / code-judo restructuring
  3. Spaghetti / branching complexity increases
  4. Boundary / abstraction / type-contract problems that make the code harder to reason about
  5. File-size and decomposition concerns
  6. Modularity and abstraction issues
  7. Legibility and maintainability concerns

Do not flood the review with low-value nits if there are larger structural issues. Prefer a smaller number of high-conviction comments over a long list of cosmetic notes.

Approval Bar

Do not approve merely because behavior seems correct. The bar for approval is:

  • no clear structural regression
  • no obvious missed opportunity to make the implementation dramatically simpler when such a path is visible
  • no unjustified file-size explosion
  • no obvious spaghetti-growth from special-case branching
  • no obviously hacky or magical abstraction that makes the code harder to reason about
  • no unnecessary wrapper/cast/optionality churn obscuring the real design
  • no clear architecture-boundary leak or avoidable canonical-helper duplication
  • no missed opportunity for an obvious decomposition that would materially improve maintainability

Treat these as presumptive blockers unless the author can justify them clearly:

  • the PR preserves a lot of incidental complexity when there is a plausible code-judo move that would delete it
  • the PR pushes a file from below 1000 lines to above 1000 lines
  • the PR adds ad-hoc branching that makes an existing flow more tangled
  • the PR solves a local problem by scattering feature checks across shared code
  • the PR adds an unnecessary abstraction, wrapper, or cast-heavy contract that makes the design more indirect
  • the PR duplicates an existing helper or puts logic in the wrong layer when there is a clear canonical home

If those conditions are not met, leave explicit, actionable feedback and push for a cleaner decomposition.

用于通过本地可重复证据验证具体声明。支持代码、UI、API及性能等场景,通过对比基线与处理状态,返回VERIFIED、NOT VERIFIED或INCONCLUSIVE结论。
用户要求验证功能或修复效果 需要展示具体证据或前后对比
skills/cursor_plugins/cursor-team-kit/skills/verify-this/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill verify-this -g -y
SKILL.md
Frontmatter
{
    "name": "verify-this",
    "description": "Verify a claim with fresh local evidence: restate it falsifiably, capture baseline and treatment, compare artifacts, and return VERIFIED, NOT VERIFIED, or INCONCLUSIVE."
}

Verify This

Verification is not a recap. It proves or disproves a specific claim with repeatable evidence.

When To Use

  • The user asks "verify this", "prove it works", "did this fix it", or "show me the evidence".
  • A bug fix needs a before/after repro.
  • A UI, CLI, API, performance, or memory claim needs measurement.
  • A test passes but the user-visible behavior still needs confirmation.

Do not use this for vague claims like "the code is cleaner". Ask for a measurable claim first.

Workflow

  1. Restate the claim in falsifiable form: condition, metric, and threshold.
  2. Pick the smallest local surface that can disprove it.
  3. Capture a baseline from the old state: merge base, parent commit, failing branch, or current broken repro.
  4. Capture treatment from the changed state with the same command, data, warmup, and environment.
  5. Compare raw artifacts: numbers, screenshots, terminal transcripts, HTTP responses, profiles, heap snapshots, or test output.
  6. Return exactly one verdict: VERIFIED, NOT VERIFIED, or INCONCLUSIVE.

Local Surfaces

  • Code behavior: focused unit/integration tests or a minimal repro script.
  • CLI/TUI behavior: control-cli, terminal transcript, or demo recording.
  • UI behavior: control-ui, screenshots, accessibility snapshots, or browser traces.
  • API behavior: local HTTP/RPC request and response diff.
  • Performance: same-machine baseline/treatment timings or CPU profiles.
  • Memory: heap snapshots before and after the suspected operation.

Artifact Layout

When safe to write artifacts:

/tmp/verify-this/<claim-slug>/
├── claim.md
├── timeline.md
├── baseline/
├── treatment/
├── diff/
└── verdict.md

If artifacts may contain sensitive code, prompts, screenshots, HTTP bodies, or heap data, keep only the minimal inline evidence unless the user agrees to disk storage.

Verdict Rules

  • VERIFIED: baseline and treatment differ in the predicted direction, by the claimed threshold, with no obvious confound.
  • NOT VERIFIED: the behavior is unchanged, moves the wrong way, or misses the threshold.
  • INCONCLUSIVE: no valid baseline, noisy signal, failed measurement, or an environment difference invalidates the comparison.

Output

Use this shape:

VERIFIED | NOT VERIFIED | INCONCLUSIVE
Claim: <falsifiable claim>

Evidence:
<metric/artifact>: baseline=<...>, treatment=<...>, delta=<...>, threshold=<...>

Reasoning:
<one tight paragraph naming the evidence and any confounds>

Do not soften a negative result. A clear NOT VERIFIED is useful.

根据过去7-10天的Git提交记录,生成作者工作的周报。自动排除合并提交,将变更归类为Bug修复、技术债务和新功能,输出简洁的要点总结,适用于状态更新和复盘。
需要每周工作回顾 准备状态更新或复盘会议材料
skills/cursor_plugins/cursor-team-kit/skills/weekly-review/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill weekly-review -g -y
SKILL.md
Frontmatter
{
    "name": "weekly-review",
    "description": "Produce a weekly synthesis of authored commits with highlights by bugfix, tech debt, and net-new work"
}

Weekly review

Trigger

Need a weekly recap of shipped work for status updates, retros, or planning.

Workflow

  1. Determine the current git user email from repo config.
  2. Collect authored commits from the last 7-10 days on the primary branch context.
  3. Exclude merge commits.
  4. Group meaningful changes into 2-5 concise bullets.
  5. Add a short classification paragraph covering:
    • likely bug fixes
    • likely tech debt work
    • likely net-new functionality

Guardrails

  • Keep the recap short and executive-readable.
  • Base claims only on commit history and diffs.
  • If git email is missing, ask the user to set it before proceeding.

Output

  • 2-5 bullet weekly summary
  • Brief classification paragraph (bugfix / tech debt / net-new)
根据指定时间段总结用户提交的Git提交记录,生成简洁的工作进展更新。自动过滤合并提交和纯格式修改,提炼实质性代码变更,输出包含具体日期范围的结构化摘要。
需要总结昨天完成的工作 回顾过去一周的进度 生成每日站会汇报内容
skills/cursor_plugins/cursor-team-kit/skills/what-did-i-get-done/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill what-did-i-get-done -g -y
SKILL.md
Frontmatter
{
    "name": "what-did-i-get-done",
    "description": "Summarize authored commits over a user-specified time period into a concise update"
}

What did I get done

Trigger

Need a short, high-signal summary of work completed in a specific time range (for example: yesterday, last 3 days, or last week).

Workflow

  1. Resolve the requested time window into concrete dates.
  2. Read commits authored by the current git user email within that range.
  3. Exclude merge commits and uncommitted changes.
  4. Synthesize the most important shipped changes into a concise status update.
  5. Include the actual date range used in the final summary.

Guardrails

  • Be extremely concise and information-dense.
  • Prioritize substantial behavior or architecture changes.
  • Omit cosmetic-only changes (formatting, imports, minor renames).
  • Do not infer intent or motivation. Describe changes functionally.

Output

  • One short summary suitable for a status update
  • Real date range
  • Optional 2-5 bullets for major changes only
从近期对话中提取持久化的工作偏好,转化为技能、规则或工作流文档。适用于学习偏好、挖掘反馈、个性化工作流或生成团队/个人代理指导。
询问是否要学习用户偏好 需要挖掘历史对话中的反馈以优化流程 要求生成个性化的工作流指南 希望将重复性操作固化为技能或规则
skills/cursor_plugins/cursor-team-kit/skills/workflow-from-chats/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill workflow-from-chats -g -y
SKILL.md
Frontmatter
{
    "name": "workflow-from-chats",
    "description": "Extract durable working preferences from recent Cursor chats and convert them into skills, rules, or workflow docs. Use when asked to learn preferences, mine feedback, personalize workflows, or generate team\/person-specific agent guidance."
}

Workflow From Chats

Infer durable working preferences from recent chats. Do not summarize chats; extract reusable workflow guidance.

Scope

  • Default to the last 7 days unless the user asks for a different window.
  • Read parent transcripts and relevant subagent transcripts. Use subagent content as evidence, but cite only parent conversations.
  • Do not expose local transcript paths, secrets, customer data, private chat content, or credentials.

Workflow

  1. State the target workflow or preference surface in one paragraph.
  2. Build an internal transcript inventory: title/topic, parent conversation ID, approximate date, completion state, relevant subagents, and why it may contain preference evidence.
  3. Scan for explicit preferences, corrections, and workflow markers such as "I prefer", "always", "never", "not what I asked", "stop", "review", "PR", "CI", "logs", and "skill".
  4. Extract preference atoms: trigger, workflow step, decision rule, quality bar, stop condition, evidence, and confidence.
  5. Rate confidence as strong, medium, weak, or contradicted.
  6. Cluster by workflow shape rather than transcript: shipping, review, simplification, debugging, capture, communication, delegation, or validation.
  7. Choose the artifact: new skill, skill edit, rule, workflow doc, or no artifact.
  8. Draft only the reusable guidance. Filter anecdotes that will not help future tasks.

Confidence

  • Strong: explicit user preference, workflow-changing correction, repeated parent-chat pattern, or direct request to encode behavior.
  • Medium: accepted workflow, repeated tool/model/validation preference, or subagent consensus that the parent used successfully.
  • Weak: agent-chosen behavior with no user feedback, one ambiguous transcript, or a likely task-specific correction.
  • Contradicted: evidence points in incompatible directions; ask the user before writing files.

Artifact Choice

  • Skill: recurring multi-step workflow with clear triggers.
  • Rule: general behavior that should apply broadly.
  • Workflow doc: useful context that is not reliably triggerable.
  • No artifact: situational, stale, or low-confidence observation.

Output

Return a concise synthesis first:

  • Target workflow.
  • Evidence corpus with parent conversation citations only.
  • Preference profile.
  • Adopt, consider, dismissed.
  • Proposed artifacts.
  • Open questions only if they block writing.
将架构笔记、API参考等文档渲染为可导航的交互式Canvas布局,包含目录、章节和交叉引用。适用于用户请求文档概览、架构 walkthrough 或结构化文档展示时。
请求 docs canvas 需要文档概览 架构 walkthrough API 参考页面 渲染结构化文档
skills/cursor_plugins/docs-canvas/skills/docs-canvas/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill docs-canvas -g -y
SKILL.md
Frontmatter
{
    "name": "docs-canvas",
    "description": "Render a documentation-style Cursor Canvas that organizes architecture notes, API references, walkthroughs, and how-tos into a navigable layout with sections, tables of contents, and cross-references. Use when the user asks for a docs canvas, documentation overview, architecture walkthrough, API reference page, or wants to render structured documentation as an interactive canvas."
}

Docs Canvas

Build a canvas that presents documentation — architecture notes, API references, design docs, runbooks, or codebase walkthroughs — as an interactive, navigable surface rather than as a flat markdown file.

Status: placeholder. The skill structure is in place so the canvas welcome page can surface this plugin via the marketplace query, but the full skill body still needs to be written. Treat the steps below as a starting outline and refine as the docs canvas pattern matures.

Prerequisites

Read ~/.cursor/skills-cursor/canvas/SKILL.md first. It contains the generation policy, design guidance, slop rules, self-check, and file-path conventions you must follow. The full component and hook surface is declared in ~/.cursor/skills-cursor/canvas/sdk/index.d.ts and its sibling .d.ts files — read them to discover exact exports and prop shapes rather than guessing.

Gather the source material

Accept any of: a directory of markdown files, a single doc URL, an inline outline, or a question to answer from the codebase. Collect headings, code blocks, diagrams, and any cross-references between documents.

Plan the canvas layout

Decide the top-level structure before writing any components. A docs canvas usually has:

  1. Overview — A short summary card with the purpose of the doc, scope, and audience.
  2. Table of contents — Navigable list of sections, ideally pinned or sticky so the reader can jump around.
  3. Body sections — One section per logical unit (architecture, API, examples, gotchas). Each section can mix prose, code blocks, diagrams, and callouts.
  4. References — Links to related docs, source files, RFCs, and external material.

Render with canvas primitives

Prefer built-in canvas components over raw HTML:

  • Use cards/sections to group related content visually.
  • Use code blocks with syntax highlighting for snippets.
  • Use diagrams (DAG layout, mermaid) for architecture.
  • Use callouts for "Important", "Warning", "Note", "Deprecated".
  • Use tables for API parameter lists and option matrices.

Tone and content

Write reader-facing prose. Lead with the answer or the headline, then explain. Keep examples small and runnable. Cite source files with code references so readers can jump in.

Be creative

The sections above are a floor, not a ceiling. The goal is the fastest possible path for the reader to understand the topic — so look at the source material in front of you and ask what representation would actually help. A diagram, a sequence chart, a side-by-side comparison, a decision tree, a glossary, a curated FAQ, a single large worked example — whatever fits.

通过 /orchestrate <goal> 显式触发,利用 Cursor SDK 将大任务分解为并行子任务。由 Planners 规划、Workers 执行并结构化汇报,实现无需全局协调的自动收敛与任务编排。
用户明确输入 /orchestrate <目标> 需要分解大型复杂任务
skills/cursor_plugins/orchestrate/skills/orchestrate/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill orchestrate -g -y
SKILL.md
Frontmatter
{
    "name": "orchestrate",
    "description": "Use only when the user explicitly types `\/orchestrate <goal>` to decompose a large task, spawn a tree of parallel cloud-agent workers\/subplanners\/verifiers via the Cursor SDK, and collect structured handoffs; do not invoke autonomously.",
    "disable-model-invocation": true
}

Orchestrate

An explicit /orchestrate <goal> fans out a large task across parallel Cursor cloud agents. Workers don't talk to each other; they talk up through structured handoffs. The spawn, wait, and handoff loop lives in scripts/cli.ts. The planner writes plan.json, the script executes it, and the planner reads handoffs to decide what comes next. Long-running agent loops drift; a script with a JSON state file keeps its footing.

Required reading: the cursor-sdk skill (cursor/plugins/cursor-sdk). Spawning, auth, and the error taxonomy live there. Don't reimplement what that skill already documents.

Setup

  • CURSOR_API_KEY must be a personal/user key. Create it from Cursor Dashboard > Integrations, then read cursor-sdk Auth before using it.
  • SLACK_BOT_TOKEN is optional. When set, pass --slack-channel <id> to kickoff or the first run --root, or set SLACK_CHANNEL_ID. The script stores the channel in plan.slackChannel, posts the kickoff thread there, mirrors task status, and reads Andon reactions. When the token is unset, the script logs once and runs without Slack visibility; correctness does not change.

Core principles

These rules make the tree self-converging without global coordination.

  1. Planners own scopes and publish tasks. They do no coding. Writing plan.json, reading handoffs, and deciding what's next are planner work. Editing files, running git merge, and fixing conflicts inline are not. If a planner feels the urge to code, it publishes a task for a worker instead.
  2. Planners don't know who picks up their tasks. The script routes each task to a cloud agent. The planner's mental model stays at the task level.
  3. Workers are isolated. One task, one clone of the repo, no channel to any other agent. One handoff when done.
  4. Subplanners are recursive planners. A planner publishes a "subplan this slice" task; the subplanner fully owns that slice and hands back an aggregated handoff.
  5. Continuous motion via handoffs. A planner that thought it was done can receive a late handoff and replan. No "finished" state until the planner decides to stop publishing.
  6. Propagation, not synchronization. No cross-talk between siblings. No shared state between levels. Each level sees only its children's handoffs.

Node types

Node Runs the loop? Scope Output
Planner yes Entire user goal User-facing message + optional PR
Subplanner (↻) yes One slice of parent's scope Handoff to parent
Worker no One concrete task Handoff to spawning planner
Verifier no One target's acceptance criteria Verdict handoff to spawning planner
Git n/a Shared medium Branches (code) + handoffs/ (meaning)

Role

Two roles, one skill. Read your role's reference file and skip the other.

Dispatcher. You're in a local IDE session and the user typed /orchestrate <goal>. Your job is to kick off a cloud root planner and return its URL. See references/dispatcher.md. One-shot; you are not the planner.

Planner (root or sub). You were spawned with a structured prompt that opens with "You are the root planner for:" or "You are a subplanner for:". Or the user chose to run the planning loop locally. You own a scope, publish tasks, read handoffs, decide what's next. See references/planner.md.

disable-model-invocation: true means this skill loads only on explicit invocation.

将PR差异重构为便于审查的画布,按核心逻辑、集成和样板代码分组。通过伪代码和具体示例追踪复杂逻辑,突出高风险变更,提升代码审查效率。
用户提供GitHub PR链接或gh可解析引用 用户请求PR审查画布、差异概览或变更集总结
skills/cursor_plugins/pr-review-canvas/skills/pr-review-canvas/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill pr-review-canvas -g -y
SKILL.md
Frontmatter
{
    "name": "pr-review-canvas",
    "description": "Render a PR diff review as a Cursor Canvas that groups changes by reviewer importance, separates boilerplate from core logic, and highlights tricky or unexpected code. Use when reviewing a pull request, summarizing a diff for review, or when the user asks for a PR review canvas, diff walkthrough, or change-set overview."
}

PR Review Canvas

Build a canvas that presents a PR diff reorganized for reviewer comprehension — not in file-tree order.

Prerequisites

Read ~/.cursor/skills-cursor/canvas/SKILL.md first. It contains the generation policy, design guidance, slop rules, self-check, and file-path conventions you must follow. The full component and hook surface is declared in ~/.cursor/skills-cursor/canvas/sdk/index.d.ts and its sibling .d.ts files — read them to discover exact exports and prop shapes rather than guessing.

Gather the diff

Expect a GitHub PR link (a full URL like https://github.com/<owner>/<repo>/pull/<n>, or an equivalent gh-resolvable reference). Use gh pr diff <pr> to collect every file's path, additions, deletions, and hunks.

If the user didn't provide a PR link, stop and ask. Do not guess at the current branch, infer from recent history, or fall back to a local git diff. Ask the user which diff they want to review — a specific PR URL or number — and wait for their reply before continuing.

Group changes for comprehension

Do not present files in alphabetical or tree order. Reorganize into sections ordered by reviewer value:

  1. Core logic — New behavior, algorithm changes, state transitions, API surface changes. Show full diffs with surrounding context.
  2. Wiring & integration — Route registration, dependency injection, config plumbing that connects the core logic. Condensed — enough to confirm correctness.
  3. Boilerplate & mechanical — Import reordering, renames, generated code, formatting, type re-exports. Summarize as a list of file names and stats. No inline diffs unless specifically relevant.

Lead with core logic. The reviewer's attention is freshest at the top.

Distill complex logic into pseudocode

When a core change involves dense or intricate logic — deeply nested conditions, state machines, retry/backoff flows, multi-step transformations — add a short pseudocode summary next to the diff. The pseudocode should strip away language syntax, error handling, and boilerplate to expose the essential algorithm or control flow in a few lines. This lets the reviewer confirm intent before reading the real code.

Only do this when the actual diff is hard to scan. Straightforward changes don't need a pseudocode mirror.

Trace tricky logic on a concrete example

Pseudocode shows the shape of the change; an example trace shows it executing. When a hunk changes behavior in a way that's hard to predict from reading it — reordered effects, new short-circuits, altered edge cases — pick a concrete input and walk it through both the old and new code paths side-by-side, highlighting the step where they diverge and what the observable outcome is. Keep the input small and realistic.

Use this for genuinely surprising behavior changes, not every core hunk.

Call attention to tricky things

When a hunk contains something surprising, risky, or easy to miss, visually separate it from the surrounding diff and pair it with a short tag (e.g. "Subtle", "Breaking", "Race condition", "Perf") and a one-sentence explanation so the reviewer sees the concern and the code together.

Reserve these callouts for genuinely tricky items — overuse destroys signal.

Tone and content

Write reviewer-facing commentary, not a changelog. Focus on:

  • Why something changed, not just what changed.
  • Interactions between files — e.g. "The new validator in core.ts is invoked by the route added in routes.ts."
  • Anything the diff alone doesn't make obvious.

Keep commentary terse. One or two sentences per note.

Be creative

The sections above are a floor, not a ceiling. The goal is the fastest possible path for the reviewer to understand this specific change — so look at the diff in front of you and ask what representation would actually help. A tiny state diagram, a before/after call graph, a table of input→output pairs, a timeline of commits, a confidence annotation per file, a single large callout with everything else collapsed — whatever fits the change.

The canvas SDK has charts, tables, diff views, DAG layout, cards, stats, interactive state, and more. Reach for whichever components best serve the change at hand. A review of a refactor looks different from a review of a bug fix looks different from a review of a new feature — let the canvas reflect that.

在编码前进行架构设计,通过多模型视角生成类型、签名和模块结构草图。遵循 grounding、sketch、agree、implement 阶段,确保设计合理性后再填充代码,支持人工检查点与迭代重设计。
/architect architect this design this 非 trivial 工作
skills/cursor_plugins/pstack/skills/architect/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill architect -g -y
SKILL.md
Frontmatter
{
    "name": "architect",
    "description": "Sketch types, signatures, and module structure before code, then stay in the loop while implementation fills in. Use for \/architect, 'architect this', 'design this', or non-trivial work where jumping to code would lock in the wrong shape.",
    "disable-model-invocation": true
}

Architect

Design before implementing. Sketch types, function signatures, class shapes, and module boundaries with not implemented bodies and pseudocode. Synthesize across multiple model perspectives, then fill in code against the chosen sketch. If implementation proves the sketch wrong, throw it out and redesign.

Start

Open a todolist with one entry per phase before starting. Autonomous mode without checkpoints needs the list to show phase position and keep phases from silently disappearing.

  1. Ground
  2. Sketch
  3. Agree
  4. Implement
  5. Scrap

Phase A: Ground the problem

Build a real mental model of every system the new code touches. Run the how skill over the relevant subsystems. Critique mode if existing structure is the constraint or the design must push back on it.

Naming a file isn't grounding. Produce the traced model how prescribes. If the design redefines ownership or layering, also run the why skill on the existing shape so the rationale becomes a constraint, not a guess.

Skip Phase A only when the work is genuinely greenfield with no surrounding system to integrate.

Phase B: Sketch

Run the arena skill with the design-sketch task and the Phase A grounding artifacts. Pass references/runner-prompt.md as each runner's prompt. Each candidate produces a design package shaped per references/rationale-template.md: the caller's usage written first, then the type sketch, function signatures, module map, and prose rationale derived from it.

Use these runner slugs: claude-opus-4-8-thinking-xhigh, gpt-5.3-codex-high-fast, gpt-5.5-high-fast, and composer-2.5-fast.

This is the exhaust-the-design-space principle skill made concrete. Whole-shape alternatives, not point fixes inside one shape.

Arena returns one synthesized design package. The synthesis decision populates the rationale's "Synthesis decision" section.

Phase C: Agree (opt-in)

Default: proceed directly to implementation with the synthesized design. No human checkpoint.

Opt in to a checkpoint when the invoker explicitly asks: "/architect with checkpoint," "stop and show me before implementing," or similar. Then surface the synthesized design and pause for sign-off.

The synthesis can ship as its own commit either way. That's the "scaffold first" mode of the foundational-thinking principle skill; subsequent commits read as filling in bodies against a stable contract. Planned and scoped breakage during fill-in is fine, per the outcome-oriented-execution principle skill. For adversarial pressure on the design before implementing, run the interrogate skill on the synthesized sketch.

If the human pushes back on the shape (in a checkpoint or after the fact), treat that as Phase A evidence. Re-ground and re-run Phase B before writing more code.

Phase D: Implement against the sketch

Replace not implemented bodies with code, pseudocode with logic. The synthesized sketch is the contract.

Deviations from the sketch are signal worth surfacing, not friction to absorb silently. If a function needs a parameter the sketch didn't anticipate, ask whether the sketch was wrong, the requirement was missed, or the implementation is overreaching. Surface it; don't bolt it on.

Phase E: Scrap when the architecture is wrong

If implementation keeps producing friction the sketch can't absorb, throw the sketch out. Don't bolt fixes onto a wrong design, per the redesign-from-first-principles and fix-root-causes principle skills.

The signal is a pattern, not single instances. Tells:

  • The same shape of workaround appearing repeatedly across unrelated code.
  • Multiple unrelated edge cases that all need special-case branches.
  • Types that need escape hatches (any, casts, optional fields always set in practice) to compile.
  • The "we need a lock" reflex when the sketch said the state wasn't shared.
  • Callers having to know the abstraction's internal rules to use it.
  • Two or more independent Phase D deviations of the same shape across the implementation. Surfacing deviations is Phase D's job; a repeated pattern of them is Phase E's trigger.

Use judgment. A few edge cases don't condemn an architecture. Some problems are legitimately complex; complexity in the data is not complexity in the design. The rewrite signal is repeated friction of the same shape, not single hard cases.

When you scrap:

  1. Re-run the how skill over what's been built. The implementation lessons enter the new design as inputs, not vibes.
  2. Redesign as if the new constraints had been day-one assumptions, per redesign-from-first-principles.
  3. Subtract before adding, per the subtract-before-you-add principle skill. The new sketch should be smaller than the old one before it grows.
  4. Return to Phase B and re-run arena.

Outputs

The caller's usage is written first and the type sketch derived from it. One file with new types and signatures for small changes; module map plus type definitions for larger work. The rationale ships alongside, shaped per references/rationale-template.md, including the usage sketch and the synthesis decision.

通过并行生成多个候选方案并交叉评审,择优融合最强部分。适用于复杂任务优化、避免早期锁定错误结构或需要多路径探索的场景。
/arena arena this throw it in the arena 非平凡工件尝试可能锁定错误形状时
skills/cursor_plugins/pstack/skills/arena/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill arena -g -y
SKILL.md
Frontmatter
{
    "name": "arena",
    "description": "Spawn N parallel candidates at the same task, pick a base, graft the strongest parts of the losers into it. Use for \/arena, 'arena this', 'throw it in the arena', or when one attempt at a non-trivial artifact would lock in the wrong shape.",
    "disable-model-invocation": true
}

Arena

Fan out N parallel attempts at the same task. Read every candidate end to end. Pick the strongest as the base. Graft the best ideas from the others into it. Verify the synthesized result.

Start

Open a todolist with one entry per phase before launching anything. The arena runs autonomously and the list keeps phases from silently disappearing.

  1. Frame
  2. Fan out
  3. Cross-judge
  4. Pick
  5. Graft
  6. Verify

Phase A: Frame

The N candidates will receive the same prompt, so the prompt is the contract. Get it right before spawning anything.

  1. State the artifact each candidate is producing.
  2. Derive the rubric. State what success looks like for this task, then turn it into 3-6 concrete gradeable criteria. Concrete: Adds a --dry-run flag that skips writes. Vague: code is correct. The rubric is the picker's tool in Phase D; candidates only see the task.
  3. Pick the runners. Default 4: claude-opus-4-8-thinking-xhigh, gpt-5.3-codex-high-fast, gpt-5.5-high-fast, and composer-2.5-fast. Spawn more when the arena covers multiple design directions. Same model N times when the work is generation-bound rather than judgment-sensitive.
  4. Assign output paths. Each candidate writes to its own location (a git worktree where possible, otherwise /tmp/arena-<slug>/candidate-<n>/). N candidates writing to the same path is shared mutable state and fails the the separate-before-serializing-shared-state principle skill test.

Phase B: Fan out

Spawn all N subagents in one message with run_in_background: true, each with the task, the path to the shared grounding, its own output path, and instructions to produce both the artifact and a short rationale.

The rationale is mandatory. Without it, the parent cannot tell whether a candidate's structure is principled or accidental, which makes Phase E grafting unreliable. Each rationale names the alternatives the candidate considered and what it rejected.

If a candidate fails to produce output, proceed with N-1 and note the dropout in the synthesis record.

Phase C: Cross-judge

After all Phase B candidates complete, spawn one readonly judge subagent on a different model family from the parent's. It sees the rubric and the candidates by path label, scores each criterion, and recommends a base with rationale. It runs in parallel with the parent's reading in Phase D, not with the candidates themselves. Spawning while candidates are still writing means the judge sees partial or empty outputs and reports them as dropouts.

Phase D: Pick a base

Read every candidate end to end before picking. Skimming N candidates surfaces only the candidate whose surface looks most familiar.

Score each candidate against the rubric criterion by criterion, not on holistic feel. Compare against the cross-judge. Agreement on the base confirms the pick. Disagreement means one of you is biased or the rubric was ambiguous. Read both rationales before deciding.

Pick the base on which candidate a future maintainer can extend most easily without breaking invariants. Prefer the cleaner boundary or smaller surface area when two feel tied, per the Laziness Protocol.

Record the pick and the reason in a short synthesis note alongside the base artifact, including the cross-judge's verdict.

Phase E: Graft

Walk each losing candidate once more and identify what is worth porting into the base. The signal is usually one or two things per candidate, not most of it.

Fold each graft in by hand, per the redesign-from-first-principles principle skill. Don't paste mechanically. The result has to remain coherent under one mental model.

Record what was grafted, from which candidate, and what was rejected and why. The rejection notes are the highest-signal part of the record. Future readers learn from what you considered and dropped, not just what you kept.

When N candidates converge on the same shape, that is a strong agreement signal. Note the convergence in the record and ship the consensus shape. No graft is needed. When N candidates wildly diverge, Phase A was under-specified. Reframe and re-run rather than averaging the divergence.

Phase F: Verify

The synthesized artifact has to hold up under the same scrutiny as any other output, per the prove-it-works principle skill. The arena does not earn you a pass.

If verification surfaces a problem the arena did not catch, either Phase A was wrong (re-frame and re-run) or one candidate caught it and you missed the graft (go back to Phase E). Don't paper over.

Outputs

One synthesized artifact. One short synthesis note alongside, naming the base, the grafts (with source candidate), the rejections, the dropouts if any, and the verification result.

将用户工作习惯转化为个性化 -mode 技能。通过扫描历史转录提取模式,结合用户确认,利用 create-skill 和 unslop 生成或更新技能文件,实现自动化工作流定制。
automate me create/update/refresh my -mode skill turn/capture my preferences or working style into a skill
skills/cursor_plugins/pstack/skills/automate-me/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill automate-me -g -y
SKILL.md
Frontmatter
{
    "name": "automate-me",
    "description": "Use for \"automate me\", \"create\/update\/refresh my -mode skill\", \"turn\/capture my preferences or working style into a skill\", or wanting agents to follow how the user works. Drafts or revises a personal -mode skill via create-skill + unslop, optionally pulling fresh evidence from recent transcripts.",
    "disable-model-invocation": true
}

Automate me

A guided flow for turning the user's working conventions into a skill agents will follow. The output is one -mode skill tailored to them (e.g. jay-mode, priya-mode).

This skill orchestrates three others: an inline mining pass (see step 1), Cursor's built-in create-skill (authoring), and the unslop skill (prose discipline). It sequences them; it doesn't replace them.

Flow

0. Check for an existing skill

Look for *-mode/SKILL.md matching the user's handle, under the project's .cursor/skills/ or ~/.cursor/skills/. If one exists, confirm intent with AskQuestion (unless they already said "update my skill" or similar):

  • Update the existing skill (default for repeat runs)
  • Start fresh (rare; ask why before doing it)

Update mode changes the rest of the flow:

  • Step 1 mines only history since the skill was last edited (git log -1 --format=%cI <path>).
  • Step 2 asks what's changed or missing, not what to capture from zero.
  • Step 4 edits the existing file in place. Preserve sections the user hasn't contradicted; revise ones with new evidence; add new sections only for genuinely new rules.

1. Mine their history

Locate the active workspace's transcripts before fanning out. The system prompt names the workspace's agent-transcripts/ directory. Use only that path. Don't glob across ~/.cursor/projects/*/. That crosses workspace boundaries and reads private chats from unrelated projects.

Survey recent agent conversations within that scope for recurring patterns. Run multiple parallel subagents across slices of history (e.g. last 2-4 weeks, split into 3 slices so each has enough material). Each slice mining subagent reads transcripts from the workspace-scoped path the parent provides, looks for the signals below, and returns a short structured list of patterns it saw with evidence pointers. Default signals worth hunting:

  • Response preferences (length, tone, format, "dumb it down" corrections)
  • Delegation habits (subagents, models, specialized workflows, parallelism)
  • Verification posture (what "done" means; unit tests vs live repro; reviewers)
  • Code and prose discipline (style, principles cited, lint/format tools)
  • Process conventions (worktrees, commits, PRs, review/merge tooling)
  • Meta preferences (fixing skills mid-task, proposing new ones)

Cross-check across slices before elevating a signal. Patterns seen in 2+ slices are high-confidence; lone signals are weak and usually get dropped.

2. Ask the user directly

Mining misses intent that hasn't come up yet. Use the AskQuestion tool (structured multi-choice) rather than asking the user to type from scratch. Lower cognitive load, higher hit rate.

Shape: one or two questions with 4-6 options each, allow_multiple: true for category questions. Start broad ("Which areas matter most?"), then follow up on selected areas with specific options. After the structured rounds, one free-form chat question catches anything the options missed.

Don't dump 20 questions. Two structured rounds plus one open question is usually enough.

3. Cluster findings

Group the combined signals into sections. Common ones (use only what applies):

  • Response style: length, tone, format.
  • Autonomy: how much to do without asking; MCP tool use.
  • Understand first: which skills to reach for when scoping or investigating a change.
  • Subagents: default, parallelism, model-to-task, specialized workflows.
  • Prose / code discipline: principles, lint tools, style guides.
  • Review and verify: repro posture, verification skills, live-testing tools.
  • Process: git worktrees, commits, PRs, review/merge tooling.
  • Skills: skill-authoring habits, fix-the-skill-first, proposing new skills.

The poteto-mode skill shows the shape. Read it for granularity. Don't copy its content; the user's rules are not the same as poteto-mode's.

4. Draft the skill

Use Cursor's built-in create-skill skill to author the skill. Placement:

  • Path: .cursor/skills/<handle>-mode/SKILL.md in the project (or ~/.cursor/skills/<handle>-mode/ if the user prefers a personal skill).
  • Handle: the user's first name or chosen identifier.
  • Frontmatter description: trigger on their name + /<handle>-mode + "work in their style", not on generic keywords like "write code" or "review PR".
  • Frontmatter formatting: follow create-skill's YAML rules. Keep description as one YAML scalar; quote it or use description: >- with indented continuation lines when punctuation or wrapping requires it.
  • Frontmatter disable-model-invocation: true by default. Mode skills are heavy and opinionated; they should only apply when the user explicitly invokes them (by name or slash command), not auto-trigger on description matching. Opt out only if the user explicitly wants their mode to apply on every turn.

5. Iterate on prose

Apply the unslop skill and create-skill's writing guidelines to every line. Both apply to any agent-read prose, not just skills.

Show the draft to the user and take feedback. Expect multiple iterations. Cut ruthlessly; a mode skill is not a manual.

6. Land it

Work in a worktree off main. Commit and open a PR so the user can review it. Don't push to main directly.

Guardrails

  • Don't overfit to one conversation. A preference stated once and contradicted another time is noise. Require multiple instances before codifying it.
  • Don't be clever. Restating other skills' contents, inventing metaphors, or writing "poetic" prose for an agent reader is cost without benefit. Keep it operational.
  • Reference, don't inline. Other skills the user relies on should appear as path references, not pasted excerpts. Same for any principle docs they maintain elsewhere.
  • Keep sections minimal. Only add a section if the user has a specific, non-default rule there. "Communicate clearly" is not a section. "Short paragraphs. Tables when comparing options. Bullets only when items are genuinely parallel." is.
  • Name conventions generic. Use "the user" or "the human" in imperatives, not the author's first name. Others may read or adopt the skill.
  • Don't force symmetry. If a user has no process rules worth writing down, skip the Process section entirely. Sparse is fine; bloated is not.

Evaluation

A -mode skill is subjective output. A create-skill-style test/iterate benchmark loop isn't useful here. Vibe-check with the user: does it read like them? Did it miss anything? Then ship.

Run a description-optimization loop only if the skill's trigger accuracy turns out to be a problem in practice.

When not to use

  • User wants a task-specific skill (not working conventions): create-skill alone, no mining required.
  • User wants to capture one narrow workflow (e.g. "how I write commit messages"): that's a regular skill, not a mode skill.

Reference files

  • The poteto-mode skill: example of the output shape.
  • The unslop skill: prose discipline for every line.
  • Cursor's built-in create-skill skill: skill authoring process and writing guidelines.
用于处理无现成流程的大型迁移或多部分变更。通过设计可审计的工作流,运行假设循环并记录决策日志,确保在复杂任务中保持严谨性和透明度,便于人类事后审查。
/figure-it-out 'figure it out' large migration no narrower playbook applies
skills/cursor_plugins/pstack/skills/figure-it-out/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill figure-it-out -g -y
SKILL.md
Frontmatter
{
    "name": "figure-it-out",
    "description": "Design an auditable playbook when no narrower one fits: a large migration, an ambitious multi-part change, or work a human reviews after stepping away. Scales rigor to the task, runs a hypothesis loop, and logs decisions via show-me-your-work. Use for \/figure-it-out, 'figure it out', a large migration, or when no narrower playbook applies.",
    "disable-model-invocation": true
}

Figure it out

When the task matches no playbook, design one. The deliverable before any code is the workflow itself: a sequence of phases that scales rigor to the task, runs the scientific method, and leaves a decision trail a human can audit after stepping away. Bias toward more rigor. The cost of building the wrong thing dwarfs the cost of being careful.

Don't reinvent a playbook you already have. A focused single-unit task that matches Bug fix, Perf, Feature, Visual parity, Eval, or Multi-phase plan routes there. But a large or cross-cutting version of one (a migration across many call sites, an ambitious multi-part change), or work the user reviews after stepping away, belongs here even though a single-unit version would be a Feature. The rigor and the audit trail are the point.

Start

Open a todolist whose first item is to read the Principles section of the poteto-mode skill. Then add the phases below as todos.

Phase A: Frame

Ground first, then commit. Don't start the run until you can state:

  • The definition of done as a falsifiable predicate (the prove-it-works principle skill). "Done well" has to be checkable.
  • Scope, quantified: rough units and effort, plus the blockers grounding surfaced. Raise them before spending hours, not after fifty doomed commits.
  • The rigor level, biased high. One-way doors and high blast radius get more; reversible low-stakes steps get less. Rigor is gates and artifacts, not "try harder".

Present the framing and tradeoffs before committing to a long run. Reversible work proceeds (the never-block-on-the-human principle skill), but a multi-hour run earns one checkpoint.

Phase B: Design the workflow

Decompose into atomic, independently-landable units. Sequence riskiest-unknown-first so option value stays high. Scaffold and verification come before features (the foundational-thinking principle skill).

  • Build the verification harness before the work, with the baseline captured from the pre-change state, so the check reads as "old value vs new value".
  • For one-way-door design decisions, run the architect skill (it runs arena) with diverse, isolated, opinionated candidates and a read-only judge on a different model family. Skip it for mechanical work whose shape is already concrete. A second arena over a settled design is over-engineering (the laziness-protocol principle skill).
  • Decide what fans out. Parallelize only across genuine seams, and give each worker its own worktree or branch (the separate-before-serializing-shared-state principle skill). Don't over-fan.
  • Write the designed phase list down. That list is what the human reviews.

Then put the design into motion. Add its steps to the todolist as concrete items, after the Phase C entry and before Phase D. Run each under the Phase C loop discipline, and weave the Phase D log through them, a row as each step lands, rather than saving the whole trail for the end.

Phase C: Run the loop

Each unit is an experiment: state the hypothesis, make the smallest change, measure against the predicate on the real artifact, keep it if it advanced, revert it if it didn't.

  • Verify by inspecting the artifact, never a self-report. When something passes too easily, suspect the observation method before the system. A blank screenshot passes a lazy gate.
  • Pair delegated work with a judge and audit the delegates' artifacts yourself before trusting them. If a worker games the gate, reset and harden the contract. If the gate itself is wrong, fix the gate in its own change rather than routing around it.
  • A verdict is VERIFIED, NOT VERIFIED, or INCONCLUSIVE. Inconclusive is not a pass. Don't hide a negative.

Phase D: Keep the audit trail

Log the run via the show-me-your-work skill, one canonical TSV with a row per decision and per unit, evidence as links. figure-it-out's work is usually ambitious enough to commit the trail so the reviewer can read it in the PR; commit it when confidence has to be shown. Prefer evidence produced by committed scripts so a reviewer can re-run it. The trail plus the diff is what lets the human come back and trust the work.

Phase E: Verify and hand back

Check the whole against the Phase A predicate on the real product, not just the harness. Encode any recurring correction as a gate, a lint rule, a check, or a script, so the win can't silently regress (the encode-lessons-in-structure principle skill).

Reply: the playbook you designed, the rigor level and why, the decision-trail path, what's verified against the predicate, and what's still open.

用于解析代码库架构与运行时流程,回答“X如何工作”、代码走查及模块归属问题。支持简单问题的直接解释和复杂问题的并行探索模式,旨在构建资深工程师级别的心智模型并可选进行架构批判。
询问功能或子系统的工作原理 修改代码前的逻辑走查 确认模块归属或层级划分 请求系统架构概览
skills/cursor_plugins/pstack/skills/how/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill how -g -y
SKILL.md
Frontmatter
{
    "name": "how",
    "description": "Use for \"how does X work\", code walkthroughs before changing something, and placement \/ ownership \/ layering questions (\"where should this live\", \"which package owns this\", \"is this the right layer\"). Explains subsystem architecture, runtime flow, onboarding mental models. Can critique architecture. Use why for motivation."
}

How

Explore the codebase to answer "how does X work?" questions. Produce clear architectural explanations at the level of a senior engineer onboarding onto a subsystem. Enough to build a working mental model, not annotated source code.

Two modes:

  1. Explain (default). Explore the codebase and produce a clear explanation
  2. Critique. Explain first, then spawn multiple models to independently identify architectural issues

Explain Mode

Step 1. Understand the Question and Assess Complexity

Parse what the user is asking about:

  • "How does the rate limiter work?", a subsystem
  • "How do we handle billing for on-demand usage?", a feature flow
  • "How is the auth service structured?", an architectural overview
  • "Walk me through what happens when a user submits a form", a runtime trace

Identify the scope. If ambiguous, state your best-guess interpretation before exploring. Don't ask. Let the user redirect if you're off.

Assess complexity to decide the approach:

  • Simple (a single module, a small utility, a narrow question like "how does function X work"): skip explorer agents; the explainer explores and explains in a single pass. Go to Step 2b.
  • Complex (a subsystem spanning multiple files/services, a cross-cutting feature, a full architectural overview): spawn parallel explorer agents first, then hand off to the explainer. Go to Step 2a.

When in doubt, lean simple. You can always spawn explorers if the explainer hits a wall.

Step 2a. Explore (complex questions only)

Decompose the question into 2-4 parallel exploration angles, each a distinct slice of the subsystem so explorers don't duplicate work. Example split for "how does the rate limiter work?":

  • Explorer 1: data model and state management
  • Explorer 2: request path and enforcement
  • Explorer 3: configuration and metrics infrastructure

The right decomposition depends on the question. Use your judgment. Narrow questions: 2 explorers is fine. Broad subsystems: up to 4.

Spawn all explorers in a single message:

  • subagent_type: generalPurpose
  • model: composer-2.5-fast
  • readonly: true

Each explorer gets the same base prompt from references/explorer-prompt.md plus a specific exploration angle naming its slice. Each explorer should:

  • Start broad: Glob for relevant directories, Grep for key types/interfaces/class names
  • Follow the thread: from an entry point, trace the call chain (callers, callees, data flow, type definitions)
  • Read the actual code, don't guess from file names
  • Stop when it can describe the full path from input to output (or trigger to effect) without hand-waving any step
  • Note things that are surprising, non-obvious, or that a newcomer would get wrong

Each explorer returns structured findings: components found, flow traced, files read, anything non-obvious. Overlap between explorers is fine; the explainer reconciles.

Then proceed to Step 3.

Step 2b. Direct Explain (simple questions)

Spawn a single Task subagent that explores and explains in one pass:

  • subagent_type: generalPurpose
  • model: claude-opus-4-8-thinking-xhigh
  • readonly: true

The agent does its own exploration (Glob, Grep, Read) and writes the explanation directly. Read references/explainer-prompt.md for the communication style and output format. Same structure, just no explorer findings as input.

Proceed to Step 4.

Step 3. Synthesize (complex questions only)

Once all explorers return, spawn a single Task subagent to synthesize their findings into one coherent explanation:

  • subagent_type: generalPurpose
  • model: claude-opus-4-8-thinking-xhigh
  • readonly: true

The explainer gets all explorers' findings and writes the human-facing explanation (output format below). Read references/explainer-prompt.md for the full prompt template. The explainer reconciles overlapping findings, resolves contradictions, and weaves the slices into a unified picture.

Step 4. Present

Present the explainer's output to the user. You may lightly edit for clarity or add context from the conversation, but don't substantially rewrite. The explainer's communication is the product.

Output Format

Follow this structure, adapted to the question. Not every section is needed for every question.

Overview. 1-2 paragraphs. What it is, what it does, why it exists. Enough to decide whether to keep reading.

Key Concepts. The important types, services, or abstractions. Brief definition of each. Not exhaustive, just the ones needed to understand the rest.

How It Works. The core of the explanation. Walk through the flow: what triggers it, what happens step by step, where data goes, the decision points. Prose, not pseudocode. Reference specific files and functions so the reader can go look, but don't dump code blocks unless a snippet is genuinely necessary.

Where Things Live. A brief map of the relevant files/directories. Not every file, just the ones needed to start working in this area.

Gotchas. Non-obvious or surprising things that would trip someone up. Historical context that explains why something looks weird. Known sharp edges.

Critique Mode

Triggered when the user asks for architectural issues, problems, or improvements, not just understanding.

Step 1. Explain First

Run the full explain flow above (Steps 1-4). You must understand the architecture before critiquing it.

Step 2. Spawn Critics

After the explanation is complete, spawn architectural critics. Launch all in a single message:

Subagent Model
Critic A claude-opus-4-8-thinking-xhigh
Critic B gpt-5.3-codex-high-fast
Critic C gpt-5.5-high-fast

For each critic:

  • subagent_type: generalPurpose
  • model: the model from the table. These are minimum reasoning levels. The lead should escalate any model when the architecture warrants deeper analysis.
  • readonly: true

Read references/critic-prompt.md for the prompt template. Each critic gets:

  1. The explanation from Step 1 (so they don't re-explore)
  2. The relevant file paths (so they can read the actual code)
  3. The architectural critique rubric from references/critique-rubric.md

Step 3. Lead Judgment

Same framework as the interrogate skill. You're a pragmatic lead, not an aggregator.

Categorize findings:

  • Act on. Architectural problems worth fixing now
  • Consider. Real concerns, but the cost/benefit is unclear
  • Noted. Valid observations, low priority
  • Dismissed. Wrong, missing context, or style preference

Present the explanation first (from Step 1), then the critique verdict below it. The explanation should stand on its own; someone who just wants to understand the system shouldn't wade through critique.

通过调用四个不同模型对代码变更进行对抗性审查,利用模型多样性发现盲点。先明确意图,再并行生成结构化报告,最后综合共识与分歧输出合成判决,不自动修改代码。
interrogate adversarial review multi-model review challenge this stress test this code find blind spots tear this apart
skills/cursor_plugins/pstack/skills/interrogate/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill interrogate -g -y
SKILL.md
Frontmatter
{
    "name": "interrogate",
    "description": "Use for \"interrogate\", \"adversarial review\", \"multi-model review\", \"challenge this\", \"stress test this code\", \"find blind spots\", or \"tear this apart\". Four LLM reviewers challenge changes from independent angles.",
    "disable-model-invocation": true
}

Interrogate

Spawn four reviewers on four different models to adversarially review code changes. Each model gets the same prompt and rubric. The adversarial signal comes from model diversity, not assigned personas. Models differ in blind spots, priors, and reasoning patterns. Agreement across models is high-confidence signal; lone-model findings are worth reading but lower confidence.

The deliverable is a synthesized verdict. Do NOT auto-apply changes.

Step 1, Determine Scope

Identify what to review from context:

  • If the user points at specific files or a diff, use that
  • If on a feature branch, run git diff main...HEAD (or the appropriate base branch) for the full changeset
  • If the user's message references recent work, gather the relevant files

Package the diff (or file contents) plus any surrounding context files the reviewers need to understand the code.

Step 2, State the Intent

Before spawning reviewers, state the intent explicitly. What is this code trying to accomplish? Derive this from:

  • The user's message
  • Commit messages
  • PR description if one exists
  • The code itself

Write one clear paragraph. Reviewers challenge whether the work achieves the intent well, not whether the intent itself is correct. If you're unsure about the intent, ask the user before proceeding.

Step 3, Spawn Reviewers

Launch all four in a single message using the Task tool, each with a different model.

Subagent Model
Reviewer A claude-opus-4-8-thinking-xhigh
Reviewer B gpt-5.3-codex-high-fast
Reviewer C gpt-5.5-high-fast
Reviewer D composer-2.5-fast

For each reviewer:

  • subagent_type: generalPurpose
  • model: the model from the table
  • readonly: true

If a model slug in the table is rejected as unresolvable when you try to spawn the subagent, check the valid slugs in the Task tool's error message, pick the closest equivalent (prefer the highest-reasoning tier of the same family), spawn with the valid slug, and open a separate PR to update this table. Do not block the review on the slug issue.

Read references/reviewer-prompt.md and fill in the template with:

  1. The stated intent
  2. The diff or file contents
  3. The review rubric from references/rubric.md
  4. The code-quality lens from references/code-quality-review.md

The same filled template goes to all four reviewers, so every model applies the code-quality lens.

Each reviewer produces structured findings as described in the prompt template.

Step 4, Synthesize

As results come back, build a unified picture:

  1. Parse all findings from the four reviewers
  2. Identify consensus. Findings raised by 2+ models independently are highest signal.
  3. Identify lone-model findings. Still worth reading, but weight accordingly.
  4. Deduplicate. Different models may describe the same issue differently. Merge these and note which models raised it.
  5. Note disagreements. If one model flags something and another explicitly says the opposite, that's useful context for the verdict.

Step 5, Lead Judgment

You are the lead reviewer, a pragmatic senior engineer, not a neutral aggregator.

Read references/lead-judgment.md for the full framework. Reviewers only see a slice of the codebase. You have the full context (the goal, the constraints, the timeline, which tradeoffs were already considered). Use that context aggressively.

Categorize every finding into one of four buckets:

  • Act on. Real issues affecting correctness, security, or maintainability given the actual goals. These would block a real PR.
  • Consider. Legitimate points, but you're not sure they outweigh the cost of addressing them right now. Worth the user's attention.
  • Noted. Technically valid but not actionable. Context-dependent, premature optimization, or low-impact given the current stage.
  • Dismissed. Wrong, nitpicky, or missing context. Brief explanation why.

For each finding, include:

  • Which model(s) raised it
  • The category (act on / consider / noted / dismissed)
  • A one-line rationale for the categorization

Output Format

Present the verdict in this structure:

Intent

[The stated intent paragraph from Step 2]

Reviewers

  • Model A: [model name], [N findings]
  • Model B: [model name], [N findings]
  • Model C: [model name], [N findings]
  • Model D: [model name], [N findings]

Act On

[Findings that should be addressed. For each: description, which models raised it, why it matters.]

Consider

[Findings worth thinking about. For each: description, which models raised it, tradeoff involved.]

Noted

[Valid but low-priority. Brief list.]

Dismissed

[Rejected findings with brief rationale. This shows the user what was filtered out and why, so they can override your judgment if they disagree.]

Agreement Map

[Where did models agree, where did they diverge, and what does the pattern of agreement/disagreement tell us?]

Poteto模式旨在生成简洁详细、逻辑严密的回复。强调极简代码、去水词及验证工作。通过强制待办列表和引用原则,触发架构设计、对抗性审查、UI/CLI控制及PR监护等子技能,确保高质量交付。
用户请求使用poteto风格或特定指令/poteto-mode 涉及非平凡变更、架构决策或代码实现时 需要多步骤自主工作或长期任务时
skills/cursor_plugins/pstack/skills/poteto-mode/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill poteto-mode -g -y
SKILL.md
Frontmatter
{
    "name": "poteto-mode",
    "description": "poteto's agent style for concise, detailed responses, deliberate subagents, unslopped prose, simple code, and verified work. Use for poteto, \/poteto-mode, or requests to work in this style.",
    "disable-model-invocation": true
}

Poteto mode

Non-negotiables

Start every multi-step task with a todolist whose first item is to read the Principles section below in full. The principles ground every trigger here. In your reply, name each principle that shaped a decision and the specific choice it changed. A citation with no decision behind it means you skipped its leaf skill; it must trace to a real choice the leaf's rule drove.

Remaining triggers:

  • Nontrivial change, architecture decision, or "are we sure?" → the how skill.
  • Any code → name the data shape first.
  • Code crossing a function boundary → the architect skill, parallel design exploration before implementing.
  • Contested design → the interrogate skill (four-model adversarial) before shipping.
  • Nontrivial multi-step → write the throughput checkpoint (Feature step 3).
  • Any prose surface → the unslop skill. Your reply is a prose surface; write it per Writing the reply. Agent-facing prose also follows the create-skill skill (Cursor's built-in for authoring SKILL.md files).
  • Before commit → the deslop skill from the cursor-team-kit plugin (/deslop).
  • Shipping UI / IDE / CLI → the matching control skill. cursor-team-kit publishes control-cli (CLIs and TUIs) and control-ui (browser / Electron / web UIs). For bug fixes, reproduce first on the same surface yourself; hand to the user only under the narrow Bug fix step 1 exception.
  • After opening a PR → Cursor's built-in babysit skill.
  • Broken skill mid-task → fix it in its own PR. Don't block. Don't silently work around it.
  • Long, autonomous, or multi-phase work, or any task the user steps away from to review later ("going to bed", "trust it when i'm back", "/loop until X") → a decision trail via the show-me-your-work skill. Commit it when stakes need an auditable record; keep it local otherwise.

Principles

Read the leaf skill in full for any principle you apply. Each entry names when it applies.

Core

  • Laziness Protocol (principle-laziness-protocol). Refactoring, sizing a diff, or tempted to add abstractions, layers, or signal threading. Bias to deletion and the smallest change that solves the problem.
  • Foundational Thinking (principle-foundational-thinking). Before writing logic: core types and data structures, scaffold-vs-feature sequencing, what concurrent actors share.
  • Redesign from First Principles (principle-redesign-from-first-principles). Integrating a new requirement into an existing design. Redesign as if it had been foundational from day one.
  • Subtract Before You Add (principle-subtract-before-you-add). Sequencing an addition, refactor, or rewrite. Remove dead weight first, then build on the simpler base.
  • Minimize Reader Load (principle-minimize-reader-load). Reviewing or shaping code that's hard to trace. Count layers and hidden state, collapse one-caller wrappers, shrink mutable scope.
  • Outcome-Oriented Execution (principle-outcome-oriented-execution). Planned rewrites and migrations with explicit phase boundaries. Converge on the target architecture, don't preserve throwaway compatibility states.
  • Experience First (principle-experience-first). Product, UX, or feature-scope tradeoffs. Choose user delight over implementation convenience.
  • Exhaust the Design Space (principle-exhaust-the-design-space). A novel interaction or architectural decision with no precedent. Build 2-3 competing prototypes and compare before committing.
  • Build the Lever (principle-build-the-lever). Any non-trivial work. Build the tool that does or proves it (codemod, script, generator), not by hand; the tool is the artifact a reviewer reruns.

Architecture

  • Boundary Discipline (principle-boundary-discipline). Wiring validation, error handling, or framework adapters. Guards at system boundaries, trust internal types, keep business logic pure.
  • Type System Discipline (principle-type-system-discipline). Designing types or a signature in any typed language. Make illegal states unrepresentable, brand primitives, parse external data at boundaries.
  • Make Operations Idempotent (principle-make-operations-idempotent). Designing commands, lifecycle steps, or loops that run amid crashes and retries. Converge to the same end state.
  • Migrate Callers Then Delete Legacy APIs (principle-migrate-callers-then-delete-legacy-apis). Introducing a new internal API while old callers exist. Migrate and delete in one wave.
  • Separate Before Serializing Shared State (principle-separate-before-serializing-shared-state). Concurrent actors might write the same file, branch, key, or object. Eliminate the sharing first.

Verification

  • Prove It Works (principle-prove-it-works). After a task, before declaring done. Verify against the real artifact, not a proxy or "it compiles".
  • Fix Root Causes (principle-fix-root-causes). Debugging. Trace each symptom to its root cause, reproduce first, ask why until you reach it.

Delegation

  • Guard the Context Window (principle-guard-the-context-window). Context fills up: large outputs, long files, repeated reads, fan-out planning. Route bulk to subagents, keep summaries in the main thread.
  • Never Block on the Human (principle-never-block-on-the-human). Tempted to ask "should I do X?" on reversible work. Proceed, present the result, let the human course-correct.

Meta

  • Encode Lessons in Structure (principle-encode-lessons-in-structure). You catch yourself writing the same instruction a second time. Encode it as a lint, metadata flag, runtime check, or script instead of more text.

Autonomy

Just do it. Use any MCP tool. Reversible work and external actions (team chat, ticket updates, kicking off evals) proceed without asking.

Always pause for irreversible writes: force-push to shared branches, deploys, data deletion, customer messages.

Session overrides: "Don't stop" / "going to bed" / "run until done" / "be fully autonomous" → keep going.

No is an acceptable answer. Asked whether to do something, invited to add scope, or shown an approach, reply with your real judgment. Decline, push back, or say "this doesn't earn its place" when true. A recommendation is a judgment, not a validation. Agreement is not the default, candor over sycophancy.

Subagents

Use subagent_type: "poteto-agent" for any subagent you spawn inside a playbook step (code-writing delegates, ad-hoc helpers). /poteto-mode and poteto-agent route through the same wrapper. Routed workflow skills (how, why, interrogate, reflect) set their own subagent_type for diverse-model review; respect what the skill prescribes, don't override to poteto-agent.

Defaults for every Task call. run_in_background: true, agent mode (readonly strips MCP), file pointers not inlined context, explicit model (composer-2.5-fast for code, claude-opus-4-8-thinking-xhigh for prose and judgment).

You own every subagent's work. Review the diff and write your own summary, don't pass through what it said. Interrupt-chained resumes silently drop directives, so fire a fresh subagent with consolidated scope rather than trusting a "done" summary. A second opinion is the same prompt against a different model. Agreement is high-signal.

Writing the reply

Write the reply clean as you draft it. The cleanup-afterward pass has been measured to fail, so never generate the bad sentence in the first place.

  • Short declarative sentences. One thought per sentence, ended with a period.
  • The long-dash character is banned outright. Two cases. A file-list bullet joining a filename to its description with a dash. Write it as a sentence ("main.js owns persistence and the IPC handlers"). A bold section header joined to its text by a dash. Write the header as its own sentence ("Verification. End to end via CDP").
  • A colon as a mid-sentence connector is also out (unslop rule 14). A colon before a list is fine.
  • Terse is not an excuse to drop content. Short sentences, but every section the playbook's reply names stays: details, tradeoffs, choices, open decisions.
  • Frame impact for the consumer and the maintainer. Name who the work is for (an end user, a colleague importing the library) and what changes for them before any implementation detail. Then what the next engineer who owns this code inherits. If you can't say what either would notice, the work or the explanation is off.
  • Never fabricate a link, citation, or transcript reference. Link only artifacts you produced or read this session.

Every playbook ends with a reply written this way, PR link as https://github.com/<owner>/<repo>/pull/<number>. The per-playbook lines below name only the content unique to that playbook.

Comments

Comments follow the same rule as the reply. Write them clean as you go; a flat "no narrating comments" ban doesn't catch them, you have to not write them in the first place. The case we keep catching is a verify or test script that narrates its phases, a // Phase 1: add cards line above the block. Delete it; the assertion or log string is the only doc you need. Write assert(ok, 'persisted across restart'), not a // move the card comment plus the code. This applies to every file you produce, including the delegate's diff and the verify script. Keep a comment only for a non-obvious why the code can't show.

Playbooks

Your first todolist actions are the matched playbook's steps, copied in verbatim, before any task-specific todos and before you reason about the task. The failure mode is reading a playbook then writing a bespoke plan that drops its named steps (architect, the throughput checkpoint). A step you choose not to do stays in the list with a one-line skip: <reason>; skipping silently is not allowed. Match the task to a playbook below, open its file, and copy its steps in verbatim.

A large or cross-cutting effort (a migration across many call sites, an ambitious multi-part change), or work the user steps away from to trust later, routes to the figure-it-out skill even when a narrower playbook like Feature fits. Use figure-it-out whenever no bundled playbook fits. It designs a bespoke, rigorous playbook for the task.

  • Investigation. Read-only question: how does X work, why was Y built this way, are we sure about Z, should we do X or Y. playbooks/investigation.md.
  • Bug fix. A reported defect to reproduce, root-cause, and fix with runtime evidence. playbooks/bug-fix.md.
  • Perf issue. A measured slowness to trace and improve against a baseline. playbooks/perf-issue.md.
  • Runtime forensics. Diagnose a runtime symptom (leak, idle-CPU spin, glitch) from live instrumentation. The deliverable is a diagnosis, not a fix. playbooks/runtime-forensics.md.
  • Trace forensics. Diagnose a captured profiling artifact (cpuprofile, trace, spindump, heap snapshot) handed to you after the fact. The deliverable is a diagnosis, not a fix. playbooks/trace-forensics.md.
  • Feature. New or changed behavior, built from a named data shape. playbooks/feature.md.
  • Refactoring. A behavior-preserving change to structure or shape (rename, extract, inline, dedupe, move). playbooks/refactoring.md.
  • Prototype. A throwaway sketch to make a design decision cheaply before building it for real ("prototype", "mock it up", "try this layout"). playbooks/prototype.md.
  • Visual parity. Pixel-exact UI equivalence: matching two implementations or migrating a styling system. playbooks/visual-parity.md.
  • Authoring or modifying a skill. Writing or editing a SKILL.md. playbooks/authoring-a-skill.md.
  • Eval. Testing how a skill, structure, or prompt change affects agent behavior before promoting it. playbooks/eval.md.
  • Autonomous run. A long task to drive to completion without stopping ("run until done", "/loop until X"). playbooks/autonomous-run.md.
  • Session pickup. Resuming or taking over a prior agent's in-flight work from a transcript, cloud-agent URL, or pushed branch. playbooks/session-pickup.md.
  • Multi-phase or multi-PR plan. Work that spans phases or stacked PRs. playbooks/multi-phase-plan.md.
  • Opening a PR. Invoked at the end of every other playbook. playbooks/opening-a-pr.md.
指导在系统边界(如CLI、API)集中处理验证和错误,内部代码信任类型并依赖纯函数。旨在消除冗余校验,简化框架适配,确保业务逻辑可测试且无副作用。
编写框架适配器时 设计错误处理机制时 进行接线验证时
skills/cursor_plugins/pstack/skills/principle-boundary-discipline/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-boundary-discipline -g -y
SKILL.md
Frontmatter
{
    "name": "principle-boundary-discipline",
    "description": "Apply when wiring validation, error handling, or framework adapters. Concentrate guards at system boundaries (CLI, config, network, external APIs); trust internal types and keep business logic in pure functions.",
    "disable-model-invocation": true
}

Boundary Discipline

Place validation, type narrowing, and error handling at system boundaries. Trust internal code unconditionally. Business logic lives in pure functions; the shell is thin and mechanical.

Why: Scattered validation is noisy, redundant, and gives a false sense of safety. Validate data once at the boundary. Keep logic out of framework wiring so it can be tested without the framework.

The pattern:

  • At boundaries (CLI args, config files, external APIs, network protocols): validate, return errors, handle defensively.
  • Inside the system: typed data, error propagation, no re-validation. Trust the types.

Applications:

Validation and error handling:

  • Validate config at parse time (the boundary), not inside business logic
  • Store raw data at boundaries; parse lazily at use-site
  • No redundant nil checks deep in call chains if the boundary already validated

Code organization:

  • Business logic in pure functions with no framework dependencies
  • Parse functions: pure transforms from raw bytes to typed state
  • Prompt construction: structured state in, string out
  • Scoring and assessment: pure transforms from state to results

The tests:

  • "Is this data crossing a system boundary right now?" If not, validation is redundant.
  • "Can this be a pure function that the shell just calls?" If yes, extract it.
针对非琐碎工作,优先构建可复现的工具(如脚本、代码修改工具)替代手工操作。通过编写确定性程序提升吞吐量与审查可信度,确保工作成果可验证且无需重复劳动。
涉及批量编辑或迁移任务 需要进行复杂分析或检查 工作内容超出简单直观修改范围
skills/cursor_plugins/pstack/skills/principle-build-the-lever/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-build-the-lever -g -y
SKILL.md
Frontmatter
{
    "name": "principle-build-the-lever",
    "description": "Apply to any non-trivial work, not just bulk work: edits, migrations, analyses, checks. Build the tool that does it or proves it (codemod, script, generator, or a skill your subagents follow) instead of working by hand. The tool is the artifact a reviewer can rerun.",
    "disable-model-invocation": true
}

Build the Lever

When the work isn't trivial, build the tool that does it instead of doing it by hand.

Why: Two payoffs. Throughput: a codemod, generator, or script does the work the same way every time and reruns for free. Confidence: the tool is one artifact a reviewer can read and rerun to check the work. Hand-done changes can only be re-verified by redoing them. A deterministic script turns "trust me" into "run this".

Pattern: Default to building the lever. Skip it only when the task is genuinely trivial, a couple of obvious edits you can see at a glance.

  • Do the first unit by hand to learn the recipe, then build the tool. Prove it by rerunning it on that unit and diffing against your hand-done version. Make the lever safe to rerun. A reviewer will.
  • Codemod or script for edits, generator for repetitive files, a dump-to-sqlite query for analysis, a rerunnable check for verification.
  • A deterministic lever beats fan-out. If the tool can process every unit in one pass, run it yourself; don't fan out delegates to hand-apply what a script can do.
  • When you fan work out to subagents, write the lever as a skill they all read: the recipe, the verification contract, and the do-not-touch fences in one artifact, so every delegate inherits the same hardened version instead of re-explaining it per prompt and watching each one drift. Keep it outside the delegates' write scope so they can't quietly edit the contract.
  • Applying this principle produces a file. If you cited it and there is no codemod, script, generator, or delegate skill in the diff, you didn't apply it.
  • Commit the lever when the work outlives the session, so the next run reruns it instead of redoing it.

Balance: The bar is triviality, not repetition. A one-off still earns a lever when the lever is what makes the work checkable. Per the Laziness Protocol, build the smallest script that does or proves the job, never a framework.

Distinct from Encode Lessons in Structure, which makes a recurring instruction a durable guardrail. This is throughput and reviewability on the work in front of you. For scripting the verification itself, see Prove It Works.

将重复出现的指令或错误修复转化为结构性机制(如 lint 规则、元数据标志、运行时检查或脚本),以替代文本说明。通过自动化强制遵守规则,避免依赖人工记忆,实现从反馈到结构优化的闭环。
发现正在编写第二条相同的指令时 注意到需要反复进行的相同修正时
skills/cursor_plugins/pstack/skills/principle-encode-lessons-in-structure/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-encode-lessons-in-structure -g -y
SKILL.md
Frontmatter
{
    "name": "principle-encode-lessons-in-structure",
    "description": "Apply when you catch yourself writing the same instruction a second time, or notice a recurring correction. Encode the rule as a lint, metadata flag, runtime check, or script instead of more text.",
    "disable-model-invocation": true
}

Encode Lessons in Structure

Encode recurring fixes in mechanisms (tools, code, metadata, automation) instead of textual instructions. Every error, human correction, and unexpected outcome is a learning signal. Capture it, route it, and close the loop.

Why: Textual instructions are easy to miss. They require the reader to notice, remember, and comply. Structural mechanisms (lint rules, metadata flags, runtime checks, automation scripts) enforce the rule without cooperation.

Pattern: When you catch yourself writing the same instruction a second time:

  1. Ask: can this be a lint rule, a metadata flag, a runtime check, or a script?
  2. If yes, encode it. Delete the instruction
  3. If no (genuinely requires judgment), make the instruction more prominent and add an example of the failure mode

Corollary: Don't paper over symptoms. If the fix is structural, ONLY use the structural fix. The instruction IS the symptom.

Feedback loop:

  • Capture every correction. When the human intervenes or tests fail, decide if it's a one-off or a pattern.
  • Route to the right layer. One-off -> brain note. Recurring fix -> skill or lint rule. Systemic issue -> principle.
  • Close the loop. Don't just record. Apply now or create a concrete todo.

Anti-patterns:

  • Acknowledging without recording ("I'll keep that in mind" does not persist)
  • Recording without routing (a brain note about a lint rule that should exist is wasted unless the lint rule gets implemented)
  • Fixing without generalizing (fixing one instance while leaving the recurring pattern intact)
用于无先例的UI交互或架构决策时,通过构建2-3个竞争原型进行对比,避免盲目实施。适用于新颖设计、多可行方案或体验依赖直觉的场景,不适用于已知模式、修复或约束明确的情况。
面临无先例的UI交互设计 存在多个可行方案的架构决策
skills/cursor_plugins/pstack/skills/principle-exhaust-the-design-space/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-exhaust-the-design-space -g -y
SKILL.md
Frontmatter
{
    "name": "principle-exhaust-the-design-space",
    "description": "Apply when facing a novel UI interaction or architectural decision with no precedent in the codebase. Build 2-3 competing prototypes and compare side by side before committing.",
    "disable-model-invocation": true
}

Exhaust the Design Space

When a novel interaction or architectural decision has no established precedent, explore several concrete alternatives before implementation. Building the wrong thing costs more than exploring three options.

The rule: When the right answer is not obvious, build 2-3 competing prototypes or sketches. Compare them side by side. Only then commit.

When it applies:

  • Novel UI interactions (no prior art in the codebase)
  • Architectural choices with multiple viable approaches
  • Product design decisions where user experience depends on feel, not logic

When it doesn't:

  • Mechanical implementation where the pattern is established
  • Bug fixes or refactors with a clear target state
  • Changes where constraints dictate a single viable approach
当面临产品、UX或功能范围权衡时,优先选择用户体验而非实现便利。坚持少而精,打磨细节,确保所有决策服务于核心工作流及最终用户或开发者体验。
涉及产品功能取舍 UX设计决策 功能范围界定
skills/cursor_plugins/pstack/skills/principle-experience-first/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-experience-first -g -y
SKILL.md
Frontmatter
{
    "name": "principle-experience-first",
    "description": "Apply when product, UX, or feature-scope tradeoffs come up. Choose user delight over implementation convenience; ship fewer polished features over more rough ones.",
    "disable-model-invocation": true
}

Experience First

The product is the experience. Every technical decision either helps or hurts it. When implementation convenience conflicts with user delight, choose delight.

  • Say no to 1,000 things (every feature, control, and option must earn its place)
  • Ship less, ship better (polished experience with three features beats rough one with ten)
  • Prototype before committing (design decisions are cheaper in throwaway HTML than production code)
  • Sweat the details (transitions, alignment, spacing, feedback, error states)
  • Tighten the core loop (every feature should serve the central workflow or get out of the way)

The user is whoever consumes the work. For a UI that is the end user. For a library or an internal API it is the colleague who imports it. The engineer who maintains the code next is a user too. Weigh their experience the same way, and explain impact from their seat.

Foundations should serve the experience, not the other way around. Foundational thinking governs the sequence of work; this principle governs the target.

用于调试场景,要求追踪症状至根本原因并修复,而非添加掩盖问题的临时措施。强调先复现、追问根因、检查状态及模式匹配,避免使用空值检查等防御性编程手段。
需要调试代码或系统问题 遇到反复出现的错误或崩溃
skills/cursor_plugins/pstack/skills/principle-fix-root-causes/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-fix-root-causes -g -y
SKILL.md
Frontmatter
{
    "name": "principle-fix-root-causes",
    "description": "Apply when debugging. Trace each symptom to its root cause and fix it there; reproduce first, ask why until you reach it, resist nil-check guards that silence crashes.",
    "disable-model-invocation": true
}

Fix Root Causes

When debugging, do not paper over symptoms. Trace every problem to its root cause and fix it there.

Why: Symptom fixes accumulate. Each workaround makes the system harder to reason about, and the real bug remains. Root-cause fixes are slower upfront but reduce total debugging time.

Pattern:

  • Reproduce first (if you can't reproduce it, you can't verify your fix)
  • Ask "why" until you hit the root cause
  • Resist the urge to add guards (adding a nil check to silence a crash is a symptom fix)
  • Check for the pattern, not just the instance (grep for the same pattern, fix all instances)
  • When stuck, instrument. Don't guess (add logging, read the actual error)

Restart bugs: suspect state before code

Code doesn't change between runs. State does. When something "fails after restart," suspect stale persistent state first: config files, caches, lock files, serialized state. If clearing a state file restores behavior, prioritize state validation as the fix.

指导在编码前优先确立核心数据结构与类型,以保障后续代码的清晰度与可维护性。强调通过分离并发状态、先构建通用脚手架(如CI、测试)再开发功能,以及避免过度工程化来最大化系统选项价值并简化实现。
设计复杂数据模型或API接口时 需要重构遗留代码或优化性能时 规划新功能模块的基础架构时 讨论并发编程中的状态共享问题时
skills/cursor_plugins/pstack/skills/principle-foundational-thinking/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-foundational-thinking -g -y
SKILL.md
Frontmatter
{
    "name": "principle-foundational-thinking",
    "description": "Apply before writing logic: choosing core types and data structures, sequencing scaffold-vs-feature work, asking what concurrent actors share. Get the data structures right so downstream code becomes obvious.",
    "disable-model-invocation": true
}

Foundational Thinking

Structural decisions protect option value. Code-level decisions protect simplicity. Over-engineering is often a premature decision that closes doors. The right foundational data structure keeps doors open.

Data structures first. Get the data shape right before writing logic. The right shape makes downstream code obvious. Define core types early, trace every access pattern, and choose structures that match the dominant paths. A data-structure change late is a rewrite. Early, it is often a one-line diff.

At code level, DRY the structure, not every line. Types and data models should converge. Three similar statements still beat a premature abstraction. Prefer explicit over clever. Test behavior and edge cases, not line counts.

Concurrency corollary. Before sharing state between actors, ask "what happens if another actor modifies this concurrently?" If not "nothing", isolate.

Scaffold first. If something helps every later phase, do it first. Ask "does every subsequent phase benefit from this existing?" CI, linting, test infrastructure, and shared types are scaffold. Sequence for option value: setup before features, tests before fixes. Keep commits small and single-purpose.

Subtraction comes before scaffolding: remove dead weight first, then lay foundations.

用于在上下文窗口接近满载时优化资源管理。通过将大文件、截图等冗余数据路由至子代理处理,主线程仅保留摘要,避免上下文溢出导致推理质量下降或进度停滞。
输出内容过大 读取长文件或重复读取 规划多步发散任务
skills/cursor_plugins/pstack/skills/principle-guard-the-context-window/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-guard-the-context-window -g -y
SKILL.md
Frontmatter
{
    "name": "principle-guard-the-context-window",
    "description": "Apply when context is filling up: large outputs, long files, repeated reads, fan-out planning. Route bulk to subagents; keep summaries in the main thread, not raw payloads.",
    "disable-model-invocation": true
}

Guard the Context Window

The context window is finite and non-renewable within a session. Every token that enters should earn its place.

Why: Context overflow degrades reasoning quality, creates compression artifacts, and halts progress. Unlike compute or time, context spent inside a session cannot be reclaimed.

Pattern:

  • Isolate large payloads. Route verbose outputs, screenshots, and large documents to subagents. The main context gets summaries, not raw data.
  • Don't read what you won't use. Read selectively based on relevance. If a file isn't needed for the current task, skip it.
  • Keep frequently used content inline. Templates and references used on every invocation belong in the skill file, not in separate files that cost a read each time.
  • Size phases and cap scope. Limit files per phase, set turn budgets, account for mechanism costs.
指导在重构、评估代码变更或避免过度抽象时,优先选择删除和最小化改动。倡导保持扁平结构、集中决策并简化信号传递,以最小代码实现目标,确保代码易于维护。
进行代码重构时 评估差异大小或添加抽象层时 考虑增加信号线程或复杂逻辑时
skills/cursor_plugins/pstack/skills/principle-laziness-protocol/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-laziness-protocol -g -y
SKILL.md
Frontmatter
{
    "name": "principle-laziness-protocol",
    "description": "Apply when refactoring, evaluating diff size, or tempted to add abstractions, layers, or signal threading. Bias toward deletion and the smallest change that solves the problem.",
    "disable-model-invocation": true
}

Laziness Protocol

Writing code is cheap for you, which makes over-engineering easy. Counter it by borrowing a human maintainer's fatigue. Aim for the most result with the least code and complexity.

  • Prefer deletion. When asked to refactor or improve, look for removals before additions.
  • Maintain a flat hierarchy. Avoid deep abstractions. If answering a question requires tracing through more than 3 files or layers, flatten it.
  • Consolidate decisions. Do not repeat the same choice in several places. Put it behind one source of truth and pass the result as a simple flag.
  • Minimize the diff. Make the smallest change that solves the problem. Fewer lines beat "elegant" boilerplate.
  • Question the threading. If a task asks you to pass a new signal through types, schemas, pipelines, or similar layers, stop and look for a more direct path.

Prime directive: If a human developer would find the code exhausting to maintain, it is a bad solution. Be lazy. Stay simple.

指导设计幂等操作,确保命令、生命周期步骤或处理循环在崩溃重启后能收敛至正确状态。通过扫描现有状态、内容清理和自愈合锁等模式,避免部分执行导致的结果不一致,提升系统健壮性。
设计可能因崩溃或重试而重复执行的命令 实现需要保证最终一致性的生命周期步骤 构建容错的处理循环逻辑
skills/cursor_plugins/pstack/skills/principle-make-operations-idempotent/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-make-operations-idempotent -g -y
SKILL.md
Frontmatter
{
    "name": "principle-make-operations-idempotent",
    "description": "Apply when designing commands, lifecycle steps, or processing loops that run amid crashes, restarts, and retries. Converge to the same end state regardless of partial prior runs.",
    "disable-model-invocation": true
}

Make Operations Idempotent

Design operations so they converge to the correct state regardless of how many times they run or where they start from. Every state-mutating operation should answer: "What happens if this runs twice? What happens if the previous run crashed halfway?"

Why: Commands, lifecycle operations, and processing loops run where crashes, restarts, and retries are normal. If partial state changes the next run's outcome, every restart becomes a debugging session.

The pattern:

  • Convergent startup: scan for existing state, clean stale artifacts, adopt live sessions
  • Content-based cleanup: compare by content equivalence, not creation order
  • Self-healing locks: use PID-based stale lock detection
  • Idempotent scheduling: failed work respawns cleanly, fresh input regenerated after each cycle

The test:

  1. What happens if this runs twice in a row?
  2. What happens if the previous run crashed at every possible point?
  3. Does re-execution converge to the same end state?

If any answer is "it depends on what state was left behind," the operation needs a reconciliation step.

用于在引入新内部API时,同步迁移调用方并删除旧API。避免保留兼容性层,通过一次性重构消除双路径复杂性,适用于无外部依赖且可接受破坏性变更的场景。
引入新的内部API且旧调用方仍存在 执行简化或重构计划 无外部用户依赖向后兼容性
skills/cursor_plugins/pstack/skills/principle-migrate-callers-then-delete-legacy-apis/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-migrate-callers-then-delete-legacy-apis -g -y
SKILL.md
Frontmatter
{
    "name": "principle-migrate-callers-then-delete-legacy-apis",
    "description": "Apply when introducing a new internal API while old callers still exist. Migrate callers and delete the old API in the same wave instead of preserving compatibility layers.",
    "disable-model-invocation": true
}

Migrate Callers Then Delete Legacy APIs

When we decide a new API is the right design, migrate callers and remove the old API in the same refactor wave instead of preserving compatibility layers.

Rule:

  • Do not keep legacy API paths alive only because internal callers still exist
  • Inventory callers, migrate them, and delete the old API immediately
  • Treat temporary adapters as exceptional and time-boxed, not default architecture
  • Update tests to assert the new contract, and delete tests that only protect pre-refactor implementation details

When this applies:

  • No external users depend on backward compatibility
  • The project can absorb coordinated breaking changes
  • The new API is part of a simplification or refactor initiative

Keeping both old and new APIs creates dual-path complexity, slows cleanup, and makes the codebase feel append-only.

旨在降低代码阅读负担,通过追踪间接层数和隐藏状态来优化可维护性。建议内联无用的包装器、缩小可变状态范围、优先使用纯函数,并在边界命名不变量,确保新读者能快速定位数据源和变化点。
审查难以追踪的代码 重构以提高可维护性 评估代码复杂度与可读性
skills/cursor_plugins/pstack/skills/principle-minimize-reader-load/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-minimize-reader-load -g -y
SKILL.md
Frontmatter
{
    "name": "principle-minimize-reader-load",
    "description": "Apply when reviewing or shaping code that's hard to trace. Count layers between question and answer, and hidden state in the reader's head; collapse one-caller wrappers and shrink mutable scope.",
    "disable-model-invocation": true
}

Minimize Reader Load

Maintainability is the work a reader must do to understand code. Track two axes:

  1. Layers to trace. How many indirections sit between the question and the answer.
  2. State to hold. How much hidden or mutable context the reader must keep in their head.

Why: Code is read far more than it is written. LOC, cyclomatic complexity, and "clean architecture" are proxies. Reader load is the thing that matters. The two axes are independent. A flat file with 50 globals can be as hard to reason about as a 6-layer adapter stack. Guard both. This is the human analog of Guard the Context Window: working memory is finite for readers too.

The pattern:

  • Collapse layers that do not earn their keep: wrappers with one caller, adapters with no second implementation, indirection introduced for a future that never came. Inline them.
  • Shrink state scope: prefer pure functions (returns over mutations), locals over fields, fields over module state, and module state over globals. Derive instead of sync.
  • Name the invariant at the boundary, not in every consumer, so the reader learns it once.
  • Before adding a layer or a piece of state, ask: does this reduce reader load somewhere else by at least as much?

The test: Can a new reader answer "where does X come from?" and "what can change X?" in under 30 seconds? If not, cut layers or cut state.

指导代理在可逆工作中主动执行而非等待确认,通过异步提交结果让人类事后纠正。仅在不可逆操作或意图不明时请求确认,旨在减少阻塞,提升效率并尊重人类注意力。
代理犹豫是否应执行某项可逆工作时 需要决定是等待指令还是直接行动时
skills/cursor_plugins/pstack/skills/principle-never-block-on-the-human/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-never-block-on-the-human -g -y
SKILL.md
Frontmatter
{
    "name": "principle-never-block-on-the-human",
    "description": "Apply when tempted to ask 'should I do X?' on reversible work. Proceed, present the result, let the human course-correct after the fact; reserve confirmation for irreversible actions.",
    "disable-model-invocation": true
}

Never Block on the Human

The human supervises asynchronously. Agents must stay unblocked: make reasonable decisions, proceed, and let the human course-correct after the fact. Code is cheap. Waiting is expensive.

Why: Every permission pause stalls the pipeline and makes the human the bottleneck. Since code changes are reversible and reviewable, a wrong decision usually costs less than blocking.

Pattern:

  • Proceed, then present. Do the work, show the result. Don't ask "should I do X?" Do X, explain why.
  • Reserve questions for genuine ambiguity. Ask only when you truly cannot infer intent from context.
  • Make the system self-healing. When you notice a problem, log it and fix it in the next round.
  • Supervision is async. The human reviews plans, diffs, and changes on their own schedule. Design workflows for review-after-the-fact.
  • Code is cheap, attention is scarce. A wrong implementation costs minutes to fix. A blocked agent costs the human's attention to unblock.

Boundaries:

  • Irreversible actions (force-push, delete production data, send external messages) still require confirmation.
  • Reversible actions (write code, edit notes, split tasks) should proceed without blocking.
  • Product direction comes from the human; execution should not block.
指导在具有明确阶段边界的计划重构和迁移中,优先确保最终架构的正确性和完整性。允许受控的中间状态破坏以避免遗留兼容性债务,强调在关键节点进行验证而非维持平滑过渡。
执行有明确阶段边界的重构 进行系统迁移或重写
skills/cursor_plugins/pstack/skills/principle-outcome-oriented-execution/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-outcome-oriented-execution -g -y
SKILL.md
Frontmatter
{
    "name": "principle-outcome-oriented-execution",
    "description": "Apply during planned rewrites and migrations with explicit phase boundaries. Converge on the target architecture; don't preserve smooth intermediate states with throwaway compatibility code.",
    "disable-model-invocation": true
}

Outcome-Oriented Execution

Optimize for the intended, verifiable end state rather than preserving smooth intermediate states.

Why: Keeping every intermediate step fully stable often creates temporary compatibility code that becomes long-lived debt. Converge on the target architecture and prove correctness at explicit verification boundaries.

Core rule:

  • Prioritize end-state integrity over transitional stability
  • Intermediate breakage is acceptable when it is planned, scoped, and reversible
  • Always run final verification before declaring done

Guardrails:

  • Use this for planned rewrites and migrations with explicit phase boundaries
  • Declare where temporary breakage is acceptable
  • Keep high-signal checks for actively touched areas while migrating
  • Require full static and runtime verification at plan completion
任务完成后,通过直接检查真实产物(如运行代码、读取实际值)来验证结果,拒绝依赖代理指标或自我报告。建议编写确定性脚本以确保可重复验证,并将关键证据保留供审查。
任务即将完成时 需要验证功能或代码正确性时
skills/cursor_plugins/pstack/skills/principle-prove-it-works/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-prove-it-works -g -y
SKILL.md
Frontmatter
{
    "name": "principle-prove-it-works",
    "description": "Apply after completing a task, before declaring done. Verify against the real artifact (run the feature, read the actual value, inspect the diff), not a proxy, self-report, or 'it compiles.'",
    "disable-model-invocation": true
}

Prove It Works

Verify every task output by checking the real thing directly. Do not infer from proxies, self-reports, or "it compiles."

Why: Unverified work has unknown correctness. Indirect verification (file mtimes, output freshness, agent self-reports, cached screenshots) feels cheaper than direct observation. Acting on a wrong inference costs far more than checking the source.

Pattern: After completing any task, ask: "how do I prove this actually works?"

Check the real thing, not a proxy:

  • Check process liveness directly, not indirectly through derived state
  • Read the actual value, not a cached or derived representation
  • When verification fails, suspect the observation method before suspecting the system

Code and features:

  1. Build it (necessary but not sufficient)
  2. Run it and exercise the actual feature path
  3. Check the full chain: does data flow from input to output?
  4. For integrations, test the full communication path end-to-end

Delegation: trust artifacts, not self-reports. When verifying delegated work, inspect the actual output artifact (git diff, file contents, runtime behavior), not the delegate's summary. Agents report what they intended, not always what happened.

Script the check when you can

The strongest proof is a deterministic script that re-runs the same comparison, not a one-time eyeball. Write the script, run it, and keep its output as an artifact a reviewer can re-run instead of trusting your word. A script comparing the old and new compiled output catches what a glance misses.

Keep the artifact visible for the human. Commit it only for large or complex work where the trail has to be auditable later, like a big port or migration (the show-me-your-work skill). Most work just needs it visible, not committed.

当集成新需求时,避免在现有设计上打补丁。应从第一性原理出发,假设该需求从第一天就存在,重新设计整体方案,确保类型、文档等全面同步,以保留系统的设计选项价值。
需要集成新需求到现有设计中 避免在现有架构上直接添加功能
skills/cursor_plugins/pstack/skills/principle-redesign-from-first-principles/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-redesign-from-first-principles -g -y
SKILL.md
Frontmatter
{
    "name": "principle-redesign-from-first-principles",
    "description": "Apply when integrating a new requirement into an existing design. Redesign as if the requirement had been a foundational assumption from day one, instead of bolting it on.",
    "disable-model-invocation": true
}

Redesign From First Principles

When integrating a change, don't bolt it onto the existing design. Redesign as if the requirement had been there from the start. The result should look like what we would have built if we'd known on day one.

  • Read all affected files and understand the current design holistically
  • Ask: "if we were writing this from scratch with this new requirement, what would we build?"
  • Propagate the change through every reference: types, docs, examples, rationale sections
  • Think about the redesign holistically, then deliver it incrementally

This is the method for preserving option value when integrating changes into an existing design.

指导在并发场景下处理共享可变状态。优先消除不必要的共享,让各Actor独立写入;仅在共享为必要前提时,通过锁文件或原子操作进行结构化串行化,避免竞态条件。
多个并发实体可能写入同一文件、分支或状态对象 需要设计并发安全的数据持久化策略
skills/cursor_plugins/pstack/skills/principle-separate-before-serializing-shared-state/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-separate-before-serializing-shared-state -g -y
SKILL.md
Frontmatter
{
    "name": "principle-separate-before-serializing-shared-state",
    "description": "Apply when concurrent actors might write to the same file, branch, key, or state object. Eliminate the sharing first; serialize structurally only when one shared writer is a real invariant.",
    "disable-model-invocation": true
}

Separate Before Serializing Shared State

When concurrent actors might share mutable state, first ask whether they truly need the same mutable object. If not, eliminate the sharing. When sharing is real, enforce serialization structurally: lockfiles, sequential phases, exclusive ownership. Instructions and conventions are not concurrency control.

Why: Concurrent writes to shared state create race conditions that are intermittent, hard to reproduce, and expensive to debug. Telling agents or goroutines to "take turns" does not work.

Pattern:

  1. Identify shared mutable state (files both read and write, branches both push to, APIs both define and consume).
  2. Default: eliminate the shared write target. Ask: do these actors need one canonical object, or are they publishing independent facts? Give each actor its own owned file, key, branch, or state directory, and merge only at the read/reporting boundary. Two workers writing their own lastX field into one state.json is still shared mutation; indexer-state.json + metrics-state.json is not.
  3. Only when one shared write target is a real invariant, serialize access structurally (lockfiles, sequential phases, single-writer actor, or atomic compare-and-swap). Treat "we need a lock" as a design smell to check, not as the default answer.
指导在重构或新增功能前先移除冗余代码、无效校验和存根,通过简化基础结构来降低复杂度,使后续构建更稳健且直观。
进行系统重构 添加新功能 重写现有模块
skills/cursor_plugins/pstack/skills/principle-subtract-before-you-add/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-subtract-before-you-add -g -y
SKILL.md
Frontmatter
{
    "name": "principle-subtract-before-you-add",
    "description": "Apply when sequencing an addition, refactor, or rewrite. Remove dead weight, redundant validators, and stub references first, then build on the simpler base.",
    "disable-model-invocation": true
}

Subtract Before You Add

When evolving a system, remove complexity first, then build. Deletion gives you a simpler base, which makes the next addition smaller and less brittle.

Why: Adding to a complex system compounds complexity. Removing first cuts the surface area, reveals the essential structure, and usually makes the next design obvious. Default to subtraction.

The pattern:

  • Sequence removal before construction
  • Cut before you polish (get to the minimum before investing in quality)
  • Design for observed usage, not speculative edge cases
  • No speculative validators, parsers, or guards beyond what the spec demands
  • Out-of-spec features drag validators behind them. Persistence, retry-on-startup, and schema migration each need guards to defend their inputs.
  • Simplify prompts (remove redundant instructions, excessive templates)
  • When a reference has no novel content, delete it rather than leaving a stub
指导在静态类型语言中强化类型纪律,通过不可非法状态、品牌化原语、边界解析、拒绝强制转换、穷举匹配及派生权威模式,利用编译器消除运行时错误,确保类型安全。
设计数据类型 审查函数签名 编写静态类型代码
skills/cursor_plugins/pstack/skills/principle-type-system-discipline/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill principle-type-system-discipline -g -y
SKILL.md
Frontmatter
{
    "name": "principle-type-system-discipline",
    "description": "Apply when designing types, reviewing a function signature, or writing code in any statically-typed language. Make illegal states unrepresentable, brand semantic primitives, parse external data at boundaries, refuse to lie to the compiler, exhaust variants, derive from authoritative schemas.",
    "disable-model-invocation": true
}

Type System Discipline

The type checker is a proof assistant. Use it to eliminate impossible states, mismatched primitives, and unhandled variants at compile time. Anything you let through as runtime data becomes a runtime failure the compiler could have stopped.

Applies to any typed language. Skills like typescript-best-practices ground it in specific syntax.

The patterns:

  • Make illegal states unrepresentable. Model variants as sum types: discriminated unions in TypeScript, enums with payloads in Rust/Swift/Kotlin, sealed classes in Scala, ADTs in Haskell/OCaml. Don't model state as a bag of optional fields where contradictory combinations compile. A subtle anti-pattern worth naming: { completed: boolean; completedAt?: Date } admits completed: true; completedAt: undefined, which is meaningless. Derive the boolean from a single source like completedAt !== null, or model the variants explicitly as { kind: 'open' } | { kind: 'done'; at: Date }. If a bug forces the question "wait, can this combination actually happen?", the type is too loose.
  • Brand semantic primitives. UserId and OrderId are strings underneath but should not be interchangeable. Newtypes in Rust, opaque types in Swift, value classes in Kotlin, phantom types in Haskell, branded intersections in TypeScript. Validate once at creation, trust the type downstream.
  • External data is untyped until parsed. RPC payloads, JSON, IPC messages, CLI args, config files, environment variables, database rows. Have a parse function at every boundary that turns unstructured input into the typed model. See the boundary-discipline principle skill for where to put validation.
  • Don't lie to the type system. Casts, unsafe coercions, and assertion functions that bypass the compiler are runtime crashes waiting to happen. If the compiler can't prove a fact, prove it (validate, narrow, refine the model) or accept that the cast is a hazard. The cast you bury today is the postmortem you write next week.
  • Exhaustive matching is the compiler's job. When you match on a sum type, the compiler must fail compilation if a new variant is added without handling. Use the idiom your language provides: never-typed binding in TypeScript, unannotated match in Rust, -Wincomplete-patterns in Haskell, sealed-class match exhaustiveness in Kotlin.
  • Derive types from authoritative schemas. When a protocol buffer, OpenAPI spec, GraphQL schema, database migration, or design-system token file defines a shape, derive from it instead of hand-rolling a parallel type. Manual duplication drifts. See the encode-lessons-in-structure principle skill.
  • Prefer compile-time over runtime. Every runtime assertion, null check, and instanceof is admitting the type system isn't carrying its weight. Push the check up to the type.

The tests:

  • "Can I write a comment explaining when this combination of fields is valid?" If yes, the type is too loose. Split it into a sum type.
  • "Do two of my function arguments share a primitive type but mean different things?" Brand them.
  • "Where did this any, this as, this assertNotNull come from?" Trace it to the boundary and validate there instead.
  • "If a new variant is added next month, will the compiler tell the next agent where to add a case?" If no, the match isn't exhaustive.
  • "Is this type duplicating a shape another file owns?" Derive instead.
分析当前对话,通过并行三个子代理从会话中提取持久性学习成果,并路由至现有技能的编辑。适用于用户触发、复杂任务成功或工作流优化场景,旨在沉淀可复用经验。
用户说 reflect 或 /reflect 复杂任务(5+工具调用)成功完成且值得保留 发现通用化的有效路径 用户纠正了代理方法 出现未记录的非平凡工作流
skills/cursor_plugins/pstack/skills/reflect/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill reflect -g -y
SKILL.md
Frontmatter
{
    "name": "reflect",
    "description": "Spawn three parallel review subagents over the active transcript, surface learnings, and route each to a concrete edit on an existing skill. Use when the user says reflect.",
    "disable-model-invocation": true
}

Reflect

Mine the current conversation for durable learnings, then route them into skill edits.

When to invoke

  • The user said "reflect" or "/reflect".
  • A complex task (5+ tool calls) just landed cleanly and the recipe is worth keeping.
  • The agent hit dead ends, found the working path, and the path generalizes.
  • The user corrected the agent's approach mid-task.
  • A non-trivial workflow emerged that isn't captured anywhere.

Skip when the conversation is trivial, off-topic, or already covered by an existing skill the parent followed correctly. One-offs are not learnings.

Process

1. Locate the active transcript

The parent finds its own transcript file before fanning out. The system prompt names the active workspace's agent-transcripts/ directory; use that path. Do not glob across ~/.cursor/projects/*/. That crosses workspace boundaries and reads private chats from unrelated projects.

ls -t <agent-transcripts>/*.jsonl <agent-transcripts>/*/*.jsonl <agent-transcripts>/*/subagents/*.jsonl 2>/dev/null | head -10

Three transcript layouts: legacy flat (<id>.jsonl), current nested (<id>/<id>.jsonl), and subagent (<parent>/subagents/<child>.jsonl).

For each candidate, read the first JSONL line and check that message.content[0].text contains the conversation's opening user prompt. Take the matching path. If no path resolves, write a tight digest of the session and pass that instead.

2. Spawn three reviewers in parallel

One message, three Task calls, subagent_type: generalPurpose, explicit model: on each, agent mode (readonly: false). Reviewers need MCP access for context lookups (tickets, chat threads, observability traces referenced in the transcript); readonly strips MCPs. The prompt forbids file writes; the parent applies edits.

Lens model Prompt template
Judgment claude-opus-4-8-thinking-xhigh references/judgment-reviewer.md
Tooling composer-2.5-fast references/tooling-reviewer.md
Divergent claude-opus-4-8-thinking-xhigh references/divergent-reviewer.md

Pass each template verbatim, substituting the transcript path or digest where marked. Reviewers return findings in the Task response body.

3. Synthesize

One Task call, subagent_type: generalPurpose, model: claude-opus-4-8-thinking-xhigh, agent mode (readonly: false). The synthesizer's quality check includes spot-verifying citations, which can require MCP access; readonly strips MCPs. Use references/synthesizer.md verbatim, with each reviewer's full output inlined where marked. The synthesizer returns a structured Accepted / Rejected / Backlog list.

4. Structural enforcement check

Sanity-check the synthesizer's Accepted list. For any item that would be enforced more reliably by a lint rule, script, metadata flag, or runtime check, move it from Accepted to Backlog. The synthesizer already applies this criterion; this is a final pass before edits land. See the encode-lessons-in-structure principle skill.

5. Apply

Before applying any Accepted edit, present the synthesizer's full Accepted/Rejected/Backlog output to the user and wait for explicit approval. The user picks which subset to apply and may redirect routings. Skill changes affect every future agent in the org; do not auto-apply.

Backlog items file to whatever devex / backlog tracker your team uses automatically. Those are tracker submissions, not skill edits. Only the Accepted list waits for approval.

For each approved Accepted item, follow the Routing field exactly:

  • Trivial existing-skill edit (a one-line bullet, a tightened sentence, a stale fact corrected): parent does directly.
  • Substantive existing-skill edit (a new section, a new pattern table, more than ~10 lines): hand to Cursor's built-in create-skill skill and run its draft / test / iterate loop.
  • tune description: <skill path> (the skill exists but didn't trigger when it should have): hand to create-skill and run its description-optimization loop.
  • new skill via create-skill: <kebab-name>: hand creation to create-skill. Do not invent the shape ad hoc.

If your environment ships a SKILL.md validator, run it on every touched skill before declaring done. Skip this step if it doesn't.

6. Summarize for the user

Short list, no preamble:

  • Edits applied: <skill path>. What changed, one line each.
  • New skills created: <skill path>. One line each (rare).
  • Backlog filed to the devex tracker: <issue title> (<tags>). One line each.
  • Dropped: one line per rejected finding + reason from the synthesizer.
用于生成长期或无人值守工作的决策日志,以TSV格式记录决策、原因、证据和结果。便于人类事后审查时重构工作过程,无需重新运行或阅读完整转录,确保结果可信且可追溯。
/show-me-your-work 自主或多阶段运行后需人工审查 需要建立可审计的决策追踪记录
skills/cursor_plugins/pstack/skills/show-me-your-work/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill show-me-your-work -g -y
SKILL.md
Frontmatter
{
    "name": "show-me-your-work",
    "description": "Keep a reviewable decision trail for long-running or unattended work: a TSV log with one row per decision (what, why, evidence, result). Local by default; commit it when a reviewer needs the trail to trust the result. Use for \/show-me-your-work, autonomous or multi-phase runs, or work a human reviews after stepping away.",
    "disable-model-invocation": true
}

Show me your work

For work a human reviews after the fact, a decision trail lets them reconstruct what was decided, why, and on what evidence, without rerunning the work or reading the whole transcript. Keep one canonical log so the trail is consistent and a future agent can find it.

The format

A single TSV file, one row per decision. TSV because GitHub renders it as a sortable table, column -s$'\t' -t and spreadsheets read it, and a row appends with one command. Cells stay single-line. Evidence is a pointer, not prose.

Copy references/decision-log-template.tsv (the header row) to start a clean log. Columns:

  • ts. ISO8601 timestamp. The timeline axis.
  • phase. The phase or workstream.
  • decision. What was chosen or done, one line.
  • why. The reason in plain words. If a principle drove it, say it plainly (explored options first, this was a one-way door), not as a jargon tag.
  • evidence. A link or path that proves it: commit SHA, PR number, file:line, or an artifact, trace, or screenshot path. Never a paragraph.
  • result. The outcome or predicate state: tests green, reverted, pixel-diff 0, INCONCLUSIVE, open.

An example, plain-spoken so a reviewer reads it at a glance. This is illustration only; don't copy these rows into a real log.

ts	phase	decision	why	evidence	result
2026-05-24T09:02:00Z	frame	counted the work first, about 100 components and roughly 75 hours	wanted to know the size before starting a long run	commit 3a9f1c2	found 5 things to sort out before starting
2026-05-24T09:40:00Z	harness	took screenshots of the old version before changing anything	so we can compare old against new and catch any visual change	scripts/snapshot.sh, baseline/	saved 120 reference screenshots
2026-05-24T11:15:00Z	widget	moved the widget styles over without changing how it looks	keep the change small and the result identical	commit 7c21e0a, pixel-diff 0	looks identical, tests pass
2026-05-24T12:30:00Z	widget	threw out a helper's work because its screenshots were blank	checked the real files instead of trusting its summary	worktree reset	reverted, tightened the instructions for next time

Logging a row

Write each entry the way you'd tell a teammate what you did. Plain words, concrete actions, no AI speak or abstract jargon (the unslop skill applies to log text too). A reviewer should understand each row without decoding it.

Use the helper so rows stay well-formed: scripts/log.sh <logfile> <phase> <decision> <why> <evidence> <result>. It stamps ts, writes the header on first use, strips stray tabs/newlines, and prefixes any cell starting with =, +, -, or @ with a single quote so a reviewer opening the log in a spreadsheet doesn't trigger formula execution. A bare printf appending a row works too, but mind those same bytes if cells come from generated or user-supplied text.

Log decision points and checkpoints, not every action: a fork chosen, a unit completed with its verification result, a pivot or revert with its trigger, a blocker surfaced, a gate fixed. For loop runs, one row per iteration. Skip the trivial and self-evident.

Where it lives

By default the log is a working artifact, not committed. Keep it at decisions.tsv in the work dir, or .audit/<task-slug>.tsv when several efforts run at once, and leave it out of git. Most work doesn't need a committed trail; the local log still keeps the run honest and can be discarded after.

Commit it only when the work is ambitious enough that a reviewer needs the trail to trust the result: a large cross-language port, a multi-week migration, anything where confidence has to be shown rather than assumed. A committed log renders as a table in the PR.

Rules

  • One row is one decision or checkpoint. If it doesn't fit on one line, the decision isn't crisp yet.
  • Append-only. A wrong call gets a new row that supersedes it. Never edit or delete history.
  • Prefer evidence produced by committed scripts over hand-made one-offs, so a reviewer can re-run it (the encode-lessons-in-structure principle skill).

Audit the log against the transcript

At the end of the run, before handing back, check the log told the truth. Read this run's transcript under the active workspace's agent-transcripts/ directory (the system prompt names the path). Don't glob across ~/.cursor/projects/*/; that reads unrelated private chats. Walk the log against what actually happened:

  • Every row maps to a real action. Cut invented or aspirational entries.
  • Each row's evidence resolves and shows what the row claims.
  • A fork, pivot, or abandoned approach that shaped the work but isn't logged is a gap. Add it.
  • Drop padding. If nobody would audit a row, it doesn't earn its place.

Fix the log, not the story. If the work diverged from what a row claims, the row is wrong.

Cross-model review of the trail

Before handing back, you must spawn a subagent on a different model family from the one that did the work. Self-review is not a substitute; the point is fresh eyes you cannot bring yourself. The subagent reads the audit trail and the run's transcript, then flags what the user should pay attention to. Not a redo of the work, a scan for what's suboptimal or risky.

  • Decisions logged with weak or absent evidence.
  • Verification steps skipped or claimed without proof in the transcript.
  • Choices that look risky in hindsight (premature, scope-creeping, papering over a symptom).
  • Gaps the user would otherwise miss on a casual skim.

Every reply for a run that produced a trail ends with an "Attention" section. Lead with the reviewer's model on its own line (reviewed by <model>), then list each flag pointing to specific rows or moments. "No flags" is a valid value; the model name is not. The self-audit asks if the log told the truth; this asks what the user should still scrutinize even when it did.

Reviewing the trail

Read top to bottom, follow the evidence pointers, spot-check. GitHub renders a committed TSV as a table; column -s$'\t' -t decisions.tsv renders it in a terminal. A row whose evidence doesn't resolve, or whose result is unverified, is the audit catching a gap.

Composing this skill

Other skills route their audit trail here instead of inventing one. Reference it by name and let it own the format; don't restate the columns.

用于在用户明确要求或存在低成本测试路径时执行TDD修复Bug。先写失败测试,再修改代码并验证通过;若测试不切实际则说明原因并采用替代验证方案,避免编写脆弱或高成本测试。
用户明确要求使用TDD 需要编写失败测试 需要编写回归测试 Bug有明确且低成本的本地测试目标
skills/cursor_plugins/pstack/skills/tdd/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill tdd -g -y
SKILL.md
Frontmatter
{
    "name": "tdd",
    "description": "Use only when the user explicitly asks for TDD, a failing test, or a regression test, OR when the bug has an obvious cheap local test target. Skip when the test path is unclear, expensive, integration-heavy, or not requested.",
    "disable-model-invocation": true
}

TDD Bug Fix

When fixing a bug with a clear, cheap test path, make the broken behavior executable before changing production code. The goal is a focused regression test that fails before the fix and passes after it.

Do not force a test when it would be impractical. If the available test would require broad harness setup, brittle mocks, slow end-to-end infrastructure, production-only state, vague reproduction steps, or large unrelated fixture churn, skip adding a new test and use the closest useful verification instead.

Workflow

  1. Understand the bug. Identify the intended behavior, current behavior, affected path, and smallest observable reproduction.
  2. Choose the narrowest executable check. Prefer the closest unit, component, integration, or regression test already used for that codepath. If no practical test path is obvious, do not create one from scratch just to satisfy the workflow.
  3. Write the failing test first. Add the smallest focused test that would have caught the bug. The test should encode intended behavior, not mirror the current implementation.
  4. Run the new test before fixing. Confirm it fails for the intended reason. If it passes or fails for an unrelated reason, correct the test or reproduction before editing the implementation.
  5. Fix the bug. Make the smallest production change that satisfies the intended behavior while preserving nearby contracts.
  6. Rerun the regression test. Confirm the test now passes.
  7. Run nearby validation. Run relevant adjacent tests, type checks, lint, or scenario checks when the change has broader risk.

If a Failing Test Is Impractical

Do not silently skip the regression step. Before fixing, explicitly explain why a failing test is impossible or not worth the cost, then choose the closest executable regression check available. Examples include a targeted script, manual reproduction command, browser automation, snapshot comparison, log assertion, or focused integration check.

Prefer no new test over a bad test. A bad test is one that mostly tests mocks, encodes current implementation details, depends on timing or unrelated global state, needs expensive infrastructure for a small fix, or would be deleted immediately after proving the fix.

Guardrails

  • Do not change tests merely to match a wrong implementation.
  • Do not weaken existing assertions unless the expected behavior has genuinely changed and the reason is clear.
  • Keep the regression test focused on the bug; avoid broad fixture churn or unrelated coverage expansion.
  • Do not add tests when the practical signal is weak; use manual or scripted verification and say why.
  • If the bug is flaky, make the test deterministic where possible and document the signal being locked down.
  • If the bug exposes a broader class of failures, first land the focused regression path, then consider additional sibling coverage.

Final Response

Report the evidence, not just the outcome:

  • Name the failing-before test or executable check and the failure it produced.
  • Name the passing-after test run and any nearby validation performed.
  • If failing-before evidence could not be demonstrated, state why and describe the closest regression check used instead.
提供TypeScript最佳实践,涵盖类型安全、联合类型、守卫函数及代码规范。适用于读取或编辑.ts/.tsx文件时,确保类型严谨与代码可维护性。
读取 .ts 文件 读取 .tsx 文件 编辑 .ts 文件 编辑 .tsx 文件
skills/cursor_plugins/pstack/skills/typescript-best-practices/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill typescript-best-practices -g -y
SKILL.md
Frontmatter
{
    "name": "typescript-best-practices",
    "description": "TypeScript best practices. Use when reading or editing any .ts or .tsx file."
}

TypeScript best practices

Apply the type-system-discipline principle skill first; this skill grounds it in TypeScript syntax.

Rule Summary
Discriminated unions Model variants with a kind literal discriminant so impossible states can't be represented. No optional-field bags.
Branded types Brand primitives with & { readonly __brand: "X" } so they can't be mixed up. Validate once at creation.
unknown over any External data is unknown. any disables type checking everywhere it touches.
No as casts Every as is a runtime crash waiting. Cast only after validation.
Narrowing hierarchy Discriminant switch > in operator > typeof/instanceof > user-defined type guard > as.
Type guards Must verify the claim. A lying guard is worse than as because the bug hides behind a name that says it's safe. Name them isX or hasX.
Exhaustiveness Inline const _exhaustive: never = x; in default arms so the compiler errors when a new variant is added.
satisfies over as Validates the value without widening literal types.
Boundary validation Validate where data crosses in; trust types inside. See the boundary-discipline principle skill.
Schema-derived types Reach for Pick/Omit/Parameters/ReturnType/Awaited/typeof before declaring a new interface.
Object args Pass objects, not positional, so argument order is self-documenting. Skip on hot paths (per-frame render, tokenizers, parsers).

Examples: references/patterns.md.

探究代码设计动机、决策依据及权衡。通过并行查询源码、工单、文档等多源证据,提供带引用的因果分析。适用于解释设计原理、回归分析及阈值设定,强调证据优先与置信度校准。
询问代码为何这样设计 解释技术选型理由 分析设计权衡与替代方案 调查回归测试或事故复盘
skills/cursor_plugins/pstack/skills/why/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill why -g -y
SKILL.md
Frontmatter
{
    "name": "why",
    "description": "Use for 'why does X work this way', 'why we picked Y', design rationale, regressions, postmortems, or data-backed thresholds. Discovers available MCPs and queries each evidence category (source control, issue tracker, long-form docs, real-time chat, infrastructure observability, error tracking, product analytics warehouse) in parallel, then returns a cited read on decisions and tradeoffs. Use how for runtime behavior."
}

Why

Investigate the motivation and intent behind code. Why was it built this way? What edge cases were considered? What product, business, or operational constraints shaped the design? What alternatives were rejected, and why?

Companion to the how skill. how answers what the code does and how it works. why answers what forces led to its shape.

How this skill works

Historical context spreads across seven evidence categories: source control history, issue or ticket tracking, long-form documents, real-time team chat, infrastructure observability, error or exception tracking, and product analytics warehouses. You cannot predict from the question alone which one holds the answer, so the skill enumerates available MCPs at run time, maps each to a category, queries all seven in parallel, then synthesizes with explicit confidence calibration. Null results from searched categories are first-class evidence about how the decision was made; report them alongside positive findings. The default is coverage, not minimalism.

Operating Posture

Operate as a careful, cautious, precise investigator. Think like a detective piecing together a historical case from fragmentary records. When the record is thin, say so.

Concretely:

  • Evidence before narrative. Collect the pieces first, then see what story they support. Never pick a story and recruit the evidence that fits it.
  • Precision over polish. Prefer the exact quote and citation over a smooth paraphrase. A reader should be able to follow any claim back to its source and verify it in under a minute.
  • Consider what you haven't seen. The evidence you find is a sample, not the whole truth. Before concluding, ask what you would expect to see if an alternative explanation were true, and whether you looked for it.
  • Name the gaps. If a thread goes cold, a source isn't searchable, or a question has no answer, document the gap. Don't paper it over with an authoritative-sounding guess.
  • Hedge on purpose. When evidence is indirect, your language should signal it ("appears to", "likely", "suggests"). Confidence-matching phrasing is a feature of the output, not a stylistic choice the synthesizer may override.
  • No shortcut by code-reading. The code tells you what it does, rarely why it exists. Resist inferring intent from code shape.

This posture is the working method, not a disclaimer.

Core Epistemics

This skill builds a patchwork understanding from fragmented historical evidence. Tickets go stale. Chat threads get deleted. Commit messages lie. People change their minds between the PR description and the implementation. The original author may have left the company.

Be ruthlessly honest about what you know versus what you're inferring. The goal is not a satisfying story; it is to surface evidence, calibrate confidence, and let the user decide.

Principles:

  • Cite everything. Every claim about intent should reference a specific commit hash, PR number, ticket ID, doc URL, chat permalink, or code comment. If you can't cite it, it's inference, not fact, and must be labeled as such.
  • Prefer "appears to" over "because". Hedge when evidence is indirect. Reserve confident language for direct, explicit evidence.
  • Surface contradictions. If two sources disagree, show both. Don't quietly pick the one that fits your narrative.
  • Acknowledge gaps. If a question has no answer in any source you searched, say so. An honest "we couldn't find out why" beats a confident guess.
  • Multiple hypotheses are valid. When the evidence fits several stories, present them all with the evidence for each. Let the user triangulate.
  • Beware rationalization. Code that makes sense today may have been written for reasons that no longer apply, or for no good reason at all. Don't retrofit intent.

Read references/epistemics.md for the full confidence framework and phrasing guide. The synthesizer must follow it.

Step 1. Understand the Target and the Question

Parse what the user is asking. The target is usually a chunk of code, a pattern, a feature, or a named design decision. The question is usually one of:

  • "Why was X designed this way?" Design rationale.
  • "Why do we do X instead of Y?" Tradeoff or alternatives.
  • "What edge cases motivated this?" Defensive reasoning.
  • "What business or product constraint led to this?" External forcing function.
  • "Why does this code still exist?" Dead-code territory.
  • "What's the history of X?" Broad archaeological sweep.

If the target is vague ("why do we do it this way?" with no clear referent), make your best guess from conversation context (open files, recent edits, cursor location, what was just discussed). State your interpretation briefly so the user can redirect if you're off, then proceed.

Step 2. Establish the Code Anchor

Before spawning investigators, anchor the investigation in concrete code. You need:

  • The relevant file path(s) and line range(s)
  • The key symbols (function names, class names, constants)
  • An initial commit list. The last few commits touching the target.
  • PR numbers from merge commits (pattern (#1234) in the subject line)

Build this inline. It's cheap, and every investigator needs it.

# Blame target lines for last-touch commits
git blame -L <start>,<end> <file>

# Full file history, with patches, through renames
git log --follow -p -- <file>

# Last N commits touching the file, PR numbers visible
git log --oneline -20 -- <file>

# Extract PR numbers from a commit message
git log -1 --format=%B <commit>

Pull PR bodies and discussion via gh for any substantive commits:

gh pr view <number> --json title,body,author,createdAt,mergedAt,labels,closingIssuesReferences,comments,reviews

Capture this as seed context (file paths, symbols, commits, PR numbers, linked ticket IDs). Pass it to the investigators so they don't rediscover it.

Step 3. Spawn Parallel Investigators (default posture)

Default to the full parallel investigation. Each evidence category lives in a different kind of system, and you cannot tell from the question alone which one holds the answer without looking. So look across every available category, in parallel, by default.

Discovery

Before spawning investigators, list the available MCPs from the Cursor environment. Use the available-tools map when present. Otherwise inspect the mcps/ directory Cursor exposes for enabled MCP servers.

Map each available MCP to one evidence category:

  1. Source control history
  2. Issue / ticket tracker
  3. Long-form documents
  4. Real-time team chat
  5. Infrastructure observability
  6. Error / exception tracking
  7. Product analytics warehouse

Source control is always available through git and gh. For the other six, classify using the MCP name, server instructions, tool names, and resource descriptors. If an MCP could fit more than one category, choose the one matching its primary evidence. Record ambiguous cases in the coverage map.

Aim for a complete coverage map, not a minimal one. A null result from an issue tracker is evidence the decision was not ticketed, a useful fact in itself. Document the null, don't skip the search.

Launch all matching investigators in a single message so they run concurrently. One investigator per category lets each specialize in one tool's query vocabulary and result shape. Don't ask one agent to cover multiple MCPs.

Subagent config (each):

  • subagent_type: generalPurpose
  • model: composer-2.5-fast
  • readonly: false (agent mode). Do not use readonly/Ask mode. It strips MCP access, which disables MCP-backed investigators entirely. The source control investigator would be safe in readonly, but keep modes uniform. Investigators still shouldn't write anything. That's a posture, not a sandbox.

Each investigator gets:

  1. The base prompt from references/investigator-prompt.md
  2. The category playbook references/sources/<source>.md for the selected MCP, adapted from the examples in references/source-playbook.md
  3. The cross-cutting references/sources/incident-postmortem.md if the target code looks defensive (null checks, retry logic, timeout handling, rate limiting, feature flags, egress guards, OOM handlers)
  4. The code anchor from Step 2 (file paths, symbols, commit hashes, PR numbers, ticket IDs)
  5. The user's original question

Investigator roster. One per available evidence category

Spawn one investigator per category that has a matching MCP. Each owns exactly one tool or MCP.

Each entry lists what the category physically contains and the kind of "why" it uniquely surfaces. Use it to know what to expect back, how to name a gap when a category returns empty, and (only in the rare provably-irrelevant case) to justify a skip. Every category overlaps, but each owns a kind of evidence the others cannot recover.

  1. Source control investigator. Git history, gh for PRs, code comments, tests. Always spawn; the only guaranteed source. Best at surfacing implementation-time rationale captured during review. PR descriptions stating the problem, review threads debating alternatives, inline comments encoding non-obvious constraints, test names that encode motivating edge cases, and commit messages linking tickets or incidents. Most trustworthy because it ties directly to the diff that shipped.

  2. Issue / ticket tracker investigator (e.g. Linear, Jira, GitHub Issues, Plane, Shortcut MCP). Tickets, project docs, status updates, spec attachments. Best at surfacing the product or business forcing function. Customer requests ("Acme needs X for their SOC2 audit"), compliance deadlines, parent-initiative framing ("Q3 enterprise readiness"), ticket-level scope changes, and labels that categorize the motivation (customer:*, incident-followup, compliance, perf-regression). Strongest when the why is external to engineering.

  3. Long-form documents investigator (e.g. Notion, Confluence, Google Docs, Coda MCP). PRDs, specs, RFCs, design docs, ADRs, postmortems, team pages, meeting notes. Best at surfacing long-form design rationale. Problem statements, explicit "alternatives considered" and "rejected approaches" sections, strategy documents that set priorities, ADRs with finalized decisions, and postmortem action items that tie directly to code. Where the why is written out before it becomes code.

  4. Real-time team chat investigator (e.g. Slack, Discord, Microsoft Teams, Mattermost MCP). Feature-name and symbol searches, PR URL mentions, incident channels (#sev-*, #incident-*), author-handle activity around the ship date. Best at surfacing real-time deliberation that never reached a doc. Fire-drill decisions during incidents, Q&A between the PR author and reviewers, casual "we decided X because Y" threads, and rationale for small changes that didn't warrant a PRD. Especially important when the source control, ticket, and doc paper trail is thin.

  5. Infrastructure observability investigator (e.g. Datadog, New Relic, Honeycomb, Grafana, Splunk MCP). Metrics, monitors, dashboards, logs, APM traces, formal incidents. Infra/runtime view. Best at surfacing infrastructure and runtime reality that motivated the code. Monitor thresholds whose numbers match code constants, metric spikes in the window right before a PR merge, dashboards created as postmortem action items, incident timelines that reference the target. Strongest when the target reacts to an infra signal (timeouts, retries, rate limits, circuit breakers).

  6. Error / exception tracking investigator (e.g. Sentry, Rollbar, Bugsnag, Airbrake MCP). Issues, events, stack traces, releases. Best at surfacing the specific exceptions and error trajectories that motivated defensive or corrective code. Stack traces that pass through the target function, issues whose first-seen/last-seen windows bracket the PR ship date, release correlations that show an error stopping at a specific version. Strongest for catch blocks, null guards, type checks, retries, and other defenses.

  7. Product analytics warehouse investigator (e.g. Databricks, Snowflake, BigQuery, ClickHouse, dbt, Redshift MCP). Product-analytics events, experiment and feature-flag exposure tables, usage and billing events, query history, warehouse telemetry. Product/data view. Complements infrastructure observability by covering user behavior and data reality around the ship date rather than infra metrics. Best at surfacing product and data reality that shaped the code. Feature-usage trajectories (a step-function ramp from zero is strong evidence that this PR launched it), experiment/flag exposure data tied to ship decisions, pre-ship distributions that reveal where a threshold constant came from (e.g., limit = 128 * 1024 matching the p99 of an upload-size column), and data-pipeline scale evidence for migrations/backfills. Strongest for flag-gated code, experiment-driven ships, data migrations, and "where did this number come from" questions.

When to skip an investigator

Only skip with an explicit, written justification that goes in the final "Sources Consulted" section. Two valid reasons:

  • No MCP is available for that category in this environment. Flag this as a gap, not a choice. Example: "Real-time team chat skipped. No matching MCP available, so the conversational record was not searchable."
  • The source is provably irrelevant, not just "probably irrelevant." A high bar. Example: "Error / exception tracking skipped. Target is a build-time script with no runtime code path." Not "probably not in error tracking, it's a feature not an error."

"It's pure feature code, error tracking won't have anything" is not sufficient, and neither is "I doubt long-form docs would have this." Run the search; let the null result speak. The cost of an investigator returning empty is one subagent. The cost of missing a design doc that actually exists is a wrong answer.

If your scope assessment suggests a single-commit trivial target where the PR description already contains the complete answer, you may answer inline only after confirming all seven available category searches would be redundant. Say so explicitly. This should be rare.

Step 4. Synthesize

Spawn one synthesizer subagent:

  • subagent_type: generalPurpose
  • model: claude-opus-4-8-thinking-xhigh
  • readonly: false (agent mode). The synthesizer's quality check spot-verifies citations, which can require MCP access. Readonly/Ask mode strips MCPs and defeats that.

The synthesizer gets:

  1. The investigator findings, including any null results and any categories skipped with justification
  2. The code anchor from Step 2 (file paths, symbols, commit hashes, PR numbers, ticket IDs)
  3. The user's original question
  4. The epistemics framework from references/epistemics.md
  5. The synthesizer prompt template from references/synthesizer-prompt.md

Its job is the final output: a confidence-weighted, evidence-cited narrative with clearly separated "what we know" and "what we're inferring" sections, plus honest acknowledgment of gaps and null-result sources.

Step 5. Present

Take the synthesizer's output and present it to the user. You may lightly edit for clarity or add context from the conversation, but do not rewrite the confidence language. The epistemic framing is the product. Dropping the hedges to sound more authoritative is the exact failure mode this skill exists to prevent.

Output Format

The final output uses this structure. Adapt as needed, but keep the confidence separation intact.

The Question. Restate what the user asked, concisely.

The Code in Question. File paths, line ranges, and key symbols. One or two lines so the reader is anchored.

What We Found (direct evidence). Claims with explicit citations (PR #, ticket ID, doc URL, chat permalink, commit hash, code comment with file:line). Each bullet is a thing we have textual evidence for. Use present tense and quote or paraphrase the source.

What We Can Reasonably Infer. Claims well-supported by indirect evidence or combinations of signals, but not explicitly stated anywhere. Each bullet must explain the inference chain: "Given A and B, it's likely that C." Use hedged language ("appears to", "likely", "suggests").

Competing Hypotheses. If the evidence fits multiple stories, list them. For each, give the hypothesis, the evidence for it, and the evidence against it. Don't force a winner when the record doesn't support one. (Skip this section if there's a clear answer.)

What We Don't Know. Explicit gaps. Questions the user asked that the evidence didn't answer. Sources we searched and came up empty. Be specific. "We searched the issue tracker for 'rate limit' and found no ticket discussing this specific threshold" is more useful than "we don't know why."

Sources Consulted. One line per investigator, including the ones that returned nothing. The reader should see at a glance (a) which MCPs were queried, (b) which came back empty, and (c) which were skipped and why. This coverage map lets the user judge breadth and redirect if something obvious was missed.

Format each line as: - <Source>: <what was searched>. <what was found, or "no relevant results," or "skipped. reason">.

Example:

  • Source control (git/gh): git log --follow backend/retry.ts, PRs #49074, #47812. Found PR #49074 introduced exponential backoff and linked ENG-4421.
  • Issue tracker (Linear): searched for "retry" and ENG-4421. Found ENG-4421 parent issue but no discussion of backoff parameters.
  • Long-form docs (Notion): searched for "retry policy," "backend retries," "ENG-4421." No relevant results.
  • Real-time team chat (Slack): skipped. No matching MCP available in this environment. Gap: conversational record not searched.
  • Infrastructure observability (Datadog): searched for retry_count metric and monitors around 2024-08-14. Found monitor "Upstream 5xx rate > 1%" created same day as PR #49074.
  • Error / exception tracking (Sentry): searched for issues first-seen in Aug 2024 with stack through retry.ts. Found issue SENTRY-3821 spiking in the week before the PR.
  • Product analytics warehouse (Databricks): queried <your_analytics_db>.<schema>.stg_backend_upstream_retry for the 30-day window around 2024-08-14. Daily failure-classified event count fell from ~1.2k/day pre-PR to <50/day post-PR. Also checked system.query.history for relevant migration queries. None found.

After the Sources Consulted block, if the user's why question is a precursor to actually changing this code, convert the lineage findings into a Preserve / Change / Avoid / Risk constraint set suitable for planning the change.

Common Failure Modes to Avoid

  • Confident storytelling. A plausible narrative built from thin evidence. A bullet with no citation goes in "inferred" or "hypotheses," not "what we found."
  • Citing the code as evidence for its own intent. "Handles the null case because it checks for null" is mechanics, not motivation. Motivation comes from an external source (PR discussion, ticket, comment, conversation) or is labeled as inference.
  • Recency bias. Assuming the most recent commit is authoritative. The current shape is often the accretion of many earlier decisions. Trace back.
  • Sycophantic agreement. If the user suggests a reason ("I assume this is for performance?"), treat it as a hypothesis and check the evidence independently, don't just confirm it.
  • Skipping the gaps section. An honest accounting of what you couldn't find out is part of the value.
  • Skipping investigators by anticipation. Deciding up front that "long-form docs probably don't have this" or "this isn't an error tracking thing" without searching. The default-to-all-seven posture prevents this. A null result is a data point; a skipped search is a blind spot.
  • Collapsing investigators into one agent. Each MCP has its own query vocabulary, result shape, and pitfalls; pooling them dilutes specialization and makes coverage harder to reason about. Always one investigator per category.

Reference Files

  • references/epistemics.md. Confidence tiers and phrasing guide. The synthesizer must follow it.
  • references/investigator-prompt.md. Base prompt template for investigator subagents.
  • references/source-playbook.md. Index pointing at the category playbooks below.
  • references/sources/*.md. One self-contained example playbook per category, plus cross-cutting incident-postmortem.md. Give an investigator the single file that matches its category and adapt it to the available MCP.
  • references/synthesizer-prompt.md. Prompt template for the synthesizer subagent, including the output format.
用于取消正在运行的Ralph循环。检查状态文件是否存在,若存在则读取迭代次数并删除相关文件,最后返回确认信息;若不存在则提示无活跃循环。
用户想要停止或取消当前活跃的Ralph循环 用户请求中止正在进行的Ralph任务
skills/cursor_plugins/ralph-loop/skills/cancel-ralph/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill cancel-ralph -g -y
SKILL.md
Frontmatter
{
    "name": "cancel-ralph",
    "description": "Cancel an active Ralph Loop. Use when the user wants to stop, cancel, or abort a running ralph loop."
}

Cancel Ralph

Trigger

The user wants to cancel or stop an active Ralph loop.

Workflow

  1. Check if .cursor/ralph/scratchpad.md exists.

  2. If it does not exist: Tell the user "No active Ralph loop found."

  3. If it exists:

    • Read .cursor/ralph/scratchpad.md to get the current iteration from the iteration: field.
    • Remove the state file and any done flag:
      rm -rf .cursor/ralph
      
    • Report: "Cancelled Ralph loop (was at iteration N)."

Output

A short confirmation with the iteration count, or a message that no loop was active.

解释Ralph Loop插件的工作原理、用法及适用场景。当用户询问该插件定义、机制或需要使用示例时触发,提供启动、取消及完成信号的配置说明。
询问Ralph Loop是什么 想了解Ralph Loop如何工作 需要Ralph Loop的使用指导
skills/cursor_plugins/ralph-loop/skills/ralph-loop-help/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill ralph-loop-help -g -y
SKILL.md
Frontmatter
{
    "name": "ralph-loop-help",
    "description": "Explain the Ralph Loop plugin, how it works, and available skills. Use when the user asks for help with ralph loop, wants to understand the technique, or needs usage examples."
}

Ralph Loop Help

Trigger

The user asks what Ralph Loop is, how it works, or needs usage guidance.

What to Explain

What is Ralph Loop?

Ralph Loop implements the Ralph Wiggum technique — an iterative development methodology based on continuous AI loops, pioneered by Geoffrey Huntley.

Core concept: the same prompt is fed to the agent repeatedly. The "self-referential" aspect comes from the agent seeing its own previous work in the files and git history, not from feeding output back as input.

Each iteration:

  1. The agent receives the SAME prompt
  2. Works on the task, modifying files
  3. Tries to exit
  4. Stop hook intercepts and feeds the same prompt again
  5. The agent sees its previous work in the files
  6. Iteratively improves until completion

Starting a Ralph Loop

Tell the agent your task along with options:

Start a ralph loop: "Build a REST API for todos" --max-iterations 20 --completion-promise "COMPLETE"

Options:

  • --max-iterations N — max iterations before auto-stop
  • --completion-promise "TEXT" — phrase to signal completion

How it works:

  1. Creates .cursor/ralph/scratchpad.md state file
  2. Agent works on the task
  3. Stop hook intercepts exit and feeds the same prompt back
  4. Agent sees its previous work and iterates
  5. Continues until promise detected or max iterations reached

Cancelling a Ralph Loop

Ask the agent to cancel the ralph loop. It will remove the state file and report the iteration count.

Completion Promises

To signal completion, the agent outputs a <promise> tag:

<promise>TASK COMPLETE</promise>

The stop hook looks for this specific tag. Without it (or --max-iterations), Ralph runs indefinitely.

When to Use Ralph

Good for:

  • Well-defined tasks with clear success criteria
  • Tasks requiring iteration and refinement
  • Iterative development with self-correction
  • Greenfield projects

Not good for:

  • Tasks requiring human judgment or design decisions
  • One-shot operations
  • Tasks with unclear success criteria

Learn More

Output

Present the above information clearly to the user, tailored to their specific question.

启动 Ralph Loop,实现迭代式自引用开发。通过循环反馈提示词与历史工作成果,驱动 Agent 自主重复执行任务直至完成或达到最大迭代次数,支持设置完成承诺与安全限制。
用户要求运行 Ralph loop 用户希望开始迭代循环 用户需要对任务进行重复的自主迭代直到完成
skills/cursor_plugins/ralph-loop/skills/ralph-loop/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill ralph-loop -g -y
SKILL.md
Frontmatter
{
    "name": "ralph-loop",
    "description": "Start a Ralph Loop for iterative self-referential development. Use when the user asks to run a ralph loop, start an iterative loop, or wants repeated autonomous iteration on a task until completion."
}

Ralph Loop

Trigger

The user wants to start a Ralph loop. An iterative development loop where the same prompt is fed back after every turn, and the agent sees its own previous work each iteration.

Workflow

  1. Gather the user's task prompt and optional parameters:

    • max_iterations (number, default 0 for unlimited)
    • completion_promise (text, or "null" if not set)
  2. Create the directory .cursor/ralph/ if it doesn't exist, then write the state file at .cursor/ralph/scratchpad.md with this exact format:

    ---
    iteration: 1
    max_iterations: <N or 0>
    completion_promise: "<TEXT>" or null
    ---
    
    <the user's task prompt goes here>
    

    Example:

    ---
    iteration: 1
    max_iterations: 20
    completion_promise: "COMPLETE"
    ---
    
    Build a REST API for todos with CRUD operations, input validation, and tests.
    
  3. Confirm to the user that the Ralph loop is active, then begin working on the task.

  4. The stop hook automatically intercepts each turn end and feeds the same prompt back as a followup message. You will see it prefixed with [Ralph loop iteration N.].

Guardrails

  • If a completion promise is set, you may ONLY output <promise>TEXT</promise> when the statement is completely and genuinely true.
  • Do not output false promises to escape the loop.
  • Always recommend setting max_iterations as a safety net.
  • Quote the completion_promise value in the YAML frontmatter if it contains special characters.

Output

Confirm the loop is active (prompt, iteration limit, promise if set), then start working on the task immediately.

根据用户基础与目标,构建包含里程碑、练习及反馈标准的个性化学习路线图。通过评估现状、规划内容序列、设定阶段性项目并定期复盘调整,确保学习计划可行且高效,避免资源过载。
需要长期系统学习某个新领域或技能 希望制定结构化的多阶段能力提升计划
skills/cursor_plugins/teaching/skills/create-learning-path/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill create-learning-path -g -y
SKILL.md
Frontmatter
{
    "name": "create-learning-path",
    "description": "Build a personalized learning roadmap with milestones and practice checkpoints"
}

Create a learning path

Trigger

Building capability in a topic over multiple sessions.

Workflow

  1. Assess baseline knowledge and target outcomes.
  2. Sequence topics from fundamentals to applied practice.
  3. Define milestone projects and time-boxed checkpoints.
  4. Add deliberate practice exercises with feedback criteria.
  5. Review progress and adjust pacing.

Tools

  • Use Ask user tool.

Guardrails

  • Keep milestones achievable within the stated schedule.
  • Include practice and reflection in every phase.
  • Avoid resource overload by prioritizing a small set of materials.

Output

  • Week-by-week or milestone-based plan
  • Practice assignments
  • Progress review rubric
用于学习者在完成里程碑后,评估学习进展、识别阻碍因素并调整学习计划。通过回顾成果、分析薄弱环节、优化优先级和节奏,输出进度回顾、更新后的计划及下一里程碑定义,实现数据驱动的学习路径优化。
学习者完成关键学习里程碑 需要基于数据调整后续学习计划
skills/cursor_plugins/teaching/skills/run-learning-retrospective/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill run-learning-retrospective -g -y
SKILL.md
Frontmatter
{
    "name": "run-learning-retrospective",
    "description": "Evaluate learning progress, identify blockers, and adjust the learning plan"
}

Run a learning retrospective

Trigger

Learner completed a milestone and needs data-driven adjustment to their plan.

Workflow

  1. Review completed work against target outcomes.
  2. Identify recurring blockers and weak concepts.
  3. Prioritize what to reinforce versus what to defer.
  4. Adjust pacing and upcoming practice tasks.
  5. Set next milestone and measurable checkpoint.

Tools

  • Use Ask user tool.

Output

  • Progress retrospective
  • Updated learning plan
  • Next milestone definition
执行极端严格的代码质量审查,聚焦抽象质量、巨型文件和逻辑混乱。鼓励通过“代码柔道”重构简化结构,消除冗余复杂性,防止文件膨胀和条件语句蔓延,追求极致简洁与优雅的实现。
thermo-nuclear code quality review thermonuclear review deep code quality audit especially harsh maintainability review
skills/cursor_plugins/thermos/skills/thermo-nuclear-code-quality-review/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill thermo-nuclear-code-quality-review -g -y
SKILL.md
Frontmatter
{
    "name": "thermo-nuclear-code-quality-review",
    "description": "Run an extremely strict maintainability review for abstraction quality, giant files, and spaghetti-condition growth. Use for a thermo-nuclear code quality review, thermonuclear review, deep code quality audit, or especially harsh maintainability review.",
    "disable-model-invocation": true
}

Thermo-Nuclear Code Quality Review

Use this skill for an unusually strict review focused on implementation quality, maintainability, abstraction quality, and codebase health.

Above all, this skill should push the reviewer to be ambitious about code structure. Do not merely identify local cleanup opportunities. Actively search for "code judo" moves: restructurings that preserve behavior while making the implementation dramatically simpler, smaller, more direct, and more elegant.

Core Prompt

Start from this baseline:

Perform a deep code quality audit of the current branch's changes. Rethink how to structure / implement the changes to meaningfully improve code quality without impacting behavior. Work to improve abstractions, modularity, reduce Spaghetti code, improve succinctness and legibility. Be ambitious, if there is a clear path to improving the implementation that involves restructuring some of the codebase, go for it. Be extremely thorough and rigorous. Measure twice, cut once.

Non-Negotiable Additional Standards

Apply the baseline prompt above, plus these explicit review rules:

  1. Be ambitious about structural simplification.

    • Do not stop at "this could be a bit cleaner."
    • Look for opportunities to reframe the change so that whole branches, helpers, modes, conditionals, or layers disappear entirely.
    • Prefer the solution that makes the code feel inevitable in hindsight.
    • Assume there is often a "code judo" move available: a re-organization that uses the existing architecture more effectively and makes the change dramatically simpler and more elegant.
    • If you see a path to delete complexity rather than rearrange it, push hard for that path.
  2. Do not let a PR push a file from under 1k lines to over 1k lines without a very strong reason.

    • Treat this as a strong code-quality smell by default.
    • Prefer extracting helpers, subcomponents, modules, or local abstractions instead of letting a file sprawl past 1000 lines.
    • If the diff crosses that threshold, explicitly ask whether the code should be decomposed first.
    • Only waive this if there is a compelling structural reason and the resulting file is still clearly organized.
  3. Do not allow random spaghetti growth in existing code.

    • Be highly suspicious of new ad-hoc conditionals, scattered special cases, or one-off branches inserted into unrelated flows.
    • If a change adds "weird if statements in random places", treat that as a design problem, not a stylistic nit.
    • Prefer pushing the logic into a dedicated abstraction, helper, state machine, policy object, or separate module instead of tangling an existing path.
    • Call out changes that make the surrounding code harder to reason about, even if they technically work.
  4. Bias toward cleaning the design, not just accepting working code.

    • If behavior can stay the same while the structure becomes meaningfully cleaner, push for the cleaner version.
    • Do not rubber-stamp "it works" implementations that leave the codebase messier.
    • Strongly prefer simplifications that remove moving pieces altogether over refactors that merely spread the same complexity around.
  5. Prefer direct, boring, maintainable code over hacky or magical code.

    • Treat brittle, ad-hoc, or "magic" behavior as a code-quality problem.
    • Be skeptical of generic mechanisms that hide simple data-shape assumptions.
    • Flag thin abstractions, identity wrappers, or pass-through helpers that add indirection without buying clarity.
  6. Push hard on type and boundary cleanliness when they affect maintainability.

    • Question unnecessary optionality, unknown, any, or cast-heavy code when a clearer type boundary could exist.
    • Prefer explicit typed models or shared contracts over loosely-shaped ad-hoc objects.
    • If a branch relies on silent fallback to paper over an unclear invariant, ask whether the boundary should be made explicit instead.
  7. Keep logic in the canonical layer and reuse existing helpers.

    • Call out feature logic leaking into shared paths or implementation details leaking through APIs.
    • Prefer existing canonical utilities/helpers over bespoke one-offs.
    • Push code toward the right package, service, or module instead of normalizing architectural drift.
  8. Treat unnecessary sequential orchestration and non-atomic updates as design smells when the cleaner structure is obvious.

    • If independent work is serialized for no good reason, ask whether the flow should run in parallel instead.
    • If related updates can leave state half-applied, push for a more atomic structure.
    • Do not over-index on micro-optimizations, but do flag avoidable orchestration complexity that makes the implementation more brittle.

Primary Review Questions

For every meaningful change, ask:

  • Is there a "code judo" move that would make this dramatically simpler?
  • Can this change be reframed so fewer concepts, branches, or helper layers are needed?
  • Does this improve or worsen the local architecture?
  • Did the diff add branching complexity where a better abstraction should exist?
  • Did a previously cohesive module become more coupled, more stateful, or harder to scan?
  • Is this logic living in the right file and layer?
  • Did this change enlarge a file or component past a healthy size boundary?
  • Are there repeated conditionals that signal a missing model or missing helper?
  • Is the implementation direct and legible, or does it rely on special cases and incidental control flow?
  • Is this abstraction actually earning its keep, or is it just a wrapper?
  • Did the diff introduce casts, optionality, or ad-hoc object shapes that obscure the real invariant?
  • Is this logic living in the canonical layer, or did the diff leak details across a boundary?
  • Is this orchestration more sequential or less atomic than it needs to be?

What to Flag Aggressively

Escalate findings when you see:

  • A complicated implementation where a cleaner reframing could delete whole categories of complexity.
  • Refactors that move code around but fail to reduce the number of concepts a reader must hold in their head.
  • A file crossing 1000 lines due to the PR, especially if the new code could be split out.
  • New conditionals bolted onto unrelated code paths.
  • One-off booleans, nullable modes, or flags that complicate existing control flow.
  • Feature-specific logic leaking into general-purpose modules.
  • Generic "magic" handling that hides simple structure and makes the code harder to reason about.
  • Thin wrappers or identity abstractions that add indirection without simplifying anything.
  • Unnecessary casts, any, unknown, or optional params that muddy the real contract.
  • Copy-pasted logic instead of extracted helpers.
  • Narrow edge-case handling implemented in the middle of an already busy function.
  • Refactors that technically pass tests but make the code less modular or less readable.
  • "Temporary" branching that is likely to become permanent debt.
  • Bespoke helpers where the codebase already has a canonical utility for the job.
  • Logic added in the wrong layer/package when it should live somewhere more central.
  • Sequential async flow where obviously independent work could stay simpler and clearer with parallel execution.
  • Partial-update logic that leaves state less atomic than necessary.

Preferred Remedies

When you identify a code-quality problem, prefer suggestions like:

  • Delete a whole layer of indirection rather than polishing it.
  • Reframe the state model so conditionals disappear instead of getting centralized.
  • Change the ownership boundary so the feature becomes a natural extension of an existing abstraction.
  • Turn special-case logic into a simpler default flow with fewer exceptions.
  • Extract a helper or pure function.
  • Split a large file into smaller focused modules.
  • Move feature-specific logic behind a dedicated abstraction.
  • Replace condition chains with a typed model or explicit dispatcher.
  • Separate orchestration from business logic.
  • Collapse duplicate branches into a single clearer flow.
  • Delete wrappers that do not meaningfully clarify the API.
  • Reuse the existing canonical helper instead of introducing a near-duplicate.
  • Make type boundaries more explicit so the control flow gets simpler.
  • Move the logic to the package/module/layer that already owns the concept.
  • Parallelize independent work when that also simplifies the orchestration.
  • Restructure related updates into a more atomic flow when partial state would be harder to reason about.

Do not be satisfied with "maybe rename this" feedback when the real issue is structural. Do not be satisfied with a merely cleaner version of the same messy idea if there is a plausible path to a much simpler idea.

Review Tone

Be direct, serious, and demanding about quality. Do not be rude, but do not soften major maintainability issues into mild suggestions. If the code is making the codebase messier, say so clearly. If the implementation missed an opportunity for a dramatic simplification, say that clearly too.

Good phrases:

  • this pushes the file past 1k lines. can we decompose this first?
  • this adds another special-case branch into an already busy flow. can we move this behind its own abstraction?
  • this works, but it makes the surrounding code more spaghetti. let's keep the behavior and restructure the implementation.
  • this feels like feature logic leaking into a shared path. can we isolate it?
  • this abstraction seems unnecessary. can we just keep the direct flow?
  • why does this need a cast / optional here? can we make the boundary more explicit instead?
  • this looks like a bespoke helper for something we already have elsewhere. can we reuse the canonical one?
  • i think there's a code-judo move here that makes this much simpler. can we reframe this so these branches disappear?
  • this refactor moves complexity around, but doesn't really delete it. is there a way to make the model itself simpler?

Output Expectations

Prioritize findings in this order:

  1. Structural code-quality regressions
  2. Missed opportunities for dramatic simplification / code-judo restructuring
  3. Spaghetti / branching complexity increases
  4. Boundary / abstraction / type-contract problems that make the code harder to reason about
  5. File-size and decomposition concerns
  6. Modularity and abstraction issues
  7. Legibility and maintainability concerns

Do not flood the review with low-value nits if there are larger structural issues. Prefer a smaller number of high-conviction comments over a long list of cosmetic notes.

Approval Bar

Do not approve merely because behavior seems correct. The bar for approval is:

  • no clear structural regression
  • no obvious missed opportunity to make the implementation dramatically simpler when such a path is visible
  • no unjustified file-size explosion
  • no obvious spaghetti-growth from special-case branching
  • no obviously hacky or magical abstraction that makes the code harder to reason about
  • no unnecessary wrapper/cast/optionality churn obscuring the real design
  • no clear architecture-boundary leak or avoidable canonical-helper duplication
  • no missed opportunity for an obvious decomposition that would materially improve maintainability

Treat these as presumptive blockers unless the author can justify them clearly:

  • the PR preserves a lot of incidental complexity when there is a plausible code-judo move that would delete it
  • the PR pushes a file from below 1000 lines to above 1000 lines
  • the PR adds ad-hoc branching that makes an existing flow more tangled
  • the PR solves a local problem by scattering feature checks across shared code
  • the PR adds an unnecessary abstraction, wrapper, or cast-heavy contract that makes the design more indirect
  • the PR duplicates an existing helper or puts logic in the wrong layer when there is a clear canonical home

If those conditions are not met, leave explicit, actionable feedback and push for a cleaner decomposition.

对已检出分支进行全面的代码审计,重点排查新增或修改代码中的安全漏洞、破坏性功能、开发者体验回归及功能门控泄漏。严格限定范围,避免误报现有代码问题。
Thermo nuclear review请求 深度代码审查请求 PR或分支差异的安全与正确性审计
skills/cursor_plugins/thermos/skills/thermo-nuclear-review/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill thermo-nuclear-review -g -y
SKILL.md
Frontmatter
{
    "name": "thermo-nuclear-review",
    "description": "Comprehensive security and correctness audit of a branch's changes. Use for thermo nuclear, thermonuclear, or deep review requests, or branch\/PR diff audits focused on bugs, breaking changes, security issues, devex regressions, and feature-gate leaks.",
    "disable-model-invocation": true
}

Thermo Nuclear Review

Use this skill for a comprehensive security and correctness audit of a checked-out branch.

Prompt

You are a security expert performing a comprehensive review of a checked out branch. Audit this branch and its changes extremely thoroughly for bugs, changes that break existing features/functionality, and security vulnerabilities. Be EXTREMELY thorough, rigorous, careful, ambitious, and attentive. NOTHING can slip through.

Scope

ONLY report issues related to code that is being ADDED or MODIFIED in this PR. Focus on changes in the diff. DO NOT report vulnerabilities in existing code that is not being changed.

Guidelines

Breaking Functionality Guidelines

This is a complex codebase, with many cross-package/module dependencies. Often simple code changes in one place have subtle interactions that break functionality elsewhere. You MUST be extremely thorough in tracing through possible side effects of the changes.

Breaking Devex Guidelines

It can be easy to break developers' ability to run / build the code locally. You MUST catch changes that will impact users' developer experience. Some examples (not exhaustive):

  • Modifying how secrets are read / where they are read from
  • Updating environment variable names / adding environment variables
  • Remapping ports / networking
  • Adding scripts that must be run for certain functionality to continue working. Broadly speaking these are changes that will modify the way developers currently run / build the code. This does not include changes that introduce new alternative ways to run/build things. Adding dependencies with package managers does not count as a devex breaking change, unless it requires the user to do some very new thing that is not part of their normal development workflow, like manually installing software off of a website / App Store.

Feature Leak Guidelines

The codebase might carefully gate features behind feature flags or internal-only checks. You MUST NOT allow any features that are meant to be behind a feature gate leak. These leaks are often subtle. Be VERY careful and thorough.

Intended Breakage Guidelines

If you identify a high risk finding, but the intent of the branch is to introduce that finding – e.g. break some functionality, remove a feature flag, remove a safeguard – AND the scope of the change is well constrained, you SHOULD NOT waste the author's time by reporting the issue to them. However, if you believe it is likely that they are not aware of the full implications of their change, or you are worried that they are under-weighting the negative impacts (extreme example: a developer pushes a PR titled "Delete the database"), or you are worried that the change is actually malicious, you should still report the finding.

Over-reporting Guidelines

If you report issues as High priority when they are not in fact high priority / meaningful issues, devs will lose trust in you and stop listening to you over time. NEVER misreport the priority / importance of issues. Be extremely thorough in tracing issues end-to-end to gain complete, and total confidence before reporting.

Final Response

IF you have medium-to-high priority / risk findings, and there is a PR for this branch, then check the PR/MR discussion using gh/glab cli to see if there are comments from BugBot or others present. If so, take their findings into account. If they found issues you missed, evaluate them to determine if they are valid and include them in your report. If they found some of the same issues you did, see if there is anything from their findings that are worth incorporating into your response. Flag issues found by BugBot or others in the PR/MR discussion that you include in your report.

Critical Rules

  • NEVER present issues with unfinished research. E.g. Never say something like, "The client has issue X, but if handled in the backend then this is ok." if you have access to the backend code and can check for yourself.
  • You MUST wait to check the PR/MR discussion until AFTER you have performed your audit. This way you have fresh eyes while you review.
  • Be EXTREMELY thorough, rigorous, careful, ambitious, and attentive. NOTHING can slip through.
并行启动两个热核审查子代理,分别进行安全/漏洞审计和代码质量审查。收集差异后综合结果,去重并加权冲突项,最终输出统一结论、高价值发现及不确定性说明。
需要同时进行安全性和代码质量的双重审查 执行分支审计或PR合并前的全面评估
skills/cursor_plugins/thermos/skills/thermos/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill thermos -g -y
SKILL.md
Frontmatter
{
    "name": "thermos",
    "description": "Launch both thermo-nuclear review subagents in parallel, then synthesize their findings. Use for thermos, double thermo review, or combined bug\/security and code-quality branch audits.",
    "disable-model-invocation": true
}

Thermos

Run the two thermo review passes as async background subagents in parallel, then synthesize their results.

Workflow

  1. Determine the review scope from the user request, PR, current branch, or relevant changed files.
  2. Gather the diff and any file/context excerpts needed for reviewers to evaluate the change without guessing.
  3. Launch both subagents in the same message with run_in_background: true:
    • subagent_type: "thermo-nuclear-review-subagent" for bugs, breakages, security, devex regressions, feature-flag leaks, and other branch-audit risks.
    • subagent_type: "thermo-nuclear-code-quality-review-subagent" for maintainability, structure, file-size growth, spaghetti, abstractions, and codebase-health risks.
  4. Pass each subagent the same scoped diff/file context and ask it to return prioritized findings with file references and evidence.
  5. After both finish, synthesize the results with findings first, deduplicated across reviewers. Weight overlapping findings more heavily, resolve disagreements with your own judgment, and keep summaries brief.

If individual background summaries are already visible to the user, do not restate them wholesale. Surface the unified verdict, the highest-signal findings, and any remaining uncertainty.

为Expo应用添加iOS App Clip目标。通过配置bundleIdentifier、创建clip target、关联域名及托管AASA文件,实现轻量级小程序通过URL从父应用启动。
用户提及App Clip或apple-app-site-association 用户希望部署轻量级iOS Clip并通过URL调用
skills/expo_skills/add-app-clip/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill add-app-clip -g -y
SKILL.md
Frontmatter
{
    "name": "add-app-clip",
    "description": "Add an iOS App Clip target to an Expo app. Use when the user mentions App Clip, AASA, apple-app-site-association, appclips, smart app banner, or wants to ship a lightweight iOS Clip invoked from a URL alongside their parent app."
}

Add an App Clip to an Expo App

Adds an iOS App Clip target to an Expo project. The Clip lives in targets/clip/, ships alongside the parent app, and is invoked from a URL on the app's domain via an Apple App Site Association (AASA) file.

The parent app's bundle ID becomes com.<username>.<app-name> and the Clip's is automatically derived as <parent>.clip (e.g. com.bacon.may20.clip).

1. Set bundleIdentifier and appleTeamId

bun create target warns if these are missing. Add to app.json:

{
  "expo": {
    "ios": {
      "bundleIdentifier": "com.<username>.<app-name>",
      "appleTeamId": "XX57RJ5UTD"
    }
  }
}

2. Add the App Clip target

bun create target clip

This installs @bacons/apple-targets, adds it to the plugins array in app.json, and writes:

  • targets/clip/expo-target.config.js — the target's config plugin
  • targets/clip/Info.plist — Clip Info.plist
  • targets/clip/AppDelegate.swift, Assets.xcassets, etc.

Pick a good icon or reuse the existing one defined in the app — check it with bunx expo config under the icon or ios.icon key.

3. Wire up associated domains

The parent app and the Clip each need the Associated Domains entitlement pointing at the domain that hosts the AASA file.

In app.json, add both applinks: (parent) and appclips: (Clip invocation) entries:

{
  "expo": {
    "ios": {
      "associatedDomains": [
        "applinks:may20.expo.app",
        "appclips:may20.expo.app"
      ]
    }
  }
}

In targets/clip/expo-target.config.js, declare the Clip's entitlement:

/** @type {import('@bacons/apple-targets/app.plugin').ConfigFunction} */
module.exports = (config) => ({
  type: "clip",
  icon: "https://github.com/expo.png",
  entitlements: {
    "com.apple.developer.associated-domains": ["appclips:may20.expo.app"],
  },
});

If you skip this, expo prebuild will print: Apple App Clip may require the associated domains entitlement but none were found.

4. Register bundle IDs and create the App Store entry

bunx setup-safari

This logs in to the Apple Developer account, registers com.bacon.may20, creates the App Store Connect entry, and prints:

  • A starter apple-app-site-association JSON
  • A <meta name="apple-itunes-app"> tag with the iTunes app id
  • Team ID, iTunes ID, and Bundle ID

5. Host the AASA file

App Clips are invoked when iOS fetches https://<your-domain>/.well-known/apple-app-site-association and finds a matching appclips entry.

mkdir -p public/.well-known
touch public/.well-known/apple-app-site-association

Paste the JSON setup-safari printed, but add an appclips block for the Clip's full app ID (<TeamID>.<ClipBundleID>). The output of setup-safari only covers the parent app:

{
  "applinks": {
    "details": [
      {
        "appIDs": ["XX57RJ5UTD.com.bacon.may20"],
        "components": [{ "/": "*", "comment": "Matches all routes" }]
      }
    ]
  },
  "appclips": {
    "apps": ["XX57RJ5UTD.com.bacon.may20.clip"]
  },
  "activitycontinuation": {
    "apps": ["XX57RJ5UTD.com.bacon.may20"]
  },
  "webcredentials": {
    "apps": ["XX57RJ5UTD.com.bacon.may20"]
  }
}

Notes:

  • The file has no extension and no Content-Type requirements beyond being served as-is. Expo Router static export serves files in public/ verbatim.
  • The appclips block is what lets a URL on the domain launch the Clip.
  • webcredentials is used for sharing credentials between the website, parent app, and the App Clip.
  • activitycontinuation is optional and used for sharing the link between mobile and desktop. Must be used with Head from expo-router — see https://docs.expo.dev/router/advanced/apple-handoff/
  • Notation and route-disabling details: https://sosumi.ai/documentation/xcode/supporting-associated-domains

6. Add the Smart App Banner meta tag

Create src/app/+html.tsx (Expo Router's HTML shell) and add the tag from setup-safari. Create the versioned template if it doesn't exist:

bunx expo customize src/app/+html.tsx

Add the meta tag to the <head>:

import { ScrollViewStyleReset } from "expo-router/html";

export default function Root({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <head>
        <meta charSet="utf-8" />
        <meta httpEquiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <meta name="apple-itunes-app" content="app-id=6771566491" />
        <ScrollViewStyleReset />
      </head>
      <body>{children}</body>
    </html>
  );
}

To make the website show the App Clip card instead of the install card, use:

<meta
  name="apple-itunes-app"
  content="app-id=6771566491, app-clip-bundle-id=com.bacon.may20.clip, app-clip-display=card"
/>

7. Deploy the website

The AASA file must be live before iOS will trust the association. Use EAS Hosting:

bunx expo export -p web
eas deploy --prod

This publishes the site (including /.well-known/apple-app-site-association) at https://<slug>.expo.app. Verify:

curl https://may20.expo.app/.well-known/apple-app-site-association

8. Mirror permissions

Inspect the parent app's permissions after prebuild:

npx expo config --type introspect

Look at the infoPlist object — mirror the permission keys in the App Clip's Info.plist so matching APIs can be used from the Clip.

Set deploymentTarget: "17.6" in the Clip's target config — App Clips have a higher minimum size limit in iOS 17.6.

If the app uses push notifications or location services, add to the App Clip's Info.plist to request the necessary permissions:

<key>NSAppClip</key>
<dict>
  <key>NSAppClipRequestEphemeralUserNotification</key>
  <false/>
  <key>NSAppClipRequestLocationConfirmation</key>
  <true/>
</dict>

9. Build and submit to TestFlight

bunx testflight

This will:

  1. Generate an eas.json if missing.
  2. Set up credentials for both targets (parent + Clip). Each gets its own provisioning profile but can share a single Distribution Certificate.
  3. Sync capabilities — note Enabled: Associated Domains for the Clip target.
  4. Build, upload, and schedule a TestFlight submission.

10. Configure App Clip metadata

Pull existing App Store metadata to local:

eas metadata:pull

Add apple.appClip to store.config.json. Up to 3 invocation URLs can launch the Clip from a web page:

{
  "configVersion": 0,
  "apple": {
    "appClip": {
      "defaultExperience": {
        "action": "PLAY",
        "releaseWithAppStoreVersion": true,
        "reviewDetail": {
          "invocationUrls": ["https://may20.expo.app/", null, null]
        },
        "info": {
          "en-US": {
            "subtitle": "Instantly native with Expo",
            "headerImage": "store/apple/app-clip/en-US/asc-app-clip.png"
          }
        }
      }
    }
  }
}

The headerImage must be a 1800x1200 PNG with no opacity.

Push back to the store:

eas metadata:push

Apple's recommended App Clip metadata guidelines: https://sosumi.ai/documentation/appclip/configuring-the-launch-experience-of-your-app-clip

What you get

  • Parent app target: com.bacon.may20
  • App Clip target: com.bacon.may20.clip, lives in targets/clip/
  • AASA hosted at https://may20.expo.app/.well-known/apple-app-site-association
  • Smart App Banner meta tag on every web route
  • Every route linked to its native counterpart
  • TestFlight build of the parent app with the Clip embedded

Once Apple invokes the Clip from a URL on the domain, iOS opens targets/clip/'s entry point which loads the React Native app.

Native detection (optional)

To let JS detect when it's running inside an App Clip and present an install prompt for the full app, create a local Expo module (bunx create-expo-module --local) that exposes navigator.appClip.prompt().

See ./references/native-module.md for the Swift module, TypeScript interface, and usage.

References

  • ./references/native-module.md — Local Expo module to detect App Clip context and present the SKOverlay install prompt
提供基于 Expo Router 构建原生 UI 的完整指南,涵盖路由、样式、组件、动画及导航模式。强调优先使用 Expo Go 进行测试,仅在必要时进行自定义原生构建,并规范代码风格与文件命名。
需要构建或优化 Expo/React Native 应用界面 询问关于 Expo Router 的路由配置或结构 涉及原生模块集成或自定义构建决策 需要遵循特定的 UI 组件和动画最佳实践
skills/expo_skills/building-native-ui/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill building-native-ui -g -y
SKILL.md
Frontmatter
{
    "name": "building-native-ui",
    "license": "MIT",
    "version": "1.0.1",
    "description": "Complete guide for building beautiful apps with Expo Router. Covers fundamentals, styling, components, navigation, animations, patterns, and native tabs."
}

Expo UI Guidelines

References

Consult these resources as needed:

references/
  animations.md          Reanimated: entering, exiting, layout, scroll-driven, gestures
  controls.md            Native iOS: Switch, Slider, SegmentedControl, DateTimePicker, Picker
  form-sheet.md          Form sheets in expo-router: configuration, footers and background interaction. 
  gradients.md           CSS gradients via experimental_backgroundImage (New Arch only)
  icons.md               SF Symbols via expo-image (sf: source), names, animations, weights
  media.md               Camera, audio, video, and file saving
  route-structure.md     Route conventions, dynamic routes, groups, folder organization
  search.md              Search bar with headers, useSearch hook, filtering patterns
  storage.md             SQLite, AsyncStorage, SecureStore
  tabs.md                NativeTabs, migration from JS tabs, iOS 26 features
  toolbar-and-headers.md Stack headers and toolbar buttons, menus, search (iOS only)
  visual-effects.md      Blur (expo-blur) and liquid glass (expo-glass-effect)
  webgpu-three.md        3D graphics, games, GPU visualizations with WebGPU and Three.js
  zoom-transitions.md    Apple Zoom: fluid zoom transitions with Link.AppleZoom (iOS 18+)

Running the App

CRITICAL: Always try Expo Go first before creating custom builds.

Most Expo apps work in Expo Go without any custom native code. Before running npx expo run:ios or npx expo run:android:

  1. Start with Expo Go: Run npx expo start and scan the QR code with Expo Go
  2. Check if features work: Test your app thoroughly in Expo Go
  3. Only create custom builds when required - see below

When Custom Builds Are Required

You need npx expo run:ios/android or eas build ONLY when using:

  • Local Expo modules (custom native code in modules/)
  • Apple targets (widgets, app clips, extensions via @bacons/apple-targets)
  • Third-party native modules not included in Expo Go
  • Custom native configuration that can't be expressed in app.json

When Expo Go Works

Expo Go supports a huge range of features out of the box:

  • All expo-* packages (camera, location, notifications, etc.)
  • Expo Router navigation
  • Most UI libraries (reanimated, gesture handler, etc.)
  • Push notifications, deep links, and more

If you're unsure, try Expo Go first. Creating custom builds adds complexity, slower iteration, and requires Xcode/Android Studio setup.

Code Style

  • Be cautious of unterminated strings. Ensure nested backticks are escaped; never forget to escape quotes correctly.
  • Always use import statements at the top of the file.
  • Always use kebab-case for file names, e.g. comment-card.tsx
  • Always remove old route files when moving or restructuring navigation
  • Never use special characters in file names
  • Configure tsconfig.json with path aliases, and prefer aliases over relative imports for refactors.

Routes

See ./references/route-structure.md for detailed route conventions.

  • Routes belong in the app directory.
  • Never co-locate components, types, or utilities in the app directory. This is an anti-pattern.
  • Ensure the app always has a route that matches "/", it may be inside a group route.

Library Preferences

  • Never use modules removed from React Native such as Picker, WebView, SafeAreaView, or AsyncStorage
  • Never use legacy expo-permissions
  • expo-audio not expo-av
  • expo-video not expo-av
  • expo-image with source="sf:name" for SF Symbols, not expo-symbols or @expo/vector-icons
  • react-native-safe-area-context not react-native SafeAreaView
  • process.env.EXPO_OS not Platform.OS
  • React.use not React.useContext
  • expo-image Image component instead of intrinsic element img
  • expo-glass-effect for liquid glass backdrops

Responsiveness

  • Always wrap root component in a scroll view for responsiveness
  • Use <ScrollView contentInsetAdjustmentBehavior="automatic" /> instead of <SafeAreaView> for smarter safe area insets
  • contentInsetAdjustmentBehavior="automatic" should be applied to FlatList and SectionList as well
  • Use flexbox instead of Dimensions API
  • ALWAYS prefer useWindowDimensions over Dimensions.get() to measure screen size

Behavior

  • Use expo-haptics conditionally on iOS to make more delightful experiences
  • Use views with built-in haptics like <Switch /> from React Native and @react-native-community/datetimepicker
  • When a route belongs to a Stack, its first child should almost always be a ScrollView with contentInsetAdjustmentBehavior="automatic" set
  • When adding a ScrollView to the page it should almost always be the first component inside the route component
  • Prefer headerSearchBarOptions in Stack.Screen options to add a search bar
  • Use the <Text selectable /> prop on text containing data that could be copied
  • Consider formatting large numbers like 1.4M or 38k
  • Never use intrinsic elements like 'img' or 'div' unless in a webview or Expo DOM component

Styling

Follow Apple Human Interface Guidelines.

General Styling Rules

  • Prefer flex gap over margin and padding styles
  • Prefer padding over margin where possible
  • Always account for safe area, either with stack headers, tabs, or ScrollView/FlatList contentInsetAdjustmentBehavior="automatic"
  • Ensure both top and bottom safe area insets are accounted for
  • Inline styles not StyleSheet.create unless reusing styles is faster
  • Add entering and exiting animations for state changes
  • Use { borderCurve: 'continuous' } for rounded corners unless creating a capsule shape
  • ALWAYS use a navigation stack title instead of a custom text element on the page
  • When padding a ScrollView, use contentContainerStyle padding and gap instead of padding on the ScrollView itself (reduces clipping)
  • CSS and Tailwind are not supported - use inline styles

Text Styling

  • Add the selectable prop to every <Text/> element displaying important data or error messages
  • Counters should use { fontVariant: 'tabular-nums' } for alignment

Shadows

Use CSS boxShadow style prop. NEVER use legacy React Native shadow or elevation styles.

<View style={{ boxShadow: "0 1px 2px rgba(0, 0, 0, 0.05)" }} />

'inset' shadows are supported.

Navigation

Link

Use <Link href="/path" /> from 'expo-router' for navigation between routes.

import { Link } from 'expo-router';

// Basic link
<Link href="/path" />

// Wrapping custom components
<Link href="/path" asChild>
  <Pressable>...</Pressable>
</Link>

Whenever possible, include a <Link.Preview> to follow iOS conventions. Add context menus and previews frequently to enhance navigation.

Stack

  • ALWAYS use _layout.tsx files to define stacks
  • Use Stack from 'expo-router/stack' for native navigation stacks

Page Title

Set the page title in Stack.Screen options:

<Stack.Screen options={{ title: "Home" }} />

Context Menus

Add long press context menus to Link components:

import { Link } from "expo-router";

<Link href="/settings" asChild>
  <Link.Trigger>
    <Pressable>
      <Card />
    </Pressable>
  </Link.Trigger>
  <Link.Menu>
    <Link.MenuAction
      title="Share"
      icon="square.and.arrow.up"
      onPress={handleSharePress}
    />
    <Link.MenuAction
      title="Block"
      icon="nosign"
      destructive
      onPress={handleBlockPress}
    />
    <Link.Menu title="More" icon="ellipsis">
      <Link.MenuAction title="Copy" icon="doc.on.doc" onPress={() => {}} />
      <Link.MenuAction
        title="Delete"
        icon="trash"
        destructive
        onPress={() => {}}
      />
    </Link.Menu>
  </Link.Menu>
</Link>;

Link Previews

Use link previews frequently to enhance navigation:

<Link href="/settings">
  <Link.Trigger>
    <Pressable>
      <Card />
    </Pressable>
  </Link.Trigger>
  <Link.Preview />
</Link>

Link preview can be used with context menus.

Modal

Present a screen as a modal:

<Stack.Screen name="modal" options={{ presentation: "modal" }} />

Prefer this to building a custom modal component.

Sheet

Present a screen as a dynamic form sheet:

<Stack.Screen
  name="sheet"
  options={{
    presentation: "formSheet",
    sheetGrabberVisible: true,
    sheetAllowedDetents: [0.5, 1.0],
    contentStyle: { backgroundColor: "transparent" },
  }}
/>
  • Using contentStyle: { backgroundColor: "transparent" } makes the background liquid glass on iOS 26+.

Common route structure

A standard app layout with tabs and stacks inside each tab:

app/
  _layout.tsx — <NativeTabs />
  (index,search)/
    _layout.tsx — <Stack />
    index.tsx — Main list
    search.tsx — Search view
// app/_layout.tsx
import { NativeTabs, Icon, Label } from "expo-router/unstable-native-tabs";
import { Theme } from "../components/theme";

export default function Layout() {
  return (
    <Theme>
      <NativeTabs>
        <NativeTabs.Trigger name="(index)">
          <Icon sf="list.dash" />
          <Label>Items</Label>
        </NativeTabs.Trigger>
        <NativeTabs.Trigger name="(search)" role="search" />
      </NativeTabs>
    </Theme>
  );
}

Create a shared group route so both tabs can push common screens:

// app/(index,search)/_layout.tsx
import { Stack } from "expo-router/stack";
import { PlatformColor } from "react-native";

export default function Layout({ segment }) {
  const screen = segment.match(/\((.*)\)/)?.[1]!;
  const titles: Record<string, string> = { index: "Items", search: "Search" };

  return (
    <Stack
      screenOptions={{
        headerTransparent: true,
        headerShadowVisible: false,
        headerLargeTitleShadowVisible: false,
        headerLargeStyle: { backgroundColor: "transparent" },
        headerTitleStyle: { color: PlatformColor("label") },
        headerLargeTitle: true,
        headerBlurEffect: "none",
        headerBackButtonDisplayMode: "minimal",
      }}
    >
      <Stack.Screen name={screen} options={{ title: titles[screen] }} />
      <Stack.Screen name="i/[id]" options={{ headerLargeTitle: false }} />
    </Stack>
  );
}
通过 CLI 查询 EAS Update 发布后的健康指标,包括崩溃率、安装/启动数、独立用户、包大小及嵌入式与 OTA 用户比例。适用于评估更新表现、监控发布健康度或 CI 门禁检查。
询问更新表现如何 检查发布是否健康 对比新旧版本崩溃率 查看嵌入式与 OTA 用户分布 监测回滚或回归风险
skills/expo_skills/eas-update-insights/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill eas-update-insights -g -y
SKILL.md
Frontmatter
{
    "name": "eas-update-insights",
    "license": "MIT",
    "version": "1.0.0",
    "description": "Check the health of published EAS Updates: crash rates, install\/launch counts, unique users, payload size, and the split between embedded and OTA users per channel. Use when the user asks how an update is performing, whether a rollout is healthy, how many users are on the embedded build vs OTA, or wants to gate CI on update health.",
    "allowed-tools": "Bash(eas *)"
}

EAS Update Insights

Query the health of published EAS Updates directly from the CLI: launches, failed launches, crash rates, unique users, payload size, the embedded-vs-OTA user split per channel, and the most popular updates per runtime version. The data is the same data that powers the update and channel detail pages on expo.dev; these commands expose it in the terminal in human and JSON form.

When to use this skill

Use this when the user wants to assess the health or adoption of a published EAS Update: crash rates, install counts, unique users, bundle size, or the split between embedded and OTA users on a channel.

Example prompts:

  • "How is the latest update doing?"
  • "Is the latest update healthy?"
  • "Is the new release crashing more than the last one?"
  • "How many users are on the latest update vs the embedded build?"
  • "Which update is most popular on production right now?"
  • "How big is our update bundle?"

Also fits: post-publish rollout monitoring and regression detection.

Don't use when the user needs per-user crash detail or device-level reporting; this skill only exposes aggregate EAS metrics.

Prerequisites

  • eas-cli installed (npm install -g eas-cli).
  • Logged in: eas login.
  • For channel:insights: run from an Expo project directory (the command resolves the project ID from app.json). update:insights only needs a login.

Commands at a glance

Command Purpose
eas update:list Discover recent update groups, their group IDs, and branch names
eas update:insights <groupId> Per-platform launches, failed launches, crash rate, unique users, payload size, daily breakdown
eas update:view <groupId> --insights Update group details + the same metrics appended
eas channel:insights --channel <name> --runtime-version <version> Embedded/OTA user counts, most popular updates, cumulative metrics for a channel + runtime

All of these support --json --non-interactive for programmatic parsing.

Discovering IDs

Before querying insights for an update group, you need its group ID. Use eas update:list with either --branch <name> (updates on that branch) or --all (updates across all branches). Always pass --json --non-interactive when running non-interactively; without a branch/--all flag the command will otherwise prompt for a branch selection:

# Latest group id across all branches
eas update:list --all --json --non-interactive | jq -r '.currentPage[0].group'

# Latest group id on a specific branch
eas update:list --branch production --json --non-interactive | jq -r '.currentPage[0].group'

The JSON response has a currentPage array with one entry per update group (both platforms of the same publish are collapsed into one entry):

{
  "currentPage": [
    {
      "branch": "production",
      "message": "\"Fix checkout crash\" (1 week ago by someone)",
      "runtimeVersion": "1.0.6",
      "group": "03d5dfcf-736c-475a-8730-af039c3f4d06",
      "platforms": "android, ios",
      "isRollBackToEmbedded": false
    }
  ]
}

Entries also carry codeSigningKey and rolloutPercentage, but only when those features are in use for the group (undefined values are omitted from the JSON output).

When called with --branch <name>, the response also includes name (the branch name) and id (the branch ID) at the top level.

eas update:insights <groupId>

Shows launches, failed launches, crash rate, unique users, launch asset count, and average payload size for a single update group, broken down per platform (iOS, Android), plus a daily breakdown of launches and failures.

Basic use

eas update:insights 03d5dfcf-736c-475a-8730-af039c3f4d06

Flags

Flag Description
--days <N> Look back N days. Default: 7. Mutually exclusive with --start/--end.
--start <iso-date> / --end <iso-date> Explicit time range, e.g. --start 2026-04-01 --end 2026-04-15.
--platform <ios|android> Filter to a single platform. Omit to see all platforms in the group.
--json Machine-readable output. Implies --non-interactive.
--non-interactive Required when scripting.

JSON output shape

Top level: groupId, timespan (start, end, daysBack), and platforms[] with one entry per platform the group was published to. Each platform entry has updateId, totals (uniqueUsers, installs, failedInstalls, crashRatePercent), payload (launchAssetCount, averageUpdatePayloadBytes), and a daily[] time series of { date, installs, failedInstalls }.

For the complete schema and field reference, see references/update-insights-schema.md.

Fields that matter for health assessment:

  • platforms[].totals.crashRatePercent, computed as failedInstalls / (installs + failedInstalls) * 100. Zero when there are no installs.
  • platforms[].totals.installs and uniqueUsers give the adoption signal.
  • platforms[].daily is a time series, useful for spotting a sudden spike in failures.

Errors

  • Could not find any updates with group ID: "<id>" — group doesn't exist or you lack access.
  • Update group "<id>" has no ios update (available platforms: android)--platform ios was used but the group wasn't published for iOS.
  • EAS Update insights is not supported by this version of eas-cli. Please upgrade ... — the server deprecated a field the CLI relies on. Run npm install -g eas-cli@latest.

eas update:view <groupId> --insights

Extends the standard update:view output with the same per-platform insights, inline.

# Human-readable
eas update:view 03d5dfcf-... --insights
eas update:view 03d5dfcf-... --insights --days 30

# JSON: wrapped as { updates: [...], insights: {...} }
eas update:view 03d5dfcf-... --json --insights

Without --insights, update:view behaves exactly as before — no JSON shape change for existing consumers. The --days / --start / --end flags only apply when --insights is set; passing them alone errors.

eas channel:insights --channel <name> --runtime-version <version>

Shows, per channel, how many users are on the embedded build vs over-the-air updates and which updates are pulling the most traffic. Must be run from an Expo project directory.

Basic use

eas channel:insights --channel production --runtime-version 1.0.6

Flags

Flag Description
--channel <name> Required. The channel name (e.g. production, staging).
--runtime-version <version> Required. Match exactly what was published. Check runtimeVersion values in update:list.
--days <N> Look back N days. Default: 7.
--start / --end Explicit time range, like update:insights.
--json / --non-interactive Machine-readable output.

JSON output shape

Top level: channel, runtimeVersion, timespan, embeddedUpdateTotalUniqueUsers, otaTotalUniqueUsers, mostPopularUpdates[] (each with rank, groupId, message, platform, totalUniqueUsers), cumulativeMetricsAtLastTimestamp[], plus chart-shaped uniqueUsersOverTime and cumulativeMetricsOverTime objects with labels and datasets.

For the complete schema and field reference, see references/channel-insights-schema.md.

Fields that matter:

  • embeddedUpdateTotalUniqueUsers is the count of users running the embedded (binary-bundled) build.
  • mostPopularUpdates[] is updates ranked by totalUniqueUsers. Caveat: this is the top-N the server returns; otaTotalUniqueUsers is a sum of that list and may undercount total OTA reach if more than top-N updates are active.
  • uniqueUsersOverTime and cumulativeMetricsOverTime are daily data series for charting.

Errors

  • Could not find channel with the name <name> — typo or wrong account.
  • "No update launches recorded" in the table / empty mostPopularUpdates in JSON — no OTA update has been launched for that channel + runtime yet. Usually means the channel is still serving the embedded build only.

Common workflows

Verify the update I just published is healthy

# 1. Grab the latest publish on production
GROUP_ID=$(eas update:list --branch production --json --non-interactive \
  | jq -r '.currentPage[0].group')

# 2. Give it some adoption time (minutes to hours), then check crash rate
eas update:insights "$GROUP_ID" --json --non-interactive \
  | jq '.platforms[] | {platform, installs: .totals.installs, crashRate: .totals.crashRatePercent}'

Compare the crashRate across platforms and against previous releases; sudden spikes or asymmetric behaviour (iOS spiking while Android is flat, or vice versa) is the signal to investigate.

Compare adoption between two channels

for channel in production staging; do
  echo "--- $channel ---"
  eas channel:insights --channel "$channel" --runtime-version 1.0.6 --json --non-interactive \
    | jq '{
        channel,
        embedded: .embeddedUpdateTotalUniqueUsers,
        ota: .otaTotalUniqueUsers,
        topUpdate: .mostPopularUpdates[0]
      }'
done

Detect a rollout regression in the last 24 hours

eas update:insights "$GROUP_ID" --days 1 --json --non-interactive \
  | jq '.platforms[] | select(.totals.crashRatePercent > 1)'

Summarize group metrics for release notes

eas update:view "$GROUP_ID" --insights --days 30

Human-readable group details plus 30 days of launches/failures per platform — suitable for pasting into a changelog or incident review.

Output tips

  • Pipe JSON through jq; payloads are structured for easy filtering.
  • --json implies --non-interactive, but passing both is explicit and scripting-friendly.
  • Dates in daily[].date are UTC ISO timestamps; the human-readable table renders them as YYYY-MM-DD (UTC).
  • The CLI table labels say "Launches" / "Crashes" while JSON uses installs / failedInstalls. Same field, different display name.

Limitations

  • Unique users across platforms may double-count users who run the same publish on both iOS and Android. The same caveat applies to otaTotalUniqueUsers in channel insights, which is a sum over mostPopularUpdates.
  • Fresh publishes may show zeros for a short period while the metrics pipeline catches up.
  • Installs are downloads, not launches: the installs / "Launches" field counts users who downloaded the manifest and launch asset. A confirmed run only registers on the user's next update check (typically up to 24h later, depending on the app's update policy). So metrics lag the real-world state slightly.
  • Crashes are self-reported: failedInstalls / "Crashes" counts updates that errored during install/launch and were reported on the next update check. Crashes that don't trigger an update request (e.g. process kill before recovery) won't appear.
提供在Expo Router中使用EAS Hosting创建API路由的指南。涵盖适用场景(如处理密钥、数据库操作)、文件结构、HTTP方法实现、动态路由及请求处理,旨在帮助开发者安全高效地构建服务端逻辑。
需要创建Expo API路由 询问Expo Router后端实现 涉及服务端密钥或数据库操作 配置EAS Hosting API
skills/expo_skills/expo-api-routes/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill expo-api-routes -g -y
SKILL.md
Frontmatter
{
    "name": "expo-api-routes",
    "license": "MIT",
    "version": "1.0.0",
    "description": "Guidelines for creating API routes in Expo Router with EAS Hosting"
}

When to Use API Routes

Use API routes when you need:

  • Server-side secrets — API keys, database credentials, or tokens that must never reach the client
  • Database operations — Direct database queries that shouldn't be exposed
  • Third-party API proxies — Hide API keys when calling external services (OpenAI, Stripe, etc.)
  • Server-side validation — Validate data before database writes
  • Webhook endpoints — Receive callbacks from services like Stripe or GitHub
  • Rate limiting — Control access at the server level
  • Heavy computation — Offload processing that would be slow on mobile

When NOT to Use API Routes

Avoid API routes when:

  • Data is already public — Use direct fetch to public APIs instead
  • No secrets required — Static data or client-safe operations
  • Real-time updates needed — Use WebSockets or services like Supabase Realtime
  • Simple CRUD — Consider Firebase, Supabase, or Convex for managed backends
  • File uploads — Use direct-to-storage uploads (S3 presigned URLs, Cloudflare R2)
  • Authentication only — Use Clerk, Auth0, or Firebase Auth instead

File Structure

API routes live in the app directory with +api.ts suffix:

app/
  api/
    hello+api.ts          → GET /api/hello
    users+api.ts          → /api/users
    users/[id]+api.ts     → /api/users/:id
  (tabs)/
    index.tsx

Basic API Route

// app/api/hello+api.ts
export function GET(request: Request) {
  return Response.json({ message: "Hello from Expo!" });
}

HTTP Methods

Export named functions for each HTTP method:

// app/api/items+api.ts
export function GET(request: Request) {
  return Response.json({ items: [] });
}

export async function POST(request: Request) {
  const body = await request.json();
  return Response.json({ created: body }, { status: 201 });
}

export async function PUT(request: Request) {
  const body = await request.json();
  return Response.json({ updated: body });
}

export async function DELETE(request: Request) {
  return new Response(null, { status: 204 });
}

Dynamic Routes

// app/api/users/[id]+api.ts
export function GET(request: Request, { id }: { id: string }) {
  return Response.json({ userId: id });
}

Request Handling

Query Parameters

export function GET(request: Request) {
  const url = new URL(request.url);
  const page = url.searchParams.get("page") ?? "1";
  const limit = url.searchParams.get("limit") ?? "10";

  return Response.json({ page, limit });
}

Headers

export function GET(request: Request) {
  const auth = request.headers.get("Authorization");

  if (!auth) {
    return Response.json({ error: "Unauthorized" }, { status: 401 });
  }

  return Response.json({ authenticated: true });
}

JSON Body

export async function POST(request: Request) {
  const { email, password } = await request.json();

  if (!email || !password) {
    return Response.json({ error: "Missing fields" }, { status: 400 });
  }

  return Response.json({ success: true });
}

Environment Variables

Use process.env for server-side secrets:

// app/api/ai+api.ts
export async function POST(request: Request) {
  const { prompt } = await request.json();

  const response = await fetch("https://api.openai.com/v1/chat/completions", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
    },
    body: JSON.stringify({
      model: "gpt-4",
      messages: [{ role: "user", content: prompt }],
    }),
  });

  const data = await response.json();
  return Response.json(data);
}

Set environment variables:

  • Local: Create .env file (never commit)
  • EAS Hosting: Use eas env:create or Expo dashboard

CORS Headers

Add CORS for web clients:

const corsHeaders = {
  "Access-Control-Allow-Origin": "*",
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
  "Access-Control-Allow-Headers": "Content-Type, Authorization",
};

export function OPTIONS() {
  return new Response(null, { headers: corsHeaders });
}

export function GET() {
  return Response.json({ data: "value" }, { headers: corsHeaders });
}

Error Handling

export async function POST(request: Request) {
  try {
    const body = await request.json();
    // Process...
    return Response.json({ success: true });
  } catch (error) {
    console.error("API error:", error);
    return Response.json({ error: "Internal server error" }, { status: 500 });
  }
}

Testing Locally

Start the development server with API routes:

npx expo serve

This starts a local server at http://localhost:8081 with full API route support.

Test with curl:

curl http://localhost:8081/api/hello
curl -X POST http://localhost:8081/api/users -H "Content-Type: application/json" -d '{"name":"Test"}'

Deployment to EAS Hosting

Prerequisites

npm install -g eas-cli
eas login

Deploy

eas deploy

This builds and deploys your API routes to EAS Hosting (Cloudflare Workers).

Environment Variables for Production

# Create a secret
eas env:create --name OPENAI_API_KEY --value sk-xxx --environment production

# Or use the Expo dashboard

Custom Domain

Configure in eas.json or Expo dashboard.

EAS Hosting Runtime (Cloudflare Workers)

API routes run on Cloudflare Workers. Key limitations:

Missing/Limited APIs

  • No Node.js filesystemfs module unavailable
  • No native Node modules — Use Web APIs or polyfills
  • Limited execution time — 30 second timeout for CPU-intensive tasks
  • No persistent connections — WebSockets require Durable Objects
  • fetch is available — Use standard fetch for HTTP requests

Use Web APIs Instead

// Use Web Crypto instead of Node crypto
const hash = await crypto.subtle.digest(
  "SHA-256",
  new TextEncoder().encode("data")
);

// Use fetch instead of node-fetch
const response = await fetch("https://api.example.com");

// Use Response/Request (already available)
return new Response(JSON.stringify(data), {
  headers: { "Content-Type": "application/json" },
});

Database Options

Since filesystem is unavailable, use cloud databases:

  • Cloudflare D1 — SQLite at the edge
  • Turso — Distributed SQLite
  • PlanetScale — Serverless MySQL
  • Supabase — Postgres with REST API
  • Neon — Serverless Postgres

Example with Turso:

// app/api/users+api.ts
import { createClient } from "@libsql/client/web";

const db = createClient({
  url: process.env.TURSO_URL!,
  authToken: process.env.TURSO_AUTH_TOKEN!,
});

export async function GET() {
  const result = await db.execute("SELECT * FROM users");
  return Response.json(result.rows);
}

Calling API Routes from Client

// From React Native components
const response = await fetch("/api/hello");
const data = await response.json();

// With body
const response = await fetch("/api/users", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ name: "John" }),
});

Common Patterns

Authentication Middleware

// utils/auth.ts
export async function requireAuth(request: Request) {
  const token = request.headers.get("Authorization")?.replace("Bearer ", "");

  if (!token) {
    throw new Response(JSON.stringify({ error: "Unauthorized" }), {
      status: 401,
      headers: { "Content-Type": "application/json" },
    });
  }

  // Verify token...
  return { userId: "123" };
}

// app/api/protected+api.ts
import { requireAuth } from "../../utils/auth";

export async function GET(request: Request) {
  const { userId } = await requireAuth(request);
  return Response.json({ userId });
}

Proxy External API

// app/api/weather+api.ts
export async function GET(request: Request) {
  const url = new URL(request.url);
  const city = url.searchParams.get("city");

  const response = await fetch(
    `https://api.weather.com/v1/current?city=${city}&key=${process.env.WEATHER_API_KEY}`
  );

  return Response.json(await response.json());
}

Rules

  • NEVER expose API keys or secrets in client code
  • ALWAYS validate and sanitize user input
  • Use proper HTTP status codes (200, 201, 400, 401, 404, 500)
  • Handle errors gracefully with try/catch
  • Keep API routes focused — one responsibility per endpoint
  • Use TypeScript for type safety
  • Log errors server-side for debugging
指导在现有原生 iOS/Android 项目中渐进式集成 Expo 和 React Native。支持隔离(AAR/XCFramework)与集成(Gradle/CocoaPods)两种方案,涵盖环境配置、架构选择及故障排查。
用户提到 brownfield 在原生应用中嵌入 React Native 使用 AAR 或 XCFramework 向现有 Kotlin/Swift 项目添加 Expo
skills/expo_skills/expo-brownfield/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill expo-brownfield -g -y
SKILL.md
Frontmatter
{
    "name": "expo-brownfield",
    "description": "Integrate Expo and React Native into an existing native iOS or Android app. Use when the user mentions brownfield, embedding React Native in a native app, AAR\/XCFramework, or adding Expo to an existing Kotlin\/Swift project. Covers both the isolated approach and the integrated approach."
}

Expo Brownfield

A brownfield app is an existing native iOS or Android app that adopts React Native incrementally, as opposed to a greenfield app that is React Native from day one.

Expo supports two distinct ways to add React Native to a brownfield project:

Approach What ships to the native app When to choose
Isolated Prebuilt AAR / XCFramework Native team doesn't need Node or RN tooling; RN code can live in a separate repo
Integrated React Native sources added to the existing Gradle / CocoaPods build One team owns everything; comfortable with RN tooling; wants a single build

For the full decision matrix, see ./references/comparison.md.

Pick an approach

Use these quick rules — fall through to comparison.md for anything ambiguous.

  • Choose isolated if the iOS/Android team must consume RN as a regular library dependency (AAR or XCFramework), without installing Node, Yarn, or the React Native build toolchain.
  • Choose isolated if RN code and native code live in separate repositories or release on independent cadences.
  • Choose integrated if a single team owns both the native and RN code and is willing to add React Native + Expo to the native project's Gradle and CocoaPods setup.
  • Choose integrated if you want hot reload and JS source maps to work seamlessly inside the existing native build process.

References

  • ./references/brownfield-isolated.md -- Build RN as AAR/XCFramework and consume from the native app (BrownfieldActivity, ReactNativeViewController, ReactNativeView)
  • ./references/brownfield-integrated.md -- Add RN and Expo directly to existing Gradle and CocoaPods builds (ReactActivity, RCTRootView, Podfile)
  • ./references/comparison.md -- Decision criteria, trade-offs, and scenario mapping for choosing an approach
  • ./references/troubleshooting.md -- Metro connection, build, signing, and module-resolution issues common to both approaches

More information available at https://docs.expo.dev/brownfield/overview/

Shared prerequisites

Both approaches require, in the environment that builds the React Native side:

  • Node.js (LTS) — runs the Expo CLI and JavaScript code.
  • Yarn — manages JavaScript dependencies.

The integrated approach additionally requires CocoaPods on iOS (sudo gem install cocoapods). The isolated approach does not require CocoaPods or any RN tooling in the consuming native app.

Versioning note

Expo SDK 55 is the minimum supported version for brownfield integration. Earlier SDKs lack expo-brownfield, the required ExpoReactHostFactory / ExpoReactNativeFactory entry points, and the current autolinking surface. When creating the Expo project, always pin the SDK explicitly:

npx create-expo-app@latest my-project --template default@sdk-55

Pin the same Expo SDK across both the RN project and any embedded dependencies.

协助开发者和编辑 Expo EAS CI/CD 工作流 YAML 文件。通过获取官方 Schema 和文档,生成、验证工作流配置,支持触发器、作业定义及表达式语法,确保构建流水线正确无误。
用户询问 Expo 或 EAS 上下文中的 CI/CD 或工作流问题 用户提及 .eas/workflows/ 目录 用户希望帮助处理 EAS 构建管道或部署自动化
skills/expo_skills/expo-cicd-workflows/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill expo-cicd-workflows -g -y
SKILL.md
Frontmatter
{
    "name": "expo-cicd-workflows",
    "license": "MIT License",
    "version": "1.0.0",
    "description": "Helps understand and write EAS workflow YAML files for Expo projects. Use this skill when the user asks about CI\/CD or workflows in an Expo or EAS context, mentions .eas\/workflows\/, or wants help with EAS build pipelines or deployment automation.",
    "allowed-tools": "Read,Write,Bash(node:*)"
}

EAS Workflows Skill

Help developers write and edit EAS CI/CD workflow YAML files.

Reference Documentation

Fetch these resources before generating or validating workflow files. Use the fetch script (implemented using Node.js) in this skill's scripts/ directory; it caches responses using ETags for efficiency:

# Fetch resources
node {baseDir}/scripts/fetch.js <url>
  1. JSON Schemahttps://api.expo.dev/v2/workflows/schema

    • It is NECESSARY to fetch this schema
    • Source of truth for validation
    • All job types and their required/optional parameters
    • Trigger types and configurations
    • Runner types, VM images, and all enums
  2. Syntax Documentationhttps://raw.githubusercontent.com/expo/expo/refs/heads/main/docs/pages/eas/workflows/syntax.mdx

    • Overview of workflow YAML syntax
    • Examples and English explanations
    • Expression syntax and contexts
  3. Pre-packaged Jobshttps://raw.githubusercontent.com/expo/expo/refs/heads/main/docs/pages/eas/workflows/pre-packaged-jobs.mdx

    • Documentation for supported pre-packaged job types
    • Job-specific parameters and outputs

Do not rely on memorized values; these resources evolve as new features are added.

Workflow File Location

Workflows live in .eas/workflows/*.yml (or .yaml).

Top-Level Structure

A workflow file has these top-level keys:

  • name — Display name for the workflow
  • on — Triggers that start the workflow (at least one required)
  • jobs — Job definitions (required)
  • defaults — Shared defaults for all jobs
  • concurrency — Control parallel workflow runs

Consult the schema for the full specification of each section.

Expressions

Use ${{ }} syntax for dynamic values. The schema defines available contexts:

  • github.* — GitHub repository and event information
  • inputs.* — Values from workflow_dispatch inputs
  • needs.* — Outputs and status from dependent jobs
  • jobs.* — Job outputs (alternative syntax)
  • steps.* — Step outputs within custom jobs
  • workflow.* — Workflow metadata

Generating Workflows

When generating or editing workflows:

  1. Fetch the schema to get current job types, parameters, and allowed values
  2. Validate that required fields are present for each job type
  3. Verify job references in needs and after exist in the workflow
  4. Check that expressions reference valid contexts and outputs
  5. Ensure if conditions respect the schema's length constraints

Validation

After generating or editing a workflow file, validate it against the schema:

# Install dependencies if missing
[ -d "{baseDir}/scripts/node_modules" ] || npm install --prefix {baseDir}/scripts

node {baseDir}/scripts/validate.js <workflow.yml> [workflow2.yml ...]

The validator fetches the latest schema and checks the YAML structure. Fix any reported errors before considering the workflow complete.

Answering Questions

When users ask about available options (job types, triggers, runner types, etc.), fetch the schema and derive the answer from it rather than relying on potentially outdated information.

指导使用 EAS CLI 和 Workflows 将 Expo 应用部署至 iOS、Android 及 Web 平台,涵盖构建、提交商店、TestFlight 测试及 CI/CD 自动化配置。
需要将 Expo 应用发布到 App Store 或 Play Store 请求配置 EAS 构建文件或设置 CI/CD 流程 询问如何部署 Web 应用或使用 TestFlight
skills/expo_skills/expo-deployment/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill expo-deployment -g -y
SKILL.md
Frontmatter
{
    "name": "expo-deployment",
    "license": "MIT",
    "version": "1.0.0",
    "description": "Deploying Expo apps to iOS App Store, Android Play Store, web hosting, and API routes"
}

Deployment

This skill covers deploying Expo applications across all platforms using EAS (Expo Application Services).

References

Consult these resources as needed:

  • ./references/workflows.md -- CI/CD workflows for automated deployments and PR previews
  • ./references/testflight.md -- Submitting iOS builds to TestFlight for beta testing
  • ./references/app-store-metadata.md -- Managing App Store metadata and ASO optimization
  • ./references/play-store.md -- Submitting Android builds to Google Play Store
  • ./references/ios-app-store.md -- iOS App Store submission and review process

Quick Start

Install EAS CLI

npm install -g eas-cli
eas login

Initialize EAS

npx eas-cli@latest init

This creates eas.json with build profiles.

Build Commands

Production Builds

# iOS App Store build
npx eas-cli@latest build -p ios --profile production

# Android Play Store build
npx eas-cli@latest build -p android --profile production

# Both platforms
npx eas-cli@latest build --profile production

Submit to Stores

# iOS: Build and submit to App Store Connect
npx eas-cli@latest build -p ios --profile production --submit

# Android: Build and submit to Play Store
npx eas-cli@latest build -p android --profile production --submit

# Shortcut for iOS TestFlight
npx testflight

Web Deployment

Deploy web apps using EAS Hosting:

# Deploy to production
npx expo export -p web
npx eas-cli@latest deploy --prod

# Deploy PR preview
npx eas-cli@latest deploy

EAS Configuration

Standard eas.json for production deployments:

{
  "cli": {
    "version": ">= 16.0.1",
    "appVersionSource": "remote"
  },
  "build": {
    "production": {
      "autoIncrement": true,
      "ios": {
        "resourceClass": "m-medium"
      }
    },
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    }
  },
  "submit": {
    "production": {
      "ios": {
        "appleId": "your@email.com",
        "ascAppId": "1234567890"
      },
      "android": {
        "serviceAccountKeyPath": "./google-service-account.json",
        "track": "internal"
      }
    }
  }
}

Platform-Specific Guides

iOS

  • Use npx testflight for quick TestFlight submissions
  • Configure Apple credentials via eas credentials
  • See ./reference/testflight.md for credential setup
  • See ./reference/ios-app-store.md for App Store submission

Android

  • Set up Google Play Console service account
  • Configure tracks: internal → closed → open → production
  • See ./reference/play-store.md for detailed setup

Web

  • EAS Hosting provides preview URLs for PRs
  • Production deploys to your custom domain
  • See ./reference/workflows.md for CI/CD automation

Automated Deployments

Use EAS Workflows for CI/CD:

# .eas/workflows/release.yml
name: Release

on:
  push:
    branches: [main]

jobs:
  build-ios:
    type: build
    params:
      platform: ios
      profile: production

  submit-ios:
    type: submit
    needs: [build-ios]
    params:
      platform: ios
      profile: production

See ./reference/workflows.md for more workflow examples.

Version Management

EAS manages version numbers automatically with appVersionSource: "remote":

# Check current versions
eas build:version:get

# Manually set version
eas build:version:set -p ios --build-number 42

Monitoring

# List recent builds
eas build:list

# Check build status
eas build:view

# View submission status
eas submit:list
指导如何构建和分发Expo开发客户端,用于在真机上测试自定义原生代码。涵盖EAS配置、云端构建提交TestFlight及本地构建安装流程,强调仅在需要自定义原生模块时使用。
用户询问如何测试自定义原生模块或本地Expo模块 用户请求构建Expo开发客户端或部署到TestFlight 用户遇到需要在非Expo Go环境下运行应用的问题
skills/expo_skills/expo-dev-client/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill expo-dev-client -g -y
SKILL.md
Frontmatter
{
    "name": "expo-dev-client",
    "license": "MIT",
    "version": "1.0.0",
    "description": "Build and distribute Expo development clients locally or via TestFlight"
}

Use EAS Build to create development clients for testing native code changes on physical devices. Use this for creating custom Expo Go clients for testing branches of your app.

Important: When Development Clients Are Needed

Only create development clients when your app requires custom native code. Most apps work fine in Expo Go.

You need a dev client ONLY when using:

  • Local Expo modules (custom native code)
  • Apple targets (widgets, app clips, extensions)
  • Third-party native modules not in Expo Go

Try Expo Go first with npx expo start. If everything works, you don't need a dev client.

EAS Configuration

Ensure eas.json has a development profile:

{
  "cli": {
    "version": ">= 16.0.1",
    "appVersionSource": "remote"
  },
  "build": {
    "production": {
      "autoIncrement": true
    },
    "development": {
      "autoIncrement": true,
      "developmentClient": true
    }
  },
  "submit": {
    "production": {},
    "development": {}
  }
}

Key settings:

  • developmentClient: true - Bundles expo-dev-client for development builds
  • autoIncrement: true - Automatically increments build numbers
  • appVersionSource: "remote" - Uses EAS as the source of truth for version numbers

Building for TestFlight

Build iOS dev client and submit to TestFlight in one command:

eas build -p ios --profile development --submit

This will:

  1. Build the development client in the cloud
  2. Automatically submit to App Store Connect
  3. Send you an email when the build is ready in TestFlight

After receiving the TestFlight email:

  1. Download the build from TestFlight on your device
  2. Launch the app to see the expo-dev-client UI
  3. Connect to your local Metro bundler or scan a QR code

Building Locally

Build a development client on your machine:

# iOS (requires Xcode)
eas build -p ios --profile development --local

# Android
eas build -p android --profile development --local

Local builds output:

  • iOS: .ipa file
  • Android: .apk or .aab file

Installing Local Builds

Install iOS build on simulator:

# Find the .app in the .tar.gz output
tar -xzf build-*.tar.gz
xcrun simctl install booted ./path/to/App.app

Install iOS build on device (requires signing):

# Use Xcode Devices window or ideviceinstaller
ideviceinstaller -i build.ipa

Install Android build:

adb install build.apk

Building for Specific Platform

# iOS only
eas build -p ios --profile development

# Android only
eas build -p android --profile development

# Both platforms
eas build --profile development

Checking Build Status

# List recent builds
eas build:list

# View build details
eas build:view

Using the Dev Client

Once installed, the dev client provides:

  • Development server connection - Enter your Metro bundler URL or scan QR
  • Build information - View native build details
  • Launcher UI - Switch between development servers

Connect to local development:

# Start Metro bundler
npx expo start --dev-client

# Scan QR code with dev client or enter URL manually

Troubleshooting

Build fails with signing errors:

eas credentials

Clear build cache:

eas build -p ios --profile development --clear-cache

Check EAS CLI version:

eas --version
eas update
指导使用 Expo Modules API 创建和编写原生模块及视图的指南,涵盖 Swift、Kotlin 和 TypeScript。用于构建或修改 Expo 原生功能、包装平台 SDK、开发配置插件及处理生命周期和自动链接。
创建新的 Expo 原生模块或视图 为 Expo 应用添加相机、传感器等原生功能 包装平台 SDK 供 React Native 使用 构建修改原生项目文件的配置插件 为现有 Expo 模块添加 Android、Apple 或 Web 支持
skills/expo_skills/expo-module/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill expo-module -g -y
SKILL.md
Frontmatter
{
    "name": "expo-module",
    "license": "MIT",
    "version": "1.0.0",
    "description": "Guide for creating and writing Expo native modules and views using the Expo Modules API (Swift, Kotlin, TypeScript). Covers module definition DSL, native views, shared objects, config plugins, lifecycle hooks, autolinking, and type system. Use when building or modifying native modules for Expo."
}

Writing Expo Modules

Complete reference for building native modules and views using the Expo Modules API. Covers Swift (iOS), Kotlin (Android), and TypeScript.

When to Use

  • Creating a new Expo native module or native view
  • Adding native functionality (camera, sensors, system APIs) to an Expo app
  • Wrapping platform SDKs for React Native consumption
  • Building config plugins that modify native project files
  • Adding Android, Apple, or web support to an existing Expo module
  • Editing expo-module.config.json, config plugins, or lifecycle hooks

References

Consult these resources as needed:

references/
  create-expo-module.md      Scaffolding and add-platform-support workflow, defaults, and quirks
  native-module.md           Module definition DSL: Name, Function, AsyncFunction, Property, Constant, Events, type system, shared objects
  native-view.md             Native view components: View, Prop, EventDispatcher, view lifecycle, ref-based functions
  lifecycle.md               Lifecycle hooks: module, iOS app/AppDelegate, Android activity/application listeners
  config-plugin.md           Config plugins: modifying Info.plist, AndroidManifest.xml, reading values in native code
  module-config.md           expo-module.config.json fields, file placement, and autolinking behavior

Quick Start

Prefer create-expo-module over manually creating native module files and directories. In practice, the best path is usually to create the scaffold first and then build on top of it. The scaffold sets up the expected layout, expo-module.config.json, podspec or Gradle files, TypeScript bindings, and the standalone example app flow.

If an existing Expo module only needs another platform, use create-expo-module add-platform-support instead of manually copying native directories.

See references/create-expo-module.md before scaffolding or extending a module. It covers:

  • local vs standalone modules
  • --platform, --features, --barrel, --package-manager, and non-interactive mode
  • expo.autolinking.nativeModulesDir
  • add-platform-support behavior and quirks

Recommended Workflow

  1. Choose the scaffold type first:
    • Local module for one app
    • Standalone module for reuse, monorepos, or publishing
  2. Determine native expo-module features that you will need.
    • Based on the user's instructions determine which feature scaffolding will be useful.
    • Available features: Constant, Function, AsyncFunction, Event, View, ViewEvent, SharedObject
  3. Scaffold deliberately:
    • pass an explicit slug or path
    • choose --platform intentionally instead of relying on defaults
    • use --features to choose code samples which you will modify in the next step to match the real implementation.
  4. Replace generated example code with the real implementation.
  5. If you add a new platform later, prefer add-platform-support over manual file copying.

Practical Scaffolding Rules

  • Feature examples are opt-in. A newly scaffolded module may be minimal if no features were selected.
  • ViewEvent implies View.
  • Local modules do not generate an index.ts barrel by default. Use --barrel only if you want one.
  • In non-interactive local scaffolding, pass the positional slug or path explicitly. --name changes the native class name, not the folder name.
  • Local modules live in expo.autolinking.nativeModulesDir when configured, otherwise in modules/.
  • Standalone modules have their own package metadata, scripts, and usually an example app. Local modules use the host app's tooling instead.

Core File Shapes

The Swift and Kotlin DSL share the same structure. Swift is usually the clearest primary example; consult the references for feature-specific details.

Module Structure Reference

The Swift and Kotlin DSL share the same structure. Both platforms are shown here for reference — in other reference files, Swift is shown as the primary language unless the Kotlin pattern meaningfully differs.

Swift (iOS):

import ExpoModulesCore

public class MyModule: Module {
  public func definition() -> ModuleDefinition {
    Name("MyModule")

    Function("hello") { (name: String) -> String in
      return "Hello \(name)!"
    }
  }
}

Kotlin (Android):

package expo.modules.mymodule

import expo.modules.kotlin.modules.Module
import expo.modules.kotlin.modules.ModuleDefinition

class MyModule : Module() {
  override fun definition() = ModuleDefinition {
    Name("MyModule")

    Function("hello") { name: String ->
      "Hello $name!"
    }
  }
}

TypeScript:

import { requireNativeModule } from "expo";

const MyModule = requireNativeModule("MyModule");

export function hello(name: string): string {
  return MyModule.hello(name);
}

expo-module.config.json

{
  "platforms": ["android", "apple"],
  "apple": {
    "modules": ["MyModule"]
  },
  "android": {
    "modules": ["expo.modules.mymodule.MyModule"]
  }
}

Note: iOS uses just the class name; Android uses the fully-qualified class name (package + class). See references/module-config.md for all fields.

指导在Expo项目中配置Tailwind CSS v4、react-native-css及NativeWind v5,实现跨平台通用样式。涵盖依赖安装、Metro与PostCSS配置、全局CSS设置,并强调无需Babel配置及组件封装方法。
Expo项目需要配置Tailwind CSS 集成NativeWind v5和react-native-css 解决Expo中CSS样式兼容性问题
skills/expo_skills/expo-tailwind-setup/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill expo-tailwind-setup -g -y
SKILL.md
Frontmatter
{
    "name": "expo-tailwind-setup",
    "license": "MIT",
    "version": "1.0.0",
    "description": "Set up Tailwind CSS v4 in Expo with react-native-css and NativeWind v5 for universal styling"
}

Tailwind CSS Setup for Expo with react-native-css

This guide covers setting up Tailwind CSS v4 in Expo using react-native-css and NativeWind v5 for universal styling across iOS, Android, and Web.

Overview

This setup uses:

  • Tailwind CSS v4 - Modern CSS-first configuration
  • react-native-css - CSS runtime for React Native
  • NativeWind v5 - Metro transformer for Tailwind in React Native
  • @tailwindcss/postcss - PostCSS plugin for Tailwind v4

Installation

# Install dependencies
npx expo install tailwindcss@^4 nativewind@5.0.0-preview.2 react-native-css@0.0.0-nightly.5ce6396 @tailwindcss/postcss tailwind-merge clsx

Add resolutions for lightningcss compatibility:

// package.json
{
  "resolutions": {
    "lightningcss": "1.30.1"
  }
}
  • autoprefixer is not needed in Expo because of lightningcss
  • postcss is included in expo by default

Configuration Files

Metro Config

Create or update metro.config.js:

// metro.config.js
const { getDefaultConfig } = require("expo/metro-config");
const { withNativewind } = require("nativewind/metro");

/** @type {import('expo/metro-config').MetroConfig} */
const config = getDefaultConfig(__dirname);

module.exports = withNativewind(config, {
  // inline variables break PlatformColor in CSS variables
  inlineVariables: false,
  // We add className support manually
  globalClassNamePolyfill: false,
});

PostCSS Config

Create postcss.config.mjs:

// postcss.config.mjs
export default {
  plugins: {
    "@tailwindcss/postcss": {},
  },
};

Global CSS

Create src/global.css:

@import "tailwindcss/theme.css" layer(theme);
@import "tailwindcss/preflight.css" layer(base);
@import "tailwindcss/utilities.css";

/* Platform-specific font families */
@media android {
  :root {
    --font-mono: monospace;
    --font-rounded: normal;
    --font-serif: serif;
    --font-sans: normal;
  }
}

@media ios {
  :root {
    --font-mono: ui-monospace;
    --font-serif: ui-serif;
    --font-sans: system-ui;
    --font-rounded: ui-rounded;
  }
}

IMPORTANT: No Babel Config Needed

With Tailwind v4 and NativeWind v5, you do NOT need a babel.config.js for Tailwind. Remove any NativeWind babel presets if present:

// DELETE babel.config.js if it only contains NativeWind config
// The following is NO LONGER needed:
// module.exports = function (api) {
//   api.cache(true);
//   return {
//     presets: [
//       ["babel-preset-expo", { jsxImportSource: "nativewind" }],
//       "nativewind/babel",
//     ],
//   };
// };

CSS Component Wrappers

Since react-native-css requires explicit CSS element wrapping, create reusable components:

Main Components (src/tw/index.tsx)

import {
  useCssElement,
  useNativeVariable as useFunctionalVariable,
} from "react-native-css";

import { Link as RouterLink } from "expo-router";
import Animated from "react-native-reanimated";
import React from "react";
import {
  View as RNView,
  Text as RNText,
  Pressable as RNPressable,
  ScrollView as RNScrollView,
  TouchableHighlight as RNTouchableHighlight,
  TextInput as RNTextInput,
  StyleSheet,
} from "react-native";

// CSS-enabled Link
export const Link = (
  props: React.ComponentProps<typeof RouterLink> & { className?: string }
) => {
  return useCssElement(RouterLink, props, { className: "style" });
};

Link.Trigger = RouterLink.Trigger;
Link.Menu = RouterLink.Menu;
Link.MenuAction = RouterLink.MenuAction;
Link.Preview = RouterLink.Preview;

// CSS Variable hook
export const useCSSVariable =
  process.env.EXPO_OS !== "web"
    ? useFunctionalVariable
    : (variable: string) => `var(${variable})`;

// View
export type ViewProps = React.ComponentProps<typeof RNView> & {
  className?: string;
};

export const View = (props: ViewProps) => {
  return useCssElement(RNView, props, { className: "style" });
};
View.displayName = "CSS(View)";

// Text
export const Text = (
  props: React.ComponentProps<typeof RNText> & { className?: string }
) => {
  return useCssElement(RNText, props, { className: "style" });
};
Text.displayName = "CSS(Text)";

// ScrollView
export const ScrollView = (
  props: React.ComponentProps<typeof RNScrollView> & {
    className?: string;
    contentContainerClassName?: string;
  }
) => {
  return useCssElement(RNScrollView, props, {
    className: "style",
    contentContainerClassName: "contentContainerStyle",
  });
};
ScrollView.displayName = "CSS(ScrollView)";

// Pressable
export const Pressable = (
  props: React.ComponentProps<typeof RNPressable> & { className?: string }
) => {
  return useCssElement(RNPressable, props, { className: "style" });
};
Pressable.displayName = "CSS(Pressable)";

// TextInput
export const TextInput = (
  props: React.ComponentProps<typeof RNTextInput> & { className?: string }
) => {
  return useCssElement(RNTextInput, props, { className: "style" });
};
TextInput.displayName = "CSS(TextInput)";

// AnimatedScrollView
export const AnimatedScrollView = (
  props: React.ComponentProps<typeof Animated.ScrollView> & {
    className?: string;
    contentClassName?: string;
    contentContainerClassName?: string;
  }
) => {
  return useCssElement(Animated.ScrollView, props, {
    className: "style",
    contentClassName: "contentContainerStyle",
    contentContainerClassName: "contentContainerStyle",
  });
};

// TouchableHighlight with underlayColor extraction
function XXTouchableHighlight(
  props: React.ComponentProps<typeof RNTouchableHighlight>
) {
  const { underlayColor, ...style } = StyleSheet.flatten(props.style) || {};
  return (
    <RNTouchableHighlight
      underlayColor={underlayColor}
      {...props}
      style={style}
    />
  );
}

export const TouchableHighlight = (
  props: React.ComponentProps<typeof RNTouchableHighlight>
) => {
  return useCssElement(XXTouchableHighlight, props, { className: "style" });
};
TouchableHighlight.displayName = "CSS(TouchableHighlight)";

Image Component (src/tw/image.tsx)

import { useCssElement } from "react-native-css";
import React from "react";
import { StyleSheet } from "react-native";
import Animated from "react-native-reanimated";
import { Image as RNImage } from "expo-image";

const AnimatedExpoImage = Animated.createAnimatedComponent(RNImage);

export type ImageProps = React.ComponentProps<typeof Image>;

function CSSImage(props: React.ComponentProps<typeof AnimatedExpoImage>) {
  // @ts-expect-error: Remap objectFit style to contentFit property
  const { objectFit, objectPosition, ...style } =
    StyleSheet.flatten(props.style) || {};

  return (
    <AnimatedExpoImage
      contentFit={objectFit}
      contentPosition={objectPosition}
      {...props}
      source={
        typeof props.source === "string" ? { uri: props.source } : props.source
      }
      // @ts-expect-error: Style is remapped above
      style={style}
    />
  );
}

export const Image = (
  props: React.ComponentProps<typeof CSSImage> & { className?: string }
) => {
  return useCssElement(CSSImage, props, { className: "style" });
};

Image.displayName = "CSS(Image)";

Animated Components (src/tw/animated.tsx)

import * as TW from "./index";
import RNAnimated from "react-native-reanimated";

export const Animated = {
  ...RNAnimated,
  View: RNAnimated.createAnimatedComponent(TW.View),
};

Usage

Import CSS-wrapped components from your tw directory:

import { View, Text, ScrollView, Image } from "@/tw";

export default function MyScreen() {
  return (
    <ScrollView className="flex-1 bg-white">
      <View className="p-4 gap-4">
        <Text className="text-xl font-bold text-gray-900">Hello Tailwind!</Text>
        <Image
          className="w-full h-48 rounded-lg object-cover"
          source={{ uri: "https://example.com/image.jpg" }}
        />
      </View>
    </ScrollView>
  );
}

Custom Theme Variables

Add custom theme variables in your global.css using @theme:

@layer theme {
  @theme {
    /* Custom fonts */
    --font-rounded: "SF Pro Rounded", sans-serif;

    /* Custom line heights */
    --text-xs--line-height: calc(1em / 0.75);
    --text-sm--line-height: calc(1.25em / 0.875);
    --text-base--line-height: calc(1.5em / 1);

    /* Custom leading scales */
    --leading-tight: 1.25em;
    --leading-snug: 1.375em;
    --leading-normal: 1.5em;
  }
}

Platform-Specific Styles

Use platform media queries for platform-specific styling:

@media ios {
  :root {
    --font-sans: system-ui;
    --font-rounded: ui-rounded;
  }
}

@media android {
  :root {
    --font-sans: normal;
    --font-rounded: normal;
  }
}

Apple System Colors with CSS Variables

Create a CSS file for Apple semantic colors:

/* src/css/sf.css */
@layer base {
  html {
    color-scheme: light;
  }
}

:root {
  /* Accent colors with light/dark mode */
  --sf-blue: light-dark(rgb(0 122 255), rgb(10 132 255));
  --sf-green: light-dark(rgb(52 199 89), rgb(48 209 89));
  --sf-red: light-dark(rgb(255 59 48), rgb(255 69 58));

  /* Gray scales */
  --sf-gray: light-dark(rgb(142 142 147), rgb(142 142 147));
  --sf-gray-2: light-dark(rgb(174 174 178), rgb(99 99 102));

  /* Text colors */
  --sf-text: light-dark(rgb(0 0 0), rgb(255 255 255));
  --sf-text-2: light-dark(rgb(60 60 67 / 0.6), rgb(235 235 245 / 0.6));

  /* Background colors */
  --sf-bg: light-dark(rgb(255 255 255), rgb(0 0 0));
  --sf-bg-2: light-dark(rgb(242 242 247), rgb(28 28 30));
}

/* iOS native colors via platformColor */
@media ios {
  :root {
    --sf-blue: platformColor(systemBlue);
    --sf-green: platformColor(systemGreen);
    --sf-red: platformColor(systemRed);
    --sf-gray: platformColor(systemGray);
    --sf-text: platformColor(label);
    --sf-text-2: platformColor(secondaryLabel);
    --sf-bg: platformColor(systemBackground);
    --sf-bg-2: platformColor(secondarySystemBackground);
  }
}

/* Register as Tailwind theme colors */
@layer theme {
  @theme {
    --color-sf-blue: var(--sf-blue);
    --color-sf-green: var(--sf-green);
    --color-sf-red: var(--sf-red);
    --color-sf-gray: var(--sf-gray);
    --color-sf-text: var(--sf-text);
    --color-sf-text-2: var(--sf-text-2);
    --color-sf-bg: var(--sf-bg);
    --color-sf-bg-2: var(--sf-bg-2);
  }
}

Then use in components:

<Text className="text-sf-text">Primary text</Text>
<Text className="text-sf-text-2">Secondary text</Text>
<View className="bg-sf-bg">...</View>

Using CSS Variables in JavaScript

Use the useCSSVariable hook:

import { useCSSVariable } from "@/tw";

function MyComponent() {
  const blue = useCSSVariable("--sf-blue");

  return <View style={{ borderColor: blue }} />;
}

Key Differences from NativeWind v4 / Tailwind v3

  1. No babel.config.js - Configuration is now CSS-first
  2. PostCSS plugin - Uses @tailwindcss/postcss instead of tailwindcss
  3. CSS imports - Use @import "tailwindcss/..." instead of @tailwind directives
  4. Theme config - Use @theme in CSS instead of tailwind.config.js
  5. Component wrappers - Must wrap components with useCssElement for className support
  6. Metro config - Use withNativewind with different options (inlineVariables: false)

Troubleshooting

Styles not applying

  1. Ensure you have the CSS file imported in your app entry
  2. Check that components are wrapped with useCssElement
  3. Verify Metro config has withNativewind applied

Platform colors not working

  1. Use platformColor() in @media ios blocks
  2. Fall back to light-dark() for web/Android

TypeScript errors

Add className to component props:

type Props = React.ComponentProps<typeof RNView> & { className?: string };
适用于Expo SDK 55的Jetpack Compose集成技能,提供UI组件和修饰符的使用指南。指导开发者通过导入特定包、查阅类型定义及文档来构建原生Android界面,并强调使用Host包裹Compose树及LazyColumn等关键组件的最佳实践。
需要在Expo项目中集成Jetpack Compose 询问@expo/ui/jetpack-compose的安装或配置 查找Expo支持的Compose组件API
skills/expo_skills/expo-ui-jetpack-compose/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill Expo UI Jetpack Compose -g -y
SKILL.md
Frontmatter
{
    "name": "Expo UI Jetpack Compose",
    "description": "`@expo\/ui\/jetpack-compose` package lets you use Jetpack Compose Views and modifiers in your app."
}

The instructions in this skill apply to SDK 55 only. For other SDK versions, refer to the Expo UI Jetpack Compose docs for that version for the most accurate information.

Installation

npx expo install @expo/ui

A native rebuild is required after installation (npx expo run:android).

Instructions

  • Expo UI's API mirrors Jetpack Compose's API. Use Jetpack Compose and Material Design 3 knowledge to decide which components or modifiers to use. If you need deeper Jetpack Compose or Material 3 guidance (e.g. which component to pick, layout patterns, theming), spawn a subagent to research Jetpack Compose and Material Design 3 best practices.
  • Components are imported from @expo/ui/jetpack-compose, modifiers from @expo/ui/jetpack-compose/modifiers.
  • Always read the .d.ts type files to confirm the exact API before using a component or modifier. Run node -e "console.log(path.dirname(require.resolve('@expo/ui/jetpack-compose')))" to locate the package, then read the relevant {ComponentName}/index.d.ts files. This is the most reliable source of truth.
  • When about to use a component, fetch its docs to confirm the API - https://docs.expo.dev/versions/v55.0.0/sdk/ui/jetpack-compose/{component-name}/index.md
  • When unsure about a modifier's API, refer to the docs - https://docs.expo.dev/versions/v55.0.0/sdk/ui/jetpack-compose/modifiers/index.md
  • Every Jetpack Compose tree must be wrapped in Host. Use <Host matchContents> for intrinsic sizing, or <Host style={{ flex: 1 }}> when you need explicit size (e.g. as a parent of LazyColumn). Example:
import { Host, Column, Button, Text } from "@expo/ui/jetpack-compose";
import { fillMaxWidth, paddingAll } from "@expo/ui/jetpack-compose/modifiers";

<Host matchContents>
  <Column verticalArrangement={{ spacedBy: 8 }} modifiers={[fillMaxWidth(), paddingAll(16)]}>
    <Text style={{ typography: "titleLarge" }}>Hello</Text>
    <Button onPress={() => alert("Pressed!")}>Press me</Button>
  </Column>
</Host>;

Key Components

  • LazyColumn — Use instead of react-native ScrollView/FlatList for scrollable lists. Wrap in <Host style={{ flex: 1 }}>.
  • Icon — Use <Icon source={require('./icon.xml')} size={24} /> with Android XML vector drawables. To get icons: go to Material Symbols, select an icon, choose the Android platform, and download the XML vector drawable. Save these as .xml files in your project's assets/ directory (e.g. assets/icons/wifi.xml). Metro bundles .xml assets automatically — no metro config changes needed.
适用于 Expo SDK 55,帮助开发者在应用中集成和使用 SwiftUI 视图及修饰符。提供安装、API 映射、组件导入、Host 包裹规范及 React Native 嵌入 RNHostView 的指导,并支持通过本地模块扩展缺失功能。
需要在 Expo iOS 项目中集成 SwiftUI 组件 询问 @expo/ui/swift-ui 的安装或使用方法 处理 React Native 与 SwiftUI 视图混合布局问题 查找特定 SwiftUI 修饰符或组件的 Expo UI API
skills/expo_skills/expo-ui-swift-ui/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill Expo UI SwiftUI -g -y
SKILL.md
Frontmatter
{
    "name": "Expo UI SwiftUI",
    "description": "`@expo\/ui\/swift-ui` package lets you use SwiftUI Views and modifiers in your app."
}

The instructions in this skill apply to SDK 55 only. For other SDK versions, refer to the Expo UI SwiftUI docs for that version for the most accurate information.

Installation

npx expo install @expo/ui

A native rebuild is required after installation (npx expo run:ios).

Instructions

import { Host, VStack, RNHostView } from "@expo-ui/swift-ui";
import { Pressable } from "react-native";

<Host matchContents>
  <VStack>
    <RNHostView matchContents>
      // Here, `Pressable` is an RN component so it is wrapped in `RNHostView`.
      <Pressable />
    </RNHostView>
  </VStack>
</Host>;
用于处理任何网络请求、API调用及数据获取。涵盖fetch API、React Query、SWR、错误处理、缓存、离线支持及Expo Router数据加载器,推荐避免使用axios。
实现API请求 设置数据获取逻辑 调试网络故障 配置缓存策略 处理离线场景
skills/expo_skills/native-data-fetching/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill native-data-fetching -g -y
SKILL.md
Frontmatter
{
    "name": "native-data-fetching",
    "license": "MIT",
    "version": "1.0.0",
    "description": "Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (`useLoaderData`)."
}

Expo Networking

You MUST use this skill for ANY networking work including API requests, data fetching, caching, or network debugging.

References

Consult these resources as needed:

references/
  expo-router-loaders.md   Route-level data loading with Expo Router loaders (web, SDK 55+)

When to Use

Use this skill when:

  • Implementing API requests
  • Setting up data fetching (React Query, SWR)
  • Using Expo Router data loaders (useLoaderData, web SDK 55+)
  • Debugging network failures
  • Implementing caching strategies
  • Handling offline scenarios
  • Authentication/token management
  • Configuring API URLs and environment variables

Preferences

  • Avoid axios, prefer expo/fetch

Common Issues & Solutions

1. Basic Fetch Usage

Simple GET request:

const fetchUser = async (userId: string) => {
  const response = await fetch(`https://api.example.com/users/${userId}`);

  if (!response.ok) {
    throw new Error(`HTTP error! status: ${response.status}`);
  }

  return response.json();
};

POST request with body:

const createUser = async (userData: UserData) => {
  const response = await fetch("https://api.example.com/users", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${token}`,
    },
    body: JSON.stringify(userData),
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(error.message);
  }

  return response.json();
};

2. React Query (TanStack Query)

Setup:

// app/_layout.tsx
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 1000 * 60 * 5, // 5 minutes
      retry: 2,
    },
  },
});

export default function RootLayout() {
  return (
    <QueryClientProvider client={queryClient}>
      <Stack />
    </QueryClientProvider>
  );
}

Fetching data:

import { useQuery } from "@tanstack/react-query";

function UserProfile({ userId }: { userId: string }) {
  const { data, isLoading, error, refetch } = useQuery({
    queryKey: ["user", userId],
    queryFn: () => fetchUser(userId),
  });

  if (isLoading) return <Loading />;
  if (error) return <Error message={error.message} />;

  return <Profile user={data} />;
}

Mutations:

import { useMutation, useQueryClient } from "@tanstack/react-query";

function CreateUserForm() {
  const queryClient = useQueryClient();

  const mutation = useMutation({
    mutationFn: createUser,
    onSuccess: () => {
      // Invalidate and refetch
      queryClient.invalidateQueries({ queryKey: ["users"] });
    },
  });

  const handleSubmit = (data: UserData) => {
    mutation.mutate(data);
  };

  return <Form onSubmit={handleSubmit} isLoading={mutation.isPending} />;
}

3. Error Handling

Comprehensive error handling:

class ApiError extends Error {
  constructor(message: string, public status: number, public code?: string) {
    super(message);
    this.name = "ApiError";
  }
}

const fetchWithErrorHandling = async (url: string, options?: RequestInit) => {
  try {
    const response = await fetch(url, options);

    if (!response.ok) {
      const error = await response.json().catch(() => ({}));
      throw new ApiError(
        error.message || "Request failed",
        response.status,
        error.code
      );
    }

    return response.json();
  } catch (error) {
    if (error instanceof ApiError) {
      throw error;
    }
    // Network error (no internet, timeout, etc.)
    throw new ApiError("Network error", 0, "NETWORK_ERROR");
  }
};

Retry logic:

const fetchWithRetry = async (
  url: string,
  options?: RequestInit,
  retries = 3
) => {
  for (let i = 0; i < retries; i++) {
    try {
      return await fetchWithErrorHandling(url, options);
    } catch (error) {
      if (i === retries - 1) throw error;
      // Exponential backoff
      await new Promise((r) => setTimeout(r, Math.pow(2, i) * 1000));
    }
  }
};

4. Authentication

Token management:

import * as SecureStore from "expo-secure-store";

const TOKEN_KEY = "auth_token";

export const auth = {
  getToken: () => SecureStore.getItemAsync(TOKEN_KEY),
  setToken: (token: string) => SecureStore.setItemAsync(TOKEN_KEY, token),
  removeToken: () => SecureStore.deleteItemAsync(TOKEN_KEY),
};

// Authenticated fetch wrapper
const authFetch = async (url: string, options: RequestInit = {}) => {
  const token = await auth.getToken();

  return fetch(url, {
    ...options,
    headers: {
      ...options.headers,
      Authorization: token ? `Bearer ${token}` : "",
    },
  });
};

Token refresh:

let isRefreshing = false;
let refreshPromise: Promise<string> | null = null;

const getValidToken = async (): Promise<string> => {
  const token = await auth.getToken();

  if (!token || isTokenExpired(token)) {
    if (!isRefreshing) {
      isRefreshing = true;
      refreshPromise = refreshToken().finally(() => {
        isRefreshing = false;
        refreshPromise = null;
      });
    }
    return refreshPromise!;
  }

  return token;
};

5. Offline Support

Check network status:

import NetInfo from "@react-native-community/netinfo";

// Hook for network status
function useNetworkStatus() {
  const [isOnline, setIsOnline] = useState(true);

  useEffect(() => {
    return NetInfo.addEventListener((state) => {
      setIsOnline(state.isConnected ?? true);
    });
  }, []);

  return isOnline;
}

Offline-first with React Query:

import { onlineManager } from "@tanstack/react-query";
import NetInfo from "@react-native-community/netinfo";

// Sync React Query with network status
onlineManager.setEventListener((setOnline) => {
  return NetInfo.addEventListener((state) => {
    setOnline(state.isConnected ?? true);
  });
});

// Queries will pause when offline and resume when online

6. Environment Variables

Using environment variables for API configuration:

Expo supports environment variables with the EXPO_PUBLIC_ prefix. These are inlined at build time and available in your JavaScript code.

// .env
EXPO_PUBLIC_API_URL=https://api.example.com
EXPO_PUBLIC_API_VERSION=v1

// Usage in code
const API_URL = process.env.EXPO_PUBLIC_API_URL;

const fetchUsers = async () => {
  const response = await fetch(`${API_URL}/users`);
  return response.json();
};

Environment-specific configuration:

// .env.development
EXPO_PUBLIC_API_URL=http://localhost:3000

// .env.production
EXPO_PUBLIC_API_URL=https://api.production.com

Creating an API client with environment config:

// api/client.ts
const BASE_URL = process.env.EXPO_PUBLIC_API_URL;

if (!BASE_URL) {
  throw new Error("EXPO_PUBLIC_API_URL is not defined");
}

export const apiClient = {
  get: async <T,>(path: string): Promise<T> => {
    const response = await fetch(`${BASE_URL}${path}`);
    if (!response.ok) throw new Error(`HTTP ${response.status}`);
    return response.json();
  },

  post: async <T,>(path: string, body: unknown): Promise<T> => {
    const response = await fetch(`${BASE_URL}${path}`, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(body),
    });
    if (!response.ok) throw new Error(`HTTP ${response.status}`);
    return response.json();
  },
};

Important notes:

  • Only variables prefixed with EXPO_PUBLIC_ are exposed to the client bundle
  • Never put secrets (API keys with write access, database passwords) in EXPO_PUBLIC_ variables—they're visible in the built app
  • Environment variables are inlined at build time, not runtime
  • Restart the dev server after changing .env files
  • For server-side secrets in API routes, use variables without the EXPO_PUBLIC_ prefix

TypeScript support:

// types/env.d.ts
declare global {
  namespace NodeJS {
    interface ProcessEnv {
      EXPO_PUBLIC_API_URL: string;
      EXPO_PUBLIC_API_VERSION?: string;
    }
  }
}

export {};

7. Request Cancellation

Cancel on unmount:

useEffect(() => {
  const controller = new AbortController();

  fetch(url, { signal: controller.signal })
    .then((response) => response.json())
    .then(setData)
    .catch((error) => {
      if (error.name !== "AbortError") {
        setError(error);
      }
    });

  return () => controller.abort();
}, [url]);

With React Query (automatic):

// React Query automatically cancels requests when queries are invalidated
// or components unmount

Decision Tree

User asks about networking
  |-- Route-level data loading (web, SDK 55+)?
  |   \-- Expo Router loaders — see references/expo-router-loaders.md
  |
  |-- Basic fetch?
  |   \-- Use fetch API with error handling
  |
  |-- Need caching/state management?
  |   |-- Complex app -> React Query (TanStack Query)
  |   \-- Simpler needs -> SWR or custom hooks
  |
  |-- Authentication?
  |   |-- Token storage -> expo-secure-store
  |   \-- Token refresh -> Implement refresh flow
  |
  |-- Error handling?
  |   |-- Network errors -> Check connectivity first
  |   |-- HTTP errors -> Parse response, throw typed errors
  |   \-- Retries -> Exponential backoff
  |
  |-- Offline support?
  |   |-- Check status -> NetInfo
  |   \-- Queue requests -> React Query persistence
  |
  |-- Environment/API config?
  |   |-- Client-side URLs -> EXPO_PUBLIC_ prefix in .env
  |   |-- Server secrets -> Non-prefixed env vars (API routes only)
  |   \-- Multiple environments -> .env.development, .env.production
  |
  \-- Performance?
      |-- Caching -> React Query with staleTime
      |-- Deduplication -> React Query handles this
      \-- Cancellation -> AbortController or React Query

Common Mistakes

Wrong: No error handling

const data = await fetch(url).then((r) => r.json());

Right: Check response status

const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();

Wrong: Storing tokens in AsyncStorage

await AsyncStorage.setItem("token", token); // Not secure!

Right: Use SecureStore for sensitive data

await SecureStore.setItemAsync("token", token);

Example Invocations

User: "How do I make API calls in React Native?" -> Use fetch, wrap with error handling

User: "Should I use React Query or SWR?" -> React Query for complex apps, SWR for simpler needs

User: "My app needs to work offline" -> Use NetInfo for status, React Query persistence for caching

User: "How do I handle authentication tokens?" -> Store in expo-secure-store, implement refresh flow

User: "API calls are slow" -> Check caching strategy, use React Query staleTime

User: "How do I configure different API URLs for dev and prod?" -> Use EXPOPUBLIC env vars with .env.development and .env.production files

User: "Where should I put my API key?" -> Client-safe keys: EXPOPUBLIC in .env. Secret keys: non-prefixed env vars in API routes only

User: "How do I load data for a page in Expo Router?" -> See references/expo-router-loaders.md for route-level loaders (web, SDK 55+). For native, use React Query or fetch.

提供Expo SDK升级指南,涵盖依赖修复、诊断清理、原生构建及缓存处理。包含React 19、新架构、路由迁移等关键变更检查清单与操作命令。
升级Expo SDK版本 解决Expo依赖冲突 迁移React或导航库
skills/expo_skills/upgrading-expo/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill upgrading-expo -g -y
SKILL.md
Frontmatter
{
    "name": "upgrading-expo",
    "license": "MIT",
    "version": "1.0.0",
    "description": "Guidelines for upgrading Expo SDK versions and fixing dependency issues"
}

References

  • ./references/react-19.md -- SDK +54: React 19 changes (useContext → use, Context.Provider → Context, forwardRef removal)
  • ./references/new-architecture.md -- SDK +53: New Architecture migration guide
  • ./references/react-compiler.md -- SDK +54: React Compiler setup and migration guide
  • ./references/native-tabs.md -- SDK +55: Native tabs changes (Icon/Label/Badge now accessed via NativeTabs.Trigger.*)
  • ./references/expo-av-to-audio.md -- SDK +55: Migrate audio playback and recording from expo-av to expo-audio
  • ./references/expo-av-to-video.md -- SDK +55: Migrate video playback from expo-av to expo-video
  • ./references/react-navigation-to-expo-router.md -- SDK +56: Migrate @react-navigation/* imports to expo-router entry points (codemod + manual mapping)

Beta/Preview Releases

Beta versions use .preview suffix (e.g., 55.0.0-preview.2), published under @next tag.

Check if latest is beta: https://exp.host/--/api/v2/versions (look for -preview in expoVersion)

npx expo install expo@next --fix  # install beta

Step-by-Step Upgrade Process

  1. Upgrade Expo and dependencies
npx expo install expo@latest
npx expo install --fix
  1. Run diagnostics: npx expo-doctor

  2. Clear caches and reinstall

npx expo export -p ios --clear
rm -rf node_modules .expo
watchman watch-del-all

Breaking Changes Checklist

  • Check for removed APIs in release notes
  • Update import paths for moved modules
  • Review native module changes requiring prebuild
  • Test all camera, audio, and video features
  • Verify navigation still works correctly

Prebuild for Native Changes

First check if ios/ and android/ directories exist in the project. If neither directory exists, the project uses Continuous Native Generation (CNG) and native projects are regenerated at build time — skip this section and "Clear caches for bare workflow" entirely.

If upgrading requires native changes:

npx expo prebuild --clean

This regenerates the ios and android directories. Ensure the project is not a bare workflow app before running this command.

Clear caches for bare workflow

These steps only apply when ios/ and/or android/ directories exist in the project:

  • Clear the cocoapods cache for iOS: cd ios && pod install --repo-update
  • Clear derived data for Xcode: npx expo run:ios --no-build-cache
  • Clear the Gradle cache for Android: cd android && ./gradlew clean

Housekeeping

  • Review release notes for the target SDK version at https://expo.dev/changelog
  • If using Expo SDK 54 or later, ensure react-native-worklets is installed — this is required for react-native-reanimated to work.
  • Enable React Compiler in SDK 54+ by adding "experiments": { "reactCompiler": true } to app.json — it's stable and recommended
  • Delete sdkVersion from app.json to let Expo manage it automatically
  • Remove implicit packages from package.json: @babel/core, babel-preset-expo, expo-constants.
  • If the babel.config.js only contains 'babel-preset-expo', delete the file
  • If the metro.config.js only contains expo defaults, delete the file

Deprecated Packages

Old Package Replacement
expo-av expo-audio and expo-video
expo-permissions Individual package permission APIs
@expo/vector-icons expo-symbols (for SF Symbols)
AsyncStorage expo-sqlite/localStorage/install
expo-app-loading expo-splash-screen
expo-linear-gradient experimental_backgroundImage + CSS gradients in View

When migrating deprecated packages, update all code usage before removing the old package. For expo-av, consult the migration references to convert Audio.Sound to useAudioPlayer, Audio.Recording to useAudioRecorder, and Video components to VideoView with useVideoPlayer.

expo.install.exclude

Check if package.json has excluded packages:

{
  "expo": { "install": { "exclude": ["react-native-reanimated"] } }
}

Exclusions are often workarounds that may no longer be needed after upgrading. Review each one.

Removing patches

Check if there are any outdated patches in the patches/ directory. Remove them if they are no longer needed.

Postcss

  • autoprefixer isn't needed in SDK +53. Remove it from dependencies and check postcss.config.js or postcss.config.mjs to remove it from the plugins list.
  • Use postcss.config.mjs in SDK +53.

Metro

Remove redundant metro config options:

  • resolver.unstable_enablePackageExports is enabled by default in SDK +53.
  • experimentalImportSupport is enabled by default in SDK +54.
  • EXPO_USE_FAST_RESOLVER=1 is removed in SDK +54.
  • cjs and mjs extensions are supported by default in SDK +50.
  • Expo webpack is deprecated, migrate to Expo Router and Metro web.

Hermes engine v1

Since SDK 55, users can opt-in to use Hermes engine v1 for improved runtime performance. This requires setting useHermesV1: true in the expo-build-properties config plugin, and may require a specific version of the hermes-compiler npm package. Hermes v1 will become a default in some future SDK release.

New Architecture

The new architecture is enabled by default, the app.json field "newArchEnabled": true is no longer needed as it's the default. Expo Go only supports the new architecture as of SDK +53.

用于在Expo原生应用中通过WebView运行Web代码,支持使用纯Web库、迁移现有React Web组件及处理复杂HTML/CSS布局。需添加'use dom'指令并遵循特定规则。
需要在原生平台使用仅Web库(如图表、语法高亮) 将现有React Web组件迁移至原生应用 需要复杂的HTML/CSS布局或Canvas/WebGL功能
skills/expo_skills/use-dom/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill use-dom -g -y
SKILL.md
Frontmatter
{
    "name": "use-dom",
    "license": "MIT",
    "version": "1.0.0",
    "description": "Use Expo DOM components to run web code in a webview on native and as-is on web. Migrate web code to native incrementally."
}

What are DOM Components?

DOM components allow web code to run verbatim in a webview on native platforms while rendering as-is on web. This enables using web-only libraries like recharts, react-syntax-highlighter, or any React web library in your Expo app without modification.

When to Use DOM Components

Use DOM components when you need:

  • Web-only libraries — Charts (recharts, chart.js), syntax highlighters, rich text editors, or any library that depends on DOM APIs
  • Migrating web code — Bring existing React web components to native without rewriting
  • Complex HTML/CSS layouts — When CSS features aren't available in React Native
  • iframes or embeds — Embedding external content that requires a browser context
  • Canvas or WebGL — Web graphics APIs not available natively

When NOT to Use DOM Components

Avoid DOM components when:

  • Native performance is critical — Webviews add overhead
  • Simple UI — React Native components are more efficient for basic layouts
  • Deep native integration — Use local modules instead for native APIs
  • Layout routes_layout files cannot be DOM components

Basic DOM Component

Create a new file with the 'use dom'; directive at the top:

// components/WebChart.tsx
"use dom";

export default function WebChart({
  data,
}: {
  data: number[];
  dom: import("expo/dom").DOMProps;
}) {
  return (
    <div style={{ padding: 20 }}>
      <h2>Chart Data</h2>
      <ul>
        {data.map((value, i) => (
          <li key={i}>{value}</li>
        ))}
      </ul>
    </div>
  );
}

Rules for DOM Components

  1. Must have 'use dom'; directive at the top of the file
  2. Single default export — One React component per file
  3. Own file — Cannot be defined inline or combined with native components
  4. Serializable props only — Strings, numbers, booleans, arrays, plain objects
  5. Include CSS in the component file — DOM components run in isolated context

The dom Prop

Every DOM component receives a special dom prop for webview configuration. Always type it in your props:

"use dom";

interface Props {
  content: string;
  dom: import("expo/dom").DOMProps;
}

export default function MyComponent({ content }: Props) {
  return <div>{content}</div>;
}

Common dom Prop Options

// Disable body scrolling
<DOMComponent dom={{ scrollEnabled: false }} />

// Flow under the notch (disable safe area insets)
<DOMComponent dom={{ contentInsetAdjustmentBehavior: "never" }} />

// Control size manually
<DOMComponent dom={{ style: { width: 300, height: 400 } }} />

// Combine options
<DOMComponent
  dom={{
    scrollEnabled: false,
    contentInsetAdjustmentBehavior: "never",
    style: { width: '100%', height: 500 }
  }}
/>

Exposing Native Actions to the Webview

Pass async functions as props to expose native functionality to the DOM component:

// app/index.tsx (native)
import { Alert } from "react-native";
import DOMComponent from "@/components/dom-component";

export default function Screen() {
  return (
    <DOMComponent
      showAlert={async (message: string) => {
        Alert.alert("From Web", message);
      }}
      saveData={async (data: { name: string; value: number }) => {
        // Save to native storage, database, etc.
        console.log("Saving:", data);
        return { success: true };
      }}
    />
  );
}
// components/dom-component.tsx
"use dom";

interface Props {
  showAlert: (message: string) => Promise<void>;
  saveData: (data: {
    name: string;
    value: number;
  }) => Promise<{ success: boolean }>;
  dom?: import("expo/dom").DOMProps;
}

export default function DOMComponent({ showAlert, saveData }: Props) {
  const handleClick = async () => {
    await showAlert("Hello from the webview!");
    const result = await saveData({ name: "test", value: 42 });
    console.log("Save result:", result);
  };

  return <button onClick={handleClick}>Trigger Native Action</button>;
}

Using Web Libraries

DOM components can use any web library:

// components/syntax-highlight.tsx
"use dom";

import SyntaxHighlighter from "react-syntax-highlighter";
import { docco } from "react-syntax-highlighter/dist/esm/styles/hljs";

interface Props {
  code: string;
  language: string;
  dom?: import("expo/dom").DOMProps;
}

export default function SyntaxHighlight({ code, language }: Props) {
  return (
    <SyntaxHighlighter language={language} style={docco}>
      {code}
    </SyntaxHighlighter>
  );
}
// components/chart.tsx
"use dom";

import {
  LineChart,
  Line,
  XAxis,
  YAxis,
  CartesianGrid,
  Tooltip,
} from "recharts";

interface Props {
  data: Array<{ name: string; value: number }>;
  dom: import("expo/dom").DOMProps;
}

export default function Chart({ data }: Props) {
  return (
    <LineChart width={400} height={300} data={data}>
      <CartesianGrid strokeDasharray="3 3" />
      <XAxis dataKey="name" />
      <YAxis />
      <Tooltip />
      <Line type="monotone" dataKey="value" stroke="#8884d8" />
    </LineChart>
  );
}

CSS in DOM Components

CSS imports must be in the DOM component file since they run in isolated context:

// components/styled-component.tsx
"use dom";

import "@/styles.css"; // CSS file in same directory

export default function StyledComponent({
  dom,
}: {
  dom: import("expo/dom").DOMProps;
}) {
  return (
    <div className="container">
      <h1 className="title">Styled Content</h1>
    </div>
  );
}

Or use inline styles / CSS-in-JS:

"use dom";

const styles = {
  container: {
    padding: 20,
    backgroundColor: "#f0f0f0",
  },
  title: {
    fontSize: 24,
    color: "#333",
  },
};

export default function StyledComponent({
  dom,
}: {
  dom: import("expo/dom").DOMProps;
}) {
  return (
    <div style={styles.container}>
      <h1 style={styles.title}>Styled Content</h1>
    </div>
  );
}

Expo Router in DOM Components

The expo-router <Link /> component and router API work inside DOM components:

"use dom";

import { Link, useRouter } from "expo-router";

export default function Navigation({
  dom,
}: {
  dom: import("expo/dom").DOMProps;
}) {
  const router = useRouter();

  return (
    <nav>
      <Link href="/about">About</Link>
      <button onClick={() => router.push("/settings")}>Settings</button>
    </nav>
  );
}

Router APIs That Require Props

These hooks don't work directly in DOM components because they need synchronous access to native routing state:

  • useLocalSearchParams()
  • useGlobalSearchParams()
  • usePathname()
  • useSegments()
  • useRootNavigation()
  • useRootNavigationState()

Solution: Read these values in the native parent and pass as props:

// app/[id].tsx (native)
import { useLocalSearchParams, usePathname } from "expo-router";
import DOMComponent from "@/components/dom-component";

export default function Screen() {
  const { id } = useLocalSearchParams();
  const pathname = usePathname();

  return <DOMComponent id={id as string} pathname={pathname} />;
}
// components/dom-component.tsx
"use dom";

interface Props {
  id: string;
  pathname: string;
  dom?: import("expo/dom").DOMProps;
}

export default function DOMComponent({ id, pathname }: Props) {
  return (
    <div>
      <p>Current ID: {id}</p>
      <p>Current Path: {pathname}</p>
    </div>
  );
}

Detecting DOM Environment

Check if code is running in a DOM component:

"use dom";

import { IS_DOM } from "expo/dom";

export default function Component({
  dom,
}: {
  dom?: import("expo/dom").DOMProps;
}) {
  return <div>{IS_DOM ? "Running in DOM component" : "Running natively"}</div>;
}

Assets

Prefer requiring assets instead of using the public directory:

"use dom";

// Good - bundled with the component
const logo = require("../assets/logo.png");

export default function Component({
  dom,
}: {
  dom: import("expo/dom").DOMProps;
}) {
  return <img src={logo} alt="Logo" />;
}

Usage from Native Components

Import and use DOM components like regular components:

// app/index.tsx
import { View, Text } from "react-native";
import WebChart from "@/components/web-chart";
import CodeBlock from "@/components/code-block";

export default function HomeScreen() {
  return (
    <View style={{ flex: 1 }}>
      <Text>Native content above</Text>

      <WebChart data={[10, 20, 30, 40, 50]} dom={{ style: { height: 300 } }} />

      <CodeBlock
        code="const x = 1;"
        language="javascript"
        dom={{ scrollEnabled: true }}
      />

      <Text>Native content below</Text>
    </View>
  );
}

Platform Behavior

Platform Behavior
iOS Rendered in WKWebView
Android Rendered in WebView
Web Rendered as-is (no webview wrapper)

On web, the dom prop is ignored since no webview is needed.

Tips

  • DOM components hot reload during development
  • Keep DOM components focused — don't put entire screens in webviews
  • Use native components for navigation chrome, DOM components for specialized content
  • Test on all platforms — web rendering may differ slightly from native webviews
  • Large DOM components may impact performance — profile if needed
  • The webview has its own JavaScript context — cannot directly share state with native
用于在爬取后执行动态页面交互,如点击、填表、分页和登录流程。适用于需要操作页面而非仅读取的场景,建议在简单爬取无法满足需求时升级使用此技能。
内容需通过点击或输入后才出现 需要处理表单、分页或多步骤流程 需在相同浏览器上下文中保持状态 普通爬取无法完成数据提取
skills/firecrawl_skills/firecrawl-build-interact/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill firecrawl-build-interact -g -y
SKILL.md
Frontmatter
{
    "name": "firecrawl-build-interact",
    "inputs": [
        {
            "name": "FIRECRAWL_API_KEY",
            "required": true,
            "description": "Firecrawl API key for hosted Firecrawl requests."
        },
        {
            "name": "FIRECRAWL_API_URL",
            "required": false,
            "description": "Optional base URL for self-hosted Firecrawl deployments."
        }
    ],
    "license": "ISC",
    "metadata": {
        "author": "firecrawl",
        "source": "https:\/\/github.com\/firecrawl\/skills",
        "version": "0.1.0",
        "homepage": "https:\/\/www.firecrawl.dev"
    },
    "description": "Integrate Firecrawl `\/interact` into product code for dynamic pages and browser actions after scraping. Use when a feature needs clicks, form fills, pagination, authentication-aware flows, or other multi-step interactions that plain `\/scrape` cannot complete."
}

Firecrawl Build Interact

Use this when /scrape is not enough because the feature needs to act on the page.

Use This When

  • content appears only after clicks, typing, or navigation
  • the feature needs forms, pagination, filters, or multi-step flows
  • the product must stay in the same browser context after scraping

Default Recommendations

  • Start with /scrape, then escalate to /interact.
  • Keep /interact scoped to the smallest browser workflow that unlocks the data.
  • Use persistent profiles only when the feature truly needs authenticated state across sessions.

Common Product Patterns

  • search forms and faceted filters
  • paginated result sets
  • login-gated dashboards or tools
  • flows where the page must be explored before extraction is complete

Implementation Notes

  • /interact is the right tool when the page must be manipulated, not just read.
  • Keep prompts or action code specific to the product flow.
  • If the use case is fully open-ended browser automation, evaluate whether a browser sandbox is a better product fit.

Escalation Rules

Docs (Source of Truth)

Read the source-of-truth page for your project language before writing integration code:

See Also

用于将 Firecrawl 集成到项目中,包括获取 API 密钥、配置环境变量、安装 SDK 及选择文档。支持新用户浏览器认证及现有项目接入,提供多语言参考链接。
需要 FIRECRAWL_API_KEY 需要将 Firecrawl 添加到 .env 首次为应用添加 Firecrawl 选择第一个 SDK 或 REST 路径
skills/firecrawl_skills/firecrawl-build-onboarding/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill firecrawl-build-onboarding -g -y
SKILL.md
Frontmatter
{
    "name": "firecrawl-build-onboarding",
    "inputs": [
        {
            "name": "FIRECRAWL_API_KEY",
            "required": true,
            "description": "Firecrawl API key used for hosted Firecrawl API requests."
        },
        {
            "name": "FIRECRAWL_API_URL",
            "required": false,
            "description": "Optional base URL for self-hosted Firecrawl deployments."
        }
    ],
    "license": "ISC",
    "metadata": {
        "author": "firecrawl",
        "source": "https:\/\/github.com\/firecrawl\/skills",
        "version": "0.1.0",
        "homepage": "https:\/\/www.firecrawl.dev"
    },
    "references": [
        "references\/auth-flow.md",
        "references\/sdk-installation.md",
        "references\/project-setup.md"
    ],
    "description": "Get Firecrawl credentials and SDK setup into a project. Use when an application needs `FIRECRAWL_API_KEY`, when an agent should add Firecrawl to `.env`, when the user wants to authenticate Firecrawl for app code, or when choosing the first SDK and docs for a new Firecrawl integration. This skill includes its own browser auth flow, so it does not depend on the website onboarding skill."
}

Firecrawl Build Onboarding

Use this skill for the application-integration path from Firecrawl's onboarding flow.

Install

If you haven't installed yet, one command sets up both the CLI tools (for live web work) and the build skills (for app integration):

npx -y firecrawl-cli@latest init --all --browser

This installs the Firecrawl CLI, the CLI skills, and these build skills together. It also opens browser auth so the human can sign in or create an account. No separate npx skills add step is needed.

Use This When

  • a project needs FIRECRAWL_API_KEY
  • the user wants Firecrawl wired into .env
  • you are adding Firecrawl to an app for the first time
  • you need to choose the first SDK or REST path

If the human still needs to sign up, sign in, or authorize access in the browser, use the auth flow reference in this skill.

Quick Start

If the user already has an API key, place it in .env:

FIRECRAWL_API_KEY=fc-...

If the project is self-hosted, also set:

FIRECRAWL_API_URL=https://your-firecrawl-instance.example.com

Then decide which integration path applies:

  • Fresh project -> choose the target stack, install the SDK, add the first Firecrawl call, and run a smoke test
  • Existing project -> inspect the repo first, then integrate Firecrawl where the project already handles third-party APIs and env vars

What Do You Need?

Task Reference
Run the browser auth flow and save FIRECRAWL_API_KEY references/auth-flow.md
Install the right SDK references/sdk-installation.md
Put credentials into .env or project config references/project-setup.md
Choose the right endpoint after setup firecrawl-build
Need live web tooling during this task The CLI skills are already installed from the same command
Start implementation from a known URL firecrawl-build-scrape
Start implementation from a query firecrawl-build-search

Docs (Source of Truth)

Read the source-of-truth page for your project language for SDK usage, schemas, and examples:

After Setup

Once the key is present:

  1. decide whether this is a fresh project or an existing codebase
  2. ask what Firecrawl should do in the product
  3. pick the narrowest endpoint that matches that behavior
  4. read the source-of-truth page for the project language before writing code
  5. add the SDK or REST call in code
  6. run a smoke test that proves one real Firecrawl request succeeds
  7. use the endpoint-specific skills in this repo for implementation guidance
  8. if you also need live web tooling during the current task, the CLI skills are already installed — use firecrawl/cli
用于已知URL的单页内容提取,支持Markdown、HTML、截图等格式。适用于知识摄入、数据增强及监控。优先于爬取模式,若需交互或无URL则升级至其他技能。
已知URL的单页内容提取 页面数据增强与知识摄入 需要结构化页面输出(如Markdown)
skills/firecrawl_skills/firecrawl-build-scrape/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill firecrawl-build-scrape -g -y
SKILL.md
Frontmatter
{
    "name": "firecrawl-build-scrape",
    "inputs": [
        {
            "name": "FIRECRAWL_API_KEY",
            "required": true,
            "description": "Firecrawl API key for hosted Firecrawl requests."
        },
        {
            "name": "FIRECRAWL_API_URL",
            "required": false,
            "description": "Optional base URL for self-hosted Firecrawl deployments."
        }
    ],
    "license": "ISC",
    "metadata": {
        "author": "firecrawl",
        "source": "https:\/\/github.com\/firecrawl\/skills",
        "version": "0.1.0",
        "homepage": "https:\/\/www.firecrawl.dev"
    },
    "description": "Integrate Firecrawl `\/scrape` into product code for single-page extraction. Use when an app already has a URL and needs markdown, HTML, links, screenshots, metadata, or structured page output. Prefer this skill over broader crawl patterns when the feature is page-level."
}

Firecrawl Build Scrape

Use this when the application already has the URL and needs content from one page.

Use This When

  • the feature starts from a known URL
  • you need page content for retrieval, summarization, enrichment, or monitoring
  • you want the default extraction primitive before considering /interact

Default Recommendations

  • Return markdown unless the feature truly needs another format.
  • Use onlyMainContent for article-like pages where nav and chrome add noise.
  • Add waits or other rendering options only when the page needs them.

Common Product Patterns

  • knowledge ingestion from known URLs
  • enrichment from a company, product, or docs page
  • pricing, changelog, and documentation extraction
  • page-level quality checks or monitoring

Escalation Rules

Implementation Notes

  • Keep the integration narrow: one feature, one URL, one extraction contract.
  • Treat /scrape as the default primitive for downstream LLM or indexing pipelines.
  • Request richer formats only when the consumer needs them, such as links, screenshots, or branding data.

Docs (Source of Truth)

Read the source-of-truth page for your project language before writing integration code:

See Also

用于在本地硬件上对Hugging Face Hub模型运行评估,支持inspect-ai和lighteval框架,可选择vLLM、Transformers或accelerate后端。涵盖任务选择、烟雾测试及后端回退策略,不包含远程作业编排或结果发布。
需要在本地GPU或CPU上运行HF模型评估 使用inspect-ai或lighteval进行基准测试 选择vLLM或Transformers作为推理后端 执行模型评估的烟雾测试
skills/huggingface_skills/huggingface-community-evals/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-community-evals -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-community-evals",
    "description": "Run evaluations for Hugging Face Hub models using inspect-ai and lighteval on local hardware. Use for backend selection, local GPU evals, and choosing between vLLM \/ Transformers \/ accelerate. Not for HF Jobs orchestration, model-card PRs, .eval_results publication, or community-evals automation."
}

Overview

This skill is for running evaluations against models on the Hugging Face Hub on local hardware.

It covers:

  • inspect-ai with local inference
  • lighteval with local inference
  • choosing between vllm, Hugging Face Transformers, and accelerate
  • smoke tests, task selection, and backend fallback strategy

It does not cover:

  • Hugging Face Jobs orchestration
  • model-card or model-index edits
  • README table extraction
  • Artificial Analysis imports
  • .eval_results generation or publishing
  • PR creation or community-evals automation

If the user wants to run the same eval remotely on Hugging Face Jobs, hand off to the hugging-face-jobs skill and pass it one of the local scripts in this skill.

If the user wants to publish results into the community evals workflow, stop after generating the evaluation run and hand off that publishing step to ~/code/community-evals.

All paths below are relative to the directory containing this SKILL.md.

When To Use Which Script

Use case Script
Local inspect-ai eval on a Hub model via inference providers scripts/inspect_eval_uv.py
Local GPU eval with inspect-ai using vllm or Transformers scripts/inspect_vllm_uv.py
Local GPU eval with lighteval using vllm or accelerate scripts/lighteval_vllm_uv.py
Extra command patterns examples/USAGE_EXAMPLES.md

Prerequisites

  • Prefer uv run for local execution.
  • Set HF_TOKEN for gated/private models.
  • For local GPU runs, verify GPU access before starting:
uv --version
printenv HF_TOKEN >/dev/null
nvidia-smi

If nvidia-smi is unavailable, either:

  • use scripts/inspect_eval_uv.py for lighter provider-backed evaluation, or
  • hand off to the hugging-face-jobs skill if the user wants remote compute.

Core Workflow

  1. Choose the evaluation framework.
    • Use inspect-ai when you want explicit task control and inspect-native flows.
    • Use lighteval when the benchmark is naturally expressed as a lighteval task string, especially leaderboard-style tasks.
  2. Choose the inference backend.
    • Prefer vllm for throughput on supported architectures.
    • Use Hugging Face Transformers (--backend hf) or accelerate as compatibility fallbacks.
  3. Start with a smoke test.
    • inspect-ai: add --limit 10 or similar.
    • lighteval: add --max-samples 10.
  4. Scale up only after the smoke test passes.
  5. If the user wants remote execution, hand off to hugging-face-jobs with the same script + args.

Quick Start

Option A: inspect-ai with local inference providers path

Best when the model is already supported by Hugging Face Inference Providers and you want the lowest local setup overhead.

uv run scripts/inspect_eval_uv.py \
  --model meta-llama/Llama-3.2-1B \
  --task mmlu \
  --limit 20

Use this path when:

  • you want a quick local smoke test
  • you do not need direct GPU control
  • the task already exists in inspect-evals

Option B: inspect-ai on Local GPU

Best when you need to load the Hub model directly, use vllm, or fall back to Transformers for unsupported architectures.

Local GPU:

uv run scripts/inspect_vllm_uv.py \
  --model meta-llama/Llama-3.2-1B \
  --task gsm8k \
  --limit 20

Transformers fallback:

uv run scripts/inspect_vllm_uv.py \
  --model microsoft/phi-2 \
  --task mmlu \
  --backend hf \
  --trust-remote-code \
  --limit 20

Option C: lighteval on Local GPU

Best when the task is naturally expressed as a lighteval task string, especially Open LLM Leaderboard style benchmarks.

Local GPU:

uv run scripts/lighteval_vllm_uv.py \
  --model meta-llama/Llama-3.2-3B-Instruct \
  --tasks "leaderboard|mmlu|5,leaderboard|gsm8k|5" \
  --max-samples 20 \
  --use-chat-template

accelerate fallback:

uv run scripts/lighteval_vllm_uv.py \
  --model microsoft/phi-2 \
  --tasks "leaderboard|mmlu|5" \
  --backend accelerate \
  --trust-remote-code \
  --max-samples 20

Remote Execution Boundary

This skill intentionally stops at local execution and backend selection.

If the user wants to:

  • run these scripts on Hugging Face Jobs
  • pick remote hardware
  • pass secrets to remote jobs
  • schedule recurring runs
  • inspect / cancel / monitor jobs

then switch to the hugging-face-jobs skill and pass it one of these scripts plus the chosen arguments.

Task Selection

inspect-ai examples:

  • mmlu
  • gsm8k
  • hellaswag
  • arc_challenge
  • truthfulqa
  • winogrande
  • humaneval

lighteval task strings use suite|task|num_fewshot:

  • leaderboard|mmlu|5
  • leaderboard|gsm8k|5
  • leaderboard|arc_challenge|25
  • lighteval|hellaswag|0

Multiple lighteval tasks can be comma-separated in --tasks.

Backend Selection

  • Prefer inspect_vllm_uv.py --backend vllm for fast GPU inference on supported architectures.
  • Use inspect_vllm_uv.py --backend hf when vllm does not support the model.
  • Prefer lighteval_vllm_uv.py --backend vllm for throughput on supported models.
  • Use lighteval_vllm_uv.py --backend accelerate as the compatibility fallback.
  • Use inspect_eval_uv.py when Inference Providers already cover the model and you do not need direct GPU control.

Hardware Guidance

Model size Suggested local hardware
< 3B consumer GPU / Apple Silicon / small dev GPU
3B - 13B stronger local GPU
13B+ high-memory local GPU or hand off to hugging-face-jobs

For smoke tests, prefer cheaper local runs plus --limit or --max-samples.

Troubleshooting

  • CUDA or vLLM OOM:
    • reduce --batch-size
    • reduce --gpu-memory-utilization
    • switch to a smaller model for the smoke test
    • if necessary, hand off to hugging-face-jobs
  • Model unsupported by vllm:
    • switch to --backend hf for inspect-ai
    • switch to --backend accelerate for lighteval
  • Gated/private repo access fails:
    • verify HF_TOKEN
  • Custom model code required:
    • add --trust-remote-code

Examples

See:

  • examples/USAGE_EXAMPLES.md for local command patterns
  • scripts/inspect_eval_uv.py
  • scripts/inspect_vllm_uv.py
  • scripts/lighteval_vllm_uv.py
用于Hugging Face数据集探索与提取的只读API工作流。支持验证数据集、查看元数据、分页读取行、全文搜索、过滤查询及获取Parquet链接和统计信息,适用于数据集浏览和数据抽取场景。
需要浏览或预览Hugging Face数据集内容 需要基于文本搜索或条件过滤数据集行 需要获取数据集的统计信息或下载Parquet文件链接
skills/huggingface_skills/huggingface-datasets/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-datasets -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-datasets",
    "description": "Use this skill for Hugging Face Dataset Viewer API workflows that fetch subset\/split metadata, paginate rows, search text, apply filters, download parquet URLs, and read size or statistics."
}

Hugging Face Dataset Viewer

Use this skill to execute read-only Dataset Viewer API calls for dataset exploration and extraction.

Core workflow

  1. Optionally validate dataset availability with /is-valid.
  2. Resolve config + split with /splits.
  3. Preview with /first-rows.
  4. Paginate content with /rows using offset and length (max 100).
  5. Use /search for text matching and /filter for row predicates.
  6. Retrieve parquet links via /parquet and totals/metadata via /size and /statistics.

Defaults

  • Base URL: https://datasets-server.huggingface.co
  • Default API method: GET
  • Query params should be URL-encoded.
  • offset is 0-based.
  • length max is usually 100 for row-like endpoints.
  • Gated/private datasets require Authorization: Bearer <HF_TOKEN>.

Dataset Viewer

  • Validate dataset: /is-valid?dataset=<namespace/repo>
  • List subsets and splits: /splits?dataset=<namespace/repo>
  • Preview first rows: /first-rows?dataset=<namespace/repo>&config=<config>&split=<split>
  • Paginate rows: /rows?dataset=<namespace/repo>&config=<config>&split=<split>&offset=<int>&length=<int>
  • Search text: /search?dataset=<namespace/repo>&config=<config>&split=<split>&query=<text>&offset=<int>&length=<int>
  • Filter with predicates: /filter?dataset=<namespace/repo>&config=<config>&split=<split>&where=<predicate>&orderby=<sort>&offset=<int>&length=<int>
  • List parquet shards: /parquet?dataset=<namespace/repo>
  • Get size totals: /size?dataset=<namespace/repo>
  • Get column statistics: /statistics?dataset=<namespace/repo>&config=<config>&split=<split>
  • Get Croissant metadata (if available): /croissant?dataset=<namespace/repo>

Pagination pattern:

curl "https://datasets-server.huggingface.co/rows?dataset=stanfordnlp/imdb&config=plain_text&split=train&offset=0&length=100"
curl "https://datasets-server.huggingface.co/rows?dataset=stanfordnlp/imdb&config=plain_text&split=train&offset=100&length=100"

When pagination is partial, use response fields such as num_rows_total, num_rows_per_page, and partial to drive continuation logic.

Search/filter notes:

  • /search matches string columns (full-text style behavior is internal to the API).
  • /filter requires predicate syntax in where and optional sort in orderby.
  • Keep filtering and searches read-only and side-effect free.

For CLI-based parquet URL discovery or SQL, use the hf-cli skill with hf datasets parquet and hf datasets sql.

Creating and Uploading Datasets

Use one of these flows depending on dependency constraints.

Zero local dependencies (Hub UI):

  • Create dataset repo in browser: https://huggingface.co/new-dataset
  • Upload parquet files in the repo "Files and versions" page.
  • Verify shards appear in Dataset Viewer:
curl -s "https://datasets-server.huggingface.co/parquet?dataset=<namespace>/<repo>"

Low dependency CLI flow (npx @huggingface/hub / hfjs):

  • Set auth token:
export HF_TOKEN=<your_hf_token>
  • Upload parquet folder to a dataset repo (auto-creates repo if missing):
npx -y @huggingface/hub upload datasets/<namespace>/<repo> ./local/parquet-folder data
  • Upload as private repo on creation:
npx -y @huggingface/hub upload datasets/<namespace>/<repo> ./local/parquet-folder data --private

After upload, call /parquet to discover <config>/<split>/<shard> values for querying with @~parquet.

Agent Traces

The Hub supports raw agent session traces from Claude Code, Codex, and Pi Agent. Upload them to Hugging Face Datasets as original JSONL files and the Hub can auto-detect the trace format, tag the dataset as Traces, and enable the trace viewer for browsing sessions, turns, tool calls, and model responses. Common local session directories:

  • Claude Code: ~/.claude/projects
  • Codex: ~/.codex/sessions
  • Pi: ~/.pi/agent/sessions

Default to private dataset repos because traces can contain prompts, file paths, tool outputs, secrets, or PII. Preserve the raw .jsonl files and nest them by project/cwd instead of uploading every session at the dataset root.

hf repos create <namespace>/<repo> --type dataset --private --exist-ok
hf upload <namespace>/<repo> ~/.codex/sessions codex/<project-or-cwd> --type dataset
用于在Python中构建交互式Web UI和机器学习演示的Gradio技能。涵盖Interface、Blocks及ChatInterface核心模式,支持组件布局、事件监听、流式输入输出及自定义样式,适用于创建或编辑Gradio应用与聊天机器人。
创建Gradio Web界面 开发机器学习演示Demo 实现聊天机器人UI 配置Gradio组件与事件监听 调整Gradio应用布局
skills/huggingface_skills/huggingface-gradio/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-gradio -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-gradio",
    "description": "Build Gradio web UIs and demos in Python. Use when creating or editing Gradio apps, components, event listeners, layouts, or chatbots."
}

Gradio

Gradio is a Python library for building interactive web UIs and ML demos. This skill covers the core API, patterns, and examples.

Guides

Detailed guides on specific topics (read these when relevant):

Core Patterns

Interface (high-level): wraps a function with input/output components.

import gradio as gr

def greet(name):
    return f"Hello {name}!"

gr.Interface(fn=greet, inputs="text", outputs="text").launch()

Blocks (low-level): flexible layout with explicit event wiring.

import gradio as gr

with gr.Blocks() as demo:
    name = gr.Textbox(label="Name")
    output = gr.Textbox(label="Greeting")
    btn = gr.Button("Greet")
    btn.click(fn=lambda n: f"Hello {n}!", inputs=name, outputs=output)

demo.launch()

ChatInterface: high-level wrapper for chatbot UIs.

import gradio as gr

def respond(message, history):
    return f"You said: {message}"

gr.ChatInterface(fn=respond).launch()

Key Component Signatures

Textbox(value: str | I18nData | Callable | None = None, type: Literal['text', 'password', 'email'] = "text", lines: int = 1, max_lines: int | None = None, placeholder: str | I18nData | None = None, label: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, autofocus: bool = False, autoscroll: bool = True, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", text_align: Literal['left', 'right'] | None = None, rtl: bool = False, buttons: list[Literal['copy'] | Button] | None = None, max_length: int | None = None, submit_btn: str | bool | None = False, stop_btn: str | bool | None = False, html_attributes: InputHTMLAttributes | None = None)

Creates a textarea for user to enter string input or display string output..

Number(value: float | Callable | None = None, label: str | I18nData | None = None, placeholder: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", buttons: list[Button] | None = None, precision: int | None = None, minimum: float | None = None, maximum: float | None = None, step: float = 1)

Creates a numeric field for user to enter numbers as input or display numeric output..

Slider(minimum: float = 0, maximum: float = 100, value: float | Callable | None = None, step: float | None = None, precision: int | None = None, label: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", randomize: bool = False, buttons: list[Literal['reset']] | None = None)

Creates a slider that ranges from {minimum} to {maximum} with a step size of {step}..

Checkbox(value: bool | Callable = False, label: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", buttons: list[Button] | None = None)

Creates a checkbox that can be set to True or False.

Dropdown(choices: Sequence[str | int | float | tuple[str, str | int | float]] | None = None, value: str | int | float | Sequence[str | int | float] | Callable | DefaultValue | None = DefaultValue(), type: Literal['value', 'index'] = "value", multiselect: bool | None = None, allow_custom_value: bool = False, max_choices: int | None = None, filterable: bool = True, label: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", buttons: list[Button] | None = None)

Creates a dropdown of choices from which a single entry or multiple entries can be selected (as an input component) or displayed (as an output component)..

Radio(choices: Sequence[str | int | float | tuple[str, str | int | float]] | None = None, value: str | int | float | Callable | None = None, type: Literal['value', 'index'] = "value", label: str | I18nData | None = None, info: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", rtl: bool = False, buttons: list[Button] | None = None)

Creates a set of (string or numeric type) radio buttons of which only one can be selected..

Image(value: str | PIL.Image.Image | np.ndarray | Callable | None = None, format: str = "webp", height: int | str | None = None, width: int | str | None = None, image_mode: Literal['1', 'L', 'P', 'RGB', 'RGBA', 'CMYK', 'YCbCr', 'LAB', 'HSV', 'I', 'F'] | None = "RGB", sources: list[Literal['upload', 'webcam', 'clipboard']] | Literal['upload', 'webcam', 'clipboard'] | None = None, type: Literal['numpy', 'pil', 'filepath'] = "numpy", label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, buttons: list[Literal['download', 'share', 'fullscreen'] | Button] | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, streaming: bool = False, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", webcam_options: WebcamOptions | None = None, placeholder: str | None = None, watermark: WatermarkOptions | None = None)

Creates an image component that can be used to upload images (as an input) or display images (as an output)..

Audio(value: str | Path | tuple[int, np.ndarray] | Callable | None = None, sources: list[Literal['upload', 'microphone']] | Literal['upload', 'microphone'] | None = None, type: Literal['numpy', 'filepath'] = "numpy", label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, streaming: bool = False, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", format: Literal['wav', 'mp3'] | None = None, autoplay: bool = False, editable: bool = True, buttons: list[Literal['download', 'share'] | Button] | None = None, waveform_options: WaveformOptions | dict | None = None, loop: bool = False, recording: bool = False, subtitles: str | Path | list[dict[str, Any]] | None = None, playback_position: float = 0)

Creates an audio component that can be used to upload/record audio (as an input) or display audio (as an output)..

Video(value: str | Path | Callable | None = None, format: str | None = None, sources: list[Literal['upload', 'webcam']] | Literal['upload', 'webcam'] | None = None, height: int | str | None = None, width: int | str | None = None, label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", webcam_options: WebcamOptions | None = None, include_audio: bool | None = None, autoplay: bool = False, buttons: list[Literal['download', 'share'] | Button] | None = None, loop: bool = False, streaming: bool = False, watermark: WatermarkOptions | None = None, subtitles: str | Path | list[dict[str, Any]] | None = None, playback_position: float = 0)

Creates a video component that can be used to upload/record videos (as an input) or display videos (as an output).

File(value: str | list[str] | Callable | None = None, file_count: Literal['single', 'multiple', 'directory'] = "single", file_types: list[str] | None = None, type: Literal['filepath', 'binary'] = "filepath", label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, height: int | str | float | None = None, interactive: bool | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", allow_reordering: bool = False, buttons: list[Button] | None = None)

Creates a file component that allows uploading one or more generic files (when used as an input) or displaying generic files or URLs for download (as output).

Chatbot(value: list[MessageDict | Message] | Callable | None = None, label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, container: bool = True, scale: int | None = None, min_width: int = 160, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, autoscroll: bool = True, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", height: int | str | None = 400, resizable: bool = False, max_height: int | str | None = None, min_height: int | str | None = None, editable: Literal['user', 'all'] | None = None, latex_delimiters: list[dict[str, str | bool]] | None = None, rtl: bool = False, buttons: list[Literal['share', 'copy', 'copy_all'] | Button] | None = None, watermark: str | None = None, avatar_images: tuple[str | Path | None, str | Path | None] | None = None, sanitize_html: bool = True, render_markdown: bool = True, feedback_options: list[str] | tuple[str, ...] | None = ('Like', 'Dislike'), feedback_value: Sequence[str | None] | None = None, line_breaks: bool = True, layout: Literal['panel', 'bubble'] | None = None, placeholder: str | None = None, examples: list[ExampleMessage] | None = None, allow_file_downloads: <class 'inspect._empty'> = True, group_consecutive_messages: bool = True, allow_tags: list[str] | bool = True, reasoning_tags: list[tuple[str, str]] | None = None, like_user_message: bool = False)

Creates a chatbot that displays user-submitted messages and responses.

Button(value: str | I18nData | Callable = "Run", every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, variant: Literal['primary', 'secondary', 'stop', 'huggingface'] = "secondary", size: Literal['sm', 'md', 'lg'] = "lg", icon: str | Path | None = None, link: str | None = None, link_target: Literal['_self', '_blank', '_parent', '_top'] = "_self", visible: bool | Literal['hidden'] = True, interactive: bool = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", scale: int | None = None, min_width: int | None = None)

Creates a button that can be assigned arbitrary .click() events.

Markdown(value: str | I18nData | Callable | None = None, label: str | I18nData | None = None, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool | None = None, rtl: bool = False, latex_delimiters: list[dict[str, str | bool]] | None = None, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", sanitize_html: bool = True, line_breaks: bool = False, header_links: bool = False, height: int | str | None = None, max_height: int | str | None = None, min_height: int | str | None = None, buttons: list[Literal['copy']] | None = None, container: bool = False, padding: bool = False)

Used to render arbitrary Markdown output.

HTML(value: Any | Callable | None = None, label: str | I18nData | None = None, html_template: str = "${value}", css_template: str = "", js_on_load: str | None = "element.addEventListener('click', function() { trigger('click') });", apply_default_css: bool = True, every: Timer | float | None = None, inputs: Component | Sequence[Component] | set[Component] | None = None, show_label: bool = False, visible: bool | Literal['hidden'] = True, elem_id: str | None = None, elem_classes: list[str] | str | None = None, render: bool = True, key: int | str | tuple[int | str, ...] | None = None, preserved_by_key: list[str] | str | None = "value", min_height: int | None = None, max_height: int | None = None, container: bool = False, padding: bool = False, autoscroll: bool = False, buttons: list[Button] | None = None, server_functions: list[Callable] | None = None, props: Any)

Creates a component with arbitrary HTML.

Custom HTML Components

If a task requires significant customization of an existing component or a component that doesn't exist in Gradio, you can create one with gr.HTML. It supports html_template (with ${} JS expressions and {{}} Handlebars syntax), css_template for scoped styles, and js_on_load for interactivity — where props.value updates the component value and trigger('event_name') fires Gradio events. For reuse, subclass gr.HTML and define api_info() for API/MCP support. See the full guide.

Here's an example that shows how to create and use these kinds of components:

import gradio as gr

class StarRating(gr.HTML):
    def __init__(self, label, value=0, **kwargs):
        html_template = """
        <h2>${label} rating:</h2>
        ${Array.from({length: 5}, (_, i) => `<img class='${i < value ? '' : 'faded'}' src='https://upload.wikimedia.org/wikipedia/commons/d/df/Award-star-gold-3d.svg'>`).join('')}
        """
        css_template = """
            img { height: 50px; display: inline-block; cursor: pointer; }
            .faded { filter: grayscale(100%); opacity: 0.3; }
        """
        js_on_load = """
            const imgs = element.querySelectorAll('img');
            imgs.forEach((img, index) => {
                img.addEventListener('click', () => {
                    props.value = index + 1;
                });
            });
        """
        super().__init__(value=value, label=label, html_template=html_template, css_template=css_template, js_on_load=js_on_load, **kwargs)

    def api_info(self):
        return {"type": "integer", "minimum": 0, "maximum": 5}


with gr.Blocks() as demo:
    gr.Markdown("# Restaurant Review")
    food_rating = StarRating(label="Food", value=3)
    service_rating = StarRating(label="Service", value=3)
    ambience_rating = StarRating(label="Ambience", value=3)
    average_btn = gr.Button("Calculate Average Rating")
    rating_output = StarRating(label="Average", value=3)
    def calculate_average(food, service, ambience):
        return round((food + service + ambience) / 3)
    average_btn.click(
        fn=calculate_average,
        inputs=[food_rating, service_rating, ambience_rating],
        outputs=rating_output
    )

demo.launch()

Event Listeners

All event listeners share the same signature:

component.event_name(
    fn: Callable | None | Literal["decorator"] = "decorator",
    inputs: Component | Sequence[Component] | set[Component] | None = None,
    outputs: Component | Sequence[Component] | set[Component] | None = None,
    api_name: str | None = None,
    api_description: str | None | Literal[False] = None,
    scroll_to_output: bool = False,
    show_progress: Literal["full", "minimal", "hidden"] = "full",
    show_progress_on: Component | Sequence[Component] | None = None,
    queue: bool = True,
    batch: bool = False,
    max_batch_size: int = 4,
    preprocess: bool = True,
    postprocess: bool = True,
    cancels: dict[str, Any] | list[dict[str, Any]] | None = None,
    trigger_mode: Literal["once", "multiple", "always_last"] | None = None,
    js: str | Literal[True] | None = None,
    concurrency_limit: int | None | Literal["default"] = "default",
    concurrency_id: str | None = None,
    api_visibility: Literal["public", "private", "undocumented"] = "public",
    time_limit: int | None = None,
    stream_every: float = 0.5,
    key: int | str | tuple[int | str, ...] | None = None,
    validator: Callable | None = None,
) -> Dependency

Supported events per component:

  • AnnotatedImage: select
  • Audio: stream, change, clear, play, pause, stop, pause, start_recording, pause_recording, stop_recording, upload, input
  • BarPlot: select, double_click
  • BrowserState: change
  • Button: click
  • Chatbot: change, select, like, retry, undo, example_select, option_select, clear, copy, edit
  • Checkbox: change, input, select
  • CheckboxGroup: change, input, select
  • ClearButton: click
  • Code: change, input, focus, blur
  • ColorPicker: change, input, submit, focus, blur
  • Dataframe: change, input, select, edit
  • Dataset: click, select
  • DateTime: change, submit
  • DeepLinkButton: click
  • Dialogue: change, input, submit
  • DownloadButton: click
  • Dropdown: change, input, select, focus, blur, key_up
  • DuplicateButton: click
  • File: change, select, clear, upload, delete, download
  • FileExplorer: change, input, select
  • Gallery: select, upload, change, delete, preview_close, preview_open
  • HTML: change, input, click, double_click, submit, stop, edit, clear, play, pause, end, start_recording, pause_recording, stop_recording, focus, blur, upload, release, select, stream, like, example_select, option_select, load, key_up, apply, delete, tick, undo, retry, expand, collapse, download, copy
  • HighlightedText: change, select
  • Image: clear, change, stream, select, upload, input
  • ImageEditor: clear, change, input, select, upload, apply
  • ImageSlider: clear, change, stream, select, upload, input
  • JSON: change
  • Label: change, select
  • LinePlot: select, double_click
  • LoginButton: click
  • Markdown: change, copy
  • Model3D: change, upload, edit, clear
  • MultimodalTextbox: change, input, select, submit, focus, blur, stop
  • Navbar: change
  • Number: change, input, submit, focus, blur
  • ParamViewer: change, upload
  • Plot: change
  • Radio: select, change, input
  • ScatterPlot: select, double_click
  • SimpleImage: clear, change, upload
  • Slider: change, input, release
  • State: change
  • Textbox: change, input, select, submit, focus, blur, stop, copy
  • Timer: tick
  • UploadButton: click, upload
  • Video: change, clear, start_recording, stop_recording, stop, play, pause, end, upload, input

Prediction CLI

The gradio CLI includes info and predict commands for interacting with Gradio apps programmatically. These are especially useful for coding agents that need to use Spaces in their workflows.

gradio info — Discover endpoints and parameters

gradio info <space_id_or_url>

Returns a JSON payload describing all endpoints, their parameters (with types and defaults), and return values.

gradio info gradio/calculator
# {
#   "/predict": {
#     "parameters": [
#       {"name": "num1", "required": true, "default": null, "type": {"type": "number"}},
#       {"name": "operation", "required": true, "default": null, "type": {"enum": ["add", "subtract", "multiply", "divide"], "type": "string"}},
#       {"name": "num2", "required": true, "default": null, "type": {"type": "number"}}
#     ],
#     "returns": [{"name": "output", "type": {"type": "number"}}],
#     "description": ""
#   }
# }

File-type parameters show "type": "filepath" with instructions to include "meta": {"_type": "gradio.FileData"} — this signals the file will be uploaded to the remote server.

gradio predict — Send predictions

gradio predict <space_id_or_url> <endpoint> <json_payload>

Returns a JSON object with named output keys.

# Simple numeric prediction
gradio predict gradio/calculator /predict '{"num1": 5, "operation": "multiply", "num2": 3}'
# {"output": 15}

# Image generation
gradio predict black-forest-labs/FLUX.2-dev /infer '{"prompt": "A majestic dragon"}'
# {"Result": "/tmp/gradio/.../image.webp", "Seed": 1117868604}

# File upload (must include meta key)
gradio predict gradio/image_mod /predict '{"image": {"path": "/path/to/image.png", "meta": {"_type": "gradio.FileData"}}}'
# {"output": "/tmp/gradio/.../output.png"}

Both commands accept --token for accessing private Spaces.

Additional Reference

用于在本地通过llama.cpp运行GGUF模型。支持搜索Hugging Face仓库、选择量化版本、启动llama-cli/server服务及OpenAI兼容接口,并处理模型转换与认证。
用户希望使用llama.cpp在本地运行LLM 需要查找或下载Hugging Face上的GGUF格式模型 请求配置本地推理服务器以兼容OpenAI API 询问关于GGUF量化格式的选择建议
skills/huggingface_skills/huggingface-local-models/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-local-models -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-local-models",
    "description": "Use to select models to run locally with llama.cpp and GGUF on CPU, Mac Metal, CUDA, or ROCm. Covers finding GGUFs, quant selection, running servers, exact GGUF file lookup, conversion, and OpenAI-compatible local serving."
}

Hugging Face Local Models

Search the Hugging Face Hub for llama.cpp-compatible GGUF repos, choose the right quant, and launch the model with llama-cli or llama-server.

Default Workflow

  1. Search the Hub with apps=llama.cpp.
  2. Open https://huggingface.co/<repo>?local-app=llama.cpp.
  3. Prefer the exact HF local-app snippet and quant recommendation when it is visible.
  4. Confirm exact .gguf filenames with https://huggingface.co/api/models/<repo>/tree/main?recursive=true.
  5. Launch with llama-cli -hf <repo>:<QUANT> or llama-server -hf <repo>:<QUANT>.
  6. Fall back to --hf-repo plus --hf-file when the repo uses custom file naming.
  7. Convert from Transformers weights only if the repo does not already expose GGUF files.

Quick Start

Install llama.cpp

brew install llama.cpp
winget install llama.cpp
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
make

Authenticate for gated repos

hf auth login

Search the Hub

https://huggingface.co/models?apps=llama.cpp&sort=trending
https://huggingface.co/models?search=Qwen3.6&apps=llama.cpp&sort=trending
https://huggingface.co/models?search=<term>&apps=llama.cpp&num_parameters=min:0,max:24B&sort=trending

Run directly from the Hub

llama-cli -hf unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M
llama-server -hf unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M

Run an exact GGUF file

llama-server \
    --hf-repo unsloth/Qwen3.6-35B-A3B-GGUF \
    --hf-file Qwen3.6-35B-A3B-UD-Q4_K_M.gguf \
    -c 4096

Convert only when no GGUF is available

hf download <repo-without-gguf> --local-dir ./model-src
python convert_hf_to_gguf.py ./model-src \
    --outfile model-f16.gguf \
    --outtype f16
llama-quantize model-f16.gguf model-q4_k_m.gguf Q4_K_M

Smoke test a local server

llama-server -hf unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M
curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer no-key" \
  -d '{
    "messages": [
      {"role": "user", "content": "Write a limerick about exception handling"}
    ]
  }'

Quant Choice

  • Prefer the exact quant that HF marks as compatible on the ?local-app=llama.cpp page.
  • Keep repo-native labels such as UD-Q4_K_M instead of normalizing them.
  • Default to Q4_K_M unless the repo page or hardware profile suggests otherwise.
  • Prefer Q5_K_M or Q6_K for code or technical workloads when memory allows.
  • Consider Q3_K_M, Q4_K_S, or repo-specific IQ / UD-* variants for tighter RAM or VRAM budgets.
  • Treat mmproj-*.gguf files as projector weights, not the main checkpoint.

Load References

  • Read hub-discovery.md for URL-first workflows, model search, tree API extraction, and command reconstruction.
  • Read quantization.md for format tables, model scaling, quality tradeoffs, and imatrix.
  • Read hardware.md for Metal, CUDA, ROCm, or CPU build and acceleration details.

Resources

  • llama.cpp: https://github.com/ggml-org/llama.cpp
  • Hugging Face GGUF + llama.cpp docs: https://huggingface.co/docs/hub/gguf-llamacpp
  • Hugging Face Local Apps docs: https://huggingface.co/docs/hub/main/local-apps
  • Hugging Face Local Agents docs: https://huggingface.co/docs/hub/agents-local
  • GGUF converter Space: https://huggingface.co/spaces/ggml-org/gguf-my-repo
用于在 Hugging Face Hub 发布、管理和关联研究论文。支持从 arXiv 索引论文、验证作者身份、将论文链接至模型或数据集,以及生成专业的 Markdown 格式科研文章。
用户希望将 arXiv 论文发布到 Hugging Face 需要为论文添加作者身份验证 需要将论文与模型或数据集进行关联 需要生成标准化的科研论文 Markdown 模板
skills/huggingface_skills/huggingface-paper-publisher/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-paper-publisher -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-paper-publisher",
    "description": "Publish and manage research papers on Hugging Face Hub. Supports creating paper pages, linking papers to models\/datasets, claiming authorship, and generating professional markdown-based research articles."
}

Overview

This skill provides comprehensive tools for AI engineers and researchers to publish, manage, and link research papers on the Hugging Face Hub. It streamlines the workflow from paper creation to publication, including integration with arXiv, model/dataset linking, and authorship management.

Integration with HF Ecosystem

  • Paper Pages: Index and discover papers on Hugging Face Hub
  • arXiv Integration: Automatic paper indexing from arXiv IDs
  • Model/Dataset Linking: Connect papers to relevant artifacts through metadata
  • Authorship Verification: Claim and verify paper authorship
  • Research Article Template: Generate professional, modern scientific papers

Version

1.0.0

Dependencies

The included script uses PEP 723 inline dependencies. Prefer uv run over manual environment setup.

  • huggingface_hub>=0.26.0
  • pyyaml>=6.0.3
  • requests>=2.32.5
  • markdown>=3.5.0
  • python-dotenv>=1.2.1

Core Capabilities

1. Paper Page Management

  • Index Papers: Add papers to Hugging Face from arXiv
  • Claim Authorship: Verify and claim authorship on published papers
  • Manage Visibility: Control which papers appear on your profile
  • Paper Discovery: Find and explore papers in the HF ecosystem

2. Link Papers to Artifacts

  • Model Cards: Add paper citations to model metadata
  • Dataset Cards: Link papers to datasets via README
  • Automatic Tagging: Hub auto-generates arxiv:<PAPER_ID> tags
  • Citation Management: Maintain proper attribution and references

3. Research Article Creation

  • Markdown Templates: Generate professional paper formatting
  • Modern Design: Clean, readable research article layouts
  • Dynamic TOC: Automatic table of contents generation
  • Section Structure: Standard scientific paper organization
  • LaTeX Math: Support for equations and technical notation

4. Metadata Management

  • YAML Frontmatter: Proper model/dataset card metadata
  • Citation Tracking: Maintain paper references across repositories
  • Version Control: Track paper updates and revisions
  • Multi-Paper Support: Link multiple papers to single artifacts

Usage Instructions

The skill includes Python scripts in scripts/ for paper publishing operations.

Prerequisites

  • Run scripts with uv run (dependencies are resolved from the script header)
  • Set HF_TOKEN environment variable with Write-access token

All paths are relative to the directory containing this SKILL.md file. Before running any script, first cd to that directory or use the full path.

Method 1: Index Paper from arXiv

Add a paper to Hugging Face Paper Pages from arXiv.

Basic Usage:

uv run scripts/paper_manager.py index \
  --arxiv-id "2301.12345"

Check If Paper Exists:

uv run scripts/paper_manager.py check \
  --arxiv-id "2301.12345"

Direct URL Access: You can also visit https://huggingface.co/papers/{arxiv-id} directly to index a paper.

Method 2: Link Paper to Model/Dataset

Add paper references to model or dataset README with proper YAML metadata.

Add to Model Card:

uv run scripts/paper_manager.py link \
  --repo-id "username/model-name" \
  --repo-type "model" \
  --arxiv-id "2301.12345"

Add to Dataset Card:

uv run scripts/paper_manager.py link \
  --repo-id "username/dataset-name" \
  --repo-type "dataset" \
  --arxiv-id "2301.12345"

Add Multiple Papers:

uv run scripts/paper_manager.py link \
  --repo-id "username/model-name" \
  --repo-type "model" \
  --arxiv-ids "2301.12345,2302.67890,2303.11111"

With Custom Citation:

uv run scripts/paper_manager.py link \
  --repo-id "username/model-name" \
  --repo-type "model" \
  --arxiv-id "2301.12345" \
  --citation "$(cat citation.txt)"

How Linking Works

When you add an arXiv paper link to a model or dataset README:

  1. The Hub extracts the arXiv ID from the link
  2. A tag arxiv:<PAPER_ID> is automatically added to the repository
  3. Users can click the tag to view the Paper Page
  4. The Paper Page shows all models/datasets citing this paper
  5. Papers are discoverable through filters and search

Method 3: Claim Authorship

Verify your authorship on papers published on Hugging Face.

Start Claim Process:

uv run scripts/paper_manager.py claim \
  --arxiv-id "2301.12345" \
  --email "your.email@institution.edu"

Manual Process:

  1. Navigate to your paper's page: https://huggingface.co/papers/{arxiv-id}
  2. Find your name in the author list
  3. Click your name and select "Claim authorship"
  4. Wait for admin team verification

Check Authorship Status:

uv run scripts/paper_manager.py check-authorship \
  --arxiv-id "2301.12345"

Method 4: Manage Paper Visibility

Control which verified papers appear on your public profile.

List Your Papers:

uv run scripts/paper_manager.py list-my-papers

Toggle Visibility:

uv run scripts/paper_manager.py toggle-visibility \
  --arxiv-id "2301.12345" \
  --show true

Manage in Settings: Navigate to your account settings → Papers section to toggle "Show on profile" for each paper.

Method 5: Create Research Article

Generate a professional markdown-based research paper using modern templates.

Create from Template:

uv run scripts/paper_manager.py create \
  --template "standard" \
  --title "Your Paper Title" \
  --output "paper.md"

Available Templates:

  • standard - Traditional scientific paper structure
  • modern - Clean, web-friendly format inspired by Distill
  • arxiv - arXiv-style formatting
  • ml-report - Machine learning experiment report

Generate Complete Paper:

uv run scripts/paper_manager.py create \
  --template "modern" \
  --title "Fine-Tuning Large Language Models with LoRA" \
  --authors "Jane Doe, John Smith" \
  --abstract "$(cat abstract.txt)" \
  --output "paper.md"

Convert to HTML:

uv run scripts/paper_manager.py convert \
  --input "paper.md" \
  --output "paper.html" \
  --style "modern"

Paper Template Structure

Standard Research Paper Sections:

---
title: Your Paper Title
authors: Jane Doe, John Smith
affiliations: University X, Lab Y
date: 2025-01-15
arxiv: 2301.12345
tags: [machine-learning, nlp, fine-tuning]
---

# Abstract
Brief summary of the paper...

# 1. Introduction
Background and motivation...

# 2. Related Work
Previous research and context...

# 3. Methodology
Approach and implementation...

# 4. Experiments
Setup, datasets, and procedures...

# 5. Results
Findings and analysis...

# 6. Discussion
Interpretation and implications...

# 7. Conclusion
Summary and future work...

# References

Modern Template Features:

  • Dynamic table of contents
  • Responsive design for web viewing
  • Code syntax highlighting
  • Interactive figures and charts
  • Math equation rendering (LaTeX)
  • Citation management
  • Author affiliation linking

Commands Reference

Index Paper:

uv run scripts/paper_manager.py index --arxiv-id "2301.12345"

Link to Repository:

uv run scripts/paper_manager.py link \
  --repo-id "username/repo-name" \
  --repo-type "model|dataset|space" \
  --arxiv-id "2301.12345" \
  [--citation "Full citation text"] \
  [--create-pr]

Claim Authorship:

uv run scripts/paper_manager.py claim \
  --arxiv-id "2301.12345" \
  --email "your.email@edu"

Manage Visibility:

uv run scripts/paper_manager.py toggle-visibility \
  --arxiv-id "2301.12345" \
  --show true|false

Create Research Article:

uv run scripts/paper_manager.py create \
  --template "standard|modern|arxiv|ml-report" \
  --title "Paper Title" \
  [--authors "Author1, Author2"] \
  [--abstract "Abstract text"] \
  [--output "filename.md"]

Convert Markdown to HTML:

uv run scripts/paper_manager.py convert \
  --input "paper.md" \
  --output "paper.html" \
  [--style "modern|classic"]

Check Paper Status:

uv run scripts/paper_manager.py check --arxiv-id "2301.12345"

List Your Papers:

uv run scripts/paper_manager.py list-my-papers

Search Papers:

uv run scripts/paper_manager.py search --query "transformer attention"

YAML Metadata Format

When linking papers to models or datasets, proper YAML frontmatter is required:

Model Card Example:

---
language:
  - en
license: apache-2.0
tags:
  - text-generation
  - transformers
  - llm
library_name: transformers
---

# Model Name

This model is based on the approach described in [Our Paper](https://arxiv.org/abs/2301.12345).

## Citation

```bibtex
@article{doe2023paper,
  title={Your Paper Title},
  author={Doe, Jane and Smith, John},
  journal={arXiv preprint arXiv:2301.12345},
  year={2023}
}

**Dataset Card Example:**
```yaml
---
language:
  - en
license: cc-by-4.0
task_categories:
  - text-generation
  - question-answering
size_categories:
  - 10K<n<100K
---

# Dataset Name

Dataset introduced in [Our Paper](https://arxiv.org/abs/2301.12345).

For more details, see the [paper page](https://huggingface.co/papers/2301.12345).

The Hub automatically extracts arXiv IDs from these links and creates arxiv:2301.12345 tags.

Integration Examples

Workflow 1: Publish New Research

# 1. Create research article
uv run scripts/paper_manager.py create \
  --template "modern" \
  --title "Novel Fine-Tuning Approach" \
  --output "paper.md"

# 2. Edit paper.md with your content

# 3. Submit to arXiv (external process)
# Upload to arxiv.org, get arXiv ID

# 4. Index on Hugging Face
uv run scripts/paper_manager.py index --arxiv-id "2301.12345"

# 5. Link to your model
uv run scripts/paper_manager.py link \
  --repo-id "your-username/your-model" \
  --repo-type "model" \
  --arxiv-id "2301.12345"

# 6. Claim authorship
uv run scripts/paper_manager.py claim \
  --arxiv-id "2301.12345" \
  --email "your.email@edu"

Workflow 2: Link Existing Paper

# 1. Check if paper exists
uv run scripts/paper_manager.py check --arxiv-id "2301.12345"

# 2. Index if needed
uv run scripts/paper_manager.py index --arxiv-id "2301.12345"

# 3. Link to multiple repositories
uv run scripts/paper_manager.py link \
  --repo-id "username/model-v1" \
  --repo-type "model" \
  --arxiv-id "2301.12345"

uv run scripts/paper_manager.py link \
  --repo-id "username/training-data" \
  --repo-type "dataset" \
  --arxiv-id "2301.12345"

uv run scripts/paper_manager.py link \
  --repo-id "username/demo-space" \
  --repo-type "space" \
  --arxiv-id "2301.12345"

Workflow 3: Update Model with Paper Reference

# 1. Get current README
hf download username/model-name README.md

# 2. Add paper link
uv run scripts/paper_manager.py link \
  --repo-id "username/model-name" \
  --repo-type "model" \
  --arxiv-id "2301.12345" \
  --citation "Full citation for the paper"

# The script will:
# - Add YAML metadata if missing
# - Insert arXiv link in README
# - Add formatted citation
# - Preserve existing content

Best Practices

  1. Paper Indexing

    • Index papers as soon as they're published on arXiv
    • Include full citation information in model/dataset cards
    • Use consistent paper references across related repositories
  2. Metadata Management

    • Add YAML frontmatter to all model/dataset cards
    • Include proper licensing information
    • Tag with relevant task categories and domains
  3. Authorship

    • Claim authorship on papers where you're listed as author
    • Use institutional email addresses for verification
    • Keep paper visibility settings updated
  4. Repository Linking

    • Link papers to all relevant models, datasets, and Spaces
    • Include paper context in README descriptions
    • Add BibTeX citations for easy reference
  5. Research Articles

    • Use templates consistently within projects
    • Include code and data links in papers
    • Generate web-friendly HTML versions for sharing

Advanced Usage

Batch Link Papers:

# Link multiple papers to one repository
for arxiv_id in "2301.12345" "2302.67890" "2303.11111"; do
  uv run scripts/paper_manager.py link \
    --repo-id "username/model-name" \
    --repo-type "model" \
    --arxiv-id "$arxiv_id"
done

Extract Paper Info:

# Get paper metadata from arXiv
uv run scripts/paper_manager.py info \
  --arxiv-id "2301.12345" \
  --format "json"

Generate Citation:

# Create BibTeX citation
uv run scripts/paper_manager.py citation \
  --arxiv-id "2301.12345" \
  --format "bibtex"

Validate Links:

# Check all paper links in a repository
uv run scripts/paper_manager.py validate \
  --repo-id "username/model-name" \
  --repo-type "model"

Error Handling

  • Paper Not Found: arXiv ID doesn't exist or isn't indexed yet
  • Permission Denied: HF_TOKEN lacks write access to repository
  • Invalid YAML: Malformed metadata in README frontmatter
  • Authorship Failed: Email doesn't match paper author records
  • Already Claimed: Another user has claimed authorship
  • Rate Limiting: Too many API requests in short time

Troubleshooting

Issue: "Paper not found on Hugging Face"

  • Solution: Visit hf.co/papers/{arxiv-id} to trigger indexing

Issue: "Authorship claim not verified"

  • Solution: Wait for admin review or contact HF support with proof

Issue: "arXiv tag not appearing"

  • Solution: Ensure README includes proper arXiv URL format

Issue: "Cannot link to repository"

  • Solution: Verify HF_TOKEN has write permissions

Issue: "Template rendering errors"

  • Solution: Check markdown syntax and YAML frontmatter format

Resources and References

Integration with tfrere's Research Template

This skill complements tfrere's research article template by providing:

  • Automated paper indexing workflows
  • Repository linking capabilities
  • Metadata management tools
  • Citation generation utilities

You can use tfrere's template for writing, then use this skill to publish and link the paper on Hugging Face Hub.

Common Patterns

Pattern 1: New Paper Publication

# Write → Publish → Index → Link
uv run scripts/paper_manager.py create --template modern --output paper.md
# (Submit to arXiv)
uv run scripts/paper_manager.py index --arxiv-id "2301.12345"
uv run scripts/paper_manager.py link --repo-id "user/model" --arxiv-id "2301.12345"

Pattern 2: Existing Paper Discovery

# Search → Check → Link
uv run scripts/paper_manager.py search --query "transformers"
uv run scripts/paper_manager.py check --arxiv-id "2301.12345"
uv run scripts/paper_manager.py link --repo-id "user/model" --arxiv-id "2301.12345"

Pattern 3: Author Portfolio Management

# Claim → Verify → Organize
uv run scripts/paper_manager.py claim --arxiv-id "2301.12345"
uv run scripts/paper_manager.py list-my-papers
uv run scripts/paper_manager.py toggle-visibility --arxiv-id "2301.12345" --show true

API Integration

Python Script Example:

from scripts.paper_manager import PaperManager

pm = PaperManager(hf_token="your_token")

# Index paper
pm.index_paper("2301.12345")

# Link to model
pm.link_paper(
    repo_id="username/model",
    repo_type="model",
    arxiv_id="2301.12345",
    citation="Full citation text"
)

# Check status
status = pm.check_paper("2301.12345")
print(status)

Future Enhancements

Planned features for future versions:

  • Support for non-arXiv papers (conference proceedings, journals)
  • Automatic citation formatting from DOI
  • Paper comparison and versioning tools
  • Collaborative paper writing features
  • Integration with LaTeX workflows
  • Automated figure and table extraction
  • Paper metrics and impact tracking
用于查询和阅读Hugging Face论文页面,通过API获取结构化元数据(作者、模型、数据集等)或Markdown格式内容。适用于用户提供HF/arXiv链接、ID或请求总结分析AI论文时。
用户分享Hugging Face论文页面URL 用户分享arXiv URL或ID 用户请求总结、解释或分析AI研究论文
skills/huggingface_skills/huggingface-papers/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-papers -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-papers",
    "description": "Look up and read Hugging Face paper pages in markdown, and use the papers API for structured metadata such as authors, linked models\/datasets\/spaces, Github repo and project page. Use when the user shares a Hugging Face paper page URL, an arXiv URL or ID, or asks to summarize, explain, or analyze an AI research paper."
}

Hugging Face Paper Pages

Hugging Face Paper pages (hf.co/papers) is a platform built on top of arXiv (arxiv.org), specifically for research papers in the field of artificial intelligence (AI) and computer science. Hugging Face users can submit their paper at hf.co/papers/submit, which features it on the Daily Papers feed (hf.co/papers). Each day, users can upvote papers and comment on papers. Each paper page allows authors to:

  • claim their paper (by clicking their name on the authors field). This makes the paper page appear on their Hugging Face profile.
  • link the associated model checkpoints, datasets and Spaces by including the HF paper or arXiv URL in the model card, dataset card or README of the Space
  • link the Github repository and/or project page URLs
  • link the HF organization. This also makes the paper page appear on the Hugging Face organization page.

Whenever someone mentions a HF paper or arXiv abstract/PDF URL in a model card, dataset card or README of a Space repository, the paper will be automatically indexed. Note that not all papers indexed on Hugging Face are also submitted to daily papers. The latter is more a manner of promoting a research paper. Papers can only be submitted to daily papers up until 14 days after their publication date on arXiv.

The Hugging Face team has built an easy-to-use API to interact with paper pages. Content of the papers can be fetched as markdown, or structured metadata can be returned such as author names, linked models/datasets/spaces, linked Github repo and project page.

When to Use

  • User shares a Hugging Face paper page URL (e.g. https://huggingface.co/papers/2602.08025)
  • User shares a Hugging Face markdown paper page URL (e.g. https://huggingface.co/papers/2602.08025.md)
  • User shares an arXiv URL (e.g. https://arxiv.org/abs/2602.08025 or https://arxiv.org/pdf/2602.08025)
  • User mentions a arXiv ID (e.g. 2602.08025)
  • User asks you to summarize, explain, or analyze an AI research paper

Parsing the paper ID

It's recommended to parse the paper ID (arXiv ID) from whatever the user provides:

Input Paper ID
https://huggingface.co/papers/2602.08025 2602.08025
https://huggingface.co/papers/2602.08025.md 2602.08025
https://arxiv.org/abs/2602.08025 2602.08025
https://arxiv.org/pdf/2602.08025 2602.08025
2602.08025v1 2602.08025v1
2602.08025 2602.08025

This allows you to provide the paper ID into any of the hub API endpoints mentioned below.

Fetch the paper page as markdown

The content of a paper can be fetched as markdown like so:

curl -s "https://huggingface.co/papers/{PAPER_ID}.md"

This should return the Hugging Face paper page as markdown. This relies on the HTML version of the paper at https://arxiv.org/html/{PAPER_ID}.

There are 2 exceptions:

  • Not all arXiv papers have an HTML version. If the HTML version of the paper does not exist, then the content falls back to the HTML of the Hugging Face paper page.
  • If it results in a 404, it means the paper is not yet indexed on hf.co/papers. See Error handling for info.

Alternatively, you can request markdown from the normal paper page URL, like so:

curl -s -H "Accept: text/markdown" "https://huggingface.co/papers/{PAPER_ID}"

Paper Pages API Endpoints

All endpoints use the base URL https://huggingface.co.

Get structured metadata

Fetch the paper metadata as JSON using the Hugging Face REST API:

curl -s "https://huggingface.co/api/papers/{PAPER_ID}"

This returns structured metadata that can include:

  • authors (names and Hugging Face usernames, in case they have claimed the paper)
  • media URLs (uploaded when submitting the paper to Daily Papers)
  • summary (abstract) and AI-generated summary
  • project page and GitHub repository
  • organization and engagement metadata (number of upvotes)

To find models linked to the paper, use:

curl https://huggingface.co/api/models?filter=arxiv:{PAPER_ID}

To find datasets linked to the paper, use:

curl https://huggingface.co/api/datasets?filter=arxiv:{PAPER_ID}

To find spaces linked to the paper, use:

curl https://huggingface.co/api/spaces?filter=arxiv:{PAPER_ID}

Claim paper authorship

Claim authorship of a paper for a Hugging Face user:

curl "https://huggingface.co/api/settings/papers/claim" \
  --request POST \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer $HF_TOKEN" \
  --data '{
    "paperId": "{PAPER_ID}",
    "claimAuthorId": "{AUTHOR_ENTRY_ID}",
    "targetUserId": "{USER_ID}"
  }'
  • Endpoint: POST /api/settings/papers/claim
  • Body:
    • paperId (string, required): arXiv paper identifier being claimed
    • claimAuthorId (string): author entry on the paper being claimed, 24-char hex ID
    • targetUserId (string): HF user who should receive the claim, 24-char hex ID
  • Response: paper authorship claim result, including the claimed paper ID

Get daily papers

Fetch the Daily Papers feed:

curl -s -H "Authorization: Bearer $HF_TOKEN" \
  "https://huggingface.co/api/daily_papers?p=0&limit=20&date=2017-07-21&sort=publishedAt"
  • Endpoint: GET /api/daily_papers
  • Query parameters:
    • p (integer): page number
    • limit (integer): number of results, between 1 and 100
    • date (string): RFC 3339 full-date, for example 2017-07-21
    • week (string): ISO week, for example 2024-W03
    • month (string): month value, for example 2024-01
    • submitter (string): filter by submitter
    • sort (enum): publishedAt or trending
  • Response: list of daily papers

List papers

List arXiv papers sorted by published date:

curl -s -H "Authorization: Bearer $HF_TOKEN" \
  "https://huggingface.co/api/papers?cursor={CURSOR}&limit=20"
  • Endpoint: GET /api/papers
  • Query parameters:
    • cursor (string): pagination cursor
    • limit (integer): number of results, between 1 and 100
  • Response: list of papers

Search papers

Perform hybrid semantic and full-text search on papers:

curl -s -H "Authorization: Bearer $HF_TOKEN" \
  "https://huggingface.co/api/papers/search?q=vision+language&limit=20"

This searches over the paper title, authors, and content.

  • Endpoint: GET /api/papers/search
  • Query parameters:
    • q (string): search query, max length 250
    • limit (integer): number of results, between 1 and 120
  • Response: matching papers

Index a paper

Insert a paper from arXiv by ID. If the paper is already indexed, only its authors can re-index it:

curl "https://huggingface.co/api/papers/index" \
  --request POST \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer $HF_TOKEN" \
  --data '{
    "arxivId": "{ARXIV_ID}"
  }'
  • Endpoint: POST /api/papers/index
  • Body:
    • arxivId (string, required): arXiv ID to index, for example 2301.00001
  • Pattern: ^\d{4}\.\d{4,5}$
  • Response: empty JSON object on success

Update paper links

Update the project page, GitHub repository, or submitting organization for a paper. The requester must be the paper author, the Daily Papers submitter, or a papers admin:

curl "https://huggingface.co/api/papers/{PAPER_OBJECT_ID}/links" \
  --request POST \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer $HF_TOKEN" \
  --data '{
    "projectPage": "https://example.com",
    "githubRepo": "https://github.com/org/repo",
    "organizationId": "{ORGANIZATION_ID}"
  }'
  • Endpoint: POST /api/papers/{paperId}/links
  • Path parameters:
    • paperId (string, required): Hugging Face paper object ID
  • Body:
    • githubRepo (string, nullable): GitHub repository URL
    • organizationId (string, nullable): organization ID, 24-char hex ID
    • projectPage (string, nullable): project page URL
  • Response: empty JSON object on success

Error Handling

  • 404 on https://huggingface.co/papers/{PAPER_ID} or md endpoint: the paper is not indexed on Hugging Face paper pages yet.
  • 404 on /api/papers/{PAPER_ID}: the paper may not be indexed on Hugging Face paper pages yet.
  • Paper ID not found: verify the extracted arXiv ID, including any version suffix

Fallbacks

If the Hugging Face paper page does not contain enough detail for the user's question:

  • Check the regular paper page at https://huggingface.co/papers/{PAPER_ID}
  • Fall back to the arXiv page or PDF for the original source:
    • https://arxiv.org/abs/{PAPER_ID}
    • https://arxiv.org/pdf/{PAPER_ID}

Notes

  • No authentication is required for public paper pages.
  • Write endpoints such as claim authorship, index paper, and update paper links require Authorization: Bearer $HF_TOKEN.
  • Prefer the .md endpoint for reliable machine-readable output.
  • Prefer /api/papers/{PAPER_ID} when you need structured JSON fields instead of page markdown.
用于生成可复用的命令行脚本,通过Hugging Face API获取、丰富或处理数据。支持API直连与hf CLI,强调使用HF_TOKEN认证、管道组合及提供--help文档,适用于自动化任务及复杂数据链式处理。
需要构建访问Hugging Face数据的工具或脚本 任务涉及Hugging Face API的调用、数据获取或处理 需要自动化或重复执行基于HF数据的工作流
skills/huggingface_skills/huggingface-tool-builder/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-tool-builder -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-tool-builder",
    "description": "Use this skill when the user wants to build tool\/scripts or achieve a task where using data from the Hugging Face API would help. This is especially useful when chaining or combining API calls or the task will be repeated\/automated. This Skill creates a reusable script to fetch, enrich or process data."
}

Hugging Face API Tool Builder

Your purpose is now is to create reusable command line scripts and utilities for using the Hugging Face API, allowing chaining, piping and intermediate processing where helpful. You can access the API directly, as well as use the hf command line tool. Model and Dataset cards can be accessed from repositories directly.

Script Rules

Make sure to follow these rules:

  • Scripts must take a --help command line argument to describe their inputs and outputs
  • Non-destructive scripts should be tested before handing over to the User
  • Shell scripts are preferred, but use Python or TSX if complexity or user need requires it.
  • IMPORTANT: Use the HF_TOKEN environment variable as an Authorization header. For example: curl -H "Authorization: Bearer ${HF_TOKEN}" https://huggingface.co/api/. This provides higher rate limits and appropriate authorization for data access.
  • Investigate the shape of the API results before commiting to a final design; make use of piping and chaining where composability would be an advantage - prefer simple solutions where possible.
  • Share usage examples once complete.

Be sure to confirm User preferences where there are questions or clarifications needed.

Sample Scripts

Paths below are relative to this skill directory.

Reference examples:

  • references/hf_model_papers_auth.sh — uses HF_TOKEN automatically and chains trending → model metadata → model card parsing with fallbacks; it demonstrates multi-step API usage plus auth hygiene for gated/private content.
  • references/find_models_by_paper.sh — optional HF_TOKEN usage via --token, consistent authenticated search, and a retry path when arXiv-prefixed searches are too narrow; it shows resilient query strategy and clear user-facing help.
  • references/hf_model_card_frontmatter.sh — uses the hf CLI to download model cards, extracts YAML frontmatter, and emits NDJSON summaries (license, pipeline tag, tags, gated prompt flag) for easy filtering.

Baseline examples (ultra-simple, minimal logic, raw JSON output with HF_TOKEN header):

  • references/baseline_hf_api.sh — bash
  • references/baseline_hf_api.py — python
  • references/baseline_hf_api.tsx — typescript executable

Composable utility (stdin → NDJSON):

  • references/hf_enrich_models.sh — reads model IDs from stdin, fetches metadata per ID, emits one JSON object per line for streaming pipelines.

Composability through piping (shell-friendly JSON output):

  • references/baseline_hf_api.sh 25 | jq -r '.[].id' | references/hf_enrich_models.sh | jq -s 'sort_by(.downloads) | reverse | .[:10]'
  • references/baseline_hf_api.sh 50 | jq '[.[] | {id, downloads}] | sort_by(.downloads) | reverse | .[:10]'
  • printf '%s\n' openai/gpt-oss-120b meta-llama/Meta-Llama-3.1-8B | references/hf_model_card_frontmatter.sh | jq -s 'map({id, license, has_extra_gated_prompt})'

High Level Endpoints

The following are the main API endpoints available at https://huggingface.co

/api/datasets
/api/models
/api/spaces
/api/collections
/api/daily_papers
/api/notifications
/api/settings
/api/whoami-v2
/api/trending
/oauth/userinfo

Accessing the API

The API is documented with the OpenAPI standard at https://huggingface.co/.well-known/openapi.json.

IMPORTANT: DO NOT ATTEMPT to read https://huggingface.co/.well-known/openapi.json directly as it is too large to process.

IMPORTANT Use jq to query and extract relevant parts. For example,

Command to Get All 160 Endpoints

curl -s "https://huggingface.co/.well-known/openapi.json" | jq '.paths | keys | sort'

Model Search Endpoint Details

curl -s "https://huggingface.co/.well-known/openapi.json" | jq '.paths["/api/models"]'

You can also query endpoints to see the shape of the data. When doing so constrain results to low numbers to make them easy to process, yet representative.

Using the HF command line tool

The hf command line tool gives you further access to Hugging Face repository content and infrastructure.

❯ hf --help
Usage: hf [OPTIONS] COMMAND [ARGS]...

  Hugging Face Hub CLI

Options:
  --help                Show this message and exit.

Commands:
  auth                 Manage authentication (login, logout, etc.).
  buckets              Commands to interact with buckets.
  cache                Manage local cache directory.
  collections          Interact with collections on the Hub.
  datasets             Interact with datasets on the Hub.
  discussions          Manage discussions and pull requests on the Hub.
  download             Download files from the Hub.
  endpoints            Manage Hugging Face Inference Endpoints.
  env                  Print information about the environment.
  extensions           Manage hf CLI extensions.
  jobs                 Run and manage Jobs on the Hub.
  models               Interact with models on the Hub.
  papers               Interact with papers on the Hub.
  repos                Manage repos on the Hub.
  skills               Manage skills for AI assistants.
  spaces               Interact with spaces on the Hub.
  sync                 Sync files between local directory and a bucket.
  upload               Upload a file or a folder to the Hub.
  upload-large-folder  Upload a large folder to the Hub.
  version              Print information about the hf version.
  webhooks             Manage webhooks on the Hub.

The hf CLI command has replaced the now deprecated huggingface-cli command.

用于ML训练实验的跟踪与可视化,支持通过Python API记录指标、触发诊断警报及CLI检索数据。具备实时仪表盘、HF Space同步及JSON自动化输出功能。
在训练脚本中记录损失或准确率等指标 配置训练过程中的异常警报(如梯度爆炸) 查询历史训练数据或警报日志
skills/huggingface_skills/huggingface-trackio/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-trackio -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-trackio",
    "description": "Track and visualize ML training experiments with Trackio. Use when logging metrics during training (Python API), firing alerts for training diagnostics, or retrieving\/analyzing logged metrics (CLI). Supports real-time dashboard visualization, alerts with webhooks, HF Space syncing, and JSON output for automation."
}

Trackio - Experiment Tracking for ML Training

Trackio is an experiment tracking library for logging and visualizing ML training metrics. It syncs to Hugging Face Spaces for real-time monitoring dashboards.

Three Interfaces

Task Interface Reference
Logging metrics during training Python API references/logging_metrics.md
Firing alerts for training diagnostics Python API references/alerts.md
Retrieving metrics & alerts after/during training CLI references/retrieving_metrics.md

When to Use Each

Python API → Logging

Use import trackio in your training scripts to log metrics:

  • Initialize tracking with trackio.init()
  • Log metrics with trackio.log() or use TRL's report_to="trackio"
  • Finalize with trackio.finish()

Key concept: For remote/cloud training, pass space_id — metrics sync to a Space dashboard so they persist after the instance terminates.

→ See references/logging_metrics.md for setup, TRL integration, and configuration options.

Python API → Alerts

Insert trackio.alert() calls in training code to flag important events — like inserting print statements for debugging, but structured and queryable:

  • trackio.alert(title="...", level=trackio.AlertLevel.WARN) — fire an alert
  • Three severity levels: INFO, WARN, ERROR
  • Alerts are printed to terminal, stored in the database, shown in the dashboard, and optionally sent to webhooks (Slack/Discord)

Key concept for LLM agents: Alerts are the primary mechanism for autonomous experiment iteration. An agent should insert alerts into training code for diagnostic conditions (loss spikes, NaN gradients, low accuracy, training stalls). Since alerts are printed to the terminal, an agent that is watching the training script's output will see them automatically. For background or detached runs, the agent can poll via CLI instead.

→ See references/alerts.md for the full alerts API, webhook setup, and autonomous agent workflows.

CLI → Retrieving

Use the trackio command to query logged metrics and alerts:

  • trackio list projects/runs/metrics — discover what's available
  • trackio get project/run/metric — retrieve summaries and values
  • trackio list alerts --project <name> --json — retrieve alerts
  • trackio show — launch the dashboard
  • trackio sync — sync to HF Space

Key concept: Add --json for programmatic output suitable for automation and LLM agents.

→ See references/retrieving_metrics.md for all commands, workflows, and JSON output formats.

Minimal Logging Setup

import trackio

trackio.init(project="my-project", space_id="username/trackio")
trackio.log({"loss": 0.1, "accuracy": 0.9})
trackio.log({"loss": 0.09, "accuracy": 0.91})
trackio.finish()

Minimal Retrieval

trackio list projects --json
trackio get metric --project my-project --run my-run --metric loss --json

Autonomous ML Experiment Workflow

When running experiments autonomously as an LLM agent, the recommended workflow is:

  1. Set up training with alerts — insert trackio.alert() calls for diagnostic conditions
  2. Launch training — run the script in the background
  3. Poll for alerts — use trackio list alerts --project <name> --json --since <timestamp> to check for new alerts
  4. Read metrics — use trackio get metric ... to inspect specific values
  5. Iterate — based on alerts and metrics, stop the run, adjust hyperparameters, and launch a new run
import trackio

trackio.init(project="my-project", config={"lr": 1e-4})

for step in range(num_steps):
    loss = train_step()
    trackio.log({"loss": loss, "step": step})

    if step > 100 and loss > 5.0:
        trackio.alert(
            title="Loss divergence",
            text=f"Loss {loss:.4f} still high after {step} steps",
            level=trackio.AlertLevel.ERROR,
        )
    if step > 0 and abs(loss) < 1e-8:
        trackio.alert(
            title="Vanishing loss",
            text="Loss near zero — possible gradient collapse",
            level=trackio.AlertLevel.WARN,
        )

trackio.finish()

Then poll from a separate terminal/process:

trackio list alerts --project my-project --json --since "2025-01-01T00:00:00"
在JS/TS中直接运行Transformer.js模型,支持NLP、CV、音频及多模态任务。无需Python后端,兼容浏览器和Node/Bun/Deno环境,提供Pipeline API简化推理流程,支持WebGPU加速及内存管理。
需要在JavaScript或TypeScript环境中执行机器学习模型推理 希望在浏览器端或无Python后端的服务器端运行NLP、图像识别或语音处理任务 需要构建客户端AI应用,如文本分类、翻译、图像检测或语音转文字
skills/huggingface_skills/transformers-js/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill transformers-js -g -y
SKILL.md
Frontmatter
{
    "name": "transformers-js",
    "license": "Apache-2.0",
    "metadata": {
        "author": "huggingface",
        "version": "4.x",
        "category": "machine-learning",
        "repository": "https:\/\/github.com\/huggingface\/transformers.js"
    },
    "description": "Use Transformers.js to run state-of-the-art machine learning models directly in JavaScript\/TypeScript. Supports NLP (text classification, translation, summarization), computer vision (image classification, object detection), audio (speech recognition, audio classification), and multimodal tasks. Works in browsers and server-side runtimes (Node.js, Bun, Deno) with WebGPU\/WASM using pre-trained models from Hugging Face Hub.",
    "compatibility": "Requires Node.js 18+ (or compatible Bun\/Deno runtime) or modern browser with ES modules support. WebGPU requires runtime and hardware support; WASM is the broad fallback. Internet access is needed for downloading models from Hugging Face Hub (optional if using local models)."
}

Transformers.js - Machine Learning for JavaScript

Transformers.js enables running state-of-the-art machine learning models directly in JavaScript across browsers and server-side runtimes (Node.js, Bun, Deno), with no Python server required.

When to Use This Skill

Use this skill when you need to:

  • Run ML models for text analysis, generation, or translation in JavaScript
  • Perform image classification, object detection, or segmentation
  • Implement speech recognition or audio processing
  • Build multimodal AI applications (text-to-image, image-to-text, etc.)
  • Run models client-side in the browser without a backend

Installation

NPM Installation

npm install @huggingface/transformers

Browser Usage (CDN)

<script type="module">
  import { pipeline } from 'https://cdn.jsdelivr.net/npm/@huggingface/transformers';
</script>

Core Concepts

1. Pipeline API

The pipeline API is the easiest way to use models. It groups together preprocessing, model inference, and postprocessing:

import { pipeline } from '@huggingface/transformers';

// Create a pipeline for a specific task
const pipe = await pipeline('sentiment-analysis');

// Use the pipeline
const result = await pipe('I love transformers!');
// Output: [{ label: 'POSITIVE', score: 0.999817686 }]

// IMPORTANT: Always dispose when done to free memory
await pipe.dispose();

⚠️ Memory Management: All pipelines must be disposed with pipe.dispose() when finished to prevent memory leaks. See examples in Code Examples for cleanup patterns across different environments.

2. Model Selection

You can specify a custom model as the second argument:

const pipe = await pipeline(
  'sentiment-analysis',
  'Xenova/bert-base-multilingual-uncased-sentiment'
);

Finding Models:

Browse available Transformers.js models on Hugging Face Hub:

Tip: Filter by task type, sort by trending/downloads, and check model cards for performance metrics and usage examples.

3. Device Selection

Choose where to run the model:

// Run on CPU (default for WASM)
const pipe = await pipeline('sentiment-analysis', 'model-id');

// Run on GPU (WebGPU)
const pipe = await pipeline('sentiment-analysis', 'model-id', {
  device: 'webgpu',
});

4. Quantization Options

Control model precision vs. performance:

// Use quantized model (faster, smaller)
const pipe = await pipeline('sentiment-analysis', 'model-id', {
  dtype: 'q4',  // Options: 'fp32', 'fp16', 'q8', 'q4'
});

Supported Tasks

Note: All examples below show basic usage.

Natural Language Processing

Text Classification

const classifier = await pipeline('text-classification');
const result = await classifier('This movie was amazing!');

Named Entity Recognition (NER)

const ner = await pipeline('token-classification');
const entities = await ner('My name is John and I live in New York.');

Question Answering

const qa = await pipeline('question-answering');
const answer = await qa({
  question: 'What is the capital of France?',
  context: 'Paris is the capital and largest city of France.'
});

Text Generation

const generator = await pipeline('text-generation', 'onnx-community/gemma-3-270m-it-ONNX');
const text = await generator('Once upon a time', {
  max_new_tokens: 100,
  temperature: 0.7
});

For streaming and chat: See Text Generation Guide for:

  • Streaming token-by-token output with TextStreamer
  • Chat/conversation format with system/user/assistant roles
  • Generation parameters (temperature, top_k, top_p)
  • Browser and Node.js examples
  • React components and API endpoints

Translation

const translator = await pipeline('translation', 'Xenova/nllb-200-distilled-600M');
const output = await translator('Hello, how are you?', {
  src_lang: 'eng_Latn',
  tgt_lang: 'fra_Latn'
});

Summarization

const summarizer = await pipeline('summarization');
const summary = await summarizer(longText, {
  max_length: 100,
  min_length: 30
});

Zero-Shot Classification

const classifier = await pipeline('zero-shot-classification');
const result = await classifier('This is a story about sports.', ['politics', 'sports', 'technology']);

Computer Vision

Image Classification

const classifier = await pipeline('image-classification');
const result = await classifier('https://example.com/image.jpg');
// Or with local file
const result = await classifier(imageUrl);

Object Detection

const detector = await pipeline('object-detection');
const objects = await detector('https://example.com/image.jpg');
// Returns: [{ label: 'person', score: 0.95, box: { xmin, ymin, xmax, ymax } }, ...]

Image Segmentation

const segmenter = await pipeline('image-segmentation');
const segments = await segmenter('https://example.com/image.jpg');

Depth Estimation

const depthEstimator = await pipeline('depth-estimation');
const depth = await depthEstimator('https://example.com/image.jpg');

Zero-Shot Image Classification

const classifier = await pipeline('zero-shot-image-classification');
const result = await classifier('image.jpg', ['cat', 'dog', 'bird']);

Audio Processing

Automatic Speech Recognition

const transcriber = await pipeline('automatic-speech-recognition');
const result = await transcriber('audio.wav');
// Returns: { text: 'transcribed text here' }

Audio Classification

const classifier = await pipeline('audio-classification');
const result = await classifier('audio.wav');

Text-to-Speech

const synthesizer = await pipeline('text-to-speech', 'Xenova/speecht5_tts');
const audio = await synthesizer('Hello, this is a test.', {
  speaker_embeddings: speakerEmbeddings
});

Multimodal

Image-to-Text (Image Captioning)

const captioner = await pipeline('image-to-text');
const caption = await captioner('image.jpg');

Document Question Answering

const docQA = await pipeline('document-question-answering');
const answer = await docQA('document-image.jpg', 'What is the total amount?');

Zero-Shot Object Detection

const detector = await pipeline('zero-shot-object-detection');
const objects = await detector('image.jpg', ['person', 'car', 'tree']);

Feature Extraction (Embeddings)

const extractor = await pipeline('feature-extraction');
const embeddings = await extractor('This is a sentence to embed.');
// Returns: tensor of shape [1, sequence_length, hidden_size]

// For sentence embeddings (mean pooling)
const extractor = await pipeline('feature-extraction', 'onnx-community/all-MiniLM-L6-v2-ONNX');
const embeddings = await extractor('Text to embed', { pooling: 'mean', normalize: true });

Finding and Choosing Models

Browsing the Hugging Face Hub

Discover compatible Transformers.js models on Hugging Face Hub:

Base URL (all models):

https://huggingface.co/models?library=transformers.js&sort=trending

Filter by task using the pipeline_tag parameter:

Task URL
Text Generation https://huggingface.co/models?pipeline_tag=text-generation&library=transformers.js&sort=trending
Text Classification https://huggingface.co/models?pipeline_tag=text-classification&library=transformers.js&sort=trending
Translation https://huggingface.co/models?pipeline_tag=translation&library=transformers.js&sort=trending
Summarization https://huggingface.co/models?pipeline_tag=summarization&library=transformers.js&sort=trending
Question Answering https://huggingface.co/models?pipeline_tag=question-answering&library=transformers.js&sort=trending
Image Classification https://huggingface.co/models?pipeline_tag=image-classification&library=transformers.js&sort=trending
Object Detection https://huggingface.co/models?pipeline_tag=object-detection&library=transformers.js&sort=trending
Image Segmentation https://huggingface.co/models?pipeline_tag=image-segmentation&library=transformers.js&sort=trending
Speech Recognition https://huggingface.co/models?pipeline_tag=automatic-speech-recognition&library=transformers.js&sort=trending
Audio Classification https://huggingface.co/models?pipeline_tag=audio-classification&library=transformers.js&sort=trending
Image-to-Text https://huggingface.co/models?pipeline_tag=image-to-text&library=transformers.js&sort=trending
Feature Extraction https://huggingface.co/models?pipeline_tag=feature-extraction&library=transformers.js&sort=trending
Zero-Shot Classification https://huggingface.co/models?pipeline_tag=zero-shot-classification&library=transformers.js&sort=trending

Sort options:

  • &sort=trending - Most popular recently
  • &sort=downloads - Most downloaded overall
  • &sort=likes - Most liked by community
  • &sort=modified - Recently updated

Choosing the Right Model

Consider these factors when selecting a model:

1. Model Size

  • Small (< 100MB): Fast, suitable for browsers, limited accuracy
  • Medium (100MB - 500MB): Balanced performance, good for most use cases
  • Large (> 500MB): High accuracy, slower, better for Node.js or powerful devices

2. Quantization Models are often available in different quantization levels:

  • fp32 - Full precision (largest, most accurate)
  • fp16 - Half precision (smaller, still accurate)
  • q8 - 8-bit quantized (much smaller, slight accuracy loss)
  • q4 - 4-bit quantized (smallest, noticeable accuracy loss)

3. Task Compatibility Check the model card for:

  • Supported tasks (some models support multiple tasks)
  • Input/output formats
  • Language support (multilingual vs. English-only)
  • License restrictions

4. Performance Metrics Model cards typically show:

  • Accuracy scores
  • Benchmark results
  • Inference speed
  • Memory requirements

Example: Finding a Text Generation Model

// 1. Visit: https://huggingface.co/models?pipeline_tag=text-generation&library=transformers.js&sort=trending

// 2. Browse and select a model (e.g., onnx-community/gemma-3-270m-it-ONNX)

// 3. Check model card for:
//    - Model size: ~270M parameters
//    - Quantization: q4 available
//    - Language: English
//    - Use case: Instruction-following chat

// 4. Use the model:
import { pipeline } from '@huggingface/transformers';

const generator = await pipeline(
  'text-generation',
  'onnx-community/gemma-3-270m-it-ONNX',
  { dtype: 'q4' } // Use quantized version for faster inference
);

const output = await generator('Explain quantum computing in simple terms.', {
  max_new_tokens: 100
});

await generator.dispose();

Tips for Model Selection

  1. Start Small: Test with a smaller model first, then upgrade if needed
  2. Check ONNX Support: Ensure the model has ONNX files (look for onnx folder in model repo)
  3. Read Model Cards: Model cards contain usage examples, limitations, and benchmarks
  4. Test Locally: Benchmark inference speed and memory usage in your environment
  5. Filter by Library: Use library=transformers.js to find compatible models: https://huggingface.co/models?library=transformers.js
  6. Version Pin: Use specific git commits in production for stability:
    const pipe = await pipeline('task', 'model-id', { revision: 'abc123' });
    

Advanced Configuration

Environment Configuration (env)

The env object provides comprehensive control over Transformers.js execution, caching, and model loading.

Quick Overview:

import { env, LogLevel } from '@huggingface/transformers';

// View version
console.log(env.version); // e.g., '4.x'

// Common settings
env.allowRemoteModels = true;  // Load from Hugging Face Hub
env.allowLocalModels = false;  // Load from file system
env.localModelPath = '/models/'; // Local model directory
env.useFSCache = true;         // Cache models on disk (Node.js)
env.useBrowserCache = true;    // Cache models in browser
env.cacheDir = './.cache';     // Cache directory location
// Optional: override logging level (default is LogLevel.WARNING)
env.logLevel = LogLevel.INFO;

// Optional: custom fetch for auth headers, retries, abort signals, etc.
env.fetch = (url, options) =>
  fetch(url, {
    ...options,
    headers: {
      ...options?.headers,
      Authorization: `Bearer ${HF_TOKEN}`,
    },
  });

Configuration Patterns:

// Development: Fast iteration with remote models
env.allowRemoteModels = true;
env.useFSCache = true;

// Production: Local models only
env.allowRemoteModels = false;
env.allowLocalModels = true;
env.localModelPath = '/app/models/';

// Custom CDN
env.remoteHost = 'https://cdn.example.com/models';

// Disable caching (testing)
env.useFSCache = false;
env.useBrowserCache = false;

For complete documentation on all configuration options, caching strategies, cache management, pre-downloading models, and more, see:

Configuration Reference

ModelRegistry (v4)

ModelRegistry gives you visibility and control over model assets before loading a pipeline. Use it to estimate download size, check cache status, inspect available dtypes, and clear cached artifacts for a specific task/model/options tuple.

import { ModelRegistry } from '@huggingface/transformers';

const task = 'feature-extraction';
const modelId = 'onnx-community/all-MiniLM-L6-v2-ONNX';
const modelOptions = { dtype: 'fp32' };

// List required files for this pipeline
const files = await ModelRegistry.get_pipeline_files(task, modelId, modelOptions);

// Check if assets are already cached
const cached = await ModelRegistry.is_pipeline_cached(task, modelId, modelOptions);

// Inspect precision formats available for this model
const dtypes = await ModelRegistry.get_available_dtypes(modelId);

console.log({ files: files.length, cached, dtypes });

For production patterns and full API coverage, see ModelRegistry Reference.

Standalone Tokenization (@huggingface/tokenizers)

For tokenization-only workflows, use @huggingface/tokenizers. It is a separate lightweight package useful when you need fast tokenization/encoding without loading full model inference pipelines.

npm install @huggingface/tokenizers
import { Tokenizer } from '@huggingface/tokenizers';

Working with Tensors

import { AutoTokenizer, AutoModel } from '@huggingface/transformers';

// Load tokenizer and model separately for more control
const tokenizer = await AutoTokenizer.from_pretrained('bert-base-uncased');
const model = await AutoModel.from_pretrained('bert-base-uncased');

// Tokenize input
const inputs = await tokenizer('Hello world!');

// Run model
const outputs = await model(inputs);

Batch Processing

const classifier = await pipeline('sentiment-analysis');

// Process multiple texts
const results = await classifier([
  'I love this!',
  'This is terrible.',
  'It was okay.'
]);

Runtime-Specific Considerations

WebGPU Usage

WebGPU provides GPU acceleration in browsers and server-side runtimes (when supported):

const pipe = await pipeline('text-generation', 'onnx-community/gemma-3-270m-it-ONNX', {
  device: 'webgpu',
  dtype: 'fp32'
});

Note: Use webgpu when available and fall back to WASM/CPU when not supported in the current runtime.

WASM Performance

WASM is the most compatible execution backend across runtimes:

// Optimized for browsers with quantization
const pipe = await pipeline('sentiment-analysis', 'model-id', {
  dtype: 'q8'  // or 'q4' for even smaller size
});

Progress Tracking & Loading Indicators

Models can be large (ranging from a few MB to several GB) and consist of multiple files. Track download progress by passing a callback to the pipeline() function:

import { pipeline } from '@huggingface/transformers';

// Track progress for each file
const fileProgress = {};

function onProgress(info) {
  if (info.status === 'progress_total') {
    console.log(`Total: ${info.progress.toFixed(1)}%`);
    return;
  }

  console.log(`${info.status}: ${info.file ?? ''}`);
  
  if (info.status === 'progress') {
    fileProgress[info.file] = info.progress;
    console.log(`${info.file}: ${info.progress.toFixed(1)}%`);
  }
  
  if (info.status === 'done') {
    console.log(`✓ ${info.file} complete`);
  }
}

// Pass callback to pipeline
const classifier = await pipeline('sentiment-analysis', null, {
  progress_callback: onProgress
});

Progress Info Properties:

interface ProgressInfo {
  status: 'initiate' | 'download' | 'progress' | 'progress_total' | 'done' | 'ready';
  name: string;      // Model id or path
  file?: string;     // File being processed (per-file events)
  progress?: number; // Percentage (0-100, for 'progress' and 'progress_total')
  loaded?: number;   // Bytes downloaded (only for 'progress' status)
  total?: number;    // Total bytes (only for 'progress' status)
}

For complete examples including browser UIs, React components, CLI progress bars, and retry logic, see:

Pipeline Options - Progress Callback

Error Handling

try {
  const pipe = await pipeline('sentiment-analysis', 'model-id');
  const result = await pipe('text to analyze');
} catch (error) {
  if (error.message.includes('fetch')) {
    console.error('Model download failed. Check internet connection.');
  } else if (error.message.includes('ONNX')) {
    console.error('Model execution failed. Check model compatibility.');
  } else {
    console.error('Unknown error:', error);
  }
}

Performance Tips

  1. Reuse Pipelines: Create pipeline once, reuse for multiple inferences
  2. Use Quantization: Start with q8 or q4 for faster inference
  3. Batch Processing: Process multiple inputs together when possible
  4. Cache Models: Models are cached automatically (see Caching Reference for details on browser Cache API, Node.js filesystem cache, and custom implementations)
  5. WebGPU for Large Models: Use WebGPU for models that benefit from GPU acceleration
  6. Prune Context: For text generation, limit max_new_tokens to avoid memory issues
  7. Clean Up Resources: Call pipe.dispose() when done to free memory

Memory Management

IMPORTANT: Always call pipe.dispose() when finished to prevent memory leaks.

const pipe = await pipeline('sentiment-analysis');
const result = await pipe('Great product!');
await pipe.dispose();  // ✓ Free memory (100MB - several GB per model)

When to dispose:

  • Application shutdown or component unmount
  • Before loading a different model
  • After batch processing in long-running apps

Models consume significant memory and hold GPU/CPU resources. Disposal is critical for browser memory limits and server stability.

For detailed patterns (React cleanup, servers, browser), see Code Examples

Troubleshooting

Model Not Found

  • Verify model exists on Hugging Face Hub
  • Check model name spelling
  • Ensure model has ONNX files (look for onnx folder in model repo)

Memory Issues

  • Use smaller models or quantized versions (dtype: 'q4')
  • Reduce batch size
  • Limit sequence length with max_length

WebGPU Errors

  • Check browser compatibility (Chrome 113+, Edge 113+)
  • Try dtype: 'fp16' if fp32 fails
  • Fall back to WASM if WebGPU unavailable

Reference Documentation

This Skill

Official Transformers.js

Best Practices

  1. Always Dispose Pipelines: Call pipe.dispose() when done - critical for preventing memory leaks
  2. Start with Pipelines: Use the pipeline API unless you need fine-grained control
  3. Test Locally First: Test models with small inputs before deploying
  4. Monitor Model Sizes: Be aware of model download sizes for web applications
  5. Handle Loading States: Show progress indicators for better UX
  6. Version Pin: Pin specific model versions for production stability
  7. Error Boundaries: Always wrap pipeline calls in try-catch blocks
  8. Progressive Enhancement: Provide fallbacks for unsupported browsers
  9. Reuse Models: Load once, use many times - don't recreate pipelines unnecessarily
  10. Graceful Shutdown: Dispose models on SIGTERM/SIGINT in servers

Quick Reference: Task IDs

Task Task ID
Text classification text-classification or sentiment-analysis
Token classification token-classification or ner
Question answering question-answering
Fill mask fill-mask
Summarization summarization
Translation translation
Text generation text-generation
Text-to-text generation text2text-generation
Zero-shot classification zero-shot-classification
Image classification image-classification
Image segmentation image-segmentation
Object detection object-detection
Depth estimation depth-estimation
Image-to-image image-to-image
Zero-shot image classification zero-shot-image-classification
Zero-shot object detection zero-shot-object-detection
Automatic speech recognition automatic-speech-recognition
Audio classification audio-classification
Text-to-speech text-to-speech or text-to-audio
Image-to-text image-to-text
Document question answering document-question-answering
Feature extraction feature-extraction
Sentence similarity sentence-similarity

This skill enables you to integrate state-of-the-art machine learning capabilities directly into JavaScript applications without requiring separate ML servers or Python environments.

指导404错误页面的设计,涵盖用户体验、转化恢复和品牌一致性。提供文案、导航结构、设计规范及SEO建议,帮助用户将错误页面转化为挽回访客和提升转化的机会。
创建或优化404页面 提及404错误、找不到页面、自定义404、404重定向 修复破碎链接页面
skills/kostja94_marketing-skills/404/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill 404-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "404-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit 404 error pages. Also use when the user mentions \"404 page,\" \"404 error,\" \"error page,\" \"page not found,\" \"broken link page,\" \"404 design,\" \"custom 404,\" \"404 redirect,\" \"404 page UX,\" or \"404 recovery.\" For sitewide page planning, use website-structure."
}

Pages: 404 Error Page

Guides 404 error page design for UX, conversion recovery, and brand consistency.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for brand voice, key pages, and Section 12 (Visual Identity).

Identify:

  1. Site structure: Key pages to link (homepage, popular pages, search)
  2. Brand tone: Friendly, professional, playful
  3. Conversion goal: Recover lost visitors, drive to key pages

Best Practices

Clear Error Messaging

  • User-friendly: Neutral message explaining the page wasn't found
  • Optional 404 display: Can show "404" but avoid blaming the user
  • Empathetic tone: Acknowledge the error gracefully; turn frustration into opportunity

Navigation and Redirection

Element Purpose
Site navigation Header/footer so users know they're still on your site
Search Help users find what they need
Popular pages Links to homepage, features, pricing, blog
Similar URLs Suggest corrections for common typos
Avoid auto-redirect Unless confident of user intent

Design and Branding

  • Consistent design: Same header, footer, colors as rest of site (brand-visual-generator)
  • Avoid confusion: Users should not think they've left your domain
  • Mobile responsive: Test on all devices

Conversion Opportunities

404 pages can drive conversions by:

  • Showcasing popular products or features
  • Featuring testimonials or social proof
  • Offering special promotions or value
  • Linking to mobile app or newsletter

Technical

  • Track 404s: Monitor broken links, fix or redirect
  • Accessibility: Maintain WCAG standards
  • HTTP status: Ensure proper 404 response code

Output Format

  • Copy options (headline, message, CTA)
  • Link structure (what to include)
  • Design checklist
  • SEO: Typically noindex; ensure canonical if needed

Related Skills

  • homepage-generator: Primary escape route
  • brand-visual-generator: Typography, colors for consistent 404 design
  • indexing: noindex for 404 if desired
  • title-tag, meta-description, page-metadata: 404 page metadata
用于创建、优化或审计公司网站About页面内容。涵盖受众分析、核心要素(故事、团队、价值观)、SEO元数据及结构化数据规范,旨在通过叙事和信任构建提升转化率与品牌形象。
用户想要创建关于页面内容 用户提到about page 用户提到about us 用户提到company story 用户提到our team 用户提到about section 用户提到company overview 用户提到brand story 用户提到team page 用户提到who we are
skills/kostja94_marketing-skills/about/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill about-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "about-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit About page content. Also use when the user mentions \"about page,\" \"about us,\" \"company story,\" \"our team,\" \"about section,\" \"company overview,\" \"brand story,\" \"team page,\" or \"who we are.\" For sitewide page planning, use website-structure."
}

Pages: About

Guides About page content, structure, and trust-building for company websites.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for company story, values, and differentiation. See branding for full brand strategy framework (purpose, values, storytelling).

Identify:

  1. Audience: Job seekers, buyers, partners, press
  2. Key message: Mission, values, differentiation
  3. Proof points: Awards, metrics, testimonials

Best Practices

Essential Elements

Element Purpose
Company overview Who, what, where, when, why, how
Origin story Journey, founding, milestones
Team Key people, photos, roles
Mission and values What you stand for
Visuals Photos, videos, office/culture
Social proof Testimonials, awards, certifications
Contact Easy way to reach you

Strategic Approach

  • Tell a story: Convey who you are and why you're different—not just facts. See branding for origin story, hero's journey, narrative arc.
  • Customer-focused: Frame around what you solve for customers, not self-promotion
  • Build trust: Social links, testimonials, contact details, certifications
  • Visible placement: About in main nav, not buried in footer

Schema (AboutPage, Not Organization)

  • AboutPage schema: Use on About page—describes page content (headline, description, author, about). Helps search engines understand this page's purpose.
  • Organization schema: Place on homepage or root layout, not About. Organization is entity-level (brand that owns the site); AboutPage is page-level. See schema-markup for placement.

Why It Matters

  • One of the most-visited pages
  • 58% of customers buy based on company values
  • 60% of job candidates choose employers based on values
  • Entry point for branded search; impacts conversions

Output Format

  • Structure outline (sections)
  • Story narrative and key messages
  • Team section approach
  • SEO metadata (title, description, H1)
  • Trust elements checklist

Related Skills

  • branding: Brand strategy, storytelling, purpose, values; About page implements brand story
  • homepage-generator: About often linked from homepage
  • contact-page-generator: Contact info on About
  • customer-stories-page-generator: Social proof complements About
  • title-tag, meta-description, page-metadata: About page metadata
  • schema-markup: AboutPage schema for About; Organization goes on homepage/root layout
  • brand-protection: Official domain and identity declaration; helps users distinguish from impersonation sites
指导AI/SaaS产品的联盟营销策略,涵盖CPS佣金模型、招募渠道及设置方案。适用于规划联盟计划、优化转化结构或管理合作伙伴关系等场景。
用户希望制定或优化联盟营销策略 提及联盟营销、CPS模式、佣金结构、联盟招募、合作伙伴营销
skills/kostja94_marketing-skills/affiliate-marketing/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill affiliate-marketing -g -y
SKILL.md
Frontmatter
{
    "name": "affiliate-marketing",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to plan, implement, or optimize affiliate marketing strategy. Also use when the user mentions \"affiliate marketing,\" \"affiliate program strategy,\" \"CPS model,\" \"affiliate recruitment,\" \"commission structure,\" \"affiliate partners,\" \"affiliate network,\" \"affiliate tracking,\" \"affiliate commission,\" or \"partner marketing.\" For affiliate page, use affiliate-page-generator."
}

Channels: Affiliate

Guides affiliate marketing strategy for AI/SaaS products. Affiliate marketing uses a CPS (Cost Per Sale) model—pay only when sales occur. ROI typically 5:1 to 10:1; CAC 40%–50% lower than paid ads.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and positioning.

Identify:

  1. Product type: SaaS, AI tool, subscription
  2. Commission model: Pay-per-sale, pay-per-lead, pay-per-click
  3. Target affiliates: Content creators, publishers, coupon sites

Commission Models

Model Use Typical Rate
Pay-per-sale Most common; pay on conversion 10%–20%
Pay-per-lead Lead gen (signup, form fill) $5–50/lead
Pay-per-click Rare; risk of abuse $0.01–10.50/click

For SaaS: Prefer pay-per-sale or pay-per-lead. Recurring commissions for subscriptions.

Key Terms

Term Definition
Cookie duration Attribution window (typically 30–90 days)
Recurring commission Ongoing % from subscription renewals
Sub-affiliate Affiliates who recruit other affiliates
Performance bonus Extra reward when affiliate hits sales targets
Attribution Linking sale to correct affiliate

Promotion Channels

  • Content creators: Bloggers, YouTubers, podcasters, social influencers
  • Publishers: Media, niche sites, email newsletters
  • Coupon/cashback: Price-sensitive users; see discount-marketing-strategy for code strategy
  • Professional affiliates: Agencies managing multiple programs
  • Communities: Facebook Groups, Discord, Reddit, forums
  • Existing customers: Word-of-mouth via referral rewards

Setup Options

Product and website examples are illustrative only. No affiliation, partnership, or endorsement implied.

Approach Use
Self-build Forms (e.g. Google Forms); quick, low budget
Third-party Affiliate tracking platforms (e.g. Rewardful, Tapfiliate) for AI/SaaS

Submit program to affiliate program directories after launch for discoverability.

Recruitment Strategies

  1. Dedicated landing page: Clear commission, payout terms, cookie duration, signup flow; link in nav/footer.
  2. Partner personas: Define 5+ personas (bloggers, YouTubers, newsletter owners, community admins); list audience fit and motivations.
  3. Target high-influence types: SEO content owners ranking for your keywords; reviewers/listicle sites; media buyers.
  4. Reverse research: Find affiliates promoting competitors; they may promote you too.
  5. Unconventional outreach: Competitor backlink analysis; creative outreach beyond cold email and networks.

Expect a small fraction of partners to drive most sales—quality over vanity metrics.

Implementation Flow

  1. Assess product fit: Target audience size, product complexity, commission margin, tracking feasibility. SaaS subscriptions suit recurring commissions.
  2. Design commission structure: 20%–40% typical; cookie 60–90 days; payment cycle (e.g., 15th of month); minimum payout (e.g., $50).
  3. Create marketing materials: Banners, social posts, email templates; landing page with commission details and signup flow.
  4. Recruit partners: Publish to affiliate program directories; outreach to creators and influencers.
  5. Monitor and optimize: Track conversion rate, ROI, AOV; review affiliate performance; detect fraud.

Pitfalls and Prevention

Risk Prevention
Affiliate fraud Fake clicks, self-referrals, fake conversions. Use platform fraud tools; vet affiliates; avoid auto-approve.
Brand bidding Affiliates bid on your brand terms in Google Ads; you pay commission for traffic you already own. Prohibit in terms; monitor paid search; use brand monitoring tools. See paid-ads-strategy for paid ads context.
Program terms Cookie length, performance bonus, sub-affiliate rules, payment threshold—set clearly in terms before launch.

Best Practices

  • rel=sponsored: Tag affiliate links per Google guidelines
  • Transparent disclosure: Disclose affiliate relationships
  • Recruit authentic affiliates: Align with brand; avoid low-quality networks
  • Diversify partners: Multiple affiliates reduce risk
  • SEO for affiliate content: Affiliate content drives organic traffic

Output Format

  • Commission model recommendation
  • Channel strategy
  • Recruitment approach
  • Tool selection
  • Checklist for launch

Related Skills

  • paid-ads-strategy: Paid ads context; brand bidding monitoring; when affiliates bid on brand terms
  • discount-marketing-strategy: Affiliate-specific promo codes; coupon sites; code strategy
  • affiliate-page-generator: Landing page for affiliate signup; apply landing-page-generator principles
  • landing-page-generator: Generic landing page structure, CTA, conversion; applies to affiliate signup pages
  • influencer-marketing: Often paired; influencers can be affiliates
  • referral-program: User-driven referral vs. affiliate-driven
  • directory-submission: Directory submission complements affiliate; both drive backlinks and traffic
  • community-forum: Communities (Discord, Reddit, forums) as affiliate recruitment channel
用于生成、优化或审核联盟营销项目页面内容。通过明确佣金结构、产品价值及信任背书,提升转化率与高质量联盟会员注册。适用于联盟计划页、合作伙伴页等场景。
用户希望创建、优化或审计联盟计划页面内容 提及“affiliate program”、“partner program”、“referral program page”、“commission page”等相关关键词
skills/kostja94_marketing-skills/affiliate-program/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill affiliate-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "affiliate-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit affiliate program page content. Also use when the user mentions \"affiliate program,\" \"affiliate page,\" \"partner program,\" \"referral program page,\" \"affiliate landing,\" \"partner landing,\" \"commission page,\" or \"affiliate signup.\" For affiliate program strategy, use affiliate-marketing."
}

Pages: Affiliate Program

Guides affiliate program page content and structure for conversion and quality affiliate signups.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and proof points.

Identify:

  1. Commission model: Percentage, flat rate, recurring, one-time
  2. Target affiliates: Bloggers, influencers, agencies, etc.
  3. Product fit: Why affiliates would promote you

Best Practices

Four Key Questions Affiliates Ask

  1. How much can I earn? ? Be specific upfront
  2. Is this product worth promoting? ? Product value, audience fit
  3. Will I be set up for success? ? Resources, support, tracking
  4. Can I trust you to pay me? ? Payment terms, proof

Commission Structure (Transparency)

Item Include
Commission rate Percentage or flat
Recurring vs. one-time Duration of recurring
Cookie/tracking window How long the cookie lasts
Minimum payout Threshold to receive payment
Payment schedule When payouts occur
Payment methods PayPal, bank transfer, etc.
Refund/chargeback policy How they affect commissions

Value Proposition

  • Specific numbers: "Earn 30% recurring--up to $147/month per customer"
  • Earning calculator: Help affiliates visualize income
  • Avoid vague: "Great commissions" ? "30% recurring for 12 months"

Product Information

Affiliates stake their reputation; convince them it's worth promoting:

  • What it does (clear, jargon-free)
  • Who it's for (audience, use cases)
  • Why it's superior (differentiators)
  • Social proof (customers, testimonials, logos)

Design

  • Treat like a product landing page—professional, engaging; same quality as main marketing pages
  • Single-focused offer: One primary goal (signup); pages with multiple offers get ~266% fewer leads
  • Minimal navigation: Remove or reduce nav links; can increase conversion 2–28%
  • Mobile-first: Thumb-reachable CTA above fold; ~70% of users consider page speed
  • Hero image/video: Visuals can improve conversion up to 80%
  • FTC-compliant disclosure: Affiliate relationship disclosure required

Post-Launch

  • Submit to affiliate program directories for discoverability
  • Add affiliate page link to main nav or footer

Output Format

  • Headline and value proposition
  • Commission section structure
  • Product summary for affiliates
  • FAQ for common affiliate questions
  • CTA and signup flow
  • SEO metadata

Related Skills

  • affiliate-marketing: Affiliate marketing strategy, recruitment, channels
  • landing-page-generator: Generic landing page structure, CTA, conversion flow; apply to affiliate signup
  • pricing-page-generator: Commission structure clarity
  • customer-stories-page-generator: Social proof for product
  • homepage-generator: Link from homepage
  • hero-generator, cta-generator: Hero and CTA design for affiliate page
  • title-tag, meta-description, page-metadata: Affiliate page metadata
指导在GA4和GSC中追踪AI搜索流量,包括ChatGPT、Perplexity等来源的识别与报告配置,区分AI概览影响。
用户想追踪AI搜索流量 提及AI流量或ChatGPT引荐 询问如何追踪AI引荐
skills/kostja94_marketing-skills/ai-traffic/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill ai-traffic-tracking -g -y
SKILL.md
Frontmatter
{
    "name": "ai-traffic-tracking",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to track AI search traffic in GA4 or GSC. Also use when the user mentions \"AI traffic,\" \"ChatGPT referral,\" \"Perplexity traffic,\" \"AI Overviews,\" \"GA4 AI sources,\" \"AI search analytics,\" \"track AI referrals,\" \"AI search traffic,\" \"Claude traffic,\" or \"how to track AI traffic.\" For AI SEO strategy, use generative-engine-optimization."
}

Analytics: AI Traffic

Guides tracking of AI-driven search traffic in Google Analytics 4 and Google Search Console.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • AI search traffic: Track in GA4 and GSC; separate AI sources from organic referral
  • Google AI Overviews: AI summary box in Google search (formerly SGE)
  • AI-driven search: Traffic from ChatGPT, Perplexity, Gemini, Claude, Copilot, etc.

Why Track Separately

  • AI traffic is growing but GA4 often groups it as Referral, Organic, or Direct
  • AI visitors may have stronger intent and higher conversion
  • Separating AI Overviews from organic helps assess AI impact

GA4: AI-Driven Search

Option 1: Exploration Report (Recommended)

  1. ExploreFree form
  2. Dimensions: Session source (or Session source / medium)
  3. Metrics: Sessions, Engagement rate, Event count, etc.
  4. Filters: Add filter →Session source Matches regex →use regex below
  5. Configure table, save report

Regex (common AI sources):

chatgpt\.com|openai\.com|openai|perplexity\.ai|perplexity|doubao\.com|chat\.qwen\.ai|copilot\.microsoft\.com|copilot\.com|(business\.)?gemini\.google|chat\.deepseek\.com|deepseek\.com|poe\.com|anthropic\.com|claude\.ai|bard\.google\.com|edgeservices\.bing\.com

Option 2: Custom Channel Group

  1. AdminData DisplayChannel Groups
  2. Copy default group, name e.g. "Default and AI Chatbots"
  3. Add channel "AI Chatbots": Source Matches regex (same regex)
  4. Important: Place "AI Chatbots" above "Referral" so it matches first
  5. Save and use in Traffic Acquisition

Option 3: Custom Report

  1. ReportsLibrary →Create Detail Report
  2. Use Traffic Acquisition template
  3. Add filter: Session source Matches regex (same regex)
  4. Save and add to menu

Common AI Source Domains

Platform GA4 Source examples
ChatGPT chatgpt.com, openai
Perplexity perplexity.ai, perplexity
Copilot copilot.com, copilot.microsoft.com
Gemini business.gemini.google, gemini.google
Claude claude.ai, anthropic.com
Bing Chat edgeservices.bing.com

Google AI Overviews

  • GA4 + URL fragment: Some AI Overview clicks add URL fragments; can use GTM (partial coverage)
  • GSC: For AI Overviews analysis in GSC (filter, limitations), see google-search-console

Checklist

  • AI sources identified in GA4 (Session Source)
  • AI traffic Exploration report created
  • Channel group updated with AI above Referral (if used)
  • Custom report added to Library (optional)
  • GTM + URL fragment for AI Overviews (optional)
  • GSC AI-oriented query filter (optional; see google-search-console)

Output Format

  • GA4 setup: Exploration, channel group, or custom report
  • Regex: Adapted to user's observed sources

Related Skills

  • generative-engine-optimization: GEO strategy; AI traffic tracking measures GEO impact
  • traffic-analysis: Traffic sources, attribution, UTM
  • analytics-tracking: GA4 events and conversions
  • google-search-console: GSC AI traffic analysis
  • robots-txt: AI crawler allow/block strategy
用于生成或优化替代方案及竞品对比内容(页面或博客),旨在拦截竞品品牌流量。适用于SEO排名、PPC广告落地页及高意图用户转化,涵盖直接、捆绑及间接竞品分析。
用户提及创建 alternatives page, vs page, compare page 用户询问 best alternatives to X, switch from X 用户涉及 competitor comparison, brand keyword ads 需要拦截竞品搜索流量或进行竞品调研
skills/kostja94_marketing-skills/alternatives/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill alternatives-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "alternatives-page-generator",
    "metadata": {
        "version": "1.2.2"
    },
    "description": "When the user wants to create, optimize, or audit alternatives or comparison content (page or blog article). Also use when the user mentions \"alternatives page,\" \"alternatives listicle,\" \"X alternatives,\" \"competitor comparison,\" \"vs page,\" \"compare page,\" \"best alternatives to X,\" \"switch from X,\" \"competitor brand traffic,\" \"brand keyword ads,\" or \"intercept competitor search.\" For competitor research, use competitor-research."
}

Pages: Alternatives / Compare

Guides alternatives and comparison content that target "X alternatives" and "X vs Y" search intent. Purpose: Intercept competitor brand traffic—organic (SEO) and paid (brand keyword ads). High-intent, bottom-of-funnel; users searching alternatives are ready to switch. Content format: Standalone page (/alternatives, /alternatives-to-notion) or blog article (/blog/notion-alternatives). Same structure; blog builds topical authority.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Purpose & Keywords

Goal Use
SEO Rank for "[Competitor] alternatives," "alternatives to [Competitor]," "[Competitor] vs [You]"
PPC Bid on competitor brand + "alternative"/"vs"; send to alternatives landing page
Intent High-intent; short sales cycle; users already understand the category

Keyword patterns: alternatives, alternative, vs, comparison, compare, "best [X] alternatives." Include name variants (e.g., "SuccessBox" and "Success Box") in metadata.

Competitor Types

Type Description Example
Direct Obvious rivals FreshBooks vs QuickBooks
Bundlers Large platforms; users want lighter/cheaper Salesforce, HubSpot → "cheaper Salesforce for SMB"
Indirect Same problem, different solution "Spreadsheet alternative" for accounting software

Target all three for long-tail growth; don't only target the biggest competitor.

Content Format: Page vs Blog Article

Format Path Use
Standalone page /alternatives, /alternatives-to-[competitor] Dedicated hub; strong for your own product as alternative; preferred for paid ads (competitor brand keyword ads)
Blog article /blog/[product]-alternatives, /blog/best-[x]-alternatives Listicle format; common for affiliate, challenger brands; builds topical authority; SEO/organic only

Both formats use the same structure (quick verdict, comparison table, individual reviews, FAQ). For competitor brand keyword ads (Google Ads, etc.): use a dedicated landing page, not a blog. Users searching competitor brands expect direct alternatives; a blog increases bounce; a comparison page matches intent and converts better. Blog is for organic traffic and topical authority.

URL Structure

  • Hub: /alternatives
  • Per-competitor: /alternatives-to-[competitor] or /[competitor]-alternative
  • Short, keyword-rich, crawlable; no keyword stuffing

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, competitors, and differentiators.

Identify:

  1. Format: Standalone page vs. blog article; single hub vs. per-competitor pages
  2. Competitors: Who to include; avoid over-promoting direct rivals
  3. Primary goal: Sign up, trial, demo; position as fair comparison
  4. Tone: Objective, helpful; avoid disparaging competitors

Page / Article Structure

Section Purpose
Headline "Best [Product Category] Alternatives in [Year]" or "[Product] vs [Competitor]"; plain promise, avoid cute titles
Problem-focused intro Empathy for pain; validate why they're searching; tease the payoff
Quick verdict 5–8 lines above the fold: who it's for, top picks, decision shortcut
Pros/cons of original Build trust; acknowledge why someone might leave; who should still keep it
Comparison table Place early, not hidden; 4–6 columns (best for, price, ease, key limit); HTML table (not image)—required for AEO/GEO; scannable; section-level criteria and markup → comparison-table-generator
Alternatives list 6–10 picks; each with "best for" label, proof, tradeoff, pricing snapshot
Migration Link to migration-page if applicable
FAQ "Is X better than Y?"; "Can I migrate from X?"; pricing, trials
CTA Try free, start trial, book demo; one CTA above fold, one near end

Best Practices

SEO

  • Intent: Commercial; "alternatives to X," "X vs Y," "best X"
  • Title: "[Product] Alternatives: Top [N] Options Compared | [Your Product]" or "Top [Competitor] Alternatives for [Year]: Better & Cheaper"; under 60 chars
  • Meta: Lead with pain point or question; weave keyword early; end with benefit; max 160 chars
  • Content: 1500+ words for alternatives hub; 800+ for single comparison
  • Internal links: Link to features, pricing, migration, use cases

Fairness & Trust

  • Objective tone: Acknowledge competitor strengths; avoid FUD
  • Transparent criteria: Explain how you compare (features, pricing, use case)
  • Update regularly: Pricing and features change; date the comparison
  • Verifiable claims: Link to pricing pages, docs; cite sources; add "as of [date]" for prices

Conversion

  • Soft sell: Position your product as one option; let value speak
  • Migration CTA: "Switch in minutes" if migration is easy
  • Social proof: Customer quotes from switchers

AEO / GEO (AI Search)

  • HTML tables: Use plain HTML for comparison tables; AI engines parse structured data; avoid images or fancy JS sliders
  • Structured data: Objective entity mappings; bullets over prose for scannability; see entity-seo
  • Third-party validation: G2, niche blogs mentioning you as alternative help AI cite you

Brand Keyword Ads (PPC)

  • Use case: Bid on "[Competitor] alternative," "[Competitor] vs [You]" when allowed by platform
  • Landing page: Use a dedicated alternatives/comparison page, not a blog article. High-intent users expect direct alternatives; blog increases bounce. See google-ads Competitor Brand Keywords.
  • Ad-to-page alignment: H1 mirrors search intent ("X vs [You]"); comparison table; one-line differentiator; strong CTA; see landing-page-generator, paid-ads-strategy

Programmatic SEO (Scale)

  • When: 50+ competitors; can't write manually
  • Data schema: Price, key features, support level; store in API or headless CMS
  • Template: One structure; populate per competitor; verify data quarterly (pricing changes)
  • Name variants: Include "SuccessBox" and "Success Box" in metadata

Measurement

Metric Purpose
Assisted conversions User may convert later; attribution
Bounce + pricing click Bounce to pricing = intent signal
GEO share of voice Search "[Competitor] alternative" on Perplexity; are you cited?
CTA clicks "Switch Now" button performance

Output Format

  • Competitor list (Direct, Bundlers, Indirect)
  • Keyword list (alternatives, vs, comparison; name variants)
  • Headline and problem-focused intro
  • Comparison structure (table columns, criteria; HTML table)
  • Per-competitor summary (2–3 sentences each)
  • Your product positioning
  • Internal links (migration, features, pricing)
  • SEO metadata (title, meta; under 60/160 chars)
  • PPC (if applicable): ad-to-page alignment

Related Skills

  • comparison-table-generator: The comparison table block (HTML, criteria, fairness, accessibility); use with this skill for full pages that include a matrix
  • article-page-generator: Alternatives as blog listicle; same structure, different path
  • migration-page-generator: Migration guides for switchers; link from alternatives
  • landing-page-generator: When alternatives page is used for paid ads (PPC), apply LP principles; ad-to-page alignment
  • google-ads: Competitor brand keyword campaigns; LP (not blog) for competitor ads; see Competitor Brand Keywords section
  • paid-ads-strategy: When to use paid ads; ad-to-page alignment; channel selection; competitor brand bidding
  • programmatic-seo: Scale alternatives pages across 50+ competitors; template + data
  • features-page-generator: Feature comparison content
  • pricing-page-generator: Pricing comparison
  • customer-stories-page-generator: Switcher testimonials
  • entity-seo: Entity mappings; Organization, Person; GEO citation
用于生成或优化API介绍页(/api),涵盖价值主张、用例及文档链接。适用于用户提及API页面、开发者落地页等场景,区别于具体的API文档参考页。
创建API介绍页面 优化API概览页 审计API营销页面 用户提到'API page' 用户提到'developer landing'
skills/kostja94_marketing-skills/api/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill api-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "api-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit the API introduction\/overview page. Also use when the user mentions \"API page,\" \"API landing page,\" \"\/api page,\" \"API overview,\" \"developer landing,\" \"API marketing,\" or \"API for developers.\" Note: API documentation (endpoint reference) lives in docs; use docs-page-generator."
}

Pages: API Introduction

Guides the API introduction page →typically at /api →that overviews the API, use cases, and links to documentation. API documentation (endpoint reference, code examples) lives on separate pages.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product and developer use cases.

Identify:

  1. API type: REST, GraphQL, etc.
  2. Audience: Developers (integration) vs. decision makers (evaluation)
  3. Docs location: Where API documentation lives (e.g. /docs, /api/reference, external)

Page Role

  • API page (/api): Introduction, overview, value prop, CTA to docs or signup
  • API documentation: Lives in docs (docs.*) → API Reference section with endpoint reference, auth, examples

Best Practices

Overview and Structure

  • What the API does: Clear value proposition, key capabilities
  • Use cases: Who uses it, common scenarios
  • Getting started: Quick path to first call or docs
  • Link to docs: Prominent CTA to API documentation

Content

  • Key concepts: High-level, not endpoint-level detail
  • Auth overview: How auth works; link to docs for details
  • Pricing/limits: If relevant for evaluation
  • SDKs and tools: If available; link to docs

SEO and Discovery

  • Developer search: Target "API" + product/category terms
  • Metadata: Title, description for developer intent
  • Internal links: From homepage, features, resources

Output Format

  • Structure outline (sections)
  • Value proposition and key messages
  • CTA to documentation or signup
  • SEO metadata for developer search

Related Skills

  • homepage-generator: Link to API page for developers
  • schema-markup: WebPage or SoftwareApplication schema
  • title-tag, meta-description, page-metadata: API page metadata
指导移动端应用广告推广,涵盖Google UAC、Apple Search Ads等平台。聚焦用户获取(UA)、CPI/CPA优化及iOS/Android策略,提供投放设置、追踪归因及预发布检查清单。
用户想要运行应用安装广告 提到用户获取(UA) 提及Google App Campaigns或Apple Search Ads 讨论CPI或应用推广
skills/kostja94_marketing-skills/app-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill app-ads -g -y
SKILL.md
Frontmatter
{
    "name": "app-ads",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to run app install ads, user acquisition (UA), or promote mobile apps. Also use when the user mentions \"app ads,\" \"app install ads,\" \"UA,\" \"user acquisition,\" \"Google App Campaigns,\" \"Apple Search Ads,\" \"ASA,\" \"UAC,\" \"App Store ads,\" \"Play Store ads,\" \"CPI,\" or \"app promotion.\" For store listings, use distribution-channels."
}

Paid Ads: App Ads

Guides app advertising: app install campaigns, user acquisition (UA), and in-app promotion. Use when promoting mobile apps (iOS, Android); conversion = install or in-app action, not landing page.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Key Platforms

Platform Best for Conversion
Google App Campaigns Android + iOS; automated across Search, YouTube, Display, Play, Discover Install, in-app event
Apple Search Ads (ASA) iOS only; high-intent App Store search Install
Meta App Install Facebook/Instagram; demand gen for apps Install, in-app event
TikTok App Install Younger users; viral creative Install

Google App Campaigns

  • Reach: Search, YouTube, Display, Google Play, Discover
  • Bidding: Maximize Conversions (automated) or Target CPI/CPA (30+ conversions/week)
  • Creative: Provide diverse assets (videos, images, text); algorithm tests combinations
  • iOS: SKAdNetwork; conversion value mapping; Firebase for in-app events
  • Bid–budget ratio: ≥10× for CPI, ≥15× for CPA

Apple Search Ads

  • Placements: App Store search results, Today tab, Search tab, product pages
  • Modes: Basic (automated) or Advanced (keywords, audiences, bids)
  • Audience: High-intent users actively searching in App Store
  • ASO benefit: Can improve keyword rankings as secondary effect

Metrics

Metric Use
CPI Cost per install
CPA Cost per acquisition (in-app action)
LTV Lifetime value; iOS often higher than Android
Retention D1, D7, D30; quality signal

iOS vs Android: iOS typically higher LTV, higher CPI; Android greater scale, lower CPI.

Tracking

  • Firebase: In-app events, audiences, value-based optimization (Google)
  • SKAdNetwork: iOS attribution; configure conversion value mapping
  • UTM: Use utm_medium=app or cpc with utm_source for app campaigns in GA4

Pre-Launch Checklist

  • App Store / Play Store listing optimized (ASO)
  • Firebase or equivalent connected; in-app events defined
  • Creative assets (video, images, text) prepared
  • Conversion events (install, signup, purchase) configured
  • Bid–budget ratio meets minimum (10× CPI, 15× CPA)

Related Skills

  • paid-ads-strategy: Ad formats by medium; when to use app vs web
  • analytics-tracking: In-app events; conversion setup
  • traffic-analysis: UTM for app campaigns; attribution
用于指导单篇文章页面的结构、SEO和用户体验优化。涵盖元数据、Schema标记及技术细节,区分于博客索引页或正文内容创作。需基于产品、关键词、搜索意图及竞品进行四步工作流分析与推荐。
创建或优化单篇文章页面 文章页面审计 提及article page, blog post page, single post等关键词 针对顶级排名文章进行优化分析
skills/kostja94_marketing-skills/article/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill article-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "article-page-generator",
    "metadata": {
        "version": "1.3.0"
    },
    "description": "When the user wants to create, optimize, or audit a single article\/post page (not the blog index). Also use when the user mentions \"article page,\" \"blog post page,\" \"single post,\" \"post template,\" \"article structure,\" \"post optimization,\" \"competitor article analysis,\" \"optimize based on top-ranking articles,\" \"analyze ranking articles,\" \"optimize article for SEO,\" or \"article schema.\" For writing article body copy, use article-content. For blog listing\/index page, use blog-page-generator."
}

Pages: Article (Single Post)

Guides structure, SEO, and UX for individual article pages — layout, metadata, schema, technical. For article body content (intro, body, conclusion, writing), see article-content. Distinct from blog-page-generator, which covers the blog index/listing page.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Output workflow: Always output in order: 0. Research Phase (keywords, search intent, competitors) → 1. Intent Analysis2. Content Analysis3. Recommendations. Do not skip steps. When Research Phase was performed via web search, show the search results and findings.

Optimization Foundation: Four Inputs

Article analysis and creation rest on four inputs. Gather or infer them before outputting recommendations:

Input Purpose Source
Product Product connection, features, use cases, CTA placement project-context (Sections 1–4, 9–11); article content; web search
Keywords Target keyword, primary/secondary placement project-context Section 6; keyword-research; article
Article intent Informational, commercial, transactional, navigational; drives structure, CTA, SEO depth project-context Section 6 (target intent); article orientation; content type
Competitor articles Structure to adopt, content gaps, length target, keyword opportunities User-provided URLs; project-context Section 11; web search

When any input is missing: Proactively ask or search. For article analysis: perform Research Phase (keyword search, search intent, competitor articles) by default — see Research Phase section. For product/keywords/intent, infer from article or prompt user to add project-context.

Before Analysis: Gather Context

1. Product / company context

Use available context to give tailored analysis:

Source Use for
project-context.md Keywords (Section 6), competitors (Section 7), content strategy (Section 11), product connection
Article content Extract product name, features, URLs; infer target keyword and audience
Web search When analyzing a known brand: search for "[product] features", "[product] vs competitors", company positioning — use to validate product connection, suggest missing features/use cases, and improve competitor gap analysis

If no project-context exists, infer from the article and optionally search for company/product info to enrich recommendations.

Research Phase: Keyword, Search Intent, Competitor (Required for Article Analysis)

Lightweight research for article analysis. When analyzing or auditing an article, perform searches and output the results in Section 0. Skip only if user explicitly asks to skip (e.g. "skip search").

  • Keyword: Extract from article (title, H1, H2s, first 100 words); search for opportunities — see keyword-research (extract from article method)
  • Search intent: Informational / Commercial / Transactional / Navigational — see keyword-research Search Intent
  • Competitor articles: Fetch 2–3 top-ranking pages; analyze structure, gaps, length target — see competitor-research (Competitor Article Fetch Workflow)

Output format: See Output Format Section 0 below.

Scope

  • Single article page: One post, one URL (e.g. /blog/how-to-optimize-seo)
  • Not the blog index, category pages, or archive pages — see blog-page-generator for those

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for topics, audience, keywords, and Section 11 (Content/Blog/Article Strategy).

Identify:

  1. Product connection: How does this article support the product? (educate on problem, introduce features, nurture leads)
  2. Keyword basis: Target keyword from product context or keyword research — see keyword-research
  3. Content type: Blog post, guide, tutorial, news, evergreen
  4. Length: Short (<1,000 words), medium (1,000–2,500), long (2,500+)
  5. Intent: Informational, commercial, problem-aware

Product-linked content: Articles should tie to the product (problem it solves, features, use cases). Avoid purely generic content with no product relevance. Link to product/feature pages naturally in conclusion or when context fits.

Article Orientations

Choose structure, SEO depth, and schema based on orientation. See content-marketing for full Article Orientations (Funding/PR, Product update, Guide, News, Evergreen), SEO-driven vs non-SEO-driven, Evergreen vs Timely.

Intent Analysis output: Orientation, primary goal, SEO vs non-SEO, Evergreen vs timely — see Output Format Section 1.

Article Page Structure

Section Purpose
Hero/Header Title (H1), author, single date (see schema-markup Date display for CTR), reading time (word count ÷ 200; round up), featured image, share buttons
TL;DR or Key Takeaways See article-content for content; placed after intro; supports GEO/AI citation
Introduction See article-content for hook, length, keyword placement
Body See article-content for QAE, paragraph length, scannability
Conclusion See article-content for summary, CTA, product connection
Related posts 3–6 contextual links; end-of-article recommendations
Author bio E-E-A-T; credentials, photo, link to author page — see eeat-signals

Featured Image

See image-optimization (Article / Blog hero). Same image for Schema, Open Graph, Twitter Cards; min 1200px wide, absolute URL. See open-graph, twitter-cards.

Social Sharing

  • Add share buttons (X, LinkedIn, Facebook, etc.) — see social-share-generator
  • Place after intro and/or end of article; sticky sidebar for long-form
  • Requires Open Graph and Twitter Cards for rich previews when shared

GEO / AI Optimization

See article-content for TL;DR, Key Takeaways, QAE pattern, answer-first; generative-engine-optimization for full GEO strategy.

Long-Form (1,000+ words)

  • Add table of contents (TOC) after intro — see toc-generator
  • Use jump links for major sections
  • Break text with images, lists, definition boxes, mini-FAQs

SEO Best Practices

Title & Meta

Element Guideline
Title 55 chars; primary keyword near start; power words
Meta description 150–160 chars; CTA; primary keyword
H1 One per page; matches title; primary keyword naturally

Keyword Placement

  • Title: 1× primary keyword
  • First 100 words: 1× primary keyword
  • Body: 2–3× naturally; avoid stuffing
  • At least one H2: Include primary or related keyword

Content Quality

See article-content for readability, depth, originality, word count by type. E-E-A-T: Author bio, citations, changelog, expert quotes — see eeat-signals.

Common Mistakes to Avoid

  • Multiple H1s; skipping heading levels (H2→H4); keyword stuffing in headings
  • Neglecting conclusion or CTA; no internal links to related content
  • Walls of text; generic "click here" anchors

URL

Use url-slug-generator for slug creation. Key rules:

  • Slug: 3–5 words; under 60 chars; primary keyword; lowercase, hyphens
  • Example: /blog/ai-people-search not /blog/ai-search-engine-finding-people-speed-discovery-outreach
  • Avoid: Date in path (/blog/2025/01/15/article-title); copy-pasting full title

Date Display

See schema-markup (Date display for CTR): show only one visible date; prefer dateModified.

Schema & Open Graph

See schema-markup for Article/BlogPosting/NewsArticle type selection, required properties, JSON-LD example, and date display. Validate with Rich Results Test.

Open Graph for Articles

Use og:type: article for article pages (not website):

<meta property="og:type" content="article">
<meta property="og:article:published_time" content="2025-01-15T09:00:00Z">
<meta property="og:article:modified_time" content="2025-02-01T14:30:00Z">
<meta property="og:article:author" content="https://example.com/author/jane">

Internal Linking

Element Guideline
Volume 3–5 contextual links in body + 3–6 in Related posts = 6–11 total per article
First paragraph 1 link to pillar or key related content
Body 2–4 contextual links; one per major section when relevant
Related posts 3–6 end-of-article links; same topic cluster
Anchor text Descriptive (e.g. "SEO checklist for 2025", "how to optimize meta tags"); avoid "click here", "learn more", "read more"
Variation Mix exact-match, partial-match, branded anchors; avoid over-optimization
Orphan prevention Every article has ≥1 internal link from hub/pillar or nav

Outbound Links (External)

Element Guideline
Volume 2–5 external links per article; cite authoritative sources
When to use Statistics, research, definitions, tool comparisons, expert quotes
Anchor text Descriptive (e.g. "Google's Search Quality Guidelines", "SEO study"); link to source
Same URL Counts once per page for link equity; no need to repeat
E-E-A-T External links to reputable sources signal trust — see eeat-signals

References / Citations

See article-content for citation format; eeat-signals for E-E-A-T and when to include.

AI-Assisted Content

See article-content for AI-assisted content guidance; eeat-signals for E-E-A-T.

Technical

  • Core Web Vitals: LCP < 1.0s on mobile
  • Images: WebP, compressed; descriptive alt text; keyword in filename when natural
  • IndexNow: For fast indexing of new posts
  • Canonical: Self-referencing canonical on article page

Post-Publication

  • Refresh: Update every 6–12 months; refresh stats, add insights
  • Internal links: Add links from older posts to new articles
  • Monitor: GSC indexing, rankings, Core Web Vitals

Content Analysis

When auditing or optimizing an article, apply the Content Audit Checklist. See article-content for full dimensions.

Output Format

0. Research Phase (output first, when analysis/audit is performed)

When analyzing or auditing an article, output this section before Intent Analysis. Include search sources and findings. If user asked to skip search, note that and infer from article only.

Section Output
Keyword Search Primary keyword (from article or search), secondary keywords, keyword opportunities (from SERP/competitor analysis). If search was performed: query used, top results observed.
Search Intent Intent for primary keyword (Informational/Commercial/Transactional/Navigational), intent for 2–3 secondary keywords, whether article content matches intent. If search was performed: SERP snippet types observed.
Competitor Articles If searched: 2–3 URLs, brief structure (word count, H2s), content gaps, length target. If user provided URLs: same. See competitor-research for full methodology. If skipped: "Competitor analysis skipped."

1. Intent Analysis (output second)

Before any recommendations, output a brief analysis:

Dimension Output
Orientation Funding/PR, Product update, Guide, News, Evergreen
Primary goal Brand, PR, education, product adoption, organic traffic, …
SEO vs non-SEO SEO-driven / Non-SEO-driven / Hybrid
Evergreen vs timely Evergreen / Timely
Implications 1–2 sentences: e.g. "Low SEO priority → focus on clarity, shareability" or "SEO-driven → full keyword + GEO optimization"

2. Content Analysis (output third)

Apply the Content Analysis table above. Output a brief assessment per dimension (✅ / ⚠️ / ❌ + one-line note).

3. Recommendations (output fourth, tailored to intent)

Assign priority to each item: P0 (critical), P1 (high), P2 (medium), P3 (nice-to-have). Output as table or list with priority prefix.

Priority Use when
P0 Blocks GEO/SEO; missing core element (TL;DR or Key Takeaways, keyword in first 100 words, schema)
P1 Significant impact on traffic, CTR, or conversion (title length, share buttons, CTA)
P2 Improves UX or authority (related posts, author bio, internal links)
P3 Polish (image optimization, readability tweaks)

Example: [P0] Add TL;DR or Key Takeaways — GEO, AI citation

  • Product connection (how article supports product; where to link) — see article-content
  • Keyword (target from product context or keyword research)
  • Structure for article template (hero, TL;DR or Key Takeaways, intro, body, conclusion, related, author) — content creation: article-content
  • Featured image (dimensions, alt, file size, og:image alignment)
  • GEO elements (TL;DR or Key Takeaways, QAE pattern) — skip or minimal for non-SEO-driven
  • SEO checklist (title, meta, H1, keyword placement) — skip or minimal for non-SEO-driven
  • Schema type and JSON-LD
  • Internal links (3–5 in body + 3–6 Related; anchor text suggestions; avoid "click here")
  • Outbound links (2–5 external; cite stats, research; anchor text for each)
  • References (inline citations vs Reference section; when to add for E-E-A-T)
  • Competitor analysis (when URLs provided or searched): content gaps vs top rankers, structure to adopt, length target, keyword opportunities — see competitor-research for methodology; Before Analysis to prompt user or search

Related Skills

  • article-content: Article body creation; intro, body, conclusion; writing frameworks; Content Audit Checklist
  • eeat-signals: E-E-A-T; author bio, citations, YMYL
  • competitor-research: Content gaps, structure, length target
  • blog-page-generator: Blog index/listing; article pages live within blog
  • keyword-research: Keyword basis for articles
  • schema-markup: Article/BlogPosting/NewsArticle schema
  • howto-section-generator: HowTo step sections; HowTo schema alongside Article
  • heading-structure: H1–H6 structure for article body
  • content-optimization: H2 keywords, tables, lists, multimedia; word count for articles → article-content
  • image-optimization: Article hero/featured image specs
  • internal-links: Related posts, contextual links
  • open-graph, twitter-cards: Social previews for articles
  • generative-engine-optimization: GEO strategy; AI citation optimization
指导博客索引页、列表页及内容枢纽的结构设计、SEO优化与内容营销策略。涵盖子域名/目录选择、页面布局、内容聚类、EEAT信号及核心Web指标,旨在通过高质量内容提升搜索流量与转化。
创建或优化博客首页/索引页结构 用户提及'blog page', 'blog index', 'content hub', 'blog structure' 讨论博客的SEO策略或子域名与子目录选择
skills/kostja94_marketing-skills/blog/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill blog-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "blog-page-generator",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to create, optimize, or audit blog index or listing page structure (not a single post). Also use when the user mentions \"blog page,\" \"blog index,\" \"blog layout,\" \"content hub,\" \"blog homepage,\" \"blog listing,\" \"subdomain vs subdirectory,\" \"blog structure,\" or \"blog SEO.\" For single post page SEO and schema, use article-page-generator."
}

Pages: Blog

Guides blog page structure, SEO, and content marketing best practices.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for topics, audience, and keywords.

Identify:

  1. Blog purpose: SEO traffic, thought leadership, product education
  2. Content mix: Pillar pages, cluster content, news
  3. Audience: Buyers, existing customers, developers

Best Practices

Blog Placement: Subdomain vs Subdirectory

Option Example SEO / Use
Subdirectory example.com/blog SEO weight flows to main domain; recommended for product blogs
Subdomain blog.example.com Treated as separate entity; consider for distinct brands or technical isolation

Choose based on SEO weight distribution, brand consistency, and technical architecture. See Alignify subdomain vs subdirectory guide for details.

Blog Index Page Structure

Section Purpose
Featured/Recent Highlight newest or most important posts
Categories/Topics Help users find by theme
Editor's Picks Curate best content
Related posts Per-article recommendations
Search Help users find specific topics

Content Strategy

  • Topical authority: Topic clusters -> pillar page per core topic + 6-12 cluster articles
  • Intent mapping: Transactional, problem-aware, informational
  • EEAT signals: Author bios, Organization schema, citations, changelog
  • Refresh > new: For established sites, updating existing content often outperforms publishing new posts; avoid changing only the date without substantive edits
  • Quality > quantity: Fewer high-quality posts beat many mediocre ones; consider deleting, merging, or refreshing underperformers
  • Topic focus: Avoid blindly expanding topics; dilution can hurt authority on core topics
  • Conversion as north star: SEO KPIs should tie to leads, signups, or sales -> not just traffic

SEO

  • Title: 55 chars, power words, primary keyword
  • Meta: Clear CTA in description
  • Headers: H1-H3 hierarchy, table of contents
  • Content depth: 2,500+ words for pillars; Grade 8 readability
  • URL: Use url-slug-generator -> clean slugs, 3-5 words, under 60 chars
  • Schema: Article, BlogPosting, FAQPage where relevant

Technical

  • Core Web Vitals: LCP < 1.0s on mobile
  • Images: WebP, compressed
  • IndexNow: For fast indexing of new posts

Design

  • Scannable: Preview copy, thumbnails, hero images
  • Social sharing: Share buttons on article pages -> see social-share-generator
  • Quick answers: Definition boxes, mini-FAQs for AEO
  • TOC: Table of contents for Featured Snippets; jump links in long articles; see featured-snippet, toc-generator
  • CTA placement: Sidebar CTA or in-paragraph CTA at key conversion points
  • Related/Recent posts: Manual curation or plugin; same topic cluster

Output Format

  • Structure for blog index and post template
  • Content strategy (pillar + clusters)
  • SEO metadata and schema
  • Internal linking approach

Related Skills

  • card: Article card structure for blog index; cover image, title, excerpt, date
  • grid, list: Grid for visual; list for text-heavy blog index
  • article-page-generator: Single article/post page structure, SEO, schema -> use for individual post templates
  • featured-snippet: TOC, answer-first format for snippet opportunities
  • url-slug-generator: URL slug for blog posts; 3-5 words, primary keyword
  • content-strategy: Content clusters, editorial calendar
  • keyword-research: Keywords for blog topics
  • title-tag, meta-description, page-metadata, open-graph, twitter-cards: Blog metadata and social previews
  • schema-markup: Article schema
  • resources-page-generator: Blog may be part of resources hub
用于主动监控品牌提及、商标侵权及假冒行为。涵盖域名、社交媒体等渠道的风险评估,提供从手动搜索到自动化AI工具的策略建议,设定监控频率并规划升级至执法保护的流程。
monitor brand mentions trademark infringement brand monitoring brand watch trademark watch impersonation detection counterfeit detection brand abuse monitoring
skills/kostja94_marketing-skills/brand-monitoring/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill brand-monitoring -g -y
SKILL.md
Frontmatter
{
    "name": "brand-monitoring",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to monitor brand mentions, detect trademark infringement, or set up brand monitoring. Also use when the user mentions \"brand monitoring,\" \"brand watch,\" \"trademark watch,\" \"brand mentions,\" \"impersonation detection,\" \"counterfeit detection,\" or \"brand abuse monitoring.\" For enforcement, use brand-protection."
}

Strategies: Brand Monitoring

Guides ongoing brand monitoring—detecting impersonation, trademark infringement, counterfeit products, and brand abuse before they cause harm. Complements brand-protection (reactive: report, takedown); this skill covers proactive monitoring setup and tool selection.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read for brand name, official domain, and key assets.

Identify:

  1. Scope: Domain, social, marketplaces, paid search, dark web
  2. Budget: Manual vs automated; DIY vs vendor
  3. Risk level: High-value brand, prior incidents, or preventive

What to Monitor

Channel Threats
Domains Typosquatting, brand+ai, brand+app, impersonation sites
Social media Fake accounts, impersonation, unauthorized use
Marketplaces Counterfeit products, unauthorized sellers (Amazon, eBay, Temu)
Paid search Competitors bidding on brand terms; impersonator ads
App stores Fake apps, trademark misuse
Web Phishing sites, spoofed pages

Manual Monitoring (Low Cost)

Method Frequency
Search Brand name + variants (brand+ai, brand+app, brand+official)
Google Alerts Brand name, product names
Social search X, LinkedIn, Instagram for brand mentions
Marketplace search Amazon, eBay for counterfeit listings

Tip: Document findings; escalate to brand-protection for takedown when infringement is confirmed.

Automated Tools (Scale)

Capability Description
AI detection Machine learning, image recognition, NLP to detect abuse across channels
Multi-channel Domains, social, marketplaces, paid search, dark web
Enforcement Case management, takedown workflows, platform integrations
Trademark watch USPTO, trademark office monitoring; litigation insights

Vendor types: BrandShield, Tracer Protect, CompuMark, CounterFind—evaluate by coverage, enforcement rate, and budget.

Monitoring Cadence

Level Cadence Use
Basic Weekly search; Google Alerts Low-risk; preventive
Standard Daily alerts; monthly marketplace check Moderate risk
Enterprise Real-time monitoring; dedicated vendor High-value brand; prior incidents

Output Format

  • Monitoring plan (channels, cadence, tools)
  • Search queries (brand + variants for manual check)
  • Alert setup (Google Alerts, social)
  • Escalation path (when to use brand-protection for takedown)

Related Skills

  • brand-protection: Report, takedown, evidence collection—use when infringement is found
  • domain-selection: Defensive registration; brand variants
  • branding: Brand asset consistency; what to protect
用于处理品牌冒充、钓鱼网站及商标侵权。指导用户收集证据(如WHOIS、截图),并按优先级向注册商、托管方及搜索引擎提交举报,以维护品牌权益。
用户面临品牌冒充或假冒网站 涉及钓鱼网站或商标侵权 提及fake site, impersonation, phishing site, trademark infringement等关键词
skills/kostja94_marketing-skills/brand-protection/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill brand-protection -g -y
SKILL.md
Frontmatter
{
    "name": "brand-protection",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user faces brand impersonation, fake websites, phishing sites, or trademark infringement. Also use when the user mentions \"fake site,\" \"impersonation,\" \"phishing site,\" \"trademark infringement,\" \"domain squatting,\" or \"brand abuse.\" For monitoring, use brand-monitoring."
}

Strategy: Brand Protection

Guides discovery, reporting, and prevention of brand impersonation—fake websites, phishing sites, trademark infringement, and domain squatting. See domain-selection for defensive domain registration; trust-badges for official site verification signals; about-page for identity declaration.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for brand name, official domain, and key assets.

Identify:

  1. Impersonation type: Fake website, phishing, trademark misuse, domain squatting
  2. Evidence available: Screenshots, URLs, WHOIS, hosting info
  3. Legal assets: Registered trademark, copyright ownership
  4. Impact: Traffic interception (fake site ranks for brand queries)? Payment fraud (users pay on fake site, then contact official support)?

Evidence Collection Checklist

Item Action
Full URLs Document all key pages of the fake site
Screenshots Homepage, product pages, logo, layout; include date/time
Comparison Side-by-side: official vs fake (layout, logo, copy similarity)
WHOIS Use ICANN Lookup for registrar, creation date, registrant
Hosting IP lookup to identify hosting provider

Reporting Channels (Priority Order)

Channel Entry Use Case
Domain registrar Abuse / Report Misuse on registrar site Brand impersonation, trademark, fraud
Hosting provider Same; submit abuse form Hosting infringing content
Google Safe Browsing Report Phishing Phishing / impersonation risk
Google Trademark Trademark Complaint or trademark@google.com Trademark infringement in search; requires registered trademark
Bing Content Removal Content Moderation Platform Copyright/trademark; content removal from Bing
Payment processors PayPal Resolution Center, Stripe support If fake site accepts payments; report fraud
Social platforms X, Facebook, Instagram abuse forms If fake site is promoted or linked there
Google Ads / Microsoft Ads Platform trademark complaint forms If impersonator runs brand ads
DMCA To hosting provider Copyright infringement; images, copy, design copied
ICANN DNS Abuse complaint If registrar does not respond within reasonable time

Report content: Include full URL, clear description of fraudulent activity, and all evidence (screenshots, logs).

Reporting Best Practices

Registrar vs hosting: Use ICANN Lookup for registrar. For hosting, use IP lookup (HostingCheckerOnline, HostingDetector, ipinfo.io) to find origin server—registrar may be Cloudflare while origin host is elsewhere; report to both.

Cloudflare as registrar: Use abuse.cloudflare.com or abuse form; select "Phishing & Malware" for impersonation. Email complaints are generally not processed; use the online form. Provide specific URLs of infringing pages.

Hosting detection: Sites behind Cloudflare CDN hide origin IP. Use reverse IP lookup or hosting detection tools to identify underlying host; submit abuse to that provider as well.

Parallel reporting: Submit to registrar, host, and Google Safe Browsing simultaneously; do not wait for one before others. Google trademark review takes 1–8 weeks.

Legal Options

Option When Notes
Cease and desist Trademark infringement Lawyer-drafted; often first step
DMCA takedown Copyrighted material copied Images, copy, design; hosting providers typically comply
Consumer protection Scam / fraud FTC ReportFraud.ftc.gov (US)
Law enforcement Financial loss, identity theft IC3 (FBI) for cybercrime

Prevention Measures

Defensive Registration

  • Register brand+ai, brand+app, brand+official, etc. See domain-selection for defensive registration.
  • Redirect variants to main domain; do not deploy separate sites.

Official Site Verification

Place "Official website: [domain]" prominently:

  • Homepage (above fold or hero)
  • Sign-in / Sign-up pages
  • Pricing / Payment pages: "Only pay at [official-domain]. Do not enter payment on other domains."
  • Footer: "© [Brand]. Official site: [domain]"
  • FAQ: "How do I verify I'm on the official site?" → "The only official URL is [domain]. Any other domain is not affiliated."

Use trust-badges for verification signals. See about-page for identity declaration.

Customer Support (Payment Fraud)

When users report "can't use after payment" but no record exists—likely paid on fake site:

  1. Verify source: Ask which URL they used (request screenshot or URL).
  2. Response template: Explain that the only official site is [official-domain]; if they paid elsewhere, that site is not affiliated. Recommend: (a) dispute charge with payment provider, (b) use only [official-domain] going forward.
  3. Roll out template to support team; ensure consistent messaging.

User Education

  • Social media pinned post / announcement: "Only use [official-domain]"
  • Email signatures, support replies: link to official domain only

Traffic Recovery (When Impersonation Intercepts Search)

Tactic Purpose
Brand search ads Run Google Ads and Microsoft Ads on brand terms; ensure official site appears first for brand queries
SEO Strengthen official site for branded queries; Organization schema, clear H1, meta tags. See schema-markup, title-tag
Social Pinned post: "Only use [official-domain]. Beware of impersonation."

Monitoring (Ongoing)

  • Periodic search: brand name + common variants (e.g., brand+ai, brand+app)
  • See brand-monitoring for monitoring setup, tool selection, and cadence

Timeline (Typical)

Phase Focus
Immediate (Days 1–3) Support template; site declaration; evidence collection
Short-term (Week 1–2) Abuse reports; Google Safe Browsing; DMCA if applicable
Traffic (Week 2+) Brand ads; SEO; social announcement
Ongoing Monitoring; defensive registration if feasible

Implementation Checklist

Short-term (1–2 weeks): Evidence collection; abuse reports to registrar and host; Google Safe Browsing report; DMCA if applicable; add "Official website" on site.

Medium-term: Add impersonation guidance to domain-selection; official verification to trust-badges, about-page.

Long-term: Periodic search (brand + variants); brand monitoring (BrandShield, Doppel); defensive registration of variants.

Output Format

  • Evidence package (checklist, evidence list)
  • Report templates (registrar, hosting, Google)
  • Timeline (immediate vs medium vs long-term actions)
  • Prevention (defensive registration, site verification, user education)

References

Related Skills

  • domain-selection: Defensive domain registration; brand variants
  • rebranding-strategy: When rebranding, sync brand protection checks
  • brand-monitoring: Proactive monitoring setup; tool selection; this skill = reactive takedown
  • branding: Brand asset protection; consistency
  • trust-badges: Official site verification signals
  • about-page: Official identity and domain declaration
  • homepage-generator: "Official website" placement
  • google-ads, paid-ads-strategy: Brand search ads for traffic recovery
  • schema-markup, title-tag: SEO for branded queries
用于生成、优化或审计面包屑导航,涵盖UI实现、SEO及JSON-LD结构化数据。支持位置型和属性型面包屑设计,提供最佳实践指导以提升点击率和用户体验。
用户希望添加或优化面包屑导航 提及 breadcrumbs, BreadcrumbList schema, site hierarchy display 等关键词
skills/kostja94_marketing-skills/breadcrumb/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill breadcrumb-generator -g -y
SKILL.md
Frontmatter
{
    "name": "breadcrumb-generator",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to add, optimize, or audit breadcrumb navigation. Also use when the user mentions \"breadcrumbs,\" \"breadcrumb trail,\" \"breadcrumb nav,\" \"breadcrumb links,\" \"path navigation,\" \"site breadcrumb,\" \"BreadcrumbList schema,\" \"location-based breadcrumb,\" \"attribute-based breadcrumb,\" \"site hierarchy display,\" \"add breadcrumbs,\" or \"breadcrumb SEO.\" For BreadcrumbList JSON-LD, use schema-markup. For main nav, use navigation-menu-generator."
}

Components: Breadcrumb Navigation

Guides breadcrumb implementation for SEO, UX, and GEO. Breadcrumbs show users their location in the site hierarchy and help search engines understand content taxonomy. Well-implemented breadcrumbs can increase CTR by 20–30%, reduce bounce rates by up to 30%, and strengthen internal linking.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Breadcrumb UI: Visual trail (Home > Category > Page)
  • BreadcrumbList schema: JSON-LD structured data for rich results
  • Placement: Typically below header, above main content

Breadcrumb Types

Type Use case Recommendation
Location-based Reflects site hierarchy (Home > Blog > SEO > Page) Recommended — most SEO-friendly; clear structure
Attribute-based Shows product attributes (Home > Electronics > Phone > iPhone 15) E-commerce; product classification
Path-based Shows user's browsing path Avoid — different users, different paths; can cause confusion

Default: Use location-based for most sites. Use attribute-based for e-commerce product pages.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site structure and key pages.

Identify:

  1. Site structure: Hierarchy depth (e.g., Home > Category > Subcategory > Product)
  2. Page types: Blog, e-commerce, docs, etc.
  3. Multi-category: Products in multiple categories—need canonical path

Best Practices

Structure & Hierarchy

Practice Guideline
Depth 3–5 levels optimal; avoid very long trails
Anchor text Keyword-rich, human-readable; descriptive
Consistency Same pattern across all pages (blog, category, product)
Canonical path For items in multiple categories, define one canonical breadcrumb to avoid diluted link equity

Schema (BreadcrumbList)

See schema-markup for BreadcrumbList requirements, JSON-LD example, and multiple paths. Schema must match visible breadcrumbs exactly.

Placement & Design

Practice Guideline
Position Below nav bar or above page title; top of content area
Visual Smaller font, lighter color; avoid competing with main content
Separator Clear separator (>, /, ›); consistent across site
Naming Match page title or nav menu; concise, descriptive

UX & Accessibility

Practice Guideline
Mobile Tappable; short, readable text; high contrast
Long trails Horizontal scroll container rather than truncating
Current page Last item non-linked; use aria-current="page"
Screen readers nav with aria-label="Breadcrumb"; proper landmark

SEO Impact

  • Internal linking: Breadcrumbs distribute link equity
  • Crawlability: Helps crawlers understand taxonomy
  • GEO: BreadcrumbList appears frequently on pages cited by Google AI Mode
  • Note: Google removed visual breadcrumbs from mobile SERPs (Jan 2025) to save space, but schema and algorithmic value remain important for crawlers and AI. See serp-features for breadcrumb SERP display.

Implementation

Semantic HTML

<nav aria-label="Breadcrumb">
  <ol itemscope itemtype="https://schema.org/BreadcrumbList">
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
      <a itemprop="item" href="https://example.com/"><span itemprop="name">Home</span></a>
      <meta itemprop="position" content="1" />
    </li>
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
      <a itemprop="item" href="https://example.com/category/"><span itemprop="name">Category</span></a>
      <meta itemprop="position" content="2" />
    </li>
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" aria-current="page">
      <span itemprop="name">Current Page</span>
      <meta itemprop="position" content="3" />
    </li>
  </ol>
</nav>

Implementation: Generate BreadcrumbList from route segments or page metadata. Ensure item URLs are absolute. Use next-seo BreadcrumbJsonLd or custom component. See schema-markup for JSON-LD structure.

When to Use Breadcrumbs

Site type Use case
E-commerce Category > Subcategory > Product
Blog Home > Blog > Category > Post (see article-page-generator for article page structure)
Docs Home > Docs > Section > Page
Large sites Any site with 3+ level hierarchy

Skip on flat sites (e.g., single-page, 1–2 level depth).

Deep pages: For 6+ levels, consider omitting middle levels; show only the most important categories to avoid clutter.

Platform Notes

Platform Options
WordPress Yoast SEO, Rank Math, Breadcrumb NavXT
Next.js next-seo BreadcrumbJsonLd, custom from route segments
Shopify, Drupal, Joomla Built-in or plugin support

Common Errors

Error Fix
Relative URLs in schema Use absolute URLs (https://)
Schema doesn't match visible trail Keep schema and UI in sync
Missing position Include sequential position (1, 2, 3…)
Last item linked Current page typically not a link
Too many levels Limit to 5–7; omit middle levels for deep paths
Inaccurate path Breadcrumb must reflect actual site structure
No schema Add BreadcrumbList per schema-markup; otherwise no SERP breadcrumbs; see serp-features

Output Format

  • Structure recommendation (levels, labels)
  • BreadcrumbList JSON-LD — see schema-markup for structure; with absolute URLs
  • HTML structure (semantic, accessible)
  • Placement (below header, above main)
  • Validation: Rich Results Test, Schema Markup Validator, Search Console enhanced report

Related Skills

  • article-page-generator: Article pages use breadcrumbs (Home > Blog > Category > Post)
  • schema-markup: BreadcrumbList schema implementation; JSON-LD structure, requirements
  • navigation-menu-generator: Header nav; breadcrumbs complement primary nav
  • internal-links: Breadcrumbs are internal links; distribute link equity
  • site-crawlability: Breadcrumbs help crawlers understand structure
  • category-page-generator: Category hierarchy in breadcrumbs
  • products-page-generator: Product pages often need breadcrumbs (Category > Product)
  • serp-features: Breadcrumb SERP display; rich results
指导配置规范标签以解决重复内容、URL信号合并及首选URL声明。涵盖HTTPS重定向、www与非www统一、多语言处理及Next.js等框架实现,避免链式引用。
用户提到canonical或canonical URL 需要修复重复内容问题 希望统一URL信号或合并URL 涉及HTTP到HTTPS的迁移
skills/kostja94_marketing-skills/canonical/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill canonical-tag -g -y
SKILL.md
Frontmatter
{
    "name": "canonical-tag",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to configure canonical URLs, fix duplicate content, or consolidate URL signals. Also use when the user mentions \"canonical,\" \"canonical URL,\" \"duplicate content,\" \"duplicate content fix,\" \"preferred URL,\" or \"URL consolidation.\" For GSC duplicates, use google-search-console."
}

SEO Technical: Canonical

Guides canonical tag configuration to consolidate duplicate content and declare preferred URLs.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (Technical SEO)

  • Duplicate site versions: HTTPS vs HTTP; www vs non-www; trailing slash (/page vs /page/) — choose one, 301 redirect others
  • Duplicate content: Canonical tags; consolidate and 301 to preferred URL
  • HTTPS: SSL/TLS; secure connection; ranking signal since 2014

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site URL and language structure.

Identify:

  1. Site URL: Base domain
  2. Duplicate scenarios: Multi-language, query params, pagination, alternate URLs
  3. Framework: Next.js, React, static, etc.

Canonicalization Methods (Choose by Scenario)

Method When Strength
301 redirect Preferred; server can redirect Strongest — permanent redirect
Canonical tag Cannot redirect (e.g. params, pagination) Strong — HTML signal
robots.txt Block non-canonical paths Weak — advisory only

Use 301 for HTTP→HTTPS, www variants, trailing slash. Use canonical for params, pagination, UTM.

HTTPS & Security

HTTPS is a ranking signal (Google, 2014). Users and crawlers should access only the HTTPS version.

Requirement Action
SSL/TLS certificate Install valid certificate; use Let's Encrypt for free
301 redirect HTTP → HTTPS; all HTTP requests redirect to HTTPS
Mixed content No HTTP resources on HTTPS pages; fix mixed content warnings
HSTS Optional; Strict-Transport-Security header for repeat visitors

WWW vs non-WWW: Choose one preferred version; 301 redirect the other. See canonical rules above.

When to Use Canonical

  • Multi-language: Each language version has its own canonical; use hreflang with canonical
  • Same content, multiple URLs: Params, pagination, tracking params, www vs non-www, trailing slash (/page vs /page/)
  • Self-referencing: Canonical should point to self or the preferred version
  • Avoid chain canonical: A→B→C is invalid

Rules

Rule Note
Absolute URL Include https://
Consistency Must match current page URL or the chosen preferred version
No chains A→B→C is invalid

Implementation Patterns

Next.js (metadata)

export const metadata = {
  alternates: {
    canonical: "https://example.com/page-slug",
    languages: {
      zh: "https://example.com/zh/page-slug",
      en: "https://example.com/page-slug",
      "x-default": "https://example.com/page-slug",
    },
  },
};

HTML (generic)

<link rel="canonical" href="https://example.com/page-slug" />

Server Redirects (301)

Apache (.htaccess):

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Nginx:

return 301 https://$host$request_uri;

Relationship to Other Technical SEO

  • Sitemap: URLs in sitemap should match canonical
  • IndexNow: Submit canonical URLs

Output Format

Related Skills

  • url-structure: URL hierarchy and format; canonical handles duplicate variants (HTTPS, www, trailing slash)
  • localization-strategy: hreflang + canonical for multi-language
  • xml-sitemap: Sitemap URLs should match canonical
  • indexnow: Submit canonical URLs
  • google-search-console: Find duplicate content in Coverage report
  • indexing: Resolve indexing issues
  • site-crawlability: Crawl budget; redirect chains; canonical reduces duplicate crawl waste
指导卡片布局设计,涵盖产品、博客等类型的结构元素、响应式网格及设计原则,提升内容可读性与SEO。
用户希望设计或优化卡片布局 提及card layout, product cards, template cards等关键词
skills/kostja94_marketing-skills/card/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill card -g -y
SKILL.md
Frontmatter
{
    "name": "card",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to design, optimize, or audit card layouts for content display. Also use when the user mentions \"card layout,\" \"card component,\" \"card grid,\" \"product cards,\" \"template cards,\" \"tool cards,\" \"feature cards,\" \"gallery cards,\" \"integration cards,\" or \"card design.\" For grids, use grid."
}

Components: Card Layout

Guides card layout design for scannable, responsive content display. Cards are self-contained containers that group related content; used in grids for blog posts, products, templates, tools, features, galleries, and integrations.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Card Anatomy

Element Purpose
Container Border, background, shadow; consistent padding
Image / Thumbnail Visual anchor; consistent aspect ratio (1:1, 4:3 common)
Title Clear; keyword-rich where relevant
Description / Metadata Supporting text; date, author, category
CTA Action button or link; "View," "Use," "Connect," etc.

Principle: One card = one topic. Keep each card focused for scannability.

Card Types by Use Case

Type Typical Elements Page Skill
Product card Image, name, price, CTA (Add to cart, View) products-page-generator
Template card Thumbnail, name, short description, "Use" or "Preview" CTA template-page-generator
Tool card Name, one-line benefit, CTA to tool page tools-page-generator
Feature card Name, benefit, optional screenshot features-page-generator
Gallery / Showcase item Thumbnail, title, creator, link showcase-page-generator
Integration card Logo, name, short description, "Connect" or "Install" integrations-page-generator
Blog / Article card Cover image, title, excerpt, date, author blog-page-generator, article-page-generator
Resource card Thumbnail, title, format (guide, webinar), CTA resources-page-generator

Layout & Responsiveness

  • Grid: CSS Grid repeat(auto-fill, minmax()) or Flexbox; columns adapt to viewport
  • Mobile: Single column on small screens; 2–4 columns on desktop
  • Consistency: Same padding, spacing, and aspect ratios across cards
  • Hover: Subtle elevation (shadow, translate-y); avoid scale that causes layout shift (CLS)

Design Principles

Principle Practice
Visual hierarchy Title > description > CTA; clear flow
Scannability Minimal text; benefit-led copy
Consistency Same structure across all cards in a grid
Action clarity One primary CTA per card; avoid choice overload

SEO & Schema

  • Cards themselves: No specific schema; layout is UI
  • Content in cards: Use appropriate schema for the page (Product, Article, ItemList, etc.); see schema-markup
  • Images: Alt text on thumbnails; see image-optimization
  • Links: Descriptive anchor text; internal linking; see internal-links

Grid vs List vs Masonry vs Carousel

Layout Best for Skill
Grid Visual content (products, templates, gallery); equal emphasis grid
List Text-heavy (blog index, docs); compact; scan by title list
Masonry Varying heights; image gallery, portfolio masonry
Carousel Limited space; testimonials, logos, featured rotation carousel

Related Skills

  • products-page-generator: Product cards, grid layout, category pages
  • template-page-generator: Template cards, gallery structure
  • tools-page-generator: Tool cards, toolkit hub
  • features-page-generator: Feature grid/list
  • showcase-page-generator: Gallery grid, per-item format
  • integrations-page-generator: Catalog grid, integration cards
  • category-page-generator: Product grid, consistent layout
  • grid: Grid layout for card display; when to use grid
  • list: List layout; cards in list format
  • masonry: Masonry for varying-height cards (gallery)
  • carousel: Carousel for card slides (testimonials, featured)
  • hero-generator: Hero vs card—hero is single above-fold; cards are repeated units
  • brand-visual-generator: Typography, spacing, visual consistency
  • image-optimization: Card thumbnail optimization, alt text, LCP
用于创建、优化或审核招聘/职业页面的技能。涵盖内容结构、雇主品牌塑造、SEO优化及最佳实践,适用于涉及招聘、职位、公司文化等相关需求的场景。
用户想要创建、优化或审计职业页面 用户提及招聘、职位、入职、开放岗位、公司文化、职业页面、工作列表、我们正在招聘、加入我们团队或招聘页面
skills/kostja94_marketing-skills/careers/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill careers-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "careers-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit a careers or jobs page. Also use when the user mentions \"careers,\" \"jobs,\" \"hiring,\" \"open positions,\" \"company culture,\" \"careers page,\" \"job listings,\" \"we're hiring,\" \"join our team,\" or \"recruitment page.\" For sitewide page planning, use website-structure."
}

Pages: Careers

Guides careers page content, structure, and employer branding for recruitment.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for company values, culture, and differentiators.

Identify:

  1. Audience: Job seekers, passive candidates
  2. Open roles: List or link to ATS
  3. Employer brand: Culture, benefits, perks

Best Practices

Essential Elements

Element Purpose
Open positions List or link to job board/ATS
Company culture Values, team, work environment
Benefits Health, remote, PTO, learning
Process What to expect when applying
CTA Apply, view roles, contact recruiting

Structure

  • Hero: Employer value proposition; "Join us"
  • Open roles: List or embed; filter by department/location
  • Why us: Culture, benefits, growth
  • Team: Photos, quotes, diversity
  • Process: Application steps

SEO

  • Target "company name careers," "jobs at company"
  • Schema: JobPosting for each role
  • Internal links from About, Home

Output Format

  • Structure outline
  • Employer brand messaging
  • Open roles section approach
  • SEO metadata and schema

Related Skills

  • about-page-generator: Culture and team overlap
  • schema-markup: JobPosting schema
  • title-tag, meta-description, page-metadata: Careers page metadata
指导电商分类页的结构、内容及SEO优化。涵盖层级规划、URL与筛选导航管理、页面文案及元标签规范,旨在提升长尾词排名、减少重复内容并提高转化率。
创建或优化电商分类页 审计产品列表页 涉及 facet navigation 或 filter URLs 提到 category page, product category, category SEO
skills/kostja94_marketing-skills/category-pages/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill category-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "category-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit e-commerce category pages or listing pages. Also use when the user mentions \"category page,\" \"product category,\" \"faceted navigation,\" \"filter URLs,\" \"e-commerce listing,\" \"category SEO,\" \"category structure,\" \"product filters,\" or \"listing page.\" For programmatic SEO at scale, use programmatic-seo."
}

Pages: Category Pages

Guides e-commerce category page structure, content, and SEO optimization. Category pages organize products by attributes and drive 3x more organic revenue than product pages by ranking for broad, high-volume keywords.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product catalog and site structure.

Identify:

  1. Catalog: Product count, categories, subcategories
  2. Facets: Filters (size, color, price, brand, etc.)
  3. URL structure: Current hierarchy, parameter handling

Category Structure

Hierarchy

Principle Practice
Logical grouping General -> specific (e.g., Furniture -> Bedroom furniture -> Beds)
User search intent Match how users search (e.g., "bedroom furniture" vs "furniture")
Crawl depth <=4 clicks from homepage; shorter paths improve indexing
Long-tail categories Niche categories convert better (36% vs 11.5% for broad)

URL Structure

  • Subfolders: example.com/shoes/sneakers, example.com/shoes/outdoor-shoes
  • Slugs: Descriptive, keyword-rich; lowercase; no stop words
  • Avoid: Dates, timestamps, /category/ prefix
  • Breadcrumbs: Show path; help users and crawlers

Faceted Navigation (Filters)

Filters create many URL combinations (size + color + price). Manage to avoid duplicate content and crawl waste:

Strategy Use
Canonical Point all faceted URLs to base category URL
robots.txt Block faceted URLs from indexing if needed
nofollow Add to internal links to faceted URLs
JavaScript Keep filters client-side; single URL for category

On-Page Content

Content Requirements

  • 150-300 words unique copy; pages with this rank ~2.7x higher than product-only grids
  • Placement: After hero/H1; FAQ block at bottom
  • Purpose: Help users decide; answer curation, materials, recommendations
  • Avoid: Manufacturer copy; crowding product grid

SEO Elements

Element Practice
H1 One per page; primary keyword; clear purpose
Title tag 50-60 chars; keyword; compelling for CTR
Meta description 150-160 chars; value props (free shipping, returns)
Schema ItemList, Product; AggregateRating if reviews; FAQ if applicable

Trust & Conversion

  • Reviews: Star ratings in SERPs; 99.9% of users read reviews; see serp-features for review rich results
  • FAQ: Answer materials, quality, recommendations; +157% conversion when used
  • Guides: Link to product guides; internal linking for SEO

Technical

  • Consistent layout: Same template across categories; predictable UX
  • Mobile: Responsive; touch targets >=44x44px
  • Redirects: 301 to category when product pages move; avoid breaking hierarchy

Output Format

  • Structure (hierarchy, URL paths)
  • Facet strategy (canonical, nofollow, robots)
  • Content (H1, intro copy, FAQ)
  • SEO (metadata, schema)
  • Checklist for audit

Related Skills

  • programmatic-seo: Programmatic SEO strategy; category pages as template-based scale
  • card: Card layout; product card structure, grid design
  • grid: Product grid layout; responsive columns
  • products-page-generator: Product cards, grid layout
  • canonical-tag: Faceted URL canonicalization
  • schema-markup: ItemList, Product, FAQ schema
  • internal-links: Category linking
  • breadcrumb-generator: Breadcrumb trail for category hierarchy
  • url-structure: URL hierarchy
用于生成、优化或结构化更新日志页面,提升信任度与功能采用率。支持SaaS/API等类型,提供内容撰写、分类组织、SEO及集成最佳实践,适用于changelog子域或路径规划。
用户请求创建或优化更新日志/发布说明页面 提及'changelog'、'release notes'、'what's new'、'updates'、'version history'等关键词
skills/kostja94_marketing-skills/changelog/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill changelog-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "changelog-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or structure a changelog or release notes page. Also use when the user mentions \"changelog,\" \"release notes,\" \"what's new,\" \"updates,\" \"product updates,\" \"version history,\" or \"changelog.yourdomain.com.\" For sitewide page planning, use website-structure."
}

Pages: Changelog

Guides changelog and release notes pages. Typically at changelog.* subdomain or /changelog. Builds trust, reduces support, increases feature adoption.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product and release cadence.

Identify:

  1. Product type: SaaS, API, mobile app, etc.
  2. Audience: End users, developers, both
  3. Release cadence: Weekly, monthly, continuous
  4. Format: Timeline, version-based, category (New, Improved, Fixed)

Changelog Structure

Section Purpose
Entry Date, version, title
Category New, Improved, Fixed, Deprecated (optional)
Description What changed, why it matters
Link To docs, blog, or in-app
Media Screenshots, GIFs, videos (optional)

Best Practices

Content

  • User benefit first: "You can now X" not "We added X"
  • Concrete: Specific features, not vague "improvements"
  • Scannable: Headlines, bullets, tags
  • Searchable: If many entries, add search/filter

Organization

  • Reverse chronological: Newest first
  • Grouping: By version or date range
  • Tags: Feature area, product module (optional)
  • RSS/email: Notify subscribers of updates

Placement

  • Subdomain: changelog.yourdomain.com
  • Path: /changelog, /updates, /releases
  • Embed: Widget in app or docs sidebar
  • Link from: Footer, docs, in-app

Output Format

  • Structure (layout, entry format)
  • Entry template (fields, tone)
  • Navigation (filters, search)
  • SEO (index, metadata)
  • Integration (embed, RSS, email)

Related Skills

  • docs-page-generator: Changelog linked from docs
  • docs-page-generator: API changelog for developers; docs includes API Reference
  • blog-page-generator: Major releases may have blog posts
  • top-banner-generator: Announce major updates on main site
指导通过论坛、社区及垂直社群进行推广与用户增长。涵盖 Indie Hackers、HN、Reddit、Discord 等平台策略,强调社区驱动增长的性价比。包含平台选择、冷启动规划及自建 Discourse 论坛的 SEO/GEO 优化指南。
forum promotion Indie Hacker Hacker News community growth Discord promotion vertical community brand encyclopedia Wikipedia Quora Reddit community community building forum marketing community invite
skills/kostja94_marketing-skills/community-forum/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill community-forum -g -y
SKILL.md
Frontmatter
{
    "name": "community-forum",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to promote via forums, communities, or invite users to join a community. Also use when the user mentions \"forum promotion,\" \"Indie Hacker,\" \"Hacker News,\" \"community growth,\" \"Discord promotion,\" \"vertical community,\" \"brand encyclopedia,\" \"Wikipedia,\" \"Quora,\" \"Reddit community,\" \"community building,\" \"forum marketing,\" or \"community invite.\" For Reddit copy, use reddit-posts. For strategy, use integrated-marketing."
}

Channels: Community & Forum Promotion

Guides forum promotion, community invitation, and vertical community marketing. Community-led growth (CLG) costs ~90% less than paid acquisition with ~3.2x higher customer LTV. Indie Hackers delivers ~23% conversion vs Product Hunt ~3%; HN and Reddit require sustained engagement. For cold start planning (first users, launch channels), see cold-start-strategy. For indie hacker strategy (first 100 users, Build in Public content framework, Indie Hackers tactics), see indie-hacker-strategy.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and brand voice.

Identify:

  1. Goal: Leads, community growth, brand awareness
  2. Platform fit: Indie Hacker, HN, Reddit, Discord, vertical forums
  3. Timeline: One-time launch vs sustained (4-6 months for Indie Hackers)

Forum Types

Platform Audience Use
Indie Hacker Indie makers, founders Sustained engagement; authentic journey posts; ~23% conversion vs PH 3%
Hacker News Tech, startups Show HN launch; ~1,300 posts/day; front page = luck + timing
Hackernoon Dev, tech readers Content distribution
Industry forums Niche verticals Discount codes for leads; search "[industry] forum"; post event/activity promotion; see discount-marketing-strategy for code strategy
Reddit Subreddit-specific See reddit-posts; 90/10 rule; 29+ posts for traction
Discourse (self-hosted forum) Community-specific Owned forum; full SEO/GEO control; see Discourse SEO section below

Discourse (Self-Hosted Forum) SEO

If you run a Discourse forum (or similar self-hosted forum), SEO/GEO considerations differ from posting on third-party platforms:

Practice Guideline
Guest access Allow anonymous reading for categories meant to attract traffic; login-only mode severely limits indexed pages
Topic structure First post carries SEO weight; write clear titles and substantive opening posts; avoid fragmented short topics
Sitemap & robots Discourse generates sitemaps automatically; monitor in GSC as a separate property (subdomain or subdirectory)
Content quality Merge duplicates, mark resolved threads, surface FAQ topics—forum-level quality signals affect crawl and citation
GEO Structured topic titles and well-formed opening posts are extractable by AI tools; forum format with timelines and accepted answers lends credibility
Subdomain vs subdirectory Discourse recommends subdomain for operational reasons; search engines do not inherently favor either for ranking—choose based on infrastructure, not SEO alone

Hacker News Launch

Practice Guideline
Title "Show HN: [Product] - [specific problem solved]"; honest, no clickbait
Timing Tue-Thu; peak US hours; avoid weekends, Mon, Fri
First comment Invitation to engage; product status (beta/MVP); differentiated solution; try-it link
Assets Live demo, GIFs, screenshots, 30-60s demo video
Expectation Traffic spike, not sustained growth; partly luck-dependent

Indie Hackers Best Practices

  • Sustained engagement: 4–6 months; not a one-time launch
  • Content: Authentic journey posts; product "sprinkled within"; avoid heavy promotion
  • Result: ~23% conversion vs Product Hunt ~3%; organic traffic from authentic sharing

For full Indie Hackers tactics, Build in Public content framework (40/30/20/10), first 100 users → indie-hacker-strategy.

Community Invitation Tactics

Channel Method
Welcome email Post-signup automation; 4x open, 5x CTR vs regular campaigns
Homepage CTA Button, popup, banner; above-the-fold upgrade CTA
In-site placement High-visibility areas; user-focused sections (e.g. dashboard, settings)
Banner Homepage, carousel below hero
Registration emails Success/confirmation email with community link
EDM campaign Newsletter + banner, interview-for-membership
Discord Post event/community info; founder engagement 2-3h/day
Vertical forums Search "[industry] forum"; post event/activity promotion
Post-login form In-app signup form shown after login; high-intent placement

Welcome email best practices: One clear CTA per email; front-load value in subject; personalize (signup source, interests); link to best content, events; ask questions (~75% reply rate). Automated 2-4 email sequence.

Vertical Community Channels

Principle Guideline
Target Find channels where target audience gathers
Niche over broad Industry-specific subgroups; avoid mass posting
Caution Mass posting risks removal; match community tone; choose wording carefully
Examples Reddit subreddits, Discord servers, Quora, X, Hacker News, Stack Overflow, niche B2B communities
Regional Large communities by locale—event/activity promotion; target vertical channels within each; see localization-strategy

Community-led growth: Engage before promoting; build trust; contribute value first.

Natural Traffic (Complementary)

Channel Use
Hashtags Social tag optimization
Facebook groups Indirect referral
Giveaways Attention and conversion

Brand Basics (Encyclopedia, Q&A)

Platform Use
Wikipedia Global; neutral, cited content; brand credibility
Quora Q&A; brand discussion, thought leadership, long-term SEO
Stack Overflow Tech/dev; expertise signals, backlinks
Regional Local encyclopedias and Q&A by locale; verified credentials; see localization-strategy

Wikipedia: Neutral language, credible references, no promotional content. Regional platforms require verified credentials; prioritize local search share. Free and sustainable; supports long-term conversion while search habits persist.

Output Format

  • Forum selection and approach (HN vs IH vs industry)
  • Community invitation plan (welcome email, CTA, banner, EDM, Discord)
  • Vertical channel targeting
  • Content strategy (authentic vs promotional mix)
  • Timeline (launch vs sustained)

Related Skills

  • reddit-posts: Reddit post copy, subreddit rules
  • cold-start-strategy: Cold start orchestrates Product Hunt, Reddit, Indie Hackers, directories; this skill handles forum/community tactics
  • indie-hacker-strategy: Indie hacker first 100 users; Build in Public; Indie Hackers tactics; this skill = forum/community tactics; indie-hacker = strategy + context
  • directory-submission: Product Hunt, Taaft; different from forum community
  • affiliate-marketing: Communities as recruitment channel
  • top-banner-generator, popup-generator: Homepage CTA, banner
  • newsletter-signup-generator: EDM, welcome email
  • localization-strategy: Regional markets (local platforms by locale)
用于SEO竞品分析,覆盖关键词、内容、外链及定位。通过对比竞品排名与结构,识别内容缺口和链接机会,辅助制定内容策略、文章审计及外链建设,提升市场定位与搜索表现。
用户提及竞品分析或研究 需要分析关键词重叠或差距 进行外链缺口评估 对比竞品内容结构与定价
skills/kostja94_marketing-skills/competitor-research/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill competitor-research -g -y
SKILL.md
Frontmatter
{
    "name": "competitor-research",
    "metadata": {
        "version": "1.2.1"
    },
    "description": "When the user wants to analyze competitors for SEO, content, backlinks, or positioning. Also use when the user mentions \"competitor analysis,\" \"competitor research,\" \"competitor keywords,\" \"competitor backlinks,\" \"link gap,\" \"content gap,\" \"competitor content,\" \"competitive analysis,\" or \"competitor comparison.\" For content roadmap, use content-strategy."
}

SEO Content: Competitor Research

Guides competitor research for SEO, content, backlinks, and positioning. Use when planning content, auditing articles, building links, or evaluating market position.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Research Types

Type Purpose Output
Keyword/topic Topics competitors rank for; gaps Keyword opportunities; content ideas
Content Structure, length, gaps vs top rankers Length target; H2 structure; content gaps
Backlink Link profile; sites linking to competitors Link gap; outreach targets
Pricing Competitor pricing, positioning Pricing context; differentiation
SEO metrics Organic traffic, rankings vs competitors Benchmark; opportunity areas

Competitor Keyword / Topic Analysis

Method Practice
Reverse engineering Analyze competitor titles, H1, URL; identify topics they rank for
SERP overlap Keywords with overlapping top-ranking pages → same cluster; #4–10 = opportunity
site: operator site:competitor.com to see indexed pages
Tool Ahrefs, Semrush—competitor keyword overlap, gap analysis

Output: Keyword opportunities; topics competitors cover that you don't.

Competitor Content Analysis

Element Check
Word count Top 10 average; length target for your content
H2 structure Topics covered; structure to adopt
Content gaps What top rankers cover that you miss
Keyword placement Primary keyword in title, H1, first 100 words
Format Lists, tables, FAQ; match or improve

Use when: Auditing or creating articles; see article-page-generator for Research Phase integration.

Competitor Article Fetch Workflow (for Article Analysis)

When analyzing or auditing a single article, use this lightweight workflow to obtain competitor articles:

  1. Obtain URLs: From user, project-context Section 11, or web search for "[target keyword]" to find top-ranking pages
  2. Fetch content: Use mcp_web_fetch or WebSearch to fetch 2–3 top-ranking pages
  3. Analyze: Word count, H2 structure, keyword placement, content gaps, CTA, schema
  4. Output: Competitor URLs, brief structure comparison, content gaps, length target, keyword opportunities

Output format: Competitor URLs; word count and H2 structure per URL; content gaps vs your article; recommended length target; keyword opportunities (terms top rankers use that your article misses).

Competitor Backlink Analysis

Action Purpose
Compare profiles Your backlinks vs competitors
Link gap Sites linking to competitors but not you
Opportunity Outreach to those sites; content they might link to

Tools: Ahrefs, Semrush—Link Intersect, competitor backlink reports. See backlink-analysis.

Competitor Pricing

Use Practice
Positioning Where you sit vs competitors
Differentiation Value prop when price differs
Alternatives pages Who to include; how to position

See pricing-strategy, alternatives-page-generator.

Data Sources

Source Use
SimilarWeb Traffic, engagement, traffic sources by domain
Ahrefs Competitor domains, backlinks, DR
SEMrush Organic competitors, traffic share
GA Referral traffic, acquisition by source
PostHog Competitor feature usage (if tracked)

Report Workflow

  1. Parse — Read Excel/CSV, infer domain, visits, traffic sources, etc. from headers
  2. Enrich — Web search, visit competitor sites; read project-context.md if present
  3. Build — Structure data for report
  4. Generate — Output report in chosen format

Output Format

  • Competitors identified
  • Research type (keyword, content, backlink, pricing)
  • Findings (gaps, opportunities, benchmarks)
  • Recommendations (content to create, links to pursue, positioning)

Report Structure Reference

Section Content
Executive Summary Key findings (top 3), top 3 recommendations
Competitor Overview Competitor, category, market position, key strength
Product Comparison Feature/capability vs Us vs Competitors
SWOT Analysis Our strengths/weaknesses/opportunities/threats; competitor deep dives
Marketing & Messaging Value prop, target audience, key channels
Gaps & Opportunities Gap, opportunity, priority
Prioritized Recommendations Recommendation, impact, effort, owner

Related Skills

  • keyword-research: Competitor reverse; keyword discovery
  • article-page-generator: Competitor article analysis in Research Phase
  • content-strategy: Competitor analysis for topic mapping
  • content-optimization: Competitor length and structure as reference
  • backlink-analysis: Competitor backlink comparison; link gap
  • seo-monitoring: Competitive comparison; organic vs competitors
  • alternatives-page-generator: Competitor selection; comparison framing
  • migration-page-generator: Competitor migration paths
  • pricing-strategy: Competitor pricing context
  • affiliate-marketing: Find affiliates promoting competitors
  • directories: Competitor info for directory submissions
用于创建、优化或审核联系页面及表单的助手。提供表单设计最佳实践,包括字段精简、单列布局、清晰标签和醒目CTA。同时涵盖页面布局、信任信号建立、SEO元数据及无障碍检查,以提升转化率和用户体验。
用户想要创建或优化联系页面 用户提到contact page, contact form, get in touch等关键词 需要审核联系表单的设计与文案
skills/kostja94_marketing-skills/contact/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill contact-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "contact-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit contact page and forms. Also use when the user mentions \"contact page,\" \"contact form,\" \"get in touch,\" \"support form,\" \"contact us,\" \"reach us,\" \"contact information,\" \"support contact,\" or \"inquiry form.\" For sitewide page planning, use website-structure."
}

Pages: Contact

Guides contact page design and form optimization for conversions.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for brand voice.

Identify:

  1. Contact types: Sales, support, general, press
  2. Form purpose: Lead capture, support ticket, demo request
  3. Alternative channels: Email, phone, chat, social

Best Practices

Form Design

Principle Guideline
Short 3-5 fields for basic contact; long forms increase abandonment
Single column Vertical layout; works better on mobile
Logical grouping Name+email together; address fields together
Required fields Mark clearly (asterisk); avoid surprises
Progressive disclosure Show relevant fields based on selections

Field Labels

  • Clear language: "Email Address" not "Email ID"
  • Conversational: Friendly, welcoming
  • No jargon: Universally understood terms

CTA Button

  • Action verbs: "Send Message," "Get in Touch," "Start a Conversation"
  • Avoid generic: "Submit" ? "Send Message"
  • Stand out: Contrasting color, clear hierarchy

Page-Level

Element Guideline
Visibility "Contact" or "Support" in main nav, not just footer
Mobile Appropriate input types (tel for phone), large tap targets
Proofreading No typos--credibility at conversion moment
Alternatives Email, phone, chat if form isn't right

Trust

  • Response time: "We reply within 24 hours"
  • Privacy: Link to privacy policy near form
  • Security: HTTPS, visible trust signals

Output Format

  • Form structure (fields, order)
  • Copy (labels, placeholder, CTA)
  • Page layout and placement
  • SEO metadata
  • Accessibility checklist

Related Skills

  • landing-page-generator: Lead capture LP contains contact form; demo request CTA destination
  • about-page-generator: Contact often linked from About
  • legal-page-generator: Privacy policy link near form
  • title-tag, meta-description, page-metadata: Contact page metadata
用于规划跨渠道内容营销,涵盖内容类型、格式、分发及复用策略。适用于制定内容日历、漏斗映射及多渠道内容组合,旨在解决持续创作新内容的挑战,提升品牌与转化。
用户希望规划跨渠道内容营销 定义内容类型和格式 创建内容复用策略 提及“内容营销策略”、“内容日历”或“内容漏斗”
skills/kostja94_marketing-skills/content-marketing/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill content-marketing -g -y
SKILL.md
Frontmatter
{
    "name": "content-marketing",
    "metadata": {
        "version": "1.2.1"
    },
    "description": "When the user wants to plan content marketing across channels, define content types and formats, or create a content repurposing strategy. Also use when the user mentions \"content marketing strategy,\" \"content types,\" \"content formats,\" \"content repurposing,\" \"content calendar,\" \"content mix,\" \"owned content,\" \"content distribution,\" \"content funnel,\" or \"content planning across channels.\" For SEO calendar, use content-strategy."
}

Strategies: Content Marketing

Guides content marketing strategy across channels: content types, formats, distribution, and repurposing. 62% of successful B2B have a documented strategy; content repurposing addresses the top challenge—consistently developing new content. Use this skill when planning content across blog, email, social, video, and pages.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Content types: What you create (by purpose/theme)
  • Content formats: How it's delivered (article, video, email, post)
  • Channels: Where it's distributed (blog, email, X, LinkedIn, etc.)
  • Repurposing: One core content → multiple formats → multiple channels
  • Funnel mapping: Content by stage (awareness, consideration, decision)

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 3 (Value Proposition), 4 (Audience), 11 (Content Strategy).

Identify:

  1. Goals: Traffic, conversions, brand, retention
  2. Existing content: What already exists; audit gaps
  3. Capacity: Resources, tools, cadence
  4. Channels: Blog, email, social, video; which channels fit audience

Content Types (What You Create)

Type Purpose Funnel Skills
How-to guides Educate; informational intent Awareness, Consideration content-strategy, article-content, article-page-generator
Comparisons "X vs Y"; commercial intent Consideration content-strategy, alternatives-page-generator
List posts "Top 10," "Best X" Consideration content-strategy, article-content, article-page-generator
Case studies Proof; customer success Consideration, Decision customer-stories-page-generator
Product updates Feature launches, release notes Decision, Retention changelog-page-generator
News / Trending Industry news, hot topics Awareness article-content, article-page-generator
Glossaries Definitions; internal link hub Awareness glossary-page-generator
Tools / calculators Linkable assets; engagement Consideration
Funding / PR Funding, acquisitions Brand article-content, article-page-generator
Onboarding Welcome, first-use guidance Retention email-marketing
Campaign Promotions, limited-time Decision email-marketing
Newsletter Curated insights; nurture Retention email-marketing

Product Marketing Content

Type Use Format
QA answers Internal reference or customer-facing; product questions Docs, FAQ, KB
Use guide How to use product; onboarding Blog, docs, video
Maintenance guide Care, upkeep, best practices Docs, blog
Troubleshooting Common issues, bugs, fixes FAQ, docs, KB

Use: Blog, docs, or in-product; supports activation and retention. See faq-page-generator, docs-page-generator.

Content Formats (How It's Delivered)

Format Use Skills
Pages Homepage, about, features, pricing, landing homepage-generator, about-page-generator, landing-page-generator
Articles Blog posts, guides, listicles article-content, article-page-generator, blog-page-generator
Email EDM, newsletter, sequences email-marketing
Social posts X, LinkedIn, Reddit, TikTok twitter-x-posts, linkedin-posts, reddit-posts, tiktok-captions; visual-content for post images
Video Short-form, long-form, webinar video-marketing
Infographics Visual summaries visual-content
Slides / PDF Decks, whitepapers, eBooks
Podcast Audio episodes

Content Repurposing Matrix

Principle: One core content → multiple formats → multiple channels. Maximize ROI.

Core Content Formats Channels
Case study Article, video, infographic, slides Blog, email, LinkedIn, YouTube, sales deck
How-to guide Article, video, checklist, PDF Blog, email, YouTube, docs
Product update Article, email, post, video Blog, email, X, LinkedIn, changelog
Industry insight Article, podcast, post, newsletter Blog, Spotify, X, email

Example: One client success story → article (blog) + video (YouTube) + infographic (LinkedIn) + slides (sales) → 4 channels from 1 creation.

Funnel Mapping

Stage Content Focus Channels
Awareness Education, thought leadership, glossary, how-tos Blog, SEO, social, PR
Consideration Comparisons, case studies, demos, features Blog, email, landing, social
Decision Pricing, testimonials, product pages, case studies Website, email, sales
Retention Onboarding, newsletter, product updates, changelog Email, in-app, blog

Article Orientations

Article types by orientation—drives structure, SEO depth, and schema choice. See article-page-generator for page structure.

Orientation Examples Primary Goal SEO Priority
Funding / PR Funding rounds, acquisitions, executive hires Brand awareness, press, investor relations Low — thin content, few search queries
Product updates Feature launches, release notes, changelogs User education, product adoption Low–medium — internal announcements rarely rank
Guides / How-to Tutorials, step-by-step, best practices Education, lead nurture, authority High — matches search intent
News / Trending Industry news, hot topics, seasonal Engagement, social shares, topical relevance Medium — quick traffic spikes, short shelf life
Evergreen Pillar guides, glossaries, comparisons Long-term traffic, backlinks, authority High — compounds over time

SEO-driven vs non-SEO-driven: SEO-driven (how-to, listicles, comparisons) → target keywords, full optimization. Non-SEO-driven (funding, product updates) → focus on clarity, shareability, internal linking to SEO content. Hybrid: product launch posts can include SEO-friendly sections (e.g., "How to use [feature]").

Evergreen vs Timely Mix

Mix Ratio Use
Evergreen 70–75% Pillar guides, how-tos, comparisons, glossaries; long-term traffic; refresh 6–12 months
Timely 25–30% Seasonal, trending, news; quick spikes; link into evergreen pillars

Evergreen vs timely (article-level): Evergreen = year-round relevance; steady traffic; refresh every 6–12 months. Timely = weeks to months; spikes then decline; often one-and-done; use NewsArticle schema. Recommended mix: 70/30 or 60/40 evergreen-to-timely.

See content-strategy for SEO topic clusters and pillar-cluster structure.

Content Calendar

  • Map content types to topics and keywords
  • Prioritize by opportunity (volume → intent → feasibility)
  • Schedule by capacity; include update schedule for existing content
  • Plan repurposing: which core pieces become formats for which channels
  • Visual-first: Plan images in calendar from the start; see visual-content for specs and repurposing

Output Format

  • Content types plan (what to create)
  • Format × channel matrix (how and where)
  • Repurposing plan (one-to-many)
  • Funnel mapping (awareness/consideration/decision)
  • Content calendar (topics, keywords, deadlines, repurposing)

Related Skills

  • content-strategy: SEO topic clusters, pillar-cluster, editorial calendar; SEO content planning
  • integrated-marketing: PESO model, channel mix; content as owned media
  • article-content: Article body creation; word count by type; writing frameworks
  • howto-section-generator: How-to step sections; guides vs FAQ
  • article-page-generator: Article page structure, orientations; blog content
  • email-marketing: Email content types (onboarding, campaign, newsletter)
  • twitter-x-posts, linkedin-posts, reddit-posts, tiktok-captions: Platform-specific post formats
  • visual-content: Visual content planning; images for social, infographics, repurposing; cross-channel specs
  • landing-page-generator: Landing page copy and structure
  • customer-stories-page-generator: Case study content
  • branding: Brand voice, storytelling; content consistency
  • translation: Translation workflow for multilingual content; glossary, style guide
指导页面内容优化,涵盖字数策略、H2关键词布局、关键词密度控制及多媒体使用。适用于SEO内容长度、结构、关键词密度等需求,旨在提升搜索意图匹配度与排名。
content length word count keyword stuffing H2 keywords keyword density tables bullet points content structure
skills/kostja94_marketing-skills/content-optimization/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill content-optimization -g -y
SKILL.md
Frontmatter
{
    "name": "content-optimization",
    "metadata": {
        "version": "1.2.1"
    },
    "description": "When the user wants to optimize content for SEO—word count, H2 keywords, keyword density, multimedia, tables, lists. Also use when the user mentions \"content length,\" \"word count,\" \"keyword stuffing,\" \"H2 keywords,\" \"keyword density,\" \"tables,\" \"bullet points,\" or \"content structure.\" For keywords, use keyword-research."
}

SEO Content: Content Optimization

Guides on-page content optimization: word count, heading keywords, keyword density vs stuffing, multimedia, tables, and lists. Complements heading-structure (structure) and content-strategy (planning).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Word count: For articles, see article-content (word count by type). This skill covers generic content length strategy.
  • H2 keywords: Placement, quantity, variation
  • Keyword density vs stuffing: Natural use; avoid manipulation
  • Multimedia: Images, tables, lists, video for structure and Featured Snippets. See featured-snippet for snippet-specific optimization; video-optimization for video SEO.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for target keywords and content type.

Identify:

  1. Content type: Article, guide, listicle, pillar, news
  2. Target keyword: Primary and secondary
  3. Competitors: Top 10 average length and structure — see competitor-research

Word Count

Google does not rank by word count. Length should match search intent and topic depth. A 1,000-word post that satisfies intent can outrank a 3,000-word thin piece.

Reference Ranges by Content Type

For article word count by type (news, how-to, listicle, pillar, etc.), see article-content. Generic ranges:

Content type Word count Notes
News / announcements 300–600 Time-sensitive; concise
Standard articles / how-tos 1,000–1,500 Single topic; actionable
Listicles / guides 1,200–2,000 "Top 10," "Best X"
Pillar / cornerstone 2,000–3,500+ Comprehensive; cluster hub

Strategy

  1. Analyze top 10 for target keyword — average length and depth
  2. Match intent — informational often needs ~40% longer than transactional
  3. Value over padding — each section must add genuine value; avoid fluff
  4. Comprehensive coverage — answer the query and related questions

H2 Heading Keywords

Placement

  • Primary keyword: Include naturally in at least one H2 when relevant
  • Related keywords: Use LSI and long-tail in other H2s for topical coverage
  • Avoid stuffing: Headings must stay clear and readable; organic placement only

Quantity

  • No strict limit — one H2 per major section; structure follows content
  • Typical article: 4–8 H2s; pillar: 8–15+ H2s
  • Hierarchy: H1 → H2 (major sections) → H3 (subsections); don't skip levels

Best Practices

Practice Purpose
Descriptive H2s Search engines understand context; users scan
Answer-first Place direct answer in first 40–50 words after H2 for Featured Snippets; see featured-snippet
Keyword variation Use related terms; avoid repeating exact phrase in every H2
Logical flow H2s outline the article; support topical authority

Keyword Density vs Keyword Stuffing

Definitions

Term Meaning
Keyword density (Keyword count / Total words) × 100; a metric, not a ranking factor
Keyword stuffing Excessive, unnatural repetition to manipulate rankings; black-hat

Current Guidance

  • Keyword density is not a direct ranking factor — Google has stated since 2011 that repetition alone doesn't improve rankings
  • Reference range: 0.5%–1.5% for most content; some sources cite up to 2.5%
  • Use density mainly to avoid stuffing — if density exceeds ~2–3% and reads unnaturally, reduce
  • Prioritize natural placement: title, H1, first 100 words, 1–2 H2s, body; avoid forced repetition

How to Avoid Stuffing

  • Write for users first; keywords should fit naturally
  • Use synonyms, related terms, and question phrasing
  • If a sentence sounds awkward with the keyword, rewrite
  • Monitor: if every paragraph repeats the exact phrase, simplify

Multimedia: Images, Tables, Lists

Images

Practice Purpose
Alt, file names, captions See image-optimization for full image SEO (alt, format, responsive, lazy loading, image sitemap, LCP, captions for Featured Snippets)
Original over stock Unique images signal E-E-A-T — see eeat-signals

Content placement: Put images near relevant text; captions support snippet thumbnails. See image-optimization for captions; featured-snippet for snippet context.

Video

Practice Purpose
Embed + metadata VideoObject schema, video sitemap, thumbnail; see video-optimization
YouTube Google prioritizes YouTube in search; GEO citation; see youtube-seo, generative-engine-optimization
Featured Snippet (video) Video schema; timestamps/chapters; see featured-snippet

Tables

  • Use for: Comparisons, stats, specs, "X vs Y"
  • Semantic HTML: <table>, <thead>, <tbody>, clear column headers
  • Featured Snippets: ~6% of snippets are tables; optimize headers with target keywords. See featured-snippet
  • Mobile: Responsive; avoid horizontal scroll when possible
  • Data quality: No empty cells; consistent units; accurate, current data

Lists: Ordered vs Unordered

Type Use case SEO / Snippet
Ordered (<ol>) Steps, rankings, sequences, "Top 10" List snippets (~19% of Featured Snippets); how-to; see featured-snippet
Unordered (<ul>) Non-sequential items, features, options Bullet snippets; definitions, options

Best practices:

  • Use semantic <ol> and <ul>; avoid divs styled as lists
  • Answer-first: For snippet targets, put the direct answer in the first 40–50 words after the heading
  • Concise items: List items should be scannable; expand in body if needed
  • Logical order: Ordered lists = sequence matters; unordered = no sequence

GEO / AI Citation

Answer-first (direct answer in first 40–60 words after H2) supports both Featured Snippets and GEO. For article-level GEO (TL;DR, Key Takeaways, QAE pattern), see article-content and generative-engine-optimization. For Featured Snippet formats and optimization, see featured-snippet.


Content Audit Checklist

For article content audit (hook, QAE, product connection, CTA, references, gaps), see article-content. This skill covers generic content optimization (H2 keywords, multimedia, keyword density).


Output Format

  • Word count recommendation by content type
  • H2 outline with keyword placement
  • Keyword density check (avoid stuffing)
  • Structure (tables, lists) for Featured Snippet opportunity; see featured-snippet
  • Multimedia checklist (images per image-optimization; tables, lists)

Related Skills

  • heading-structure: H1–H6 hierarchy; H2 keyword placement
  • content-strategy: Topic clusters, pillar + cluster
  • keyword-research: Target keywords inform placement
  • featured-snippet: Snippet formats, structure; answer-first
  • howto-section-generator: How-to step sections; <ol> lists; HowTo vs FAQ
  • eeat-signals: E-E-A-T; original images, trust
  • image-optimization: Alt, captions, format, LCP, responsive, image sitemap
  • video-optimization: Video SEO; VideoObject; video sitemap
  • competitor-research: Competitor length and structure as reference
  • article-content: Article word count by type; Content Audit Checklist; article body creation
用于规划SEO内容策略,包括构建主题集群、支柱页面和集群文章。适用于制定内容日历、话题簇及编辑计划,旨在通过内部链接结构建立主题权威性,提升搜索引擎排名。
用户希望规划SEO内容 创建内容日历 构建主题集群 提及'content strategy' 提及'pillar content' 提及'editorial calendar'
skills/kostja94_marketing-skills/content-strategy/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill content-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "content-strategy",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to plan content for SEO, create content calendar, or build topic clusters. Also use when the user mentions \"content strategy,\" \"content plan,\" \"topic clusters,\" \"pillar content,\" \"pillar page,\" \"cluster articles,\" \"editorial calendar,\" \"content hub,\" \"content planning,\" \"content clusters,\" \"topic cluster strategy,\" \"content strategy for SEO,\" or \"content calendar.\" For editorial mix, use content-marketing."
}

SEO Content: Content Strategy

Guides content strategy for SEO: topic clusters, pillar pages, cluster articles, and editorial planning. For content marketing across all channels (blog, email, social, video), see content-marketing. For translation workflow and multilingual content, see translation.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and proof points.

Identify:

  1. Keywords: From keyword research — see keyword-research for discovery and clustering
  2. Existing content: What already exists
  3. Resources: Content capacity, tools
  4. Goals: Traffic, conversions, authority

Product-Led SEO: Do SEO around product/users, not around industry/search engines. See seo-strategy for Product-Led SEO principle, products suited for SEO, and workflow order.

Topic Clusters

Topic clusters organize content by topic rather than isolated keywords. A pillar page covers a broad core topic; cluster articles cover subtopics; all connect via internal links. This signals topical authority to search engines and AI systems.

Structure

Pillar page (broad topic, 2,000-5,000+ words)
    <-> internal links
Cluster 1 (subtopic, 800-2,500 words)
Cluster 2 (subtopic)
...
Cluster 6-12 (subtopics)
    <-> cluster to cluster links

Pillar Page

Attribute Guideline
Length 2,000-5,000+ words; comprehensive guide
Keyword Broad head term with search volume
Role Hub; links to all cluster articles; targets primary topic
Conversion Link to product/feature pages where relevant

Cluster Articles

Attribute Guideline
Count 6-12 articles per pillar (minimum 6 for authority)
Length 800-2,500 words each; focused on one subtopic
Keyword Long-tail, specific intent per article
Links Each cluster links to pillar; pillar links back; related clusters link to each other

Internal Linking Model

Link type Purpose
Pillar to Cluster Hub distributes authority; users discover subtopics
Cluster to Pillar Signals relationship; passes equity to hub
Cluster to Cluster Related subtopics; strengthens topical coverage

Structure and Content Equally Important

Framework and body quality both matter: TOC, chapter logic, and content depth are all essential for SEO and UX. Weak structure undermines strong writing; weak writing undermines strong structure. Plan both from the start.

Why Topic Clusters Work

  • Topical authority: Rank for multiple variations; comprehensive coverage signals expertise
  • Avoid cannibalization: One page per topic/keyword; no competing pages
  • Better internal linking: Clear logic; crawlers understand structure
  • AI citations: Clustered content gets ~42% more AI citations than standalone
  • Traffic: ~30% more organic traffic; rankings hold ~2.5x longer

Implementation Steps

  1. Choose 3-7 core topics -> business relevance, search demand, competitive opportunity
  2. Map subtopics -> People Also Ask, competitor analysis, keyword tools
  3. Content audit -> Identify existing pages that can become pillar or cluster; find gaps
  4. Build clusters first (optional) -> Cluster pages often rank first; add pillar after
  5. Create pillar -> Comprehensive guide; link to all clusters
  6. Establish links -> Pillar <-> cluster; cluster <-> cluster
  7. Update quarterly -> Maintain freshness and authority

Example

  • Pillar: "SEO Guide" (targets "SEO")
  • Clusters: "Technical SEO," "On-Page SEO," "Link Building," "Content SEO," "Local SEO," "E-E-A-T"

Content Types

Type Use SEO Fit
How-to guides Informational intent; high share potential High -> matches search intent
Comparisons Commercial intent; "X vs Y" High
List posts "Top 10," "Best X" High
Glossaries Definition queries; internal link hub High
Tools/calculators Linkable assets; engagement High
Case studies Proof; conversion support Medium -> supports conversion
Funding / PR Funding rounds, acquisitions Low -> brand/PR, not search-driven
Product updates Feature launches, release notes Low -> internal audience
News / Trending Industry news, hot topics Medium -> quick spikes, short shelf life

Evergreen vs Timely Content Mix

  • Evergreen (70-75%): Pillar guides, how-tos, comparisons, glossaries. Drives long-term traffic, backlinks, authority. Refresh every 6-12 months.
  • Timely (25-30%): Seasonal, trending, news. Generates quick traffic, shows topical relevance. Link timely pieces into evergreen pillars.
  • Balance: Too much evergreen = blog feels stale; too much timely = irregular traffic, constant content churn.

Editorial Calendar

  • Map keywords to content pieces
  • Prioritize by opportunity (volume -> intent -> feasibility)
  • Schedule by capacity
  • Include update schedule for existing content

Output Format

  • Topic cluster map (pillar + 6-12 clusters)
  • Content calendar (topics, keywords, deadlines)
  • Internal linking plan
  • Update plan for existing content

Related Skills

  • content-marketing: Content types, formats, channels, repurposing; SEO content is one channel
  • translation: Multilingual content; translation workflow, glossary; avoid thin translations
  • seo-strategy: SEO workflow order, Product-Led SEO, audit approach; use when planning SEO from scratch
  • website-structure: Plan which pages to build; structure informs content clusters and pillar placement
  • keyword-research: Keywords drive content plan
  • programmatic-seo: Programmatic SEO for scaling pages with template + data; complements topic clusters
  • content-optimization: Word count, H2 keywords, keyword density, multimedia, lists -> on-page content optimization
  • internal-links: Clusters need internal linking
  • link-building: Content strategy creates linkable assets
  • heading-structure: Content structure uses headings
用于创建、优化或审核抽奖、竞赛及促销活动页面的技能。涵盖页面结构设计、转化与法律最佳实践,支持Gleam等工具集成,旨在提升注册量、参与度及病毒式传播效果。
用户提到 'giveaway', 'contest', 'sweepstakes', 'promo', 'Gleam', 'Woobox' 或 'viral campaign' 用户希望创建或优化促销活动的落地页
skills/kostja94_marketing-skills/contest/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill contest-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "contest-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit a giveaway, contest, or promotional campaign page. Also use when the user mentions \"giveaway,\" \"contest,\" \"sweepstakes,\" \"promo,\" \"Gleam,\" \"Woobox,\" or \"viral campaign.\" For sitewide page planning, use website-structure."
}

Pages: Giveaway / Contest

Guides giveaway and contest pages for promotional campaigns. Drives signups, engagement, and viral sharing. Often uses Gleam, Woobox, Viralsweep, or similar. Common for e-commerce, SaaS launches, and community growth.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product and campaign goals.

Identify:

  1. Type: Giveaway, contest, sweepstakes, referral campaign
  2. Prize: Product, discount, cash; value and appeal
  3. Tool: Gleam, Woobox, Viralsweep, custom
  4. Primary goal: Email signup, social follows, referrals

Page Structure

Section Purpose
Headline "Win [Prize]" or "Enter the [Contest Name]"
Prize What they win; image, value, appeal
Rules How to enter; eligibility; end date
Actions Required actions (email, follow, share)
Countdown Urgency; end date visible
Legal Official rules link; disclosure

Best Practices

Conversion

  • Low friction: Email only for entry; optional bonus entries for shares
  • Urgency: Countdown; limited spots or time
  • Social proof: "X people entered"; "Last day"

Legal

  • Official rules: Required; link to full terms
  • Eligibility: Age, region, exclusions
  • Disclosure: FTC-compliant; no purchase necessary

Tools

  • Gleam, Woobox, Viralsweep: Embed or link
  • UTM: Track campaign source
  • Landing page: Custom page + embed; or tool's hosted page

Output Format

  • Headline and prize copy
  • Rules summary
  • Entry actions (required, bonus)
  • Legal checklist
  • Tool integration notes

Related Skills

  • discount-marketing-strategy: Contest prize = discount; promo campaign design
  • landing-page-generator: Contest page is a landing page; apply LP principles
  • disclosure-page-generator: Affiliate/sponsor disclosure if applicable
  • popup-generator: Contest popup to drive traffic
指导转化率优化(CRO),涵盖漏斗分析、A/B测试及摩擦减少。通过PIE框架优先排序,遵循最佳实践提升关键页面转化,旨在增加收入并降低获客成本。
用户希望提高转化率 运行A/B测试或拆分测试 优化转化漏斗或结账流程 提及CRO或conversion rate optimization
skills/kostja94_marketing-skills/conversion/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill conversion-optimization -g -y
SKILL.md
Frontmatter
{
    "name": "conversion-optimization",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to improve conversion rates, run A\/B tests, optimize funnels, or reduce friction. Also use when the user mentions \"CRO,\" \"conversion rate optimization,\" \"A\/B test,\" \"split test,\" \"funnel optimization,\" \"checkout optimization,\" \"form optimization,\" or \"conversion funnel.\" For pricing psychology, use pricing-strategy."
}

Strategies: Conversion Optimization

Guides conversion rate optimization (CRO): increasing the percentage of visitors who complete desired actions. Higher conversion rates mean increased revenue, reduced CAC, and better ROI. Use this skill when optimizing funnels, running experiments, or reducing friction on high-traffic pages.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 4 (Audience), 5 (Website), 6 (Keywords).

Identify:

  1. Funnel stage: Awareness, consideration, decision, post-purchase
  2. Conversion goal: Signup, purchase, download, demo request
  3. Traffic: Volume; mobile vs desktop split
  4. Current conversion rate: Baseline for improvement

CRO Process

Step Action
1. Research Map funnel; identify high-traffic, low-conversion pages
2. Hypothesize Form testable hypothesis (if X, then Y because Z)
3. Prioritize Score by Potential, Importance, Ease (PIE)
4. Test A/B or multivariate; adequate sample size
5. Analyze Statistical significance; implement winner

PIE Prioritization Framework

Score each test idea 1–10:

Factor Question
Potential How much improvement is possible?
Importance How much traffic does this page get?
Ease How easy to implement?

Rank backlog by total score; run highest-impact tests first.

A/B Testing Best Practices

Practice Guideline
Sample size Calculate minimum before launch; 95% significance without adequate sample = false positives
Duration Run full week cycles; account for day-of-week effects
One variable Test one element per experiment (or use MVT for multiple)
Mobile separate Mobile converts ~50% of desktop; test mobile independently—thumb reach, form complexity differ
Low traffic Use Bayesian testing for faster, actionable results

Key Testing Areas

Page Type Test Ideas
Homepage Search bar prominence; personalized content; hero CTA; social proof placement
Landing page Headline; form length; CTA copy; above-fold layout
Product/Category Quick view; descriptions; add-to-cart placement
Checkout Form fields; progress indicator; trust badges; guest checkout
Pricing Plan order; anchoring; CTA per tier

Personalization: Personalized experiences generate ~41% more impact than generic ones.

Commercialization Infrastructure

Module Purpose
Data & BI Data warehouse; user behavior events; agile surveys
A/B testing Experiment platform; statistical significance; backend-controlled variants
User education Help docs (multi-language); update notifications; EDM
Attribution Ad pixels; attribution model; impression-to-click-to-sale tracking

Avoid: Intrusive interstitials; popups that block content. Prefer non-intrusive ad formats.

Foundational Requirements

  • Analytics: Map funnels; identify drop-off points (analytics-tracking, traffic-analysis)
  • Qualitative: Heatmaps, session recordings, user tests—understand why drop-off occurs
  • Technical: Dedicated resources for 2–4 tests/month; maintain momentum

Output Format

  • Funnel map (stages, conversion rates, drop-off)
  • Hypothesis (if X, then Y because Z)
  • Test plan (variant, metric, sample size, duration)
  • Implementation checklist

Related Skills

  • landing-page-generator: Landing page structure and copy
  • cta-generator: CTA design and placement
  • analytics-tracking: GA4, events, conversion tracking
  • traffic-analysis: Attribution, funnel analysis
  • copywriting: Headline, CTA copy for tests
专注于短文案营销,涵盖标题、CTA、广告及落地页。支持PAS、AIDA等框架,强调差异化与转化,适用于品牌定位分析及具体文案创作优化。
用户需要撰写或优化短文案(如标题、CTA、广告、邮件) 提及copywriting, headline, CTA, ad copy, landing page, sales copy, conversion copy, PAS, AIDA, BAB, copy formula, differentiation
skills/kostja94_marketing-skills/copywriting/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill copywriting -g -y
SKILL.md
Frontmatter
{
    "name": "copywriting",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to write or optimize short-form marketing copy—headlines, CTAs, ad copy, landing page copy, email copy. Also use when the user mentions \"copywriting,\" \"headline,\" \"CTA copy,\" \"ad copy,\" \"landing page copy,\" \"sales copy,\" \"conversion copy,\" \"PAS,\" \"AIDA,\" \"BAB,\" \"copy formula,\" or \"differentiation.\" For long-form article bodies (blog posts, guides), use article-content."
}

Content: Copywriting

Guides short-form marketing copy—ads, landing pages, email, CTAs. Copywriting frameworks (PAS, AIDA, BAB) provide structure for conversion-focused copy. For article body content (blog posts, guides, long-form), see article-content.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 2 (Positioning), 3 (Value Proposition), 8 (Brand & Voice).

Identify:

  1. Context: Ad, landing page, email, CTA, or general
  2. Goal: Awareness, consideration, conversion, retention
  3. Audience: ICP, stage, pain points

Copywriting Frameworks

Framework Structure Best For
PAS Problem → Agitation → Solution Direct-response; sales pages; landing pages
AIDA Attention → Interest → Desire → Action Story-driven; ads; emails; editorials
BAB Before (problem) → After (outcome) → Bridge (how) Transformation; testimonials; case studies
FAB Features → Advantages → Benefits Product pages; feature lists
4 U's Useful, Urgent, Unique, Ultra-specific Headlines; subject lines

PAS (Problem, Agitation, Solution)

  • Problem: Identify the reader's pain point clearly
  • Agitation: Intensify the emotional impact; make the problem feel urgent
  • Solution: Present your product/service as the answer

AIDA (Attention, Interest, Desire, Action)

  • Attention: Grab with a powerful headline or opening
  • Interest: Build engagement through facts, storytelling, or emotional appeals
  • Desire: Highlight benefits and how the product solves problems
  • Action: Include a clear call-to-action

BAB (Before, After, Bridge)

  • Before: Current problem state
  • After: Desired outcome
  • Bridge: How your solution bridges the gap

Headline Formulas

Formula Example
How to [outcome] "How to Double Your Conversions in 30 Days"
[Number] Ways to [benefit] "7 Ways to Reduce Churn Without Hiring"
[Who] + [benefit] "For Marketers Who Want to Ship Faster"
[Problem]? Here's [solution] "Struggling with SEO? Here's the Fix"
[Before] → [After] "From 0 to 10K Users in 90 Days"
The [adjective] [noun] for [audience] "The Ultimate Guide for SaaS Founders"

Rules: Front-load keywords; keep under 60 chars for SERP; avoid clickbait; match ad-to-page alignment.

Information gain (differentiation): Copy that restates what competitors say adds zero value. Lead with unique angle, proprietary data, or contrarian insight. "What does this headline/promise add that others don't?" See article-content for full information gain strategy in long-form.

Copy by Context

Context Focus Skills
Ad copy Hook, benefit, CTA; platform limits paid-ads-strategy, google-ads, meta-ads
Landing page Headline, value prop, CTA; above fold landing-page-generator, hero-generator
Email Subject line, preview, body, CTA email-marketing
CTA Value-focused; action verb; avoid "Submit" cta-generator
Article / blog Headline formulas, CTA copy; body → article-content article-content, article-page-generator

Ad copy vs Landing page copy

Element Ad Landing Page
Promise Must match page headline Same promise; expand on it
Length Concise; platform limits Enough to explain value
CTA Click-through; "Learn More" Conversion; "Start Free Trial"

Avoid: Ad promise not visible on page; mismatch increases bounce.

CTA Copy Best Practices

  • Value-focused: "Start Free Trial" not "Submit"
  • Action verb: "Get," "Try," "Download," "Join"
  • Specific: "Get Your Free Audit" not "Click Here"
  • A/B test: Color, copy, placement, size

Output Format

  • Framework (PAS, AIDA, BAB) recommendation
  • Headline options (2–3 variants)
  • Body copy structure
  • CTA copy options
  • A/B test suggestions (if applicable)

Related Skills

  • article-content: Article body creation; applies PAS, AIDA, BAB to long-form; headline formulas for article titles
  • landing-page-generator: Landing page copy and structure
  • hero-generator: Hero headline, subheadline, CTA
  • cta-generator: CTA design and copy
  • paid-ads-strategy: Ad copy frameworks (PAS, BAB, Social Proof)
  • email-marketing: Email subject lines, body copy
  • branding: Brand voice, tone consistency
优化核心网页指标(LCP、INP、CLS)以提升页面速度和用户体验。涵盖性能瓶颈诊断、阈值评估及具体修复方案,如资源加载优化、JS任务拆分和布局稳定性调整。
用户希望优化 Core Web Vitals 用户提及 LCP、INP、CLS、FID、page speed 或 page performance 用户要求修复页面加载速度或交互响应问题
skills/kostja94_marketing-skills/core-web-vitals/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill core-web-vitals -g -y
SKILL.md
Frontmatter
{
    "name": "core-web-vitals",
    "metadata": {
        "version": "1.0.2"
    },
    "description": "When the user wants to optimize Core Web Vitals, fix LCP, INP, or CLS issues. Also use when the user mentions \"Core Web Vitals,\" \"CWV,\" \"LCP,\" \"INP,\" \"CLS,\" \"FID,\" \"page speed,\" \"page performance,\" \"Largest Contentful Paint,\" \"Interaction to Next Paint,\" \"Cumulative Layout Shift,\" or \"Page Experience.\" For GSC CWV, use google-search-console."
}

SEO Technical: Core Web Vitals

Guides optimization of Core Web Vitals (CWV)—Google's user experience metrics that affect search ranking. CWV are confirmed ranking factors for mobile and desktop.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (Technical SEO)

  • LCP (Largest Contentful Paint): Loading performance; time to render largest content element
  • INP (Interaction to Next Paint): Responsiveness; replaced FID on March 12, 2024
  • CLS (Cumulative Layout Shift): Visual stability; unexpected layout shifts

Target Thresholds (75th percentile, field data)

Metric Target Good Needs Improvement Poor
LCP ≤2.5s ≤2.5s 2.5–4.0s >4.0s
INP ≤200ms ≤200ms 200–500ms >500ms
CLS <0.1 ≤0.1 0.1–0.25 >0.25

Source: Google Page Experience

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site URL.

Identify:

  1. Tools: GSC Core Web Vitals report, PageSpeed Insights, Chrome DevTools
  2. Metrics: Which metric is failing (LCP, INP, CLS)
  3. Page type: Hero, article, product, list—LCP candidate differs

LCP Optimization

LCP measures the time until the largest content element (image, video, or text block) is visible.

Cause Fix
Slow server response Reduce TTFB; use CDN; optimize server
Render-blocking resources Defer non-critical CSS/JS; inline critical CSS
Large images WebP/AVIF; compress; width/height to prevent CLS; see image-optimization
Client-side rendering SSR/SSG for above-fold content; see rendering-strategies
Third-party scripts Load async; defer non-critical

LCP candidates: Hero image, large text block, video poster. Ensure above-fold images use loading="eager" (default); never lazy-load LCP.

INP Optimization

INP measures responsiveness—time from user interaction to next paint. Replaced FID on March 12, 2024.

Cause Fix
Long-running JS Break tasks >50ms; use requestIdleCallback; Web Workers
Heavy event handlers Debounce/throttle; defer non-critical work
Main thread blocking Reduce third-party scripts; defer non-critical JS
Layout thrashing Batch DOM reads/writes; avoid forced reflows

CLS Optimization

CLS measures unexpected layout shifts.

Cause Fix
Images without dimensions Always set width and height attributes
Dynamic content Reserve space for ads, embeds; use min-height
Web fonts font-display: optional or swap; preload critical fonts
Animations Use transform instead of top/left/width

Reserve space: For images, ads, embeds—define dimensions before load. Avoid inserting content above existing content without reserved space.

Tools & Monitoring

Tool Use
GSC Core Web Vitals report; URL grouping; field data
PageSpeed Insights Lab + field data; mobile + desktop
Chrome DevTools Performance panel; LCP element; layout shift overlay

Output Format

Related Skills

  • image-optimization: LCP image optimization; WebP; lazy loading (below-fold only)
  • google-search-console: CWV report; field data monitoring
  • mobile-friendly: Mobile-first indexing; mobile CWV targets
  • rendering-strategies: SSR/SSG for LCP; content in initial HTML
  • site-crawlability: Redirect chains waste crawl; fix for performance
优化网站可抓取性,解决孤立页面、站点结构及重定向问题。涵盖爬取预算、分页与无限滚动SEO、AI爬虫适配(如GPTBot),提升搜索引擎索引效率。
用户希望改善可抓取性或修复孤立页面 提及爬取预算、内部链接、站点结构或无限滚动SEO 提到AI爬虫优化或内容未被索引
skills/kostja94_marketing-skills/crawlability/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill site-crawlability -g -y
SKILL.md
Frontmatter
{
    "name": "site-crawlability",
    "metadata": {
        "version": "1.2.1"
    },
    "description": "When the user wants to improve crawlability, fix orphan pages, or optimize site structure for search engines. Also use when the user mentions \"crawlability,\" \"crawl budget,\" \"orphan pages,\" \"internal links,\" \"site structure,\" \"site crawlability,\" \"infinite scroll,\" \"pagination,\" \"masonry SEO,\" \"AI crawler optimization,\" \"GPTBot crawlability,\" \"ClaudeBot crawlability,\" or \"content not indexed.\" For internal links, use internal-links."
}

SEO Technical: Crawlability

Guides crawlability improvements: robots, X-Robots-Tag, site structure, and internal linking.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (Technical SEO)

  • Redirect chains & loops: Fix multi-hop redirects; point directly to final URL
  • Broken links (4xx): Fix broken internal/external links; 301 or remove
  • Site architecture: Logical hierarchy; pages within 3–4 clicks from homepage
  • Orphan pages: Add internal links to pages with no incoming links
  • Pagination: Prefer pagination over infinite scroll for crawlability
  • Crawl budget: Reduce waste on duplicates, redirects, low-value URLs (see below)
  • AI crawler optimization: SSR for critical content; URL management; reduce 404/redirect waste (see below)

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site structure.

Identify:

  1. Site structure: Flat vs. deep hierarchy
  2. Framework: Next.js, static, SPA, etc.
  3. Key paths: Sitemap, robots.txt, API, static assets

Best Practices

Redirect Chains & Loops

  • Fix multi-hop redirects; point directly to final URL
  • Loops: URLs redirecting back to themselves; break the cycle

Broken Links (4xx)

  • Fix broken internal/external links; 301 or remove
  • Audit regularly; update or remove broken links

Site Architecture

Principle Guideline
Depth Important pages within 3–4 clicks from homepage
Orphan pages Add internal links to pages with no incoming links; see internal-links for link strategy
Hierarchy Logical structure; hub pages link to content

Pagination vs Infinite Scroll

Problem: With infinite scroll, crawlers cannot emulate user behavior (scroll, click "Load more"); content loaded after initial page load is not discoverable. Same applies to masonry + infinite scroll, lazy-loaded lists, and similar patterns.

Solution: Prefer pagination for key content. If keeping infinite scroll, make it search-friendly per Google's recommendations:

Requirement Practice
Component pages Chunk content into paginated pages accessible without JavaScript
Full URLs Each page has unique URL (e.g. ?page=1, ?lastid=567); avoid #1
No overlap Each item listed once in series; no duplication across pages
Direct access URL works in new tab; no cookie/history dependency
pushState/replaceState Update URL as user scrolls; enables back/forward, shareable links
404 for out-of-bounds ?page=999 returns 404 when only 998 pages exist

Reference: Infinite scroll search-friendly recommendations (Google Search Central, 2014)

Pagination (Traditional)

  • Reference links to next/previous pages; rel="prev" / rel="next" where applicable
  • Avoid dynamic-only loading; ensure links in HTML

Crawl Budget

Crawl budget is the number of URLs Googlebot will crawl on your site in a given period. Large sites (10,000+ pages) may waste up to 30% of crawl budget on duplicates, redirects, and low-value URLs.

Waste source Fix
Duplicate URLs Canonical; consolidate; 301 to preferred
Redirect chains Point directly to final URL
Parameter proliferation Use rel="canonical"; consider Clean-param (Yandex)
Low-value pages noindex for thin/duplicate; see indexing
Crawl traps Avoid infinite URL generation (e.g. faceted filters)

Sitemap: Include only indexable, canonical URLs. See xml-sitemap, canonical-tag.

AI Crawler Optimization

AI crawlers (GPTBot, ClaudeBot, PerplexityBot, etc.) now represent ~28% of Googlebot's crawl volume. Their behavior differs from search engines—optimizing for both improves GEO (AI search visibility). See generative-engine-optimization for GEO strategy. Vercel/MERJ study (Dec 2024):

Factor AI Crawlers (GPTBot, Claude) Googlebot
JavaScript Do not execute JS; cannot read client-side rendered content Full JS rendering
404 rate ~34% of fetches hit 404s ~8%
Redirects ~14% of fetches follow redirects ~1.5%
Content in initial HTML JSON, RSC in initial response can be indexed Same

Recommendations for AI crawlability:

Practice Action
Server-side rendering Critical content in initial HTML. Use SSR, ISR, or SSG. See rendering-strategies for full guide.
URL management Keep sitemaps updated; use consistent URL patterns; avoid outdated /static/ assets that cause 404s. AI crawlers frequently hit outdated URLs.
Redirects Fix redirect chains; point directly to final URL. AI crawlers waste ~14% of fetches on redirects.
404 handling Fix broken links; remove or redirect outdated URLs. High 404 rates suggest AI crawlers may use stale URL lists.

Reference: The rise of the AI crawler (Vercel, 2024)

Common Issues

Issue Check
Redirect chains Update links to point directly to final URL
Broken links 301 or remove; audit internal and external
Orphan pages Add internal links from hub or navigation; see internal-links for strategy
Infinite scroll Provide paginated component pages; or replace with pagination for key content; see above
AI crawlers missing content Ensure critical content in initial HTML; see rendering-strategies

Output Format

  • Redirect audit: Chains and loops to fix
  • Broken link audit: 4xx links to fix
  • Site structure: Orphan pages, hierarchy
  • Pagination: Implementation for crawlable content
  • AI crawler: SSR/URL/redirect checks if GEO or AI visibility is a goal

Related Skills

  • seo-strategy: SEO workflow; crawlability is Technical phase (P0)
  • website-structure: Plan which pages to build, page priority, structure planning; use before or alongside crawlability audit
  • robots-txt: robots.txt configuration; AI crawler allow/block (GPTBot, ClaudeBot)
  • xml-sitemap: URL discovery; keep updated to reduce AI crawler 404s
  • google-search-console: Index status, Coverage report
  • indexing: Fix indexing issues
  • internal-links: Internal linking best practices
  • masonry: Masonry + infinite scroll has same crawl issue; layout skill references this for SEO
  • generative-engine-optimization: GEO strategy; AI search visibility; crawlability enables AI citation
  • canonical-tag: Canonical reduces crawl budget waste on duplicates
  • rendering-strategies: SSR, SSG, CSR; content in initial HTML; crawler visibility
指导AI/SaaS产品的创作者计划策略,涵盖与联盟营销、网红推广的区别。提供激励模型选择、分阶段实施指南(规划至优化)及最佳实践,旨在通过长期合作实现品牌建设与内容共创。
用户希望规划、实施或优化创作者计划策略 提及“创作者计划”、“创作者合作”、“UGC项目”等关键词
skills/kostja94_marketing-skills/creator-program/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill creator-program -g -y
SKILL.md
Frontmatter
{
    "name": "creator-program",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to plan, implement, or optimize creator program strategy. Also use when the user mentions \"creator program,\" \"creator partnership,\" \"content co-creation,\" \"creator ambassador,\" \"creator economy,\" \"creator collaboration,\" \"UGC program,\" \"creator incentives,\" or \"creator community.\" For influencers, use influencer-marketing."
}

Channels: Creator Program

Guides creator program strategy for AI/SaaS products. Long-term partnerships with creators for content co-creation and brand building. Differs from affiliate (sales focus) and influencer (paid promotion focus).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and content needs.

Identify:

  1. Product type: AI tool, design tool, CMS, marketplace
  2. Content need: Tutorials, templates, use cases
  3. Creator target: Followers, niche, content quality

Creator vs. Affiliate vs. Influencer

Dimension Creator Program Affiliate Influencer
Goal Brand + content co-creation Direct sales Brand exposure
Incentive Credits, free use, revenue share Commission Paid, product
Content Must use product to create Links Influencer original
Relationship Long-term Transactional Flexible

Incentive Models

Model Use Examples
Credits AI tools; cost control Credit-based AI tools
Payment High-quality content; budget available Paid creator programs
Hybrid Credits + commission, brand partnership Common for SaaS
Marketplace Template/plugin sales; revenue share Design tools, CMS marketplaces

Implementation Phases

Phase Weeks Tasks
Plan 1–2 Goals, incentives, application form, resources
Launch 3–4 Landing page, promotion, tracking
Recruit 5–8 Screen applications, outreach, onboarding
Co-create 9–12 Content publishing, support, promotion
Optimize Ongoing Metrics, feedback, incentive tweaks

Best Practices

  • Showcase creator work: Dedicated page; recognize top creators
  • Quality over quantity: 1K+ followers + high content quality for AI tools
  • Clear terms: Content policy, NSFW rules, brand guidelines
  • Communication: Community chat, email; regular updates
  • Timeline: 3–6 months to see results; patience required

Ecosystem Operations

Principle Use
Value for all Each participant (creators, content, integrations) gains value—not just the platform
Integrations Product must integrate with upstream/downstream tools; enables solution bundling
Multi-product Form solution suites; support partners including you in their stacks

Creators + community: Free tools + high-quality creator content; mutual promotion; user-generated quality often exceeds in-house.

Common Challenges

Challenge Solution
Content quality Clear standards; review; suspend non-compliant
Brand consistency Guidelines; content review; unified tags
Measurement UTM; KPIs: applications, approval rate, content output
Cost control Credit model; tier incentives; limit creator count

Output Format

  • Incentive model recommendation
  • Landing page elements
  • Recruitment approach
  • Phase timeline
  • KPI framework

Related Skills

  • affiliate-marketing: Can run both; different goals
  • influencer-marketing: Influencers can join creator program
  • employee-generated-content: Employee content; creator program is external
  • affiliate-page-generator: If creator program has commission component
  • landing-page-generator: Creator program signup page; apply landing page structure
用于设计、优化或审计转化导向的CTA按钮。提供视觉、文案、布局及无障碍设计规范,提升转化率。
用户希望设计或优化CTA按钮 提及'CTA'、'call to action'、'button design'、'conversion button'等关键词
skills/kostja94_marketing-skills/cta/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill cta-generator -g -y
SKILL.md
Frontmatter
{
    "name": "cta-generator",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to design, optimize, or audit call-to-action (CTA) buttons. Also use when the user mentions \"CTA,\" \"call to action,\" \"button design,\" \"conversion button,\" \"primary action,\" \"CTA copy,\" \"button text,\" \"CTA placement,\" \"conversion CTA,\" or \"action button.\" For landing pages, use landing-page-generator."
}

Components: Call-to-Action (CTA)

Guides CTA button design for conversion. A well-designed CTA can increase conversion by 25–10%.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for conversion goals.

Identify:

  1. Context: Hero, form, pricing, product page
  2. User stage: Awareness, consideration, decision
  3. Primary action: Sign up, buy, trial, download

Design Principles

Visual Clarity

  • Look like buttons: Background, border, corner radius, shadow
  • Stand out: Contrasting color; clear hierarchy
  • Size: ≥48×48px for touch; minimum 48px wide

Hierarchy

  • Primary CTA: One per section; impossible to miss
  • Secondary CTA: Lower priority; visually distinct
  • Avoid: Multiple competing CTAs causing choice overload

Color & Shape

  • Color: High contrast; red/orange for urgency
  • Shape: Rounded = friendly; angled = dynamic
  • Accessibility: →.5:1 contrast for text

Copy Best Practices

  • Action-oriented: "Buy," "Sign up," "Subscribe," "Get started"
  • Loss aversion: "Claim Your Discount Before It's Gone" vs "Get 10% Off"; see discount-marketing-strategy for discount campaign design
  • Clear, no ambiguity: User knows exactly what happens
  • Scarcity/urgency: When appropriate; avoid overuse

Placement

  • Above the fold for primary actions
  • After value proposition; build value before CTA
  • Near trust signals (testimonials, badges)
  • Sticky/fixed for long pages (use sparingly)

Technical

  • Semantic HTML: <button> or <a> with role="button" when needed
  • Visible focus state for keyboard users
  • Loading state for async actions: disable button during async operations; show spinner or loading text; prevent double-submit
  • cursor-pointer: Add cursor-pointer to all clickable CTAs; default cursor on interactive elements is poor UX
  • aria-label: Use aria-label for icon-only buttons (e.g., close, search); screen readers need descriptive labels
  • Hover stability: Use color/opacity transitions (150–300ms); avoid scale transforms that shift layout

Testing

  • A/B test: color, copy, placement, size
  • Measure: click-through rate, conversion rate

Output Format

  • CTA copy suggestions
  • Design notes (color, size, hierarchy)
  • Placement recommendations
  • Accessibility checklist (cursor-pointer, aria-label, focus, loading state)

Related Skills

  • hero-generator: Hero typically contains primary CTA
  • landing-page-generator: CTA is step 5 of landing page flow; single-goal pages
  • testimonials-generator: Testimonials near CTAs boost conversion
  • trust-badges-generator: Badges near CTAs increase trust
  • pricing-page-generator: CTA on pricing pages (e.g., "Start free trial")
指导CTV/OTT流媒体电视广告投放,涵盖Hulu、Roku等平台。提供格式选择、定向策略、创意规范及UTM追踪方法,强调高完成率与家庭级受众触达,适用于程序化或直采广告需求。
用户希望运行CTV、OTT或流媒体电视广告 提及CTV ads、connected TV、OTT advertising、streaming ads、TV ads、Hulu ads、Roku ads、YouTube TV ads或programmatic TV
skills/kostja94_marketing-skills/ctv-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill ctv-ads -g -y
SKILL.md
Frontmatter
{
    "name": "ctv-ads",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to run CTV, OTT, or streaming TV ads. Also use when the user mentions \"CTV ads,\" \"connected TV,\" \"OTT advertising,\" \"streaming ads,\" \"TV ads,\" \"Hulu ads,\" \"Roku ads,\" \"YouTube TV ads,\" or \"programmatic TV.\" For paid mix, use paid-ads-strategy."
}

Paid Ads: CTV / Streaming TV

Guides Connected TV (CTV) and OTT advertising: ads on streaming platforms (Hulu, Roku, YouTube TV, etc.). Use when targeting viewers who watch streaming content; CTV achieves ~95% ad completion, higher than mobile/desktop.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

What Is CTV / OTT

  • CTV (Connected TV): Smart TVs, streaming devices (Roku, Fire TV, Apple TV) that serve ads
  • OTT (Over-the-top): Video delivered over the internet (Hulu, Peacock, Paramount+, etc.)
  • Streaming share: Streaming surpassed broadcast + cable combined in 2025 (~45% of TV viewing)

Why CTV

Advantage Detail
High completion ~95% ad completion rate vs lower on mobile/desktop
Unskippable Most CTV inventory is non-skippable pre-roll/mid-roll
Targeting Demographics, interests, location, household data
Underinvested CTV received ~7% of ad spend despite ~18% of media time (2024)

Ad Formats

Format Use
Pre-roll / Mid-roll Standard video; 15–30 sec
Interactive Drives engagement; ~71 sec additional time vs standard
QR / URL Direct response; track offline-to-online

Platforms & Buying

  • Programmatic: DSPs (The Trade Desk, etc.); audience-based buying
  • Direct: Hulu, Roku, YouTube TV, Peacock—platform-specific deals
  • Google: YouTube on TV; part of Video campaigns

Metrics

Metric Use
Completion rate % who watch full ad; CTV typically 95%+
Reach / frequency Household reach; avoid over-frequency (e.g., <7)
CPM Cost per thousand impressions
Attribution QR scans, URL visits; harder than web/app

Creative

  • Horizontal: 16:9; TV screen format
  • Sound on: Assume sound; design for audio
  • Brand focus: CTV often awareness; clear brand, CTA

UTM for CTV

Use utm_medium=video or ctv with utm_source (e.g., hulu, roku) for QR/URL campaigns. Tag links in interactive CTV ads for attribution.

Pre-Launch Checklist

  • Creative in 16:9; sound-on
  • Targeting defined (demo, interests, geo)
  • Attribution plan (QR, URL, brand lift)
  • Frequency cap set
  • Budget aligned with CPM expectations

Related Skills

  • paid-ads-strategy: Ad formats by medium; when to use TV vs web vs app
  • traffic-analysis: UTM for CTV direct-response; attribution
  • analytics-tracking: Conversion tracking for QR/URL campaigns
用于创建、优化或审核客户故事及案例研究页面的技能。提供内容结构(挑战-方案-结果)、最佳实践及SEO元数据生成指南,旨在通过社会证明提升转化率和可信度。
用户希望创建或优化案例研究页面 提及case studies, customer stories, success stories等关键词
skills/kostja94_marketing-skills/customer-stories/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill customer-stories-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "customer-stories-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit customer stories or case study pages. Also use when the user mentions \"case studies,\" \"customer stories,\" \"success stories,\" \"testimonials page,\" \"case study,\" \"customer proof,\" \"social proof page,\" or \"results page.\" For testimonial components, use testimonials-generator."
}

Pages: Customer Stories

Guides customer story and case study page content, structure, and conversion.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, proof points, and customer language.

Identify:

  1. Story format: Full case study, quote snippet, video
  2. Industries/use cases: Who to showcase
  3. Metrics: What results to highlight

Best Practices

Structure (Challenge -> Solution -> Results)

Section Content
Headline Benefit-driven; lead with outcome
Challenge Client's problem, pain points
Solution How your product helped
Results Quantifiable metrics, before/after
Quote Direct testimonial from client
CTA Next step (demo, contact, read more)

Content Principles

  • Lead with results: Outcomes first, not background
  • Specific metrics: "Increased revenue 40%" not "great results"
  • Quotes: Direct, attributed, credible
  • Scannable: Consistent template; easy to skim
  • Concise: Enough value without losing interest

Visual Elements

  • Logos: Client branding (with permission)
  • Charts/graphs: Before-after, metrics
  • Video: Testimonials, interviews
  • Expandable sections: For deeper detail

Why It Matters

  • 54% of buyers review case studies before purchasing
  • 73% of successful content marketers use them
  • Builds credibility, justifies pricing, shortens sales cycles

Storytelling

  • Problem = beginning
  • Solution = climax
  • Results = resolution
  • Hard facts: Statistics for impact

Output Format

  • Template structure
  • Story outline (challenge, solution, results)
  • Metrics to capture
  • SEO metadata and schema (if indexing)
  • Internal linking to product/pricing

Related Skills

  • landing-page-generator: Case studies and testimonials for LP social proof (step 2)
  • url-slug-generator: URL slug for case study pages (e.g. /customers/case-slug); 3-5 words
  • about-page-generator: Social proof complements About
  • pricing-page-generator: Case studies support pricing justification
  • homepage-generator: Customer stories on homepage
  • schema-markup: CaseStudy schema
优化网页Meta Description以提升SEO点击率。支持多语言长度适配,提供最佳实践、内容撰写建议及GSC数据驱动的优化策略,确保描述独特且符合搜索引擎显示规范。
用户要求优化meta description或meta tag description 提及meta desc, page description, SEO description等关键词 询问meta description长度或重写需求 描述标签未显示的问题排查
skills/kostja94_marketing-skills/description/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill meta-description -g -y
SKILL.md
Frontmatter
{
    "name": "meta-description",
    "metadata": {
        "version": "1.4.0"
    },
    "description": "When the user wants to optimize the meta description or meta tag description. Also use when the user mentions \"meta description,\" \"meta desc,\" \"page description,\" \"SEO description,\" \"search snippet,\" \"SERP description,\" \"description tag,\" \"snippet for search,\" \"meta description length,\" \"rewrite meta description,\" or \"description not showing.\" For title tag, use title-tag. For hreflang, robots, viewport, use page-metadata."
}

SEO On-Page: Meta Description

Guides optimization of the meta description tag for search engines and SERP display.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (On-Page SEO)

  • Meta description: CTA; unique value; target keyword; unique per page

Length by Language

Google truncates by pixel width (~920px desktop, ~680px mobile), not character count. Character limits are approximate—CJK chars are wider (~2× Latin), so fewer fit in the same pixels.

Script / Language Meta description (chars) Notes
Latin (English, Spanish, French, etc.) 150–160 Desktop ~158; mobile ~120
CJK (Chinese, Japanese, Korean) 75–100 Full-width chars; 70–80 conservative; 90–100 on some locales/fonts; use pixel checker when available
Cyrillic (Russian, etc.) 140–155 Slightly wider than Latin
Arabic, Hebrew 70–90 RTL; variable width

Pixel tools: Use a pixel-accurate meta tag checker for CJK—font and locale affect display; character counts vary by source (65–80 to 90–120 in practice).

Multilingual: Use locale-specific limits; localize, don't just translate. See localization-strategy, translation.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for brand voice and target keywords.

Identify:

  1. Page type: Homepage, landing, blog, product, etc.
  2. Primary keyword: Target search query
  3. Language / script: Apply length rule above
  4. CTA: Primary action (sign up, learn more, buy, etc.)

Best Practices

Item Guideline
Length Per language (see table above); ~150 chars sweet spot for Latin; truncates beyond pixel limit
Unique One per page; no duplicate descriptions
Intent Answer "why should I click?"; match search intent
CTA Include clear call-to-action when relevant
Keyword Naturally include target keyword
Content Include author, date, price where relevant
Impact Does not affect ranking; well-written descriptions improve CTR 5–10%

Output Format

  • Recommended meta description (with character count for target language)
  • Alternatives (if A/B testing)

GSC-Driven Optimization

For pages with low CTR despite good position, use google-search-console to identify opportunities. Optimize meta description for pages with CTR gap.

Related Skills

  • google-search-console: CTR analysis, identify low-CTR pages for meta optimization
  • title-tag: Title pairs with description in SERP
  • localization-strategy, translation: Multilingual metadata; locale-specific length
  • serp-features: SERP features; standard result appearance in context
  • heading-structure: H1 should align with title; description summarizes content
  • open-graph: og:description for social sharing (often mirrors or extends meta description)
  • keyword-research: Keywords in content inform description
指导在Taaft、Shopify应用商店、G2和Capterra等平台投放目录或市场付费广告。涵盖各平台广告类型、计费模式及最佳实践,强调先提交有机列表再投放广告的策略,并提供UTM追踪建议。
用户希望在目录或市场中运行付费广告 提及 Taaft ads, Shopify App Store ads, G2 sponsored, Capterra ads, directory ads, marketplace ads, paid listing, sponsored listing, directory promotion
skills/kostja94_marketing-skills/directory-listing-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill directory-listing-ads -g -y
SKILL.md
Frontmatter
{
    "name": "directory-listing-ads",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to run paid ads within directories or marketplaces. Also use when the user mentions \"Taaft ads,\" \"Shopify App Store ads,\" \"G2 sponsored,\" \"Capterra ads,\" \"directory ads,\" \"marketplace ads,\" \"paid listing,\" \"sponsored listing,\" or \"directory promotion.\" For organic listings, use directory-submission."
}

Paid Ads: Directory / Marketplace Listing Ads

Guides paid promotions within directories and marketplaces: Taaft, Shopify App Store, G2, Capterra. Use when you have a listing and want to boost visibility with paid placements. Listing first: Ensure product is submitted—see directory-submission for listing prep and submission workflow.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Platform Overview

Platform Ad type Model Best for
Taaft Banners, sponsored listings, campaigns Paid placements; listing + newsletter + ads + social bundles AI tools; 80M+ users; 46K+ tools
Shopify App Store Search ads, homepage ads, category ads CPC; daily budget Shopify app developers; merchant discovery
G2 Paid Promotions, G2 Clicks Quarterly or PPC B2B SaaS; category/competitor pages
Capterra Sponsored listings PPC B2B software; 50M+ annual visitors

Taaft (There's An AI For That)

  • Traffic: 80M+ users; 46K+ AI tools; 11K+ categories
  • Ad options: Banner ads; sponsored listings at top of pages; marketing campaigns (listing + newsletter + ads + social)
  • Listing first: Submit via taaft.com/submit or theresanaiforthat.com; 700–10K+ visitors per listing
  • Early launch bonus: Up to $300 PPC credits for launching on Taaft first
  • UTM: Use utm_source=taaft_feat&utm_medium=referral for PPC ads

Shopify App Store

  • Ad types: Search ads (in results when merchants search); homepage ads; category page ads
  • Model: Cost-per-click; set daily budget; Shopify auto-generates ad appearance
  • Placement: ~60% of installs from search—search ads critical for discovery
  • Credit: New eligible app developers receive $100 USD ad credit
  • Management: Partner Dashboard—edit budget, device/geo targeting, keywords; monitor CTR, install rate, cost per install
  • Limitation: App, placement, plan-based targeting cannot change after creation; stop and create new campaign to change

G2

  • Paid Promotions: Quarterly campaigns; ads appear between 2nd and 3rd organic listing on category/competitor pages
  • Inventory: 3 products per page; ~1/3 of visitors see ads
  • G2 Clicks: PPC option; organic + sponsored placements; no subscription
  • Design: Standardized ad design converts ~50% better than custom

Capterra

  • Model: PPC; reach software buyers actively comparing solutions
  • Audience: 50M+ annual visitors
  • Options: Free basic listing; paid advertising for increased visibility

Strategy

  1. Listing first: Submit to directory before buying ads—see directory-submission
  2. Test organic: Measure baseline traffic before paid
  3. Layer paid: Add ads when organic underperforms or for launch push
  4. UTM: Tag all ad links (utm_medium=paid, utm_source=taaft or shopify or g2 or capterra)

Pre-Launch Checklist

  • Product listed in directory (directory-submission)
  • Listing optimized (copy, screenshots, category)
  • Budget aligned with CPC/CPM expectations
  • UTM parameters set for attribution
  • Conversion tracking (GA4, platform analytics)

Related Skills

  • directory-submission: Listing prep; submission workflow; platform-specific copy
  • paid-ads-strategy: Ad formats by medium; when to use directory ads
  • traffic-analysis: UTM for directory ads; attribution
  • analytics-tracking: Conversion tracking
用于生成、优化或审计联盟营销、赞助内容及付费合作的披露页面,确保符合FTC等法规。适用于用户提及披露、联盟、赞助或FTC相关场景,旨在建立信任并降低法律风险。
用户希望创建或优化联盟营销、赞助或付费合作披露页面 用户提到'disclosure'、'affiliate disclosure'、'sponsored content'、'FTC disclosure'或'paid partnership'
skills/kostja94_marketing-skills/disclosure/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill disclosure-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "disclosure-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit an affiliate, sponsor, or paid partnership disclosure page. Also use when the user mentions \"disclosure,\" \"affiliate disclosure,\" \"sponsored content,\" \"FTC disclosure,\" or \"paid partnership.\" For sitewide page planning, use website-structure."
}

Pages: Disclosure

Guides disclosure pages for affiliate links, sponsored content, and paid partnerships. Required for FTC compliance (US) and similar regulations. Builds trust and reduces legal risk.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for affiliate/partnership model.

Identify:

  1. Type: Affiliate, sponsored, paid partnership, referral
  2. Scope: Site-wide, specific pages, or both
  3. Regions: US (FTC), EU, other
  4. Placement: Standalone page; link from footer, near affiliate content

Page Structure

Section Purpose
Headline "Disclosure" or "Affiliate Disclosure"
Summary We may earn from qualifying purchases; links may be affiliate
Details How it works; what we recommend; no extra cost to you
Transparency We only recommend products we believe in
Contact Questions; link to contact

Best Practices

FTC Compliance (US)

  • Clear and conspicuous: Not buried; visible near affiliate content
  • Before the click: Disclosure before user clicks affiliate link
  • Plain language: "We may earn a commission" not legalese

Placement

  • Footer link: "Disclosure" in every page footer
  • Near content: Short disclosure above/below affiliate sections
  • Standalone page: Full disclosure at /disclosure

Content

  • Honest: Explain relationship; no misleading claims
  • Concise: One page; avoid excessive length
  • Update: When model changes

Output Format

  • Headline and summary
  • Full disclosure copy
  • Placement guidance (footer, in-content)
  • Legal note (consult lawyer for jurisdiction)

Related Skills

  • affiliate-page-generator: Affiliate program page; link to disclosure
  • terms-page-generator: Terms may reference disclosure
  • privacy-page-generator: Privacy for data; disclosure for commercial
  • landing-page-generator: Disclosure near affiliate LPs
指导SaaS、电商及工具的折扣与促销定价策略,涵盖折扣结构、终身授权(LTD)、优惠券设计及BFCM等营销活动。结合产品背景评估目标与约束,提供财务护栏建议,平衡获客、现金流与留存风险。
制定折扣和促销定价策略 提及 discount strategy, promo code, coupon, redeem code, lifetime deal, LTD, AppSumo, Black Friday, Cyber Monday, BFCM, seasonal sale, promotional pricing
skills/kostja94_marketing-skills/discount-marketing/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill discount-marketing-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "discount-marketing-strategy",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to plan, implement, or optimize discount and promotional pricing strategy. Also use when the user mentions \"discount strategy,\" \"promo code,\" \"coupon,\" \"redeem code,\" \"lifetime deal,\" \"LTD,\" \"AppSumo,\" \"Black Friday,\" \"Cyber Monday,\" \"BFCM,\" \"seasonal sale,\" or \"promotional pricing.\" For pricing page, use pricing-page-generator."
}

Strategies: Discount Marketing

Guides discount and promotional pricing strategy for SaaS, e-commerce, and tools. Covers discount structures, lifetime deals (LTD), redeem codes, Black Friday / Cyber Monday, and campaign design. Aligns with pricing-strategy (base price structure); discounts apply on top of base pricing.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, pricing, and goals.

Identify:

  1. Product type: SaaS, e-commerce, tool
  2. Goal: Acquisition, retention, cash flow, annual plan promotion
  3. Discount type: One-time, recurring, LTD, campaign
  4. Constraints: LTV:CAC, margin, support capacity

Discount Structures (SaaS)

Type Typical Range Use
Annual commitment 15–25% Improve cash flow, reduce churn; Slack, Zoom, HubSpot
Volume-based 10–40% Enterprise; scale by seat/volume; Atlassian, Salesforce
First-time / new customer 15–30% Overcome hesitation; 3–12 months; below 15% rarely moves behavior; above 30% attracts price-sensitive, higher churn
Lifetime deal (LTD) One-time; heavily discounted Cold start, AppSumo; fast cash upfront; see LTD section below

Financial guardrails: Ensure LTV:CAC supports discount; set qualification criteria (timeline, use case, contract length).

Lifetime Deal (LTD) / AppSumo

LTD = one-time payment for lifelong access instead of recurring subscription. Common for cold start and deal platforms.

Benefits

Benefit Notes
Immediate cash flow Upfront lump sum; reinvest in product
Cost-effective acquisition Community-driven; word-of-mouth; lower CAC
User feedback LTD buyers are engaged; direct feedback for roadmap
Audience access AppSumo: 500K+ users, 2K+ affiliates

Challenges

Risk Mitigation
Revenue cannibalization Tiered LTD; upsell to premium; limit scope
Resource strain Support, infra, dev capacity; plan for surge
Commission AppSumo takes cut; factor into pricing
Pricing perception May undervalue vs subscription; position clearly

When to Use

  • Cold start: Zero traction; need fast revenue; see cold-start-strategy
  • Validation: Test product-market fit; price-sensitive early adopters
  • Platform: AppSumo, similar deal platforms; top 1% acceptance

Cold start: LTD is one channel in cold-start-strategy. Use cold-start-strategy for full launch planning; use discount-marketing-strategy for LTD structure, pricing, and trade-offs.

Redeem Code / Coupon

Types

Type Use
Percentage % off; feels more valuable for higher-priced items
Fixed amount $ off; better for lower cart values
Product-specific Clear inventory; promote collections
BOGO / buy X get Y Increase cart size
Free shipping With or without minimum order

Goals

  • Convert hesitant shoppers; reduce cart abandonment (~70% abandonment)
  • Track by channel; unique codes per campaign
  • Segment customers; targeted discounts
  • Retention; loyalty programs

Implementation

  • Conditions: Valid codes; minimum order; product eligibility
  • Validation: Automated at checkout
  • Tracking: Redemption data; attribution
  • Placement: Top banner (30–50% redemption lift when used well); popup; email; see top-banner-generator, popup-generator

Black Friday / Cyber Monday (BFCM)

Timing

  • Launch: Early November (e.g. Nov 7); lower promo volume post-election
  • Peak: Monday before Thanksgiving; 40%+ of email campaigns contain discounts by then
  • Planning: Start October

Strategy

Approach Notes
Strategic pricing 10–25% often outperforms deep cuts; quality and loyalty over rock-bottom
Price anchoring Multiple options: e.g. $1 first month OR 50% off annual
Psychological triggers Countdown; "cancel anytime"; % discount prominent
Multi-channel Email, website, paid; personalized; peak send 9–10am ET Black Friday
Post-holiday Retarget; segment; shift messaging

Campaign Types

Campaign Use Related
BFCM Seasonal; Nov See BFCM section above
LTD Cold start; AppSumo See LTD section
Referral reward Discount/credits for referrer and referee referral-program
Contest / giveaway Prize = product, discount, cash contest-page-generator
Startups / education Special pricing for segment education-program, startups-page-generator
Forum / community Discount codes in niche forums community-forum
Affiliate Coupon sites; affiliate-specific codes affiliate-marketing

Promotional Materials

Type Use
Banner / poster Website, events; attract attention
Brochure Handout; company overview
Logo stickers Brand exposure
Website prep Promo landing page; banner for BFCM, seasonal; see top-banner-generator
Media kit For press, partners; see media-kit-page-generator

Corporate materials: Company overview, annual report, product info—for investor/partner meetings; printable for events.

Implementation Best Practices

  • Clear objectives: Define goals (e.g. +20% trial signups, -5% churn)
  • ICP alignment: Tailor to segment; startups vs enterprise differ
  • Genuine scarcity: Time-bound; avoid perpetual "limited time"
  • LTV:CAC: Ensure discount economics work
  • Channel tracking: UTM; unique codes per channel

Output Format

  • Discount type and structure
  • Campaign (if applicable: BFCM, LTD, etc.)
  • Redeem code approach (if applicable)
  • Financial guardrails
  • Related page/component skills (pricing-page, top-banner, contest-page)

Related Skills

  • pricing-strategy: Base price structure; pricing-strategy defines when discounts fit; discount-marketing-strategy defines how to execute
  • pricing-page-generator: Pricing page display; anchoring, annual discount presentation
  • cold-start-strategy: LTD as cold-start channel; full launch planning
  • indie-hacker-strategy: Indie hacker LTD use; monetize day one; cold start revenue
  • referral-program: Referral rewards (discounts, credits); 10–30% of price
  • contest-page-generator: Giveaway/contest; prize = discount
  • education-program: Student/education discount channel; verification, placement, discount structure
  • startups-page-generator: Startups/education program page; when standalone page needed
  • top-banner-generator: Promo banner; discount code display; 30–50% redemption lift
  • community-forum: Forum promotion; discount codes in industry forums
  • affiliate-marketing: Coupon sites; affiliate-specific codes
  • landing-page-generator: Promo landing pages
  • directory-submission: Promo code field for Product Hunt, deal platforms
指导展示广告、横幅及程序化购买策略,涵盖格式选择、投放渠道、关键指标优化、创意规范及UTM追踪配置,适用于品牌曝光与再营销场景。
用户希望运行展示或横幅广告活动 提及广告网络、联盟、程序化展示、原生广告或展示再营销
skills/kostja94_marketing-skills/display-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill display-ads -g -y
SKILL.md
Frontmatter
{
    "name": "display-ads",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to run display, banner, or ad network campaigns. Also use when the user mentions \"display ads,\" \"banner ads,\" \"ad network,\" \"ad alliance,\" \"programmatic display,\" \"native ads,\" or \"retargeting display.\" For strategy, use paid-ads-strategy."
}

Paid Ads: Display / Banner

Guides display advertising: ad networks, banner ads, and programmatic buying. Use when placing ads on publisher sites (websites, apps) for brand awareness or retargeting.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

What Is Display / Banner

  • Ad networks: Aggregate inventory from many publishers; buy placements programmatically or via direct deals
  • Banner ads: IAB standard sizes (300×250, 728×90, 160×600, 320×50 mobile); static or animated
  • Programmatic: Automated buying via DSPs; real-time bidding (RTB); audience targeting

Formats

Format Use
Display banner IAB sizes; CPM or CPC; brand, retargeting
Native Blends with page content; higher engagement
Video pre-roll Pre-roll on publisher video; see ctv-ads for streaming
Rich media HTML5; expandable, interactive
Mobile interstitial Full-screen between content

Buying Options

Option Use
Google Display Part of Google Ads; automated placements; retargeting
Programmatic DSP The Trade Desk, Magnite, etc.; audience-based; scale
Direct publisher Deal with specific site; guaranteed placement
Ad network Network aggregates inventory; simpler than full programmatic

Metrics

Metric Use
CPM Cost per thousand impressions
CPC Cost per click
CTR Click-through rate; typically low for banners (0.1–0.5%)
Viewability % of impressions actually seen
Completion rate For video; % who watch full ad

Creative

  • IAB sizes: 300×250 (medium rectangle), 728×90 (leaderboard), 160×600 (skyscraper), 320×50 (mobile)
  • File types: Static image, animated GIF, HTML5
  • Message: Clear CTA; minimal text; brand visible in 3 seconds

UTM

Use utm_medium=display or cpc with utm_source (publisher or network name) for attribution. See traffic-analysis for GA4 alignment.

Pre-Launch Checklist

  • Creative in required sizes
  • Landing page aligned with ad message
  • UTM parameters set
  • Retargeting audience defined (if applicable)
  • Viewability target set

Related Skills

  • paid-ads-strategy: Ad formats by medium; when to use display
  • google-ads: Google Display Network; retargeting campaigns
  • traffic-analysis: UTM for display; attribution
  • analytics-tracking: Conversion tracking; viewability
指导产品通过第三方市场和应用商店进行分发。涵盖渠道类型、平台选择(如AWS、Shopify、Chrome等)及列表优化策略,帮助提升发现率和转化率。
用户希望规划产品通过市场或应用商店的分发 提及'distribution channels'、'marketplace listing'、'app store listing'、'Figma plugin'、'Chrome extension marketplace'、'AWS Marketplace'、'Shopify app'、'GPTs store'、'app distribution'或'third-party marketplace'
skills/kostja94_marketing-skills/distribution-channels/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill distribution-channels -g -y
SKILL.md
Frontmatter
{
    "name": "distribution-channels",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to plan product distribution via marketplaces, app stores, or third-party platforms. Also use when the user mentions \"distribution channels,\" \"marketplace listing,\" \"app store listing,\" \"Figma plugin,\" \"Chrome extension marketplace,\" \"AWS Marketplace,\" \"Shopify app,\" \"GPTs store,\" \"app distribution,\" or \"third-party marketplace.\" For channel mix, use integrated-marketing."
}

Channels: Distribution Channels

Guides product distribution via third-party marketplaces and app stores. Distinct from directory-submission (curated lists, Product Hunt, Taaft)—marketplaces are storefronts where customers discover and purchase apps, plugins, or integrations. Hyperscaler marketplaces (AWS, Azure, GCP) alone are projected to process $85B+ in software sales by 2028.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Channel Types

Type Definition Examples
Direct Company sells via own assets Website, eCommerce, sales team
Indirect Third parties sell on your behalf Marketplaces, app stores, resellers

Marketplaces = Digital storefronts where customers discover and buy; often pre-approved budgets (cloud spend), consolidated billing, faster procurement.

Marketplace Categories

Category Platforms Product fit
Design & collaboration Figma Community, Canva Apps, Adobe Exchange Design tools, templates
Browser extensions Chrome Web Store, Firefox Add-ons Extensions, dev tools
Cloud & enterprise AWS Marketplace, Google Cloud Marketplace, Azure Marketplace SaaS, data, infra
Mobile App Store, Google Play, Microsoft Store Mobile apps, cross-platform
Vertical Shopify App Store, Slack App Directory, Salesforce AppExchange, Zoom Marketplace E-commerce, collaboration, CRM
Developer GitHub Marketplace, WordPress Plugins Dev tools, integrations
AI GPTs (OpenAI), emerging AI app stores AI apps, agents
Social commerce Pinterest Product Pins E-commerce, design tools, templates; Product Schema or Pinterest Catalog

Pinterest Product Pins: Configure product links; shopping tags; link to site. Requires Product Schema or Pinterest Catalog. See pinterest-posts.

Listing Optimization

Practice Guideline
Reduce procurement friction Vendor Insights, standard contracts; streamline enterprise buying
Pricing models Free trials, pay-as-you-go, private offers for enterprise
Trust signals Verified reviews, partner badges, clear taxonomy
Discoverability Optimize for marketplace search; clear descriptions, tags
Co-sell Partner with platform field teams when available

Listing as asset: Your marketplace page is both storefront and onboarding tool; prospects validate, customers discover integrations.

Platform Selection by Product Type

Product type Prioritize
Design / collaboration Figma, Canva, Adobe
Browser extension Chrome, Firefox
Cloud / enterprise SaaS AWS, GCP, Azure
Mobile app App Store, Google Play, Microsoft Store
E-commerce Shopify
Collaboration Slack, Zoom
Developer tools GitHub, WordPress
AI application GPTs, emerging AI stores
E-commerce / templates Pinterest Product Pins

Related Skills

  • directory-submission: Curated lists (Taaft, Product Hunt, G2)—different from marketplaces; both are distribution
  • integrations-page-generator: Integrations page content; marketplace listing drives discovery
  • cold-start-strategy: Distribution as cold-start channel
  • localization-strategy: Regional marketplaces by locale
用于创建、优化或结构化文档站点,涵盖Getting Started、API参考等模块。适用于docs/help子域,提供信息架构、内容组织及SEO最佳实践指导。
用户需要创建文档网站 提到docs、help center、knowledge base 涉及API Reference或用户指南结构
skills/kostja94_marketing-skills/docs/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill docs-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "docs-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or structure a documentation site. Also use when the user mentions \"docs,\" \"documentation site,\" \"docs subdomain,\" \"docs.yourdomain.com,\" \"help center,\" \"knowledge base,\" \"Getting Started,\" \"API Reference,\" \"user guides,\" or \"tutorials.\" For API marketing landing, use api-page-generator."
}

Pages: Documentation Site

Guides documentation site structure, navigation, and content organization. Typically hosted on docs.* or help.* subdomain. Includes Getting Started, guides, tutorials, API Reference (endpoint docs), and troubleshooting. Distinct from API introduction page (api-page-generator).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and use cases.

Identify:

  1. Product type: Software, API, hardware, service
  2. Audience: End users, developers, admins
  3. Content sources: Markdown, MDX, Git, CMS
  4. Subdomain: docs., help., or path (/docs)

Documentation Structure

Section Purpose Typical Content
Getting Started Onboarding, first steps Quick start, installation, first task
Guides / Tutorials Step-by-step learning How-to articles, workflows
Concepts Background, architecture Key concepts, glossary links
API Reference Endpoint docs Auth, request/response, examples; part of docs, not separate page
Troubleshooting Problem solving FAQ, common errors, support links

Best Practices

Information Architecture

  • Progressive disclosure: Start simple, link to depth
  • Sidebar navigation: Hierarchical, collapsible sections
  • Search: Full-text search for long doc sets
  • Breadcrumbs: For deep hierarchies

API Reference (within Docs)

API Reference is a section of docs, not a standalone page. Include: endpoints by resource, auth, request/response schemas, error codes, rate limits, code examples (cURL, SDKs). Use OpenAPI/Swagger for consistency.

Content

  • Task-oriented: "How to X" not "X feature"
  • Code examples: Copy-paste ready, multiple languages if relevant
  • Screenshots/videos: For UI-heavy products
  • Versioning: Document product/API version when applicable

SEO and Discovery

  • Index docs: Unless internal-only; use robots if needed
  • Internal links: Cross-link related articles, link to main site
  • Schema: TechArticle, HowTo for guides

Output Format

  • Structure (sections, hierarchy)
  • Navigation design (sidebar, top-level)
  • Getting Started outline
  • Content checklist per section
  • Subdomain/path recommendation

Related Skills

  • api-page-generator: API intro page links to docs
  • sidebar-generator: Docs sidebar design
  • faq-page-generator: FAQ can live in docs or main site
  • howto-section-generator: HowTo step blocks in guides/tutorials; TechArticle + HowTo alignment
  • content-strategy: Doc content planning
指导多产品或品牌的域名架构决策,包括子文件夹、子域名及独立域名的选择。涵盖品牌架构(统一品牌与多品牌)及Hub-Spoke原则,结合SEO权威性与业务需求提供最佳实践建议。
决定多个产品或品牌的域名结构 询问子文件夹与子域名的区别 讨论品牌架构策略 涉及Hub-Spoke域名模型
skills/kostja94_marketing-skills/domain-architecture/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill domain-architecture -g -y
SKILL.md
Frontmatter
{
    "name": "domain-architecture",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to decide domain structure for multiple products or brands—subfolder vs subdomain vs independent domain. Also use when the user mentions \"subfolder vs subdomain,\" \"subdirectory vs subdomain,\" \"multiple products domain,\" \"multiple websites,\" \"brand architecture,\" \"branded house,\" \"house of brands,\" \"where to host product,\" \"domain structure,\" or \"hub-spoke domain.\" For brand SERP, use multi-domain-brand-seo."
}

Strategy: Domain Architecture

Guides domain structure decisions for multiple products or brands: subfolder (subdirectory), subdomain, or independent domain. Covers brand architecture (Branded House vs House of Brands) and Hub-Spoke principles when multiple domains coexist. See domain-selection for initial domain choice (Brand/PMD/EMD, TLD); website-structure for single-domain page planning; rebranding-strategy for domain change and migration; multi-domain-brand-seo for brand search optimization.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product portfolio and growth goals.

Identify:

  1. Product count: Single product vs multiple products/brands
  2. Brand strategy: Unified brand vs distinct brands
  3. Current state: Planning from scratch vs consolidating existing domains
  4. Constraints: Tech stack, team, budget

Domain Structure Options

Structure Example SEO Authority Brand Independence Typical Use
Subfolder company.com/product-a Shared with main domain Low Products under one brand; SMB; content consolidation
Subdomain product.company.com Treated separately by Google Medium Separate product experience; tech isolation; support/docs
Independent domain product.ai None shared High Acquired brands; different markets; distinct brand identity

When to Use Each

Choose When
Subfolder Products share value proposition; want to strengthen main domain; SMB; blog, tools, features under one brand
Subdomain Need separate tech stack (e.g., app vs marketing); support portal; docs; distinct UX but same brand
Independent domain House of Brands; acquired company; different audience; different TLD (e.g., .ai for AI product)

SEO consensus: Subfolders typically outperform subdomains for most cases—authority flows to the main domain. Subdomains require separate SEO effort.

Brand Architecture

Model Description Domain Tendency Examples
Branded House One master brand; products use functional descriptors Subfolder or subdomain Google (google.com/search, google.com/maps), FedEx
House of Brands Each brand independent; parent hidden Independent domains Unilever (dove.com, axe.com)
Sub-brands / Endorsed Sub-brands with parent endorsement Subdomain or independent FedEx Express, Marriott Bonvoy

Decision factors: Business strategy, market positioning, product overlap, resource availability.

Hub-Spoke (Multiple Domains Coexist)

When company main site (company.com) and product site (product.ai) both exist:

Role Domain Focus
Hub company.com Brand, About, Research, product matrix; brand queries
Spoke product.ai Product features, pricing, signup; product queries

Principles:

  • Hub links to Spoke (Products section); Spoke links back (About, Footer, "A [Company] product")
  • Spoke avoids competing for brand queries in Title; Hub avoids competing for product keywords
  • See multi-domain-brand-seo for brand search optimization.

Output Format

  • Recommendation (subfolder / subdomain / independent) with rationale
  • Brand architecture fit (Branded House / House of Brands / Sub-brands)
  • Domain mapping (e.g., product A → company.com/product-a)
  • Hub-Spoke guidance (if multiple domains)
  • Related next steps (website-structure, rebranding-strategy)

Related Skills

  • domain-selection: Initial domain choice (Brand/PMD/EMD, TLD); single-site use case
  • website-structure: Plan pages within a domain; single-domain structure
  • rebranding-strategy: Domain change, 301 redirects, migration
  • multi-domain-brand-seo: Brand search control when Hub and Spoke coexist
  • branding: Brand strategy, positioning; domain architecture implements brand structure
指导用户为新网站选择SEO友好的域名,涵盖品牌、PMD与EMD类型对比,.ai/.com等TLD选择策略,以及长度、历史检查和防御性注册建议。适用于域名决策场景,不用于迁移或架构规划。
用户询问如何选择SEO友好的域名 涉及品牌域名、关键词域名、EMD、PMD的选择 讨论TLD如.com、.ai、.io的优劣 提到域名长度、历史记录或防御性注册
skills/kostja94_marketing-skills/domain-selection/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill domain-selection -g -y
SKILL.md
Frontmatter
{
    "name": "domain-selection",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to choose an SEO-friendly domain for a new site—brand vs keyword domain, TLD selection, or domain best practices. Also use when the user mentions \"domain choice,\" \"pick domain,\" \"SEO-friendly domain,\" \"brand domain,\" \"EMD,\" \"PMD,\" \"exact match domain,\" \"partial match domain,\" \"TLD,\" \".ai domain,\" \".com vs .io,\" \"domain length,\" \"domain history,\" or \"defensive domain registration.\" For migration, use rebranding-strategy."
}

Strategy: Domain Selection

Guides initial domain choice for a single site: Brand vs Partial Match vs Exact Match domains, TLD selection (.ai, .com, .io), length, readability, history check, and defensive registration. A good domain affects SEO, brand perception, and UX. See domain-architecture when planning for multiple products; rebranding-strategy when changing domain.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Reference: Alignify: Domain SEO – How to Choose SEO-Friendly Domains — detailed guide, AI brand naming, TLD recommendations, rebrand cases.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 2 (Positioning), 3 (Target Audience), 8 (Brand & Voice).

Identify:

  1. Product type: Tool, content, e-commerce, AI product, etc.
  2. Brand stage: New brand vs established; solo vs team
  3. Goals: Quick SEO traffic vs long-term brand building

Domain Type: Brand vs PMD vs EMD

Type Description SEO Brand Best For
Branded Domain Domain = brand; no functional keywords (Notion, Canva, Perplexity) Long-term; Google favors brands High Teams; long-term brand building
Partial Match (PMD) Part of domain relates to function (FlowGPT, Dify, Reportify) Balance; signals topic Medium AI tools; balance SEO + brand
Exact Match (EMD) Domain = search query (png2jpg.com, aiartgenerator.cc) Fast early traffic; ceiling lower Low Solo devs; tool sites; site networks

Google stance: Keywords in domain no longer directly affect ranking; domain still matters for UX and brand. EMDs work when paired with quality content; branded domains with entity recognition matter more long-term.

Recommendation:

  • Brand building → Branded or PMD; plan for months
  • Quick SEO traffic → EMD or PMD; good for tool sites, converters, generators
  • AI products → PMD (xxxGPT, xxxify) or Branded; avoid generic names that cause search confusion (e.g., multiple "Speak AI" products)

TLD Selection

TLD Use Case Notes
.com Default choice; highest trust Most preferred; often expensive
.ai AI products ccTLD (Anguilla); auto-hyperlinks in Excel/Sheets/Feishu → natural backlinks; signals AI
.io Tech, SaaS Popular; geopolitical risk (Chagos Islands)
.co, .app, .pro Alternatives If .com taken
.new Instant-create tools For bolt.new, claude.new style; see Alignify .new guide

AI products: Prefer .ai, .com, or .io. Avoid niche TLDs (.im, .xyz, .inc, .art, .dev)—higher risk of resolution issues (e.g., Notion .so outage).

Domain Best Practices

Rule Purpose
Short & memorable Easier to type, share, recall
Avoid hyphens Looks unprofessional; can signal low quality
Check history Use Archive.org; avoid previously penalized domains
Defensive registration Register .net, .org, variants; redirect to main; do not deploy on multiple domains
Impersonation variants For AI products: register brand+ai, brand+app, brand+official; see brand-protection for impersonation response
Accurate WHOIS; renew on time Avoid loss or hijacking

.ai Domain Natural Backlinks

When brand name includes .ai (e.g., Character.ai, Leonardo.Ai), the full string auto-hyperlinks in Excel, Google Sheets, Feishu, and some IM apps. Each mention = potential backlink. Useful for AI products where the generic name alone (e.g., "Character") is a common noun.

Output Format

  • Domain type recommendation (Brand / PMD / EMD) with rationale
  • TLD recommendation
  • Checklist (length, readability, history, defensive registration)
  • Related next steps (website-structure, rebranding-strategy)

Related Skills

  • branding: Brand strategy; domain selection implements brand positioning
  • website-structure: Plan pages after domain choice; single-domain structure
  • domain-architecture: Subfolder vs subdomain vs independent when multiple products
  • rebranding-strategy: Domain change, 301 redirects; use when rebranding
  • brand-protection: Defensive registration for impersonation prevention; fake site response
  • link-building: Build authority after domain is chosen
指导创建和优化桌面及移动端应用的下载页面,旨在通过清晰的价值主张、平台选项和信任信号将访客转化为安装用户。涵盖页面结构、平台特定布局及性能转化最佳实践。
创建应用下载页面 优化现有下载页 审计下载页效果 提及 App Store/Play Store 涉及安装按钮或下载引导
skills/kostja94_marketing-skills/download/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill download-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "download-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit a download page for desktop or mobile app. Also use when the user mentions \"download page,\" \"app download,\" \"desktop download,\" \"mobile app download,\" \"App Store,\" \"Play Store,\" \"get the app,\" \"install app,\" or \"download CTA.\" For app install ads, use app-ads."
}

Pages: Download Page

Guides download page structure and optimization for desktop and mobile app downloads. Purpose: convert visitors into installers by clearly presenting value, platform options, and trust signals.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and value proposition.

Identify:

  1. App type: Desktop (Windows, macOS, Linux) or mobile (iOS, Android, both)
  2. Traffic source: Organic, paid, email, referral
  3. Distribution: App Store / Play Store only, direct download, or both

Page Purpose

Purpose Goal
Download Guide users to install desktop or mobile app
Trust Build confidence before download (security, privacy, reviews)
Conversion Maximize download rate, store visits, install conversion

Download Page Structure

Step Purpose Elements
1. Value proposition Why download Headline, benefit-focused copy, key features
2. Platform selection Clear path Desktop: OS detection or manual pick; Mobile: App Store / Play Store buttons
3. Trust signals Reduce friction Ratings, download count, security badges, privacy note
4. Visual proof Show the app Screenshots, app previews, video
5. CTA Primary action Single, prominent download button

Platform-Specific Layout

Desktop App

  • OS detection: Auto-detect OS or show "Download for Windows / macOS / Linux"
  • Direct download: One-click .exe / .dmg / .deb etc.
  • Alternatives: Optional "Other platforms" or "Command line" for power users

Mobile App

  • Dual store: App Store + Play Store buttons side by side
  • Smart redirect: Detect device and show relevant store first; still show both
  • QR code: Optional for desktop visitors to scan and install on phone

Optimization Best Practices

Performance

  • Load time: Under 3 seconds; each extra second can cost ~7% conversion
  • Mobile-first: Most app download traffic is mobile; responsive, thumb-reachable CTAs
  • Image optimization: WebP, lazy loading, compression (e.g. TinyPNG, ImageOptim)

Conversion

  • Single primary CTA: "Download Free Now," "Get on App Store," "Get for Windows"
  • Above the fold: CTA visible without scrolling
  • Repeat CTA: On longer pages, repeat at logical points
  • A/B test: CTA color, size, copy, placement

Trust & Social Proof

  • Star ratings: Show App Store / Play Store ratings
  • Download count: "10M+ downloads," "Trusted by X users"
  • Testimonials: User quotes, media logos
  • Security: Security badges if collecting sensitive info

Content

  • Top 3–5 features: Benefit-focused, scannable bullet points
  • Screenshots: High-quality, show app in action
  • Video: App preview or demo video

Alignment with Traffic

  • Ads: If from PPC, ensure message matches ad (offer, platform); see paid-ads-strategy
  • Email: Match campaign message and CTA

Output Format

  • Headline and subheadline
  • Structure (5-step flow sections)
  • Platform layout (desktop vs mobile)
  • CTA copy and placement
  • Trust signals placement
  • SEO metadata (if page is indexed)

Related Skills

Pages

  • landing-page-generator: Download page is a type of landing page; apply LP principles
  • homepage-generator: Homepage often links to download page
  • features-page-generator: Feature copy for "Explain value" section

Components

  • hero-generator: Hero section (value proposition)
  • cta-generator: Download button design
  • trust-badges-generator: Social proof, ratings
  • testimonials-generator: User testimonials

SEO

  • title-tag, meta-description, page-metadata: Download page metadata
指导设计和实施学生及教育折扣计划,作为获客渠道。涵盖评估产品适配性、选择折扣结构(如首单/续费优惠)、验证方式(.edu/SheerID等)及页面布局优先级,旨在通过教育市场获取长期客户价值。
规划或优化学生和教育折扣项目 提到'student discount'、'education discount'、'student plan'、'.edu discount'、'academic pricing' 涉及'student verification'、'SheerID'、'UNiDAYS'或'education program'
skills/kostja94_marketing-skills/education-program/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill education-program -g -y
SKILL.md
Frontmatter
{
    "name": "education-program",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to plan, implement, or optimize student and education discount programs. Also use when the user mentions \"student discount,\" \"education discount,\" \"student plan,\" \"for students,\" \".edu discount,\" \"academic pricing,\" \"student verification,\" \"SheerID,\" \"UNiDAYS,\" or \"education program.\" For startup pricing page, use startups-page-generator."
}

Channels: Education Program

Guides student and education discount programs as an acquisition channel. Targets students and educators; common for SaaS, dev tools, and productivity apps. ~65% of students who use professional tools in school continue using them in their first jobs—education discounts are long-term customer acquisition, not just revenue loss.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and pricing.

Identify:

  1. Product type: SaaS, dev tool, design tool, productivity
  2. Student fit: Is your ICP or future ICP student-aged?
  3. Discount structure: First-time vs renewal; % or fixed
  4. Verification: .edu, student ID, third-party (SheerID, UNiDAYS)

Education Program vs Other Channels

Dimension Education Program Startups Program Referral
Audience Students, educators Founders, early-stage Existing users
Incentive Discount, free tier Discount, credits Discount, credits
Verification .edu, student ID, SheerID/UNiDAYS Revenue, team size None (user-driven)
LTV focus Future customers; 65% continue post-grad Early adopters Referred users

Discount Structures

Type Typical Range Use
First-time / registration 30–50% off Apply at signup; drives conversion
Ongoing / renewal 15–25% off Retain students; lower than first-time
Free tier Full access free JetBrains, GitHub Education; highest adoption
Flat academic rate Simplified pricing Easier for students to understand

Example: 30% off on registration day; 15% off on renewal. Align with discount-marketing-strategy for financial guardrails (LTV:CAC, qualification criteria).

Verification

Method Use
.edu email Instant; low friction; US-centric
Student ID upload Manual review; global; document must show name, institution, expiry
SheerID Third-party; 200K+ data sources; verify → promo code at checkout
UNiDAYS Third-party; 98%+ automated; 800+ brands; marketplace reach

When to verify: At registration (recommended when discount applies at signup) or at checkout. Registration-time verification = single decision point; user claims discount where they convert.

Placement Priority

Priority Location Purpose
P0 Registration / signup flow User claims discount here; must show when discount applies at signup
P1 Pricing page Student tier or "Student discount" block; keeps single decision point
P1 Homepage banner or CTA "Students: 30% off today, 15% off ongoing"; top-banner-generator
P2 Standalone page /student-discount Optional; for "student discount" SEO or paid ad landing page

Principle: When discount applies at registration, core placement is registration flow. Pricing page and homepage support discovery. Standalone page only if needed for SEO or ads—avoid duplication when persona pages (e.g. "for students") already exist.

Page Strategy

Approach When
Embed in pricing Student as tier or block; link to full pricing; no separate page
Registration only Discount claimed at signup; pricing page shows "Student discount available—verify at signup"
Standalone /student-discount "Student discount" search intent; paid ad landing; persona page would duplicate

See startups-page-generator for page structure when a standalone education page is needed; pricing-page-generator for Special programs section.

Implementation Flow

  1. Define discount: First-time %, renewal %; align with pricing-strategy, discount-marketing-strategy
  2. Choose verification: .edu (instant) vs SheerID/UNiDAYS (broader, automated)
  3. Placement: Registration (P0); pricing page (P1); homepage banner (P1); standalone page (P2 if needed)
  4. Graduation transition: Plan how students convert to full price when eligibility ends
  5. Track: Student signups, conversion rate, LTV of student cohort

Best Practices

  • Low friction: .edu = instant; ID upload = clear requirements; third-party = one-click verify
  • Abuse prevention: Revoke if ineligible; annual re-verification; limit per person
  • Messaging: "We've been there"; "Grow with us"; social proof ("X students use [Product]")
  • Graduation: Email before expiry; offer transition discount to full plan

Output Format

  • Discount structure (first-time, renewal)
  • Verification method
  • Placement (registration, pricing, homepage, standalone)
  • Page strategy (embed vs standalone)
  • Related skills for execution (pricing-page, startups-page, top-banner, discount-marketing)

Related Skills

  • discount-marketing-strategy: Discount structure, financial guardrails; education is a campaign type
  • pricing-strategy: Base price; education discount applies on top
  • pricing-page-generator: Special programs section; Student tier or block; placement P1
  • startups-page-generator: Standalone education page when needed; same structure for startups + education
  • top-banner-generator: Homepage banner "Students: X% off"; placement P1
  • landing-page-generator: /student-discount landing page when used for SEO or ads
  • signup-login-page-generator: Signup is P0 for student discount; discount block, verification at registration
  • use-cases-page-generator: "For students" use case; avoid duplicate "for students" page
指导SEO内容优化E-E-A-T(经验、专业、权威、信任),涵盖YMYL场景、作者资质展示、引用规范及Schema标记,提升内容可信度与搜索排名。
用户希望提升E-E-A-T或添加信任信号 提及E-E-A-T、YMYL、专家资质、引用来源或权威性优化
skills/kostja94_marketing-skills/eeat-signals/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill eeat-signals -g -y
SKILL.md
Frontmatter
{
    "name": "eeat-signals",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to improve E-E-A-T, add trust signals, or optimize for expertise and authority. Also use when the user mentions \"E-E-A-T,\" \"E-E-A-T signals,\" \"experience expertise authority trust,\" \"author bio,\" \"YMYL,\" \"trust signals,\" \"expertise signals,\" \"authority signals,\" \"citations,\" \"references,\" or \"credibility.\" For headings, use heading-structure."
}

SEO Content: E-E-A-T Signals

Guides E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) implementation for SEO. E-E-A-T helps search engines and users assess content quality; YMYL topics (health, finance, legal) require higher E-E-A-T.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

What Is E-E-A-T

Element Meaning Implementation
Experience First-hand, real-world experience Case studies, original research, user testimonials, "we tested"
Expertise Subject-matter knowledge Author credentials, expert quotes, technical depth
Authoritativeness Recognition as a source Backlinks, citations, author page, publisher reputation
Trustworthiness Accuracy, transparency Citations, About page, contact, HTTPS, no misleading content

E-A-T (without Experience) is used in Featured Snippet context—Bing/Google emphasize correctness, document quality, then authority and trust. See featured-snippet.

Author Bio

Components

Element Guideline
Real name Full name used consistently across platforms
Photo Professional headshot; compress for LCP
Credentials Current role, relevant experience tied to article topic
Verifiable links LinkedIn, personal site; align sameAs in Person schema
Author page Dedicated page per author; bio, other articles, social
Lightweight action (optional) Newsletter signup, social follow — avoid link stacking

Placement

  • End of article (default): User finishes reading, naturally curious about author; standard for blogs and deep content.
  • Top of article: Strong expert endorsement; suited for news, YMYL, or short items.
  • Sidebar (desktop): Compact version. Mobile fallback required — sidebar content often disappears on small screens; place author block within the main content column at the bottom on mobile.

Multi-Author

For co-authored, reviewed, or fact-checked content, list multiple author cards or label roles consistently (e.g. "Written by / Reviewed by").

Schema

Author entity uses Person JSON-LD with name, url, image, jobTitle, worksFor, knowsAbout, sameAs. Must match visible page content — no exaggeration or fabricated credentials. Validate with Rich Results Test. See entity-seo, schema-markup.

Citations & References

Scenario Practice
Data or statistics Cite source inline or in References section
Expert quotes Attribute; link to source or profile
Reference section For 5+ citations; list at end before Related posts
Format Inline links preferred; numbered refs for academic-style
When to include Any claim benefiting from authority (stats, studies, definitions)
External links Link to reputable sources; avoid low-quality sites

Experience Signals

Signal Use
Case studies Real customer outcomes; Challenge→Solution→Results
Original research First-party data, surveys, tests
First-hand testing "We tested X"; product reviews with real use
User testimonials Authentic quotes; link to full case study when available

YMYL (Your Money Your Life)

Topics that can significantly impact health, financial stability, or safety require higher E-E-A-T:

  • Health: Medical, mental health, nutrition advice
  • Finance: Investment, tax, insurance, loans
  • Legal: Legal advice, regulations
  • Safety: Product safety, emergency procedures

Guidelines: Author credentials, citations to authoritative sources, clear sourcing, regular updates, avoid speculation.

AI-Assisted Content

When content is AI-assisted: human review before publish; verify facts and add citations; original insights or data; avoid generic phrasing. Transparency and human refinement support E-E-A-T.

Output Format

  • E-E-A-T assessment (gaps, strengths)
  • Author bio recommendation
  • Citation plan (where to add, what to cite)
  • Experience signals (case studies, original data)
  • YMYL considerations (if applicable)

Related Skills

  • article-page-generator: Article page structure; author bio placement
  • article-content: Article body creation; citations, references format
  • content-optimization: Original images, content quality; E-E-A-T complements
  • link-building: Digital PR, E-E-A-T; backlinks signal authority
  • featured-snippet: E-A-T in snippet algorithm; correctness, authority
  • backlink-analysis: Authority assessment; E-E-A-T context
  • customer-stories-page-generator: Case studies as experience signal
  • testimonials-generator: User quotes as trust signal
  • entity-seo: Entity signals; Organization, Person schema; Knowledge Panel; E-E-A-T alignment
指导AI/SaaS产品的电子邮件营销策略,涵盖EDM与通讯区别、五种内容类型、用户与内容最佳实践及SPF/DKIM/DMARC发送可靠性配置。
用户希望规划电子邮件营销、EDM或通讯策略 提及邮件送达率、SPF、DKIM、DMARC等技术指标 讨论电子邮件内容策略、自动化或冷邮件
skills/kostja94_marketing-skills/email-marketing/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill email-marketing -g -y
SKILL.md
Frontmatter
{
    "name": "email-marketing",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to plan email marketing, EDM, newsletter strategy, or email deliverability. Also use when the user mentions \"email marketing,\" \"EDM,\" \"newsletter,\" \"SPF,\" \"DKIM,\" \"DMARC,\" \"email deliverability,\" \"email content strategy,\" \"email campaigns,\" \"newsletter strategy,\" \"email automation,\" or \"cold email.\" For signup UI, use newsletter-signup-generator."
}

Channels: Email Marketing

Guides email marketing strategy for AI/SaaS products. Email ROI ~$36 per dollar spent; open/click rates typically higher than social. Covers EDM vs Newsletter, five content types, deliverability (SPF/DKIM/DMARC), and SEO synergy via article delivery.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for audience and content strategy. See content-marketing for content types and formats across channels.

Identify:

  1. Goal: Retention, conversion, brand reach, or SEO synergy
  2. Content mix: Onboarding, campaign, announcement, features, newsletter
  3. List size: Bulk sender rules (5,000+/day) require Gmail/Yahoo compliance

EDM vs Newsletter

Type Purpose Use
EDM Direct marketing; conversion-focused Promotions, campaigns, announcements; bulk sends
Newsletter Ongoing value; relationship Industry insights, curated articles; regular cadence

Combine both: EDM for push; Newsletter for nurture. Cover different stages and goals.

Five Content Types

Type Use
Onboarding Welcome + first-use guidance; 5-7 day sequence; behavior-triggered; drive "Aha!" moment
Campaign Promotions, limited-time; conversion or participation
Announcement Product launch, major update; one-time important notice
Features update New features, improvements; help users adopt
Blog/Newsletter Curated articles, industry insights; sustained touch

User Best Practices

Practice Guideline
Personalization Segment by behavior, source, stage; boosts open/click
Timing New users: dense; existing: controlled pace; behavior-triggered > calendar-only
Welcome series Send soon after signup; 5-7 emails over days; guide first key action
Unsubscribe One-click required (Gmail/Yahoo); honor within 48h; clear entry
Complaint rate Keep below 0.3%; list hygiene critical

Content Best Practices

Practice Guideline
Subject One clear topic per email; avoid pure promo
Value first Useful info before promotion
CTA Single primary CTA; clear next step
Mobile 50%+ read on mobile; responsive layout, tappable links

Deliverability & Domain Config

Subdomain: Use subdomain (e.g. mail.example.com) for marketing; keep transactional (support@, etc.) on main domain. Isolate risk.

SPF, DKIM, DMARC

Protocol Purpose
SPF Authorizes mail servers for domain
DKIM Cryptographic signature; verifies sender
DMARC Policy for unauthenticated mail; start p=none, then quarantine, then reject over 60-90 days

Order: SPF first, then DKIM, then DMARC. Gmail/Yahoo require all three for bulk senders (5,000+/day) since Feb 2024.

Advanced: TLS-RPT, MTA-STS, BIMI (brand logo). Postmaster Tools: Monitor deliverability, spam rate, auth status.

Delivery Strategy: Articles + SEO Synergy

Article Type Use
Retention Deep content for existing users; improve retention
ToFu Top of funnel; awareness (trends, concepts, problem framing)
MoFu Middle of funnel; consideration (comparisons, reviews, best practices)

Dual value: (1) Better email engagement (open, click, stickiness); (2) Drive traffic to article pages from non-search channel; signals to Google that users value content; supports SEO.

Measurement: GA4 email source traffic to article pages; GSC rank/click changes.

Planning Framework

  1. Content mix: Allocate onboarding, campaign, announcement, features, newsletter
  2. Select articles: Pick retention, ToFu, MoFu from blog; prioritize SEO target pages
  3. Cadence: Stable frequency (weekly/biweekly/monthly); avoid over-sending
  4. Monitor: Open rate, click rate; GA4 email contribution to article traffic; GSC

Frequency

Guideline Note
Baseline 1 high-value email/week for most brands
Peak times Tue-Thu, 8-11am or 2-4pm (recipient timezone)
Segmentation New vs loyal need different cadence
Quality Relevant, behavior-triggered > calendar volume

Data: ~36% send 1-3/month; ~30% weekly; daily risks high unsubscribe.

Output Format

  • Content mix (five types)
  • EDM vs Newsletter balance
  • Deliverability (subdomain, SPF/DKIM/DMARC)
  • Article delivery (Retention, ToFu, MoFu, SEO targets)
  • Cadence and frequency
  • KPI (open, click, GA4 email traffic, GSC)

Related Skills

  • content-marketing: Content types, formats; email as channel in repurposing matrix
  • newsletter-signup-generator: Signup form design
  • traffic-analysis: Email source attribution, UTM
  • analytics-tracking: Email click tracking
  • content-strategy: Article selection for email delivery
  • integrated-marketing: Email as owned media channel
指导AI/SaaS产品的员工生成内容(EGC)及员工倡导策略。涵盖目标设定、平台选择、与UGC/创作者计划的区别、内容格式及实施最佳实践,旨在利用员工真实性提升品牌信任度和参与度。
规划或优化员工生成内容(EGC) 提及员工倡导、内部品牌大使、员工社交媒体 涉及员工社交帖子或品牌大使计划
skills/kostja94_marketing-skills/employee-generated-content/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill employee-generated-content -g -y
SKILL.md
Frontmatter
{
    "name": "employee-generated-content",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to plan, implement, or optimize employee-generated content (EGC) or employee advocacy. Also use when the user mentions \"EGC,\" \"employee advocacy,\" \"employee content,\" \"internal brand ambassadors,\" \"employee social media,\" \"employee advocacy program,\" \"staff advocacy,\" \"LinkedIn employee posts,\" or \"brand ambassador program.\" For LinkedIn, use linkedin-posts."
}

Channels: EGC (Employee-Generated Content)

Guides EGC and employee advocacy strategy for AI/SaaS products. EGC is content created by employees (social posts, videos, blogs, testimonials) that reflects authentic workplace and product insights. Employee-shared content generates ~8x more engagement than brand posts; LinkedIn employee posts reach ~561% more than brand content.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and brand voice.

Identify:

  1. Goal: Brand trust, thought leadership, recruitment, or conversion
  2. Platform: LinkedIn (B2B primary), X, Instagram, TikTok
  3. Employee base: Size, roles, existing social presence

EGC vs. UGC vs. Creator Program

Dimension EGC UGC Creator Program
Source Employees Customers External creators
Trust Company experts (66% vs 47% for ads) Peer reviews Influencer reach
Cost Low; leverage workforce Incentives, curation Credits, payment
Best for B2B, SaaS, professional services Social proof, reviews Content scale, tutorials

Why EGC Works

  • Algorithm favor: Social platforms prioritize personal accounts over brand pages
  • Authenticity: 92% trust recommendations from individuals over branded content; 81% need to trust before buying
  • B2B fit: LinkedIn is primary; employees share industry expertise and product insights
  • Results: 27% engagement increase, 19% sales increase in first year; 24% higher conversion vs traditional content

Content Formats

Format Use Platform
Day-in-the-life Culture, behind-the-scenes LinkedIn, TikTok, Instagram
Industry insights Thought leadership, expertise LinkedIn
Short-form video Quick tips, demos TikTok, LinkedIn, Instagram
Testimonials Product experience Website, case studies
Serialized content Consistent presence Personal + brand accounts

Implementation Best Practices

Do not force participation. Recognize and nurture organic content from employees already sharing about work. Volunteer participation outperforms mandated programs.

Practice Purpose
Tiered framework Map employees by engagement (nano, micro, macro); treat like internal influencer tiers
Brief templates Content objectives, brand voice, mandatory disclosures (FTC/ASA)
Advocacy platforms Sociabble, EveryoneSocial for brief distribution and tracking
Incentives Leaderboards, recognition; avoid heavy-handed quotas
Training Improve quality and consistency; keep approval simple
Centralized hub Branded hashtags, content library, approval workflow

B2B / SaaS Specifics

  • LinkedIn first: Algorithm favors personal posts; employees as thought leaders
  • Cost-effective: Leverage existing workforce vs hiring external creators
  • Diverse perspectives: Sales, support, dev create varied content for different segments
  • Recruitment: 79% of job seekers check social before applying; EGC attracts 58% more top talent, 20% retention boost

Output Format

  • Platform and content format selection
  • Employee identification and tier approach
  • Content strategy and brief template
  • Governance (approval, disclosure, brand guidelines)
  • Measurement plan (engagement, reach, conversions)

Related Skills

  • influencer-marketing: External influencers; EGC is internal
  • creator-program: External creators; EGC is employee-driven
  • linkedin-posts: Primary EGC platform for B2B
  • integrated-marketing: EGC as part of PESO shared/earned media
  • traffic-analysis: UTM tagging for employee-shared links
指导实体SEO优化,帮助搜索引擎通过知识图谱识别品牌、产品及作者等独特实体。涵盖实体定义、重要性、内容信号及Schema实现,提升AI搜索可见性与E-E-A-T表现。
用户希望针对实体识别或知识图谱进行优化 提及'entity SEO'、'Knowledge Graph'、'entity signals'、'brand entity'等相关术语
skills/kostja94_marketing-skills/entity-seo/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill entity-seo -g -y
SKILL.md
Frontmatter
{
    "name": "entity-seo",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to optimize for entity recognition, Knowledge Graph, or entity-based SEO. Also use when the user mentions \"entity SEO,\" \"entity optimization,\" \"Knowledge Graph,\" \"Knowledge Panel,\" \"entity signals,\" \"brand entity,\" \"entity linking,\" \"entity relationships,\" or \"entity-first content.\" For structured data, use schema-markup."
}

SEO: Entity SEO

Guides entity-based SEO—making your brand, product, and authors recognizable as distinct entities in search engines' knowledge systems. Google moved from keyword-matching to meaning-based understanding (Hummingbird, RankBrain, BERT, MUM); entity understanding is central to how search processes queries. Content structured around entities can receive ~3.2× more visibility in AI-powered search. References: Semrush, Search Engine Land.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Entity definition: Singular, unique, well-defined things (person, place, organization, product, event)
  • Entity vs keyword: Entities = underlying concepts; keywords = text strings
  • Knowledge Graph: Google's entity database; powers disambiguation and related concepts
  • Implementation: Schema (Organization, Person); entity signals in content; consistency across platforms

What Is an Entity?

An entity is a thing or concept that is singular, unique, well-defined, and distinguishable—e.g. person, place, organization, product, event. Entities have:

Attribute Meaning
Unique identity "Apple Inc." ≠ "apple (fruit)" despite same word
Attributes Founding date, location, industry
Relationships Connections to other entities (e.g. Apple Inc. → Steve Jobs, iPhone)

Entity SEO = optimizing so search engines can identify, categorize, and connect your brand/product/author within the knowledge graph. Keywords are ambiguous; entities maintain consistent meaning across contexts.

Why Entity SEO Matters

  • Search evolution: Google uses entities to understand intent, not just match phrases
  • Knowledge Graph: Billions of entities and relationships; disambiguation, related concepts
  • AI search: Entity-optimized content ~3.2× more visible in AI results
  • E-E-A-T: Entity signals support Experience, Expertise, Authoritativeness, Trust. See eeat-signals
  • GEO: AI Overviews, Copilot, Perplexity cite entities; clear identity improves citation. See generative-engine-optimization

Entity Signals (Content Best Practices)

Practice Purpose
Clear brand/product name Consistent naming; avoid confusion with similar entities
Author identity Person schema; author bio; link to author page
Organization identity Organization schema site-wide; logo, sameAs
Citable paragraphs Each block understandable on its own; supports AI extraction
Consistency Same name, description, logo across website, social, directories

Schema for Entity SEO

Organization

  • Placement: Minimum—homepage; Optimal—root layout / global component (layout.tsx, _document, global header) so it appears on every page. Do not confine to About page; About uses AboutPage schema. See schema-markup for full placement table.
  • Required: @id, name, url; add logo, sameAs (social, Wikidata)
  • Optional: description, address, contactPoint; use most specific type (LocalBusiness, SoftwareApplication, etc.) when applicable

@id: Use stable URL (e.g. https://example.com/#organization) for entity linking across pages. Link Organization ↔ WebSite on homepage for sitelinks searchbox.

Person

  • Use: Author pages; Article author; team members
  • Properties: name, url; affiliation (Organization); sameAs (LinkedIn, Twitter)
  • @id: Enables entity linking; e.g. https://example.com/author/jane/#person

See schema-markup for full VideoObject, Article, Product, etc.; Organization and Person are core for entity SEO.

Knowledge Panel & Knowledge Card

Feature Description Obtainability
Knowledge Panel Entity info (brand, person, place) in SERP WikiData, partnerships; most sites cannot directly obtain
Knowledge Card Top-of-SERP semantic answer Same as Knowledge Panel

Actions (limited control):

  • Claim: Google Business Profile; suggest updates when available
  • Consistency: Same brand name, description, logo across all platforms
  • Entity Home: Authoritative About page as primary reference
  • WikiData / Wikipedia: Can support Knowledge Panel generation

See serp-features for Knowledge Panel in SERP context; multi-domain-brand-seo for Hub-Spoke entity consistency.

Entity & Multi-Domain / Brand

When using multiple domains (Hub-Spoke):

  • Consistency: Same brand name, description, logo across Hub and Spoke
  • Entity Home: Authoritative About page on Hub as primary reference
  • Schema: Organization with subOrganization for related entities
  • Entity confusion: Avoid legacy brands, sub-brands, directories diluting brand perception

See multi-domain-brand-seo for full strategy.

GEO & AI Citation

Entity signals strengthen GEO citation:

  • Direct-answer format + entity signals = clearer AI extraction
  • Citable paragraphs with clear brand/product/author identity
  • Distribution: Website, YouTube, forums, Reddit—consistent entity identity across platforms

See generative-engine-optimization for full GEO strategy.

Output Format

  • Entity audit (brand, product, author identity gaps)
  • Schema (Organization, Person; @id placement)
  • Consistency checklist (name, logo, description across touchpoints)
  • Knowledge Panel (claim if eligible; suggest updates)

Related Skills

  • schema-markup: Organization, Person; @id for entity linking
  • eeat-signals: E-E-A-T; author bio; Person schema
  • generative-engine-optimization: GEO; entity signals for AI citation
  • serp-features: Knowledge Panel, Knowledge Card; SERP context
  • multi-domain-brand-seo: Entity & Knowledge Panel; Hub-Spoke consistency
  • about-page-generator: Entity Home; authoritative brand reference
用于创建、优化或审核FAQ页面内容,提升SEO转化及富媒体结果。覆盖PAA、精选摘要、GEO等场景,整合真实用户问题与结构化数据策略,支持独立页面或内嵌模块的布局规划。
用户希望创建或优化FAQ页面内容 提及FAQ页面、常见问题、帮助页、Q&A页 涉及FAQ Schema、常见问答、SEO优化 提到手风琴式FAQ、People Also Ask (PAA) 或 PASF
skills/kostja94_marketing-skills/faq/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill faq-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "faq-page-generator",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to create, optimize, or audit FAQ page content. Also use when the user mentions \"FAQ page,\" \"frequently asked questions,\" \"help page,\" \"Q&A page,\" \"FAQ schema,\" \"FAQ section,\" \"common questions,\" \"FAQ SEO,\" \"accordion FAQ,\" \"People Also Ask,\" \"PAA,\" \"People Also Search For,\" \"PASF,\" or \"FAQ rich results.\" For FAQ structured data markup, use schema-markup. For AI search visibility strategy, use generative-engine-optimization."
}

Pages: FAQ

Guides FAQ page content, structure, and optimization for SEO, conversion, and rich results (PAA, Featured Snippet, GEO, PASF). FAQ content from real user questions and rich-result targeting.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

FAQ and Rich Results

Feature Relationship Optimization
People Also Ask (PAA) FAQ schema triggers PAA-style dropdowns; PAA questions = FAQ source FAQPage schema; match question phrasing; "how/what/why" format. PAA ~51% of searches. See serp-features
Featured Snippet Answers extracted for position zero 40-60 words; answer-first; H2/H3; paragraph (70%), list (19%), table (6%). See featured-snippet
GEO / AI Overviews AI cites FAQ blocks; FAQ most cited content type (3-7x more citations) Self-contained; 40-80 words; entity signals; content in initial HTML. See geo
People Also Search For (PASF) Appears when user bounces; comprehensive FAQ reduces bounce Match intent; cover related questions. PASF shows 6-8 related queries.
FAQ rich result FAQPage schema; max 2 dropdowns per SERP Restricted to government/health in many regions; schema still helps PAA, voice, AI

PAA vs PASF: PAA = expandable question boxes (same SERP). PASF = related queries after bounce. Both benefit from comprehensive, intent-matching content.

Content Sources

Real user: Support tickets, chat logs, sales objections, surveys, reviews.

Rich-result purpose: PAA (search keyword, extract questions), AnswerThePublic, AlsoAsked, Featured Snippet queries, competitor FAQ, keyword research, GEO citation data.

Reverse flow: Use PAA, Featured Snippet, GSC Search queries to find questions you rank for but don't answer.

Content Structure

Approach When Example
Page topic In-page section 3-8 questions about that page
Theme Dedicated page Group by Billing, Features, Support, Compliance
Logical flow Decision funnel Awareness -> Consideration -> Purchase -> Support
Objection handling Conversion "Is it worth it?" "Can I cancel?"

Page-specific: LP (objection handling); pricing (billing, plans, enterprise); alternatives (migration, comparison); category (materials, recommendations); tools (what is X, how calculated). See landing-page-generator, pricing-page-generator, alternatives-page-generator, category-pages, tools-page-generator.

Dedicated FAQ Page vs In-Page FAQ Section

Dimension Dedicated Page In-Page Section
Placement /faq, /help, standalone URL Within LP, pricing, blog, product page
Count 5-30 (5-10 optimal) 3-8
Structure Categories, TOC, navigation Inline; after main content
Schema One FAQPage per page Same; schema matches visible Q&A
When to use Many questions; support/help hub; central FAQ Objection handling; page-specific long-tail; conversion
Related pages contact-page, docs-page, website-structure landing-page, pricing-page, blog, alternatives, category-pages, tools-page

Shared rules: Word count, content rules, format, and schema apply to both. Choose placement based on question volume and page purpose.

Accordion: Crawlable?

Yes. Google indexes accordion content fully; hidden content receives full weight.

Requirements: Content in DOM at load (no AJAX on click); use <details>/<summary> or server-rendered HTML; first item expanded. Avoid display: none for primary content. See tab-accordion, rendering-strategies.

Nuance: Some tests suggest visible content outperforms hidden. Use accordion for secondary FAQ; keep primary Q&A visible.

Best Practices

Word Count

Element Range Notes
Answer 40-80 words Sweet spot for AI; under 40 = incomplete; over 80 = cut off
Featured Snippet 40-60 words 45 words most common
First sentence 40-50 words Answer immediately
Sentences 2-4 Standalone, comprehensive

Content Rules

  • Genuine questions: PAA, AnswerThePublic, support; no invented marketing questions
  • Standalone answers: Each answer makes sense alone; AI extracts individual pairs
  • Content parity: Schema must exactly match visible content; hidden schema = violation
  • No duplicates: Each Q&A on one page; choose most authoritative
  • Topical focus: FAQs match page topic
  • Inverted pyramid: Most important first; data, numbers, actionable advice
  • Keywords: 1-2 times naturally; no stuffing
  • Quality over quantity: 5-10 excellent beat 50 thin
  • Update quarterly: Add questions from emerging trends

Format

  • Schema: JSON-LD; one FAQPage per page
  • Answer HTML (in schema text): <a>, <strong>, <em>, <p>, <br>, <ol>; use sparingly
  • Structure: H2/H3 per question; semantic HTML; answer-first under heading
  • Validation: Google Rich Results Test, Schema.org Validator, GSC

Number of Questions

Placement Count Notes
In-page section 3-8 Directly related to page
Dedicated page 5-10 optimal 10-30 if well-crafted; quality over quantity
Schema minimum 2+ Single Q&A rarely shown
Google display Max 2 per result See serp-features

Question and Answer

Question: Match how users ask ("How do I return?" not "Return Policy"); target "how/what/why"; H2/H3; avoid promotional or invented.

Answer: Answer-first in 40-60 words; paragraph, list, or table by content type; scannable (bullets, bold); self-contained; entity signals. See entity-seo.

Organization

Group by topic; clear hierarchy; TOC, accordions, jump links; audit quarterly.

Initial Assessment

Check project context (.cursor/project-context.md or .claude/project-context.md) for objections, product details, customer language.

Identify: (1) Source of questions (2) Conversion focus (3) Placement (dedicated vs in-page).

Why It Matters

  • Reduces support load
  • Long-tail and voice search
  • Category pages: +157% conversion when FAQ used
  • 20-30% CTR lift when rich results display
  • 3-7x more AI citations with optimized FAQ

Output Format

  • Question list (from research)
  • Category structure
  • Answer format and tone
  • Schema (FAQPage)
  • SEO metadata

Related Skills

  • howto-section-generator: Step-by-step HowTo sections; not FAQ—use HowTo schema, not FAQPage
  • tab-accordion: Accordion implementation; details/summary
  • serp-features: PAA, Featured Snippet, PASF, FAQ limits
  • featured-snippet: Answer length, position zero
  • geo: GEO strategy; citable blocks; AI crawlers
  • schema-markup: FAQPage implementation
  • keyword-research: PAA to FAQ; question keywords
  • landing-page-generator, pricing-page-generator, alternatives-page-generator, category-pages, tools-page-generator: In-page FAQ section
  • contact-page-generator, docs-page-generator, website-structure: Dedicated FAQ page; FAQ reduces contact form volume
  • title-tag, meta-description, page-metadata: Metadata
  • entity-seo: Entity signals for GEO
  • rendering-strategies: Content in initial HTML
指导Favicon和App图标的实现与优化,涵盖多端适配、尺寸格式规范及SEO要求。适用于涉及网站图标、PWA图标或品牌视觉一致性优化的场景。
用户需要生成或优化网站favicon 配置iOS/Android应用图标 调整PWA启动屏图标 修复浏览器标签页图标显示问题 优化Google搜索结果的站点图标展示
skills/kostja94_marketing-skills/favicon/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill favicon-generator -g -y
SKILL.md
Frontmatter
{
    "name": "favicon-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to implement, optimize, or audit favicon and app icons. Also use when the user mentions \"favicon,\" \"app icon,\" \"browser icon,\" \"touch icon,\" \"PWA icon,\" \"favicon sizes,\" \"apple-touch-icon,\" \"favicon.ico,\" \"site icon,\" or \"tab icon.\" For visual system, use brand-visual-generator."
}

Components: Favicon

Guides favicon and app icon implementation for brand consistency across browser tabs, bookmarks, mobile home screens, and Google Search results. Favicons help users identify sites; missing or incorrect icons hurt trust.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for brand and visual identity.

Identify:

  1. Tech stack: Next.js, WordPress, static HTML, etc.
  2. PWA: Is the site a PWA or planning to be?
  3. Existing assets: Logo, icon files

Required Sizes

Size Use
16x16 Browser tabs, standard displays
32x32 Retina/HiDPI browser tabs
180x180 Apple Touch Icon (iOS home screen); no transparency
192x192 Android Chrome home screen, PWA launcher
512x512 PWA splash screens, adaptive icons

Optional: 48x48, 96x96, 120x120, 152x152, 167x167, 256x256 for broader coverage.

Formats

Format Use
SVG Modern browsers; scalable; supports dark mode via media queries; lightweight
PNG High-DPI; explicit sizes; easy to generate; required for Apple Touch Icon
ICO Legacy; bundles multiple sizes; fallback for older browsers

Recommended: Provide SVG + PNG fallbacks. Never skip Apple Touch Icon (180x180); iOS shows a generic screenshot without it.

Google Search (SERP Display)

See serp-features for SERP feature types and optimization.

Favicons can appear in Google Search results next to your site's listings. Google Search Central requirements:

Requirement Guideline
Placement Add <link rel="icon" href="/path/to/favicon.ico"> to homepage header
One per hostname One favicon per hostname; example.com and code.example.com are separate; example.com/sub-site shares the same favicon
Crawlability Googlebot-Image must crawl favicon; Googlebot must crawl homepage; do not block either in robots.txt
Shape Square (1:1 aspect ratio); minimum 8x8px; preferably >48x48px for quality across platforms
Stable URL Do not change favicon URL frequently
Appropriate No inappropriate content (pornography, hate symbols); Google may replace with default icon
Timing Crawling can take days to weeks; use Search Console URL Inspection to request indexing

Supported rel values: icon, shortcut icon, apple-touch-icon, apple-touch-icon-precomposed. href can be relative (/favicon.ico) or absolute; favicon can be hosted on CDN.

Implementation

HTML Link Tags

<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" href="/icon.svg" type="image/svg+xml">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">

Next.js

Place in /app: favicon.ico, icon.png, apple-icon.png. Next.js auto-generates tags.

PWA Manifest

Include icons array in manifest.json with 192x192 and 512x512 for maskable icons.

Best Practices

  • Simplicity: At 16x16, complex details are illegible; use simplified logo mark; design for brand recognition in SERPs
  • Consistency: Favicon should match logo/brand (logo-generator, brand-visual-generator)
  • Cache: Use long cache; version for updates (e.g. /favicon.ico?v=2)
  • Tools: RealFaviconGenerator, favicon.io, or favicons npm package for automation
  • Test: Check across browsers, dark mode, and Search Console (favicon may take days to weeks to appear)

Output Format

  • Size checklist (16, 32, 180, 192, 512; >48x48 for Google Search)
  • Format recommendations (SVG, PNG, ICO)
  • Implementation notes per tech stack (homepage header placement)
  • Google Search checklist (crawlability, stable URL, appropriate content)
  • Manifest (if PWA)

Related Skills

  • logo-generator: Favicon typically derived from logo; consistent branding
  • media-kit-page-generator: Media kit should include favicon or link to brand assets
  • brand-visual-generator: Visual identity; favicon aligns with brand colors and mark
  • indexing: Favicon requires crawlable homepage; URL Inspection for indexing
用于创建、优化或审核产品功能页内容,涵盖结构规划、利益点文案撰写及SEO优化。通过区分功能与用例页面避免内容重复,提升转化率。
用户希望创建或优化功能页面内容 提及'features page'、'product features'、'capabilities'、'feature list'等关键词
skills/kostja94_marketing-skills/features/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill features-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "features-page-generator",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to create, optimize, or audit features page content. Also use when the user mentions \"features page,\" \"product features,\" \"capabilities,\" \"what it does,\" \"feature list,\" \"feature comparison,\" \"product capabilities,\" or \"features section.\" For sitewide page planning, use website-structure."
}

Pages: Features

Guides features page content, structure, and conversion optimization.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, differentiation, and proof points.

Identify:

  1. Feature set: Core features, differentiators
  2. Audience: Who evaluates features (buyer persona)
  3. Format: Single page vs. per-feature pages
  4. Primary goal: Demo, sign up, learn more

Features Page Structure

Section Purpose
Headline Benefit-led; "Everything you need to..."
Feature grid/list Each feature: name, benefit, optional screenshot
Use case links "For marketers," "For developers"
Social proof Testimonials, logos
CTA Try free, see demo, contact

Best Practices

Benefit-First

  • Lead with benefit: "Save 10 hours/week" not "Automated reporting"
  • Customer outcome: What they get, not what it does
  • Specificity: Numbers, examples, not vague claims

Organization

  • By capability: Group by product area or capability (e.g., Analytics, Automation, Integrations) — avoid organizing by use case to prevent overlap with use cases pages
  • By priority: Most important/differentiating first
  • By journey: Discovery -> evaluation -> decision

Per-Feature Pages

  • Use when features are substantial or rank separately
  • Each page: feature name, benefit, how it works, proof
  • Internal link from main features page

SEO

  • Title: "Features | [Product]" or "[Feature] | [Product]"
  • H1: Main value; H2 per feature or section
  • Schema: SoftwareApplication if applicable
  • Internal links: To pricing, use cases, blog

Avoid Overlap with Use Cases

  • Features = What: Capability + benefit; no scenario narratives. Do not write "When you need to X..." — that belongs on use cases pages.
  • Link, don't duplicate: Use "Use case links" (e.g., "For marketers," "For developers") to send users to use cases pages; do not replicate scenario content.
  • Content cannibalization: Both target Commercial/Consideration; differentiate by angle (capability vs scenario) so each page serves unique intent.

Output Format

  • Feature list with benefit-first copy
  • Structure (sections, order)
  • Headline options
  • Per-feature content (if separate pages)
  • SEO metadata and schema

vs. Tools

Page Purpose Monetization
Features Paid product capabilities; conversion Primary revenue
Tools Free utilities; lead gen; excerpt from product Not primary; drives signups

See tools-page-generator for free tools pages.

Related Skills

  • card: Feature card structure; name, benefit, screenshot; grid/list layout
  • grid, list: Feature grid or list layout
  • tools-page-generator: Tools = free lead gen; features = paid capabilities; link from tools to product/features
  • use-cases-page-generator: Features = what it does; use cases = when/how to use it; link between; avoid duplicating scenario content on features page
  • landing-page-generator: Features content for product LP "Explain value" step; product LP links to features
  • url-slug-generator: URL slug for per-feature pages (e.g. /features/feature-name); 3-5 words
  • homepage-generator: Homepage links to features
  • pricing-page-generator: Features inform plan tiers
  • schema-markup: SoftwareApplication schema
  • heading-structure: Feature page heading structure
用于创建、优化或审计反馈与路线图页面。支持Canny等工具集成,涵盖页面结构规划、最佳实践(如低摩擦收集、状态透明)及SEO建议,旨在提升用户参与度与产品透明度。
创建反馈或路线图页面 优化现有反馈/路线图 审计反馈页面 提及'feedback page', 'roadmap', 'feature requests', 'vote on features', 'Canny', 'UserVoice', 'product feedback'
skills/kostja94_marketing-skills/feedback/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill feedback-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "feedback-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit a feedback or roadmap page. Also use when the user mentions \"feedback page,\" \"roadmap,\" \"feature requests,\" \"vote on features,\" \"Canny,\" \"UserVoice,\" or \"product feedback.\" For sitewide page planning, use website-structure."
}

Pages: Feedback / Roadmap

Guides feedback and roadmap pages that collect user input and communicate product direction. Often integrates with Canny, FeatureBase, UserVoice, or similar. Supports product-led growth and community engagement.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product and roadmap priorities.

Identify:

  1. Tool: Canny, FeatureBase, UserVoice, custom, or embedded form
  2. Scope: Feedback only, roadmap only, or both
  3. Primary goal: Collect requests, show transparency, build community
  4. Audience: Users, prospects, or both

Page Structure

Section Purpose
Headline "Share Your Ideas" or "Product Roadmap"
Value We listen; your input shapes the product
Feedback Form or embed; categories (feature, bug, other)
Roadmap In progress, planned, completed; or link to external board
Process How we prioritize; what happens after you submit
CTA Submit idea, vote, view roadmap

Best Practices

Feedback Collection

  • Low friction: Few fields; optional details
  • Categories: Feature request, Bug, General
  • Duplicate detection: "Similar ideas" to merge votes

Roadmap Display

  • Status: In progress, planned, completed
  • Transparency: Don't over-promise; "Exploring" vs "Committed"
  • Update regularly: Stale roadmap hurts trust

Integration

  • Embed: Canny, FeatureBase embed on your domain
  • Or link: /feedback → feedback.yourproduct.com
  • SEO: Often noindex for external boards; index if on your site

Output Format

  • Headline and value proposition
  • Page structure (feedback + roadmap sections)
  • Process copy (how we use feedback)
  • Integration notes (Canny, etc.)
  • SEO (index vs noindex)

Related Skills

  • docs-page-generator: Feedback process in docs
  • contact-page-generator: Alternative for simple feedback
  • changelog-page-generator: Completed roadmap items → changelog
用于生成、优化和审计Glossary(术语表)页面结构与内容,提升SEO效果。适用于创建术语定义页、处理行业词汇及优化内部链接策略,支持批量定义场景。
用户需要创建或优化术语表页面 提到glossary, definitions, terminology等关键词 涉及行业术语定义或词汇表SEO优化
skills/kostja94_marketing-skills/glossary/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill glossary-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "glossary-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit glossary page content and structure. Also use when the user mentions \"glossary,\" \"definitions,\" \"terminology,\" \"industry terms,\" \"glossary page,\" \"term definitions,\" \"vocabulary,\" \"glossary SEO,\" or \"definition page.\" For definitions at scale, use programmatic-seo."
}

Pages: Glossary

Guides glossary page structure, content, and internal linking for SEO.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for industry terms and customer language.

Identify:

  1. Domain: SEO, marketing, tech, industry-specific
  2. Audience: Beginners, practitioners, both
  3. Content volume: Number of terms

Best Practices

Structure

Element Purpose
Alphabetical index A-Z or by category
Term + definition Clear, concise explanation
Related terms Cross-links within glossary
Internal links Link to relevant blog/content
Search Help users find terms

Definition Quality

  • Clear: Jargon-free where possible
  • Concise: One paragraph typical
  • Context: How term is used in your domain
  • Examples: When helpful

Internal Linking Strategy

  • Anchor text: Descriptive, keyword-rich; avoid "click here"
  • Variation: Mix anchor phrases; don't repeat identical text
  • Placement: Higher on page = more valuable
  • Relevance: Link to most valuable next content
  • Avoid orphans: Ensure every term page has inbound links

SEO Benefits

  • Topic clusters: Glossary as hub; links to and from pillar content; see content-strategy
  • Long-tail: Definition queries, "what is X"
  • Crawlability: Reduces depth; distributes authority
  • User engagement: Helps users understand; keeps them on site

Maintenance

  • New terms: Add as content expands
  • Audit links: Periodically check internal links
  • Update: Keep definitions current

Output Format

  • Structure (index, layout)
  • Term template (definition format)
  • Internal linking plan
  • SEO metadata
  • Schema: DefinedTerm or similar if applicable

Related Skills

  • url-slug-generator: URL slug for glossary terms (e.g. /glossary/term-slug); 3-5 words
  • internal-links: Glossary is internal linking hub
  • content-strategy: Glossary supports content clusters
  • blog-page-generator: Link between glossary and blog
  • title-tag, meta-description, page-metadata: Glossary page metadata
指导Google Ads的搭建、优化与管理,涵盖PMF测试与转化驱动两种模式。提供账户结构建议、关键词策略(含竞品拦截)、广告类型选择及落地页优化指南,适用于SEM、PPC及Performance Max等场景。
用户提及Google Ads、PPC或SEM 需要设置或优化搜索/展示/YouTube广告 进行产品市场契合度(PMF)测试 询问关键词竞价或质量得分优化
skills/kostja94_marketing-skills/google-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill google-ads -g -y
SKILL.md
Frontmatter
{
    "name": "google-ads",
    "metadata": {
        "version": "1.4.1"
    },
    "description": "When the user wants to set up, optimize, or manage Google Ads campaigns. Also use when the user mentions \"Google Ads,\" \"Google Search Ads,\" \"PPC,\" \"SEM,\" \"PMF testing with ads,\" \"test product-market fit,\" \"Responsive Search Ads,\" \"RSA,\" \"Performance Max,\" \"Quality Score,\" \"keyword bidding,\" or \"Google Display\/YouTube ads.\" For paid mix, use paid-ads-strategy."
}

Paid Ads: Google Ads

Guides Google Ads setup, campaign structure, keyword targeting, and optimization. Google Ads excels at high-intent search traffic; use when people actively search for your solution.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Two Modes: PMF Testing vs Conversion-Driven

Mode When Budget Landing page Metrics
PMF testing Pre-PMF; validate idea before building $47–500; start small Simple LP: headline, benefits, problem solved, CTA ("Join Waitlist," "Get Early Access") CTR, sign-up rate, bounce rate; low CTR/high bounce = messaging/positioning issue
Conversion-driven PMF validated; commercialization Scale; ROAS target Full funnel; ad-to-page alignment ROAS, CAC, conversion rate

PMF testing: No full product needed. Build landing page with Unbounce, Carrd, or Webflow. Run ads to relevant search terms; measure clicks, engagement, signups. Test messaging (e.g., "Fastest App for Freelancers" vs "Simplest Time Tracker for Teams"), pricing (different price points in ads/LP), and audiences (keyword targeting, in-market). Allow 4–6 weeks for PMax learning phase. Use as learning tool, not just marketing channel.

Reference: Marketing Cactus – Using Google Ads to Test Product-Market Fit

Campaign Structure

Account
├── Campaign: Brand (Search)
├── Campaign: Non-Brand (Search)
├── Campaign: Competitor (Search) — optional; bid on competitor brand + "alternative"/"vs"
├── Campaign: Retargeting (Display)
└── Campaign: Performance Max

Competitor Brand Keywords

When: Bid on "[Competitor] alternative," "[Competitor] vs [You]" to intercept high-intent traffic. Google allows competitor terms as keywords; you cannot use competitor names in ad copy without permission.

Landing page: Use a dedicated landing page (comparison/alternatives page), not a blog article. Users searching competitor brands expect direct alternatives—a blog increases bounce; a comparison page matches intent and converts better. See alternatives-page-generator for structure.

Best practices:

  • Separate campaign; exact/phrase match; add your brand as negative
  • H1 mirrors search intent (e.g., "[Competitor] vs [You]")
  • Feature comparison table; one-line differentiator; strong CTA
  • Expect lower Quality Score, higher CPC than non-brand; optimize LP relevance

Naming: GOOG_[Objective]_[Audience]_[Offer]_[Date] (e.g., GOOG_Search_Brand_Demo_Ongoing)

Campaign Types

Type Best for
Search High-intent queries; keyword-targeted; landing page critical
Display Awareness; retargeting; broader reach
YouTube Video; awareness; consideration
Performance Max Automated; cross-channel; feed + search + display

Performance Max (PMax) Optimization

Learning period: Run at least 6 weeks for algorithm ramp-up. Works best as complement to Search, not replacement.

Asset groups: Organize by audience intent (e.g., high-intent searchers, cart abandoners, category researchers), not product category alone. Audience signals improve CPA and ROAS vs. no signals.

Asset requirements (per asset group):

  • ≥5 images (include 1200×1200)
  • ≥5 text assets (4 headlines, 5 descriptions)
  • Video when possible
  • Refresh creative regularly to maintain performance

Signals: Add remarketing lists and Customer Match to accelerate learning.

Weekly health check: Flag if brand terms >30% of conversions; unexpected geo conversions; any placement >15% of total spend; asset group performance below "Good."

Keyword Strategy

  • Brand: Protect brand terms; exclude from non-brand campaigns
  • Negative keywords: Build weekly; avoid irrelevant queries. Add support terms (login, forum, pricing, help) from keyword-research—these are existing customers, not prospects.
  • Match types: Broad (discovery) → Phrase → Exact (control)

Keyword sources: Use keyword-research for keyword list, clusters, and intent. Map each cluster to a dedicated landing page; relevance improves Quality Score and lowers CPC.

Quality Score Levers

Factor Action
Expected CTR Improve ad relevance; test headlines
Ad relevance Align ad copy to keyword intent
Landing page Ad-to-page alignment; fast load; mobile-friendly

Target: Quality Score ≥6; higher = lower CPC, better ad rank. Benchmark: Improving Quality Score from 5 to 7 can reduce CPC by 30–50%.

Bidding Strategy

Conversions/month Strategy
<30 Manual CPC (smart bidding needs volume to optimize)
30–50 Target CPA; minimum for effective smart bidding
50–100 Target CPA
100+ Target ROAS

Smart bidding: AI-powered bidding (Target CPA, Target ROAS) typically delivers better ROI than manual when conversion volume is sufficient; requires ≥30 conversions in 30 days to work effectively.

Tracking

  • Enhanced Conversions: Server-side signals for better attribution
  • Offline conversion imports: B2B; CRM → Google Ads
  • UTM: Consistent parameters for GA4 cross-check

Paid–Organic Cannibalization

When you rank organically (position 4+) for a keyword and also run PPC, paid ads can absorb clicks that would go to organic. Audit: Cross-reference GSC organic rankings with Search Terms report. If organic ranks well, test pausing PPC on those terms to free budget for higher-impact keywords.

Reference: Backlinko – SEO and PPC: 8 Smart Ways to Align

Pre-Launch Checklist

  • Conversion tracking tested with real conversion
  • Landing page loads <3s; mobile-friendly
  • UTM parameters working
  • Negative keyword list built (include support terms from keyword-research)
  • Budget set; targeting matches audience

Related Skills

  • pmf-strategy: PMF validation framework; when to use PMF testing vs conversion-driven
  • paid-ads-strategy: Channel selection; budget allocation; ad-to-page alignment; competitor brand bidding
  • alternatives-page-generator: Competitor brand keyword ads → dedicated LP (not blog); comparison page structure
  • keyword-research: Keyword list, clusters, intent; support terms for negative keywords; PPC data feeds back SEO priority
  • traffic-analysis: UTM for attribution; paid–organic cannibalization audit
  • landing-page-generator: LP structure for paid traffic; PAA → FAQ
  • analytics-tracking: Conversion tracking; ROAS measurement
指导等层级多列内容展示的网格布局设计。适用于产品、画廊等视觉内容的空间高效排列,涵盖CSS Grid实现、响应式断点设置及最佳实践,确保一致性与SEO友好。
用户想要设计或优化用于内容展示的网格布局 提到 grid layout, grid design, multi-column grid, CSS grid, responsive grid, card grid, product grid, feature grid
skills/kostja94_marketing-skills/grid/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill grid -g -y
SKILL.md
Frontmatter
{
    "name": "grid",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to design, optimize, or audit grid layouts for content display. Also use when the user mentions \"grid layout,\" \"grid design,\" \"multi-column grid,\" \"CSS grid,\" \"responsive grid,\" \"card grid,\" \"product grid,\" or \"feature grid.\" For cards layout, use card."
}

Components: Grid Layout

Guides grid layout design for equal-hierarchy, multi-column content display. Grids display multiple items with equal emphasis; space-efficient and scannable. Used for products, templates, tools, features, blog indexes, and galleries.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

When to Use Grid

Use grid when Use list when
Visual content (images, thumbnails) Text-heavy; scan by title
Equal emphasis across items Compact; many items; dense info
Products, templates, gallery, features Blog index, docs, search results
Browsing, discovery Reading, scanning

See list for list layout; card for card structure within grid.

Grid Structure

Element Purpose
Columns 1–4+ columns; adapt to viewport
Gap Consistent spacing between items
Items Equal or proportional sizing
Responsive 1 col mobile → 2–4 cols desktop

Implementation

  • CSS Grid: repeat(auto-fill, minmax(min, 1fr)) or repeat(auto-fit, minmax()) for fluid columns
  • Breakpoints: e.g., 1 col <768px; 2 cols 768–1024px; 3–4 cols >1024px
  • Consistency: Same padding, aspect ratios across items; see card for card structure

Best Practices

Principle Practice
Equal hierarchy Items compete equally; no single dominant item
Consistent sizing Same card/item dimensions in grid
Gap consistency Uniform gap (e.g., 16px, 24px)
No layout shift Reserve space for images; avoid CLS

Responsive

  • Mobile: Single column; full-width items
  • Tablet: 2 columns; touch targets ≥44×44px
  • Desktop: 3–4 columns; hover states OK

Infinite Scroll

If using infinite scroll with grid: crawlers cannot access content loaded on scroll. Provide paginated component pages for SEO-critical content. See site-crawlability for search-friendly implementation.

Related Skills

  • site-crawlability: Infinite scroll SEO; paginated component pages
  • card: Card structure within grid; product, template, tool cards
  • list: List layout vs grid; when to use each
  • masonry: Masonry for varying heights (Pinterest-style)
  • carousel: Carousel for slides/rotation; when grid is too dense
  • hero-generator: Hero above; grid below for content sections
  • products-page-generator: Product grid
  • template-page-generator: Template grid
  • features-page-generator: Feature grid
指导用户向xAI旗下的Grokipedia提交内容建议、编辑或纠错,利用其高权重提升GEO可见性与反向链接。适用于提及Grokipedia、AI百科引用或SEO优化的场景。
用户希望添加推荐、链接或内容到Grokipedia 用户提及Grokipedia、GEO wiki、AI encyclopedia 用户询问Grokipedia文章建议、引用、列表或优化 用户讨论GEO可见性或AI搜索引用
skills/kostja94_marketing-skills/grokipedia/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill grokipedia-recommendations -g -y
SKILL.md
Frontmatter
{
    "name": "grokipedia-recommendations",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to add recommendations, links, or content to Grokipedia. Also use when the user mentions \"Grokipedia,\" \"GEO wiki,\" \"AI encyclopedia,\" \"suggest Grokipedia article,\" \"Grokipedia citation,\" \"Grokipedia listing,\" \"AI search citation,\" \"GEO visibility,\" or \"Grokipedia optimization.\" For multi-platform parasite SEO strategy, use parasite-seo. For broad AI search visibility, use generative-engine-optimization."
}

Platforms: Grokipedia

Guides adding recommendations, links, or content to Grokipedia. Grokipedia is a high-authority platform for parasite SEO and GEO (AI citation visibility). See parasite-seo for parasite SEO strategy. Grokipedia is xAI's AI-generated encyclopedia; ChatGPT, Perplexity, and other AI tools cite it.

On each invocation: On first use in the conversation, output the complete response (Introduction, Importance, Methods, Rules, Avoid, Action). On subsequent use or when the user asks to skip (e.g., "just do it", "skip intro", "I already know"), go directly to Action.

Growth channel value: Grokipedia is worth investing in as a growth channel for GEO and backlinks. It is positioned as a potential future Wikipedia—Wikipedia's traffic and domain authority are well-established; Grokipedia, though newer, is already being cited by major AI products and its citation share is rising.

Scope

  • Suggest Article: Request new topics; Grok AI reviews and may create
  • Suggest Edit: Propose corrections or additions to existing articles
  • Report Error: Flag factual inaccuracies, outdated info, citation errors
  • Parasite SEO / GEO: Use Grokipedia's authority for backlinks and AI citation (see parasite-seo for strategy)

What Is Grokipedia

  • Platform: AI-generated online encyclopedia by xAI (Grok); launched October 2025
  • Content: ~6M+ articles; AI-generated, fact-checked by Grok; users cannot edit directly
  • GEO relevance: ChatGPT, Perplexity, Google AI Mode, AI Overviews, Gemini, Copilot cite Grokipedia for factual queries
  • Parasite SEO: High-authority domain; links from Grokipedia pass authority; content placement for distributed visibility (see parasite-seo)

Why It Matters (Citation Data)

Metric Note
ChatGPT citations ~263K responses cited Grokipedia from 13.6M prompts; ~95K individual pages. Wikipedia: 2.9M responses—quite a way off, but impressive for how new they are. (Source: SEO tools, Jan 2026)
Citation share trend ~0.01–0.02% of ChatGPT citations/day; steadily increasing since mid-Nov 2025
AI product adoption Spike in Google AI (Gemini, AI Overviews, AI Mode) and Copilot in Dec 2025; ChatGPT cites Grokipedia most
Use case Niche, obscure, highly specific factual queries; ChatGPT often features Grokipedia as one of the first sources cited

Bottom line: Grokipedia is still secondary to Wikipedia but growing. Early participation can capture future authority as AI citation becomes more central—similar to Wikipedia's dominance in traditional search.

How to Contribute

Prerequisites

  • Login required: Google, X, Apple, or email account
  • URL: grokipedia.com

Foundation for Promotion

The basis for Grokipedia promotion is an article published online that includes your product and can be crawled by Grok. Grok discovers sources via web search when creating or editing articles; if your page is not indexable or does not mention the topic, it will not be cited. Higher SEO ranking improves discoverability but is not required—Grok may still find and cite relevant content that ranks lower.

Suggest New Article

  1. Click bulb icon on homepage, or search for a topic and click "Request this article"
  2. Describe why Grokipedia should add the article
  3. Include aspects you want covered
  4. Status flow: Pending → In Progress → Processing → Created
  5. Grok reviews; no guaranteed approval; review typically within ~2 hours

Suggest Edit (Existing Articles)

  1. Highlight problematic or incomplete text
  2. Click "Suggest Edit" (pop-up form)
  3. Provide correction and supporting evidence (URLs, sources)
  4. Grok reviews; approved edits typically applied within ~2 hours

Report Error

Error type Examples
Factual inaccuracies Wrong dates, numbers, definitions
Outdated information Obsolete facts
Misleading context Framing issues
Citation errors Broken links, unsupported claims
Technical bugs Formatting, display

Grok Review Constraints

Grok AI evaluates all suggestions and is strict: it rejects promotional content and explicit third-party citation requests. Do not mention your brand or URL in Article Topic, Additional Details, Summary, or Edit content. The tactics below work by providing genuinely useful, factual content and letting Grok discover your source through "Add another source" (Suggest Edit) or web search (Suggest Article).


Two Tactics for GEO & Citation (Field-Tested)

Two practical ways to get Grokipedia to cite your content: Suggest Article (new topic) and Suggest Edit (existing page). Both can lead to backlinks and AI citation when done well.

When the user asks to promote a product/brand/topic: Output the full response per the Required Output Structure (Introduction, Importance, Methods, Rules, Avoid, Action)—do not output only the action.

Tactic 1: Suggest New Article —Induce Creation That Cites Your Content

Goal: Propose a topic so Grokipedia creates a new article; Grok will search for sources and may cite your page if it matches the query.

Critical rule: Do not include your URL in the suggestion. Grok flags direct URLs; use a "stealth" approach instead.

Field Best practice Why it works
Article Topic Specific, encyclopedic (e.g., "3D Model Generator," "Virtual Staging Software," "Marie Curie") Vague topics ("Technology") get rejected; precise topics pass AI validation and match Grokipedia's scope
Additional Details Describe what aspects to cover, why the topic matters, and specific areas of interest Grok uses this to shape the article and search for sources; your phrasing influences which queries it runs
Content strategy Rewrite your article's key concepts as neutral, factual "aspects to cover"—definitions, use cases, types, history Grok searches for these concepts; if your page ranks for them, it may be cited as a source

Tips for great suggestions (from Grokipedia guidelines):

  • Be specific about the topic or subject
  • Explain why this article would be valuable
  • Mention any specific areas of interest

Stealth approach —How to use your content without URLs:

  1. Extract from your article: definitions, categories, use cases, technical terms, examples.
  2. Turn them into "aspects to cover" and "areas of interest" in neutral, encyclopedic language.
  3. Example: If your article covers "AI-powered 3D model generation for e-commerce," suggest: "Cover types of 3D model generators (AI-based, photogrammetry, CAD), use cases in e-commerce and product visualization, and how they differ from traditional modeling."
  4. Grok will search for these terms; if your page is relevant and authoritative, it may be included as a source.

Example structure (desensitized):

Article Topic: [Specific topic, e.g., 3D Model Generator]
Additional Details: This topic is important because [reason]. Please cover: [definition], [types/categories], [use cases], [how it differs from X]. Specific areas of interest: [subtopics from your content, phrased neutrally].

Tactic 2: Suggest Edit —Enrich Existing Articles to Cite Your Content

Goal: Improve an existing Grokipedia page so Grok adopts your article as a supporting source.

Critical rule: Do not mention your brand or URL in Summary or Edit content. Add your URL only in "Add another source" alongside other authoritative sources.

Field Best practice Why it works
Summary Brief, factual (e.g., "Expanded Virtual Staging Methods section with additional techniques") Sounds like a normal correction; avoids promotional tone
Edit content Rich, creative, factually accurate—expand or replace the highlighted passage Grok prefers substantive edits; generic text is less likely to be accepted
Add another source Your URL + 1–2 other authoritative sources (industry reports, trade publications) Grok validates against sources; mixing your URL with established sources improves acceptance

Tips for Edit content:

  • Use double quotes for exact phrases you want to add or replace (helps with Ctrl+F when applying).
  • Expand thin sections (e.g., "showcase multiple style options") into fuller subsections (e.g., Virtual Staging Methods: furniture replacement, style variation, room redesign).
  • Keep tone neutral and encyclopedic; avoid marketing language.

Example (desensitized—expanding a thin "Virtual Staging Methods" section):

Field Example
Summary "Expanded Virtual Staging Methods with additional techniques and use cases"
Edit content "Virtual staging methods include furniture replacement, style variation (e.g., modern, traditional, minimalist), and full room redesign. This approach enhances client engagement by providing immersive previews of potential designs, enabling designers to "present multiple style options efficiently" and help clients visualize spaces before physical staging. Common techniques include AI-assisted furniture placement, material and color swapping, and virtual renovation overlays."
Add another source Your article URL + 1–2 authoritative sources (e.g., Forbes, TechCrunch, industry report)

Why this works: Grok needs verifiable sources. By adding substantive, well-sourced content and including your URL in "Add another source" with other credible links, you increase the chance Grok will adopt your page as a reference.

Reference Instances

Field-tested examples: a marketer's site was successfully cited as a source via Suggest Article and Suggest Edit. Products mentioned in the site's articles also appear in Grokipedia, enabling both backlinks and product visibility. Inspect these pages to see how content and sources are structured.

Type Example page
Suggest Edit AI browser
Suggest Article Accent conversion, AI Video Effects Tools, Creator contest, Lifetime deal, Creator programs in AI and SaaS marketing, Web Animation Libraries

Best Practices

Practice Purpose
Provide sources Citations improve approval; use authoritative URLs
Be factual Grok evaluates accuracy; avoid promotional language
Relevant links When suggesting additions, include your site only if genuinely relevant and cited
Topic alignment Request articles that fit encyclopedic scope; avoid pure product pages
Patience Review is AI-driven; typically within ~2 hours
No URL in Suggest Article Grok detects and may reject direct URLs; embed concepts as "aspects to cover" instead
Brand-free Summary/Edit For Suggest Edit, keep Summary and Edit content brand-neutral; add your URL only in "Add another source"

Parasite SEO & GEO Context

  • Parasite SEO: See parasite-seo for full strategy. Grokipedia fits Tier 6 (Wiki & Structured Knowledge) in distributed authority frameworks.
  • GEO: AI tools cite Grokipedia; having your brand, product, or expertise represented can influence AI-generated answers.
  • Risk: Google's Site Reputation Abuse policy (2024) targets manipulative third-party content. Ensure contributions are genuinely useful, not purely for link/mention manipulation.

Output Format

When this skill is invoked, always output a complete response covering all sections below. Do not output only the action—include introduction, importance, methods, rules, avoidances, and action.

Required Output Structure (in order)

  1. Introduction —What Grokipedia is: AI-generated encyclopedia by xAI (Grok), launched Oct 2025; ~6M+ articles; ChatGPT, Perplexity, Google AI Mode, Gemini, Copilot cite it; users suggest, Grok reviews; no direct editing.

  2. Foundation —Prerequisite: an article published online that includes the product and can be crawled by Grok; higher SEO ranking helps but is not required.

  3. Importance —Why it matters for GEO and parasite SEO (see parasite-seo): high-authority domain; backlinks pass authority; AI tools cite Grokipedia for factual queries; citation share rising; positioned as potential future Wikipedia; early participation captures future authority.

  4. Methods —Two ways to get cited:

    • Suggest Article: Propose new topic; Grok creates article and searches for sources; your page may be cited if it matches.
    • Suggest Edit: Enrich existing page; add your URL in "Add another source"; Grok may adopt it.
  5. Rules —Grok is strict; must follow:

    • No brand or URL in Article Topic, Additional Details, Summary, or Edit content.
    • Suggest Article: embed concepts as "aspects to cover"; Grok discovers via web search.
    • Suggest Edit: add your URL only in "Add another source" with 1–2 authoritative sources.
    • Be factual, neutral, encyclopedic; avoid promotional language.
  6. Avoid —Do not: include your URL in Suggest Article; mention brand in Summary or Edit content; use vague topics ("Technology"); write marketing copy; expect instant approval (review typically within ~2 hours).

  7. Action —Ready-to-use copy the user can paste into Grokipedia forms (per templates below). Generate both Suggest Article and Suggest Edit options when promoting a product/brand/topic.

Suggest Article —Output Template

--- Copy to Grokipedia Suggest Article form ---

**Article Topic:**
[Specific, encyclopedic topic, e.g., People search engine]

**Additional Details:**
[Explain importance, aspects to cover, specific areas of interest; no brand or URL; neutral encyclopedic tone]

--- Usage ---
1. Go to grokipedia.com and log in
2. Click the bulb icon or search and click "Request this article"
3. Paste the above into the corresponding fields
4. Ensure your article URL is published and content matches; Grok will search and may cite it

Suggest Edit —Output Template

--- Copy to Grokipedia Suggest Edit form ---

**Target page:** [Grokipedia page URL]

**Summary:**
[Brief, factual, e.g., "Expanded [section] with [topic]"]

**Edit content:**
[Rich, neutral, encyclopedic; use "double quotes" for exact phrases to add]

**Add another source:**
- [User's article URL]
- [1–2 authoritative sources, e.g., Forbes, TechCrunch, industry report]

--- Usage ---
1. Open the target Grokipedia page
2. Highlight the passage to modify or expand
3. Click "Suggest Edit" and paste the above into the corresponding fields

Required Output

  • Action: Suggest Article / Suggest Edit / Report Error
  • Ready-to-use copy: Complete, copyable copy per the templates above
  • Sources: User-provided URL (for Suggest Edit "Add another source" only)

References

Related Skills

  • parasite-seo: Parasite SEO strategy; Grokipedia as high-authority platform
  • github: GitHub as alternative high-authority platform; repos, awesome lists
  • generative-engine-optimization: GEO strategy, AI citation, distributed authority
  • link-building: Link acquisition; Grokipedia as potential citation source
  • directory-submission: Same output pattern—platform context first (Introduction, Importance, Methods, Rules, Avoid), then Action; directory submission for backlinks and human discovery; Grokipedia for AI citation—different placement, complementary
  • reddit-posts: Alternative high-authority platform for GEO
基于AARRR海盗指标框架,指导用户规划增长、诊断瓶颈及映射客户生命周期行动。适用于涉及获客、激活、留存、推荐和收入等增长策略的场景,帮助对齐产品与市场动作。
用户希望使用AARRR框架规划增长 需要诊断增长瓶颈 提及'growth funnel'或'AARRR' 提及'pirate metrics'(海盗指标) 涉及获客、激活、留存等客户生命周期指标分析
skills/kostja94_marketing-skills/growth-funnel/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill growth-funnel -g -y
SKILL.md
Frontmatter
{
    "name": "growth-funnel",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to plan growth using the AARRR framework, diagnose growth bottlenecks, or map actions across the customer lifecycle. Also use when the user mentions \"growth funnel,\" \"AARRR,\" \"pirate metrics,\" \"acquisition activation retention,\" \"customer lifecycle metrics,\" or \"growth framework.\" For retention tactics, use retention-strategy."
}

Strategies: Growth Funnel (AARRR)

Guides growth using the AARRR framework (Pirate Metrics)—five stages of the customer lifecycle. Created by Dave McClure (500 Startups) to focus on actionable metrics over vanity metrics. Use this skill when diagnosing growth bottlenecks, prioritizing improvements, or aligning product, marketing, and customer success.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

AARRR Framework

Stage Question Key metrics
Acquisition How do users discover you? CAC, CPA, conversion by source
Activation Do users reach "aha moment"? Activation rate, time-to-first-value
Retention Do users return? D1/D7/D30 retention, churn
Referral Do users recommend? Referral rate, NPS, viral coefficient
Revenue Do users pay? Conversion rate, ARPU, LTV

Principle: Define behavior-based events per stage; analyze by cohort. Quality over volume—channels bringing fewer but more activated users often outperform.

Per-Stage Actions

Stage Actions Related skills
Acquisition SEO, paid ads, content, partnerships, directories, marketplaces cold-start-strategy, seo-strategy, paid-ads-strategy, directory-submission, distribution-channels
Activation Onboarding, use-case guidance, FAQ, case studies, free trials, trust signals conversion-optimization, faq-page-generator, customer-stories-page-generator
Retention Support, churn analysis, feedback, loyalty, dunning retention-strategy, email-marketing
Referral Referral program, affiliate, case study sharing referral-program, affiliate-marketing
Revenue Pricing, conversion optimization, CAC vs LTV analysis pricing-strategy, conversion-optimization, paid-ads-strategy

Tactics by Stage

Stage Tactics
Acquisition Google ads (keywords, display); organic SEO; social (LinkedIn, YouTube, X, blog); partnerships (NGOs, SMBs); directories, marketplaces
Activation Use-case guidance; video + blog tutorials; FAQ; case studies; free trials/credits; new-feature promotion; email; trust signals (reviews, media)
Retention Timely support; churn analysis; feedback collection; loyalty perks (credits, early access)
Referral Referral credits; signup email with referral CTA; enterprise case sharing; affiliate program
Revenue Conversion optimization; platform attribution; CAC vs LTV; post-campaign traffic analysis

Post-campaign: Analyze traffic and conversion by channel; reallocate budget to top performers.

Implementation

  • Events: Define precise, behavior-based events for each stage
  • Cohorts: Analyze by cohort, not aggregate; compare cohorts over time
  • Bottlenecks: Identify stage with largest drop-off; prioritize there first
  • Cross-functional: Product, marketing, customer success share common language

Output Format

  • Stage assessment (where are you strong/weak?)
  • Metrics per stage (current, target)
  • Actions prioritized by bottleneck
  • Related skills for each stage

Related Skills

  • cold-start-strategy: Acquisition for 0→1; first users
  • retention-strategy: Retention and churn prevention
  • conversion-optimization: Activation, revenue conversion
  • referral-program: Referral stage tactics
  • gtm-strategy: Full GTM; growth-funnel is lifecycle view
  • integrated-marketing: Channel mix across stages
用于制定或优化产品上市(GTM)策略、新市场进入及重新定位。涵盖PLG/SLG等模式选择、90天执行框架及ICP定义,旨在对齐产研销服资源以提升市场成功率与收入增长。
用户计划 go-to-market strategy 或 GTM framework 涉及 market entry, repositioning, 或 new market 讨论 PLG, sales-led, product-led 等 GTM motion 需要定义 ICP 或 buyer persona
skills/kostja94_marketing-skills/gtm/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill gtm-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "gtm-strategy",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to plan go-to-market strategy, GTM framework, or market entry. Also use when the user mentions \"GTM,\" \"go-to-market,\" \"market entry,\" \"new market,\" \"repositioning,\" \"PLG,\" \"sales-led,\" \"product-led,\" \"marketing-led,\" \"ICP,\" \"buyer persona,\" \"GTM motion,\" or \"market expansion.\" For launch checklist, use product-launch."
}

Strategies: Go-to-Market

Guides go-to-market (GTM) strategy—the blueprint for launching or repositioning a product that aligns product, marketing, sales, and customer success around reaching and winning target customers. Organizations with a defined GTM process see ~10pp higher launch success rates (63% vs 53%) and ~3× median revenue growth. However, ~72% of sales reps miss quota, often due to execution gaps. Use this skill when planning GTM for product launch, new market entry, repositioning, or feature launch.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

GTM Scenarios

Scenario Scope Use
Product launch New product to market Full GTM; see product-launch for launch execution
New market entry New geography or segment Full GTM; different buying behaviors, competitors, regulations
Repositioning Shift who you serve, what you solve Messaging, ICP, channel alignment; not just rebrand
Feature launch New capability in existing product Tiered by impact; T1 (revenue) = full planning; T2/T3 = lighter

GTM vs product launch: GTM is the strategy; product launch is the execution phase. GTM applies to multiple scenarios—not just new products.

GTM Modes

Mode When to Use ACV Buyer
Product-led (PLG) Value in minutes; self-evaluate; simple adoption <$10K Buyer = end user
Sales-led (SLG) Multi-stakeholder; complex procurement; implementation >$25K Enterprise; negotiation
Marketing-led (MLG) Content, SEO, paid drive awareness; market education Varies Demand gen focus
Hybrid PLG for acquisition; sales for expansion Common Self-serve → sales handoff

Decision factors: ACV, product complexity, buyer profile, how customers want to buy. Target LTV:CAC ≥3:1; CAC payback <12 months.

90-Day Execution Framework

Phase Weeks Focus
Market analysis 1–3 Validate demand; competitive landscape; TAM; buying signals
Strategy design 4–6 ICP, personas; positioning; pricing; GTM mode; channels
Execution build 7–9 Messaging, content, sales playbook; tech stack
Launch & iterate 10–12 Go live; measure; iterate

Key: Connect plan to real buying activity within 90 days—not disconnected strategy documents.

ICP vs Buyer Persona

Type Level Defines
ICP Company Which organizations deliver best unit economics; firmographics (industry, size, revenue), technographics, problem intensity
Buyer persona Individual Decision-makers within target companies; roles, goals, pain points, objections, preferred channels

ICP impact: Companies with clearly defined ICPs see higher conversion rates and lower CAC. Include negative profiles (explicit disqualifiers) to protect pipeline quality.

Market Analysis

Element Purpose
TAM Total addressable market; named account lists; primary TAM, serviceable TAM, accounts with buying signals
Competitive landscape Customer bases, strengths, weaknesses, positioning claims
Buying patterns Replace assumptions with data; customer pain points; decision criteria

Enterprise / High-ACV Challenges

Challenge Mitigation
Customization Product modularity; professional services; clear scope
Data security / private deployment On-prem or private cloud; compliance; security certifications
Procurement cycles Multi-stakeholder alignment; champion building; long sales cycles
Buy vs SaaS Total cost of ownership; flexibility; ongoing value

Use: When GTM targets enterprise or high-ACV—expect longer cycles, procurement, and security requirements.

New Market Entry

~70% of international market entries fail within two years—often from overestimating demand, underestimating execution, spreading resources thin.

Entry model Trade-off
Organic expansion High control; slower; capital-intensive
Strategic partnerships Faster access; shared risk; reduced control
M&A / Acquisition Immediate presence; high integration risk
Asset-light (EOR, outsourcing) Fastest; minimal upfront; market testing
Pilot testing Lowest commitment; validation

Critical: Domestic playbook won't transfer. Buying behaviors vary (self-service US vs consultation-heavy Europe vs relationship-driven APAC); competitive landscapes shift; regulatory complexity multiplies (GDPR, data localization).

Repositioning

Repositioning = Strategic shift in who you serve, what problem you solve, where you play. Rebranding = Visual/verbal expression (logo, voice). Repositioning ≠ rebrand.

When to reposition Avoid
Moving upmarket (SMB → enterprise) Quick fix for missed quarters
New geography with different dynamics Leadership boredom
ICP fundamentally changed
Major pivot, launch, or acquisition

Success factors: Research-driven (customer discovery, market analysis); cross-functional alignment (sales, marketing, product, clinical); sharp differentiation.

Cross-Functional Alignment

  • RACI: Responsible, Accountable, Consulted, Informed—clarify roles across teams
  • Shared timelines, tools, accountability
  • Consistent messaging across all channels

Output Format

  • Scenario (product launch, new market, repositioning, feature)
  • GTM mode (PLG/SLG/MLG/Hybrid) recommendation
  • 90-day phase plan
  • ICP and persona (or link to project-context)
  • Market analysis checklist
  • Launch execution → see product-launch

Related Skills

  • product-launch: Launch execution; channels, timeline, checklist; implements GTM for product launch
  • pmf-strategy: Validate PMF before scaling GTM
  • cold-start-strategy: First users; differs from full GTM (0→1 vs commercialization)
  • rebranding-strategy: Domain change, 301, announcement; when repositioning includes rebrand
  • localization-strategy: New market entry; i18n, multilingual
  • paid-ads-strategy: Ad channel for GTM
  • website-structure: Pages needed for GTM
  • branding: Positioning, differentiation; GTM messaging foundation
用于优化H1-H6标题层级结构,修复逻辑跳跃、多H1等问题,提升SEO与内容可读性。适用于提及heading、H1、标题层级等场景。
用户希望优化标题结构(H1-H6) 修复标题层级混乱 改进内容结构 提到 H1, heading, heading hierarchy, content structure, H2, H3, heading tags, heading SEO, multiple H1, heading structure
skills/kostja94_marketing-skills/heading/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill heading-structure -g -y
SKILL.md
Frontmatter
{
    "name": "heading-structure",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to optimize heading structure (H1-H6), fix heading hierarchy, or improve content structure. Also use when the user mentions \"H1,\" \"heading,\" \"heading hierarchy,\" \"content structure,\" \"H2,\" \"H3,\" \"heading tags,\" \"heading SEO,\" \"multiple H1,\" or \"heading structure.\" For SEO workflow, use seo-strategy."
}

SEO On-Page: Heading Structure

Guides heading (H1-H6) optimization for SEO and content structure.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (On-Page SEO)

  • H1 tag: One per page; clear headline; matches content; primary keyword near start
  • Header tags (H1-H6): Logical hierarchy; keyword in headers; one idea per heading

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for target keywords.

Identify:

  1. Page type: Homepage, article, product, etc.
  2. Primary keyword: Target search query
  3. Content outline: Main sections and subsections

Best Practices

H1

Principle Guideline
One per page Single H1 per page
Primary keyword Include target keyword naturally
Descriptive Clearly describe page content
Match intent Align with title tag and user intent

H2-H6 Hierarchy

Principle Guideline
Logical order H1 -> H2 -> H3; don't skip levels
One idea per heading Each heading = one topic
Scannable Headings should summarize section content
Keyword variation Use related keywords in subheadings

Structure

H1 (page title)
-> H2 (section 1)
   -> H3 (subsection)
   -> H3
-> H2 (section 2)
   -> H3
-> H2 (section 3)

Common Issues

Issue Fix
Multiple H1s Use single H1; use H2 for other sections
Skipped levels Use H2 after H1, H3 after H2
Generic headings Make descriptive; avoid "Introduction," "Conclusion"
Keyword stuffing Natural language; avoid forced keywords

Output Format

  • H1 recommendation (with keyword)
  • H2-H6 outline for content
  • Hierarchy check
  • References: Google headings

Related Skills

  • featured-snippet: H2/H3 for snippet extraction; semantic HTML for list/table snippets
  • page-metadata: Hreflang, meta robots; metadata complements heading structure
  • content-optimization: H2 keyword placement, quantity, tables, lists; complements heading structure
  • article-page-generator: Article page H1-H3 structure, intro/body/conclusion
  • title-tag: H1 should align with title tag
  • schema-markup: Article schema uses headline (often H1)
  • content-strategy: Content outline informs headings
用于设计、优化或审计Hero区域(首屏)的指南。涵盖标题、副标题、CTA及视觉元素,提供多种布局与对齐方案,遵循3秒法则以提升转化率。适用于首页、落地页等场景。
用户提到 'hero', 'hero section', 'hero area' 等相关术语 用户希望设计或优化首屏视觉区域 用户询问关于 'above the fold' 或 'landing hero' 的内容
skills/kostja94_marketing-skills/hero/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill hero-generator -g -y
SKILL.md
Frontmatter
{
    "name": "hero-generator",
    "metadata": {
        "version": "1.2.1"
    },
    "description": "When the user wants to design, optimize, or audit hero sections (above-the-fold main visual area). Also use when the user mentions \"hero,\" \"hero section,\" \"hero area,\" \"above the fold,\" \"above the fold content,\" \"landing hero,\" \"main banner,\" \"banner section,\" \"first fold,\" \"hero section design,\" \"hero conversion,\" \"split layout hero,\" \"centered hero,\" or \"hero alignment.\" For homepage, use homepage-generator."
}

Components: Hero Section

Guides hero section design for conversion and first impressions. The hero is where users spend ~80% of initial viewing time; first impressions form in milliseconds.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for value proposition, audience, and Section 12 (Visual Identity).

Identify:

  1. Page type: Homepage, landing, product, pricing
  2. Primary goal: Signup, trial, purchase, learn more
  3. Platform: Web, mobile, both

Core Components (Four Essentials)

  • Headline (H1): 6–10 words max; instantly communicate core value and benefit. Answer "What's in it for me?" within seconds.
  • Subheading: Clear, concise explanation reinforcing why the product/service is valuable.
  • Primary CTA: Single, prominent action button visible without scrolling. One per hero to avoid choice overload.
  • Visual: High-quality image, video, or animation that amplifies the message.

Optional but Effective

  • Trust cues: 1–3 elements (reviews, logos, statistics)
  • Secondary CTA: For users not ready for primary action

Layout Types

Hero is a Spotlight layout—single focus, primary element with secondary around it. Choose layout by content balance and conversion goal.

Layout Structure Best for
Split (50/50) Text left, visual right (or vice versa); equal weight Product, SaaS; clear value + demo
Split (75/25) Text dominant; smaller image column Copy-heavy; trust-first
Split (25/75 "Signpost") Small image beside primary content Minimal visual; emphasis on headline
Centered Text + CTA centered; visual full-width or stacked Brand, landing; single CTA
Full-width image Image background; overlay text Emotional; lifestyle, brand

Responsive: Split layouts stack vertically on mobile (text above image); centered maintains center. Mobile-first; ensure CTA above fold on small screens.

Alignment

Axis Options Use
Horizontal Left, center, right Left align for text-heavy; center for minimal
Vertical Top, center, bottom Center for full-viewport hero; top for short hero

Best Practices

3-Second Rule

The hero must answer three questions within 3 seconds: What is this? Why should I care? What should I do next? ~80% of users never scroll beyond the hero; make an immediate impact.

Messaging

  • No guessing required; message must be instantly clear.
  • Single primary CTA to avoid choice overload.
  • Action-oriented, benefit-focused copy.
  • Emotional intent first: Evoke emotion (trust, excitement, confidence) before users read the headline. Avoid generic phrases ("Welcome to Our Website") or overly clever wordplay.

Visuals

  • Fast-loading; avoid heavy assets that delay LCP
  • Brand-aligned; use typography and colors from brand-visual-generator
  • Support the message; don't distract
  • Frontend aesthetics: For motion (staggered reveals, hover), spatial composition, and backgrounds—see brand-visual-generator Frontend Aesthetics

Technical

  • Mobile-first design
  • Lightweight for quick loading
  • Ensure LCP (Largest Contentful Paint) optimization

SEO Considerations

  • Headline often contains <h1>; include primary keyword
  • Hero content in initial HTML; avoid JS-only rendering. See rendering-strategies
  • Image optimization: Alt text, format (WebP), LCP, responsive—see image-optimization

UX Guidelines

Hierarchy

  • Headline > Subheading > CTA
  • Visual should complement, not compete with, text

Accessibility

Requirement Practice
Contrast Text over images: >=4.5:1; use overlay if needed
Touch targets CTA >=44x44px
Keyboard CTA keyboard-accessible; visible focus indicator
Screen readers Proper heading order; image alt text; aria-label for icon-only buttons
Reduced motion Respect prefers-reduced-motion for animations
Interaction CTA has cursor-pointer; hover uses color/opacity (not scale) to avoid layout shift

Testing

  • A/B test headline, CTA copy, and visuals
  • Measure bounce rate, conversion rate, time to first interaction

Output Format

  • Hero structure (headline, subheading, CTA, visual)
  • Copy suggestions
  • Technical checklist (LCP, accessibility, image optimization)
  • Testing recommendations

Related Skills

  • card: Hero vs card—hero is single above-fold; cards are repeated units in grid
  • grid: Hero is one section; content below often uses grid (products, features)
  • cta-generator: Hero typically contains primary CTA
  • trust-badges-generator: Trust cues in hero
  • logo-generator: Logo appears in hero context
  • brand-visual-generator: Typography, colors, spacing for hero design
  • homepage-generator: Hero is central to homepage design
  • landing-page-generator: Hero is step 1 of landing page flow; campaign pages
  • image-optimization: Hero image optimization (alt, WebP, LCP, responsive)
  • rendering-strategies: Content in initial HTML; SSR/SSG for hero
用于创建、优化或审计网站主首页的 Skill。涵盖内容结构、转化优化及品牌展示,适用于首次访问者信任建立与SEO排名,区分于广告落地页。
用户希望创建或优化主站点首页 提及 homepage, main page, hero section, above the fold, home page design, homepage conversion, homepage structure
skills/kostja94_marketing-skills/home/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill homepage-generator -g -y
SKILL.md
Frontmatter
{
    "name": "homepage-generator",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to create, optimize, or audit the main site homepage (primary entry page). Also use when the user mentions \"homepage,\" \"main page,\" \"home page,\" \"hero section,\" \"above the fold,\" \"home page design,\" \"homepage conversion,\" or \"homepage structure.\" Not for paid campaign or ad landing pages—use landing-page-generator. For sitewide page planning, use website-structure."
}

Pages: Homepage

Guides homepage content, structure, and conversion optimization.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Homepage Role & Purpose

Role Priority Notes
Conversion Primary Homepage is a trust machine and conversion engine—not a sales pitch. Most visitors (70–80%) are first-time; they need clarity, credibility, and orientation within 3–5 seconds. Convert through trust-building and guided exploration, not aggressive selling.
Brand Primary First impression, credibility test, orientation center. Answers: Who are you? What do you offer? Why should I care? Brand voice and differentiation live here—see branding.
Branded keywords SEO Required Primary SEO goal: rank for brand name so people can find you in SERPs. Branded searches indicate high intent and familiarity; they convert better than non-branded.
Broad/non-branded SEO Secondary Homepage is not the main SEO traffic driver—blog, product pages, and category pages typically carry that. A well-optimized homepage can rank for related non-branded terms as a bonus; do not sacrifice UX or conversion for broad keyword stuffing.

Principle: SEO and CRO work together. Good homepage SEO aligns with user needs; conversion optimization ensures attracted traffic converts. See landing-page-generator for single-goal campaign pages (homepage is multi-purpose).

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and value proposition. See branding for brand strategy, positioning, differentiation.

Identify:

  1. Primary goal: Sign up, demo, purchase, learn more
  2. Audience: Cold visitors, returning, specific segment
  3. Traffic source: Organic, paid, referral

Homepage Structure

Section Purpose
Hero Value proposition, primary CTA, above the fold
Social proof Logos, testimonials, metrics; "As Seen In" (press coverage) when applicable; see customer-stories-page-generator for case study snippets
Features/Benefits What it does, why it matters
Use cases Who it's for, how they use it
Objection handling FAQ, guarantees, comparisons
Final CTA Repeat primary action

Common Modules (from website-structure)

Combine as needed: Headline, Subheadline, Primary CTA, Supporting Image/Demo, Benefits Section, Social Proof, Search Box (if applicable), Secondary CTA, Banner. Navigation: Horizontal Bar, Dropdown, Hamburger (mobile), Sidebar, Footer; ensure Desktop + Mobile parity. See hero-generator for hero design.

Best Practices

Value Proposition

  • Clarity: Visitor understands in 5 seconds
  • Specificity: Concrete benefit, not vague
  • Differentiation: Why you, not alternatives — see branding for positioning framework
  • Customer language: Their words, not jargon
  • Avoid "not speaking human": Don't over-emphasize brand with vague definitions; communicate in user-friendly ways—if someone searches "AI presentation maker," the answer should be obvious from your headline

CTA

  • One clear primary action (avoid decision paralysis)
  • Button copy: value-focused ("Start Free Trial") not generic ("Submit")
  • Visible without scrolling
  • Repeated at logical points

Conversion Checklist

  • Clear value proposition above the fold
  • Single primary CTA; simplified navigation (5–7 menu items)
  • Immediate social proof (reviews, trust badges, media logos)
  • Mobile-first, fast-loading design

Visual & Aesthetics

  • Frontend aesthetics: For distinctive typography, motion, spatial composition, backgrounds—see brand-visual-generator Frontend Aesthetics

SEO

Branded keywords first: Title and meta should include brand name; ensure homepage ranks for "[Brand Name]" so users can find the official site. See brand-protection when impersonation risk exists—place "Official website: [domain]" above fold or in hero.

  • Title tag (50–60 chars): Brand name + primary keyword; e.g. "Canva – Free Website Builder"
  • Meta description (150–160 chars): CTA + secondary keywords; engaging to encourage clicks
  • H1: Value proposition or primary headline; one per page; include primary keyword naturally
  • Body: Primary keyword in first 100 words; secondary keywords in H2–H6 and body
  • Logical H2–H6 structure for scannability and LLM/AI Overview visibility

Schema: Add Organization + WebSite JSON-LD on homepage (or in root layout for site-wide). Organization establishes brand entity; WebSite enables sitelinks searchbox. Do not put Organization only on About page—About uses AboutPage schema. See schema-markup, entity-seo.

Output Format

  • Structure outline (sections)
  • Hero copy options (headline, subheadline, CTA)
  • Key sections content suggestions
  • SEO metadata (title, description, H1)
  • Conversion checklist

Related Skills

  • branding: Brand strategy, value prop, differentiation; homepage implements brand voice
  • brand-protection: "Official website" placement when impersonation risk exists
  • landing-page-generator: For single-goal campaign pages (affiliate signup, lead capture); homepage is multi-purpose
  • pricing-page-generator: Homepage often links to pricing
  • features-page-generator: Features section or link to features page
  • press-coverage-page-generator: "As Seen In" section (logo strip) when coverage exists; full page links from homepage
  • customer-stories-page-generator: Testimonials, case study snippets for social proof section
  • schema-markup, entity-seo: Organization + WebSite schema placement (homepage or root layout)
  • title-tag, meta-description, page-metadata, open-graph, twitter-cards: Homepage metadata and social previews
  • heading-structure: Homepage heading structure
指导图片SEO优化,涵盖发现索引、格式性能及元数据。适用于WebP、懒加载、LCP、alt文本等场景,提升搜索可见性与核心网页指标。
image SEO alt text image optimization WebP lazy loading LCP responsive images
skills/kostja94_marketing-skills/image-optimization/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill image-optimization -g -y
SKILL.md
Frontmatter
{
    "name": "image-optimization",
    "metadata": {
        "version": "1.2.1"
    },
    "description": "When the user wants to optimize images for search engines and performance. Also use when the user mentions \"image SEO,\" \"alt text,\" \"image captions,\" \"figcaption,\" \"image optimization,\" \"WebP,\" \"lazy loading,\" \"LCP,\" \"image sitemap,\" \"responsive images,\" \"srcset,\" \"image format,\" or \"hero image optimization.\" For CWV, use core-web-vitals."
}

SEO On-Page: Image Optimization

Guides image optimization for Google Search (text results, Image Pack, Google Images, Discover), Core Web Vitals (LCP), and accessibility. Consolidates image-related best practices from components (hero, trust-badges) and pages (landing-page). References: Google Image SEO, Semrush Image SEO.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Discovery & indexing: HTML img elements, image sitemap
  • Format & performance: WebP, responsive images, lazy loading, LCP; full CWV optimization in core-web-vitals
  • Metadata: Alt text, file names, captions
  • Preferred image: primaryImageOfPage, og:image; thumbnail next to title/description in search results
  • Structured data: ImageObject, image in Article/Product/etc.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for brand and page context.

Identify:

  1. Context: Hero, content page, product, trust badge, social preview
  2. Above vs below fold: LCP candidate (hero) vs lazy-loadable
  3. Image count: Single hero vs gallery, programmatic pages

1. Discovery & Indexing

Use HTML Image Elements

Google finds images in the src attribute of <img> (including inside <picture>). CSS background images are not indexed.

Do Don't
<img src="puppy.jpg" alt="Golden retriever puppy" /> <div style="background-image:url(puppy.jpg)">

Image Sitemap

Submit an image sitemap to help Google discover images it might otherwise miss. Image sitemaps can include URLs from CDNs (other domains); verify CDN domain in Search Console for crawl error reporting.

Structure (from Google):

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://example.com/page</loc>
    <image:image>
      <image:loc>https://example.com/image.jpg</image:loc>
    </image:image>
  </url>
</urlset>

See xml-sitemap for sitemap index and submission. Image sitemap is an extension; can be standalone or combined with page sitemap.


2. Format & Performance

Supported Formats

Google supports: BMP, GIF, JPEG, PNG, WebP, SVG, AVIF. Match filename extension to format.

Format Best for Notes
WebP Photos, graphics Smaller files, faster load; lossy + lossless; transparency, animation
AVIF Modern browsers Even smaller than WebP; check support
JPEG Standard photos Fallback; widely supported
PNG Transparency, detail Larger; use when needed
SVG Icons, logos Scalable; use <title> for inline SVG alt
GIF Simple animation First frame only for preview

Responsive Images

Use <picture> or srcset for different screen sizes. Always provide fallback src—some crawlers don't understand srcset.

<img
  srcset="image-320w.jpg 320w, image-480w.jpg 480w, image-800w.jpg 800w"
  sizes="(max-width: 320px) 280px, (max-width: 480px) 440px, 800px"
  src="image-800w.jpg"
  alt="Descriptive alt text">

Picture element (format fallback, e.g. WebP → PNG):

<picture>
  <source type="image/webp" srcset="image.webp">
  <img src="image.png" alt="Descriptive alt text">
</picture>

Data URI (Inline Images)

Base64 data URIs (data:image/...;base64,...) reduce HTTP requests but increase HTML size. Use sparingly for small icons; avoid for large images. See web.dev.

Resize & Compress

  • Max width: Generally ≤2,500px; match container max-width
  • Compression: WebP preferred; quality 75–85 for lossy; 72dpi for web
  • LCP: Hero/above-fold images are LCP candidates; optimize aggressively

Lazy Loading

Use loading="lazy" only for below-fold images. Above-fold images (hero) must load immediately—lazy loading them hurts LCP.

<img src="hero.jpg" alt="..." loading="eager">
<img src="below-fold.jpg" alt="..." loading="lazy">

3. Alt Text

Alt text improves accessibility (screen readers, low bandwidth) and SEO (Google uses it with computer vision to understand images). It also serves as anchor text if the image is a link.

Best Practices

Do Don't
Useful, information-rich description Keyword stuffing
Context of page content "image of" or "photo of" (redundant)
Max ~125 characters (some assistive tech truncates) Empty alt on meaningful images
Descriptive for functional images Alt on purely decorative images (use alt="")

Examples (from Google):

  • ❌ Missing: <img src="puppy.jpg"/>
  • ❌ Stuffing: alt="puppy dog baby dog pup pups puppies..."
  • ✅ Better: alt="puppy"
  • ✅ Best: alt="Dalmatian puppy playing fetch"

Captions

Google extracts image context from captions and nearby text. Use <figcaption> or descriptive text near the image.

Use Purpose
Topic relevance Caption describes image subject; supports indexing
Featured Snippets Images near answers with captions can capture thumbnail slots; see featured-snippet
Image Pack Alt + caption + file name help Image Pack display; see serp-features

Inline SVG

Use <title> inside SVG for accessibility:

<svg aria-labelledby="svgtitle1">
  <title id="svgtitle1">Descriptive text for the SVG</title>
</svg>

4. File Names

Descriptive filenames give Google light clues about subject matter.

Do Don't
apple-iphone-15-pink-side-view.jpg IMG00353.jpg
Short, hyphen-separated Generic: image1.jpg, pic.gif
Localize filenames for translated pages Overly long filenames

5. Preferred Image (SERP Thumbnail & Discover)

When users search for keywords, optimized images can appear as thumbnails next to the page title and description in search results—enhancing visibility and CTR. Google also uses these images for Google Discover. Search Engine Land

Google selects thumbnails automatically from multiple sources. Influence selection via:

Schema: primaryImageOfPage

{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "url": "https://example.com/page",
  "primaryImageOfPage": "https://example.com/images/cat.png"
}

Or attach image to main entity (e.g. BlogPosting, Article) via mainEntity or mainEntityOfPage.

Open Graph

<meta property="og:image" content="https://example.com/images/cat.png">

Preferred image rules: Relevant, representative; avoid generic (e.g. logo) or text-heavy images; avoid extreme aspect ratios; high resolution. See open-graph, twitter-cards for social specs.

Google Discover (if targeting Discover): ≥1200px wide; ≥300KB; 16:9 aspect ratio preferred; important content visible in landscape crop.


6. Page Context

  • Title & meta description: Google uses page title and meta for image result snippets. See title-tag, meta-description.
  • Placement: Put images near relevant text; page subject matter influences image indexing.
  • Same URL: Reference the same image with the same URL across pages for cache efficiency and crawl budget.

7. Structured Data

Add structured data for rich results in Google Images (badges, extra info). Image attribute is required for eligibility. See schema-markup for ImageObject, Article, Product, Recipe, etc.


8. Specs by Context

Context Priority Notes
Hero LCP, alt, no lazy See hero-generator; above-fold, fast load
Article / Blog hero 1200–1600px wide; proportional height; 1200×630 for og:image Same image for Schema, Open Graph, Twitter Cards; under 200 KB; WebP preferred; descriptive alt; set width/height to prevent CLS; use srcset/sizes for responsive; articles with relevant images get ~94% more views
Trust badges Alt text See trust-badges-generator; e.g. "Norton Secured"
Landing page All above See landing-page-generator Pre-Delivery Checklist
OG / Twitter 1200×630, 1200×675 See open-graph, twitter-cards
Platforms Per-platform X, LinkedIn, Pinterest—see platform skills

9. Opt-Out & SafeSearch

  • Inline linking opt-out: Prevent full-sized image display in Google Images via HTTP referrer check (200 or 204). See Google docs.
  • SafeSearch: Label pages for explicit content if applicable.

Output Format

  • Alt text suggestions per image
  • Captions (if applicable; snippet/Image Pack context)
  • File name recommendations
  • Format (WebP, fallback)
  • Responsive (srcset/sizes or picture)
  • Lazy loading (above-fold vs below-fold)
  • Image sitemap (if many images)
  • Preferred image (schema, og:image) for key pages

Related Skills

  • core-web-vitals: LCP, INP, CLS; image optimization supports LCP
  • xml-sitemap: Sitemap structure; image sitemap extension
  • open-graph, twitter-cards: og:image, twitter:image; social preview
  • schema-markup: ImageObject, Article/Product image
  • content-optimization: Multimedia in content; defers image SEO to this skill
  • featured-snippet: Images near answers + captions; snippet thumbnail
  • serp-features: Image Pack; alt, captions, file names
  • visual-content: Visual content for social, infographics; website images use this skill
解决搜索引擎收录问题,包括处理未索引、软404及静态资源误报。指导使用noindex标签、规范URL、检查robots.txt及通过Google Indexing API请求索引,涵盖Next.js/Vercel环境下的特定场景。
fix indexing not indexed Crawled - currently not indexed discovered - currently not indexed index coverage noindex noindex tag pages not indexed why not indexed request indexing Google Indexing API
skills/kostja94_marketing-skills/indexing/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill indexing -g -y
SKILL.md
Frontmatter
{
    "name": "indexing",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to fix indexing issues from Search Console, use noindex, or implement Google Indexing API. Also use when the user mentions \"fix indexing,\" \"not indexed,\" \"Crawled - currently not indexed,\" \"discovered - currently not indexed,\" \"index coverage,\" \"noindex,\" \"noindex tag,\" \"pages not indexed,\" \"why not indexed,\" \"request indexing,\" or \"Google Indexing API.\" For sitemap, use xml-sitemap."
}

SEO Technical: Indexing

Guides indexing troubleshooting and fix actions. For how to find and diagnose issues in GSC, see google-search-console.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (Technical SEO)

  • Fix actions: noindex, canonical, content quality, URL Inspection; verify robots.txt does not block (see robots-txt)
  • Noindex: Page-level index control; which pages to exclude and how. Complements robots-txt (path-level crawl control) and google-search-console (Coverage diagnosis)

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site URL and indexing goals.

Identify issue from GSC (see google-search-console for Coverage report, issue types, diagnosis workflow). Then apply fix below.

Crawled - Currently Not Indexed

Cause Action
Low quality, duplicate, off-topic Improve content, fix duplicates, set correct canonical
Static assets (CSS/JS) See below
Feed, share URLs with params Usually OK to ignore; or noindex, canonical to main URL
Important content pages Use URL Inspection, verify canonical/internal links/sitemap, Request indexing

Static Assets (Next.js / Vercel)

Vercel adds unique dpl= params to static assets per deploy, creating many "Crawled - currently not indexed" URLs.

Do Don't
Keep robots.txt allowing /_next/ Do not block /_next/ (breaks CSS/JS loading). See robots-txt
Accept static assets in GSC as expected Do not block /_next/static/css/ or ?dpl=
Use X-Robots-Tag for static assets CSS/JS should not be indexed; no SEO impact

Static assets in "Crawled - currently not indexed" is normal and expected.

Other Issue Types (from GSC Coverage)

Issue Fix
Excluded by «noindex» tag Remove noindex if accidental; keep if intentional
Blocked by robots.txt See robots-txt; remove Disallow for important paths
Redirect / 404 Fix URL or add redirect
Duplicate / Canonical Set correct canonical; usually OK
Soft-404 Page returns 200 but content says "not found" or empty—Google may treat as 404. Fix: return 404 status for truly missing pages; or add real content for 200 pages

Soft-404

A soft-404 occurs when a page returns HTTP 200 but the content indicates the page doesn't exist (e.g. "Page not found" message, empty state). Google may treat it as 404 and exclude from index.

Fix When
Return 404 Page truly doesn't exist; use proper 404 status
Add content Page is intentional (e.g. empty search results); ensure substantive content or use noindex
Redirect If URL moved, use 301 to correct destination

Noindex Usage

  • How: metadata.robots = { index: false } or <meta name="robots" content="noindex"> or X-Robots-Tag
  • Rationale: Not all site content should be indexed; noindex is a valid choice for many pages
  • Caution: Avoid noindex on important content pages
  • With robots.txt: robots.txt = path-level crawl control; noindex = page-level index control. Do not block noindex pages in robots.txt—crawlers must access the page to read the directive. Use both: robots for /admin/, /api/; noindex for /login/, /thank-you/, etc. See robots-txt for when to use which.
  • nofollow ≠ noindex: nofollow controls link equity only; it does not prevent indexing. To exclude from search, use noindex. See page-metadata for meta robots implementation.

Page Types That Typically Need Noindex

Category Page Types Typical Meta Reason
Auth & Account Login, Signup, Password reset, Account dashboard Login: noindex,nofollow; Signup: noindex,follow No search value; login indexed = security risk; signup follow allows crawl of Privacy/Terms links
Admin & Private Admin, Staging, Test pages, Internal tools noindex,nofollow Not for public; avoid discovery
Conversion Endpoints Thank-you, Confirmation, Checkout success, Download gate noindex,follow Post-conversion; no SERP value; allow link equity
System & Utility 404, Internal search results, Faceted/filter URLs noindex,follow or noindex,nofollow Thin/duplicate; 404 = error state
Legal Privacy, Terms, Cookie Policy (optional) Often noindex,follow Low-value indexed; reduces clutter
Duplicate & Thin Printer-friendly, Parameter URLs, Near-duplicate noindex,follow or canonical Duplicate content; canonical preferred when possible
Low-Value Media kit, Feedback board (external), Thin press noindex or index for brand queries Case-by-case

noindex,follow vs noindex,nofollow: Use noindex,follow for most cases—excludes from SERP but allows link equity. Use noindex,nofollow only for login (security), staging, or temporary test pages.

Page Removal Decision Framework

When intentionally removing a page from the web, choose the method based on whether a relevant alternative exists and whether the page should remain accessible:

Scenario Method Rationale
Has a closely related replacement page 301 redirect Preserves accumulated link signals and user flow
Content merged into a new page 301 redirect Direct old URL to the new canonical location
Permanently deleted, no alternative 410 Gone Explicitly signals permanent removal to search engines
Deleted, uncertain if permanent 404 Not Found Safe default; can reinstate later if needed
Still accessible but should not be indexed noindex Page remains available to users; excluded from SERP

Before removing: Check the URL's search traffic, backlinks, internal links, and conversion value. If the page has value, consider updating or merging rather than removing.

Common mistakes:

  • 404-ing pages that have relevant alternatives (wastes accumulated signals)
  • Redirecting all deleted pages to the homepage (breaks user intent)
  • Creating redirect chains (A → B → C) instead of direct redirects
  • Removing pages without cleaning up internal links pointing to them
  • Using robots.txt to block noindex pages (crawler must access the page to read the noindex directive)

Post-removal cleanup:

  1. Remove deleted URLs from XML sitemap; update and resubmit
  2. Update internal links to point directly to the final URL (avoid relying on redirects)
  3. For 301 redirects, ensure the target URL is in the sitemap
  4. In GSC, use URL Inspection to verify important pages; use Removals tool for temporary quick-hide (not permanent — use proper HTTP status or noindex)

Google Indexing API

Type Typical use
JobPosting Job boards
BroadcastEvent Live platforms

Requirements: Enable Indexing API, create service account, add owner in Search Console, request quota (default 200 URLs/day).

Output Format

Related Skills

  • google-search-console: Find and diagnose indexing issues in GSC
  • robots-txt: Path-level crawl control; when to use robots.txt vs noindex; do not block /_next/ or noindex pages
  • page-metadata: Meta robots implementation; noindex vs nofollow
  • xml-sitemap: Submit and maintain sitemap
  • indexnow: Faster indexing for Bing
  • canonical-tag: Resolve duplicate content
用于实现 IndexNow 协议,向 Bing 和 Yandex 等搜索引擎快速通知新或更新的 URL,加速收录。适用于提及 IndexNow、Bing 索引、URL 通知等场景。
用户希望实现 IndexNow 以加速搜索引擎收录 用户提及 IndexNow、Bing indexing、URL notification、instant indexing 等关键词
skills/kostja94_marketing-skills/indexnow/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill indexnow -g -y
SKILL.md
Frontmatter
{
    "name": "indexnow",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to implement IndexNow, notify search engines of new\/updated URLs, or speed up Bing indexing. Also use when the user mentions \"IndexNow,\" \"Bing indexing,\" \"URL notification,\" \"instant indexing,\" \"sitemap IndexNow sync,\" \"share URL list with sitemap,\" or \"IndexNow API.\" For sitemap SSOT, use xml-sitemap."
}

SEO Technical: IndexNow

Guides IndexNow protocol integration for faster search engine indexing (primarily Bing).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (Technical SEO)

  • IndexNow: Submit URLs to Bing/Yandex for faster indexing
  • URL notification: Notify search engines of new or updated URLs

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site URL.

Identify:

  1. Site URL: Base domain
  2. URL source: Config file, sitemap, CMS, etc.
  3. Deployment: CI/CD, manual, or both

Overview

IndexNow notifies search engines (mainly Bing) of new or updated URLs to speed up indexing.

Implementation Steps

1. API Key and Verification

  • Generate API key (e.g., UUID)
  • Create verification file: https://example.com/{key}.txt
  • File content: the API key string
  • Configure key and URL in your IndexNow client

2. Submission Methods

Method When to use
Single URL New or updated page
Batch Many URLs at once (e.g., after deploy)
Relative paths Convert to full URLs before submitting

3. Best Practices

Practice Note
When to submit New pages, major content updates, meta changes
When not to Minor edits; let natural crawling handle
Frequency Once per deploy; avoid excessive submissions
Priority Submit high-value commercial pages first

4. CI/CD Integration

npm run build
npm run indexnow:all

5. Single Source of Truth (URL List)

  • Use same config as sitemap: Import URL list from central config (e.g., site-pages-config.ts) or sitemap generation logic.
  • Avoid: Separate hardcoded URL lists for IndexNow—leads to inconsistency and missed URLs.
  • Feed: If you have RSS/feed, it can also consume from the same config to stay in sync.

Supported Search Engines

  • Bing: Primary support
  • Yandex: Supports IndexNow
  • Google: Does not use IndexNow; use Sitemap + Search Console

Verification

Common Issues

Issue Fix
Domain verification fails Ensure URL uses correct domain
API key error Verify key and verification file match
Network errors Retry; API can be intermittent

Output Format

  • Setup steps: Key generation, verification file
  • Submission flow: Single vs. batch
  • Integration: CI/CD or manual script
  • References: IndexNow docs

Related Skills

  • xml-sitemap: Share same URL list from central config
  • indexing: Broader indexing strategy
面向独立开发者或自助创业者的增长与营销策略指南。涵盖心态、冷启动获客(前100用户)、Build in Public策略及Pieter Levels实战法则,专注可持续盈利与小众市场,适用于无外部融资的单人或小团队项目。
indie hacker bootstrapping solo founder Build in Public Micro-SaaS first 100 users
skills/kostja94_marketing-skills/indie-hacker/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill indie-hacker-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "indie-hacker-strategy",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants indie hacker or bootstrapping founder strategy—growth, channels, Build in Public, or solo founder tactics. Also use when the user mentions \"indie hacker,\" \"indie developer,\" \"bootstrapping,\" \"bootstrapped founder,\" \"solo founder,\" \"Build in Public,\" \"scratch your own itch,\" \"Micro-SaaS,\" \"first 100 users,\" or \"solo company.\" For cold start, use cold-start-strategy."
}

Strategies: Indie Hacker

Guides marketing and growth strategy for indie hackers (bootstrapped founders, solo developers)—autonomous, small-team or solo, no external funding. Covers mindset, first users, Build in Public, growth channels, and when to use which skills. For cold start execution (launch timeline, Product Hunt, directory submission), see cold-start-strategy. For forum tactics (Indie Hackers, HN, Reddit post structure), see community-forum. Full guide (cases, resources) → Alignify – Indie Hacker Complete Guide.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Definition

Indie Hacker = Bootstrapped founder who builds products autonomously, typically 1–3 people, no external funding. Focus: sustainability, profitability, fast iteration—not VC-scale growth.

Trait Indie Hacker VC-backed
Funding Bootstrapping; product revenue External investment
Growth Sustainable; Ramen profitability first Scale at all costs
Control Full autonomy Investor reporting
Timeline Long game; niche focus Fast expansion

Core Concepts

Concept Meaning
Bootstrapping Self-funded; use product revenue to grow; no equity dilution
MVP Minimum viable product; ship fast, validate, iterate
Build in Public Share progress, metrics, failures openly; attracts early adopters
Scratch your own itch Solve your own problem first; others likely have it too

Pieter Levels Playbook

Tactic Guideline
Ship fast, fix later Launch ugly but functional MVPs; Nomad List started as Google Sheet + Stripe; Photo AI made $150K first week despite initial flaws
Monetize from day one Add payment button at launch; validate willingness to pay, not just usage
Automate everything Scripts, APIs, no-code; run without employees
Build in public Share metrics openly; 600K+ followers; "Day 1: building X. Day 3: first customer" attracts early adopters

Reference: Pieter Levels: The One-Man Startup Empire

First 100 Users (Indie Hacker Tactics)

Phase Tactic
First 5 Direct DMs to people who'd genuinely benefit
Next ~15 Conversations in communities where target users hang out (Reddit, Indie Hackers)
Scale to 50 Build in public with visible metrics
Reach 100 Double down on what works; don't add new channels until one consistently converts

Niche products: Reddit (60/100 users in one case), Discord (25), Indie Hackers (15). Twitter/HN may yield 0 for niche—target existing conversations in niche communities. Reference: How I got my first 100 users - Indie Hackers, Indie10k – First 100 Users

Traction Triangle

  1. Clear Offer — "I built X to help Y do Z"
  2. Right Channel — Go where your niche congregates
  3. Social Proof — Screenshots, roadmaps, user feedback, rapid shipping

Build in Public (Content Framework)

Content Mix Share
40% Learnings
30% Progress updates
20% Challenges, failures
10% Helping others

Principles: Transparency over perfection; authenticity over polish; consistency over intensity; value over self-promotion (90/10 rule). Post weekly minimum; engage two-way. Founders who build in public see ~4.2× more day-one users; ~34% of launch users from audience. Reference: Building in Public: Complete Strategy 2026, Indie Hackers Marketing 2025

Growth Channels (Indie Hacker Fit)

Channel Fit Conversion Skill
Indie Hackers Sustained 4–6 months; authentic journey ~23% vs PH 3% community-forum
Product Hunt Launch-day buzz ~3% product-hunt-launch, cold-start-strategy
Reddit Niche subreddits; 5+ months; lead with story Varies by niche reddit-posts, community-forum
Twitter/X Breadth, fastest follower growth twitter-x-posts
LinkedIn Higher customer conversion than X linkedin-posts
Discord Niche communities; strong for first 100 community-forum
SEO Long-term organic; Micro-SaaS, tools seo-strategy
LTD / AppSumo Fast revenue, validation discount-marketing-strategy
Founder-led outbound B2B, high ACV; 10–15 DMs/day cold-start-strategy

Principle: 2–3 channels executed well > many poorly. Twitter/X for breadth; LinkedIn for conversion. Indie Hackers + SEO or Product Hunt + Reddit common combos.

Indie Hackers Platform Tactics

  • Sustained engagement: 4–6 months; not one-time launch
  • Content: Authentic journey posts, small wins, lessons learned, relatable struggles
  • Promotion: Product "sprinkled within" content; avoid heavy promotion
  • Result: ~12.5% conversion from authentic sharing; Plausible Analytics 24% trial vs PH 1.38%
  • Build in Public: Share progress, metrics, failures openly

For HN launch, Reddit post structure, Discord tactics → community-forum.

Product Types & Growth Fit

Type Example Growth Focus
Micro-SaaS Nomad List, Tweet Hunter, SiteGPT SEO, Indie Hackers, Product Hunt
AI tools Photo AI, Interior AI, AutoShorts.ai Product Hunt, Twitter, LTD
Digital products Templates, plugins, themes SEO, content
Content Blog, course, tools SEO, content-marketing

Monetization & Pricing

Model Use Skill
SaaS (subscription) Monthly/annual; stable revenue pricing-strategy
One-time purchase Tools, templates; lower overhead pricing-strategy
LTD Fast validation; cold start discount-marketing-strategy
Diversified revenue Multiple products; lower risk

Principle: Monetize early; add payment on day 1 to validate demand. Ramen profitability = first milestone. Avoid platform dependency (e.g., Twitter API).

Multi-Channel Launch (Indie Hacker)

Week Focus
1–2 Audience building (LinkedIn 3×/week)
3–4 Beta; community engagement
5 Pre-launch countdown
6 Product Hunt + Reddit/Indie Hackers
7 Post-launch follow-up

Build in public before launch. For full launch checklist → cold-start-strategy.

When to Use Which Skill

Scenario Skill
First users, launch timeline, Product Hunt cold-start-strategy
Indie Hackers, HN, Reddit post structure, Discord community-forum
PMF validation before scale pmf-strategy
SEO for organic growth seo-strategy
LTD structure, pricing discount-marketing-strategy
Product Hunt, Taaft, G2 submission product-hunt-launch, directory-submission
Full GTM (new product, 90-day) gtm-strategy, product-launch

Output Format

  • Channel selection (2–3; fit for indie)
  • First 100 users plan (DMs, communities, Build in Public)
  • Build in Public content mix (40/30/20/10)
  • Skill mapping (cold-start, community-forum, seo-strategy, etc.)
  • Timeline (pre-launch, launch, sustained)

Related Skills

  • cold-start-strategy: Launch timeline, Product Hunt, directory submission; first users execution
  • open-source-strategy: Open source commercialization; GitHub, DevHunt; Build in Public for OSS
  • community-forum: Indie Hackers, HN, Reddit, Discord tactics; forum post structure
  • pmf-strategy: Validate before scaling; avoid large paid before PMF
  • seo-strategy: Organic growth; Micro-SaaS, tools
  • discount-marketing-strategy: LTD structure; cold start revenue
  • product-hunt-launch: Product Hunt preparation and launch
  • directory-submission: Taaft, G2, curated lists
  • gtm-strategy: Full GTM framework; new product launch
  • product-launch: Launch execution; channels, checklist
  • twitter-x-posts, linkedin-posts: Build in Public post copy
  • reddit-posts: Reddit post copy for cold-start
专为AI/SaaS产品提供影响者营销策略,涵盖KOL筛选、合作模式及内容规划。通过提升信任度降低获客成本。适用于品牌曝光、创作者合作或达人推广等场景。
用户希望规划、实施或优化影响者营销策略 提及影响者营销、KOL、创作者合作、品牌大使、赞助内容、微影响者、达人外联或交易谈判
skills/kostja94_marketing-skills/influencer-marketing/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill influencer-marketing -g -y
SKILL.md
Frontmatter
{
    "name": "influencer-marketing",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to plan, implement, or optimize influencer marketing strategy. Also use when the user mentions \"influencer marketing,\" \"KOL,\" \"creator partnership,\" \"brand ambassador,\" \"sponsored content,\" \"influencer campaign,\" \"micro-influencer,\" \"influencer outreach,\" \"creator collaboration,\" or \"influencer deal.\" For creator programs, use creator-program."
}

Channels: Influencer

Guides influencer marketing strategy for AI/SaaS products. Focus on trust and brand exposure; 2–3x higher conversion and 40%–50% lower CAC than traditional ads. 92% of consumers trust influencers over celebrities.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and brand voice.

Identify:

  1. Goal: Brand awareness, trust, or direct conversion
  2. Platform: Instagram, TikTok, YouTube, LinkedIn
  3. Target: Nano (1K–10K), micro (10K–100K), mid-tier (100K–1M), macro (1M+)

Influencer vs. Affiliate vs. Creator

Dimension Influencer Affiliate Creator Program
Goal Brand exposure, trust Direct sales Content co-creation
Incentive Paid, product exchange Commission Credits, free use
Content Influencer original Links sufficient Must use product
Relationship Short or long-term Transactional Long-term

Influencer Types by Platform

Platform Best For Audience
Instagram Visual, lifestyle 25–34
TikTok Viral, short-form Under 24
YouTube Reviews, tutorials 18–24
LinkedIn B2B, professional Professionals

Discovery & Screening

  • Platform search: Search by brand/industry terms; check competitors
  • Tools: Stormy.ai, Upfluence, Passionfroot
  • Form: Application form on site for interested creators

Screening: Engagement rate > follower count; avoid fake followers; content style match.

Cooperation Models

Model Use
Product exchange Low cost; testing; requires influencer interest
Commission (affiliate) Lower risk; CPS; hybrid with flat fee common
Paid promotion Direct payment; quick exposure
Long-term partnership Brand ambassador; sustained relationship

Content Strategy

  • Forms: Shoutout, review, favorites, tutorial, placement
  • Creative freedom: Avoid overly scripted; authenticity drives trust
  • Cross-platform: Repurpose for website, ads, email
  • Publishing: Multiple drops; align with target market hours

Best Practices

  • Payment: PayPal; prepay + final payment after publish
  • Contract: Clear dates, review process, deliverables
  • Content review: Brand guidance without over-control
  • Disclosure: FTC/ASA compliant; disclose paid partnerships

Output Format

  • Platform and tier selection
  • Discovery approach
  • Cooperation model
  • Content brief
  • Tracking plan

Related Skills

  • affiliate-marketing: Influencers can be affiliates (hybrid model)
  • creator-program: Long-term creator partnerships
  • employee-generated-content: Internal employee content; influencer is external
  • affiliate-page-generator: Commission structure if hybrid
指导整合营销传播(IMC)策略,协调多渠道以提供一致体验。涵盖计划/渠道/活动定义、PESO模型、增长指标及客户旅程映射,旨在提升ROI和获客效率。
用户希望规划整合营销或协调渠道 提及IMC、PESO模型、全渠道营销或跨渠道活动
skills/kostja94_marketing-skills/integrated-marketing/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill integrated-marketing -g -y
SKILL.md
Frontmatter
{
    "name": "integrated-marketing",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to plan integrated marketing, coordinate channels, or clarify program vs channel vs campaign. Also use when the user mentions \"IMC,\" \"integrated marketing,\" \"channel mix,\" \"marketing program,\" \"PESO model,\" \"integrated marketing communications,\" \"omnichannel marketing,\" \"channel strategy,\" \"marketing mix,\" or \"cross-channel campaign.\" For content planning, use content-marketing."
}

Strategies: Integrated Marketing (IMC)

Guides Integrated Marketing Communications (IMC) strategy. IMC coordinates all marketing channels to deliver a consistent message and unified customer experience. Companies using integrated approaches achieve ~25% higher marketing ROI; optimized channel mixes outperform by ~27% in acquisition efficiency.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Program vs. Channel vs. Campaign

Term Definition Examples
Program High-level strategy; collection of channels to achieve a discrete goal Thought leadership program, lifecycle program, loyalty program
Channel Specific medium/platform for communication Email, LinkedIn, SEO, paid ads, events
Campaign Time-bound initiative using one or more channels Product launch, seasonal sale, holiday giveaway

Relationship: Program contains campaigns; campaigns use channels. Avoid using terms interchangeably.

PESO Model

Organize communications into four integrated categories:

Type Examples Role
Paid Ads, sponsored content, influencer partnerships Immediate reach, targeting
Earned PR, media coverage, organic mentions Authority, credibility
Shared Social engagement, co-created content, EGC Community, authenticity
Owned Website, blog, email, content hub Strategic foundation; anchor

Best practice: Owned media as anchor; sequence PESO intentionally. Integration over silos--all four work together for synergy.

Growth Metrics by Stage

Stage Focus metrics
Early (traffic) Website traffic; organic traffic; keyword rankings
Channel testing ROI (influencer), LTV (discount), ROAS (paid)
Monetization CAC, conversion rate
Scale MRR, ARR

Principle: Growth is a means, not an end—it serves conversion and monetization. Don't pursue traffic at the cost of user precision or long-term brand health.

Customer Journey by Stage

Map touchpoints across the lifecycle to avoid channel silos:

Stage Touchpoints
Awareness PR, ads, word-of-mouth, email, PPC
Consideration Social ads, reviews, blog, media, direct email
Purchase Website, e-commerce, store
Retention FAQ, knowledge base, community forum
Advocacy Social, blog, promotions, newsletter

Use: Assign channels to stages; ensure handoffs (e.g. awareness → consideration) are intentional. See growth-funnel for AARRR framework.

Channel Evaluation Framework

When selecting channels, evaluate across:

Variable Question
Goal Awareness, acquisition, loyalty?
Cost Budget; CAC vs LTV
Measurability Can you attribute impact? ROI clarity?
Speed Time to full impact
Scale How big can this channel get?
Fit Does target audience use it?
Effort Resources to set up and maintain

Example Programs

Program Channels Goal
Thought leadership PR, social, influencers, spokespeople, events Brand authority
Lifecycle Email, website chat, retargeting, SMS Conversion, retention
Loyalty Email campaigns, promotions, personalized offers Retention
Brand awareness Content marketing, influencer partnerships, PR Reach

Content marketing: See content-marketing for content types, formats, repurposing across channels.

IMC Best Practices

  • Message consistency: Same core message across channels; adapt for each medium
  • Start focused: 2-3 connected channels first; prove ROI before expanding
  • Map to funnel: Assign channels to awareness, consideration, decision
  • Unified measurement: Single framework tracking shared goals; avoid channel-only reporting
  • Cross-channel attribution: Link channels to determine true performance

Output Format

  • Program definition and goal
  • Channel selection with evaluation rationale
  • PESO mapping (which channels = paid/earned/shared/owned)
  • Campaign structure (if applicable)
  • Measurement approach

Related Skills

  • cold-start-strategy: Cold start for early-stage; first users, launch channels
  • indie-hacker-strategy: Indie hacker channel mix; Build in Public; first 100 users
  • discount-marketing-strategy: Promotional pricing; LTV (discount) in channel testing
  • pricing-strategy: Base price structure; pricing-strategy + discount-marketing = full pricing approach
  • seo-strategy: SEO workflow, prioritization; SEO as owned/organic channel
  • paid-ads-strategy: Paid ads (Google, Meta, LinkedIn); when to use; ROAS; PESO Paid channel
  • parasite-seo, programmatic-seo: Parasite SEO (high-authority platforms), programmatic SEO (pages at scale)
  • affiliate-marketing, community-forum, creator-program, directory-submission, employee-generated-content, email-marketing, influencer-marketing, public-relations, referral-program: Specific channel tactics
  • generative-engine-optimization: GEO as channel for AI search visibility
  • ai-traffic-tracking: Track AI channel traffic in GA4; measure GEO impact
  • traffic-analysis: Attribution, UTM, multi-channel reporting
  • analytics-tracking: GA4, event tracking across channels
  • content-strategy: SEO content (topic clusters); owned media pillar
  • content-marketing: Content types, formats, channels, repurposing; full content marketing plan
指导创建、优化或审计集成、插件及扩展页面。涵盖SaaS产品的平台连接展示,提供从初始评估、页面结构(标题、目录、CTA)、最佳实践到SEO优化的完整指南,旨在提升用户连接与安装转化。
用户想要创建或优化集成/插件页面 提及 'integrations page', 'plugins', 'extensions', 'add-ons' 涉及 'API integrations' 或 'connect with X' 讨论 'marketplace' 相关页面规划
skills/kostja94_marketing-skills/integrations/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill integrations-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "integrations-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit integrations, plugins, or extensions pages. Also use when the user mentions \"integrations page,\" \"plugins,\" \"extensions,\" \"add-ons,\" \"API integrations,\" \"connect with X,\" or \"marketplace.\" For sitewide page planning, use website-structure."
}

Pages: Integrations / Plugins

Guides integrations, plugins, and extensions pages. Shows how the product connects with Canva, Slack, Zapier, and other platforms. Common for SaaS, tools, and developer products.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, integrations, and target platforms.

Identify:

  1. Type: Native integrations, plugins, extensions, API, webhooks
  2. Platforms: Which to feature (Slack, Notion, Figma, etc.)
  3. Format: Single page vs. per-integration pages
  4. Primary goal: Install, connect, sign up

Page Structure

Section Purpose
Headline "Integrate with [Platforms]" or "Connect [Product] to Your Stack"
Value Why integrations matter; workflow benefits
Catalog Grid or list: logo, name, short description, "Connect" or "Install"
Categories By use case (Productivity, Design, Dev) or platform type
API Link to api-page or docs if developer-focused
CTA Browse all, request integration, build your own

Best Practices

Organization

  • By category: Productivity, Design, Marketing, Dev tools
  • By platform: Slack, Notion, Figma, Zapier
  • Search/filter: For 20+ integrations
  • Featured: Highlight top 5–10; rest in catalog

Content

  • Per integration: Logo, 1–2 sentence benefit, "Connect" CTA
  • Use cases: "Use with Slack to get notifications"
  • Screenshots: Show connected workflow when possible

SEO

  • Intent: Informational + commercial; "X integration," "X plugin"
  • Title: "Integrations | Connect [Product] to [Platforms]" or "[Product] + Slack"
  • Internal links: API, docs, features, pricing

Output Format

  • Headline and value proposition
  • Catalog structure (categories, layout)
  • Per-integration copy (name, benefit, CTA)
  • Internal links (API, docs)
  • SEO metadata

Related Skills

  • card: Integration card structure; logo, name, description, CTA; catalog grid
  • grid, list: Catalog layout; grid or list format
  • api-page-generator: API overview; link for developer integrations
  • docs-page-generator: Integration setup guides in docs
  • category-page-generator: Catalog layout for many integrations
  • landing-page-generator: Integration-specific landing pages
用于SEO关键词研究,帮助用户发现目标关键词、分析搜索意图、评估难度及构建主题地图。支持通过用户视角、工具扩展、竞品反向分析及Google自动补全等方法挖掘长尾词和高价值流量机会。
用户想要研究关键词或寻找目标关键词 用户提到关键词研究、关键词工具、搜索量、搜索意图、关键词难度、主题地图、关键词聚类、People Also Ask、Google自动补全或字母方法
skills/kostja94_marketing-skills/keyword-research/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill keyword-research -g -y
SKILL.md
Frontmatter
{
    "name": "keyword-research",
    "metadata": {
        "version": "1.3.1"
    },
    "description": "When the user wants to research keywords, find target keywords, or analyze search intent. Also use when the user mentions \"keyword research,\" \"keyword tool,\" \"target keywords,\" \"search volume,\" \"search intent,\" \"keyword difficulty,\" \"topical map,\" \"keyword clustering,\" \"People Also Ask,\" \"Google autocomplete,\" \"autocomplete keywords,\" or \"alphabet method.\" For clusters, use content-strategy."
}

SEO Content: Keyword Research

Guides keyword research for SEO: finding target keywords, assessing difficulty, understanding search intent, and building topical maps. ~95% of keywords get fewer than 10 searches/month; low-volume, high-intent terms often yield faster rankings and conversion.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and positioning.

Identify:

  1. Product/service: What you offer
  2. Audience: Who searches for it
  3. Goals: Traffic, conversions, brand
  4. Tool access: Google Keyword Planner, Google Trends, or SEO tools

Discovery Methods

Base Discovery

Method Purpose
User perspective What pain points? What would they search? Customer language from product context
Tool expansion Related keywords, questions, suggestions; Google autocomplete, PAA, Related Searches
Competitor reverse Analyze competitor titles, H1, URL; identify topics they rank for; find gaps (#4–10 = opportunity) — see competitor-research
Google PAA People Also Ask and Related Searches; high-value signals from real user behavior
Extract from article When auditing existing content: extract seed keywords from title, H1, H2s, meta keywords, first 100 words; then search "[primary keyword]" or "[primary keyword] related keywords" for opportunities; use "[primary keyword]" site:competitor.com if competitors known

Google Autocomplete (Long-Tail Discovery)

Google autocomplete reflects real user searches; suggestions only appear if queries have actual traffic. Free; often uncovers low-volume long-tail that keyword tools miss. ~70% of search traffic is long-tail; lower competition, higher conversion.

Alphabet method (seed + space + letter):

  • Type seed keyword + space + each letter: keyword a, keyword b, ... keyword z
  • Record relevant suggestions; repeat with numbers 0-9
  • Example: SEO a -> "SEO audit," "SEO agency"; SEO b -> "SEO basics," "SEO best practices"

Position variants (seed in different positions):

  • Prefix: a keyword, b keyword (discover what users add before)
  • Suffix: keyword a, keyword b (most common; alphabet method)
  • Middle: how to keyword a, best keyword for (question + modifier combos)

Question modifiers:

  • how to keyword, what is keyword, why keyword, when to keyword, keyword vs
  • keyword for beginners, keyword for small business, keyword without

Why it works: Keyword tools filter low-volume terms; autocomplete only shows queries with real traffic. Use with PAA and Related Searches for full coverage. Categorize results by intent (informational, commercial, transactional).

Incremental Discovery

  • User feedback: Support, community, reviews, NPS—high-frequency questions = unmet search demand
  • Multi-platform search: Reddit, Quora, X (Twitter), Hacker News—real questions and discussions

Search Intent

Intent Content type Example
Informational Blog, guide, FAQ "how to optimize sitemap"
Navigational Brand page "alignify login"
Commercial Comparison, review "SEO tools comparison"
Transactional Product, pricing "best SEO tool pricing"

Intent Identification

Modifier words (often signal intent):

Intent Modifiers
Informational "how," "what," "why," "guide," "tutorial"
Commercial "best," "compare," "vs," "review," "top"
Transactional "buy," "price," "cheap," "coupon," "free shipping"
Local Location names

SERP check: Search the term—knowledge cards/Wiki → informational; product lists/reviews → commercial; brand sites → navigational. Broader terms often show mixed SERP. See serp-features for feature types.

Long-Tail Expansion

  • Google Autocomplete: Alphabet method, position variants, question modifiers; see above. Primary source for long-tail.
  • Intent modifiers: Core + "how," "best," "vs," "compare," "price"
  • Question words: "how to," "what is," "why," "when"
  • Functional modifiers: Core + "-er/-or" (e.g., "image optimizer" for tool-type queries); often higher conversion
  • Clustering: Group by SERP overlap (same top pages), semantic similarity, or intent.

Keyword Clustering & Topical Map

Method Use
SERP overlap Keywords with overlapping top-ranking pages → same cluster
Semantic Group by meaning, LSI, related concepts
Intent-based Group by intent; separate pages if intent differs within cluster

Pillar–cluster (map keywords to structure):

  • Pillar (Hub): Broad topic page; links to clusters
  • Cluster (Spoke): Focused subtopic; links back to pillar
  • Target long-tail first; then pillar. Interlink clusters within topic.
  • See content-strategy for full pillar-cluster planning and implementation.

Evaluate & Screen

Factor Consider
Search volume Monthly searches; ~100+/month typical floor; niche can relax
Keyword difficulty (KD) New sites target lower KD
CPC Higher CPC often = stronger commercial intent
SERP features Featured Snippet, PAA, zero-click; SERP features can satisfy intent without click—affects real traffic; see serp-features (Zero-Click section), featured-snippet
Screening order 1) Remove irrelevant 2) Filter very low volume 3) Assess achievability 4) Prioritize commercial/transactional

Product Positioning Test (SEO Fit)

Test if positioning is clear enough for search:

  • XXX + Function words: Generator, Creator, Maker, Builder, Changer, Shortener, Scraper, Converter, Downloader, Translator, Extender, Summarizer, Resizer, Remover, Extractor, Recorder, Rewriter, Solver, Calculator; or Platform, Tool, Software, App, Provider, Assistant, Copilot
  • Input + to + Output: e.g., "image to video," "text to speech"—clear input/output signals intent

Agent/Copilot products: Pure native Agent hard to grow via SEO; users rarely search "agent." Release related features first (e.g., CRM, sales bot for sales agent) to build traffic, then funnel to Agent product.

Principles

  • Core rule: Someone must search it—validate with tools; avoid inventing terms
  • Functional keywords: Tool-type (-er/-or) often convert better; users are closer to action
  • Multi-language: Re-research in target language; don't translate existing lists. See translation for translation workflow.

SEO–PPC Keyword Synergy

Keyword research serves both SEO and Google Ads. Align both channels to avoid duplication, cannibalization, and wasted spend.

Data flow Use
keyword-research → google-ads Keyword list, clusters, intent; support terms (login, forum, pricing) → negative keywords for PPC
google-ads → keyword-research PPC conversion rate, Search Terms report → SEO priority; high-converting PPC terms = worth ranking organically
keyword-research → landing-page Clusters → dedicated LP per intent; PAA questions → FAQ sections
GSC organic rank 4+ If you rank well organically, consider reducing/pausing PPC on those terms to avoid cannibalization

PPC data for SEO priority: SEO ROI ≈ (Organic clicks × PPC conversion rate × Customer value) − SEO cost. Use PPC conversion data to validate which keywords to pursue in organic.

Reference: Backlinko – SEO and PPC: 8 Smart Ways to Align

Data Sources

Source Use
Ahrefs Keywords Explorer, Site Explorer
SEMrush Keyword Overview, Organic Research
GSC Search queries, impressions, clicks
GA Traffic by landing page
PostHog Feature/search usage

Report Workflow

  1. Parse — Read Excel/CSV, infer keyword, volume, KD, intent, etc. from headers
  2. Enrich — Web search, visit competitor/product pages; read project-context.md if present
  3. Build — Structure data for report
  4. Generate — Output report in chosen format

Output Format

  • Keyword list with volume, KD, intent
  • Keyword mapping to pages/content
  • Content gaps (competitors rank, you don't)
  • Priority ranking for implementation
  • Topical map (cluster → pillar → page mapping)

Report Structure Reference

Section Content
Executive Summary Priorities (top 3)
Keyword Overview Total keywords, primary intent, avg KD, content gaps count
Keyword List Keyword, volume, KD, intent, priority, target page
Keyword Mapping Page/URL, target keywords, status
Content Gaps Keywords competitors rank for that you don't
Action Plan Priority, action, impact, effort
Appendix Search intent reference (Informational, Commercial, Transactional, Navigational)

Related Skills

  • seo-strategy: SEO workflow, Product-Led SEO, audit approach; keyword research is Content phase
  • google-ads: Keywords inform Search targeting; PPC data feeds back into SEO priority
  • paid-ads-strategy: When to use paid vs organic; channel selection
  • content-strategy: Keywords inform content plan; topic clusters
  • content-optimization: Keyword placement, density vs stuffing, H2 keywords
  • title-tag, meta-description: Keywords in title, description
  • heading-structure: Keywords in H1, H2
  • link-building: Keywords inform link targets
  • serp-features: SERP features in keyword screening; PAA, Featured Snippet
  • featured-snippet: Snippet-worthy query targeting
  • competitor-research: Competitor keyword/topic analysis; reverse engineering
  • faq-page-generator: PAA questions to FAQ sections; question-based keyword to FAQ content
用于创建、优化或审计付费广告及邮件营销的落地页。涵盖结构规划、转化流程、标题公式与CTA最佳实践,强调移动端优先和广告一致性,适用于单目标转化场景。
用户提到创建着陆页、PPC着陆页或SEM页面 需要优化转化率或审核活动页面 涉及单页漏斗或线索捕获页设计
skills/kostja94_marketing-skills/landing-page/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill landing-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "landing-page-generator",
    "metadata": {
        "version": "1.4.1"
    },
    "description": "When the user wants to create, optimize, or audit campaign landing pages for paid ads, email, or other traffic. Also use when the user mentions \"landing page,\" \"PPC landing page,\" \"SEM landing page,\" \"conversion page,\" \"campaign page,\" \"lead capture page,\" \"landing page optimization,\" \"LP conversion,\" \"single-page funnel,\" or \"squeeze page.\" Not for the main site homepage; use homepage-generator."
}

Pages: Landing Page

Guides campaign landing page structure, conversion flow, and optimization. Primary use: Paid ads (PPC/SEM) — landing pages are typically built to receive paid traffic; ad-to-page alignment is critical for conversion. See paid-ads-strategy for when to use paid ads and ad-to-page alignment principles. Also applies to affiliate signup, product launch, lead capture, webinar registration, and other single-goal conversion pages. Scale: When building many landing pages (city-specific, product-specific, integration-specific), use programmatic-seo (template + data) and template-page-generator for template design. Differs from homepage (multi-purpose) and product pages (catalog).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Paid Ads: LP Requirements

When LP receives paid traffic: ad promise on page immediately; mobile-first (CTA above fold, fast load); minimal form (fewer fields); trust above fold. See paid-ads-strategy for full ad-to-page alignment and Quality Score.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and value proposition.

Identify:

  1. Page goal: Signup, purchase, lead capture, webinar, download
  2. Traffic source: Paid ads, email, affiliate, organic
  3. Audience: Cold vs warm; segment if known

Landing Page Structure (5-Step Flow)

Step Purpose Elements
1. Stop the scroll Capture attention in ~2.6 seconds Headline, subheadline, hero image or video
2. Earn trust Social proof before the ask Logos, testimonials, ratings, customer count
3. Explain value Benefits, features, use cases Clear copy; who it's for, what it does
4. Remove doubt Objection handling FAQ, guarantees, comparison
5. Make the ask Single primary CTA One clear action; repeat at logical points

Every element should serve one of these five functions. Pages with multiple competing offers get ~266% fewer leads.

Headline Formula

[Who it's for] + [Specific outcome] + [Time/qualifier]

  • Avoid: Abstract promises ("Unlock your potential," "Transform your business")
  • Prefer: Concrete ("Cut invoice processing by 70%—without new software")

CTA Best Practices

  • One primary CTA: No competing actions; create a "one-way street" toward conversion
  • Above the fold on mobile: Thumb-reachable; ~65%+ traffic is mobile
  • Value-focused copy: "Start Free Trial" not "Submit"
  • Pair with trust signals: Customer count, logos, or stats next to the button
  • Remove or minimize navigation: Can increase conversion 2–28%

Programmatic Landing Pages (Scale)

When you need many landing pages (e.g., city-specific, product-specific, integration-specific), use programmatic-seo: one template + data = hundreds or thousands of LPs. Apply landing page structure (5-step flow, CTA, trust) to the template; see template-page-generator for template design. Example: "[Product] for [City]" LPs with local data; "[App A] + [App B]" integration signup pages.

Page Types

Type Use CTA Destination
Click-through Warm audience before sending to offer; best for SaaS, subscriptions pricing-page, products-page, signup
Lead capture Collect email for nurture; forms 5 fields or fewer (longer forms cause ~81% abandonment) newsletter-signup, contact-page
Product-focused Deep-dive features and benefits; product launch products-page, features-page
Comparison X vs Y; competitor brand keyword ads; commercial intent alternatives-page, features-page, pricing-page
Use cases / Solutions For integrated products hard to split into tools features-page, services-page
Free tools Standalone utilities; lead gen; same ICP; excerpt from product tools-page-generator; tool page as LP when gated
Bridge/bonus Extra incentive to purchase through your link pricing-page, products-page
Webinar/event Event registration; collect signups before live resources-page (webinar as resource)

Landing Page ↔ Page Types (Content & Flow)

Pull content from (step 2–4):

  • customer-stories-page-generator: Testimonials, case studies for social proof; Challenge→Solution→Results snippets
  • faq-page-generator: Objection-handling FAQ section; reuse conversion-related Q&A
  • features-page-generator: Benefit-first feature copy for "Explain value" step
  • resources-page-generator: Lead magnet (ebook, template) as exchange for email; webinar as resource

CTA sends to:

  • pricing-page-generator: Click-through LP → pricing; signup, trial
  • products-page-generator: Product LP → product detail or catalog
  • services-page-generator: Service LP → contact, quote, booking
  • contact-page-generator: Lead capture LP → contact form; B2B demo request
  • affiliate-page-generator, creator-program: Partner signup = landing page type

Internal linking:

  • Link LP to homepage (brand anchor); about-page (trust); privacy-page (form compliance)
  • Avoid orphan LPs: ensure at least one internal link from sitemap, nav, or campaign hub

Performance and Design

  • Load time: Under 2.5 seconds; each extra second can cost ~7% conversion
  • Mobile-first: Responsive; CTA visible without scrolling
  • Visuals: Hero image or video can improve conversion up to 80%
  • Frontend aesthetics: For distinctive typography, motion, spatial composition, backgrounds—see brand-visual-generator Frontend Aesthetics
  • Disclosure: FTC-compliant affiliate/paid disclosure when applicable

Pre-Delivery Checklist

Before shipping a landing page, verify:

Category Check
Visual No emojis as icons (use SVG); icons from consistent set (Heroicons/Lucide); hover states don't cause layout shift
Interaction All clickable elements have cursor-pointer; hover provides clear feedback; transitions 150–300ms
Accessibility Images have alt text; form inputs have labels; color not sole indicator; prefers-reduced-motion respected
Layout No horizontal scroll on mobile; content not hidden behind fixed nav; responsive at 375px, 768px, 1024px
Performance Load time under 2.5s; LCP optimized; images use WebP/lazy loading where appropriate
Images See image-optimization for alt, format, responsive, lazy loading

Output Format

  • Headline and subheadline
  • Structure (5-step flow sections)
  • Trust signals placement
  • CTA copy and placement
  • Objection handling (FAQ, guarantees)
  • Internal links (destination pages)
  • SEO metadata (if page is indexed)

Related Skills

  • hero-generator: Hero section (step 1)
  • grid, list: Content layout below hero; sections, features, testimonials
  • cta-generator: CTA button design and placement
  • image-optimization: Alt, WebP, LCP, responsive, lazy loading
  • pricing-page-generator: Click-through LP destination; signup CTA
  • faq-page-generator: Objection-handling FAQ section
  • howto-section-generator: How-to step section (e.g. setup flow) before FAQ/CTA
  • comparison-table-generator: Competitor / traditional-vs-modern comparison table section; message match with ads
  • homepage-generator: Multi-purpose home vs single-goal landing; similar structure
  • paid-ads-strategy: Ad-to-page alignment; when to use paid ads
  • alternatives-page-generator: Competitor brand keyword ads → comparison LP (not blog)
  • programmatic-seo: Scale landing pages via template + data
  • template-page-generator: Template structure for programmatic LPs
  • title-tag, meta-description, page-metadata: Landing page metadata
指导LinkedIn广告的设置、定向和优化,适用于B2B营销。涵盖Campaign Manager操作、账户结构、命名规范、预算竞价及各类广告形式(如Sponsored Content),旨在提升专业受众触达与转化效率。
用户提到LinkedIn Ads、Campaign Manager或Sponsored Content 需要设置或优化LinkedIn广告活动 询问LinkedIn广告定向策略或预算规则
skills/kostja94_marketing-skills/linkedin-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill linkedin-ads -g -y
SKILL.md
Frontmatter
{
    "name": "linkedin-ads",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to set up, optimize, or manage LinkedIn Ads. Also use when the user mentions \"LinkedIn Ads,\" \"LinkedIn Campaign Manager,\" \"Sponsored Content,\" \"Lead Gen Forms,\" \"Sponsored Messaging,\" \"Message Ads,\" \"Conversation Ads,\" \"Accelerate,\" \"Classic ad set,\" \"Audience Network,\" \"objective-based pricing,\" \"Insight Tag,\" \"job title targeting,\" \"company targeting,\" \"Matched Audiences,\" or \"B2B paid ads.\" For organic posts, use linkedin-posts."
}

Paid Ads: LinkedIn Ads

Guides LinkedIn Ads setup, targeting, and optimization. LinkedIn excels at B2B and professional targeting; use when job title/company targeting matters and ACV is higher.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Account and product context

  • Campaign Manager is the main UI: campaignmanager.linkedin.com · Get started (help)
  • Marketing Solutions = ads for brands/leads; Talent Solutions = hiring products (separate when choosing objectives).
  • Sponsored Content in-feed and Sponsored Messaging generally require a free LinkedIn Page (per official getting-started guidance—confirm in your account).
  • Review: build at least ~1–2 days before go-live; last-minute changes may miss launch. Ad set best practices

Campaign structure (naming and hierarchy)

Naming (example): LI_[Objective]_[Audience]_[Offer]_[Date] (e.g. LI_LeadGen_CMOs-SaaS_Whitepaper_Mar24)

Hierarchy in Campaign Manager (names vary slightly over time):

Level Role
Campaign group Groups related programs; shared status and budgets (optional).
Campaign Marketing objective; budget/scheduling as configured.
Ad set Accelerate or Classic; audience, placements, format, budget, schedule, bid; conversion/URL params. Compare types
Ads Creative; multiple ads per ad set for A/B.

Billing model: Objective-based pricingbilled on the action tied to the objective (e.g. clicks for traffic-oriented objectives). Pricing overview

Budget pacing: Auction-based; on daily budgets, spend on a day may exceed the daily number by a margin; pacing smooths so 7-day spend does not exceed about 7× daily (per LinkedIn’s public budget article—always confirm the latest text). Budgets and pacing

Minimum spend: There is no one global fixed minimum across all cases; very low daily/lifetime budgets are often rejected in UI. A common practical floor cited in the industry is on the order of ~$10 USD/day per ad set (not a platform guarantee). Use Campaign Manager as source of truth.

Marketing objectives (funnel, abbreviated)

Funnel Example objectives (names evolve—pick in UI) Typical use
Awareness Brand awareness Broad reach
Consideration Website visits, Engagement, Video views Traffic, company/page engagement, video
Conversion Lead generation, Website conversions Leads, Lead Gen Forms, on-site events
Talent Job applicants, Talent leads (where eligible) Hiring

Full list: Marketing objectives

Ad formats and placements (high level)

Ads Guide (authoritative for specs)

Sponsored Content (feed and related)

Aligns with organic shapes in linkedin-posts (image, video, document, etc.) as paid delivery:

  • Single image, video, carousel (carousel ad cards often 2–10 in guide) · Document (PDF/DOC/PPT-style; large page/file limits in guide)
  • Event ads (promote a LinkedIn Event) · Job ads (boost an existing job post)
  • Thought Leader ads: amplify qualified members’ posts (eligibility rules in Ads Guide)
  • Article and Newsletter ads: promote in-platform long-form/series
  • CTV (Connected TV): in-stream reach-oriented video with LinkedIn targeting; not a feed click campaign by default
  • Placements can include LinkedIn Audience Network (LAN)—third-party app/site inventory. Toggle/availability is in the ad set. LAN (help)

Lead Gen Forms

  • Native forms on ads; profile pre-fill; typically ~12 fields and ~3 custom questions at most (verify current product)
  • Minimize fields for higher completion; sync to CRM/Marketing automation

Sponsored Messaging (inbox)

Type Notes
Message Ads One focused message + CTA; body often ~1,500 characters in product docs (check Ads Guide)
Conversation Ads Branching buttons; long body allowance (often ~8,000 characters in docs); up to ~5 CTA buttons (check guide)

Text and Dynamic Ads

  • Text ads: Desktop-oriented; small image + text; often CPC/CPM. Placements (help)
  • Dynamic / Follower / Spotlight variants: personalized right-rail; see Ads Guide

Tracking

Targeting strengths

Signal Use
Job title, function, seniority ICP and committees
Company Industry, size, name lists (ABM)
Skills, interests, groups Technical or topical
Matched Audiences Contact/company lists, retargeting (Insight Tag)
Exclusions, expansion Audience expansion (when offered)—broaden carefully

Lookalike audiences: As of current LinkedIn public documentation, Lookalike is not the default expansion path; it has been deprecated/removed in many accounts—rely on first-party lists, Matched Audiences, and exclusion/expansion options shown in the UI. See Target audience size / practices and the live Campaign Manager for your tenant.

Principle: LinkedIn is expensive; start narrow, high-intent; then scale with measured expansion.

Audience size: A common operational band mentioned in industry is hundreds+ in targetable size; the UI will warn if the audience is too small—follow it.

Creative best practices

  • Professional tone; align Sponsored copy with your Page and organic voice (linkedin-posts)
  • Headline + first line clear value; match landing experience
  • Lead Gen Forms: fewer fields; clear next step for SDRs
  • Document ads: gating a PDF/deck; pair with a strong CTA
  • Creative limits: e.g. image ~5MB and ~1200×627 in many specs—always take from Ads Guide for the format you use

Benchmark costs (illustrative, not guaranteed)

  • LinkedIn is typically higher CPC/CPM than Meta and Google in comparable B2B use cases. Third-party ranges (USD, very rough) often cite e.g. CPC ~$5–8 as a ballpark middle; real costs swing with audience, CTR, quality, and season. Never use these as a commitment—use in-account reporting. Why pricing varies
  • CTR for feed is often well under ~1% in reported benchmarks; optimize creative and ICP, not the benchmark alone

Bidding (short)

  • Start with strategies appropriate to the objective; move to automated/goal-based when enough weekly conversions exist for the system to learn
  • Manual caps help when volume is too low to automate

Pre-launch checklist

  • Insight Tag (if site conversions/retargeting) · Lead routing to CRM if using LGF
  • Page and billing ready; naming at group/campaign/ad set level
  • Objective and ad set type (Accelerate vs Classic) set intentionally
  • Audience defined; exclusions for existing customers (where needed)
  • Creatives meet policy; UTMs for non-LGF web flows
  • Budget realistic for the account’s CPM/CPC; pacing understood

Related Skills

  • linkedin-posts: Organic formats and copy; align Sponsored with same patterns
  • paid-ads-strategy: Channel mix; B2B vs B2C; budget allocation
  • landing-page-generator: Web LPs for non–Lead Gen Form flows
  • analytics-tracking: Attribution, ROAS, pipeline

Official link index

Topic URL
Ads Guide (formats) https://business.linkedin.com/advertise/ads/ads-guide
Pricing and auction https://business.linkedin.com/advertise/ads/pricing
Create campaigns https://www.linkedin.com/help/lms/answer/a9509136
Objectives https://www.linkedin.com/help/lms/answer/a424570
Placements (Text ads, etc.) https://www.linkedin.com/help/lms/answer/a417880
Targeting options https://www.linkedin.com/help/lms/answer/a424655
LMS help home https://www.linkedin.com/help/lms
Get started (what you need) https://business.linkedin.com/advertise/ads/best-practices/what-you-need-to-get-started
用于生成和优化LinkedIn帖子文案,支持多种内容形式如文章、文档、投票等。适用于B2B营销、专业分享及提升互动,强调职业语境与平台特性差异。
用户希望创建或优化LinkedIn帖子 提及LinkedIn post/article/copy/engagement等关键词 需要发布B2B专业内容或提升LinkedIn参与度
skills/kostja94_marketing-skills/linkedin/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill linkedin-posts -g -y
SKILL.md
Frontmatter
{
    "name": "linkedin-posts",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to create LinkedIn post copy or optimize for LinkedIn. Also use when the user mentions \"LinkedIn post,\" \"LinkedIn article,\" \"professional post,\" \"post to LinkedIn,\" \"LinkedIn content,\" \"LinkedIn copy,\" \"B2B LinkedIn,\" \"LinkedIn engagement,\" \"LinkedIn feed,\" \"share box,\" \"document post,\" \"poll,\" \"Newsletter,\" \"reshare,\" or \"LinkedIn marketing.\" For LinkedIn ads, use linkedin-ads."
}

Platforms: LinkedIn

Guides LinkedIn post copy creation and optimization. Use for generating publish-ready professional content. Suitable for copy agents and design agents (image specs).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Output: Publish-Ready Copy

This skill enables agents to generate LinkedIn post copy optimized for engagement. Output includes character-counted text and structure for the "See more" threshold.

Post Types and Entry Points (organic)

Kind What to know
Start a post Short update; can include link preview if you paste a URL. Same feed format as other updates.
Photo Single or multiple images (carousel in feed).
Video Uploaded file (distinct from LinkedIn Live, which is live streaming and has separate gating).
Write article Article = long-form editor, separate from the short post box; long URL, better for depth and some off-site discoverability.
Document PDF / PPT / DOC (slides in feed). Official limits (check current help): on the order of ~100MB / ~300 pages per file—verify when publishing.
Poll Engagement driver; keep question and options scannable.
More (menu) Often includes celebrations, hiring-style share, Find an expert, etc. (varies by product/region).
Reshare Reshare or quote another member’s post with your take—adds context; avoid empty reshares.
Newsletter Series subscription; not the same as a one-off post but compound reach over time.
Event Create/promote events via a dedicated flow, not the same as a plain text post.

Product detail: Get started with posting on LinkedIn · Upload and share documents

Why it matters for copy: Match CTA and length to the form (e.g. a document deck vs a 5-line hot take). Do not treat a short post and an Article as interchangeable.

Platform Positioning

LinkedIn is a professional network—its core value is career identity, B2B relationships, and professional content. Key differences from general social platforms:

Dimension LinkedIn Meta / X / TikTok
Primary intent Job seeking, B2B networking, industry learning Entertainment, social, discovery
Identity Real name + career history Username or lifestyle persona
Content tone Professional, constructive Casual, entertaining, opinion
B2B lead value High (job title + company targeting) Low to medium
Algorithm signal Professional interest + network + editorial Engagement, watch time, virality

Prioritize LinkedIn when: targeting B2B buyers, building professional authority, recruiting, or publishing industry thought leadership. For consumer brand awareness or entertainment, other platforms are often more effective.

How the Feed Ranks (what to write for)

  • The feed is not a pure reverse-chronological friend list. It blends 1st-degree connections, follows, company/topic interest, and recommended “out of network” content from the Economic Graph, plus ads. How the Feed ranks content
  • Relevance uses context of the post, profile and network signals, and behavior (read, react, comment, share, dwell). Demographics like age or gender are not used to rank feed visibility (per public help guidance).
  • Platform direction in recent public communications: more LLM/semantic understanding, less inauthentic engagement and engagement-bait / low-quality repetition; favor real expertise and meaningful discussion. Background on feed engineering (blog)

Writing implications: Strong first line and on-topic depth; comments that add substance; avoid templates that look automated or “pod” coordinated.

Off-Site Search Visibility (SEO & GEO)

LinkedIn content is visible to search engines on a selective basis—understand what gets indexed for SEO and cited for GEO.

What Google Indexes vs. What Is Login-Gated

Surface Search Visibility GEO (AI citation) Value
Public profile (Headline, About, Experience) Indexed for name/company/role queries Strong entity signal; citable paragraphs
Articles (long-form editor) Indexed when set to public High; structured paragraphs with keywords
Company Page Indexed for brand queries Medium; brand entity signals
Short feed posts Login-gated—not indexed Low; cannot be cited if behind login
Newsletter issues Indexed if public; behind login if subscriber-only Depends on visibility setting

SEO Through LinkedIn

  • Headline is the most SEO-visible field on your profile—treat it as a title tag. Include primary keyword + value proposition (e.g. “B2B SaaS Marketing | Helping startups scale through content”).
  • About section: Write public-facing paragraphs with keywords and proof points. This is indexed and often appears in Google search snippets.
  • Featured section: Use to showcase key links (site, case studies, press). These appear on your public profile and add backlink value.
  • Articles: Long-form content on LinkedIn ranks independently on Google. Treat as secondary publication, not primary—repurpose site content with canonical or unique article.
  • Consistency: Align name, headline, and entity names across LinkedIn, your site, and other public bios. See entity-seo for sameAs alignment.

GEO Through LinkedIn

  • Entity consistency: Your LinkedIn profile is a high-authority entity source. AI search tools (ChatGPT, Perplexity, Google AI Overviews) can cite your LinkedIn profile when answering “who is [person]” or “what does [company] do” queries.
  • Citable paragraphs: Write your About section in answer-first format (40–60 words per block) so AI tools can extract and cite it directly.
  • Evidence links: Add links to your site, case studies, talks, and publications in Featured and About. AI tools cite external links as supporting references.
  • Public articles: Publish LinkedIn Articles on relevant topics; well-structured articles with data and citations increase the likelihood of AI citation.
  • Limitation: Short feed posts behind login walls are invisible to AI crawlers and search engines. Do not rely on feed posts for GEO.

Actionable checklist:

  • Headline includes primary keyword + value proposition (treat as meta title)
  • About section written in answer-first format (quotable paragraphs)
  • Featured section showcases site, case studies, key publications
  • Entity names (name, company, role) consistent across LinkedIn and site
  • At least one public Article published on a relevant industry topic
  • LinkedIn profile URL uses custom alias (not default ID string)

For implementation details: open-graph (link previews), entity-seo (people/org sameAs), generative-engine-optimization (cross-platform GEO).

Profile Modules for Discovery

Key LinkedIn profile modules that affect search visibility and AI citation:

Module SEO/GEO Value Optimization
Headline Highest—indexed, appears in search snippets Customize beyond job title; include keyword + audience + value
About High—indexed; citable for AI Write in answer-first format; include proof points, external links
Featured Medium—showcases key links on public profile Add site URL, case studies, press, portfolio
Experience (media) Low-medium—media attachments are indexed Add relevant documents, links, images to each role
Skills & Endorsements Low—indexed but thin signal Include relevant skills; endorsements add social proof
Articles High—indexed and rankable Publish long-form content with keywords and data
Custom URL Indirect—clean URL improves shareability Set to firstnamelastname or similar

For the full profile module inventory, see LinkedIn help: Add sections to your profile.

Character Limits

Type Limit Notes
Post 3,000 characters Optimal: 1,300–1,600
First line (critical) 210–235 chars Visible before "See more"; 60–80% decide here
Short posts 100–200 chars Polls, announcements, quotes

Optimal Length by Content Type

Type Characters Use
Short 100–200 Polls, announcements, quotes
Medium 300–1,200 Case studies, tips, BTS
Long 1,200–2,000 Thought leadership, analysis
Sweet spot 1,300–1,600 Highest engagement
Avoid >2,000 ~35% engagement drop

First Line (Hook)

  • Place key message in first 140 chars
  • Strong openings: Specific results, pain points, bold claims, surprising stats
  • Avoid: Vague teases, hashtag-first, generic greetings

Image Specs (for Design Agents)

Format Dimensions Use
Single image 1200×627 (1.91:1) Feed; link previews
Square 1200×1200 Single image
Carousel (organic) Up to 20 images Multi-image post
File ≤10 MB; JPG/PNG Native uploads perform better
Vertical Preferred 88% browse on mobile

Best Practices

  • Mobile-first: 88% users on mobile
  • Polls and document (PDF) posts: Often strong for reach; pair with a clear takeaway
  • Post frequency: Weekly minimum is a common bar for company pages; individuals often several times per week if sustainable
  • Alt text: Add for accessibility
  • B2B tone: Professional and constructive; see influencer-marketing and about-page-generator for voice alignment with profile/brand

Output Format

When generating LinkedIn copy, provide:

  1. First line (≤210 chars; hook)
  2. Full post with character count
  3. Hashtags (a few, relevant; end of post)
  4. Image specs (if design agent needs dimensions)
  5. Form note if not a plain post (e.g. “pair with a 5-slide document” or “use Article for 1,200+ words”)

Related Skills

  • linkedin-ads: Paid promotion; same professional tone as organic
  • open-graph: Link share previews (Facebook, LinkedIn, etc.)
  • entity-seo: People/org sameAs and entity consistency
  • generative-engine-optimization: AI search / answer visibility (cross-platform; not only LinkedIn)
  • influencer-marketing: LinkedIn influencers for B2B
  • about-page-generator: Professional brand alignment
  • visual-content: Cross-channel visual planning; LinkedIn image specs in context

Official references (index)

指导线性堆叠式列表布局的设计、优化与审计。适用于博客索引、文档和搜索结果等文本密集、需快速扫描的场景,涵盖结构、变体、F型阅读模式及无限滚动SEO等最佳实践。
用户希望设计或优化内容展示的列表布局 提及 list layout, list design, vertical list, stacked list, blog list, article list, documentation list, search results layout, infinite scroll list
skills/kostja94_marketing-skills/list/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill list -g -y
SKILL.md
Frontmatter
{
    "name": "list",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to design, optimize, or audit list layouts for content display. Also use when the user mentions \"list layout,\" \"list design,\" \"vertical list,\" \"stacked list,\" \"blog list,\" \"article list,\" \"documentation list,\" \"search results layout,\" or \"infinite scroll list.\" For blog index page, use blog-page-generator."
}

Components: List Layout

Guides list layout design for linear, stacked content display. Lists are compact, text-heavy; users scan by title or metadata. Used for blog indexes, documentation, search results, and dense content.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

When to Use List

Use list when Use grid when
Text-heavy; scan by title Visual content; equal emphasis
Many items; compact display Fewer items; browsing
Blog index, docs, search results Products, templates, gallery
F-pattern reading (top-left, left column) Discovery, exploration

See grid for grid layout; card for card structure.

List Structure

Element Purpose
Items Single column; stacked vertically
Per item Title, optional metadata (date, author), excerpt, link
Spacing Consistent gaps; dividers or alternating background
Density Compact (docs) vs relaxed (blog)

List Variants

Variant Use
Simple list Title + link; minimal (nav, TOC)
Rich list Title, excerpt, date, author
Table-like Columns for metadata (date, status)
With thumbnail Small image + text

Best Practices

Principle Practice
Scannable Clear titles; consistent hierarchy
Compact Less vertical space than grid
Link area Full row or title clickable
Metadata Date, author, category; secondary styling

F-Pattern

Users read top-left first, then scan left column. Place primary content (titles) left-aligned; metadata secondary.

Infinite Scroll

If using infinite scroll for list (e.g., blog index, search results): crawlers cannot access content loaded on scroll. Provide paginated component pages or use traditional pagination for SEO-critical content. See site-crawlability for search-friendly infinite scroll implementation.

Responsive

  • Mobile: Single column; full-width items
  • Touch targets: ≥44×44px for touchable rows
  • Truncation: Long titles; ellipsis or wrap by design

Related Skills

  • site-crawlability: Infinite scroll SEO; paginated component pages; search-friendly implementation
  • grid: Grid vs list; when to use each
  • carousel: Carousel for slides; when list is too long for space
  • card: Card in list (e.g., blog with thumbnail)
  • toc-generator: TOC as list; jump links
  • blog-page-generator: Blog index list
  • article-page-generator: Article list format
  • docs-page-generator: Documentation list
指导本地SEO优化,涵盖Google商业资料设置、NAP一致性管理及引文构建。适用于用户提及本地搜索、GBP或NAP等场景,旨在提升本地搜索可见性。
optimize for local search set up Google Business Profile build local citations local SEO Google Maps NAP citations local search local business service area
skills/kostja94_marketing-skills/local/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill local-seo -g -y
SKILL.md
Frontmatter
{
    "name": "local-seo",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to optimize for local search, set up Google Business Profile, or build local citations. Also use when the user mentions \"local SEO,\" \"Google Business Profile,\" \"Google Maps,\" \"NAP,\" \"citations,\" \"local search,\" \"local business,\" or \"service area.\" For location pages, use programmatic-seo."
}

SEO: Local

Guides local SEO: Google Business Profile, NAP consistency, and citation building. Businesses with accurate NAP across 40+ authoritative sites see ~19% higher visibility in Google Maps. Use this skill when optimizing for local search, setting up GBP, or auditing citations.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 4 (Audience), 5 (Website).

Identify:

  1. Business type: Storefront vs service-area
  2. Location: Single or multiple
  3. Current listings: Existing GBP, directories

NAP Consistency

NAP = Name, Address, Phone. Critical for local rankings.

Rule Guideline
Exact match "Street" vs "St." or "LLC" inconsistency = Google may treat as different entities
Fix first Audit and fix inconsistencies before adding new citations
Tools BrightLocal, Whitespark, Moz Local for audit

Google Business Profile

Element Guideline
Address Physical address; no P.O. boxes
Description 750 chars; primary keywords in first 100
Hours Accurate; seasonal availability
Category Primary category matches business type
Service-area Hide address if no storefront; define service areas

Citation Building

Targeted precision over submitting to every directory.

Priority order:

  1. Google Business Profile
  2. Apple Maps
  3. Yelp, Bing Places, Facebook
  4. Better Business Bureau, Foursquare, Nextdoor
  5. Niche directories (Healthgrades, Angi, etc.)

Citation Audit

  • Incorrect or outdated data
  • Duplicate entries
  • Missing listings on key directories

Fix before adding; compounding errors harm rankings.

Output Format

  • NAP (exact format for consistency)
  • GBP optimization checklist
  • Citation priority list
  • Audit findings (if applicable)

Related Skills

  • geo: GEO for AI search; local + AI overlap
  • localization-strategy: Multilingual; local + i18n
  • directory-submission: Directory listings; different from local citations
指导AI/SaaS产品全球化扩展的本地化策略,涵盖i18n技术实现、URL结构、SEO优化及文化适配。适用于多语言市场进入、国际化SEO及hreflang配置等场景。
用户计划或实施多语言和全球增长策略 提及localization, multilingual, i18n, global expansion, market entry, hreflang, multi-language SEO, international SEO
skills/kostja94_marketing-skills/localization/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill localization-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "localization-strategy",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to plan or implement localization strategy for multilingual and global growth. Also use when the user mentions \"localization,\" \"multilingual,\" \"i18n,\" \"global expansion,\" \"market entry,\" \"localization strategy,\" \"hreflang,\" \"multi-language SEO,\" or \"international SEO.\" For translation workflow, glossary, and style guide, use translation."
}

Strategies: Localization

Guides localization strategy for AI/SaaS products expanding into global markets. Covers i18n implementation, translation, pricing, and marketing adaptation--not just text translation.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, target markets, and brand.

Identify:

  1. Target markets: Priority languages/regions
  2. Product type: SaaS, AI tool, content
  3. Technical stack: Next.js, React, etc.

Localization vs. Translation

Localization includes:

  • Product: Features, UI/UX, cultural adaptation
  • Pricing: True localization (adjust by market) vs. cosmetic (currency only)
  • Marketing: Channels, content, user personas
  • Compliance: GDPR, local regulations

Technical (i18n)

URL Structure

Choose one; be consistent:

Option Example Pros / Cons
Subdirectories /en/, /de/, /zh/ Recommended; maintains domain authority
Subdomains de.example.com Separate hosting; less authority transfer
ccTLD example.de Strongest geo signal; costly
  • Use subdirectories, not subdomains for i18n; subdomains transfer less authority.
  • Default locale: Root path for default (e.g. / for English); prefix for others (/zh/, /de/).
  • IETF BCP 47: Use valid codes (en, en-US, zh-CN, pt-BR). Same language, different country (e.g. de-DE vs de-AT) needs ≥20% content difference for Google to differentiate.

i18n SEO Principles

  • No hardcoded strings: All user-facing text via translation dictionary.
  • Symmetric alternates: Every locale page lists ALL other versions (including self-reference). ~75% of international sites have hreflang errors; missing reciprocal links is the most common.
  • x-default: Always include for fallback when user language/location doesn't match any version.
  • Canonical alignment: Canonical must match the same regional version hreflang refers to; misalignment causes Google to ignore hreflang.
  • Full SEO coverage: Metadata, OpenGraph, JSON-LD (inLanguage), and sitemap all locale-aware.

Common Issues (Next.js + next-intl)

Issue Solution
Route conflict generateStaticParams(); validate locale
Auto redirect localeDetection: false
Middleware Apply only to prefixed paths (e.g. /zh)
URL duplication Manual switcher; getLocalizedHref()

SEO

  • Hreflang on all language versions; self-reference + symmetric annotations.
  • Language switcher: Use <a> not <button>; links in initial HTML.
  • Canonical: Handle multi-domain if using local TLDs; align with hreflang.
  • SPAs: Use sitemap-based hreflang as backup when HTML head is JS-rendered. See rendering-strategies.

Keyword Research by Market

Market Tool
Russia Yandex Wordstat
Korea Naver DataLab
Global Google Keyword Planner, SEO tools

Consider: Cultural expressions, search habits, competition, long-tail in small markets.

Terminology & Translation

  • Translation workflow, glossary, style guide: See translation for full workflow
  • Avoid machine translation for product/marketing: See translation (Human vs MT)

Pricing Strategies

Strategy Use
True localization Adjust price by purchasing power
Cosmetic Display currency only; same price
Tools Parity Deals, Chargebee

i18n SEO Checklist (New Feature / New Locale)

New feature with i18n

  1. Add translation keys to all locale JSON files. Use translation for glossary, style guide, and translation workflow.
  2. Add generateMetadata() with alternates (hreflang) per page.
  3. Add JSON-LD with inLanguage and translated fields.
  4. Add page to sitemap with hreflang annotations.
  5. Set lang attribute on <html>; UTF-8 encoding.

New locale

  1. Add locale code to config; create {code}.json dictionary.
  2. Register in sitemap locale list; regenerate.
  3. Add OpenGraph locale and alternateLocale.
  4. Ensure all alternates are symmetric (every page lists all versions).

Multilingual Risks

  • Batch publishing: Too many translated pages at once can trigger de-indexing or thin-content penalties.
  • Mitigation: Roll out slowly; ensure content is product/industry relevant; avoid Wikipedia-like breadth; monitor indexing in GSC.

Avoid

  • IP-based redirects that override user preferences.
  • Machine translation without localization for product/marketing (see translation).
  • Missing reciprocal hreflang between language versions.
  • Canonical tags that conflict with hreflang.

Output Format

  • Market priority
  • i18n approach
  • Keyword strategy per market
  • Pricing recommendation
  • Technical checklist
  • i18n SEO checklist (if applicable)

Related Skills

  • pricing-strategy: Base price structure; localization-strategy covers pricing by market
  • page-metadata: Hreflang implementation
  • url-structure: URL hierarchy for i18n (subdirectories, subdomains)
  • content-strategy: Multilingual content planning; avoid thin translations
  • translation: Translation workflow, glossary, style guide, human vs MT; produces content for localized pages
  • navigation-menu-generator: Language switcher SEO
  • affiliate-marketing: Local affiliates for target markets
  • gtm-strategy: New market entry; localization as GTM for new geography
指导网站标志的放置、链接及品牌规范,涵盖最佳实践如左上角定位、响应式尺寸及无障碍优化。适用于涉及Logo设计、放置或品牌视觉相关需求。
用户希望优化网站标志的位置、链接或品牌展示 提及 logo, brand logo, header logo, logo placement, AI logo design, logo link, logo alt text, logo sizing, favicon logo, logo usage
skills/kostja94_marketing-skills/logo/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill logo-generator -g -y
SKILL.md
Frontmatter
{
    "name": "logo-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to optimize logo placement, linking, or branding on a website. Also use when the user mentions \"logo,\" \"brand logo,\" \"header logo,\" \"logo placement,\" \"AI logo design,\" \"logo link,\" \"logo alt text,\" \"logo sizing,\" \"favicon logo,\" or \"logo usage.\" For full brand visuals, use brand-visual-generator."
}

Components: Logo

Guides logo placement and implementation for brand recall and navigation. Logo placement affects user orientation and conversion.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for brand guidelines and visual identity.

Brand guidelines source: Logo usage rules (clear space, minimum sizes, variants) come from branding (strategy), brand-visual-generator (visual specs), or media kit. Ensure alignment before implementation.

Identify:

  1. Context: Header, footer, standalone
  2. Platform: Web, mobile, both
  3. Brand guidelines: Size, clear space, variants (from brand-visual-generator or media kit)

Placement Best Practices

Optimal: Top-Left

  • Brand recall: Users are 89% more likely to remember logos in top-left vs. right
  • Left-aligned: ~39% brand recall vs. 21% for right-aligned
  • Navigation anchor: Users expect logo to link to homepage; left placement is intuitive
  • Scan pattern: Aligns with left-to-right reading flow

Avoid

  • Centered logos: Users navigating home from centered logos are ~6x more likely to fail
  • Right-aligned: Violates conventions; harms brand recognition

When Center May Work

  • Minimal headers with few elements
  • Brand-heavy landing pages where logo is focal point
  • Ensure logo still links to homepage and is clearly clickable

Implementation

Linking

  • Always link to homepage from logo
  • Use <a href="/"> wrapping logo image
  • Expected behavior; don't break convention

Image

  • Use appropriate format (SVG preferred for scalability)
  • Provide alt text: company/product name, not "logo"
  • Example: alt="Acme Inc." not alt="Logo"

Size & Clear Space

  • Minimum size: Document in brand guide; prevent illegibility at small sizes (favicon, mobile header).
  • Clear space: Minimum space around logo; no text or graphics within this zone. Defined in brand-visual-generator.
  • Responsive: Ensure readability on mobile; test at 375px, 768px, 1024px.
  • Variants: Primary, secondary, monogram; light/dark backgrounds per brand guidelines.

AI Product Logo Design (Optional)

For AI/SaaS products, Alignify AI Logo Guide offers industry-specific guidance.

Design Trends

Examples are illustrative; no endorsement implied.

Style Use Case Examples
Hexagon Technical platforms, enterprise AI Common in AI logos (e.g. OpenAI)
Rotation/swirl Generative AI, creative tools E.g. DeepMind, Stability AI
Minimalist robot Assistants, chatbots E.g. Jasper, Replika
Emoji/symbol Consumer, friendly AI E.g. Hugging Face, Zoom AI

Design Process

  1. Positioning: B2B (professional, trustworthy) vs B2C (friendly, approachable)
  2. Core element: Choose hexagon, rotation, robot, or emoji per product type
  3. Color: Tech blue, blue-to-purple gradients, monochrome; consider dark mode
  4. Test sizes: Favicon, mobile, header; ensure recognition at small sizes
  5. Trademark check: Avoid conflicts with existing marks

Avoid

  • Overly complex; modern AI logos favor minimalism
  • Too similar to competitors; balance industry recognition with uniqueness
  • Overly technical symbols for B2C; use friendlier designs
  • Ignoring mobile display; test at multiple sizes
  • Frequent rebranding; choose a long-term design

SEO

  • Alt text supports accessibility and image SEO
  • Logo link contributes to internal linking (homepage)

Accessibility

Requirement Practice
Alt text Descriptive; company name
Contrast Logo visible against background
Focus Link receives visible focus state
Touch targets Adequate size on mobile (>=44x44px)

Output Format

  • Placement recommendation
  • Implementation notes (HTML, alt, link)
  • Accessibility checklist
  • AI products (optional): Design trend and archetype suggestions per positioning

Related Skills

  • branding: Brand strategy; logo rules defined in brand guidelines
  • navigation-menu-generator: Logo typically sits in header with nav
  • hero-generator: Logo appears in hero context on landing pages
  • media-kit-page-generator: Logo assets, brand guidelines, usage rules
  • favicon-generator: Favicon derived from logo; consistent brand in browser tabs
  • brand-visual-generator: Typography, colors, spacing; logo clear space and variants
用于设计、优化或审查Pinterest风格的水晶格布局。适用于内容高度不一的画廊、作品集及发现型平台,提供CSS实现方案及SEO建议。
masonry layout Pinterest layout waterfall layout brick layout varying height grid gallery layout masonry SEO
skills/kostja94_marketing-skills/masonry/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill masonry -g -y
SKILL.md
Frontmatter
{
    "name": "masonry",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to design, optimize, or audit masonry (Pinterest-style) layouts for content display. Also use when the user mentions \"masonry layout,\" \"masonry grid,\" \"Pinterest layout,\" \"waterfall layout,\" \"brick layout,\" \"varying height grid,\" \"gallery layout,\" or \"masonry SEO.\" For crawl and scroll UX, use site-crawlability."
}

Components: Masonry Layout

Guides masonry layout design for content with varying heights. Masonry stacks items in columns without distinct rows; items fill gaps like a brick wall. Best for image galleries, portfolios, and discovery-focused platforms.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

When to Use Masonry

Use masonry when Use grid when
Varying heights Equal-height items
Image-heavy; varied aspect ratios Products, templates (consistent)
Gallery, portfolio, showcase Card grid
Discovery, browsing; visual-first Structured browsing

See grid for equal-height grid; card for card structure.

Masonry vs Grid vs Bento vs Carousel

Layout Structure Best for
Grid Equal rows and columns; uniform items Products, templates, features
Masonry Columns; items stack without rows; gaps filled Pinterest, Behance; varied content
Bento Intentional sections; predefined sizes Homepage, dashboard; Apple-style
Carousel Slides; one/few visible; swipe/click Testimonials, logos, featured items; see carousel

Masonry Structure

Element Purpose
Columns 2–4 columns; fluid or fixed
Items Varying heights; natural aspect ratio
Gap Consistent horizontal and vertical spacing
Order Top-to-bottom fill within columns

Implementation

  • CSS columns: column-count; simple, no JS; but items flow top-to-bottom then next column
  • Masonry.js / libraries: True masonry (left-to-right fill); may need JS
  • CSS Grid + grid-auto-flow: dense: Approximate; no JS; see grid for dense grid

Note: Pure masonry can create accessibility challenges (screen reader order); ensure logical DOM order.

SEO Considerations

Masonry + infinite scroll = content not crawlable. Masonry galleries often use infinite scroll or lazy load; crawlers cannot emulate scroll or "Load more" clicks, so content beyond the initial view is not discoverable.

If you use Then
Infinite scroll Provide paginated component pages with full URLs; implement pushState; see site-crawlability for search-friendly infinite scroll
Lazy load Ensure content exists in HTML or is reachable via crawlable links
Pagination Prefer for SEO-critical content; crawlers can follow next/prev links

Reference: Google – Infinite scroll search-friendly recommendations

Best Practices

Principle Practice
Visual-first Thumbnails; minimal text
Aspect ratio Preserve original; avoid forced cropping
Lazy load Many images; load on scroll
Performance Masonry can be heavy; consider grid for simpler cases

Use Cases

Use case Format Page Skill
Showcase / Gallery User work; varied sizes showcase-page-generator
Portfolio Projects; mixed media
Pinterest-style Pins; discovery
Image-heavy blog Blog with varied images blog-page-generator

Related Skills

  • site-crawlability: Infinite scroll SEO; paginated component pages; search-friendly implementation
  • grid: Equal-height grid; when masonry is overkill
  • carousel: Carousel for slides/rotation; when masonry is overkill
  • card: Card structure; masonry often uses cards
  • showcase-page-generator: Gallery masonry
  • image-optimization: Lazy load, aspect ratio, LCP
指导创建、优化或审计媒体资料包及新闻页,提供内容结构、资产规范(如Logo、品牌指南)及最佳实践,面向记者等受众,强调自助服务与品牌一致性。
用户希望创建媒体资料包 用户提到'press kit'或'brand assets' 用户需要审计媒体资源页面
skills/kostja94_marketing-skills/media-kit/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill media-kit-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "media-kit-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit media kit or press page. Also use when the user mentions \"media kit,\" \"press kit,\" \"press page,\" \"press resources,\" \"brand assets,\" \"logo download,\" \"press assets,\" \"media resources,\" or \"brand kit.\" For PR outreach, use public-relations."
}

Pages: Media Kit

Guides media kit and press page content, structure, and accessibility for journalists. Media kits provide self-service brand assets; consistent presentation builds trust (companies with strong guidelines are 20% more valuable). Distinct from press-coverage-page-generator: Media kit = assets for journalists; press coverage = aggregation of third-party mentions for visitor trust.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for company story, metrics, key messages, and Section 12 (Visual Identity).

Identify:

  1. Audience: Journalists, bloggers, analysts
  2. Update frequency: Before launches, events, announcements
  3. Assets: Logos, brand guidelines, favicon, photos, videos

Best Practices

Essential Elements

Evergreen content:

  • Company overview (background, mission, origin)
  • Key team bios and headshots
  • High-res logos (multiple sizes, light/dark backgrounds, transparent PNG)
  • Brand guidelines document (typography, colors, logo usage)
  • Key statistics (customers, growth, metrics)

Regularly updated:

  • Recent press releases
  • Product photos and video clips
  • Link to press coverage page (or "As Seen In" section) for media mentions
  • Contact for press inquiries

Note: Press coverage (third-party mentions) is often a separate page or section. See press-coverage-page-generator for aggregating "As Seen In" / "In the News" content.

Logo Assets (per Alignify-style media kit)

Asset Format Use
Main logo PNG, SVG; light and dark bg Primary branding
Icon PNG; light and dark bg Favicon, social, compact use
Brand pattern PNG Visual identity element
Brand guidelines PDF or PNG Typography, colors, usage rules

Usage Guidelines

Allowed: Media coverage, blog posts, social sharing, product comparisons, educational use. Assets free to download without additional authorization.

Requirements: Maintain logo proportions and colors; ensure adequate white space; do not use in contexts that harm brand. For commercial or special use, contact for authorization.

Media Assets

Asset Format
Logos PNG (transparent), SVG; horizontal and square
Photos High-res; horizontal for web, square for social
Videos Product demos, interviews
Credits Photo credits, usage rights

Structure

  • Dedicated page: Press/Media section on website
  • Self-service: Journalists find what they need without emailing
  • Concise: 3-4 pages typical; each element adds value
  • Downloadable: ZIP or individual asset downloads

Timing

  • Update before: Launches, events, announcements
  • Keep current: Stale info damages credibility

Placement

  • Discoverable: Link in footer, About, or dedicated Press section
  • Clear label: "Press," "Media Kit," "For Journalists"

Output Format

  • Structure outline
  • Asset checklist (logos, brand guidelines, favicon, photos, bios)
  • Copy for company overview
  • Usage guidelines (allowed, requirements)
  • Contact for press inquiries
  • SEO: Often noindex; or index for "company name press" queries

Related Skills

  • press-coverage-page-generator: Aggregation of third-party coverage ("As Seen In"); media kit can link to it; distinct (media kit = assets for journalists; press coverage = social proof for visitors)
  • about-page-generator: Media kit extends About for press
  • contact-page-generator: Press contact info
  • customer-stories-page-generator: Press may reference case studies
  • logo-generator: Logo assets, placement rules; media kit hosts logo files
  • favicon-generator: Favicon for browser/app; media kit can link or include
  • brand-visual-generator: Typography, colors, spacing; brand guidelines document
  • indexing: noindex vs. index for press page
  • directory-submission: Media kit required for Product Hunt and directory submissions
指导在Medium平台进行SEO内容发布、优化及再发布的技能。涵盖原创与转载策略、规范链接设置、关键词优化及AI搜索可见性,利用Medium高域权快速排名。
用户希望撰写、发布或优化Medium文章 提及Medium SEO、canonical标签或分发策略 提到'Medium'、'Medium article'、'publish on Medium'等关键词
skills/kostja94_marketing-skills/medium/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill medium-posts -g -y
SKILL.md
Frontmatter
{
    "name": "medium-posts",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to write, publish, republish, or optimize posts on Medium.com (canonical tags, distribution, Medium SEO). Also use when the user mentions \"Medium,\" \"Medium article,\" \"Medium story,\" \"Medium publishing,\" \"canonical Medium,\" or \"publish on Medium.\" Not for general parasite SEO when Medium is not the target platform—use parasite-seo. For AI search visibility strategy, use generative-engine-optimization."
}

Platforms: Medium

Guides Medium publishing for parasite SEO and content distribution. Medium's domain authority helps content rank faster than on new sites; articles can reach page 1 within days. Use this skill when planning Medium content or republishing from your site.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 6 (Keywords), 11 (Content Strategy).

Identify:

  1. Content: Original or republish
  2. Canonical: If republish, set canonical to original URL
  3. Goal: Traffic, backlinks, AI citations

Why Medium for Parasite SEO

Benefit Detail
Fast rankings Page 1 within days vs months on own domain
Authority Leverages Medium's domain authority
AI-friendly Frequently cited in AI search results
Backlinks Traffic-generating articles attract links

Canonical Links

When republishing: Set canonical to your original URL in Medium settings. Prevents duplicate content penalties; signals original source.

Content Best Practices

  • Match intent: Keyword-focused; solve problem or answer question
  • Quality: Same quality as on your site
  • CTA: Link to relevant site pages; don't over-promote

Output Format

  • Title (keyword-optimized)
  • Structure (for original) or canonical setup (for republish)
  • Internal links to site
  • CTA placement

Related Skills

  • parasite-seo: Parasite SEO strategy; Medium as platform
  • article-page-generator: Article structure for republish
  • link-building: Medium as backlink source
  • grokipedia-recommendations: GEO; AI search visibility
指导Meta广告(FB/IG)的设置、优化与管理,涵盖Campaign结构、Advantage+自动化、受众定位及创意策略。适用于Meta Ads、Pixel、Conversions API等场景,提供从搭建到优化的全流程最佳实践。
设置或管理Meta广告 提及Meta Ads、Facebook Ads、Instagram Ads 配置Meta Pixel或Conversions API 使用Advantage+功能 创建lookalike audience或再营销
skills/kostja94_marketing-skills/meta-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill meta-ads -g -y
SKILL.md
Frontmatter
{
    "name": "meta-ads",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to set up, optimize, or manage Meta (Facebook\/Instagram) Ads. Also use when the user mentions \"Meta Ads,\" \"Facebook Ads,\" \"Instagram Ads,\" \"Meta Pixel,\" \"Conversions API,\" \"Advantage+,\" \"lookalike audience,\" or \"Meta retargeting.\" For landing pages, use landing-page-generator."
}

Paid Ads: Meta Ads

Guides Meta (Facebook/Instagram) Ads setup, campaign structure, audience targeting, and creative optimization. Meta excels at demand generation and visual products; use when creating demand or when creative assets are strong.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Campaign Structure

Hierarchy: Campaign → Ad Set → Ad (3 levels)

Principle: One objective per campaign. Multiple campaigns for the same objective split budget and data, slowing the algorithm's learning phase. Consolidate by objective; focus on clean structure and data-led decisions.

Account
├── Campaign: Prospecting
│   ├── Ad Set: Lookalike 1%
│   └── Ad Set: Broad (Advantage+)
├── Campaign: Retargeting
└── Campaign: Testing

Naming: META_[Objective]_[Audience]_[Offer]_[Date] (e.g., META_Conv_Lookalike-Customers_FreeTrial_2024Q1)

Advantage+ & Automation

Feature Use
Advantage+ Shopping Campaigns E-commerce; automatic audience discovery
Dynamic Ads Product catalog; auto-generated creative
Automatic Placements Let Meta optimize across Feed, Stories, Reels
Advantage+ Audience Broad targeting; algorithm finds converters

Provide diverse creative assets to enable multiple ad formats; algorithm performs better with variety.

Campaign Objectives

Objective Use when
Awareness Reach; brand recall
Traffic Clicks to site
Conversions Leads; sales; app installs
Engagement Video views; post engagement

Audience Targeting

Type Best for
Lookalikes Base on best customers (by LTV), not all customers
Interest/behavior Broad; let algorithm optimize
Advantage+ Automated; fewer manual controls
Retargeting Website visitors; engagers; custom audiences

Exclusions: Existing customers; recent converters (7–14d).

Creative Best Practices

  • Image: Clear product; before/after; human faces; text <20%
  • Video (15–30s): Hook 0–3s; problem 3–8s; solution 8–20s; CTA 20–30s
  • Placements: Feed (FB/IG); Stories/Reels; vertical for Stories
  • Volume: 3–5 ad variants per ad set for testing

Optimization

  • Learning phase: 50+ conversions per ad set per week to exit; avoid frequent changes during learning
  • CBO vs ABO: Campaign Budget Optimization consolidates spend; use when scaling
  • Frequency: <3 to avoid fatigue
  • Creative refresh: Plan continuous testing; creative fatigue is a main lever—refresh when performance drops

Tracking

  • Meta Pixel + Conversions API: Server-side for better attribution
  • Events API: App events; server-to-server

Pre-Launch Checklist

  • Pixel installed; Conversions API configured
  • Conversion events firing correctly
  • Landing page mobile-friendly; fast load
  • 3+ ad creatives per ad set
  • Audience exclusions set

Related Skills

  • paid-ads-strategy: Channel selection; creative frameworks; budget allocation
  • landing-page-generator: LP for paid traffic
  • analytics-tracking: Conversion tracking; ROAS
优化标题、描述及OG/Twitter之外的元标签,涵盖hreflang多语言、robots控制、视口和字符集。适用于特定关键词触发,需先评估项目上下文。
用户要求优化非标题/描述的meta标签 提及hreflang, meta robots, viewport, charset, canonical meta
skills/kostja94_marketing-skills/metadata/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill page-metadata -g -y
SKILL.md
Frontmatter
{
    "name": "page-metadata",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to optimize meta tags other than title, description, Open Graph, or Twitter Cards. Also use when the user mentions \"hreflang,\" \"meta robots,\" \"viewport,\" \"charset,\" \"canonical meta,\" \"other meta tags,\" \"meta robots noindex,\" \"meta robots nofollow,\" \"hreflang tags,\" \"viewport meta,\" or \"meta charset.\" For title tags, use title-tag. For meta descriptions, use meta-description. For Facebook\/LinkedIn previews, use open-graph. For X previews, use twitter-cards."
}

SEO On-Page: Metadata (Other Meta Tags)

Guides optimization of meta tags beyond title, description, Open Graph, and Twitter Cards. Covers hreflang, robots, viewport, charset, and metadata completeness.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (On-Page SEO)

  • Hreflang: Language/region targeting for multilingual sites
  • Meta robots: index/noindex, follow/nofollow (page-level)
  • Viewport: Mobile responsiveness
  • Charset: Character encoding
  • Metadata completeness: All pages have title + meta description (see title-tag, meta-description)

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for language/locale and indexing goals.

Identify:

  1. Multi-language: zh, en, x-default if applicable
  2. Indexing: Full index, noindex for specific pages
  3. Tech stack: Next.js, HTML, etc.

hreflang (Multi-language)

Three non-negotiables: (1) Self-referencing tags (each page links to itself), (2) Symmetric annotations (every version lists ALL others), (3) Valid ISO 639-1 or language-region codes (en, en-US, zh-CN).

Implementation methods: HTML <link> in head, XML sitemap (xhtml:link), or HTTP headers. For SPAs/JS-rendered pages, use sitemap-based hreflang as backup. See rendering-strategies for SSR/SSG/CSR.

Canonical alignment: Canonical URL must match the same regional version hreflang refers to. Misalignment causes Google to ignore hreflang.

x-default: Fallback for users whose language/location doesn't match any version. Point to default locale or language-selector page.

Next.js (App Router)

export const metadata = {
  alternates: {
    languages: {
      'en-US': '/en/page',
      'zh-CN': '/zh/page',
      'x-default': '/en/page',
    },
  },
};

HTML (generic)

<link rel="alternate" hreflang="en" href="https://example.com/en/page" />
<link rel="alternate" hreflang="zh" href="https://example.com/zh/page" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/page" />

Common Mistakes (Avoid)

  • Missing reciprocal references between language versions.
  • Canonical tag conflicting with hreflang.
  • Relying solely on machine translation without localization (see translation).
  • Ignoring mobile—hreflang must appear on both desktop and mobile.
  • Forgetting to update hreflang when page structure changes.

Meta Robots (Page-level)

Page-level control for indexing and link following. See indexing for which page types typically need noindex.

Directive Effect
noindex Exclude page from search results
nofollow Do not pass link equity through links on the page; does NOT prevent indexing
noindex,follow Exclude from SERP; allow crawlers to follow links (most common for thank-you, signup, legal)
noindex,nofollow Exclude + block link flow (login, staging, test pages)

Crawl vs index vs link equity: robots.txt = crawl control; noindex = index control; nofollow = link equity only. See robots-txt, indexing.

<meta name="robots" content="noindex, follow">

Next.js: metadata.robots = { index: false, follow: true }. Default is index: true, follow: true.

Viewport

<meta name="viewport" content="width=device-width, initial-scale=1">

Required for mobile-friendly pages; affects Core Web Vitals and mobile search. For full mobile-first indexing and mobile usability requirements, see mobile-friendly.

Charset

<meta charset="UTF-8">

Place in <head>; first child of <head> recommended.

Output Format

  • hreflang setup if multi-language
  • Meta robots if noindex needed
  • Viewport / charset if missing

Related Skills

  • title-tag, meta-description: Title and meta description
  • open-graph, twitter-cards: Social sharing; link previews
  • canonical-tag: Canonical + hreflang for multi-language
  • indexing: noindex page-type list; noindex vs nofollow
  • robots-txt: Crawl vs index; robots.txt vs noindex
  • mobile-friendly: Mobile-first indexing; viewport required
  • rendering-strategies: SSR, SSG, CSR; SPAs need sitemap-based hreflang
生成从竞品迁移到本产品的指南页面,降低用户切换摩擦。适用于创建、优化或审计迁移文档,涵盖数据导入步骤、常见问题及SEO优化,支持手动或自动迁移场景。
用户希望创建或优化从竞争对手产品迁移的指南 用户提及'migration guide'、'migrate from X'、'switch to [product]'、'import from X'或'data migration' 需要生成帮助SaaS或工具类用户转换平台的单页或多页内容
skills/kostja94_marketing-skills/migration/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill migration-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "migration-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit migration guides for users switching from competitors. Also use when the user mentions \"migration guide,\" \"migrate from X,\" \"switch to [product],\" \"import from X,\" or \"data migration.\" For rebrand and redirects, use rebranding-strategy."
}

Pages: Migration

Guides migration pages that help users switch from a competitor to your product. Reduces friction for switchers; often linked from alternatives pages. Common for SaaS, tools, and productivity apps.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, migration capabilities, and source platforms.

Identify:

  1. Source: Which competitor(s) to cover (Notion, Trello, etc.)
  2. Format: Single hub vs. per-competitor pages (/migrate-from-notion)
  3. Migration type: Manual import, automated tool, API
  4. Primary goal: Sign up, start migration, reduce churn risk

Page Structure

Section Purpose
Headline "Migrate from [Competitor] to [Product] in Minutes"
Why switch Brief; link to alternatives for full comparison
What transfers Data, structure, attachments; what's supported
Steps Numbered guide; screenshots or video
Troubleshooting Common issues, support link
CTA Start migration, try free, contact support

Best Practices

Clarity

  • Explicit steps: "1. Export from X. 2. Upload to [Product]. 3. Map fields."
  • Time estimate: "Takes ~10 minutes for most workspaces"
  • Data scope: What transfers; any limitations

Trust

  • No competitor bashing: Focus on your product's ease
  • Support: Offer help; link to docs, chat, email
  • Success stories: "10,000+ teams migrated from X"

SEO

  • Intent: Transactional; "migrate from X to Y"
  • Title: "Migrate from [Competitor] to [Product] | Step-by-Step Guide"
  • Internal links: Alternatives, features, pricing, docs

Output Format

  • Headline and intro
  • Step-by-step migration guide
  • Data transfer scope
  • Troubleshooting section
  • Internal links
  • SEO metadata

Related Skills

  • alternatives-page-generator: Link to migration from alternatives
  • docs-page-generator: Detailed migration docs
  • landing-page-generator: Migration as conversion page
  • faq-page-generator: Migration FAQ section
指导移动端优先索引优化和移动可用性修复。涵盖响应式设计、视口配置、内容一致性、结构化数据及AMP等关键SEO技术点,确保页面在移动设备上良好展示并符合Google排名标准。
用户希望优化移动端优先索引 修复移动设备可用性问题 提及'mobile-friendly'或'mobile SEO' 讨论响应式设计或视口设置 询问AMP或加速移动页面
skills/kostja94_marketing-skills/mobile-friendly/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill mobile-friendly -g -y
SKILL.md
Frontmatter
{
    "name": "mobile-friendly",
    "metadata": {
        "version": "1.1.2"
    },
    "description": "When the user wants to optimize for mobile-first indexing or fix mobile usability. Also use when the user mentions \"mobile-friendly,\" \"mobile-first indexing,\" \"mobile SEO,\" \"responsive design,\" \"mobile adaptation,\" \"mobile viewport,\" \"viewport meta,\" \"touch targets,\" \"font size mobile,\" \"AMP,\" or \"Accelerated Mobile Pages.\" For viewport meta, use page-metadata."
}

SEO Technical: Mobile-Friendly

Guides mobile-first indexing optimization and mobile usability. Google uses the mobile version of pages for indexing and ranking; mobile-friendliness is a ranking factor.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (Technical SEO)

  • Mobile-first indexing: Google primarily crawls and indexes mobile version
  • Mobile adaptation: Responsive design, viewport, breakpoints
  • Content parity: Mobile and desktop content should match (or mobile preferred)
  • Mobile usability: Viewport, font size, touch targets, no intrusive interstitials
  • AMP: Accelerated Mobile Pages—status and when to consider

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site URL.

Identify:

  1. Site type: Responsive, separate AMP, dynamic serving
  2. Content parity: Does mobile show same content as desktop?
  3. Tools: GSC Mobile Usability report; Mobile-Friendly Test

Mobile-First Indexing Requirements

Requirement Action
Content parity Mobile version must include same primary content as desktop; avoid hiding key content on mobile
Structured data Same schema on mobile and desktop; ensure mobile URLs in schema
Metadata Same title, meta description on mobile
Media Images should be crawlable; avoid lazy-loading above-fold images

Responsive Design & Mobile Adaptation

Responsive design = Single HTML; CSS media queries adapt layout to screen size. Preferred for SEO: one URL, no duplicate content.

Principle Practice
Mobile-first Design for mobile first; enhance for desktop
Fluid layout Use %, vw, flex, grid; avoid fixed pixel widths
Breakpoints Common: 320px, 768px, 1024px, 1280px; match device widths
Images Responsive images (srcset, sizes); see image-optimization

Viewport

The viewport meta tag tells browsers how to scale and size the page on mobile. Required for mobile-friendly pages.

<meta name="viewport" content="width=device-width, initial-scale=1">
Attribute Purpose
width=device-width Match viewport to device screen width
initial-scale=1 1:1 scale on load; prevents zoom
maximum-scale Avoid disabling zoom (accessibility)
user-scalable=no Avoid—hurts accessibility

Without viewport: Desktop layout shrunk; horizontal scroll; fails Mobile-Friendly Test. See page-metadata.

Mobile Usability Checklist

Element Guideline
Viewport See above; required for mobile-friendly
Font size 16px minimum for body text; avoid zooming to read
Touch targets Buttons/links ≥48×48px; adequate spacing between taps
Content width No horizontal scrolling; content fits viewport
Intrusive interstitials Avoid popups that block main content on mobile

Common Issues

Issue Fix
Content hidden on mobile Show critical content; avoid accordion/tabs for primary content
Flash / unsupported Replace with HTML5 alternatives
Text too small Use base font ≥16px; avoid font-size in px <12
Links too close Increase tap target size; add padding

Responsive vs. Separate URLs

Approach When Note
Responsive Preferred Single URL; same HTML, CSS media queries
Dynamic serving Same URL, different HTML by user-agent Ensure mobile content parity
Separate URLs m.example.com Use canonical + hreflang; see canonical-tag, page-metadata

Accelerated Mobile Pages (AMP)

AMP is a web component framework for fast-loading pages. Status (2024–2025): Still supported; no longer required for Top Stories or ranking.

Aspect Note
Ranking No ranking advantage over well-optimized responsive pages
Top Stories AMP no longer required since 2021; Core Web Vitals suffice
When to consider News sites, ad-heavy pages, very slow hosting—but responsive + CWV usually better
Alternative Responsive design + core-web-vitals optimization; SSR/SSG; see rendering-strategies

Recommendation: For most sites, prioritize responsive design and Core Web Vitals over AMP. AMP adds maintenance (separate AMP HTML); modern optimization offers similar performance with more flexibility.

Output Format

  • Mobile Usability status: Pass/fail from GSC or Mobile-Friendly Test
  • Responsive / viewport: Check viewport meta; breakpoints; fluid layout
  • Content parity: Mobile vs desktop content check
  • AMP: Only if legacy or specific use case
  • Fixes: Prioritized by impact

Related Skills

  • page-metadata: Viewport meta tag; required for mobile
  • core-web-vitals: CWV measured on mobile; replaces AMP for Top Stories; LCP, INP, CLS
  • canonical-tag: Separate mobile URLs; hreflang for mobile
  • image-optimization: Responsive images; mobile LCP
  • rendering-strategies: SSR/SSG for fast mobile load
  • google-search-console: Mobile Usability report
针对拥有多个域名的企业,优化品牌搜索排名,确保主域名在品牌查询中优先展示。通过枢纽-辐条模型区分主站与产品站的定位、关键词及内容,避免内部竞争,提升品牌认知与SEO效果。
用户希望优化多域名公司的品牌搜索排名 提及“品牌搜索”、“多域名SEO”、“公司域名优先”或“枢纽-辐条域名结构”
skills/kostja94_marketing-skills/multi-domain-brand-seo/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill multi-domain-brand-seo -g -y
SKILL.md
Frontmatter
{
    "name": "multi-domain-brand-seo",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to optimize brand search for a company with multiple domains (e.g. parent company.com vs product.ai). Ensure the parent\/company domain ranks first for brand queries. Also use when the user mentions \"brand search,\" \"multi-domain SEO,\" \"company domain first,\" \"parent vs product domain,\" \"hub-spoke domain,\" \"brand SERP control,\" or \"differentiate company and product domains.\" For domain structure, use domain-architecture."
}

SEO: Multi-Domain Brand Search

When a company has multiple domains (e.g., company.com and product.ai), ensure the company/main site ranks first for brand queries. Product sites focus on product keywords and do not compete for brand position. See domain-architecture for structure decisions; rebranding-strategy for domain change and migration.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Typical Scenarios

Scenario Description
Multiple domains Company main site (company.com), product site (product.ai / product.io)
Brand query competition Product site or third-party (Crunchbase, LinkedIn, reviews) may outrank main site for brand
Entity confusion Legacy brands, sub-brands, directories dilute brand perception
Goal Brand queries → company.com first; product.ai → product keywords only

Hub-Spoke Model

Role Domain Responsibility
Hub company.com Brand #1; About, Research, ecosystem, product matrix
Spoke product.ai Product keywords, features, pricing; visible "by [Company]" and link back to company.com

Differentiation

Dimension Hub (company.com) Spoke (product.ai)
Audience Investors, partners, media, developers Product users, prospects
Keywords Brand name, company name, industry Product features, use cases
Content Mission, About, Research, Events, product matrix Features, Use Cases, Pricing, Sign up
Conversion Contact, Waitlist, Early Access Sign up, Try free, Pricing

Avoid Cannibalization

  • Hub does not target Spoke product keywords (e.g., "virtual staging," "AI design tool")
  • Spoke does not target Hub brand keywords (Title avoids brand-only; add product description)
  • Internal links: Hub → Spoke (Products); Spoke → Hub (About, Footer)

Optimization Checklist

Hub (company.com) On-Page

Item Recommendation
Title Company full name + positioning, e.g. [Company] — [Slogan] | AI Research & Products
Meta Description Company name, core business, partners; 150–160 chars
H1 Company name or main slogan
URL Canonicalize www vs non-www (301)

Hub Content & Structure

Item Recommendation
About Company intro, founders, founding date, positioning; link to product sites
Products Product matrix; each product links to its site
Research / News Papers, events, partnerships; increase brand mentions
FAQ "What is [Company]?" "What is [Product]?"; FAQ schema

Spoke (product.ai) Differentiation

Item Recommendation
Title Product name + product description, e.g. [Product] — [Core function] or [Product keyword] | [Product]; avoid brand-only
About "A product of Company"
Footer "© [Company]" or "A [Company] Product" + link to company.com
Schema SoftwareApplication with author or publisher pointing to Company

Schema (Hub)

Use Organization schema with subOrganization to define product relationships:

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "[Company Name]",
  "url": "https://www.company.com",
  "description": "[Company description]",
  "sameAs": ["https://linkedin.com/company/...", "https://github.com/..."],
  "subOrganization": [
    {
      "@type": "SoftwareApplication",
      "name": "[Product Name]",
      "url": "https://product.ai",
      "applicationCategory": "[Category]"
    }
  ]
}

Entity & Knowledge Panel

See entity-seo for full entity optimization. Key for multi-domain:

  • Consistency: Same brand name, description, logo across Hub and Spoke
  • Entity Home: Authoritative About page on Hub as primary reference
  • Knowledge Panel: Claim via Google; suggest updates when available

Output Format

  • Hub vs Spoke mapping (domains, roles)
  • On-page checklist (Hub and Spoke)
  • Schema (Organization with subOrganization)
  • Internal linking plan
  • Cannibalization check

Related Skills

  • domain-architecture: Hub-Spoke structure; when to use multiple domains
  • schema-markup: Organization, SoftwareApplication; subOrganization
  • serp-features: Knowledge Panel, Sitelinks; brand SERP
  • entity-seo: Entity & Knowledge Panel; Organization schema; consistency
  • rebranding-strategy: Domain change; 301 redirects during transition
指导在Taboola、Outbrain等平台投放原生广告。涵盖平台概览、创意测试、文案规范及漏斗策略,提供标题、图片、落地页对齐建议及预算规划,适用于原生广告策划与优化。
用户希望运行原生广告 提及 Taboola 提及 Outbrain 提及内容推荐 提及赞助内容 提及信息流广告
skills/kostja94_marketing-skills/native-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill native-ads -g -y
SKILL.md
Frontmatter
{
    "name": "native-ads",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to run native ads on Taboola, Outbrain, or similar platforms. Also use when the user mentions \"native ads,\" \"Taboola,\" \"Outbrain,\" \"content recommendation,\" \"sponsored content,\" or \"in-feed ads.\" For strategy, use paid-ads-strategy."
}

Paid Ads: Native Ads

Guides native advertising on Taboola, Outbrain, and content recommendation networks. Native ads blend with publisher content and achieve ~18% higher CTR than display banners. Use this skill when planning or optimizing native ad campaigns.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 3 (Value Proposition), 4 (Audience).

Identify:

  1. Goal: Traffic, leads, brand
  2. Content: Article, landing page, video
  3. Budget: Min $500–1,000; better at $5,000+

Platform Overview

Platform Reach Focus
Taboola 500M+ daily impressions Premium publishers; AI matching
Outbrain Major publishers Top-funnel; helpful content

Pricing: CPC $0.10–0.30 avg; CPM $1–3 avg.

Creative Testing

Approach Guideline
Combinations 3 headlines × 3 images = 9 variants; test together
Image variety Headshot, product, illustration—distinct styles
Advertorials Test length, tone, aggressiveness; no universal formula

Copywriting Guidelines

Rule Guideline
Honest Avoid clickbait; match copy to content
Format Match character limits; respect UX per format
Tone Soft-sell; nurture, don't push

Funnel Focus

Target high-intent users in consideration and conversion stages; avoid one-size-fits-all funnel approach.

Output Format

  • Headline options (2–3)
  • Image guidance
  • Landing page alignment
  • Budget recommendation

Related Skills

  • display-ads: Display vs native; programmatic
  • copywriting: Headline, ad copy
  • landing-page-generator: Landing page for native traffic
  • paid-ads-strategy: Channel selection
用于设计、优化或审计网站导航菜单的技能,涵盖SEO、UX和可访问性最佳实践。支持多种触发词如nav menu、mega menu等,提供结构建议、HTML/ARIA规范及检查清单,辅助构建高效导航。
用户想要设计网站导航菜单 用户希望优化现有导航结构 用户请求审计菜单的可访问性或SEO表现 提及'navigation', 'nav menu', 'header menu', 'site structure', 'menu design', 'navbar', 'main menu', 'mega menu', 'dropdown menu', 'mobile menu', 'hamburger menu'
skills/kostja94_marketing-skills/navigation-menu/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill navigation-menu-generator -g -y
SKILL.md
Frontmatter
{
    "name": "navigation-menu-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to design, optimize, or audit site navigation menus. Also use when the user mentions \"navigation,\" \"nav menu,\" \"header menu,\" \"site structure,\" \"menu design,\" \"navbar,\" \"main menu,\" \"mega menu,\" \"dropdown menu,\" \"mobile menu,\" or \"hamburger menu.\" For breadcrumbs, use breadcrumb-generator."
}

Components: Navigation Menu

Guides navigation menu design for SEO, UX, and accessibility. Navigation helps users find content and signals site structure to search engines.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for key pages and audience.

Identify:

  1. Site structure: Main sections, hierarchy
  2. Primary goals: Conversion paths, key pages
  3. Platform: Web, mobile, both

Structure & Organization

Menu Size

  • Primary nav: 7-9 items; avoid overwhelming users
  • Sub-navigation: Up to 2 levels; deeper topics in sub-menus
  • Pattern: Horizontal top nav or vertical side nav; avoid novel patterns

Hierarchy

  • Reflect sitemap structure; need not match exactly
  • Prioritize what visitors need most
  • Logical grouping by topic or task

SEO Best Practices

Practice Purpose
Semantic HTML <nav>, <ul>, <li>; proper landmark roles
Descriptive anchor text Target keywords; avoid "Click here"
Text links Prefer text over images; crawlers need readable links
Initial render All nav HTML in first paint; no JS-only menus for critical links. See rendering-strategies
Visible links Prefer visible over hidden; helps crawlers understand structure

Crawlability

  • Sub-menus: Ensure HTML is in DOM (e.g., CSS-hidden, not JS-injected)
  • Footer nav: Include secondary links
  • Breadcrumbs: See breadcrumb-generator for implementation

UX Guidelines

Visibility & Location

  • Desktop: Visible nav; avoid hiding behind hamburger when space allows
  • Expected placement: Primary nav in header; footer nav at bottom
  • Current location: Indicate active page/section in menu

Accessibility

Requirement Practice
Labels Clear, intuitive wording
Contrast 4.5:1 for link text
Touch targets >=44x44px; adequate spacing
Keyboard Full keyboard navigation; focus visible
Screen readers Proper ARIA; skip links for long menus

Design

  • Simple, clear; avoid covering entire screen with open menus on desktop
  • Consistent across pages
  • Mobile: Hamburger acceptable; ensure menu is usable when open

Output Format

  • Structure (primary items, sub-items)
  • Anchor text suggestions
  • HTML/ARIA notes
  • SEO checklist
  • Accessibility checklist

Related Skills

  • website-structure: Plan structure and nav hierarchy; nav reflects planned sections
  • xml-sitemap: Nav should reflect discoverable pages
  • internal-links: Nav is primary internal linking
  • site-crawlability: Nav affects crawl paths
  • category-page-generator: Category hierarchy in nav
  • footer-generator: Footer nav complements header nav
  • logo-generator: Logo typically sits in header with nav
  • breadcrumb-generator: Breadcrumb navigation; BreadcrumbList schema
  • rendering-strategies: Nav in first paint; no JS-only menus
指导邮件订阅表单的设计、优化与审计,涵盖字段精简、价值主张、布局选择及无障碍标准,旨在提升转化率并促进列表增长。
设计或优化邮件订阅表单 审计现有订阅组件 用户提及 newsletter, email signup, subscribe form, email capture, lead magnet 等关键词
skills/kostja94_marketing-skills/newsletter-signup/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill newsletter-signup-generator -g -y
SKILL.md
Frontmatter
{
    "name": "newsletter-signup-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to design, optimize, or audit newsletter signup forms. Also use when the user mentions \"newsletter,\" \"email signup,\" \"subscribe form,\" \"email capture,\" \"lead magnet,\" \"newsletter form,\" \"email opt-in,\" \"subscribe CTA,\" \"newsletter signup,\" or \"email list building.\" For email strategy, use email-marketing."
}

Components: Newsletter Signup

Guides newsletter signup form design for list growth. Email subscribers spend 138% more than non-subscribers; top popups convert at 23%+.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for audience and value proposition.

Identify:

  1. Placement: Header, footer, popup, inline, sidebar
  2. Incentive: What subscribers receive
  3. Platform: Web, mobile, both

Form Design

Minimal Fields

  • Email only when possible; highest conversion
  • Add name only if needed for personalization
  • Wrong number of fields significantly impacts conversion

Value Proposition

  • Clear: what subscribers receive, how often
  • Transparent: avoid disappointing subscribers
  • Incentive: lead magnet, discount, exclusive content

Visual Design

  • Clearly clickable submit button
  • Mobile-first; responsive layout
  • Appropriate input types (e.g., type="email" for mobile keyboards)
  • Trust marks or security indicators

Placement

Placement Best For Pros Cons
Header High visibility Always visible Limited space
Footer Secondary capture Non-intrusive Lower visibility
Footer bar Persistent Sticky Can annoy
Popup High intent High conversion Intrusive
Inline Content pages Contextual Depends on scroll
  • Avoid hiding forms behind unclicked buttons/links
  • Don't place competing forms nearby

Accessibility

Requirement Practice
Labels <label> for each input; for/id association
Placeholders Don't replace labels; supplement only
Error messages Clear, associated with field
Keyboard Full tab order; submit via Enter
Touch targets ≥44×44px for submit button

Technical

  • Validation: Client-side; server-side required
  • Privacy: Link to privacy policy; GDPR/CCPA compliance
  • Double opt-in: When required by jurisdiction or best practice

Output Format

  • Form structure (fields, copy)
  • Placement recommendation
  • Value proposition suggestions
  • Accessibility checklist

Related Skills

  • signup-login-page-generator: Full account signup; form design principles apply
  • landing-page-generator: Lead capture landing page contains signup form; LP exchanges value for email
  • email-marketing: Full email marketing strategy; EDM, newsletter, deliverability, content types
  • footer-generator: Footer often hosts signup forms
  • cta-generator: Submit button is a CTA
  • trust-badges-generator: Trust marks near form
指导为网页添加或优化 Open Graph 元数据以改善社交媒体分享预览。涵盖 Facebook、LinkedIn 等平台的必备标签规范、图片最佳实践及 Next.js/HTML 实现方案,提升点击率。
用户希望添加或优化 Open Graph 元数据 提及 Open Graph, og:tags, og:title, og:image, og:description, Facebook preview, LinkedIn preview, social share preview
skills/kostja94_marketing-skills/open-graph/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill open-graph -g -y
SKILL.md
Frontmatter
{
    "name": "open-graph",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to add or optimize Open Graph metadata for social sharing. Also use when the user mentions \"Open Graph,\" \"og:tags,\" \"og:title,\" \"og:image,\" \"og:description,\" \"Facebook preview,\" \"LinkedIn preview,\" or \"social share preview.\" For X (Twitter) link previews, use twitter-cards. For SERP title\/description, use title-tag and meta-description."
}

SEO On-Page: Open Graph

Guides implementation of Open Graph meta tags for social media previews (Facebook, LinkedIn, Slack, Discord, etc.). Pages with proper OG tags get 2–3× more clicks than bare URL links.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (Social Sharing)

  • Open Graph: Facebook-originated protocol; controls preview card when links are shared on social platforms

The 4 Essential Tags

Every shareable page requires these minimum tags:

<meta property="og:title" content="Your Page Title">
<meta property="og:description" content="Your description">
<meta property="og:image" content="https://yourdomain.com/image.png">
<meta property="og:url" content="https://yourdomain.com/page">
Tag Guideline
og:title Keep under 60 chars; compelling; match page content
og:description 150–200 chars; conversion-focused
og:image Absolute URL (https://); 1200×630px recommended
og:url Canonical URL; deduplicates shares

Recommended Additional Tags

Tag Purpose
og:type Content type: website, article, video, product
og:site_name Website name; displayed separately from title
og:image:width / og:image:height Image dimensions (1200×630px)
og:image:alt Alt text for accessibility
og:locale Language/territory (e.g., en_US); for multilingual sites

Image Best Practices

Item Guideline
Size 1200×630px (1.91:1 ratio) for Facebook, LinkedIn, WhatsApp
Format JPG, PNG, WebP; under 5MB
URL Absolute URL with https://; no relative paths
Unique One unique image per page when possible

Common Mistakes

  • Using relative image URLs instead of absolute https://
  • Images too small or wrong aspect ratio
  • Empty or placeholder values
  • Missing og:url (canonical)

Implementation

Next.js (App Router)

export const metadata = {
  openGraph: {
    title: '...',
    description: '...',
    url: 'https://example.com/page',
    siteName: 'Example',
    images: [{ url: 'https://example.com/og.jpg', width: 1200, height: 630, alt: '...' }],
    locale: 'en_US',
    type: 'website',
  },
};

HTML (generic)

<meta property="og:title" content="Your Title">
<meta property="og:description" content="Your description">
<meta property="og:image" content="https://example.com/og.jpg">
<meta property="og:url" content="https://example.com/page">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Your Site">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Alt text">

Testing

Related Skills

  • social-share-generator: Share buttons use OG tags for rich previews when users share; OG must be set for share buttons to show proper cards
  • article-page-generator: Use og:type article for article/post pages; article-specific tags (published_time, author)
  • page-metadata: Hreflang, other meta tags
  • title-tag: Title tag often mirrors og:title
  • meta-description: Meta description often mirrors og:description
  • twitter-cards: Twitter uses OG as fallback; add Twitter-specific tags for best results
  • canonical-tag: og:url should match canonical URL
指导开源商业化策略,涵盖开放核心、托管服务等模式。通过构建社区与信任实现早期增长,利用GitHub优化和DevHunt等目录提交进行开发者分发,最终通过企业功能或云服务变现。
用户咨询开源商业化路径 提及开放核心(Open Core)或COSS模式 询问GitHub明星数策略或开发者工具推广 讨论Llama、Dify、Cursor等案例的商业化 寻求开源增长或营销建议
skills/kostja94_marketing-skills/open-source/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill open-source-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "open-source-strategy",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants open source strategy, OSS commercialization, or open source growth. Also use when the user mentions \"open source strategy,\" \"OSS strategy,\" \"open source commercialization,\" \"open source to paid,\" \"open core,\" \"COSS,\" \"commercial open source,\" \"GitHub stars strategy,\" \"DevHunt,\" \"open source marketing,\" \"open source growth,\" \"Llama,\" \"Dify,\" \"Cursor,\" \"open source business model,\" or \"developer tools directory.\" For GitHub tactics, use github."
}

Strategies: Open Source

Guides open source as a commercialization path: build community and trust first, monetize later. Many products use open source for early growth (Cursor from VSCode, Llama, Qwen, Dify) and later commercialize via managed services or open core. For GitHub (SEO, GEO, README, Awesome lists), see github. For directory submission (DevHunt, Awesome lists), see directory-submission.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Definition & Why

Open source strategy = Use open source for distribution, trust, and community; monetize through enterprise features, managed services, or support. 95% of enterprises use open source; 33% increasing usage. Community becomes your marketing force—users self-host, contribute, and recommend.

Path Example
Open source → Commercial product Cursor (VSCode fork); Llama, Qwen (enterprise/cloud)
Open core → Managed service Dify (self-host free + cloud paid); MongoDB Atlas; Confluent

Core insight: Brand is the moat when code is commoditized. Developers won't pay directly; they become your marketing army through word-of-mouth, content, and recommendations.

Business Models

Model Description Examples
Open Core Core free; enterprise features (SSO, audit, multi-tenancy) paid GitLab, Elastic, Grafana
Managed Services (SaaS) Self-host free; cloud/hosted paid MongoDB Atlas, Confluent, Dify
Support-First Free software; enterprise support subscriptions Red Hat
Free + Paid Convenience 70–80% revenue from cloud; self-host free Most COSS companies

Monetization layer: Enterprise users buy risk mitigation—SLAs, indemnification, security patches, support—not just code.

Developer-First Distribution

GitHub (Primary)

GitHub is the main hub for open source discovery. Optimize for visibility and conversion.

Element Purpose Skill
README Landing page; answer-first GEO; installation, usage github
About, Topics Discovery, keywords; 6–20 topics; 350-char About github
Stars Trending status; credibility; search visibility GitHub + coordinated launch
Awesome lists Curated lists; backlinks; discovery github, directory-submission

Stars strategy: Stars without strategy are vanity metrics. Coordinate multi-channel launch (HN, Reddit, Dev.to); Tuesday–Wednesday US Pacific morning often outperforms. Quality README and clear value proposition matter more than channel volume.

DevHunt (Developer Tools Directory)

DevHunt is an open-source platform for developer tools—alternative to Product Hunt, built for developers. Naturally aligned with open source projects.

Aspect Detail
Audience Developers, indie makers, open source maintainers
Content Dev tools, APIs, libraries, open source projects
Features GitHub-verified submissions; 50+ categories; free to submit
Use when Open source or developer tool; want dev-focused discovery

Submission: Prepare product info (name, tagline, description, category, GitHub URL). See directory-submission for submission workflow and asset preparation.

GitHub Marketplace

For extensions, actions, integrations. See distribution-channels for marketplace listing strategy.

Community & Trust

Practice Guideline
Build in Public Share progress, metrics, failures; attracts early adopters
Contributing CONTRIBUTING.md; clear contribution path
Transparency Roadmap, changelog; community involvement in planning
Commercialization Preserve goodwill; communicate early; keep investing in OSS

Community benefits: Organic word-of-mouth; user-generated content (SEO); free QA via bug reports; contribution activity signals project health.

Licensing (Brief)

License Use Trade-off
MIT, Apache 2.0 Permissive; max adoption Cloud giants can fork without contributing
AGPL Prevent cloud fork without contribution May reduce adoption
BSL/SSPL Source-available; commercial restrictions Elastic, HashiCorp, Redis Labs shifted to this

Related Skills

  • github: GitHub README, About, Topics, Awesome lists; SEO, GEO, parasite SEO
  • directory-submission: DevHunt, Awesome lists; submission workflow per platform
  • parasite-seo: GitHub as high-authority platform
  • generative-engine-optimization: GEO; AI citation for technical content
  • indie-hacker-strategy: Build in Public; bootstrapped founder path
  • distribution-channels: GitHub Marketplace, plugin stores
  • link-building: Backlinks from repos, Awesome lists
  • community-forum: Forums, Discord, community tactics
指导Pinterest Pin创建、描述优化及账号增长。涵盖标题与描述SEO技巧、Board策略及2025算法要点,提供标准化输出格式以最大化流量和转化。
用户希望创建Pinterest Pins 需要优化Pin描述或提升Pinterest存在感 提及Pinterest SEO、Pin、Pinterest description、Pinterest board或Pinterest marketing
skills/kostja94_marketing-skills/pinterest/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill pinterest-posts -g -y
SKILL.md
Frontmatter
{
    "name": "pinterest-posts",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create Pinterest Pins, optimize Pin descriptions, or grow Pinterest presence. Also use when the user mentions \"Pinterest,\" \"Pin,\" \"Pinterest SEO,\" \"Pinterest description,\" \"Pinterest board,\" or \"Pinterest marketing.\" For asset specs, use visual-content."
}

Platforms: Pinterest

Guides Pinterest Pin creation and optimization. Pinterest users search differently than Google; long-tail keywords like "easy fall dinner recipes" perform better than broad terms. Use this skill when creating Pins, optimizing boards, or planning Pinterest content.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 6 (Keywords), 11 (Content Strategy).

Identify:

  1. Content type: Product, recipe, tutorial, inspiration
  2. Board: Where Pin will be saved first (shapes Pinterest's understanding)
  3. Goal: Traffic, sales, email signups

Pin Title

Rule Guideline
Length Up to 100 chars; first 40 visible in feeds
Keyword Primary keyword in first 40 chars
Business name In first sentence → 54% higher email signup conversion

Pin Description

Rule Guideline
Length 220–232 chars optimal
Keywords Main + 2–3 related; natural placement
CTA Clear, actionable → 70% signup boost, 6% sales lift
Price When relevant → 28% sales increase

Board SEO

  • Board name and description are ranking factors
  • First save board shapes Pinterest's content understanding
  • Use keywords in board title and description

2025 Algorithm Notes

  • Fresh content: New URL + new image + new board = max distribution
  • Alt text: Pins with alt text earn ~25% more impressions, 123% more clicks
  • Consistency: Keyword-optimized content to relevant boards

Output Format

  • Title (under 100 chars)
  • Description (220–232 chars)
  • Board recommendation
  • Alt text suggestion

Related Skills

  • content-marketing: Pinterest as channel
  • display-ads: Pinterest Ads (if paid)
  • visual-content: Cross-channel visual planning; Pinterest Pin specs in context
  • url-slug-generator: URL for landing page
用于验证和衡量产品市场契合度(PMF)的策略技能。涵盖Sean Ellis测试、区分止痛药与维生素问题、关键指标评估及常见失败陷阱,旨在指导产品在扩张前进行有效验证。
用户想验证产品市场契合度 用户提到PMF或product-market-fit 用户询问Sean Ellis测试 用户讨论very disappointed反馈 用户区分vitamin vs painkiller 用户计划扩张前的验证
skills/kostja94_marketing-skills/pmf/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill pmf-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "pmf-strategy",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to validate product-market fit, measure PMF, or plan before scaling. Also use when the user mentions \"PMF,\" \"product-market fit,\" \"product market fit,\" \"Sean Ellis test,\" \"very disappointed,\" \"vitamin vs painkiller,\" \"PMF validation,\" \"premature scaling,\" or \"validate before scale.\" For GTM after validation, use gtm-strategy."
}

Strategies: Product-Market Fit

Guides product-market fit (PMF) validation and measurement. PMF occurs when a product precisely meets market needs, creating widespread demand. ~99% of startups fail primarily due to PMF issues (vitamin problems, premature scaling). Use this skill when validating before scaling, measuring PMF, or diagnosing traction problems.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Definition

Product-market fit (Marc Andreessen): "Being in a good market with a product that can satisfy that market."

Signals: Customers buying rapidly; usage growing; word-of-mouth spreading organically; high retention, low churn.

Sean Ellis 40% Test

Question: "How would you feel if you could no longer use [product]?"

Response Meaning
Very disappointed Strong PMF signal
Somewhat disappointed
Not disappointed
N/A – I no longer use

Threshold: 40%+ answering "very disappointed" = PMF achieved. Below 40% = iterate.

Score Action
Below 25% Significant changes needed
25–39% Close to PMF; iterate and improve
40%+ PMF achieved

Best practice: Survey 40–50 active users (used product 2+ times in last 14 days). Segment by user type—some segments may have PMF while others don't.

Limitation: Combine with retention curves, engagement, organic growth; avoid false positives in early stages.

Vitamin vs Painkiller

Type Definition Adoption
Painkiller Solves urgent, acute problems; users actively seek solutions Fast adoption; high retention; willing to pay
Vitamin Nice-to-have; incremental benefit; users can live without Slow adoption; expensive marketing to succeed

~99% of failures: Solving vitamin problems instead of real pain. Validate: Would users be genuinely inconvenienced if your product vanished?

Validation: Talk to users; listen for frustration; run pre-sells; check frequency and time-sensitivity of the problem.

Key Indicators

Indicator Strong PMF
Retention High; low churn
CAC vs CLTV CAC decreasing relative to CLTV
Activation Strong conversion to paying customers
Growth Organic; word-of-mouth
NPS High; enthusiastic advocacy

Common Failures

Failure Avoid
Vitamin problems Solve urgent pain, not nice-to-have
Vanity feedback Use retention data, not polite opinions
Premature scaling Validate PMF before scaling acquisition
Misalignment Customer-problem fit before product-build

Product Research & SaaS Context

Area Notes
Product positioning Target audience; core value; competitive differentiation
Market research Competitor analysis; surveys; interviews to validate assumptions
SaaS form Cloud delivery; subscription; ease of use; dependency on industry standardization
Enterprise / ACV Customization; data security/private deployment; procurement cycles; buy vs SaaS trade-offs

Use: When discussing PMF for SaaS or enterprise—factor in product research rigor and ACV-specific challenges. See gtm-strategy for enterprise GTM.

PMF as Continuous Process

PMF is increasingly a continuous validation—markets evolve; re-measure as you expand. Target "PMF for a niche" first (40%+ in one segment) before broadening.

Output Format

  • PMF assessment (current signals, Sean Ellis score if available)
  • Vitamin vs Painkiller diagnosis
  • Validation approach (interviews, pre-sells, metrics)
  • Next steps (iterate vs scale)

Related Skills

  • cold-start-strategy: First users; avoid large-scale paid before PMF
  • indie-hacker-strategy: Indie hacker PMF; monetize day one; Ramen profitability
  • paid-ads-strategy: PMF testing (small budget) vs conversion-driven (post-PMF)
  • google-ads: PMF testing with landing page + $47–500
  • gtm-strategy: GTM framework; PMF validation before scaling GTM
  • product-launch: Launch execution; validate PMF before scaling
  • retention-strategy: Retention as PMF signal; churn as anti-signal
提供播客全生命周期指导,涵盖策略制定、内容创作、SEO优化、多渠道分发及内容复用。解决高竞争环境下的发现难题,通过文本索引和跨平台推广提升播客可见度与听众增长。
用户希望规划、创建或营销播客 提及播客策略、播客SEO、节目说明、播客分发 提及Spotify播客、Apple Podcasts、播客可发现性 提及PodcastEpisode schema或播客内容复用
skills/kostja94_marketing-skills/podcast/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill podcast-marketing -g -y
SKILL.md
Frontmatter
{
    "name": "podcast-marketing",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to plan, create, or market a podcast. Also use when the user mentions \"podcast,\" \"podcast strategy,\" \"podcast SEO,\" \"show notes,\" \"podcast distribution,\" \"Spotify podcast,\" \"Apple Podcasts,\" \"podcast discoverability,\" \"PodcastEpisode schema,\" or \"podcast repurposing.\" For show notes, use article-content."
}

Content: Podcast

Guides podcast strategy, content creation, distribution, marketing, and SEO. Podcasts compete in a crowded space (3M+ active shows, 500M+ listeners globally); discoverability is the primary challenge. Discovery channels: ~32% search engines, ~28% podcast apps, ~24% social media, ~16% word-of-mouth.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read for audience, positioning, and content strategy.

Identify:

  1. Stage: Planning, launching, growing
  2. Format: Interview, solo, co-hosted, narrative
  3. Niche: Target audience, listener personas
  4. Goals: Downloads, authority, lead gen, repurposing

Content Strategy

Element Guideline
Niche focus Define audience through listener personas; tailored content cuts through noise
Quality over gimmicks Sticky, unique, valuable content; most hosts see major growth after 5–6 months of consistency
Episode structure Intro, main content, CTA; consistent format aids retention

Distribution & Discovery

Channel Share Optimization
Search engines ~32% Transcripts, show notes, SEO-optimized titles/descriptions
Podcast apps ~28% Title, description, cover art; category selection
Social media ~24% Clips, quotes, repurposed content
Word-of-mouth ~16% Cross-promotion, guest appearances

Multi-channel: Repurpose across platforms to multiply discovery surface.

SEO for Podcasts

Search engines cannot listen to audio. Text-based content is essential:

Element Guideline
Transcripts Full or key-moment transcripts; indexable, accessible
Show notes SEO-optimized; pull organic search traffic; include keywords naturally
Titles ≤60 chars; keywords; engaging language
Descriptions Episode-specific; keywords; voice-search friendly
Backlinks Build links to show notes, guest posts, directory listings

Schema: Use PodcastEpisode and PodcastSeries for rich results. See schema-markup for implementation.

Cross-Promotion & Partnerships

Tactic Use
Feed drops Swap episodes with similar-sized podcasts
Ad swaps Promote each other's shows
Guest appearances Tap into pre-existing engaged audiences

Repurposing

Format Use
Clips Short-form for social (TikTok, YouTube Shorts, X)
Blog posts Expand show notes; pillar content
Newsletter Episode summaries, key takeaways
Quotes Pull quotable moments for social

Output Format

  • Strategy (niche, format, distribution mix)
  • SEO checklist (transcripts, show notes, schema)
  • Launch checklist (cover art, description, category, RSS)
  • Repurposing plan (clips, blog, newsletter)

Related Skills

  • schema-markup: PodcastEpisode, PodcastSeries schema
  • video-marketing: Video content; podcast-to-video repurposing
  • copywriting: Show notes, episode descriptions, social copy
  • content-marketing: Content strategy, repurposing framework
  • youtube-seo: If publishing podcast to YouTube
指导弹窗与模态框的设计、触发时机及移动端优化,以提升转化率并避免SEO惩罚。适用于添加、优化或审计用于获客和优惠展示的弹窗组件。
用户希望添加、优化或审计弹窗/模态框 提及 popup, modal, lightbox, exit-intent, lead capture 等关键词
skills/kostja94_marketing-skills/popup/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill popup-generator -g -y
SKILL.md
Frontmatter
{
    "name": "popup-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to add, optimize, or audit popups or modals for lead capture or offers. Also use when the user mentions \"popup,\" \"modal,\" \"lightbox,\" \"overlay,\" \"exit-intent,\" \"popup form,\" \"modal design,\" \"lead popup,\" \"popup timing,\" or \"popup triggers.\" For CRO, use conversion-optimization."
}

Components: Popup / Modal

Guides popup and modal design for conversion. Well-designed popups can achieve up to 25% conversion; poorly timed or intrusive ones hurt UX and SEO. Google penalizes intrusive mobile popups.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for offers and audience.

Identify:

  1. Goal: Newsletter, discount, lead magnet, demo
  2. Trigger: Time delay, scroll %, exit intent, click
  3. Mobile: Critical; smaller screens = easier to interrupt

Best Practices

Timing and Context

  • Avoid: Popup on page load; users hate it
  • Prefer: After engagement (scroll 25-50%, time on page, exit intent)
  • Personalize: Returning visitors, cart abandoners, discount users
  • Value-first: Offer genuine value; act as "helpful teammate" not spam

Design

  • Short copy: Clear headline, one benefit, single CTA
  • Visual hierarchy: Guide attention to CTA; don't distract
  • Easy exit: Clear X, visible "No Thanks"; friction-free exit increases trust and conversion
  • Brand consistency: Build instant comfort

Mobile

  • Size: Fit screen; thumb-friendly close
  • Lightweight: Avoid heavy assets; affects LCP
  • SEO: Google penalizes intrusive interstitials; avoid full-page takeover on mobile

Avoid

  • Dark patterns (fake close, hidden options)
  • Too early or too frequent
  • Multiple popups in one session
  • Blocking content without clear value

Triggers

Trigger Use
Time delay 5-15s typical; after some engagement
Scroll % 25-50% read; user invested
Exit intent Mouse leaving viewport; last chance
Click User-initiated; least intrusive

Output Format

  • Offer and copy
  • Trigger (timing, scroll, exit intent)
  • Design (size, CTA, exit)
  • Mobile checklist

Related Skills

  • signup-login-page-generator: Full account signup → dedicated page preferred; popup for lightweight capture
  • landing-page-generator: Lead capture popups on landing pages; popup as alternative to full-page form
  • newsletter-signup-generator: Popup often contains signup form
  • cta-generator: Popup CTA design
  • top-banner-generator: Alternative to popup; less intrusive for announcements
  • sidebar-generator: Alternative for CTAs; in-content often converts better
  • brand-visual-generator: Popup styling
用于生成媒体曝光页面或“As Seen In”板块,展示第三方权威报道以建立信任。支持全页或嵌入式区块,聚合新闻、播客等,强调内容可信度与权威性。
用户想要创建媒体曝光页面 用户提到 'press coverage' 用户提到 'media mentions' 用户提到 'as seen in' 用户提到 'as featured in' 用户提到 'in the news'
skills/kostja94_marketing-skills/press-coverage/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill press-coverage-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "press-coverage-page-generator",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to create a press coverage page, \"As Seen In\" section, or media mentions aggregation. Also use when the user mentions \"press coverage,\" \"media mentions,\" \"as seen in,\" \"as featured in,\" \"in the news,\" \"press mentions,\" \"media coverage page,\" or \"trusted by publications.\" For pitching journalists and press releases, use public-relations."
}

Pages: Press Coverage

Guides press coverage and media mentions aggregation—showcasing third-party coverage from authoritative sites to build trust. Optional page; when coverage is sparse, implement as a small "As Seen In" or "As Featured In" section on homepage or elsewhere. Distinct from media-kit-page-generator (assets for journalists). For conceptual overview and comparison table, see reference.md.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read for company story and key messages.

Identify:

  1. Coverage volume: Few mentions vs substantial
  2. Format: Full page vs section
  3. Sources: Publications, podcasts, awards, industry lists

Full Page vs Section

Format When to Use Placement
Full page Substantial coverage (10+ mentions); journalists visit for expert contacts; "inbound PR" /press, /news, /in-the-news
Section Sparse coverage (1–10); quick credibility; logo strip or quote carousel Homepage below hero; About page; footer

Rule: Homepage section = logos only, minimal, below main CTA. Full page = headlines, links, dates, contact.

Full Page Structure

Element Guideline
Coverage list Chronological or by publication; headline, outlet, date, link
Separation Press coverage (third-party) vs press releases (company-authored); coverage carries more credibility
Types News, podcasts, video features, awards, "Best X" lists
Contact Media inquiries; link to media kit
Dates Optional on evergreen content; omit to keep timeless

Section Structure ("As Seen In" / "As Featured In")

Element Guideline
Logos Publication logos; high-contrast, consistent size
Placement Below hero/CTA; above fold or just below
Quote Optional: one compelling snippet; extract from best coverage
Link Optional: "See all coverage" → full page if exists

Avoid: Clutter; too many logos; low-authority outlets that dilute trust.

Content Types to Aggregate

Type Example
News articles Forbes, Bloomberg, TechCrunch, industry trade
Podcasts Interview features, guest appearances
Video TV segments, YouTube features
Awards "Best X 2024," "Top 10 Startups"
Reviews Product reviews, roundups

Trust Principles

  • Third-party > self-authored: Media mentions beat press releases for credibility
  • Authority matters: Forbes, Bloomberg > unknown blogs
  • Recency: Recent coverage signals active business; update regularly

Output Format

  • Format (full page vs section) recommendation
  • Structure (elements, order)
  • Copy (headline, intro if full page)
  • Placement (URL, page location)
  • SEO: Index for "company name press" / "company name news"; or noindex if thin

Related Skills

  • media-kit-page-generator: Press assets for journalists; press coverage page can link to media kit; distinct purposes (coverage = social proof for visitors; media kit = assets for press)
  • homepage-generator: "As Seen In" section often on homepage
  • about-page-generator: Press quotes can appear on About
  • customer-stories-page-generator: Social proof; different from press (customer success vs media coverage)
  • trust-badges-generator: "Trusted by" logos; similar visual treatment
  • public-relations: Press release creation; coverage is outcome of PR
指导SaaS及产品的定价策略与结构设计,涵盖模型选择、分层设计、锚定效应及折扣时机。需结合项目上下文评估产品类型、价值指标与市场目标,输出包含推荐模型、层级结构及锚定方案的完整策略。
用户希望规划或优化定价策略和结构 提及定价策略、定价模型、定价层级、免费增值、基于价值的定价、锚定效应、价格结构或变现策略
skills/kostja94_marketing-skills/pricing-strategy/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill pricing-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "pricing-strategy",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to plan, design, or optimize pricing strategy and structure. Also use when the user mentions \"pricing strategy,\" \"pricing model,\" \"pricing tiers,\" \"freemium,\" \"value-based pricing,\" \"anchoring,\" \"price structure,\" or \"monetization strategy.\" For pricing page, use pricing-page-generator."
}

Strategies: Pricing

Guides pricing strategy and structure for SaaS, tools, and products. Covers pricing models, tier design, anchoring, and when to apply discounts. For pricing page content and layout, see pricing-page-generator. For discount and promotional pricing, see discount-marketing-strategy.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, value proposition, and competitors.

Identify:

  1. Product type: SaaS, tool, e-commerce
  2. Value metric: What drives value (seats, usage, features)
  3. Market: Competitor pricing; willingness to pay
  4. Goals: Revenue, adoption, retention

Pricing Models

Model Use
Subscription Recurring; monthly/annual; most SaaS
Freemium Free tier + paid; adoption then conversion
Usage-based Pay per use; API, credits
One-time Perpetual license; some tools
Hybrid Base + usage; tiered + overage

Variable-cost products (compute, API, AI): When per-user cost varies widely (heavy users cost 10×+ light users), uniform subscription often fails. Use usage-based, credits, or tiered-by-usage; align price to cost structure.

Tier Design

  • 2–4 tiers typical; avoid too many options
  • Differentiation: Clear "best for" per tier; feature gates
  • Anchoring: Lead with mid-tier or annual; make target option obvious
  • Value metric: Align price to value (seats, projects, API calls)

Anchoring & Presentation

  • Annual discount: 15–25% for annual prepay; improves cash flow
  • Decoy: Higher tier makes mid-tier look better
  • Most popular: Highlight recommended plan
  • Price display: Monthly vs annual; show savings

When to Use Discounts

Discounts apply on top of base pricing. See discount-marketing-strategy for:

  • Annual commitment discounts
  • First-time / new customer promotions
  • Lifetime deals (LTD)
  • Seasonal (BFCM)
  • Referral, contest, affiliate codes

Principle: Set base price for long-term value; use discounts tactically for acquisition, retention, or cash flow.

Output Format

  • Pricing model recommendation
  • Tier structure (plans, features, price points)
  • Anchoring approach
  • Discount fit (when to use; reference discount-marketing-strategy)
  • pricing-page-generator (page execution)

Related Skills

  • discount-marketing-strategy: Promotional pricing; when and how to discount
  • pricing-page-generator: Pricing page content, structure, conversion
  • landing-page-generator: Click-through to pricing
  • localization-strategy: Pricing by market (true localization vs cosmetic); see Pricing Strategies section
指导定价页面的内容、结构与转化优化。涵盖订阅、免费增值等模型,公共与隐藏定价策略,以及页面各模块(如计划对比、企业联系)的设计规范,旨在提升SaaS产品转化率。
用户希望创建或优化定价页面 提及'pricing table'或'plans' 涉及'SaaS pricing'或'enterprise pricing' 讨论'contact sales'或定价可见性
skills/kostja94_marketing-skills/pricing/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill pricing-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "pricing-page-generator",
    "metadata": {
        "version": "1.2.1"
    },
    "description": "When the user wants to create, optimize, or audit pricing page content and structure. Also use when the user mentions \"pricing page,\" \"pricing table,\" \"plans,\" \"subscription,\" \"pricing plans,\" \"pricing tiers,\" \"pricing comparison,\" \"SaaS pricing,\" \"enterprise pricing,\" \"API pricing,\" \"contact sales,\" \"pricing in nav,\" \"public pricing,\" \"hide pricing,\" or \"pricing objection handling.\" For pricing strategy, use pricing-strategy."
}

Pages: Pricing

Guides pricing page content, structure, and conversion optimization. Covers self-serve plans, enterprise/contact sales, API/usage-based pricing, and special programs (startups, education).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and pricing strategy.

Identify:

  1. Pricing model: Subscription, one-time, usage-based, freemium, hybrid
  2. Plans: Number of tiers, differentiation; enterprise vs self-serve
  3. Primary goal: Sign up, contact sales, trial
  4. Objections: Price sensitivity, "which plan?" confusion
  5. Special programs: Startups, education, nonprofit (link or embed)
  6. Visibility: Public page vs contact-sales-only; marketing site vs in-app

Pricing Visibility & Placement

Public vs Hidden Pricing

Show public pricing Hide (contact sales only)
Self-serve / SMB; standard tiers Enterprise; highly customized
Competitive market; transparency differentiates Premium positioning; consultative sales
Simple pricing model New category; value exceeds cost in prospect's mind
86% of B2B buyers want transparency; hidden pricing is a top deterrent Custom deployments, SLA, volume; fixed price misleading

Middle ground: "Starting from," price ranges, or calculator—clarity without rigid commitment.

Where Pricing Lives

Location Audience Purpose
Marketing site Unlogged visitors Acquisition; standalone /pricing page; main nav or footer
In-app / Dashboard Logged-in users Subscription management; Settings → Billing/Subscription in sidebar; upgrade/downgrade, payment

Marketing site = conversion; In-app billing = retention and plan management. Not all sites need public pricing in nav—enterprise-only products may use "Contact sales" as primary CTA.

Pricing Models

Model Use
Subscription Recurring; monthly/annual; most SaaS
Freemium Free tier + paid; adoption then conversion
Usage-based Pay per use; API calls, tokens, credits
One-time Perpetual license; some tools
Hybrid Base + usage; tiered + overage

Pricing Page Structure

Section Purpose
Headline Value-focused; "Simple pricing" or benefit-led
Pricing model selector Monthly/annual toggle; show annual savings (15–25%); usage-based calculator if applicable
Plan comparison Clear table or cards; feature comparison; "Best for" per tier
Enterprise / Contact sales Separate tier; "Contact us," "Custom pricing"; SLA, dedicated support; volume discount
API / Usage pricing If API product: token/request pricing; tiers (Standard/Flex/Batch); overage; link to /api or docs
Special programs Startups, education, nonprofit; link to startups-page or embed block
FAQ Billing, cancellation, refunds, API limits, enterprise
Social proof Testimonials, logos, "X companies trust us"
CTA Per plan or unified "Get started"; "Contact sales" for enterprise
Guarantee Money-back, free trial, no credit card
Comparison Brief price vs alternatives; link to alternatives-page

Best Practices

Plan Presentation

  • Tier design: 2–4 tiers; avoid too many options; 3 tiers optimal (decoy effect)
  • Anchoring: Lead with mid-tier or annual discount; anchor high to make mid-tier feel reasonable
  • Decoy effect: Middle tier as "Goldilocks" choice; "Most popular" or "Best value" badge
  • Differentiation: Clear "best for" per tier; value metric (seats, API calls, projects)
  • Feature clarity: What's included; outcome-first ("Save 10 hours/week") over feature-first ("Advanced API"); avoid vague "Advanced features"
  • Price display: Monthly vs annual; show savings explicitly
  • Comparison: Help user choose (quiz, comparison table)

Usage-Based & Credits

  • Consumption visibility: Show credits/usage clearly; avoid "bill shock" from opaque consumption
  • Wording: Avoid vague "Unlimited" if soft limits exist; use "Extended" or state limits explicitly

Enterprise & API Pricing

Scenario Use
Enterprise Separate tier; "Contact sales," "Custom pricing"; SLA, dedicated support, volume discount
API / Usage-based Token/request pricing; tier (Standard/Flex/Batch); overage; link to api-page or docs
Hybrid Base subscription + usage; show base + overage clearly

Conversion Psychology

  • Anchor high: Present highest tier first; mid-tier feels more reasonable
  • Loss aversion: Money-back, no CC trial, cancel anytime—reduce perceived risk
  • Transparency: No hidden fees; 73% of users value transparent pricing
  • Trust signals: Logo, testimonial, "X+ companies"; guarantee near CTA

Objection Handling

  • Price: ROI, cost per use, comparison to alternatives
  • Commitment: Free trial, no CC, cancel anytime
  • Uncertainty: Guarantee, case studies, support

Promo & Discounts

  • Annual discount: Highlight 15–25% for annual prepay
  • Promo placement: Top banner or promo block on page; see top-banner-generator
  • Startups/Education: Link to startups-page or education-program page; or "Special plans" block on pricing page. When discount applies at registration, registration flow is P0; pricing page is P1. See education-program for placement priority.

SEO

  • Title: "Pricing | [Product]" or "Plans & Pricing"
  • Meta: Include price range or "Start free" if applicable
  • Schema: Consider Product/Offer structured data

Output Format

  • Visibility (public page vs contact-sales-only; marketing nav vs in-app billing)
  • Headline options
  • Pricing model (Subscription/Usage-based/Hybrid)
  • Plan structure (tiers, features, pricing display; include Enterprise, API if applicable)
  • Special programs (Startups/Education link or block)
  • API/Usage display (if applicable)
  • Anchoring and Decoy approach
  • FAQ topics and sample answers (billing, API limits, enterprise, refund)
  • CTA copy per plan
  • Objection handling copy
  • SEO metadata

Related Skills

  • pricing-strategy: Base price structure, tier design, anchoring; pricing-page is execution
  • discount-marketing-strategy: Promotional pricing, annual discount, seasonal campaigns
  • api-page-generator: API pricing, usage-based limits; developer audience
  • education-program: Student/education discount channel; placement (registration P0, pricing P1)
  • startups-page-generator: Special plans; Startups/Education discount; link from pricing
  • services-page-generator: Service tiers; contact sales; custom quote
  • alternatives-page-generator: Price comparison; competitor comparison
  • landing-page-generator: Click-through landing pages often send to pricing; LP CTA destination
  • homepage-generator: Homepage links to pricing
  • website-structure: Page priority; when pricing belongs in nav vs contact-sales-only
  • features-page-generator: Features inform plan differentiation
  • top-banner-generator: Promo banner; discount code display
  • schema-markup: Product/Offer schema for pricing
用于生成、优化或结构化隐私政策页面,涵盖GDPR/CCPA合规、数据收集说明及用户权利。支持多司法管辖区评估,提供清晰内容结构与SEO建议,确保法律页面规范。
用户希望创建隐私政策页面 用户提到'privacy policy' 用户提到'GDPR compliance' 用户提到'CCPA' 用户提到'data protection'
skills/kostja94_marketing-skills/privacy/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill privacy-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "privacy-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or structure Privacy Policy page. Also use when the user mentions \"privacy policy,\" \"privacy page,\" \"data protection,\" \"GDPR compliance,\" \"privacy notice,\" \"data privacy,\" \"CCPA,\" \"cookie policy,\" or \"personal data.\" For legal overview page, use legal-page-generator."
}

Pages: Privacy Policy

Guides Privacy Policy page content, structure, and compliance.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Identify:

  1. Jurisdiction: GDPR, CCPA, other regional requirements
  2. Business model: SaaS, e-commerce, content, ads
  3. Data collected: Cookies, forms, analytics, third parties
  4. Indexing: Typically noindex for legal pages

Best Practices

Required Sections

Section Content
What we collect Types of data (name, email, usage, etc.)
Why we collect Purposes (service, marketing, analytics)
How we use Processing, storage, sharing
How long we keep Retention periods
Your rights Access, correction, deletion, opt-out
Cookies Types, purposes, how to manage
Third parties Who receives data (analytics, payment)
Contact How to exercise rights, data protection contact

Content Principles

  • Clear language: Plain English; avoid legalese where possible
  • Structure: Headings, table of contents, scannable
  • Updates: Date of last update; version if needed
  • Legal review: Have lawyer review for compliance

Placement

  • Footer: Link on every page
  • Forms: Link near signup, contact, checkout
  • Cookie banner: Link to Privacy and Cookie policy

SEO

  • Noindex: Common for legal pages
  • Canonical: If multiple versions (e.g., by region)

Output Format

  • Outline (sections)
  • Key points per section
  • Cookie disclosure approach
  • Rights section (GDPR/CCPA)
  • Disclaimer: Recommend legal review

Related Skills

  • legal-page-generator: Privacy is a legal page type
  • terms-page-generator: Often linked together
  • contact-page-generator: Privacy link near forms
  • indexing: noindex for privacy
指导用户进行Product Hunt发布,涵盖30天准备计划、素材规范(标签、视频)、发布日策略及预期管理。适用于SaaS、AI工具等产品的PH上线策划与执行。
Product Hunt launch on Product Hunt PH launch Product Hunt submission hunter Product of the Day upvotes Product Hunt first comment
skills/kostja94_marketing-skills/product-hunt-launch/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill product-hunt-launch -g -y
SKILL.md
Frontmatter
{
    "name": "product-hunt-launch",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to launch on Product Hunt, prepare a PH submission, or plan launch day (hunter, first comment, timing, upvotes). Also use when the user mentions \"Product Hunt,\" \"launch on Product Hunt,\" \"PH launch,\" \"Product Hunt submission,\" \"hunter,\" \"Product of the Day,\" \"upvotes,\" or \"Product Hunt first comment.\" For multi-platform directory listings and paste-ready copy beyond PH, use directory-submission."
}

Channels: Product Hunt Launch

Guides preparing and executing a Product Hunt launch. Product Hunt is a community-driven product discovery platform; only ~10% of submissions get featured on the homepage. Best for SaaS, developer tools, AI/ML products, and productivity software. Physical products and service businesses have limited success.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Read project context first: If .claude/project-context.md or .cursor/project-context.md exists, use Sections 1–4, 5, 6, 8, 9 for submission content.

Identify:

  1. Product type: SaaS, AI tool, app, Chrome extension
  2. Launch readiness: Landing page, screenshots, tagline, first comment
  3. Hunter: Self-hunt or Top Hunter (optional but helps)

30-Day Preparation Plan

Phase Days Actions
Teaser 30–21 Build "notify me" page; decide self-hunt vs hunter; engage in community
Supporters 20–11 Build list of 200+ (makers, industry contacts, followers, users)
Assets 10–3 Finalize tagline (≤60 chars), gallery images (1270×760), demo video (<2 min), maker comment, 3–5 topic tags; build awareness on X/LinkedIn 2–4 weeks before
Launch day 2–1 Clear calendar for 16+ hours; Product Hunt runs midnight–midnight Pacific

Product Hunt Fields

Field Spec
Tagline ≤60 chars; no emojis unless part of product name; catchy, benefit-focused
Gallery 1270×760 px recommended; readable, show product value
Demo video <2 minutes; optional but recommended
First comment Post immediately; story-driven, not feature list; significantly impacts engagement
Topic tags 3–5 relevant; match Product Hunt taxonomy

Launch Day Strategy

Practice Guideline
Timing Tuesday–Thursday; 12:01am Pacific works best
Narrative Create story (problem → solution), not feature list
Engagement Reply to every comment; thank supporters; answer questions
Avoid Begging for upvotes (risk of shadowban)

Principle: Product Hunt is a visibility amplifier and credibility boost—not primarily a customer acquisition channel.

Realistic Expectations

Outcome Upvotes Placement
Poor 50–100
Average 200–400 Top 10
Good 500–800 Top 5
Great 800+ Product of the Day

Beyond Listing

Offering Use When
Product Hunt Daily Newsletter feature; high-intent audience
Social promotion PH shares on X, LinkedIn; launch-day amplification
Featured placement Paid promotion options

Post-Launch

  • Continue engaging with new users
  • Thank-you emails to supporters
  • Ask for feedback
  • See directory-submission for other directories; cold-start-strategy for full launch plan

Output Format

  • Readiness checklist (tagline, gallery, first comment, topic tags)
  • First comment draft (story-driven)
  • Tagline options (≤60 chars)
  • 30-day timeline (if planning ahead)

Related Skills

  • directory-submission: Taaft, G2, curated lists; Product Hunt is one directory—see for multi-platform submission
  • cold-start-strategy: Full launch plan; Product Hunt as channel
  • indie-hacker-strategy: Indie hacker Product Hunt, first 100 users
  • media-kit-page-generator: Press kit, screenshots for launch
  • analytics-tracking: UTM for Product Hunt traffic attribution
When the user wants to plan a product launch, execute launch channels, or create a launch checklist. Also use when the user mentions "product launch," "launch strategy," "product announcement," "launch channels," or "market launch." For GTM motion and positioning, use gtm-strategy. For cold start and first users, use cold-start-strategy. For Product Hunt day-of, use product-hunt-launch.
skills/kostja94_marketing-skills/product-launch/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill product-launch -g -y
SKILL.md
Frontmatter
{
    "name": "product-launch",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to plan a product launch, execute launch channels, or create a launch checklist. Also use when the user mentions \"product launch,\" \"launch strategy,\" \"product announcement,\" \"launch channels,\" or \"market launch.\" For GTM motion and positioning, use gtm-strategy. For cold start and first users, use cold-start-strategy. For Product Hunt day-of, use product-hunt-launch."
}

Strategies: Product Launch

Guides product launch execution—channels, timeline, checklist, and cross-functional coordination. Use this skill when planning the launch of a new product or major feature. For GTM strategy (PLG/SLG/MLG, 90-day framework, ICP, new market entry, repositioning), see gtm-strategy. For cold start (first users, no product yet), see cold-start-strategy.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read full file.

Identify:

  1. Launch type: New product, major feature, market expansion
  2. GTM mode: Sales-led, product-led, marketing-led, hybrid (from gtm-strategy)
  3. Channels: PR, paid, organic, email, events

Launch Checklist

  • GTM strategy defined (see gtm-strategy)
  • PMF validated (see pmf-strategy)
  • Target market and ICP clear
  • Messaging consistent across teams
  • Channel mix chosen (PR, paid, organic, email)
  • Timeline and milestones set
  • Cross-functional owners assigned (RACI)

Channel Mix

Channel Use Skills
PR Press release, media relations public-relations
Paid ads Scale acquisition post-PMF paid-ads-strategy
Organic SEO, content, community seo-strategy, content-marketing
Email Announcement to existing users email-marketing
Product Hunt / Directories Launch-day buzz; early adopters cold-start-strategy, directory-submission

Critical Success Factors

Factor Guideline
PMF first Validate product-market fit before scaling; see pmf-strategy
GTM alignment One clear story; all teams use same messaging; see gtm-strategy
Avoid rush Most failures = scale before PMF

Output Format

  • Launch plan (timeline, channels, owners)
  • Channel actions (PR, paid, organic, email)
  • Checklist (pre-launch, launch, post-launch)
  • Cross-ref to gtm-strategy for framework

Related Skills

  • gtm-strategy: GTM framework; modes, 90-day, ICP, new market, repositioning; product launch implements GTM for new product
  • pmf-strategy: Validate PMF before scaling
  • cold-start-strategy: First users; Product Hunt; differs from full GTM launch
  • indie-hacker-strategy: Indie hacker launch; Build in Public; first 100 users
  • public-relations: Press release; media relations for launch
  • paid-ads-strategy: Paid channel for launch
  • website-structure: Pages needed for launch
指导电商产品列表页和分类页的内容生成、优化与审计。涵盖页面结构、产品卡片元素、筛选排序及SEO元数据,适用于创建或评估商品目录展示场景。
用户希望创建或优化产品列表页/分类页 提及 product page, product listing, shop, e-commerce products, product catalog, product grid, product cards, product overview
skills/kostja94_marketing-skills/products/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill products-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "products-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit a product listing or category page. Also use when the user mentions \"product page,\" \"product listing,\" \"shop,\" \"e-commerce products,\" \"product catalog,\" \"product grid,\" \"product cards,\" or \"product overview.\" For category SEO, use category-page-generator."
}

Pages: Products

Guides product listing and category page content for e-commerce. For individual product detail pages, structure varies by platform.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product catalog and positioning.

Identify:

  1. Page type: Category, collection, or product grid
  2. Products: Count, filters, sorting
  3. Audience: Browsers, researchers, buyers

Best Practices

Category/Listing Page

Element Purpose
Category title Clear H1; target keyword
Description SEO copy; benefits of category
Filters Price, size, brand, etc.
Product cards Image, name, price, CTA
Pagination Crawlable; rel prev/next

Product Card

  • Image: Alt text; multiple angles
  • Name: Descriptive; keyword
  • Price: Clear; sale/compare-at
  • CTA: Add to cart, view details

SEO

  • Category pages: Unique titles, descriptions
  • Schema: ItemList, Product
  • Internal links: Cross-category; breadcrumbs

Output Format

  • Structure for listing page
  • Product card elements
  • Filter/sort approach
  • SEO metadata and schema

Related Skills

  • card: Card layout structure; product card anatomy, grid design
  • grid: Product grid layout; responsive columns
  • landing-page-generator: Product-focused landing pages send to products; product launch LP destination
  • pricing-page-generator: Product cards link to pricing
  • url-slug-generator: URL slug for product pages; 3-5 words, primary keyword
  • url-structure: Product URL hierarchy (e.g. /products/category/product)
  • features-page-generator: For SaaS feature pages
  • schema-markup: Product, ItemList schema
  • internal-links: Category linking
  • breadcrumb-generator: Breadcrumb trail for product hierarchy
用于规划公关策略、撰写新闻稿及管理媒体关系。涵盖新闻角度识别、AP风格写作规范、导语与引语优化,以及发布结构指导,旨在提升媒体采纳率和传播效果。
用户提到 'public relations' 或 'PR' 用户要求撰写 'press release' 或 'news release' 用户涉及 'media relations' 或 'product announcement' 用户提及 'journalist', 'media coverage', 'earned media'
skills/kostja94_marketing-skills/public-relations/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill public-relations -g -y
SKILL.md
Frontmatter
{
    "name": "public-relations",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to plan PR, write a press release, or manage media relations. Also use when the user mentions \"public relations,\" \"PR,\" \"press release,\" \"media relations,\" \"news release,\" \"journalist,\" \"media coverage,\" \"product announcement,\" or \"earned media.\" For on-site \"As Seen In\" or logos page, use press-coverage-page-generator."
}

Channels: Public Relations

Guides PR and press release strategy. Journalists use ~3% of releases they receive; proper structure is critical. Use this skill when writing press releases, planning product announcements, or building media relations.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 2 (Positioning), 3 (Value Proposition), 8 (Brand & Voice).

Identify:

  1. News angle: Product launch, funding, partnership, milestone
  2. Audience: Trade press, mainstream, bloggers
  3. Timing: Embargo or immediate

Press Release Structure

Section Guideline
Header Logo; contact (name, title, email, phone); "FOR IMMEDIATE RELEASE" or embargo
Headline Under 100 chars; strong action verbs; "Why should I care?"
Subheadline Optional; additional context
Dateline City, state, date
Lead 50–75 words; all 5 W's (Who, What, When, Where, Why)
Body 1–2 paragraphs; inverted pyramid; most newsworthy first
Quote Executive/stakeholder; perspective, not fact repetition
Boilerplate 2–3 sentence company description
Media contact Name, email, phone

Lead Paragraph

Journalist should understand the full story from the lead alone. Specific details, not vague language ("important update" → what changed and impact).

Quote Quality

  • Add perspective or emotion
  • Avoid generic corporate-speak
  • Don't repeat facts already stated

Writing Style

  • AP style
  • Short paragraphs (one idea each)
  • Clear language for easy journalist adaptation
  • Data and context to support claims

Output Format

  • Headline and subheadline
  • Lead paragraph
  • Body copy
  • Quote suggestion
  • Boilerplate

Related Skills

  • media-kit-page-generator: Media kit for press (assets)
  • press-coverage-page-generator: Aggregation of coverage; outcome of PR; "As Seen In"
  • branding: Brand voice for PR copy
  • cold-start-strategy: Product Hunt, launch channels
  • product-launch: GTM; PR as launch channel
指导品牌重塑执行,涵盖域名变更、301重定向、迁移清单及多渠道沟通。适用于计划或实施品牌更名、域名迁移等场景,强调长期规划与SEO权益保护。
用户想要计划或执行品牌重塑 涉及域名变更或迁移 提及301重定向策略 需要发布品牌重塑公告 询问品牌重塑相关的社交媒体更新
skills/kostja94_marketing-skills/rebranding/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill rebranding-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "rebranding-strategy",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to plan or execute a rebrand—domain change, 301 redirects, migration, or announcement. Also use when the user mentions \"rebranding,\" \"rebrand,\" \"domain change,\" \"domain migration,\" \"301 redirect,\" \"change domain name,\" \"rebrand announcement,\" \"social media rebrand,\" \"brand launch,\" or \"domain redirect.\" For domain choice, use domain-selection."
}

Strategy: Rebranding

Guides rebranding execution: domain change, 301 redirects, migration checklist, and communication (social media, internal). Plan for months, not days or weeks. See domain-selection for initial domain choice; domain-architecture for domain structure decisions; multi-domain-brand-seo when multiple domains coexist.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for brand and product info.

Identify:

  1. Scope: Full rebrand (name, domain, identity) vs partial (logo, messaging only)
  2. Domain change: Yes or no; old → new mapping
  3. Timeline: Target launch date; typical 4–12 weeks
  4. Channels: Website, social, product UI, directories, email

Rebranding Timeline (Typical)

Phase Duration Focus
Audit & plan Weeks 1–2 Brand audit; inventory touchpoints; migration plan
Prepare Weeks 2–6 New assets; redirect mapping; staging; backup
Pre-launch Week 6–8 Internal announcement; social handle check; teasers
Launch Week 8+ Go live; 301 redirects; multi-channel announcement
Post-launch 2–4 weeks Monitor search, traffic; fix 404s; iterate

Principle: Plan for months. Avoid changing domain and major structure in one migration—split into smaller migrations when possible.

301 Redirect Best Practices

Practice Purpose
1:1 mapping Each old URL → most relevant new URL; never redirect all to homepage
301 (permanent) Use 301, not 302; 302 does not fully transfer SEO equity
No chains/loops Old URL → final destination directly; avoid A→B→C
Redirect mapping sheet Document every old→new mapping; prevents ~80% of migration failures
Don't block in robots.txt Redirected URLs should not be disallowed

Common Mistakes

  • Redirect chains (multiple hops)
  • Redirect loops
  • Redirecting everything to homepage
  • Using 302 for permanent moves
  • Blocking redirected URLs in robots.txt

Domain Migration Checklist

Pre-Migration

  • Create SEO migration plan
  • Collect benchmarks (GA4, GSC, rankings)
  • Run site crawler; inventory all pages
  • Create redirect mapping sheet (old URL → new URL)
  • Purchase new domain; configure DNS
  • Technical SEO audit
  • Staging environment; backup
  • Check for manual penalties on both domains

Launch

  • Implement 301 redirects
  • Update Google Search Console (change of address)
  • Update sitemaps, robots.txt
  • Verify new site works; test redirects (curl, Screaming Frog)
  • Add GA4 annotation for migration date

Post-Migration

  • Monitor GSC coverage; fix "Page with Redirect" issues
  • Fix 404s immediately
  • Expect temporary ranking fluctuation (2–4 weeks)
  • Do not delete old site as fallback

Social Media Announcement

Three Phases

Phase Actions
Pre-Launch Finalize new identity; audit social presence; secure handles across platforms; internal alignment
Build Anticipation Tease with sneak peeks; cryptic visuals; influencer/ambassador previews; avoid announcing too soon
Execute All platforms updated together; new bios, handles, visuals; compelling rebrand story (why, not what)

What to Avoid

  • Don't list steps or technical details—focus on story and benefit
  • Don't announce before all pieces are in place (mixed messaging)
  • Don't rely on one channel—multi-channel rollout
  • Don't bombard with "why we rebranded" unless it resonates

Rebrand Story

  • Anchor: Emotionally resonating narrative; why now; how it benefits customers
  • Avoid: "We changed our logo" / "We updated our website" without context

Internal Communication

  • Brief all employees before public launch
  • Explain strategic reasons; equip them to answer customer questions
  • Update email signatures, Slack, internal docs
  • Internal FAQ for common rebrand questions

Output Format

  • Timeline (phases, milestones)
  • Redirect mapping approach (template, tools)
  • Migration checklist (customized)
  • Social announcement plan (phases, channels, content angles)
  • Internal communication (briefing, FAQ)

Related Skills

  • domain-selection: Domain choice (Brand/PMD/EMD, TLD); informs new domain choice when rebranding
  • domain-architecture: Domain structure before/after rebrand
  • website-structure: New site structure after migration
  • schema-markup: Update Organization schema on new domain
  • multi-domain-brand-seo: When old and new domains coexist during transition
  • branding: Brand strategy, identity; rebranding implements the change
  • brand-protection: Sync impersonation checks when rebranding; update official domain declaration
  • gtm-strategy: Repositioning GTM; when repositioning includes rebrand
指导Reddit广告的设置、优化与管理。涵盖投放格式(如Promoted Posts)、精准定向策略(Subreddit/兴趣/重定向)、创意规范及预算规划,旨在利用社区特性实现高转化推广。
用户想要设置或管理Reddit广告 用户提及Reddit Ads或Promoted Posts 用户询问subreddit targeting或Reddit advertising
skills/kostja94_marketing-skills/reddit-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill reddit-ads -g -y
SKILL.md
Frontmatter
{
    "name": "reddit-ads",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to set up, optimize, or manage Reddit Ads. Also use when the user mentions \"Reddit Ads,\" \"Promoted Posts,\" \"subreddit targeting,\" \"Reddit advertising,\" or \"Reddit communities.\" For organic Reddit, use reddit-posts."
}

Paid Ads: Reddit Ads

Guides Reddit Ads setup, subreddit targeting, and creative best practices. Reddit excels at niche communities and discussion-driven audiences; use when your audience is active in specific subreddits and values authentic, value-first messaging.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Why Reddit

  • High engagement: ~34 min/session; users seek solutions, not passive scroll
  • Lower competition: vs Facebook/Instagram for niche audiences
  • 100K+ subreddits: Precise community targeting
  • Cost: CPM $2–10; CPC $0.50–3.00; min $5/day

Ad Formats

Format Use
Promoted Posts Image, video, carousel, text; native to feed
Conversation Ads Inbox messages; lead gen; direct response
Video Ads Autoplay; captions supported
Takeover Ads Homepage; premium; major campaigns

Targeting

Type Use
Subreddit Primary; 5–10 relevant subreddits to start; expand by performance
Interests Broader; interest-based
Lookalike Based on converters or engagers
Retargeting Website visitors

Principle: Subreddit targeting is Reddit's strength; choose communities where your audience already discusses relevant topics.

Creative Best Practices

  • Native feel: Ads must blend with organic content; avoid sales-heavy language
  • Value-first: Offer genuine value; respect community norms
  • Authentic: Redditors reject spam-like or inauthentic ads quickly
  • No clickbait: Transparent; honest headlines

Budget Guidance

Phase Budget
Testing $150–300 over 30 days for statistical significance
Scaling $500–2,000+/month by category

Pre-Launch Checklist

  • Subreddits researched; rules checked (some prohibit ads)
  • Creative feels native; no misleading claims
  • Conversion tracking set
  • Landing page aligned with ad promise
  • Minimum $5/day budget

Related Skills

  • reddit-posts: Organic Reddit content; native ad creative should align with post style and subreddit norms
  • paid-ads-strategy: Channel selection; when Reddit fits
  • landing-page-generator: LP for paid traffic
  • analytics-tracking: Conversion tracking; ROAS
生成符合Reddit社区规范的高质量帖子和评论。提供标题、正文、标签建议,遵循90/10价值原则,优化互动与算法排名,确保内容合规且具备高参与度。
用户想要创建Reddit帖子文案或评论 提及' subreddit '、' r/ '、' Reddit营销 '、'发布到Reddit '、' Reddit线程 '、' Reddit评论 '、' Reddit文案 '、' Reddit内容 '或' Reddit互动 ' 需要针对Reddit平台进行内容优化
skills/kostja94_marketing-skills/reddit/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill reddit-posts -g -y
SKILL.md
Frontmatter
{
    "name": "reddit-posts",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create Reddit post copy, comments, or optimize for Reddit. Also use when the user mentions \"Reddit post,\" \"subreddit,\" \"r\/,\" \"Reddit marketing,\" \"post to Reddit,\" \"Reddit thread,\" \"Reddit comment,\" \"Reddit copy,\" \"Reddit content,\" or \"Reddit engagement.\" For Reddit ads, use reddit-ads."
}

Platforms: Reddit

Guides Reddit post and comment creation. Use for generating publish-ready posts that follow subreddit norms. Suitable for copy agents. Design agents can use for image post context.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Output: Publish-Ready Copy

This skill enables agents to generate Reddit post copy (title + body) that respects platform rules and community culture. Output is subreddit-aware and engagement-optimized.

Core Rules

Rule Practice
90/10 principle 90% value, 10% promotional
Self-promotion Max 1 in 6 posts promotional
Subreddit rules Always check sidebar before posting
Flair Required by many subs; wrong flair = removal
Title format Some subs require [tags]; check top posts

Post Structure

Title

  • Concise, specific, accurate--no clickbait
  • Match subreddit format (e.g., [Discussion], [Question])
  • Factual; save opinions for body/comments

Body

  • Value-first: Lead with help, insight, or story
  • Casual, friendly tone--like talking to a friend
  • Engagement: Open-ended questions, invite discussion
  • Formatting: Markdown supported; use lists, headers for readability

Content Types

Type Use
Experience sharing Highest engagement; authentic stories
Q&A Build trust; answer questions
Case study Product value; must be transparent
Tool recommendation Context + honest pros/cons

Algorithm Factors

  • Upvote/downvote ratio matters more than raw score
  • Early engagement weighs more; post at peak hours
  • Karma: 100-1000+ recommended before promotional posts
  • Author interaction: Reply to comments; boosts ranking

Formatting (Markdown)

  • Bold: **text**
  • Italic: *text*
  • Lists: - or 1.
  • Links: [text](url)

Output Format

When generating Reddit copy, provide:

  1. Title (subreddit-appropriate)
  2. Body (value-driven, formatted)
  3. Suggested flair (if known)
  4. Subreddit reminder: "Verify rules before posting"

Related Skills

  • reddit-ads: Paid promotion on Reddit; Promoted Posts, subreddit targeting; native creative aligns with organic post style
  • twitter-x-posts: Alternative platform
  • cold-start-strategy: Cold start; Reddit as launch channel
  • parasite-seo: Parasite SEO strategy; Reddit as high-authority platform
  • grokipedia-recommendations: Wiki/encyclopedia platform for GEO and parasite SEO
  • community-forum: Forum and community promotion; HN, Indie Hacker; community invitation tactics
  • indie-hacker-strategy: Indie hacker first 100 users; Reddit for niche products
  • influencer-marketing: Reddit can complement influencer outreach
专为AI/SaaS产品设计推荐计划策略,涵盖奖励模型、机制类型及防作弊。通过现有用户驱动增长,降低获客成本并提升留存。适用于制定或优化推荐营销方案。
referral program referral marketing user referral refer-a-friend word-of-mouth growth referral rewards referral tracking referral code referral incentives viral loop
skills/kostja94_marketing-skills/referral-program/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill referral-program -g -y
SKILL.md
Frontmatter
{
    "name": "referral-program",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to plan, implement, or optimize referral program strategy. Also use when the user mentions \"referral program,\" \"referral marketing,\" \"user referral,\" \"refer-a-friend,\" \"word-of-mouth growth,\" \"referral rewards,\" \"referral tracking,\" \"referral code,\" \"referral incentives,\" or \"viral loop.\" For referral landing copy, use landing-page-generator."
}

Channels: Referral

Guides referral program strategy for AI/SaaS products. Leverage existing users to drive growth; 3%-5% conversion vs 1%-2% for ads; CAC 50%-70% lower; referred users LTV 30%-50% higher, retention 20%-30% higher. Referral is necessity in overseas markets, not alternative.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and value proposition.

Identify:

  1. Product type: SaaS, AI tool, subscription
  2. User base: Size, engagement, retention
  3. Goal: Signups, purchases, or both

Referral vs. Affiliate vs. Influencer

Dimension Referral Affiliate Influencer
Who Existing users Professional promoters KOLs
Incentive Discounts, credits Commission Fees, product
Barrier Low (all users) Medium High
Conversion 3%-5% Varies Varies

Referral vs affiliate: Referral needs no landing page or application; integrated in dashboard. Affiliate requires landing page and approval.

Reward Models

Model Use
Two-way Both referrer and referee get rewards; highest participation
One-way Only referrer rewarded; cost control
Tiered Rewards increase with referral count (e.g. $10 for 1-5, $15 for 6-10, $20 for 11+); incentivizes volume

Benchmark: Rewards typically 10%-30% of product price; ~11% off or ~$21 value; weak incentives = low participation. Triggers: signup, purchase, activation, or sustained use.

Mechanism Types

Type Use
Link-based Unique referral link; easy to implement; accurate tracking; share via email, social, SMS; works for web and app
Code-based Referral code (e.g. FRIEND20); memorable; offline events; mobile-friendly input
Social referral Share buttons (Facebook, X, LinkedIn); viral spread; friend trust; young users

Tracking & Attribution

Method Use
Cookie Web apps; 30-90 day window
URL params All platforms; persistent in link
Referral code Mobile, offline; manual entry
Account association Long-term tracking; subscription products

Attribution window: 30-90 days typical; 180 days for subscription. First-touch attribution to avoid double-counting.

Fraud Prevention

Risk Action
Self-referral Detect same device, payment, IP
Fake accounts Validate email, payment; monitor patterns
Bulk/automation Rate limits; anomaly detection
Per-user cap e.g. Max 10 referrals per user

Use tool anti-fraud features; audit referrals regularly.

Design Framework

  1. Reward structure: Type (cash, discount, credits, free service); amount (10%-30% of price); trigger; cap
  2. Tracking: Choose method; set attribution window; first-touch rule
  3. UX: One-click share; clear rules; dashboard with referral data; notify on success
  4. Fraud prevention: See above
  5. Monitor & optimize: Referral rate, conversion, CAC, LTV; A/B test rewards and flow

Best Practices

  • Run multiple programs: Target different audiences, stages, goals
  • Tiered rewards: Motivate top performers; progressive incentives
  • Friction-free sharing: Mobile-friendly; one-click share
  • Time-boxed incentives: "Refer this week for $15 off" creates urgency
  • Placement: Web, email, app, in-product touchpoints; dashboard integration primary

Implementation

Approach Use
Self-build Full control; low cost; URL params or cookie + reward logic + fraud checks; open-source (e.g. RefRef) for faster start
Third-party Fast launch; Cello, Viral Loops, ReferralCandy (e-commerce), Impact (enterprise); monthly fee

Placement: Most programs integrate in product dashboard; no landing page or application needed. Optional landing page for value prop, rewards, and case studies.

Startup cost: Typically hundreds for tools + dev.

Tools

Tool Use
Cello SaaS; AI-driven automation
Viral Loops Referral + waitlist + contests
ReferralCandy Shopify, e-commerce
Impact Enterprise; unified platform
RefRef Open-source; self-hosted

KPIs

Referral rate, conversion, CAC, LTV of referred users, referred-user retention.

Output Format

  • Reward model and mechanism type (link/code/social)
  • Tracking approach and attribution window
  • Placement (dashboard vs landing page)
  • Fraud prevention measures
  • Tool selection (self-build vs third-party)
  • KPI framework

Related Skills

  • discount-marketing-strategy: Referral rewards (discounts, credits); 10–30% benchmark; campaign design
  • affiliate-marketing: Different audience; can run both
  • influencer-marketing: Brand building vs. user-driven growth
  • directory-submission: Directory submission for discovery; referral for user-driven growth
  • analytics-tracking: Referral link tracking, UTM
用于生成或优化电商及数字产品的退款/退货政策页面内容。涵盖产品类型评估、核心要素(资格、流程、排除项等)及最佳实践,提供结构化大纲与法律声明建议。
用户要求创建或优化退款或退货政策页面 提及“退款政策”、“退货政策”、“退款保证”、“退款页面”、“满意度保证”等相关关键词
skills/kostja94_marketing-skills/refund/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill refund-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "refund-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create or optimize a refund or return policy page. Also use when the user mentions \"refund policy,\" \"return policy,\" \"money-back guarantee,\" \"returns and refunds,\" \"refund page,\" \"return process,\" \"refund terms,\" or \"satisfaction guarantee.\" For legal overview, use legal-page-generator."
}

Pages: Refund / Return Policy

Guides refund and return policy page content for e-commerce and digital products.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Identify:

  1. Product type: Physical, digital, subscription, or mixed
  2. Policy: Time window, conditions, process
  3. Jurisdiction: Consumer rights (EU, etc.)

Best Practices

Essential Elements

Element Purpose
Eligibility What can be returned; time limits
Process How to request; steps
Refund method Original payment; timeline
Exclusions Non-refundable items
Contact Support for returns

Content

  • Clear: Simple language; no legalese
  • Scannable: Headings, bullets
  • Complete: Answer common questions
  • Up to date: Review when policy changes

Placement

  • Footer; checkout; product pages
  • Link from FAQ when relevant

Output Format

  • Outline for refund/return policy
  • Key sections and content
  • Disclaimer: Recommend legal review

Related Skills

  • legal-page-generator: Refund is often a legal page
  • faq-page-generator: FAQ may link to refund policy
  • privacy-page-generator: Footer grouping
指导SEO技术渲染策略的选择与优化,涵盖SSG、SSR、ISR、CSR及动态渲染。核心原则是确保页面数据在JS执行前即可获取,以提升搜索引擎和AI爬虫的可见性与索引效果。
用户希望选择或优化SEO渲染策略 提及SSR、SSG、CSR、ISR等渲染术语 询问静态/动态渲染或预渲染问题 关注初始HTML内容或爬虫可见性
skills/kostja94_marketing-skills/rendering-strategies/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill rendering-strategies -g -y
SKILL.md
Frontmatter
{
    "name": "rendering-strategies",
    "metadata": {
        "version": "1.0.2"
    },
    "description": "When the user wants to choose or optimize rendering strategy for SEO. Also use when the user mentions \"SSR,\" \"SSG,\" \"CSR,\" \"ISR,\" \"static rendering,\" \"dynamic rendering,\" \"server-side rendering,\" \"client-side rendering,\" \"JavaScript rendering,\" \"pre-rendering,\" \"prerender,\" \"content in initial HTML,\" or \"crawler visibility.\" For crawl issues, use site-crawlability."
}

SEO Technical: Rendering Strategies

Guides rendering strategy selection and optimization for search engine and AI crawler visibility. Golden rule: Page data and metadata must be available on page load without JavaScript execution for optimal SEO.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (Technical SEO)

  • Static vs dynamic: SSG, SSR, ISR, CSR; when to use each
  • Crawler behavior: Googlebot renders JS (with delays); AI crawlers do not
  • Component-level: Content in initial HTML; tabs, carousels, nav
  • Dynamic rendering: Prerender for bots when full SSR/SSG is not feasible

Rendering Methods

Method When HTML generated SEO Best for
SSG (Static Site Generation) Build time ✅ Best Blog, docs, marketing pages; content rarely changes
SSR (Server-Side Rendering) Request time ✅ Good News, product pages; dynamic, personalized content
ISR (Incremental Static Regeneration) Build + revalidate ✅ Good Large sites; static with periodic updates
CSR (Client-Side Rendering) Browser (after JS) ❌ Poor Dashboards, account pages; no SEO needed
Dynamic rendering On-demand for bots ✅ Fallback SPAs; prerender for crawlers, SPA for users

SSG (Static Site Generation)

HTML generated at build time; same HTML for every request. Best for SEO: crawlers receive full HTML immediately; optimal performance.

  • Use when: Blog, docs, marketing pages, content that doesn't change frequently
  • Framework: Next.js getStaticProps, Astro, Gatsby

SSR (Server-Side Rendering)

HTML generated on each request. Good for SEO: crawlers receive complete HTML; supports dynamic, personalized content.

  • Use when: News, product pages, user-specific content
  • Tradeoff: Higher server load; slower TTFB than SSG
  • Framework: Next.js getServerSideProps, Remix

ISR (Incremental Static Regeneration)

Static at build; pages can revalidate after a period. Good for SEO: combines static performance with freshness.

  • Use when: Large sites (millions of pages); content updates periodically
  • Framework: Next.js revalidate in getStaticProps

CSR (Client-Side Rendering)

Server sends minimal HTML shell; content renders in browser after JS loads. Not for SEO: crawlers may see empty content; indexing delays or failures.

  • Use when: Dashboards, account pages, internal tools—no search visibility needed
  • Avoid for: Public content, marketing pages, blog

Dynamic Rendering

Serve prerendered HTML to crawlers; serve SPA to users. Fallback when full SSR/SSG is not feasible (e.g. legacy SPA migration).

  • How: Detect crawler user-agent; route to prerender service (e.g. Prerender.io) or headless render
  • When: JavaScript-heavy sites; migration period; product/docs with CSR
  • Note: Google permits this; prerendered content should match user experience

Crawler Behavior

Crawler JavaScript Content in initial HTML
Googlebot Renders JS (Chrome); may have multi-day queue Full weight; SSR/SSG preferred
AI crawlers (GPTBot, ClaudeBot, PerplexityBot) Do not execute JS Required—CSR content invisible
Bingbot Renders JS Same as Googlebot

AI crawlers: ~28% of Googlebot's crawl volume. Critical content (articles, meta, nav) must be in initial HTML. See site-crawlability for AI crawler optimization; generative-engine-optimization for GEO.

Component-Level: Content in Initial HTML

Google does not simulate user clicks (tabs, carousels, "Load more"). Content loaded via AJAX or on interaction is not discoverable.

Component Requirement Implementation
Tabs / Accordion All tab content in DOM at load Server-render; use <details>/<summary> or CSS show/hide
Carousel All slides in initial HTML Server-render; CSS/JS for show/hide only
Hero Headline, CTA, LCP image in HTML No JS-only rendering
Navigation All nav links in first paint No JS-injected menus for critical links

Recommendation: Server-render (SSR/SSG) all critical content; use JS only for interaction (show/hide, animation). Content loaded on click = not indexed.

Decision Guide

Content type Rendering Reason
Blog, docs, marketing SSG or ISR Best SEO; fast; static
Product, news, dynamic SSR Fresh content; crawler-ready
Dashboard, account CSR No SEO; auth required
Legacy SPA Dynamic rendering Bridge until SSR/SSG migration

Output Format

  • Current setup: SSG, SSR, CSR, or hybrid
  • Recommendation: By page type
  • Component checks: Tabs, carousel, nav—content in initial HTML?
  • References: Next.js Rendering, Vercel SSR vs SSG

Related Skills

  • site-crawlability: AI crawler optimization; SSR for critical content; URL management
  • generative-engine-optimization: GEO; AI crawlers don't execute JS
  • core-web-vitals: LCP; SSR/SSG for above-fold; client-side hurts LCP
  • mobile-friendly: Mobile-first indexing; content parity
  • tab-accordion: Content in DOM at load; server-render tabs
  • carousel: Content in initial HTML; server-render slides
  • hero-generator: Hero in initial HTML; avoid JS-only
  • navigation-menu-generator: Nav in first paint; no JS-only menus
指导为内容创意、竞品监控和行业追踪筛选及组织信息源。涵盖新闻、博客、社区等类别,强调高质量源选择与跨技能集成,避免过时链接。
用户希望寻找内容创意的信息来源 需要进行竞品监控或行业趋势跟踪 提及 research sources, content ideation, competitor monitoring 等关键词
skills/kostja94_marketing-skills/research-sources/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill research-sources -g -y
SKILL.md
Frontmatter
{
    "name": "research-sources",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to find information sources for content ideation, competitor monitoring, or industry tracking. Also use when the user mentions \"research sources,\" \"information sources,\" \"content ideation,\" \"industry monitoring,\" \"competitor monitoring,\" \"market intelligence,\" \"content research,\" or \"topic research.\" For keywords, use keyword-research."
}

Strategies: Research Sources

Guides selecting and organizing information sources for marketing research: content ideation, competitor monitoring, and industry tracking. Use this skill when planning where to gather signals for content, competitive intelligence, or market trends.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Use Cases

Use case Purpose
Content ideation Topic ideas, trends, gaps for blog, newsletter, social
Competitor monitoring Product updates, positioning, pricing, reviews
Industry tracking Market shifts, funding, layoffs, regulatory changes

Source Categories

Category Format Use
News Real-time, daily Breaking news, announcements
Blogs Company, analyst Deep dives, product updates
Newsletters Curated, weekly/daily Trends, summaries; low effort
Events Conferences, webinars Industry pulse, networking
Data Layoffs, market cap, funding Quantitative signals
Community Forums, Q&A Real questions, pain points
Archives Wayback, Internet Archive Historical content, competitor changes

Selection criteria: Authority, freshness, coverage, language/locale. Prefer 10–15 high-quality sources over 50+ low-signal ones.

Example Sources (Generic)

Category Examples
News TechCrunch, VentureBeat, MIT Technology Review
Blogs Google AI Blog, OpenAI Blog, company blogs
Newsletters TLDR AI, Ben's Bites, The Batch (DeepLearning.AI)
Data Layoffs.fyi, Crunchbase, Companies Market Cap
Archives Internet Archive, Wayback Machine
Community Reddit, Quora, Stack Overflow; regional (e.g. Qiita for Japan)

Note: Add locale-specific sources via localization-strategy; avoid long URL lists.

By Use Case

Use case Source types
Content ideation News, blogs, newsletters, community (Reddit, Quora, Stack Overflow)
Competitor monitoring Competitor blogs, review sites, social, funding databases
Industry tracking News, newsletters, events, layoff/funding data

Avoid: Long URL lists that go stale. Use category framework + a few examples; update periodically.

Integration with Skills

Skill How research sources feed in
keyword-research Newsletters, community for long-tail and question keywords
competitor-research Competitor blogs, review platforms, funding data
content-marketing News, blogs for topic ideas; events for timely content
content-strategy Industry trends for pillar/cluster planning

Output Format

  • Use case (ideation, competitor, industry)
  • Category selection (news, blogs, newsletters, etc.)
  • Source shortlist (5–15; name + purpose)
  • Cadence (daily scan, weekly digest, event calendar)

Related Skills

  • keyword-research: Keyword discovery; research sources inform topics
  • competitor-research: Competitor analysis; sources for monitoring
  • content-marketing: Content planning; sources for ideation
  • content-strategy: Topic clusters; industry signals for pillars
用于生成、优化或审计资源页及内容中心,提升SEO与用户发现能力。适用于资源库、下载中心等场景。
创建资源页面 优化内容中心结构 审计资源库 提及资源中心或学习中心
skills/kostja94_marketing-skills/resources/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill resources-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "resources-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit resources page or content hub. Also use when the user mentions \"resources page,\" \"resource center,\" \"content hub,\" \"learning center,\" \"resource library,\" \"downloads,\" \"templates,\" \"guides,\" or \"resource hub.\" For content hub planning, use content-strategy."
}

Pages: Resources

Guides resources page and content hub structure for discovery and SEO.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for content themes and audience.

Identify:

  1. Content types: Blog, guides, webinars, templates, tools (or standalone /tools; see tools-page-generator)
  2. Audience: Buyers, users, both
  3. Funnel stage: Top, middle, bottom

Best Practices

Purpose

  • Help buyers buy: Content that supports decision-making
  • Help users succeed: How-to, best practices
  • SEO: Organize for discoverability and topical authority

Structure

Element Purpose
Categories By topic, format, or funnel stage
Filters Format (blog, guide, video), topic, date
Featured Highlight key assets
Search Help users find specific content
Contextual embeds Resource tiles on product pages

Navigation

  • Visible: Resources in main nav or top-level section
  • Not buried: Higher than content hubs in hierarchy
  • Clear labels: "Resources," "Learn," "Content Library"

Organization

  • Avoid junk drawer: Intentional structure; not a catch-all
  • Logical hierarchy: Folders, tags, categories
  • Internal linking: Connect related content

Integration

  • Product pages: Embed relevant resources (streams, tiles)
  • Landing pages: Lead magnet (ebook, template) or webinar as resource; LP exchanges value for email
  • Blog: Part of resources or separate with cross-links
  • Glossary: Link from resources

Tools Integration

  • Standalone /tools: When many free tools; use tools-page-generator; toolkit hub + per-tool pages
  • Resources section: When few tools; embed tool cards in resources hub

Output Format

  • Structure (categories, filters)
  • Navigation placement
  • Content types to include
  • Internal linking strategy
  • SEO metadata

Related Skills

  • card: Resource card structure; thumbnail, title, format, CTA; tiles in hub

  • grid: Resource hub grid layout; tiles

  • tools-page-generator: Standalone /tools when many free tools; toolkit hub

  • landing-page-generator: Lead magnet (ebook, webinar) as LP offer; LP exchanges resource for email

  • url-slug-generator: URL slug for resource pages (e.g. /resources/guide-slug); 3-5 words

  • blog-page-generator: Blog may be part of resources

  • glossary-page-generator: Glossary as resource

  • tools-page-generator: Standalone /tools when many free tools; toolkit hub

  • content-strategy: Content hub strategy

  • internal-links: Resource page linking

指导客户留存与流失预防,涵盖流失类型分析、主动干预策略及健康评分框架。适用于降低流失率、识别高风险客户及优化生命周期营销。
用户希望减少流失或提高客户留存率 提及“retention”、“churn”、“customer lifecycle”、“at-risk customers”或“loyalty program”
skills/kostja94_marketing-skills/retention/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill retention-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "retention-strategy",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to reduce churn, improve customer retention, or plan lifecycle marketing. Also use when the user mentions \"retention,\" \"churn,\" \"customer lifecycle,\" \"churn prevention,\" \"at-risk customers,\" or \"loyalty program.\" For lifecycle, use growth-funnel."
}

Strategies: Retention

Guides customer retention and churn prevention. Acquiring new customers costs 5–25× more than retaining; 5% retention improvement can increase profitability 25–95%. Use this skill when reducing churn, building retention programs, or identifying at-risk customers.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 4 (Audience), 9 (Documentation).

Identify:

  1. Churn type: Voluntary (active cancel) vs involuntary (payment failure)
  2. Signals: Login frequency, feature usage, support tickets
  3. Stage: Onboarding, expansion, renewal

Churn Types

Type Share Causes
Voluntary 60–80% Pricing, missing features, poor onboarding, relationship
Involuntary 20–40% Payment failures, expired cards, billing

Predictability: Most churn is predictable 30–90 days before cancellation via behavioral signals.

Proactive vs Reactive

Approach Conversion
Reactive (after cancel) 15–20%
Proactive (before decision) 60–80%

Move from lagging indicator to early warning systems.

Retention Strategies

Strategy Use
Health scoring Behavioral + transactional + relationship signals
Loyalty programs 5–15 percentage point retention lift
Segmentation Predictive modeling for at-risk
Onboarding Prevent low value realization early
Dunning Retry logic; pre-expiry card updates for involuntary

User Value & Feedback

Dimension Use
Product value Registration; feature usage; payment
Marketing value Testimonials; customer stories; webinar guests; feedback, bug reports, feature requests
Feedback analysis Email, community, reviews—AI-assisted analysis; prioritize by impact; route to product vs ops

Avoid: Treating users only as MAU/registration denominators. See creator-program for creator ecosystem.

Lifecycle Integration

Retention occurs after conversion; ongoing investment in customer success, not isolated campaigns. Map touchpoints: onboarding → adoption → expansion → renewal.

Output Format

  • Churn analysis (voluntary vs involuntary; signals)
  • Retention tactics (by stage)
  • Health score framework (if applicable)
  • Intervention playbook (at-risk triggers)

Related Skills

  • email-marketing: Onboarding sequences; win-back campaigns
  • pmf-strategy: Retention as PMF signal; churn as anti-signal
  • cold-start-strategy: First users; differs from retention
  • analytics-tracking: Usage data; churn signals
  • traffic-analysis: Attribution; retention cohort analysis
用于配置、审计和优化 robots.txt,控制搜索引擎及 AI 爬虫的访问权限。涵盖 Disallow/Allow 规则、Sitemap 设置及与 noindex 的区分,防止误屏蔽导致索引问题。
用户提及 robots.txt、爬虫规则、阻止爬虫、AI 爬虫(如 GPTBot) 需要配置允许/禁止路径、清理参数或优化搜索引擎爬取策略
skills/kostja94_marketing-skills/robots/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill robots-txt -g -y
SKILL.md
Frontmatter
{
    "name": "robots-txt",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to configure, audit, or optimize robots.txt. Also use when the user mentions \"robots.txt,\" \"crawler rules,\" \"block crawlers,\" \"AI crawlers,\" \"GPTBot,\" \"allow\/disallow,\" \"disallow path,\" \"crawl directives,\" \"user-agent,\" \"block Googlebot,\" \"fix robots.txt,\" \"robots.txt blocking,\" or \"search engine crawling.\" For indexing, use indexing."
}

SEO Technical: robots.txt

Guides configuration and auditing of robots.txt for search engine and AI crawler control.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (Technical SEO)

  • Robots.txt: Configure Disallow/Allow, Sitemap, Clean-param; audit for accidental blocks
  • Crawler access: Path-level crawl control; AI crawler allow/block strategy
  • Differentiation: robots.txt = crawl control (who accesses what paths); noindex = index control (what gets indexed). See indexing for page-level exclusions.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site URL and indexing goals.

Identify:

  1. Site URL: Base domain (e.g., https://example.com)
  2. Indexing scope: Full site, partial, or specific paths to exclude
  3. AI crawler strategy: Allow search/indexing vs. block training data crawlers

Best Practices

Purpose and Limitations

Point Note
Purpose Controls crawler access; does NOT prevent indexing (disallowed URLs may still appear in search without snippet)
Advisory Rules are advisory; malicious crawlers may ignore
Public robots.txt is publicly readable; use noindex or auth for sensitive content. See indexing

Crawl vs Index vs Link Equity (Quick Reference)

Tool Controls Prevents indexing?
robots.txt Crawl (path-level) No—blocked URLs may still appear in SERP
noindex (meta / X-Robots-Tag) Index (page-level) Yes. See indexing
nofollow Link equity only No—does not control indexing

When to Use robots.txt vs noindex

Use Tool Example
Path-level (whole directory) robots.txt Disallow: /admin/, Disallow: /api/, Disallow: /staging/
Page-level (specific pages) noindex meta / X-Robots-Tag Login, signup, thank-you, 404, legal. See indexing for full list
Critical Do NOT block in robots.txt Pages that use noindex—crawlers must access the page to read the directive

Paths to block in robots.txt: /admin/, /api/, /staging/, temp files. Paths to use noindex (allow crawl): /login/, /signup/, /thank-you/, etc.—see indexing.

Location and Format

Item Requirement
Path Site root: https://example.com/robots.txt
Encoding UTF-8 plain text
Standard RFC 9309 (Robots Exclusion Protocol)

Core Directives

Directive Purpose Example
User-agent: Target crawler User-agent: Googlebot, User-agent: *
Disallow: Block path prefix Disallow: /admin/
Allow: Allow path (can override Disallow) Allow: /public/
Sitemap: Declare sitemap absolute URL Sitemap: https://example.com/sitemap.xml
Clean-param: Strip query params (Yandex) See below

Critical: Do Not Block

Do not block Reason
CSS, JS, images Google needs them to render pages; blocking breaks indexing
/_next/ (Next.js) Breaks CSS/JS loading; static assets in GSC "Crawled - not indexed" is expected. See indexing
Pages that use noindex Crawlers must access the page to read the noindex directive; blocking in robots.txt prevents that

Only block: paths that don't need crawling: /admin/, /api/, /staging/, temp files.

AI Crawler Strategy

robots.txt is effective for all measured AI crawlers. Set rules per user-agent; check each vendor's docs for current tokens.

User-agent Purpose Typical Notes
OAI-SearchBot ChatGPT search Allow Respects robots.txt
GPTBot OpenAI training Disallow Respects robots.txt; shares crawl data with OAI-SearchBot if both allowed
ChatGPT-User User-initiated browsing N/A No longer respects robots.txt (Dec 2025); use server-side controls instead
Claude-SearchBot Claude search Allow Respects robots.txt
ClaudeBot Anthropic training Disallow Respects robots.txt
PerplexityBot Perplexity search Allow Respects robots.txt
Google-Extended Gemini training Disallow Respects robots.txt
CCBot Common Crawl (LLM training) Disallow Respects robots.txt
Bytespider ByteDance Disallow Respects robots.txt
Meta-ExternalAgent Meta Disallow Respects robots.txt
AppleBot Apple (Siri, Spotlight); renders JS Allow for indexing Respects robots.txt

Allow vs Disallow: Allow search/indexing bots (OAI-SearchBot, Claude-SearchBot, PerplexityBot); Disallow training-only bots (GPTBot, ClaudeBot, CCBot) if you don't want content used for model training.

Important — ChatGPT-User exemption: As of December 2025, ChatGPT-User no longer respects robots.txt directives. OpenAI considers it a proxy for human-initiated browsing. If you need to block it, use server-side controls (WAF rules, IP rate-limiting), not robots.txt. See site-crawlability for AI crawler optimization (SSR, URL management).

Clean-param (Yandex)

Clean-param: utm_source&utm_medium&utm_campaign&utm_term&utm_content&ref&fbclid&gclid

Output Format

  • Current state (if auditing)
  • Recommended robots.txt (full file)
  • Compliance checklist
  • References: Google robots.txt

Related Skills

  • indexing: Full noindex page-type list; when to use noindex vs robots.txt; GSC indexing diagnosis
  • page-metadata: Meta robots (noindex, nofollow) implementation
  • xml-sitemap: Sitemap URL to reference in robots.txt
  • site-crawlability: Broader crawl and structure guidance; AI crawler optimization
  • rendering-strategies: SSR, SSG, CSR; content in initial HTML for crawlers
提供端到端SEO审计指南,涵盖技术、页面、内容及外链四大阶段。按优先级排查索引障碍与排名限制,包含详细检查清单,旨在诊断网站健康状况并指导修复策略。
用户希望运行SEO审计 用户提及技术SEO审计 用户要求进行网站健康检查 用户提到SEO审计、站点审计或修复SEO问题
skills/kostja94_marketing-skills/seo-audit/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill seo-audit -g -y
SKILL.md
Frontmatter
{
    "name": "seo-audit",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to run an SEO audit, technical SEO audit, or site health check. Also use when the user mentions \"SEO audit,\" \"technical audit,\" \"site audit,\" \"crawl audit,\" \"indexing audit,\" \"SEO health,\" or \"fix SEO issues.\" For prioritization and organic strategy, use seo-strategy. For GSC data analysis, use google-search-console."
}

Strategies: SEO Audit

Guides end-to-end SEO audit: technical foundation, on-page, content, and off-page. Execute in order—technical blockers prevent indexing; on-page limits rankings; content and off-page build authority. Use when auditing an existing site or planning fixes.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Audit Order

Phase Focus Skills
1. Technical Crawl, index, sitemap robots-txt, xml-sitemap, canonical-tag, indexing, site-crawlability
2. On-Page Metadata, structure, schema title-tag, meta-description, page-metadata, schema-markup, internal-links, heading-structure
3. Content Gaps, intent, optimization keyword-research, content-strategy, content-optimization
4. Off-Page Backlinks, authority link-building, backlink-analysis

Principle: Fix foundation before optimizing pages. See seo-strategy for workflow and prioritization.

Technical Checklist

Item Check Skill
robots.txt Syntax; not blocking important pages robots-txt
Sitemap Submitted to GSC; indexable pages only; ≤50K URLs per sitemap xml-sitemap
HTTPS Sitewide; valid certificate canonical-tag
404/5xx Proper status codes; fix or redirect site-crawlability
noindex No accidental noindex on key pages indexing
Canonical Correct; no conflicts canonical-tag
Core Web Vitals LCP ≤2.5s, INP ≤200ms, CLS <0.1 core-web-vitals
Mobile Mobile-first; content parity; no intrusive interstitials mobile-friendly
Crawlability Redirect chains, broken links, orphan pages site-crawlability

On-Page Checklist

Item Check Skill
Title Unique; 50–60 chars; keyword in first 10 words title-tag
Meta description 150–160 chars; CTA meta-description
Headings One H1; H1→H2→H3 hierarchy heading-structure
Images Alt text; no decorative alt for decorative images image-optimization
Schema Valid; Rich Results Test schema-markup
Internal links From strong pages; descriptive anchors internal-links
Duplicate content Canonical; consolidate or differentiate canonical-tag

Content & Off-Page

Phase Focus Skill
Content gap Missing topics vs competitors content-strategy, competitor-research
Intent match Content matches search intent content-optimization
Backlinks Toxic links; link gap vs competitors backlink-analysis, link-building

Frequency

Cadence Use
Full audit Quarterly
Check-ins Monthly (GSC, indexing, Core Web Vitals)

Output Format

  • Phase 1–4 findings (technical → on-page → content → off-page)
  • Priority list (P0 blocker → P1 core → P2 important)
  • Skill mapping (which skill for each fix)
  • Timeline (immediate vs short-term vs ongoing)

Related Skills

  • seo-strategy: Workflow order, prioritization, when to invest in SEO
  • google-search-console: Performance, indexing, Core Web Vitals data
  • site-crawlability: Redirect chains, broken links, crawl budget
  • indexing: Indexing issues, noindex, Search Console
  • core-web-vitals: LCP, INP, CLS optimization
构建SEO数据分析系统,监控索引、流量、关键词和反链四大核心指标。涵盖基准设置、文章数据库管理、工具选择及惩罚恢复,助力SEO工作文档与仪表盘搭建。
用户希望建立SEO数据分析系统 需要监控索引、流量、关键词或反链 提及SEO数据监测、文章数据库、流量基准、惩罚恢复等场景
skills/kostja94_marketing-skills/seo-monitoring/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill seo-monitoring -g -y
SKILL.md
Frontmatter
{
    "name": "seo-monitoring",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to build an SEO data analysis system, monitor indexing\/traffic\/keywords\/backlinks, or set up benchmarks. Also use when the user mentions \"SEO data analysis,\" \"SEO monitoring,\" \"article database,\" \"traffic benchmark,\" \"penalty recovery,\" \"SEO work document,\" \"SEO dashboard,\" \"keyword tracking,\" \"ranking monitoring,\" \"indexing report,\" or \"backlink monitoring.\" For GSC API, use google-search-console."
}

Analytics: SEO Monitoring

Guides building a holistic SEO data analysis system. Covers four core metrics (indexing, traffic, keywords, backlinks), benchmark setup, article database, tool selection, traffic diversification, penalty recovery, and work document management.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Core metrics: Indexing, traffic, keywords, backlinks
  • Benchmark: Natural traffic baseline; trend comparison
  • Article database: Per-article performance tracking
  • Tool selection: GA4, GSC, SEO tools, analytics platforms
  • Traffic diversification: Healthy source mix
  • Penalty recovery: Algorithm impact, fix workflow
  • Work documents: Monthly records, responsibility tracking

Four Core Metrics

1. Indexing

Metric Purpose Data Source
Pages indexed / not indexed Coverage; early focus: all target pages indexed GSC, site: command, SEO tools
Keyword count per page More keywords = more potential traffic SEO tools
Index coverage Target pages indexed; functional pages findable GSC, site: command

Early priority: Ensure all pages that need to rank are indexed.

2. Traffic

Metric Purpose Data Source
Total traffic Growth; keyword relevance (irrelevant traffic has little value) GA4, SEO tools
Subdirectory traffic Per-section performance; concentration vs dispersion SEO tools, GA4
Competitive comparison Organic, keyword traffic, total clicks vs competitors SEO tools
Organic by page / country Granular breakdown GA4, GSC

3. Keywords

Metric Purpose Data Source
Rank changes Target keyword movement GSC, SEO tools
Keyword count New gains / losses per page SEO tools, GSC

4. Backlinks

Metric Purpose Data Source
Referring domains vs backlinks Ratio; directory links can be high volume but low value SEO tools
Backlink quality Do links drive traffic? Low ROI = deprioritize SEO tools, GA4 (referral)

Natural Traffic Benchmark

Location: GA4 > Reports > Acquisition > Traffic acquisition

  1. Review organic traffic trend
  2. Record baseline (e.g., monthly total)
  3. Compare periodically to detect growth or decline

Tip: Add CTA events on key articles to track content ROI (see analytics-tracking).

Article Database

Track per-article performance to find high/low patterns:

Field Use
URL, publish date, target keywords Content metadata
Index status, rank, traffic, backlinks Performance
vs benchmark or competitors Context

Use to guide topic selection, optimization, and resource allocation.

Tool Selection

Tool examples are illustrative; no endorsement implied.

Use Tools
Precise attribution GA4, GSC, Bing Webmaster, Yandex Webmaster
Visit analytics Analytics platforms (e.g. Umami, Plausible)
Third-party estimates SEO tools
SEO data SEO tools

Attribution config:

  • User ID: Cross-device, cross-session identification; send to GA4
  • GSC API: Index, clicks, impressions, coverage for automation, dashboards

Choose by privacy, cost, and team workflow.

Traffic Diversification

Principle Guideline
Search share Keep organic search below ~75% of total
Health Higher direct + referral share = healthier
Brand sites Diversified traffic is common for strong brands
Non-brand Possible without brand (e.g., tool sites)
Reputation Site/brand reputation matters; Google assessors evaluate it
Engagement Content, email, social, free tools drive return visits

Penalty Recovery

Step Action
Identify Which algorithm update caused the impact
Analyze Site issues; draft fix plan
Assess cost Decide if fixes are worth it; sometimes abandoning is best
Execute Implement changes; wait at least 3 months until next major update
Parallel Use other channels for quality traffic; improve engagement data for Google
Data window Google typically uses ~6 months of data for site quality
Recovery Outcome is uncertain; do what you can, then wait

Monitoring Metrics Table

Traffic

Metric Source Notes
Total sessions GA4
Channel share GA4
Channel absolute GA4
Country % and absolute GA4
Top pages SEO tools Compare with competitors
Key page traffic GA4 Define "key pages" first

Engagement

Metric Source Notes
Pages per session GA4 Use GA for own site; third-party for competitors
Avg session duration GA4
Bounce rate GA4

Backlinks

Metric Source Notes
Domain authority SEO tools
Backlinks, referring domains SEO tools
Top referring domains by authority SEO tools
Important links Manual log Track loss
Link graph SEO tools Health check
New quality links (self + competitors) SEO tools Outreach
Indexed pages SEO tools High-authority pages; internal linking
Outbound domains SEO tools Partnership opportunities

Keywords

Metric Source Notes
Keyword count SEO tools How many keywords rank

Content Output

Metric Source Notes
Articles published Manual Weekly count
Published vs indexed GSC New content indexing
New page traffic GA4 Fresh content performance

Monthly Record Template

Category Metric Source Notes Month 1 Month 2
Traffic Total sessions GA4
Traffic Channel share GA4
Engagement Pages per session GA4
Backlinks Referring domains SEO tools
Content Articles published Manual

Adjust rows as needed.

Work Document Management

  • Structure: Metrics, sources, notes, monthly values
  • Benefits: Regular review, month-over-month trends, clear ownership
  • Format: Spreadsheet or doc; assign owners per metric

Output Format

  • Core metrics summary (indexing, traffic, keywords, backlinks)
  • Benchmark and trend
  • Article database structure (if applicable)
  • Tool recommendations
  • Monitoring table (customized)
  • Action items and owners

Related Skills

  • traffic-analysis: Traffic sources, attribution, diversification
  • analytics-tracking: GA4, events, CTA attribution, User ID
  • google-search-console: GSC reports, indexing, API
  • ai-traffic-tracking: AI search traffic
  • backlink-analysis: Backlink audit, toxic links
  • indexing: Fix indexing issues
指导SEO策略规划、优先级排序及工作流执行。涵盖技术基础、页面优化和内容建设,适用于从零开始或审计现有网站,强调以用户为中心并整合AI搜索趋势。
制定SEO计划 SEO优先级评估 SEO路线图 SEO审计 了解SEO工作流 有机增长策略
skills/kostja94_marketing-skills/seo/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill seo-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "seo-strategy",
    "metadata": {
        "version": "1.3.0"
    },
    "description": "When the user wants to plan SEO strategy, prioritize SEO work, or understand the SEO workflow. Also use when the user mentions \"SEO strategy,\" \"SEO plan,\" \"SEO roadmap,\" \"SEO priority,\" \"SEO audit,\" \"SEO workflow,\" \"where to start SEO,\" \"SEO approach,\" \"organic growth strategy,\" \"why SEO,\" \"SEO value,\" or \"search strategy.\" For technical\/crawl audit execution, use seo-audit. For keyword research, use keyword-research. For AI search visibility, use generative-engine-optimization."
}

Strategies: SEO

Guides SEO strategy: workflow order, prioritization, Product-Led SEO, and when to use which skills. Use this skill when planning SEO from scratch, auditing an existing site, or deciding what to do next.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Strategic Context: Why SEO

Value Rationale
Traffic control ~68% of initial web traffic from search; search aggregates most user intent
Growth channel ~87% of consumers prefer Google when discovering new categories; 43% of conversions from organic (vs ~11% social)
Cost efficiency SEO user LTV 3–5× paid ads; rank #1 CTR ~27.6% vs #10 ~2.4%
Long-term asset Quality SEO assets yield 3–5 years of traffic; Core Web Vitals correlate with conversion (e.g., +8% per 0.1s faster)

SEO = Google optimization: Google holds ~91% global search share; B2B buyers use search as research starting point. Optimize for Google first; see localization-strategy for non-Google markets.

Reference: Alignify – SEO Core Value and Challenges in AI Search Era

When to Invest in SEO

Stage Recommendation
Cold start Use email, ads, or influencers for first users; SEO takes time (sandbox, 6+ months)
Post-PMF SEO scales; combine with paid for faster feedback; see pmf-strategy, paid-ads-strategy
Team Many SMBs use contractors; SEO spans content, links, tech, UX—full-time team when scaling

Principle: Don't do SEO for SEO's sake; don't fight Google rules; prioritize real user experience.

AI Search Era & Channel Integration

Challenge Response
Zero-click, AI Overviews ~30% clicks go to Google-owned properties; AI Overviews ~12–15% SERP share; TOFU (what/why/how) CTR declining
Algorithm volatility 5000+ updates/year; traffic swings common; focus on helpful content, E-E-A-T
Response Elevate SEO to search experience optimization—user-centric, not rank-centric; see generative-engine-optimization for AI visibility

Channel integration: SEO + ads (validate keywords, retarget); SEO + influencers (backlinks, mentions); SEO + social (UGC, embeddable content). Plugins/apps: functional links back to site.

Workflow Order

Fix foundation before optimizing pages. Execute in this order:

Phase Focus Skills
1. Technical Crawlability, indexing, sitemap robots-txt, xml-sitemap, canonical-tag, indexing, indexnow, site-crawlability
2. On-Page Metadata, structure, schema title-tag, meta-description, page-metadata, schema-markup, internal-links, url-structure, heading-structure
3. Content Keywords, clusters, optimization keyword-research, content-strategy, content-optimization
4. Off-Page Backlinks, authority link-building, backlink-analysis

Technical issues block indexing and crawl; on-page issues limit how well content ranks; content and off-page build authority over time.

Product-Led SEO

SEO leverages content you already have—brand, features, scenarios, input, output, prompt, processes, knowledge—published in a structured way. Even without SEO, you'd showcase product features; SEO makes that content benefit you in traffic.

Principle: Do SEO around product/users, not around industry/search engines.

Products Suited for SEO

Type Suited because
Tool Users have clear use cases and needs
Content Users have clear information needs
E-commerce Users have clear purchase needs
Service Users have clear service needs

Agent/Copilot products: Pure native Agent hard to grow via SEO; users rarely search "agent." Release related features first (e.g., CRM, sales bot for sales agent) to build traffic, then funnel to Agent product. See keyword-research for product positioning test.

SEO Audit Approach

Scenario Order Focus
New site domain-selection → website-structure → Technical → On-Page → Content Choose domain first (if needed); plan pages; build foundation; add content
Existing site Technical audit → On-Page audit → Content gap → Off-Page Fix crawl/index first; then metadata, schema; then content gaps; then links
Low traffic keyword-research → content-strategy → content-optimization Often content or intent mismatch
Not indexing indexing, robots-txt, site-crawlability Technical blockers

SEO Roadmap Priorities

Priority Meaning Examples
P0 Blocker—fix first Crawlability, indexing, robots blocking
P1 Core—do soon Title, meta, schema, sitemap, internal links
P2 Important—not urgent Open Graph, Twitter Cards, IndexNow
P3 Nice to have Rich results, sitelinks optimization

Paid–Organic Alignment

SEO and PPC share the same SERP—ads, AI overviews, videos, organic links. Without alignment, you risk duplication, cannibalization, and wasted spend. Shared keyword data: Use keyword-research for both; google-ads for Search targeting. PPC conversion data can prioritize SEO keywords; organic rank 4+ may reduce need for PPC on those terms.

Reference: Backlinko – SEO and PPC: 8 Smart Ways to Align

Alternative SEO Strategies

Strategy When Skill
Programmatic SEO Scale pages with template + data programmatic-seo
Parasite SEO Leverage high-authority platforms parasite-seo
GEO AI search visibility, citations generative-engine-optimization
Localization Multi-language, international localization-strategy
Multi-domain brand SEO Multiple domains; brand query control multi-domain-brand-seo

Output Format

  • Workflow phase (where you are; what's next)
  • Priority list (P0–P3 tasks)
  • Skill mapping (which skill for each task)
  • Recommendation (start with X; then Y)

Task tracking: Use templates/project-task-tracker.md to track task status; references this workflow.

Related Skills

  • domain-selection: Initial domain choice (Brand/PMD/EMD, TLD); do before website-structure for new sites
  • website-structure: Plan which pages to build; do before or alongside Technical phase
  • keyword-research: Discovery; informs content-strategy, content-optimization, and google-ads
  • google-ads, paid-ads-strategy: Paid–organic synergy; cold start; PPC data for SEO priority
  • pmf-strategy: Validate PMF before scaling SEO; cold start uses other channels
  • content-strategy: Topic clusters, pillar pages; content planning
  • programmatic-seo: Template-based scale; alternative to manual content
  • parasite-seo: High-authority platforms; alternative to owned-site SEO
  • generative-engine-optimization: AI search visibility; complements traditional SEO
  • localization-strategy: Multi-language SEO
  • domain-architecture: Domain structure (subfolder/subdomain/independent); do before or with website-structure when multiple products
  • rebranding-strategy: Domain change, 301 redirects; use when rebranding
  • multi-domain-brand-seo: Brand search control when Hub and Spoke domains coexist
指导SERP特征(如PAA、富媒体结果、知识面板等)的类型识别、获取条件及优化策略,涵盖内容、结构化数据对点击率和零点击流量的影响。
用户询问或希望优化特定SERP特征类型 提及SERP、PAA、sitelinks、rich results、AI Overviews等关键词
skills/kostja94_marketing-skills/serp-features/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill serp-features -g -y
SKILL.md
Frontmatter
{
    "name": "serp-features",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to understand or optimize for SERP feature types (PAA, sitelinks, rich results, AI Overviews). Also use when the user mentions \"SERP,\" \"SERP features,\" \"search result features,\" \"People Also Ask,\" \"PAA,\" \"sitelinks,\" \"knowledge panel,\" \"local pack,\" \"rich results,\" \"zero-click,\" \"SERP types,\" \"AI Overviews,\" \"Bing Copilot,\" or \"Yandex AI.\" For JSON-LD and rich result implementation, use schema-markup. For organic strategy and roadmap, use seo-strategy."
}

SEO On-Page: SERP Features

Guides SERP (Search Engine Results Page) features: types, obtainability, and optimization. ~98.5% of Google's first page includes SERP features; rich results receive ~58% of clicks vs 41% for standard listings. Understanding SERP features helps prioritize keywords and content strategy.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • SERP feature types: Organic enhancements, universal results, paid, knowledge
  • Obtainability: Which features are achievable; which require authority/partnerships
  • Optimization: Content, schema, and structure for each feature type
  • Impact: CTR, zero-click, traffic implications

What Is a SERP Feature?

A SERP feature is any result on a search results page that is not a traditional organic blue link. Features provide quick answers, visual enhancements, or alternative result types (images, local, news, etc.).

Rich Results vs Featured Snippets

Dimension Rich Results Featured Snippets
Location Within standard organic listings; enhance a blue link Above organic results; "position zero"
Generation Structured data (Schema/JSON-LD) added by site owner Google extracts from page content; no schema required
Display Star ratings, prices, images, breadcrumbs, FAQ dropdowns Extracted text in highlighted box; paragraph, list, table, or video
Ranking Do not require high organic rank to appear Page must rank in top ~10 for the query
Industry Often content-specific (recipes, products, events, reviews) Versatile; most industries
CTR Typically increase CTR (up to ~35%); enhanced visibility Can increase or reduce clicks (zero-click when answer suffices)

Rich results = schema-powered enhancements to regular listings. Featured snippets = Google-extracted answer boxes at position zero. Both are SERP features; rich results are a subset driven by structured data. Onely, Seranking

SERP Features ↔ Schema ↔ Rich Results (Strongly Related)

SERP features, schema, and rich results are strongly related. Most achievable SERP enhancements depend on or benefit from Schema.org structured data. Schema makes content machine-readable so search engines can extract and display rich results.

SERP Feature Schema Type Relationship
PAA / FAQ dropdown FAQPage Required or strongly recommended; FAQ schema triggers PAA-style display
Breadcrumbs BreadcrumbList Required; no schema = no breadcrumb rich result
Reviews / Stars AggregateRating, Review Required; star display depends on review schema
Featured Snippet FAQPage, HowTo, Article Supporting; schema helps identify extractable blocks; not required
Sitelinks WebSite + SearchAction Supporting; SearchAction can enable sitelinks
Video VideoObject Required; video thumbnail; Google prioritizes YouTube. See video-optimization
Product Product, Offer Required; shopping results
Recipe Recipe Required; recipe rich result
Job JobPosting Required; Google Jobs
Event Event Required; event rich result
In-Depth Articles Article + author Supporting; Article schema, authorship

Workflow: When targeting a SERP feature, check schema-markup for the schema type; after implementing schema, use serp-features to assess display and optimization.

SERP Feature Categories

1. Organic Enhancements (Achievable)

Feature Description Obtainability
Featured Snippet Direct answer above organic results; paragraph, list, or table Content that answers query in 40–60 words; positions 2–5 often win. See featured-snippet
People Also Ask (PAA) Expandable question boxes with brief answers FAQ-style content; FAQ schema; match question phrasing
Sitelinks Additional links below main result (brand queries) Site structure, internal links, SearchAction schema; mainly branded
Reviews / Stars Star ratings on product/service results Review schema (AggregateRating); eligibility varies by vertical
Breadcrumbs Path shown in result BreadcrumbList schema; clear site structure
Video Video thumbnail in results Video schema; Google prioritizes YouTube; see video-optimization
Image Pack Horizontal row of images Alt, captions, file names, responsive; see image-optimization

2. Universal Results

Feature Description Obtainability
News Box Time-sensitive news block Google News inclusion; publisher eligibility
In-Depth Articles Long-form block (broad terms) Large publishers; 2000–5000 words; authorship, Article schema
Tweet Twitter results in SERP Brand presence; not directly controllable
Shopping Product listings with images/price Paid (PLAs) or Product schema for organic

3. Knowledge / Entity (Limited Obtainability)

Feature Description Obtainability
Knowledge Panel Entity info (brand, person, place) WikiData, partnerships; see entity-seo
Knowledge Card Top-of-SERP semantic answer Same as Knowledge Panel
Local Pack 3 local business results + map Local SEO; GMB, NAP, reviews
Local Teaser Hotels, restaurants with map/sort Local SEO

4. Paid

Feature Description
AdWords (Top/Bottom) Sponsored results; [Ad] label
Shopping (PLAs) Product ads with images
Google Flights Flight search in SERP

5. AI Search Summaries (SERP Feature)

AI-generated answer blocks at the top of search results. These are SERP features—they occupy prime SERP real estate and replace or supplement traditional blue links. Optimize via generative-engine-optimization (GEO).

Engine Feature Description Availability
Google AI Overviews Multi-source AI summary at top; Gemini; cites top 10–12 organic results; 2–3 paragraphs or bullets ~47% US searches; opt-in/experimental in 120+ countries
Bing Copilot Search Curated summaries with cited sources; GPT-4; grouped answers with resources per section; follow-up questions in-search bing.com/copilotsearch; Edge; standard across Bing
Yandex Search with Yandex AI / Neuro YandexGPT synthesizes from real-time search; cited sources; conversational follow-ups; image upload; Russia-focused Yandex Browser, Yandex app; Russia location
Perplexity Standalone AI search; not a SERP feature; 200B+ URL index; live web search perplexity.ai
ChatGPT Web search via GPTbot; not a SERP feature; high-authority, LLM-friendly content chat.openai.com

Source selection: Google pulls from top organic; Bing uses Bing index (9.81% domain overlap with Google); Yandex uses real-time search; Perplexity has independent crawl. AI Overview citations can drive 20–35% higher CTR than equivalent organic positions. SEJ, Yandex, Geneo

6. Other Newer (2025+)

Feature Description
Related Searches Alternative queries at bottom
People Also Search For (PASF) Related queries after user bounces from result; 6-8 suggestions; different from PAA; comprehensive content reduces bounce. See faq-page-generator

Optimization by Feature

Feature Key Actions
Featured Snippet Answer-first (40–60 words); H2/H3; semantic lists/tables. See featured-snippet
PAA FAQ content; FAQ schema; natural question phrasing; faq-page-generator
Sitelinks Clear site structure; internal links; SearchAction; website-structure
Reviews AggregateRating schema; schema-markup
Breadcrumbs BreadcrumbList schema; breadcrumb-generator
Video VideoObject schema; video-optimization; Google prioritizes YouTube
Image Pack Alt, captions, file names, responsive; see image-optimization
Local Pack Local SEO; GMB; NAP consistency
AI Overview / Copilot / Yandex AI GEO; structured content; citable paragraphs; entity signals; see generative-engine-optimization, entity-seo

Zero-Click: SERP Features That Satisfy Intent Without a Click

Zero-click = user gets the answer directly on the SERP and does not click through to any website. SERP features are a major driver of zero-click—they answer queries in-place, reducing organic traffic to publishers.

SERP Features That Cause Zero-Click

Feature Zero-Click Risk Why
Featured Snippet High Direct answer in position zero; user may not need to visit
People Also Ask (PAA) High Expandable answers; full answer visible without click
AI Overviews Very high ~83% of searches with AI Overview may end without click
Bing Copilot / Yandex AI Very high Full AI summary with sources; answer in-place
Knowledge Panel / Card High Entity info; no click needed for simple facts
Rich results (reviews, recipe) Medium Can reduce clicks when answer is complete (e.g. recipe steps)

Implications

  • Traffic: Expect lower organic clicks when zero-click features dominate the SERP
  • Strategy: Prioritize citation over click—being cited in AI Overview, Featured Snippet, or PAA still delivers brand visibility and trust
  • GEO: Optimize for citation (see generative-engine-optimization) so your content is used even when users don't click
  • Keyword research: Screen keywords for zero-click SERP features; adjust traffic forecasts and prioritize commercial/transactional queries where clicks matter more

When Zero-Click Matters Most

  • Informational queries ("what is X," "how to Y")—highest zero-click
  • Commercial/transactional—users often need to visit (compare, buy)
  • Brand queries—sitelinks and Knowledge Panel can still drive clicks to specific pages

SERP Analysis for Strategy

  • SERP check: Search target keyword—observe which features appear
  • Intent signals: Knowledge card → informational; product lists → commercial; brand → navigational
  • Zero-click assessment: Identify features that satisfy intent without click; factor into traffic expectations
  • Keyword research: keyword-research uses SERP features (Featured Snippet, PAA, zero-click) in screening

Rich Results: Types & Impact

Rich results are enhanced search listings powered by structured data. They appear within organic positions (unlike Featured Snippets at position zero). High-impact types: Product, Review snippets, HowTo (desktop), Article/News, Video, Recipe, LocalBusiness, Event, Breadcrumb, Sitelinks searchbox, JobPosting. Limited/context-dependent: HowTo (mobile), FAQ (restricted to government/health for many sites), Education Q&A, Course, SoftwareApplication. AISO Hub

Rich results do not directly boost rankings but can increase CTR by up to 35%. They also make content machine-readable for AI Overviews, Gemini, Copilot, and Perplexity. Validate with Google Rich Results Test.

CTR Impact

  • Zero-click trade-off: SERP features can increase CTR (rich results, sitelinks) or reduce it (Featured Snippet, PAA, AI Overviews when answer suffices). See Zero-Click section above.
  • Rich results: ~58% of clicks vs 41% for standard listings
  • Featured snippets: ~42.9% CTR boost; position zero ~35% of clicks when present
  • Review stars: Higher CTR
  • Sitelinks: Dominate SERP for brand queries; faster path to target page

Output Format

  • SERP features present for target keyword
  • Zero-click assessment (which features satisfy intent without click)
  • Obtainability assessment
  • Optimization priorities (schema, content, structure; citation vs click)
  • Related skills for each feature

Related Skills

  • schema-markup: Strongly related—schema type maps to SERP feature; see mapping table above
  • featured-snippet: Featured Snippet / Position Zero optimization
  • howto-section-generator: HowTo step sections; list snippets; HowTo vs FAQ in SERP context
  • faq-page-generator: PAA optimization; FAQ format
  • keyword-research: SERP features in keyword screening
  • website-structure: Sitelinks; site architecture
  • generative-engine-optimization: AI Overviews, Bing Copilot, Yandex AI; GEO strategy
  • image-optimization: Image Pack; alt, captions, file names
  • video-optimization: Video SEO; VideoObject; YouTube prioritization
  • entity-seo: Knowledge Panel; Organization, Person schema
专用于服务类企业(咨询、代理等)的服务页面内容生成与优化。支持单页或枢纽结构,涵盖要素规划、SEO策略及转化目标设定,适用于创建、审计或重构服务目录。
用户要求创建服务页面 提及'what we offer'或'service offerings' 涉及服务目录规划 需要优化专业服务页面
skills/kostja94_marketing-skills/services/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill services-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "services-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit a services page. Also use when the user mentions \"services page,\" \"what we offer,\" \"service offerings,\" \"consulting services,\" \"service page,\" \"offerings page,\" \"service catalog,\" or \"professional services.\" For sitewide page planning, use website-structure."
}

Pages: Services

Guides services page content and structure for service-based businesses (consulting, agencies, freelancers).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for service offerings and differentiation.

Identify:

  1. Service count: One overview or multiple service pages
  2. Audience: B2B, B2C, or both
  3. Conversion goal: Contact, quote, booking

Best Practices

Structure

Approach When
Single page Few services; compact overview
Hub + detail Many services; main page links to each
Service tiers Packages, pricing tiers

Essential Elements

Element Purpose
Service overview What you offer; who it's for
Benefits Outcomes, not just features
Process How you work; steps
Proof Case studies, testimonials
CTA Contact, get quote, book call

Content

  • Benefit-first: Solve problems; outcomes
  • Clear scope: What's included
  • Differentiation: Why you vs. others

SEO

  • Target "service + location" or "service + industry"
  • Schema: Service type
  • Internal links from Home, About

Output Format

  • Structure (single vs. hub)
  • Service descriptions
  • CTA placement
  • SEO metadata

Related Skills

  • landing-page-generator: Service landing page; CTA to contact, quote, or booking
  • contact-page-generator: Services CTA often goes to contact form
  • url-structure: Service URL hierarchy (e.g. /services/web-development)
  • features-page-generator: For SaaS; services for service businesses
  • pricing-page-generator: Service pricing
  • customer-stories-page-generator: Proof for services
  • title-tag, meta-description, page-metadata: Services page metadata
用于生成或优化电商网站的配送与物流信息页面,涵盖发货区域、承运商、时效及运费等核心内容。适用于用户咨询shipping、delivery或相关政策时,提供结构化的页面大纲和FAQ建议。
用户希望创建或优化配送/物流信息页面 提及 shipping, delivery, shipping policy, free shipping, shipping rates 等关键词
skills/kostja94_marketing-skills/shipping/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill shipping-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "shipping-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create or optimize a shipping or delivery information page. Also use when the user mentions \"shipping,\" \"delivery,\" \"shipping policy,\" \"delivery times,\" \"shipping page,\" \"free shipping,\" \"shipping rates,\" \"delivery options,\" or \"shipping info.\" For legal overview, use legal-page-generator."
}

Pages: Shipping / Delivery

Guides shipping and delivery information page content for e-commerce.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Identify:

  1. Regions: Domestic, international
  2. Carriers: Options, costs
  3. Timelines: Standard, express, cutoff times

Best Practices

Essential Elements

Element Purpose
Regions Where you ship; restrictions
Options Standard, express; costs
Timelines Processing; delivery estimates
Cutoffs Order-by for same-day, etc.
Tracking How to track orders
Issues Lost, damaged; contact

Content

  • Clear: No ambiguity on costs or times
  • Up to date: Reflect current carriers, rates
  • FAQ format: Common questions; easy to scan

Placement

  • Footer; checkout; product pages
  • Link from cart when relevant

Output Format

  • Outline for shipping page
  • Key sections (regions, options, timelines)
  • FAQ structure if applicable

Related Skills

  • refund-page-generator: Often paired in footer
  • faq-page-generator: Shipping questions in FAQ
  • legal-page-generator: Sometimes grouped with policies
用于创建、优化或审计展示用户生成内容(UGC)的作品集或画廊页面。适用于设计工具等产品的社区建设与社会证明,涵盖页面结构、策展标准及最佳实践。
创建作品集页面 优化画廊布局 审计UGC展示效果 提及showcase/gallery/creator showcase
skills/kostja94_marketing-skills/showcase/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill showcase-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "showcase-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit a showcase or gallery page for user-generated content. Also use when the user mentions \"showcase,\" \"gallery,\" \"user work,\" \"UGC,\" \"creator showcase,\" \"examples,\" or \"made with [product].\" For social proof components, use testimonials-generator."
}

Pages: Showcase

Guides showcase and gallery pages that display user-generated work, creator content, or "made with [product]" examples. Builds community, social proof, and inspiration. Common for design tools, no-code, and creator-focused products.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and UGC sources.

Identify:

  1. Content type: Designs, sites, videos, templates, campaigns
  2. Source: Curated, user-submitted, or both
  3. Format: Grid, masonry, carousel; filter by category
  4. Primary goal: Inspiration, sign up, community

Page Structure

Section Purpose
Headline "See What Others Built" or "Made with [Product]"
Intro Inspire; show what's possible
Gallery Grid of items; thumbnail, title, creator, link
Categories Filter by type, industry, use case
Submit CTA to submit work; link to form or guidelines
Featured Highlight top picks; rotate periodically

Best Practices

Curation

  • Quality over quantity: Show best work; maintain bar
  • Diversity: Mix industries, styles, use cases
  • Permissions: Ensure creator consent; attribution

Display

  • Visual-first: Thumbnails, previews; minimal text
  • Click-through: To full project or creator profile
  • Attribution: Creator name, link; respect copyright

Community

  • Submit CTA: "Share your work"; clear guidelines
  • Featured creators: Spotlight; builds loyalty
  • Social: Share to X, LinkedIn; encourage tagging

Output Format

  • Headline and intro
  • Gallery structure (layout, filters)
  • Per-item format (thumbnail, title, creator)
  • Submit CTA and guidelines
  • SEO metadata

Related Skills

  • card: Gallery card structure; thumbnail, title, creator, link
  • grid, masonry, carousel: Grid for uniform; masonry for varying heights (Pinterest-style); carousel for featured rotation
  • customer-stories-page-generator: Case studies vs. visual showcase; different formats
  • testimonials-generator: Testimonials as component; showcase can include quotes
  • creator-program: Creator showcase for program members
  • landing-page-generator: Showcase as conversion page
用于设计、优化或审计博客及文档站点的侧边栏。涵盖布局策略、组件选择(导航、CTA、相关推荐)及移动端适配,强调减少侧边栏以提升转化率,推荐内容内或底部固定CTA。
用户要求设计或优化侧边栏 提及 sidebar, blog sidebar, content sidebar, side panel, sidebar navigation, related content, sidebar CTA, doc sidebar, sidebar widgets
skills/kostja94_marketing-skills/sidebar/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill sidebar-generator -g -y
SKILL.md
Frontmatter
{
    "name": "sidebar-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to design, optimize, or audit a sidebar for blogs, docs, or content pages. Also use when the user mentions \"sidebar,\" \"blog sidebar,\" \"content sidebar,\" \"side panel,\" \"sidebar navigation,\" \"related content,\" \"sidebar CTA,\" \"doc sidebar,\" or \"sidebar widgets.\" For blog layout, use blog-page-generator."
}

Components: Sidebar

Guides sidebar design for content sites (blogs, docs). ~80% of users focus on the left; sidebars influence flow but can hurt conversion if overused. Posts without sidebars show 3.1x higher conversion; bottom-right sticky CTAs outperform sidebars (5.62% vs 0.58% CTR).

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for content structure and conversion goals.

Identify:

  1. Content type: Blog, docs, e-commerce
  2. Primary goal: Navigation, CTA, related content
  3. Mobile: Collapse to hamburger or hide on small screens

Best Practices

Placement

  • Left sidebar: Prime for nav; 80% of users focus left
  • Right sidebar: Secondary content, ads, related posts
  • Static vs sticky: Static for content-focused; sticky for persistent CTA (subscription, cart)

Conversion Reality

Approach Typical result
Sidebar CTA <1% opt-in for blog sidebars
In-content CTA 3x+ higher conversion
Bottom-right sticky 5.62% CTR vs 0.58% sidebar
No sidebar 3.1x higher conversion vs with sidebar

Recommendation: Prefer in-content CTAs or bottom-right sticky over sidebar CTAs. Use sidebar for nav and discovery, not primary conversion.

Widget Guidelines

  • One high-value CTA max; avoid clutter
  • Social proof: Testimonials, logos
  • Popular/related posts: Discovery, internal linking
  • Avoid: Too many ads, affiliate links; reduces trust and speed

Mobile

  • Collapse: Hamburger or off-canvas drawer
  • 57%+ mobile traffic: Responsive design non-negotiable
  • Reduce clutter: Hide or simplify sidebar on small screens

Output Format

  • Placement (left/right, static/sticky)
  • Widget list (nav, CTA, related, social proof)
  • Mobile behavior
  • Conversion note (in-content vs sidebar CTA)

Related Skills

  • toc-generator: TOC often in sidebar for long content
  • cta-generator: Sidebar CTA (use sparingly)
  • newsletter-signup-generator: Sidebar signup; consider in-content instead
  • internal-links: Related posts in sidebar
指导注册登录页的构建、优化与审计,涵盖域名选择、模态框与独立页面决策、折扣集成及SEO。适用于创建账号、学生优惠验证等场景,区分于落地页和邮件订阅生成器。
用户希望创建、优化或审计注册和登录页面 提及 signup page, login page, registration page, auth page, sign up form, create account, student discount at signup, auth subdomain
skills/kostja94_marketing-skills/signup-login/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill signup-login-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "signup-login-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit signup and login pages. Also use when the user mentions \"signup page,\" \"login page,\" \"registration page,\" \"auth page,\" \"sign up form,\" \"create account,\" \"student discount at signup,\" or \"auth subdomain.\" For indexing\/auth URLs, use indexing."
}

Pages: Signup / Login

Guides signup and login page structure, domain choice, modal vs dedicated page, discount integration, and SEO. Signup is the conversion endpoint from landing pages and pricing; when discounts apply at registration (e.g., student discount), signup is the P0 placement. Distinct from landing-page-generator (acquisition); newsletter-signup-generator (email capture only).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and offers.

Identify:

  1. Goal: Account creation, trial, paid signup
  2. Discounts: Student, annual, promo code—apply at signup?
  3. Auth: Self-built vs third-party (Auth0, Clerk, etc.)
  4. Audience: General vs segmented (students, startups)

Domain & URL

Option Use
Main domain /signup, /login, /auth; simple; common for SaaS
Subdomain auth.example.com; Universal Login pattern; credentials not cross-origin; requires Cookie domain config for cross-subdomain session
Third-party Redirect to Auth0, Clerk, etc.; provider hosts auth

Paths: /signup, /login, /register, /auth; keep short and consistent.

Modal vs Dedicated Page

Approach Use
Dedicated page Account creation; discount verification; student verification; higher-quality leads; fewer fake emails
Modal / popup Lightweight lead capture; newsletter; quick demo request; lower quality, higher volume

When discount applies at signup (e.g., student 30% off): Use dedicated page—user needs space for verification, discount display, and form. Modal can work for simple email-only capture; avoid for full account + verification flows.

Mobile: Google penalizes intrusive interstitials; dedicated page avoids penalty.

Page Structure

Section Purpose
Headline Value-focused; "Start free" or "Students: 30% off today, 15% off ongoing"
Trust signals SSL, payment logos, privacy, customer logos; see trust-badges-generator
Media Product screenshot, short video, or demo GIF above fold; reinforces value
Form Minimal fields; email first; social login (Google, GitHub) reduces friction
Discount block Student discount, annual discount, promo code; verification entry when applicable
Privacy / Terms Links; compliance

Discount Integration

Student / Education (education-program)

Element Placement
Headline or subhead "Students: 30% off today, 15% off ongoing"
Verification .edu, SheerID, UNiDAYS; verify at signup to apply discount
Eligibility Brief eligibility; link to full terms

P0 placement: When student discount applies at registration, signup page is primary; pricing page and homepage banner are P1.

Other Discounts

  • Annual discount: Show when user selected annual plan from pricing; confirm before submit
  • Promo code: "Have a code?" link or inline field; validate before or after submit

Form & Verification

  • Minimal fields: Email only when possible; add name only if needed; see newsletter-signup-generator
  • Social login: Google, GitHub; reduces friction; faster than email form
  • Verification entry: .edu (instant), SheerID/UNiDAYS (broader); see education-program
  • Progressive: Collect email first; verify student; then complete profile if needed

SEO

Page Meta Reason
Login noindex, nofollow No search value; security risk; indexed login pages can confuse users
Signup noindex, follow Block from SERP; allow crawl of links (Privacy, Terms)

Implementation: Use <meta name="robots" content="noindex"> or X-Robots-Tag header. robots.txt does not prevent indexing—crawlers must access the page to read the directive. See indexing for full noindex page-type list.

Output Format

  • Domain and URL choice
  • Modal vs page recommendation
  • Structure (headline, trust, media, form, discount block)
  • Discount integration (student, annual, promo)
  • SEO meta tags
  • Related skills for execution

Related Skills

  • indexing: Full noindex page-type list; noindex,follow vs noindex,nofollow
  • education-program: Student discount at signup (P0); verification; placement
  • landing-page-generator: Signup is CTA destination; landing page structure applies to signup when signup is conversion endpoint
  • popup-generator: Modal option for lightweight capture; signup as full form → dedicated page
  • newsletter-signup-generator: Form design; minimal fields; trust signals
  • trust-badges-generator: Trust signals on signup
  • pricing-page-generator: Pricing CTA → signup; annual discount flows to signup
  • website-structure: /login, /signup in Standalone paths
用于创建、审计和优化sitemap.xml,指导搜索引擎发现页面。支持单文件及索引结构,规范URL、lastmod等字段,确保符合协议并提升SEO效果。
用户希望创建或优化sitemap.xml 提及sitemap、URL discovery、IndexNow相关概念
skills/kostja94_marketing-skills/sitemap/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill xml-sitemap -g -y
SKILL.md
Frontmatter
{
    "name": "xml-sitemap",
    "metadata": {
        "version": "1.0.2"
    },
    "description": "When the user wants to create, audit, or optimize sitemap.xml. Also use when the user mentions \"sitemap,\" \"sitemap.xml,\" \"sitemap index,\" \"lastmod,\" \"changefreq,\" \"priority,\" \"URL discovery,\" \"URL discovery for search engines,\" \"single source of truth,\" \"URL config,\" \"unify sitemap IndexNow,\" or \"reduce duplicate maintenance.\" For IndexNow, use indexnow."
}

SEO Technical: Sitemap

Guides sitemap creation, auditing, and optimization for search engine discovery.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (Technical SEO)

  • Sitemap: Create XML sitemap; submit to Google Search Console
  • URL discovery: Help search engines find pages; especially important for large sites or poor internal linking

Task

Generate an XML Sitemap that complies with the sitemaps.org protocol from the project's page list, and declare it in robots.txt.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site URL and page structure.

Identify:

  1. Site URL: Base domain (e.g., https://example.com)
  2. URL count: Total indexable pages (single sitemap vs. sitemap index)
  3. Data source: Static config, CMS, file system, or hybrid

1. Protocol Essentials

Item Spec
Single sitemap limit 50,000 URLs, 50MB (uncompressed)
Sitemap index When exceeding limit, split and have main index reference sub-sitemaps
Encoding UTF-8
URL format Full URL, same host, include https://
Required tags <loc>
Optional tags <lastmod>, <changefreq>, <priority>

2. Field Requirements

Field Description Recommendation
url Full URL https://example.com/path
lastModified Page last modified time Use page metadata, ISO 8601; use YYYY-MM-DD or omit when no data
changeFrequency Update frequency Home daily, list pages weekly, content pages monthly
priority Relative importance Home 1.0, aggregate pages 0.9, content pages 0.7–0.8, others 0.5–0.6

lastmod (Critical)

  • Must be accurate: Reflect actual page modification time, not sitemap generation time. Google requires verifiability; Bing reports ~18% of sitemaps have incorrect lastmod values.
  • Format: W3C Datetime (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS+TZD), e.g. 2025-01-15, 2025-01-15T14:30:00+08:00.
  • Avoid: Using new Date() for lastmod—causes all URLs to share the same timestamp; search engines may ignore.
  • Apply when: Content updates, structured data changes, or important link changes.

changefreq / priority

  • changefreq: Hints only; does not directly determine crawl frequency. Values: always, hourly, daily, weekly, monthly, yearly, never.
  • priority: 0.0–1.0; does not affect ranking; set higher for important pages; avoid identical values for all.

3. Architecture & Split

Single Sitemap

  • When URLs >50,000, generate /sitemap.xml directly.

Sitemap Index (Multiple Sub-sitemaps)

  • When exceeding limit, split by type or language; main index references sub-sitemaps.
  • Example splits: /sitemap/posts.xml, /sitemap/pages.xml, /sitemap/zh.xml, /sitemap/en.xml.
  • Main index outputs /sitemap.xml or /sitemap-index.xml, each entry as <sitemap><loc>...</loc></sitemap>.

Multilingual Sites

  • Split by locale: /sitemap/zh.xml, /sitemap/en.xml.
  • Or by content type + language: /sitemap/zh-posts.xml, /sitemap/en-posts.xml.

Multi-Language Sitemap (hreflang in Sitemap)

For multilingual sites, add xhtml:link hreflang alternates inside each <url> entry. Recommended for large sites (100+ multilingual pages); centralizes hreflang management.

Rules:

  • Every language version must link to ALL others, including itself (self-reference).
  • Include x-default pointing to default locale.
  • Use xmlns:xhtml="http://www.w3.org/1999/xhtml" namespace.
  • <loc> typically uses default-locale (clean) URL; x-default points there too.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url>
    <loc>https://example.com/page</loc>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/page" />
    <xhtml:link rel="alternate" hreflang="zh" href="https://example.com/zh/page" />
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
  </url>
</urlset>

List all language sitemaps in sitemap index; include in robots.txt.

4. Implementation

Tech Stack Implementation
Next.js App Router app/sitemap.ts export MetadataRoute.Sitemap or generateSitemaps
Next.js Pages Router pages/sitemap.xml.ts or getServerSideProps return XML
Astro src/pages/sitemap-index.xml.ts or @astrojs/sitemap
Vite / Static build Build script generates public/sitemap.xml
Other Generate static /sitemap.xml or return dynamically via API

Route Exclusion

  • If the project has i18n / middleware redirects, exclude sitemap paths to avoid redirect.
  • Example (Next.js matcher): '/((?!api|_next|sitemap|sitemap-index|.*\\..*).*)'.

5. Page Scope

Include

  • Home: /
  • Locale/region home pages (e.g. /zh, /en)
  • All indexable content pages, list pages, category pages

Exclude

  • /api/*, /admin/*, /_next/*
  • Static assets (images, JS, CSS, etc.). For image discovery, use image sitemap extension—see image-optimization. For video discovery, use video sitemap extension—see video-optimization
  • Login, admin, drafts, and other pages not intended for indexing

6. Data Source & Maintenance (Single Source of Truth)

  • Single source of truth: Read URL list from config, CMS, or metadata; avoid hardcoding in sitemap.
  • Multiple page types: Tools, blog, marketing pages can be merged into one array for unified generation.
  • New pages: Add only to data source; sitemap updates automatically; avoid maintaining multiple places.

Central Config (Recommended)

Create a config (e.g., site-pages-config.ts) that exports:

  • Page slugs/paths by section (tools, blog, marketing, etc.)
  • Optional: modifiedDate per page for accurate lastmod
  • Function: getAllPageUrls(baseUrl) for sitemap and IndexNow

Why: Sitemap, IndexNow, and feed can all import from the same config—no duplicate URL maintenance. IndexNow should use the same URL list; avoid separate hardcoded lists.

7. robots.txt

Add to robots.txt:

Sitemap: https://example.com/sitemap.xml

With multiple sitemaps, only declare the main index.

8. Output Format

Single Sitemap Example

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2025-01-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://example.com/page</loc>
    <lastmod>2025-01-10</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>

Sitemap Index Example

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap/pages.xml</loc>
    <lastmod>2025-01-15</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap/posts.xml</loc>
    <lastmod>2025-01-14</lastmod>
  </sitemap>
</sitemapindex>

9. Common Issues

Issue Cause / Fix
Sitemap 404 Build failure, wrong path, incorrect export; check routes and deployment
Missing pages URLs not in data source, filtered or excluded
lastmod anomaly Avoid new Date(); use modifiedDate from page metadata
Google not indexing Submit sitemap in GSC; check Coverage (google-search-console) and robots
EN/ZH URL mismatch Use unified data source; share same list when generating by locale

References

Related Skills

  • website-structure: Plan page structure and URL list; sitemap reflects planned/indexable pages
  • google-search-console: Sitemap status, indexed URL count, Coverage
  • robots-txt: Reference sitemap in robots.txt
  • indexnow: Share same URL list from config
  • image-optimization: Image sitemap extension for image discovery
  • video-optimization: Video sitemap extension for video discovery
指导实现网页分享按钮,支持将内容分享至X、LinkedIn等平台。涵盖最佳放置位置(如首段后)、平台专用分享URL构建及品牌图标规范,旨在提升社交互动率,区别于个人主页链接。
用户要求添加或优化社交媒体分享按钮 提及 share buttons, social share, Web Share API, native share 询问分享图标或分享组件的实现细节
skills/kostja94_marketing-skills/social-share/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill social-share-generator -g -y
SKILL.md
Frontmatter
{
    "name": "social-share-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to add, optimize, or audit social share buttons (share article to X, LinkedIn, Facebook, etc.). Also use when the user mentions \"share buttons,\" \"social share,\" \"share to X,\" \"share to LinkedIn,\" \"social sharing,\" \"share icons,\" \"share widget,\" \"native share,\" \"Web Share API,\" or \"share intent URLs.\" For link previews, use open-graph."
}

Components: Social Share Buttons

Guides implementation of share buttons that let users share the current page (article, post, product) to social platforms. Distinct from social profile links (footer links to your brand's X, LinkedIn, etc.) — share buttons share this content.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Share buttons: Share current page URL to X, LinkedIn, Facebook, WhatsApp, etc.
  • Not social profile links (e.g. "Follow us on X") — those live in footer/nav

Why It Matters

  • Websites with visible social share icons tend to see higher social engagement
  • Share buttons amplify reach; Open Graph and Twitter Cards control preview — see open-graph, twitter-cards

Placement (Article Pages)

Fewer, better-placed buttons outperform scattered placement. Research: removing 80% of buttons and repositioning the remaining 20% at high-emotion moments can 3× conversion on share actions.

Placement Best For Notes
After first paragraph Most articles Catches speed-readers; visible early
Sticky sidebar Long-form (desktop) Always visible; consider hiding on mobile
Below title / hero Short posts High visibility
End of article All Natural completion point; pair with CTA
Mid-article (after key insight) Long content Place at friction points (after surprising stat, before CTA)

Avoid: Dozens of icons; every platform when audience uses 2–3. Choose 3–5 platforms that match your audience (e.g. B2B: X, LinkedIn; B2C: X, Facebook, WhatsApp).

Share URLs (Intent Links)

Use platform share/intent URLs so users share with one click:

Platform Share URL pattern
X (Twitter) https://twitter.com/intent/tweet?url={url}&text={text}
LinkedIn https://www.linkedin.com/sharing/share-offsite/?url={url}
Facebook https://www.facebook.com/sharer/sharer.php?u={url}
WhatsApp https://wa.me/?text={url}%20{text}
Telegram https://t.me/share/url?url={url}&text={text}

Encode url and text with encodeURIComponent(). Use page title or a short pre-written message for textplatform-specific prompts with pre-written messages perform ~4× better than generic icons.

Platform Brand Guidelines (Icons)

Use official brand assets. Minimum sizes and color rules:

Platform Min size Colors Notes
Facebook 16px Blue #1877F2 or monochrome No rotation, animation without permission
X (Twitter) 32px Black or white only Use current X logo, not deprecated bird
LinkedIn 21px height Blue #0A66C2 or monochrome Use "in" bug for icons
Instagram 29×29px Black, white, or official gradient Glyph for social icons

Source icons from official brand resource centers. Outdated or non-compliant icons reduce perceived shareability.

Design & Technical

Item Guideline
Format SVG preferred (scalable, small); PNG/WebP with fallback
Performance Lightweight; avoid heavy share plugins that slow LCP
Accessibility aria-label="Share on X"; keyboard accessible
Mobile Touch targets ≥44×44px; consider native share API (navigator.share) on mobile

Native Share API (Mobile)

On supported browsers, navigator.share lets users share via system dialog (includes more apps). Fallback to intent links when unsupported:

if (navigator.share) {
  navigator.share({ title, url, text }).catch(() => {});
} else {
  window.open(shareUrl, '_blank', 'noopener');
}

Output Format

  • Placement recommendation for page type
  • Platforms to include (3–5)
  • Share URL examples with placeholders
  • Icon guidelines (size, source)
  • Accessibility checklist

Related Skills

  • article-page-generator: Share buttons on article pages; placement after intro, end of article
  • blog-page-generator: Share buttons on blog index and post cards
  • open-graph: OG tags control share preview (og:image, og:title, etc.) — required for share buttons to show rich cards on Facebook, LinkedIn
  • twitter-cards: Twitter Cards control X preview — required for share buttons to show rich cards when shared to X
  • footer-generator: Footer has social profile links (Follow us); this skill is for share buttons (share this page)
用于创建、优化或审计以业务成果为导向的B2B解决方案页面。根据行业、公司规模等维度,强调可衡量的价值而非功能,提供结构指南与最佳实践。
用户想要创建、优化或审计解决方案页面 提及 'solutions', 'by industry', 'SMB', 'enterprise', 'business outcomes' 等相关关键词
skills/kostja94_marketing-skills/solutions/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill solutions-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "solutions-page-generator",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to create, optimize, or audit solutions pages. Also use when the user mentions \"solutions,\" \"solutions page,\" \"by industry,\" \"industry solutions,\" \"by company size,\" \"SMB,\" \"enterprise,\" \"by outcome,\" \"business outcomes,\" or \"how we solve X.\" For sitewide page planning, use website-structure."
}

Pages: Solutions

Guides solutions pages focused on business outcomes. Industry-first is the B2B norm (Salesforce, HubSpot). Answer "what outcome do I get for my industry/team/size?" rather than "what does it do?" Distinct from features (capabilities) and use cases (scenarios); solutions emphasize measurable value by segment.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, outcomes, and proof points.

Identify:

  1. Outcomes: Revenue growth, cost savings, efficiency, compliance
  2. Segments: Industry (primary), company size, team
  3. Format: Hub + per-solution pages, or single solutions page
  4. Primary goal: Demo, sign up, contact

Solutions Page Structure

Section Purpose
Headline Outcome-led; "Achieve X with [Product]"
Challenge Business problem, context
Solution How product delivers the outcome
Proof Metrics, case study, ROI
Features used Link to relevant features
CTA Book demo, start trial, see case study
Related Other solutions, use cases (as sub-applications)

Best Practices

Outcome-First

  • Lead with result: "Increase conversion by 30%" not "We have A/B testing"
  • Measurable: Time saved, revenue gained, cost reduced
  • Specific: Industry workflows, not generic claims
  • Differentiate: Each industry/segment gets unique content

Organization (Primary → Secondary)

Dimension Priority Examples
By Industry Primary Healthcare, Retail, Manufacturing, Financial Services
By Company Size Secondary SMB, Mid-Market, Enterprise
By Team Secondary Marketing, Sales, Service, Operations
By Outcome Alternative Scale support, Reduce churn, Accelerate sales

Common Industries (Reference)

Automotive, Communications, Consumer Goods, Consumer Services, Construction & Real Estate, Education, Energy & Utilities, Financial Services, Government, Healthcare & Life Sciences, Manufacturing, Media, Nonprofit, Professional Services, Retail, Technology, Travel & Hospitality.

Company Size Segments

Size Typical Focus
Startup <50 Speed, agility
SMB 50–500 Ease of use, affordability
Mid-Market 500–5000 Scalability
Enterprise 5000+ Customization, compliance, integration

vs. Use Cases vs. Features

Page Answers Primary Organization
Features What does it do? Capabilities
Use cases When would I use it? By scenario, persona, business goal
Solutions What outcome do I get? By industry, company size, team

Hierarchy: Solutions (industry/segment) can contain Use Cases as sub-applications. Example: /solutions/healthcare → use cases: patient scheduling, telemedicine.

When to Use Solutions vs Use Cases

Need Use
By industry (Healthcare, Retail) Solutions
By company size (SMB, Enterprise) Solutions
By team (Marketing, Sales) Solutions
By outcome (Scale support) Solutions
By scenario (Event marketing) Use Cases
By persona (For Realtors, For CMOs) Use Cases
By business goal (Acquisition, Retention) Use Cases
Industry-specific application Use Cases (as Solutions sub-page)

Output Format

  • Solutions list (industries/segments)
  • Per-page structure (sections, messaging)
  • Headline options
  • Proof integration (case studies, metrics)
  • Internal linking (features, use cases, pricing)
  • SEO metadata

Related Skills

  • use-cases-page-generator: Use cases as sub-applications under solutions; link between
  • features-page-generator: Solutions reference features; link to feature pages
  • customer-stories-page-generator: Case studies as proof on solutions pages
  • pricing-page-generator: Solutions pages link to pricing
  • landing-page-generator: Solutions pages apply LP principles
用于生成或优化面向初创企业、教育及特殊项目的专属页面,提供定价优惠。涵盖内容策略、资格验证、转化设计及SEO优化,适用于SaaS和开发者工具等场景。
创建初创企业或教育项目页面 提及 'startups program' 或 'for startups' 涉及 'education discount'、'student plan' 或 'special pricing'
skills/kostja94_marketing-skills/startups/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill startups-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "startups-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or audit a startups, education, or special program page. Also use when the user mentions \"startups program,\" \"for startups,\" \"education discount,\" \"student plan,\" \"for students,\" or \"special pricing.\" For education discounts, use education-program."
}

Pages: Startups / Education

Guides startups and education program pages that offer special pricing or benefits. Targets founders, early-stage teams, students, and educators. Common for SaaS, dev tools, and productivity apps. For channel strategy (discount structure, verification, placement), see education-program.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, pricing, and eligibility.

Identify:

  1. Program type: Startups, education, nonprofit, incubator
  2. Offer: Discount, free tier, credits, extended trial
  3. Eligibility: Criteria (revenue, team size, .edu, etc.)
  4. Primary goal: Sign up, apply, contact

Page Structure

Section Purpose
Headline "Built for Startups" or "Free for Students"
Value Why this program; what they get
Eligibility Who qualifies; how to verify
Offer Discount %, free months, credits
Proof Startups/students who use us
CTA Apply, get started, claim offer

Best Practices

Eligibility

  • Clear criteria: "Pre-seed to Series A" or ".edu email"
  • Verification: Application, form, or self-serve
  • Abuse prevention: Limit per company; revoke if ineligible

Messaging

  • Empathy: "We've been there"; "Grow with us"
  • Social proof: "X startups use [Product]"
  • Urgency: Limited spots; apply by date (if applicable)

Conversion

  • Low friction: Short form; or instant with .edu
  • Follow-up: Email sequence for applicants
  • Link to pricing: Full pricing for reference

Placement: When Standalone vs Embed

Approach When
Embed in pricing Student as tier or block; no separate page; single decision point
Registration flow When discount applies at signup, registration is P0; pricing page P1
Standalone page /education, /student-discount; when SEO or ad landing needed; avoid if persona "for students" already exists

Output Format

  • Headline and value proposition
  • Eligibility criteria
  • Offer details
  • Application flow
  • Internal links (pricing, features)
  • SEO metadata

Related Skills

  • education-program: Student/education discount channel; verification, placement, discount structure
  • discount-marketing-strategy: Startups/education discount programs; campaign design
  • pricing-page-generator: Link to full pricing; program as special tier; Special programs section
  • landing-page-generator: Startups page is a landing page
  • use-cases-page-generator: "For startups" use case
  • customer-stories-page-generator: Startup case studies
指导设计状态页以沟通服务健康、正常运行时间和事件。涵盖结构规划、最佳实践及输出格式,旨在降低故障期间支持压力并建立信任。
用户希望创建或优化状态页 提及 status page, uptime, service health, incident page, system status
skills/kostja94_marketing-skills/status/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill status-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "status-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or structure a status page. Also use when the user mentions \"status page,\" \"status.yourdomain.com,\" \"uptime,\" \"service health,\" \"incident page,\" or \"system status.\" For incident comms, use public-relations."
}

Pages: Status Page

Guides status page design for communicating service health, uptime, and incidents. Typically at status.* subdomain. Reduces support during outages, builds trust.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product and service components.

Identify:

  1. Service components: API, dashboard, billing, etc.
  2. Monitoring: What tools feed status (PagerDuty, Datadog, etc.)
  3. Audience: Customers, developers, internal
  4. Hosting: Self-hosted vs. third-party (Statuspage, Better Uptime, etc.)

Status Page Structure

Section Purpose
Overall status Operational, Degraded, Outage, Maintenance
Components Per service: status, uptime %
Incidents Active and past; timeline, updates
Subscribe Email, SMS, RSS for notifications
Uptime history 90-day or custom range (optional)

Best Practices

Communication

  • Clear status: Operational, Degraded, Partial Outage, Major Outage
  • Incident updates: Timely, honest, actionable
  • Post-mortem: Link to post-incident review when public
  • Maintenance: Schedule ahead, notify subscribers

Design

  • Scannable: Status at a glance; green/yellow/red
  • Mobile: Critical for on-the-go checks
  • Accessible: Color + text; don't rely on color alone
  • No login required: Public status, no auth

Technical

  • Independent hosting: Status page should stay up when main product is down
  • Subdomain: status.yourdomain.com
  • Integrations: Slack, PagerDuty, etc. for incident creation
  • Historical data: Uptime %, incident count

Output Format

  • Structure (components, incident format)
  • Status definitions and colors
  • Incident template (title, updates, resolution)
  • Subscribe options
  • Hosting recommendation (self vs. third-party)

Related Skills

  • docs-page-generator: Link status from docs footer
  • api-page-generator: Link status for developer trust
  • footer-generator: Status link in footer
  • 404-page-generator: Status page as utility; similar UX principles
用于指导Tab和手风琴组件的实现,优化内容组织与用户体验。涵盖垂直手风琴(FAQ)和水平Tab(步骤/对比)布局,强调移动端适配及SEO最佳实践,要求内容在DOM中预加载以确保索引。
添加或优化标签页/手风琴组件 提及FAQ手风琴、可折叠部分、详情摘要 讨论隐藏内容的SEO影响
skills/kostja94_marketing-skills/tab-accordion/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill tab-accordion -g -y
SKILL.md
Frontmatter
{
    "name": "tab-accordion",
    "metadata": {
        "version": "1.1.2"
    },
    "description": "When the user wants to add or optimize tab or accordion components for content organization. Also use when the user mentions \"tab component,\" \"accordion,\" \"expandable content,\" \"collapsible sections,\" \"tabbed content,\" \"FAQ accordion,\" \"how-to tabs,\" \"horizontal tabs,\" \"vertical accordion,\" \"content in tabs,\" \"hidden content SEO,\" \"details summary,\" or \"disclosure widget.\" For FAQ content, use faq-page-generator. For HowTo step sections (schema, placement), use howto-section-generator."
}

Components: Tab & Accordion

Guides tab and accordion implementation for organizing content without excessive vertical space. Two layout patterns: vertical accordion (FAQ-style, stacked) and horizontal tabs (how-to style, side-by-side). Both improve UX by reducing scroll; SEO impact depends on implementation and content placement.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Layout Patterns

Pattern Layout Best for Example
Vertical accordion Stacked; expand/collapse one at a time FAQ, Q&A, long lists, objection handling "How do I return?" → answer below
Horizontal tabs Side-by-side labels; one panel visible How-to steps, product specs, pricing tiers, comparisons "Step 1 | Step 2 | Step 3" or short action labels (see howto-section-generator—labels should match H2 intent, not contradict a fixed “N steps” title)

Mobile: Vertical accordion works well on small screens (natural scroll). Horizontal tabs can feel cramped—consider accordion, dropdown, or full-width tab bar that scrolls.

SEO: Is It Friendly?

Google's position: Google indexes and ranks content inside tabs and accordions fully; hidden content receives full weight (confirmed since 2016 mobile-first indexing). Gary Illyes: "we index the content, its weight is fully considered for ranking."

Practical nuance: Some tests show always-visible content outperforms hidden content in rankings. Reserve tabs/accordions for secondary content; place primary, keyword-critical content in visible areas.

Content type Placement
Primary / ranking-focused Visible above fold; not hidden
Secondary / supporting Tabs, accordions acceptable
FAQ answers Accordion OK; first item expanded by default; see faq-page-generator

Indexing Requirements

Content must be in the DOM on page load. Google does not simulate user clicks; it cannot "click" tabs to discover content.

Implementation Indexed?
All tab content in HTML at load ✅ Yes
Content loaded via AJAX on tab click ❌ No

Recommendation: Server-render all tab content in the initial HTML; use CSS/JS only to show/hide. Prefer <details>/<summary> or equivalent server-rendered markup. See rendering-strategies for SSR, SSG, CSR and crawler visibility.

Horizontal Tabs: More Tabs, More Content?

Technically: Yes—if all content is in the DOM at load, more tabs = more indexable content. Mobile-first indexing gives full weight to tabbed content in HTML.

Strategically: Not always. Signal dilution occurs when many tabs = many different topics on one page. Google may struggle to understand which query the page should rank for; topical authority and keyword focus get spread thin.

Scenario Use tabs? Alternative
Same topic (How-to Step 1/2/3; product specs: dimensions, materials, shipping) ✅ Yes
Different topics (Service A, Service B, Portfolio, Blog) ❌ No Separate URLs per topic; see content-strategy for pillar/cluster

When many horizontal tabs work: All tabs semantically related to one query (e.g., one how-to, one product). When to use separate pages: Each tab is a distinct topic deserving its own URL, crawl, and ranking opportunity.

Implementation

Native HTML (Recommended)

Use <details> and <summary>—no JavaScript required; accessible; crawlable.

<details open>
  <summary>First question (expanded by default)</summary>
  <p>Answer content here.</p>
</details>
<details>
  <summary>Second question</summary>
  <p>Answer content here.</p>
</details>
  • First tab/accordion: Add open attribute so it's expanded by default
  • <summary>: Must be first child of <details>; acts as toggle
  • Progressive enhancement: Style with CSS; add JS only if needed (e.g., close others when one opens)

JavaScript-Dependent Tabs

If using JS-only tabs: ensure all tab content is in the DOM at page load, not loaded via AJAX on click. Google does not simulate tab clicks. Prefer <details>/<summary> or server-rendered HTML. See rendering-strategies.

Avoid

  • Content loaded only after user click (AJAX, lazy-loaded via fetch)—crawlers will not index it
  • display: none or visibility: hidden for primary content—Google may treat differently
  • Many tabs with unrelated topics on one page—causes signal dilution; use separate URLs instead

Content Best Practices

Practice Purpose
First item expanded Ensures primary content visible on load; better for SEO and UX
Descriptive headers <summary> / tab labels should clearly describe content; include keywords naturally
Logical structure H2/H3 for sections; supports snippet extraction; see featured-snippet
Answer-first For FAQ: 40–60 words direct answer; then detail; see faq-page-generator

Use Cases

Use case Format Layout Notes
FAQ Accordion Vertical FAQPage schema; first Q expanded; see faq-page-generator
How-to steps Tabs Horizontal Numbered “Step n” or descriptive tab titles; sequential flow; same step count as section H2 if the H2 uses a number (howto-section-generator)
Product specs Tabs Horizontal Dimensions, materials, shipping—secondary to hero
Long guides Accordion Vertical Collapsible sections; see toc-generator
Pricing tiers Tabs Horizontal Compare plans; primary CTA visible
Objection handling Accordion Vertical "What about X?"—supporting conversion

Schema & Rich Results

  • FAQ (vertical accordion): FAQPage JSON-LD; schema must match on-page content exactly; see schema-markup, faq-page-generator
  • How-to (horizontal tabs): HowTo schema for step-by-step content; see howto-section-generator, schema-markup, featured-snippet
  • Other tabs: No specific schema; ensure semantic HTML (headings, structure)

UX & Accessibility

  • Visual indicator: Arrow, plus/minus, or chevron to show expand/collapse state
  • Keyboard: <details>/<summary> natively keyboard-accessible
  • Core Web Vitals: Avoid layout shift (CLS) when expanding; reserve space or animate smoothly
  • Mobile: Touch targets ≥44×44px; vertical accordion often better than horizontal tabs on small screens (tabs can be cramped; accordion scrolls naturally)

Pre-Implementation Checklist

  • All tab/accordion content in DOM at page load (no AJAX on click)
  • Primary ranking content visible, not hidden
  • First tab/accordion expanded by default
  • Using <details>/<summary> or equivalent server-rendered HTML
  • Headers descriptive; keywords natural
  • Tabs share one topic (avoid signal dilution); if different topics, consider separate pages
  • For FAQ: FAQPage schema matches content

Related Skills

  • faq-page-generator: FAQ structure, answer length, schema; accordion is common FAQ UI
  • howto-section-generator: HowTo section; steps in tabs vs FAQ; JSON-LD alignment
  • featured-snippet: Answer-first, H2/H3; content in accordions can be extracted
  • schema-markup: FAQPage for FAQ accordions; HowTo for step-by-step tabs
  • content-strategy: Pillar/cluster architecture; when to use separate pages vs tabs
  • toc-generator: Collapsible TOC; similar disclosure pattern
  • content-optimization: Word count, structure, multimedia in expandable sections
  • rendering-strategies: SSR, SSG, CSR; content in initial HTML for crawlers
指导设计模板聚合页(画廊/中心)和详情页。涵盖CMS、设计、建站及Vibe Coding场景下的浏览、预览、筛选及使用流程,提供页面结构、CTA设计及参考案例。
用户想要设计模板页面 提到模板画廊或模板中心 提到模板详情页或模板市场 涉及程序化模板或UI模板
skills/kostja94_marketing-skills/template-page/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill template-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "template-page-generator",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to design template pages—aggregation (gallery\/hub) or detail (individual template). Also use when the user mentions \"template page,\" \"template gallery,\" \"template hub,\" \"template detail page,\" \"template marketplace,\" \"programmatic template,\" \"CMS templates,\" \"design templates,\" \"vibe coding templates,\" \"UI templates,\" \"template for users to use,\" or \"template + data pages.\" For SEO-at-scale strategy (data-driven URL sets), use programmatic-seo."
}

Pages: Template Page

Guides template page design for two distinct use cases: (1) Programmatic SEO — template + data = scale; (2) User-facing templates — users browse, select, and use templates to generate their own content (CMS, images, websites, vibe coding). See programmatic-seo for the scale framework. This skill covers template aggregation pages (gallery, hub) and template detail pages (individual template with "use" flow).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.


Two Template Page Types

Type Purpose Examples
Template aggregation page Gallery, hub, category; list templates for browse and filter Canva /templates, Figma templates, VibeCatalog /templates, uitovibe theme gallery
Template detail page Individual template; preview, description, "Use this template" CTA Single template page; user clicks to copy, customize, or open in editor

Core Function: Users Use Templates to Generate Content

Beyond SEO, template pages enable direct use: users select a template and generate their own content. Common patterns:

Domain Flow Examples
CMS Browse templates → Select → Create page/post from template WordPress themes, Webflow templates, Notion templates
Design / Images Browse → Preview → Customize in editor Canva (Customize this template), Figma (Duplicate to your drafts)
Website builders Browse → Select → Customize (colors, fonts, content) → Deploy VibeCatalog, Lovable, Bolt.new, v0; dashboard, landing page, SaaS templates
Vibe coding Browse UI themes → Copy style instructions → Add to AI prompt → Generate uitovibe (copy instructions, paste into Bolt/Lovable/Cursor prompt)

Key CTA: "Use this template," "Customize this template," "Copy to editor," "Get this template," "Start with this."


Template Aggregation Page (Gallery / Hub)

Section Purpose
Headline "Templates for [category]" or "Browse [X] templates"
Filters / Categories By type (dashboard, landing page, resume), platform (Bolt, Lovable, Next.js), use case
Template cards Thumbnail, name, short description, "Use" or "Preview" CTA; grid or list
Search By keyword, tag
Social proof "X templates," "Used by Y users," ratings
CTA Primary action (Browse, Get started, Sign up to use)

Reference: Canva organizes by 50+ design types (Docs, Presentations, Logos, Instagram Posts, etc.); Figma offers 300+ templates; VibeCatalog by project type (dashboards, landing pages). See card for template card structure and grid layout.


Template Detail Page (Individual Template)

Section Purpose
Hero Template name, one-line benefit; primary CTA: "Use this template" / "Customize" / "Copy"
Preview Live preview, screenshot, or interactive demo; multiple views (desktop, mobile)
Description What it does, who it's for, what's included
Features / What's included Components, sections, customization options (colors, fonts, layouts)
How to use Steps: Copy → Paste in editor / Open in [tool] → Customize
Platform compatibility Bolt, Lovable, v0, Next.js, React, etc.
FAQ "Can I use commercially?", "Do I get source code?", "How do I customize?"
Related templates Internal links to similar templates

Vibe coding pattern (uitovibe, VibeCatalog): Template = style instructions or full code; user copies instructions into AI prompt or downloads/clones to customize. CTA: "Copy instructions," "Add to prompt," "Get template."


Template + Programmatic SEO

When templates are generated at scale from data (location pages, integration pages, comparison pages), use programmatic-seo framework:

Section Purpose Data Slot
Intro H1, intro; matches intent {entity_name}, {context}
Evidence block Tables, lists, verified data; avoids thin content {data_table}, {list_items}
Decision Recommendation, next steps {recommendation}
FAQ Schema-friendly Q&A {faq_items}
CTA Conversion {cta_destination}

See programmatic-seo for data, automation, pitfalls. When programmatic pages have conversion goals, apply landing-page-generator principles.


Template + Landing Page (Conversion-Focused Programmatic)

When programmatic pages drive signup/lead capture (e.g., "[Product] for [City]" LPs), apply landing page structure to the template: Stop the scroll → Earn trust → Explain value → Remove doubt → Make the ask. See landing-page-generator.


Common Template Patterns by Domain

Domain Aggregation Detail Use Flow
Design (Canva, Figma) Category browse, filters Preview, "Customize" Open in editor, drag-and-drop
Vibe coding (uitovibe, VibeCatalog) Theme gallery, by style Copy instructions, "Add to prompt" Paste into Bolt/Lovable/Cursor
Website (Lovable, Bolt, v0) By project type Live demo, "Use template" Clone, customize, deploy
CMS By content type Preview, "Create from template" New page/post from template
Programmatic SEO N/A (data-driven) Output pages from template + data Informational; CTA to product

Output Format

  • Page type (aggregation vs detail)
  • Sections (per type above)
  • Primary CTA ("Use this template," "Customize," "Copy instructions")
  • User flow (browse → preview → use → customize)
  • Programmatic alignment (if template + data scale)
  • Schema (ItemList for aggregation; CreativeWork, SoftwareApplication for detail)

Related Skills

  • card: Template card structure; thumbnail, name, description, CTA; grid layout
  • grid: Template grid layout; responsive columns
  • programmatic-seo: Template + data = scale; use cases, data requirements, pitfalls
  • landing-page-generator: Conversion structure; programmatic landing pages
  • tools-page-generator: Tool pages at scale; toolkit hub
  • alternatives-page-generator: Alternatives/comparison at scale
  • category-page-generator: Category structure; similar to template aggregation
  • schema-markup: ItemList, CreativeWork, SoftwareApplication
  • url-structure: /templates, /templates/[slug] hierarchy
用于生成、优化或结构化服务条款页面。涵盖SaaS/电商等类型,提供必备章节、内容原则及SEO建议,输出包含大纲和免责声明,旨在确保合规性并提升用户体验。
用户要求创建服务条款页面 用户提及 'terms of service' 用户提及 'terms and conditions' 用户提及 'ToS' 或 'legal terms'
skills/kostja94_marketing-skills/terms/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill terms-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "terms-page-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or structure Terms of Service page. Also use when the user mentions \"terms of service,\" \"terms and conditions,\" \"terms of use,\" \"user agreement,\" \"ToS,\" \"legal terms,\" \"service agreement,\" or \"terms page.\" For legal overview page, use legal-page-generator."
}

Pages: Terms of Service

Guides Terms of Service page content, structure, and compliance.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Identify:

  1. Product type: SaaS, e-commerce, content, marketplace
  2. Jurisdiction: Governing law, dispute resolution
  3. User types: B2B, B2C, both
  4. Indexing: Typically noindex for legal pages

Best Practices

Required Sections

Section Content
Acceptance How agreement is formed (signup, use)
Service description What you provide
User obligations Acceptable use, account security
Intellectual property Who owns what
Payment If applicable; billing, refunds
Liability Limitations, disclaimers
Termination When and how accounts end
Governing law Jurisdiction, dispute resolution
Changes How you'll notify of updates
Contact How to reach you about terms

Content Principles

  • Clear language: Plain English where possible
  • Structure: Headings, table of contents
  • Updates: Date; version if needed
  • Legal review: Have lawyer review

Placement

  • Footer: Link on every page
  • Signup: Require acceptance (checkbox)
  • Checkout: Link before purchase

SEO

  • Noindex: Common for terms
  • Canonical: If multiple versions

Output Format

  • Outline (sections)
  • Key points per section
  • Acceptance flow (signup, checkout)
  • Disclaimer: Recommend legal review

Related Skills

  • legal-page-generator: Terms is a legal page type
  • privacy-page-generator: Often linked together
  • contact-page-generator: Contact for terms questions
  • indexing: noindex for terms
用于生成和优化客户证言、评论及案例研究模块,提升转化率。涵盖内容格式选择、最佳实践、设计指南、SEO及无障碍优化,支持多场景部署以增强社会证明和信任感。
用户希望添加或优化客户证言、评论或案例研究部分 提及'testimonials'、'reviews'、'customer quotes'、'social proof'、'case studies'、'testimonial section'、'customer reviews'、'review schema'、'testimonial design'或'social proof section'
skills/kostja94_marketing-skills/testimonials/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill testimonials-generator -g -y
SKILL.md
Frontmatter
{
    "name": "testimonials-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to add, optimize, or design customer testimonials, reviews, or case study sections. Also use when the user mentions \"testimonials,\" \"reviews,\" \"customer quotes,\" \"social proof,\" \"case studies,\" \"testimonial section,\" \"customer reviews,\" \"review schema,\" \"testimonial design,\" or \"social proof section.\" For case studies page, use customer-stories-page-generator."
}

Components: Testimonials

Guides testimonial design and placement for conversion. 92% of consumers read reviews before buying; testimonials can increase conversion by up to 67%.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for customer personas and industries.

Identify:

  1. Content type: Text quotes, video, case studies
  2. Placement: Product pages, pricing, hero, dedicated page
  3. Audience: B2B vs B2C; industry/role relevance

Content Formats

Format Effectiveness Best For
Video Highest; 77% say it influences buying Key landing pages
Text + photo Versatile; easy to implement Product, pricing
Case study Deep credibility; specific outcomes B2B, high-value
Star ratings Quick trust signal E-commerce

Video: 95% message retention vs 10% for text.

Best Practices

Content

  • Specific results: "Increased revenue by 40%" over generic praise
  • Real photos and names; avoid stock images
  • Variety: Different customer types, industries, use cases
  • Current: Update regularly; remove outdated testimonials

Placement

  • Product pages, pricing sections, near CTAs
  • Filter by industry/role so prospects see relevant stories
  • Organize by integration or outcome for specificity

Credibility Signals

  • Company logos, job titles
  • Verified reviews (badges, links)
  • Links to customer profiles or live stores when possible
  • Before/after narratives for emotional connection

Design Guidelines

  • Clean layouts; readable typography
  • Engaging visuals; avoid clutter
  • Mobile-optimized; fast loading
  • Carousel for multiple testimonials; see carousel for design and accessibility

SEO

  • Testimonial content can include keywords naturally
  • Structured data (Review, AggregateRating) for rich snippets

Accessibility

  • Provide alt text for photos
  • For carousel design and accessibility (keyboard nav, user control), see carousel

Output Format

  • Format recommendations (text, video, case study)
  • Placement suggestions
  • Content guidelines (specificity, credibility)
  • Design checklist

Related Skills

  • carousel: Carousel layout for multiple testimonials; design and accessibility
  • landing-page-generator: Testimonials as step 2 (earn trust) in landing page flow
  • trust-badges-generator: Complementary trust signals; logos and badges
  • hero-generator: Testimonials in hero for social proof
  • cta-generator: Place testimonials near CTAs; boost conversion
  • pricing-page-generator: Testimonials on pricing pages
指导TikTok付费广告的设置、创意策略及优化。适用于受众年轻、具备视频素材能力的场景,涵盖In-Feed、Spark Ads等格式,提供定向、追踪(Pixel/Events API)、预算出价建议及上线前检查清单。
用户希望设置、优化或管理TikTok广告 提及TikTok Ads、TikTok Pixel、Events API、Spark Ads或TikTok视频广告
skills/kostja94_marketing-skills/tiktok-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill tiktok-ads -g -y
SKILL.md
Frontmatter
{
    "name": "tiktok-ads",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to set up, optimize, or manage TikTok Ads. Also use when the user mentions \"TikTok Ads,\" \"TikTok for Business,\" \"TikTok Pixel,\" \"Events API,\" \"TikTok Spark Ads,\" or \"TikTok video ads.\" For organic TikTok, use tiktok-captions."
}

Paid Ads: TikTok Ads

Guides TikTok Ads setup, creative strategy, and optimization. TikTok excels at younger demographics (18–34) and viral-style video; use when your audience skews young and you have video creative capacity.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Why TikTok

  • Demographics: 18–34; Gen Z and younger millennials
  • Creative velocity: Short-form; native feel; UGC-style performs well
  • Cost: Often lower CPM than Meta for reach
  • Engagement: High watch time; sound-on culture

Ad Formats

Format Use
In-Feed Native video; 9–15s or longer; primary format
TopView First impression; premium; awareness
Spark Ads Boost organic posts; native; creator partnership
Collection Product catalog; e-commerce

Creative Best Practices

  • Hook (0–3s): Pattern interrupt; question; bold statement
  • Vertical: 9:16 for feed; native to platform
  • Sound: Music and captions matter; many watch with sound
  • UGC-style: Authentic; less polished often outperforms
  • First 3 seconds: Determine if they watch

Targeting

Type Use
Interest Broad; algorithm-driven
Demographics Age; gender; location
Lookalike Based on converters or engagers
Retargeting Website visitors; video viewers

Tracking

  • TikTok Pixel + Events API: Server-side for better attribution
  • UTM: Consistent parameters for cross-platform comparison

Budget & Bidding

  • Minimum: Varies by objective
  • Bidding: Start manual; switch to automated with conversion volume
  • Creative volume: Plan for high refresh cadence; creative is main lever

Pre-Launch Checklist

  • Pixel installed; Events API configured
  • Vertical video creative (9:16)
  • Hook in first 3 seconds
  • Captions included
  • Conversion events defined

Related Skills

  • tiktok-captions: Organic TikTok content; Spark Ads boost organic posts; video specs (9:16, captions) align
  • paid-ads-strategy: Channel selection; creative frameworks; budget allocation
  • landing-page-generator: LP for paid traffic
  • analytics-tracking: Conversion tracking; ROAS
生成TikTok视频文案、脚本及优化建议。提供钩子、上下文结构,规范视频参数(9:16, 1080x1920),并推荐相关标签。适用于内容创作与营销场景。
用户希望创建TikTok视频文案或脚本 用户提及TikTok帖子、标题、视频、发布、营销或标签
skills/kostja94_marketing-skills/tiktok/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill tiktok-captions -g -y
SKILL.md
Frontmatter
{
    "name": "tiktok-captions",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create TikTok video captions, scripts, or optimize for TikTok. Also use when the user mentions \"TikTok post,\" \"TikTok caption,\" \"TikTok video,\" \"post to TikTok,\" \"TikTok script,\" \"TikTok content,\" \"TikTok copy,\" \"TikTok hashtags,\" or \"TikTok marketing.\" For TikTok ads, use tiktok-ads."
}

Platforms: TikTok

Guides TikTok caption and video script creation. Use for generating publish-ready captions and video specs. Suitable for copy agents, video agents (format, length), and design agents (thumbnail).

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Output: Publish-Ready Copy

This skill enables agents to generate TikTok captions and video scripts. Captions drive SEO, accessibility, and watch time (12-20% increase with captions). 80%+ watch without sound.

Caption Structure

Element Length Purpose
Hook 5-7 words Grab attention; create curiosity
Context 1-2 sentences Size, price, backstory--info video doesn't show
CTA Optional "Save this," "Link in bio"

Hook examples: "Stop scrolling if you sell on Etsy," "This took me 47 attempts," "Wait for the final result"

Video Specs (for Video Agents)

Spec Value Notes
Aspect ratio 9:16 (portrait) Standard; fills mobile
Resolution 1080x1920 px Recommended
Length 3 sec - 10 min 15-60 sec for tips; 1-3 min for tutorials
Format MP4, MOV H.264, AAC
File size <=5MB (Android), <=88MB (iOS) Varies by device

Caption Best Practices

  • Contrast: Strong font/background contrast; 75% watch mute
  • Auto-captions: TikTok's built-in; algorithm rewards; edit for accuracy
  • Keywords: Improve search visibility
  • Readability: Test on multiple devices

Content by Length

Length Use
15-60 sec Quick tips, humor, hooks
1-3 min Tutorials, storytelling
3-10 min Deep dives (longer format)

Output Format

When generating TikTok content, provide:

  1. Caption (hook + context + CTA)
  2. Video script (if video agent)
  3. Video specs (9:16, 1080x1920, length)
  4. Hashtags (3-5; niche-relevant)

Related Skills

  • tiktok-ads: Paid promotion on TikTok; In-Feed, Spark Ads (boost organic); video specs and captions align with organic content
  • influencer-marketing: TikTok is key influencer platform
  • twitter-x-posts: Cross-posting short-form video
优化网页HTML标题标签以提升SEO和点击率。涵盖多语言长度规范、关键词前置、唯一性及H1对齐等最佳实践,支持基于GSC数据优化低CTR页面,提供推荐标题及A/B测试备选方案。
用户希望优化标题标签或页面标题 提及SEO标题、SERP标题、浏览器标签标题 讨论标题过长、重复标题或优化点击率
skills/kostja94_marketing-skills/title/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill title-tag -g -y
SKILL.md
Frontmatter
{
    "name": "title-tag",
    "metadata": {
        "version": "1.4.0"
    },
    "description": "When the user wants to optimize the title tag, page title, or SERP title. Also use when the user mentions \"title tag,\" \"meta title,\" \"page title,\" \"SEO title,\" \"SERP title,\" \"browser tab title,\" \"title optimization,\" \"headline for search,\" \"title too long,\" \"title tag length,\" \"duplicate title tags,\" or \"optimize title for CTR.\" For meta description, use meta-description. For structured data, use schema-markup."
}

SEO On-Page: Title Tag

Guides optimization of the HTML title tag for search engines and SERP display.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (On-Page SEO)

  • Title tag: Primary search snippet; primary keyword near start; unique per page

Length by Language

Google truncates by pixel width (~580–600px desktop), not character count. Character limits are approximate—CJK chars are wider (~2× Latin), so fewer fit in the same pixels.

Script / Language Title (chars) Notes
Latin (English, Spanish, French, etc.) 50–60 ~55 recommended
CJK (Chinese, Japanese, Korean) 25–35 Full-width chars; 25–30 desktop; 20–28 mobile; use pixel checker when available
Cyrillic (Russian, etc.) 50–55 Slightly wider than Latin
Arabic, Hebrew 30–40 RTL; variable width

Pixel tools: Use a pixel-accurate checker for CJK—font and locale affect display.

Multilingual: Use locale-specific limits; don't translate then truncate. See localization-strategy, translation.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for brand voice and target keywords.

Identify:

  1. Page type: Homepage, landing, blog, product, etc.
  2. Primary keyword: Target search query
  3. Language / script: Apply length rule above
  4. Brand: Optional brand append at end

Best Practices

Item Guideline
Length Per language (see table above); Google truncates beyond ~600px
Front-load Main phrase first; branding at end
Keyword Include primary keyword near the start
Unique One unique title per page
Clarity Match search intent; avoid keyword stuffing
Engagement Numbers, power words, questions can boost CTR ~36%
H1 alignment H1 should align with title; Google may rewrite titles if they mismatch content or intent

Example: Bad: "SEO Tips for Small Business" → Better: "11 SEO Tips That Actually Work (2026)"

Output Format

  • Recommended title (with character count for target language)
  • Alternatives (if A/B testing)

GSC-Driven Optimization

For pages with low CTR despite good position, use google-search-console to identify opportunities. Compare actual CTR vs expected by position; optimize title for pages with CTR gap.

Related Skills

  • google-search-console: CTR analysis, identify low-CTR pages for title optimization
  • meta-description: Meta description pairs with title in SERP
  • localization-strategy, translation: Multilingual metadata; locale-specific length
  • serp-features: SERP features; standard result appearance in context
  • heading-structure: H1 should align with title tag
  • open-graph: og:title for social sharing (often mirrors title)
  • schema-markup: Structured data complements metadata
用于为长文生成、优化或审计目录(TOC)。提供结构规划、HTML/ARIA实现代码及SEO建议,支持多种放置策略与无障碍设计,提升导航体验与搜索引擎排名。
用户要求添加目录 提及TOC或table of contents 请求文章大纲或跳转链接 优化内容导航结构
skills/kostja94_marketing-skills/toc/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill toc-generator -g -y
SKILL.md
Frontmatter
{
    "name": "toc-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to add, optimize, or audit table of contents (TOC) for long-form content. Also use when the user mentions \"TOC,\" \"table of contents,\" \"table of contents for article,\" \"article TOC,\" \"jump links,\" \"content outline,\" \"article navigation,\" \"in-page navigation,\" \"add TOC to blog,\" or \"TOC for long content.\" For article SEO template, use article-page-generator."
}

Components: Table of Contents (TOC)

Guides TOC implementation for long-form articles, guides, and whitepapers. TOCs improve UX and SEO by enabling quick navigation and reducing bounce rates.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for content structure.

Identify:

  1. Content type: Blog article, guide, whitepaper, documentation
  2. Length: TOC most valuable for 1000+ word content
  3. Platform: Web, mobile, both

Placement Strategies

Placement Best For Pros Cons
After intro Most articles Natural flow; visible early Can scroll out of view
Floating sidebar Very long content Always visible More complex; mobile challenges
Collapsible Long articles Less intrusive May be overlooked
Top of article Mobile-first Accessible on all devices Takes space

Technical Implementation

Heading Structure

  • One <h1> per page
  • <h2> for major sections
  • <h3> for subsections; avoid skipping levels
  • Headings >=15 characters for SEO

Jump Links

  • Assign unique IDs to headings (e.g., id="keyword-optimization")
  • Use kebab-case for IDs
  • Link TOC entries via anchor tags (#section-id)
  • Descriptive anchor text; include target keywords naturally

Semantic HTML

<nav aria-label="Table of contents">
  <ol>
    <li><a href="#section-1">Section Title</a></li>
  </ol>
</nav>

SEO Best Practices

Practice Purpose
Schema.org TableOfContents Help search engines understand structure
Keywords in headings Natural integration; avoid stuffing
Jump links in SERP Google may feature TOC links; increases CTR; see serp-features

UX Guidelines

Visibility & Interaction

  • Clear visual hierarchy; indent nested items
  • Highlight current section when scrolling (optional)
  • Smooth scroll behavior for jump links

Mobile

  • Minimum 16px font size
  • Touch targets >=44x44px
  • Responsive layout; consider collapsible on small screens

Accessibility

Requirement Practice
ARIA aria-label="Table of contents" on nav
Keyboard All links keyboard-accessible
Screen readers Proper heading structure; TOC aids skimming

Output Format

  • TOC structure (sections, nesting)
  • Heading/ID mapping suggestions
  • HTML/ARIA notes
  • SEO checklist

Related Skills

  • tab-accordion: Collapsible TOC uses same disclosure pattern; details/summary implementation
  • heading-structure: TOC built from heading structure
  • content-optimization: H2 structure, lists, tables for Featured Snippets
  • featured-snippet: Featured Snippet optimization; TOC supports snippet structure
  • serp-features: SERP features; jump links in results
  • article-page-generator: TOC common in long-form article pages
指导创建、优化或审计免费工具页,用于驱动流量和潜在客户生成。涵盖工具类型判断、与付费功能的区分、单工具及工具集页面的结构规范,以及ICP对齐和技术实现建议。
用户想创建或优化免费工具页面 提及 'free tools', 'tools page', 'toolkit', 'lead magnet tool' 等关键词
skills/kostja94_marketing-skills/tools/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill tools-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "tools-page-generator",
    "metadata": {
        "version": "1.0.2"
    },
    "description": "When the user wants to create, optimize, or audit free tools pages. Also use when the user mentions \"free tools,\" \"tools page,\" \"toolkit,\" \"free [X] tool,\" \"free [X] calculator,\" \"free [X] checker,\" \"lead magnet tool,\" \"programmatic tools,\" or \"tools hub.\" For content strategy, use content-strategy."
}

Pages: Tools (Free Tools)

Guides free tools pages that drive traffic and lead generation for the main product. Tools are free, standalone utilities — not the primary monetization. They serve the same ICP as the paid product, are often extracted mini-features from the full product (low dev effort), and typically scale via programmatic SEO. Distinct from features (paid capabilities) and resources (content hub).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, ICP, and conversion goals.

Identify:

  1. Tool types: Calculators, checkers, converters, generators (see Tool Types below)
  2. ICP alignment: Same audience as paid product; tools solve related problems
  3. Format: Single tool page vs. toolkit hub + per-tool pages
  4. Gate strategy: No signup (max traffic) vs. email gate (lead capture) vs. usage limits (taste → upgrade)
  5. Tech: Often SPA (single-page application); lightweight, fast load

Tools vs Features

Dimension Tools Features
Monetization Free; not primary revenue Paid product capabilities
Purpose Lead gen, traffic, trust Conversion, evaluation
Content Standalone utility; excerpt from product Full product capability list
Scale Many tools; programmatic keywords Fewer, curated
Format Often SPA; toolkit hub Benefit-led grid/list
User intent "I need to do X now" (task) "What can this product do?" (evaluation)

Tool Page Structure

Section Purpose
Headline Task-focused; "Free [X] Checker" or "Calculate [Y] in Seconds"
Tool UI Input → process → output; minimal friction
Instructions 1–3 steps; "Enter URL → Click Analyze → Get Results"
Tool description What it does, who it's for; SEO content
FAQ Tool-specific: "What is [X]?", "How is [Y] calculated?"
CTA "Get full access" / "Try [Product] free" — link to main product
Related tools Internal links to other tools in toolkit

Toolkit Hub Page Structure

Section Purpose
Headline "Free [Category] Tools" or "Free Tools to [Outcome]"
Category tabs/sections e.g., SEO Tools, AI Writing Tools, Local SEO (Semrush pattern)
Tool cards Name, one-line benefit, CTA to tool page
How to use Short ordered procedure (often 3 steps for hubs); e.g. Choose tool → Enter info → Get results. Section H2 per howto-section-generator—prefer outcome/tool-led (“How to use these tools”) or “In N steps …” only when N matches the visible steps
CTA "Access 50+ tools with free account"
Social proof Logos, "Trusted by X brands"

Tool Types (Common Patterns)

Type Examples Programmatic potential
Calculators ROI, LTV, loan, salary, carbon footprint "[X] calculator" keywords
Checkers SEO, backlink, plagiarism, grammar, keyword rank "[X] checker" keywords
Converters Unit, currency, file format, encoding "[X] to [Y] converter"
Generators Sitemap, meta tags, FAQ schema, titles "[X] generator" keywords
Analyzers Content, readability, sentiment "[X] analyzer" keywords

Best Practices

Lead Gen Focus

  • Taste of product: Tool delivers instant value; CTA offers "more" (full product, higher limits)
  • No signup preferred for top-of-funnel; email gate or limits for bottom-of-funnel tools
  • Usage limits: e.g., 3 checks/day free → upgrade for unlimited (Semrush, Ahrefs pattern)

Same ICP, Lower Friction

  • Extract from product: One capability from full product; low dev cost
  • Same keywords: Tools rank for "[X] tool" while product ranks for "[X] software"
  • Bridge: Tool users → trial signup when they hit limits or need more

Programmatic SEO

  • Keyword patterns: "[keyword] checker," "[city] [tool]," "[X] calculator" — template + data
  • Scale: Many tools; each targets long-tail; see programmatic-seo
  • Template: Same structure per tool; unique input/output, FAQ, meta

Technical

  • SPA-friendly: Single page, client-side processing; fast load
  • Schema: SoftwareApplication, HowTo for tool pages
  • Mobile-first: Tools often used on-the-go

URL Structure

Pattern Example
Hub /tools, /free-tools
Category /free-tools/seo, /tools/calculators
Per tool /free-tools/seo-checker, /tools/roi-calculator

SEO

  • Intent: Informational + Transactional (task completion)
  • Title: "Free [X] Tool | [Product]" or "[X] Checker — No Signup"
  • Programmatic: Template + keyword/data; avoid thin content; each tool adds unique value

Output Format

  • Tool list (types, names, keywords)
  • Toolkit hub structure (if multiple tools)
  • Per-tool page structure (sections, CTA placement)
  • Gate strategy (no signup vs email vs limits)
  • Internal linking (hub ↔ tools, tools ↔ product)
  • Programmatic template (if scaling)
  • SEO metadata

Related Skills

  • card: Tool card structure; name, benefit, CTA; grid layout for toolkit hub
  • grid: Toolkit hub grid layout; responsive columns
  • features-page-generator: Tools ≠ features; tools are free lead gen; features are paid capabilities; link from tools to product/features
  • programmatic-seo: Tools at scale; template + data; keyword patterns
  • resources-page-generator: Tools can be a section in resources; or standalone /tools
  • landing-page-generator: Tool page as lead-capture LP when gated
  • schema-markup: SoftwareApplication, HowTo for tool pages
  • howto-section-generator: "How to use" step section; HowTo JSON-LD with tool usage copy
用于生成、优化或审计顶部公告栏及粘性横幅。涵盖促销、紧迫感、信任建立等场景,提供从目标评估到设计规范的完整指南,以提升转化率和用户体验。
用户希望添加或优化顶部公告栏 提及announcement bar, sticky banner, promo banner等关键词 需要设计高转化率的顶部横幅
skills/kostja94_marketing-skills/top-banner/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill top-banner-generator -g -y
SKILL.md
Frontmatter
{
    "name": "top-banner-generator",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to add, optimize, or audit a top announcement bar or sticky banner. Also use when the user mentions \"announcement bar,\" \"top banner,\" \"sticky bar,\" \"promo banner,\" \"discount banner,\" \"student discount banner,\" \"header banner,\" \"announcement bar design,\" \"sticky header,\" \"promo bar,\" \"urgency banner,\" or \"lead capture bar.\" For promos, use discount-marketing-strategy."
}

Components: Top Banner (Announcement Bar)

Guides top announcement bar and sticky banner design for conversion. Top banners answer visitor questions in ~3 seconds (trust, discount, free shipping, urgency) and can increase coupon redemption by 30-50% when used well.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for offers, messaging, and Section 12 (Visual Identity).

Identify:

  1. Goal: Lead capture, promo, urgency, trust, free shipping
  2. Placement: Above header (sticky) or below; dismissible or persistent
  3. Audience: All visitors vs segmented (geo, returning, cart abandoners)

Best Practices

Use Cases

Use Example
Lead capture Newsletter, lead magnet, demo request
Promo Discount code, flash sale, free shipping threshold
Urgency Limited-time offer, countdown
Trust Guarantee, security, shipping info
Launch Product launch, event, cross-sell

Discount Banner Types

Discount Type Banner Example Related
Annual discount "Save 20% with annual billing" discount-marketing-strategy
Student/education "Students: 30% off today, 15% off ongoing" education-program
Startups/education "Startups: Special pricing — Apply now" startups-page-generator
BFCM / seasonal "Black Friday: 25% off — Use code BF25" discount-marketing-strategy
First-time "New users: 20% off first year" discount-marketing-strategy
Referral code "Get $10 off — Refer a friend" referral-program

Placement: Discount banner is P1 for student/education (homepage); pricing page also shows. See education-program for placement priority (registration P0, pricing P1, banner P1).

Design

  • Clear hierarchy: Message + CTA in ~400ms "blink test"
  • Minimal copy: One line typical; link for "Learn more"
  • High contrast: Stand out from page; CTA color distinct
  • Mobile-first: 70%+ traffic on mobile; thumb-friendly close/CTA

Technical

  • Desktop: 1920x600px keeps content above fold; 16:9 common
  • Mobile: 800x1200px (2:3 portrait); use separate assets, not scaled
  • Performance: Optimize images; oversized banners hurt LCP and SEO

Avoid

  • Crowding the header; leave space for nav and logo
  • Too many CTAs; one primary action
  • Stale messaging; refresh every 2-4 weeks

Output Format

  • Message and CTA copy
  • Placement (sticky top, below header)
  • Targeting (all vs segment)
  • Design notes (contrast, mobile)

Related Skills

  • discount-marketing-strategy: Promo/discount strategy; banner displays discount code; 30–50% redemption lift
  • education-program: Student discount banner (P1 placement); "Students: X% off" copy
  • pricing-page-generator: Discount banner supports pricing page; Special programs, promo placement
  • cta-generator: Banner CTA design
  • newsletter-signup-generator: Lead capture in banner
  • brand-visual-generator: Colors, typography for banner
  • navigation-menu-generator: Banner sits above or integrates with nav
指导GA4配置、事件追踪、转化设置及数据质量优化。涵盖User ID跨设备识别、CTA内容ROI归因,规范事件命名与gtag.js实现,确保全渠道数据准确采集与分析。
用户希望设置或审计GA4分析追踪 提到Google Analytics、GA4、event tracking、conversions、attribution model、gtag、data layer等关键词
skills/kostja94_marketing-skills/tracking/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill analytics-tracking -g -y
SKILL.md
Frontmatter
{
    "name": "analytics-tracking",
    "metadata": {
        "version": "1.3.1"
    },
    "description": "When the user wants to set up, audit, or optimize analytics tracking (GA4, events, conversions). Also use when the user mentions \"Google Analytics,\" \"GA4,\" \"event tracking,\" \"conversions,\" \"attribution model,\" \"gtag,\" \"data layer,\" \"GA4 setup,\" \"conversion tracking,\" \"event setup,\" \"User ID tracking,\" or \"CTA attribution.\" For traffic insights, use traffic-analysis."
}

Analytics: Tracking

Guides analytics implementation: GA4 setup, event tracking, conversions, and data quality. Applies to web and app tracking across marketing channels.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

User ID

  • Purpose: Cross-device, cross-session user identification
  • Implementation: Set user_id when user is identified (e.g., login); send to GA4
  • Benefit: Accurate attribution across sessions; better audience building

CTA Attribution (Article ROI)

Track CTA clicks on key articles to measure content ROI:

Action Purpose
Event per CTA e.g., cta_click with content_url, content_type
Conversion Mark as conversion in GA4 for attribution
Use Compare high vs low performers; optimize CTA placement and copy

See seo-monitoring for article database and benchmark context.

Infrastructure Requirements

Component Purpose
Data warehouse Centralized data; BI reporting
Event tracking User behavior; funnel mapping
Attribution Ad pixels; attribution model; impression-to-sale tracking

Optimization flow: Clean UTM + conversion events → attribution reports → optimize channel mix.

Scope

  • GA4: Web data stream, gtag.js, configuration
  • User ID: Cross-device, cross-session identification
  • CTA attribution: Per-article conversion tracking for content ROI
  • Events: Recommended and custom events
  • Conversions: Key events, parameters
  • Quality: Naming, testing, validation

GA4 Setup

Prerequisites

  • Google Analytics property and web data stream
  • Google tag (gtag.js) on all pages
  • Measurement ID (e.g., G-XXXXXXXXXX)

Enhanced Measurement

Enable in Admin > Data Streams > Enhanced Measurement for automatic tracking of:

  • Page views, scrolls, outbound clicks
  • Site search, file downloads
  • Video engagement (YouTube)

Event Tracking

Event Types

Type Description
Automatically collected page_view, first_visit, session_start
Enhanced measurement scroll, click, file_download, etc.
Recommended purchase, sign_up, search, etc.
Custom Business-specific actions

Naming Conventions

  • Length: <=40 characters (GA4 hard limit; longer names are not logged)
  • Format: snake_case, lowercase
  • Verb first: download_pdf, submit_form, video_play
  • Context: pricing_page_scroll vs generic scroll

gtag.js Syntax

gtag('event', '<event_name>', {
  <parameter_name>: <value>,
  // e.g. value: 99.99, currency: 'USD'
});

Place below the Google tag snippet. Events fire on page load or user action (e.g., button click).

Recommended Events

Event Use Key Parameters
purchase E-commerce value, currency, items
sign_up Registration method
login Login method
search Site search search_term
view_item Product view items
add_to_cart Add to cart items

Custom Events

  • Focus on 15-25 meaningful events aligned with KPIs
  • Add parameters for context (e.g., content_type, item_id)
  • Avoid tracking everything; prioritize quality over quantity

Conversions (Key Events)

  • Mark important events as conversions in GA4 Admin
  • Use for attribution, audiences, and reporting
  • Typical: purchase, sign_up, lead, contact

Attribution & Conversion Optimization

Attribution models determine how conversion credit is assigned across touchpoints. Use attribution data to optimize ads and growth channels.

Model Use
Data-driven (GA4 default) ML assigns credit by actual contribution; best for multi-touch journeys
Last-click 100% to final touchpoint; simple but undervalues awareness/consideration

Optimization flow: Clean UTM (source, medium, campaign) + conversion events → GA4 attribution reports → compare channels by attributed conversions → reallocate budget to ads/channels that drive results. Inconsistent UTM fragments data; multi-touch attribution requires reliable touchpoint data.

Reference: UTM.io – UTMs for Marketing Attribution, GA4 – Get started with attribution

Testing & Validation

Tool Use
Realtime See events as they fire
DebugView Detailed event/parameter inspection; requires debug mode
GA4 Debug mode gtag('config', 'G-XXX', { 'debug_mode': true }); or GTM preview
  • Test before launch; verify parameters and naming
  • Check for duplicate events, missing values

Output Format

  • Event list (name, trigger, parameters)
  • Implementation notes (gtag or GTM)
  • Conversion mapping
  • Testing checklist

Related Skills

  • traffic-analysis: UTM, source attribution; attribution for channel optimization
  • ai-traffic-tracking: AI traffic in GA4
  • google-search-console: GSC analysis (correlate with GA4)
  • seo-monitoring: Article database, benchmark, full SEO monitoring framework
分析全渠道网站流量来源、归因及暗流量。涵盖自然/付费流量对比、UTM参数设置、机器人流量过滤及直接流量细分,帮助优化多渠道报告准确性。
用户询问流量来源或归因问题 提及暗流量、直接流量或UTM参数 需要分析自然与付费流量差异 进行渠道分析或流量多样化评估
skills/kostja94_marketing-skills/traffic/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill traffic-analysis -g -y
SKILL.md
Frontmatter
{
    "name": "traffic-analysis",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to analyze website traffic sources, attribution, or dark traffic. Also use when the user mentions \"traffic sources,\" \"dark traffic,\" \"direct traffic,\" \"UTM parameters,\" \"traffic attribution,\" \"channel attribution,\" \"attribution optimization,\" \"channel analysis,\" \"traffic analysis,\" \"traffic diversification,\" \"natural traffic benchmark,\" or \"organic vs paid traffic.\" For GA4 setup, use analytics-tracking."
}

Analytics: Traffic

Guides website traffic analysis across all channels (organic, paid, social, referral, direct). Covers traffic source attribution, dark traffic identification, and multi-channel reporting.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Traffic sources: Organic, paid, social, referral, direct, email
  • Dark traffic: Unattributed visits labeled as "Direct / None"
  • Attribution: UTM tagging, segmenting, reporting accuracy

Branded vs. Non-Branded Traffic (Organic)

Type Characteristics
Branded Higher CTR, conversion, purchase intent; users closer to funnel bottom
Non-branded Touchpoint with future users; most sites get more non-brand traffic; competition fiercer

Brand traffic grows over time as brand awareness increases.

Bot Traffic

A large share of traffic can be bot traffic—RPA, search crawlers, spiders, scrapers. Exclude or segment when evaluating real user behavior; use GA4 filters or segments to isolate human traffic.

Traffic Channels

Channel Typical Sources Attribution
Organic Google, Bing, other search Referrer preserved
Paid (web) Google Ads, Meta Ads, etc. UTM required
Paid (app) App install ads; Google App Campaigns, Apple Search Ads UTM; in-app events
Paid (TV/CTV) Streaming ads; Hulu, Roku, YouTube TV UTM for QR/URL; brand lift
Social Public posts (Facebook, LinkedIn, etc.) Often preserved
Referral External sites, backlinks Referrer preserved
Direct Typed URL, bookmarks No referrer
Email Newsletters, campaigns Often dark without UTM

Dark Traffic

What It Is

Traffic without clear origin--analytics tools default to "Direct" when referrer is missing. Common causes:

  • Private/dark social: WhatsApp, Messenger, Slack, Discord, TikTok shares
  • Email clients: Many strip referrer headers
  • HTTPS->HTTP: Referrer not passed
  • Mobile apps: In-app browsers often omit referrer
  • Ad blockers, privacy tools: Block tracking

Misattribution (Research)

When traffic was sent from known sources, analytics often misattributed:

  • 100% as direct: TikTok, Slack, Discord, WhatsApp, Mastodon
  • 75%: Facebook Messenger
  • 30%: Instagram DMs
  • 14%: LinkedIn public posts
  • 12%: Pinterest

Mitigation

Action Purpose
UTM parameters Tag links in emails, social, campaigns: ?utm_source=X&utm_medium=Y&utm_campaign=Z
Block internal IPs Exclude company visits from reports
Segment direct traffic Split by page type to estimate dark vs. genuine direct

Segmenting Direct Traffic

  1. Expected direct: Homepage, short URLs, brand pages--likely real direct
  2. Unexpected direct: Long URLs, deep pages, product pages--likely dark traffic
  3. Report separately: Use segments in GA4/analytics to avoid overcounting direct

Attribution for Channel Optimization

Ads, growth channels, and medium can be optimized by viewing attribution data. Clean UTM + conversion tracking feeds attribution models; reliable attribution drives budget allocation and channel decisions.

Use Action
Optimize ads Compare paid channels (Google, Meta, LinkedIn) by attributed conversions; reallocate budget to winners
Optimize growth channels Identify which medium (cpc, email, social, referral) drives conversions; scale what works
Multi-touch attribution Requires clean UTM data; inconsistent tagging (e.g., facebook vs Facebook) fragments reports and misattributes

GA4 Default Channel Grouping: Align utm_medium and utm_source with GA4's rules to avoid "Unassigned" traffic. ~30% of campaigns lack proper UTM markup, leading to wasted ad spend; teams standardizing UTM see 29% improvement in attribution accuracy.

Reference: UTM.io – utm_medium, utm_campaign & utm_source Optimization, UTMs for Marketing Attribution

UTM Best Practices

Parameter Use Example
utm_source Origin newsletter, facebook, google
utm_medium Channel type email, cpc, social
utm_campaign Campaign name summer_sale, product_launch
utm_content Variant (optional) banner_a, cta_button
utm_term Paid keyword (optional) running_shoes

GA4 alignment (avoid Unassigned):

Channel utm_medium utm_source
Paid Search cpc google, bing
Paid Social paid-social, cpc facebook, instagram
Email email newsletter, mailchimp
Organic Social social twitter, linkedin
App install cpc, app google, facebook, apple
CTV / Streaming video, ctv hulu, roku, youtube
Display / Banner display, cpc Publisher or network name
Directory ads paid, cpc taaft, shopify, g2, capterra
  • Consistent naming: Lowercase, hyphens; document conventions; never tag internal links (overwrites session attribution)
  • Apply everywhere: Every link in emails, social posts, ads
  • Avoid: Typos, inconsistent values; causes fragmentation

Traffic Diversification

Principle Guideline
Search share Keep organic search below ~75% of total traffic
Health Higher direct + referral share = healthier profile
Brand sites Diversified traffic is common for strong brands
Engagement Content, email, social, free tools drive return visits

See seo-monitoring for full SEO data analysis framework.

Natural Traffic Benchmark

Location: GA4 > Reports > Acquisition > Traffic acquisition

  1. Review organic traffic trend
  2. Record baseline (e.g., monthly total)
  3. Compare periodically to detect growth or decline

Output Format

  • Traffic source breakdown
  • Dark traffic estimate and actions
  • UTM tagging recommendations
  • Segmentation approach for reporting

Related Skills

  • analytics-tracking: Implement UTM, events, conversions; attribution models
  • google-ads, paid-ads-strategy: Paid channels; attribution informs budget allocation
  • ai-traffic-tracking: AI search traffic
  • google-search-console: GSC performance and indexing analysis
  • seo-monitoring: Full SEO data analysis system, benchmark, article database
  • email-marketing: Email strategy; UTM for email links
指导多语言内容的翻译工作流、术语管理及质量优化。涵盖人机翻译选择、术语表与风格指南创建,以及针对UI、营销等不同内容类型的策略,确保品牌一致性与SEO效果。
用户请求翻译或本地化文案 提及术语表、风格指南或机器/人工翻译 需要管理多语言内容质量
skills/kostja94_marketing-skills/translation/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill translation -g -y
SKILL.md
Frontmatter
{
    "name": "translation",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to translate content, create translation workflows, manage terminology, or optimize translation quality. Also use when the user mentions \"translate,\" \"translation,\" \"localization copy,\" \"glossary,\" \"terminology,\" \"style guide translation,\" \"machine translation,\" \"human translation,\" \"TMS,\" or \"multilingual content.\" For strategy, use localization-strategy."
}

Content: Translation

Guides translation workflow, terminology, style, and quality for multilingual content. Covers when to use human vs machine translation, glossary and style guide creation, and SEO considerations. For i18n implementation, hreflang, and URL structure, see localization-strategy.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Workflow: Brief → translate → review
  • Terminology: Glossary creation and management
  • Style guide: Voice, tone, formatting per language
  • Human vs MT: When to use each; post-editing
  • Quality: QA, consistency, SEO
  • Market-specific: Terminology by region

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for brand voice, target markets, and product terminology.

Identify:

  1. Content type: Product UI, marketing copy, blog, landing page, docs
  2. Target language(s): Priority locales
  3. Existing assets: Glossary, style guide, translation memory (TM)

1. Translation Workflow

Brief → Translate → Review

Phase Purpose Output
Brief Context, audience, tone, glossary reference, style guide Translator brief document
Translate First pass; use glossary + TM when available Draft translation
Review Native speaker review; consistency, brand voice, SEO Final translation

Translator Brief

Include in every project:

  • Context: What the content is for (landing page, product UI, blog)
  • Audience: Target market, user persona
  • Tone: Formal, casual, technical
  • Glossary: Link or attach; mandatory terms
  • Style guide: Reference or key rules
  • Constraints: Character limits (UI), SEO keywords to include naturally

Content-Type Workflow

Content Type Approach Notes
Product UI Glossary-critical; short strings; consistency Use TM; avoid machine translation
Marketing copy Brand voice; cultural adaptation Human translation; see terminology
Blog / Article SEO; natural keyword placement Re-research keywords in target language; don't translate keyword lists
Landing page Conversion-focused; CTA clarity Human; test localized CTAs
Technical docs Precision; glossary TM + glossary; consider MT + post-edit for high volume

2. Glossary & Terminology

Glossary Purpose

  • Consistency: Same term translated the same way across all content
  • Brand: Product names, feature names, approved phrasing
  • Compliance: Safety, legal, regulated terms
  • Cost: Reduces rework; accelerates review

Glossary Structure

Field Purpose
Source term Original (e.g., English)
Target term Approved translation
Context Where it appears; usage note
Do not translate Brand names, product names (when applicable)

Market-Specific Terminology

Term English Chinese Notes
Generative AI Generative AI, GenAI AIGC (人工智能生成内容) Use "AIGC" for China; "Generative AI" for English
Influencer Influencer KOL (关键意见领袖) "KOL" common in Chinese marketing
User User 用户 Context-dependent
Dashboard Dashboard 控制台, 仪表盘 Choose one; document in glossary

Principle: Don't translate terminology lists; research how target market searches and speaks. See keyword-research for multi-language keyword research.


3. Style Guide (Translation)

Elements to Define

Element Purpose
Voice Brand personality; formal vs casual
Tone Varies by content type (support = helpful; marketing = persuasive)
Register Formal (您) vs informal (你) in languages that distinguish
Punctuation Quotation marks, spacing (e.g., no space before colon in French)
Formatting Dates, numbers, units; locale-specific
Forbidden Terms or phrases to avoid

Per-Language Considerations

  • Chinese: Simplified vs Traditional; measure word usage
  • German: Formal (Sie) vs informal (du); compound nouns
  • Japanese: Honorifics; keigo for formal contexts
  • Arabic: RTL; formal vs dialect

4. Human vs Machine Translation

When to Use Human Translation

Scenario Reason
Product UI Terminology, UX clarity, brand
Marketing copy Persuasion, cultural nuance, CTAs
Landing pages Conversion; tested copy
Legal, compliance Accuracy, liability
Brand-critical Taglines, campaign copy

When Machine Translation (MT) May Be Acceptable

Scenario Condition
High-volume, low-stakes Internal docs, user-generated content
Draft / triage MT + human post-edit (MTPE)
Real-time Chat, support; with disclaimer

Avoid

  • Raw MT for product/marketing: Terminology errors, cultural misfires, poor SEO
  • MT without post-edit for customer-facing content
  • Translating keyword lists instead of re-researching in target language

5. Translation Memory (TM) & TMS

Translation Memory

  • What: Stores approved source↔target sentence pairs
  • Benefit: Consistency; reuse; lower cost per word; faster turnaround
  • Best practice: Maintain TM; clean duplicates; align with glossary

Translation Management System (TMS)

  • Use for: Centralized workflow; glossary + TM integration; vendor management
  • When: Multiple languages; ongoing translation; team collaboration

6. Quality & SEO

Quality Checklist

  • Glossary terms used correctly
  • Style guide followed
  • No untranslated strings
  • Numbers, dates, units localized
  • Character limits respected (UI)
  • Native speaker review completed

SEO for Translated Content

  • Keywords: Re-research in target language; don't translate from source
  • Metadata: Title, description translated; see title-tag, meta-description
  • Hreflang: Technical implementation in localization-strategy; translation produces the content
  • Thin content: Avoid publishing many low-quality translated pages at once; can trigger penalties. See localization-strategy Multilingual Risks.

7. Integration with Localization

Topic Skill
i18n implementation localization-strategy
URL structure, hreflang localization-strategy
Translation workflow, glossary, style This skill (translation)
Keyword research by market keyword-research; localization-strategy

When adding a new locale: create glossary, style guide, then translate. See localization-strategy for technical checklist (hreflang, sitemap, metadata).


Output Format

  • Translator brief (context, audience, glossary, style)
  • Glossary additions or updates
  • Style guide notes for target language
  • Human vs MT recommendation
  • Quality checklist

Related Skills

Strategy & Technical

  • localization-strategy: i18n, hreflang, URL structure, pricing by market; translation produces content for localized pages
  • content-strategy: Multilingual content planning; avoid thin translations
  • content-marketing: Content types and formats; translation as one channel adaptation

SEO & Content

  • keyword-research: Multi-language keyword research; don't translate keyword lists
  • page-metadata: Hreflang implementation
  • title-tag, meta-description: Translate metadata per locale
  • copywriting: Source copy to translate; brand voice
  • image-optimization: Localize image filenames for translated pages

Pages

  • article-page-generator: Article structure; translate with SEO in mind
  • landing-page-generator: Landing page copy; human translation for conversion
指导信任徽章的设计与布局,通过展示安全认证、支付标识及客户背书来降低购买焦虑并提升转化率。涵盖徽章类型选择、最佳放置位置、防冗余原则及无障碍规范。
用户希望添加或优化信任徽章、安全印章或社会证明元素 提及 trust badges, trusted by, security seals, social proof, trust signals
skills/kostja94_marketing-skills/trust-badges/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill trust-badges-generator -g -y
SKILL.md
Frontmatter
{
    "name": "trust-badges-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to add or optimize trust badges, \"Trusted by\" logos, security seals, or social proof elements. Also use when the user mentions \"trust badges,\" \"trusted by,\" \"security badges,\" \"payment logos,\" \"social proof,\" \"trust seals,\" \"SSL badge,\" \"customer logos,\" \"as seen in,\" or \"trust signals.\" For press logos, use press-coverage-page-generator."
}

Components: Trust Badges

Guides trust badge design and placement for conversion. Trust badges borrow authority from third-party organizations to signal legitimacy and reduce purchase anxiety.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for key partners and certifications.

Identify:

  1. Site type: E-commerce, SaaS, lead gen
  2. Available badges: Security, payment, reviews, guarantees
  3. Placement goals: Hero, checkout, product pages

Badge Types & Impact

Type Best Placement Conversion Impact
Security (SSL, Norton, McAfee) Checkout, payment forms +15–10% for unfamiliar brands
Payment logos (Visa, PayPal, Stripe) Checkout, cart +8→2% trust
Money-back guarantee Product, checkout +6–10%
Reviews/ratings (Trustpilot, BBB) Product, hero +12→8%
Privacy/compliance (GDPR, CCPA) Forms, checkout Data-sensitive transactions

"Trusted by" logos: Client/customer logos in hero or footer; social proof for B2B. "As Seen In" (press coverage): Publication logos; see press-coverage-page-generator for media mentions aggregation.

Best Practices

Quantity

  • 3→ badge types max; more can cause "badge bloat" and reduce conversions by 5→%
  • Quality over quantity; use only legitimate, verifiable badges

Placement

  • Highest leverage: Cart and checkout (near payment fields)
  • Product pages: Near add-to-cart button
  • Hero: "Trusted by" logos for brand credibility
  • Footer: Secondary trust signals

Authenticity

  • Use only real, verifiable badges
  • Fake or irrelevant badges create skepticism
  • Link to verification where appropriate

Design Guidelines

  • Consistent size and style; don't mix clashing visuals
  • Image optimization: Alt text, format—see image-optimization
  • Adequate spacing; avoid clutter
  • Grayscale or muted for "Trusted by" logos (don't compete with primary content)
  • Ensure badges are recognizable at display size

Accessibility

  • Provide alt text for badge images (e.g., "Norton Secured")
  • Don't rely on badges alone for critical information

Output Format

  • Badge recommendations by type and placement
  • Placement map (hero, product, checkout)
  • Quantity guidance (avoid bloat)

Related Skills

  • landing-page-generator: Trust signals as step 2 (earn trust) in landing page flow
  • hero-generator: "Trusted by" often in hero
  • testimonials-generator: Complementary social proof
  • cta-generator: Badges near CTAs increase conversion
  • pricing-page-generator: Trust badges on pricing pages
  • image-optimization: Badge image optimization (alt, format)
  • press-coverage-page-generator: "As Seen In" publication logos; similar visual treatment; distinct (press = media coverage; trust-badges = security, payment, reviews)
  • brand-protection: "Official website" badges to distinguish from impersonation sites
用于为X(Twitter)链接预览添加或优化Twitter Card元数据。支持多种卡片类型,提供HTML和Next.js实现指南,规定图片规格及常见错误排查,并推荐验证工具。
用户希望优化X/Twitter链接预览效果 提及“Twitter Card”、“twitter:card”、“twitter:image”、“X preview”或“tweet preview”
skills/kostja94_marketing-skills/twitter-cards/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill twitter-cards -g -y
SKILL.md
Frontmatter
{
    "name": "twitter-cards",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to add or optimize Twitter Card metadata for X (Twitter) link previews. Also use when the user mentions \"Twitter Card,\" \"twitter:card,\" \"twitter:image,\" \"twitter:title,\" \"X preview,\" or \"tweet preview.\" For Facebook\/LinkedIn previews, use open-graph."
}

SEO On-Page: Twitter Cards

Guides implementation of Twitter Card meta tags for X (Twitter) link previews. Twitter falls back to Open Graph if Twitter-specific tags are missing; add both for best results.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (Social Sharing)

  • Twitter Cards: X-specific meta tags; control how links appear when shared on X/Twitter

Card Types

Type Use case
summary Small card with thumbnail
summary_large_image Large prominent image (recommended; 1200×675px)
app Mobile app promotion
player Video/audio content

Recommended Tags (summary_large_image)

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Your Title">
<meta name="twitter:description" content="Your description">
<meta name="twitter:image" content="https://example.com/image.jpg">
<meta name="twitter:site" content="@yourusername">
<meta name="twitter:creator" content="@authorusername">
<meta name="twitter:image:alt" content="Alt text for image">
Tag Guideline
twitter:card Required; summary_large_image for most pages
twitter:title Max 70 chars; concise title
twitter:description Max 200 chars; summary
twitter:image Absolute URL; unique per page
twitter:site @username of website
twitter:creator @username of content creator
twitter:image:alt Alt text; max 420 chars; accessibility

Image Requirements

Item Guideline
Aspect ratio 2:1
Minimum 300×157 px
Recommended 1200×675 px
Max 4096×4096 px
File size Under 5MB
Formats JPG, PNG, WebP, GIF (first frame only); SVG not supported

Common Mistakes

  • Missing Twitter Card tags (Twitter won't display images properly without them)
  • Using relative image URLs instead of absolute https://
  • Images too small or wrong aspect ratio
  • Title/description too long (gets truncated)

Implementation

Next.js (App Router)

export const metadata = {
  twitter: {
    card: 'summary_large_image',
    title: '...',
    description: '...',
    images: ['https://example.com/twitter.jpg'],
    site: '@yourusername',
    creator: '@authorusername',
  },
};

HTML (generic)

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Your Title">
<meta name="twitter:description" content="Your description">
<meta name="twitter:image" content="https://example.com/image.jpg">
<meta name="twitter:site" content="@yourusername">
<meta name="twitter:image:alt" content="Alt text">

Testing

Related Skills

  • social-share-generator: Share buttons use Twitter Cards for X previews when users share; Cards must be set for share buttons to show proper previews
  • open-graph: OG tags; Twitter falls back to OG if Twitter tags missing
  • title-tag: Title tag often mirrors twitter:title
  • meta-description: Meta description often mirrors twitter:description
  • page-metadata: Hreflang, other meta tags
  • twitter-x-posts: X post copy and engagement (different from link previews)
用于生成、优化和验证SEO友好的URL Slug。适用于博客、文章等页面,遵循简短、小写、连字符分隔及移除停用词等最佳实践,以提升搜索排名和用户体验。
用户希望创建或优化URL Slug 用户提及URL路径、永久链接、SEO友好URL或Slug优化
skills/kostja94_marketing-skills/url-slug/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill url-slug-generator -g -y
SKILL.md
Frontmatter
{
    "name": "url-slug-generator",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to create, optimize, or validate URL slugs for content pages. Also use when the user mentions \"URL slug,\" \"URL path,\" \"blog URL,\" \"article URL,\" \"short URL,\" \"clean slug,\" \"permalink,\" \"slug optimization,\" \"URL structure,\" \"SEO-friendly URL,\" \"create URL slug,\" or \"SEO slug.\" For site-wide URL policy, use url-structure."
}

Components: URL Slug

Guides creation of SEO-friendly URL slugs for blog posts, articles, and content pages. Research on 11.8M Google results shows shorter URLs tend to rank higher; position #1 URLs average 50–60 characters.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • URL slug: The path segment after the base (e.g., ai-people-search in /blog/ai-people-search)
  • Applies to: Blog posts, articles, guides, category pages, product pages

Best Practices

Length

Guideline Target
Slug length Under 60 characters total (including path prefix)
Word count 3–5 words
Principle Shorter = easier to read, share, remember; less truncation in SERPs; see serp-features

Example: "The Complete Guide to AI Search Engine for Finding People" → ai-people-search (3 words) or ai-search-finding-people (4 words), not ai-search-engine-finding-people-speed-discovery-outreach (9 words, 51 chars).

Format

Rule Do Avoid
Separators Hyphens (-) Underscores (_), spaces, periods
Case Lowercase only Mixed case (causes duplicate content)
Characters Letters (a-z), numbers (0-9), hyphens Special chars
Stop words Remove when possible: the, a, and, or, to Keep when needed: "how-to"

Content

Rule Guideline
Primary keyword Include near start; one focus per URL
Descriptive Clear what page is about from slug alone
No keyword stuffing One keyword mention is enough
No dates Omit unless time-specific (news, annual roundups)

Non-ASCII Characters

Scenario Rule
Accented letters Convert to ASCII: é→e, ü→u, ñ→n, ç→c
Non-Latin scripts Use UTF-8 percent-encoding if required; prefer ASCII for compatibility
Example jalapeno not jalapeño; cafe not café

Common Mistakes

  • Copy-pasting full title: Summarize instead — long title → short slug
  • Auto-generated IDs: /post/12847 — always customize
  • Tracking params in slug: UTM, session IDs — use query params separately
  • Changing without redirect: Always 301 from old to new slug

Slug Generation Workflow

  1. Extract primary keyword from title or target keyword
  2. Summarize in 3–5 words (don't copy full title)
  3. Remove stop words (the, a, and, or) unless needed for readability
  4. Lowercase, hyphenate, validate length < 60 chars
  5. Check uniqueness — no duplicate slugs site-wide

Examples

Title / Topic ❌ Too long ✅ Recommended
AI Search Engine for Finding People: Speed vs. Discovery ai-search-engine-finding-people-speed-discovery-outreach ai-people-search or ai-search-finding-people
The Ultimate SEO Checklist for 2025 the-ultimate-seo-checklist-for-2025 seo-checklist-2025
How to Increase Website Traffic how-to-increase-the-traffic-to-your-website increase-website-traffic
Best Running Shoes for Marathon Training best-running-shoes-for-marathon-training-in-2025 best-running-shoes-2025

Output Format

When creating or auditing a slug:

  • Recommended slug (3–5 words)

  • Character count (slug only)

  • Primary keyword included

  • Alternatives if multiple valid options

  • Reference: Alignify URL optimization

Related Skills

  • url-structure: URL hierarchy, site structure; references this skill for slug conventions
  • canonical-tag: When changing slugs, set up 301 redirects
  • article-page-generator: Article URL slugs
  • blog-page-generator: Blog post URL slugs
  • glossary-page-generator: Glossary term slugs
  • products-page-generator: Product page slugs
  • customer-stories-page-generator: Case study page slugs
  • resources-page-generator: Resource page slugs
  • features-page-generator: Per-feature page slugs
提供SEO URL结构优化指南,涵盖层级规划、静态化、多语言及参数处理等最佳实践。用于解决URL路径、slug及层级问题,排除需调用其他技能的具体场景。
用户希望优化网站URL结构或层级 用户询问URL最佳实践、清理URL或Slug策略 用户提及URL路径、固定链接结构或动态URL问题
skills/kostja94_marketing-skills/url-structure/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill url-structure -g -y
SKILL.md
Frontmatter
{
    "name": "url-structure",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to optimize URL structure, fix URL issues, or plan URL hierarchy. Also use when the user mentions \"URL structure,\" \"URL optimization,\" \"slug,\" \"clean URLs,\" \"URL hierarchy,\" \"URL path,\" \"permalink structure,\" \"URL best practices,\" \"dynamic URLs,\" or \"URL parameters.\" For per-page slug wording, use url-slug-generator. For canonical consolidation, use canonical-tag."
}

SEO On-Page: URL Structure

Guides URL structure optimization for SEO: readability, hierarchy, and best practices.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (On-Page SEO)

  • URL hierarchy: Path structure, categories, depth
  • URL format: Static vs dynamic; omit file extensions
  • URL slug: See url-slug-generator for slug creation (3–5 words, under 60 chars)
  • Duplicate variants: See canonical-tag for HTTPS, www, trailing slash

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site structure.

Identify:

  1. Site structure: Categories, subcategories, content types
  2. Current URLs: Existing patterns and issues
  3. Multi-language: URL structure for zh/en (e.g., /zh/, /en/ or subdomains)

Best Practices

URL Guidelines

Principle Guideline
Readable Use words, not IDs; /blog/seo-guide not /p/12345
Short Shorter is generally better; avoid unnecessary depth
Keyword Include target keyword when natural
Lowercase Use lowercase; avoid mixed case
Hyphens Use hyphens to separate words: seo-guide
Avoid Special chars, query params for core content, session IDs

Hierarchy

Pattern Example Use
Flat /page-name Simple sites
Category /blog/post-name, /tools/tool-name Content sites
Nested /category/subcategory/page Deep hierarchies (keep shallow)

Multi-language

Pattern Example
Path prefix /zh/page, /en/page
Subdomain zh.example.com, en.example.com
ccTLD example.cn, example.com

Static vs Dynamic vs Pseudo-Static URLs

Type Example Use
Static /blog/seo-guide Direct file; best SEO; content stable
Dynamic /product?id=123 Program-generated; avoid for indexable content
Pseudo-static /blog/seo-guide (rewritten from .php) Combines both; common in CMS
Rule Prefer static or pseudo-static; if dynamic, keep params ≤2; use canonical-tag and robots-txt (Clean-param)

File Extensions

  • Omit .html, .php, .aspx — keeps URLs technology-agnostic, shorter, easier to refactor
  • Example: /seo-guide not /seo-guide.html

URL Parameter Handling

Scenario Approach
UTM / tracking Canonical to base URL; params in query string only
Search results Canonical to search page; avoid indexing result URLs
Filters / sort Canonical to base; or robots-txt Clean-param
Session IDs Use cookies; never in indexable URLs

Use Cases

Scenario Focus
New site Plan hierarchy upfront; avoid later restructuring
Migration 301 mapping; canonical; see canonical-tag
Large site Dynamic URLs, params, multi-language — canonical + robots
SEO audit Check structure, params, canonical consistency

Common Issues

Issue Fix
Long URLs Shorten; remove redundant words
Dynamic params Use canonical; clean params in robots (Yandex Clean-param)
Mixed case Redirect to lowercase
Changed URLs 301 redirect old to new

Output Format

Related Skills

  • website-structure: Plan structure and URL paths; apply url-structure rules after structure is defined

  • canonical-tag: HTTPS, www, trailing slash — handles duplicate URL variants

  • url-slug-generator: Slug creation for content pages; length, keywords, format

  • category-page-generator: E-commerce category URL hierarchy, faceted URLs

  • products-page-generator: Product URL hierarchy

  • services-page-generator: Service URL hierarchy

  • robots-txt: Clean-param for query params

  • internal-links: URL structure affects link patterns

用于创建、优化或审计用例页面,聚焦场景与痛点。适用于提及用例、角色、业务目标等场景。通过阅读项目上下文,按场景/角色组织内容,区分于功能页,强调故事性与转化,避免SEO重复。
用户希望创建用例页面 用户提到use cases或使用场景 用户提及按角色、场景或业务目标规划页面 用户要求审计现有用例页面
skills/kostja94_marketing-skills/use-cases/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill use-cases-page-generator -g -y
SKILL.md
Frontmatter
{
    "name": "use-cases-page-generator",
    "metadata": {
        "version": "1.2.1"
    },
    "description": "When the user wants to create, optimize, or audit use case pages. Also use when the user mentions \"use cases,\" \"use case page,\" \"for [role],\" \"by persona,\" \"by scenario,\" \"by business goal,\" \"ICP pages,\" or \"audience-specific pages.\" For sitewide page planning, use website-structure."
}

Pages: Use Cases

Guides use case pages that bridge product features and real-world customer problems. Scenario-first is the primary organization. BOFU (bottom-of-funnel) pages for SaaS/B2B. Answer "when would I use it?" and "how does it help me?" — distinct from solutions (industry/outcome).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, ICP, and proof points.

Identify:

  1. Scenarios: Concrete situations (event marketing, lead nurturing)
  2. Personas: Roles (Marketer, Sales Rep, Realtor)
  3. Business goals: Acquisition, Retention, Upsell
  4. Format: Single page vs. per-use-case pages; standalone or under solutions
  5. Primary goal: Demo, sign up, contact sales

Use Case Page Structure

Section Purpose
Headline "When you need to X, we help you Y" or "For [role]: solve X"
Problem Pain points, day-to-day challenges
Solution How product addresses them; link to relevant features (do not duplicate feature copy)
Proof Case study, testimonial, metrics
CTA Try free, book demo, contact
Related Link to other use cases, parent solution

Best Practices

Scenario-First

  • Concrete situations: "When you need to run event marketing at scale..."
  • Before-after: Show transformation, not just features
  • One scenario per page: Don't mix "event marketing" and "lead nurturing"

Content Differentiation (vs Features)

  • Use case = scenario + problem + outcome: Write the story (when, who, why, result); reference features via links.
  • Do not duplicate feature copy: Avoid repeating capability lists or benefit bullets from the features page; instead, describe how the product solves this scenario and link to /features for details.
  • Avoid content cannibalization: Each use case page targets a unique scenario intent; overlap with features (both Commercial/Consideration) dilutes SEO — differentiate by content angle (scenario vs capability).

Organization (Primary → Secondary)

Dimension Priority Examples
By Scenario Primary Event marketing, Lead nurturing, Churn prevention, Customer onboarding
By Persona/Role Primary For Realtors, For CMOs, For Sales Reps
By Business Goal Secondary Acquisition, Retention, Upsell/Cross-sell
By Industry Secondary (ICP) Use as ICP tag; or as sub-page under Solutions

Scenario Examples

Event marketing, Lead nurturing, Churn prevention, Customer onboarding, Patient scheduling, Telemedicine, Inventory management, Demand forecasting.

Business Goal Examples

Acquisition (signups, trials), Retention (reduce churn, re-engagement), Upsell/Cross-sell (expand revenue).

vs. Solutions vs. Features

Page Answers Primary Organization
Features What does it do? Capabilities
Solutions What outcome do I get? By industry, company size, team
Use cases When would I use it? By scenario, persona, business goal

Hierarchy: Use cases can be standalone or sub-pages under Solutions. Example: /solutions/healthcare/patient-scheduling (use case under industry solution).

When to Use Use Cases vs Solutions

Need Use
By scenario (Event marketing) Use Cases
By persona (For Realtors, For CMOs) Use Cases
By business goal (Acquisition, Retention) Use Cases
By industry Solutions
By company size (SMB, Enterprise) Solutions
By team (Marketing, Sales) Solutions
Industry-specific application Use Cases (as Solutions sub-page)

Internal Linking

  • Use cases ↔ features ↔ solutions ↔ customer stories
  • If under a solution: link to parent solution; parent links to use cases

SEO

  • Intent: Commercial; "X software for [scenario]" or "[Product] for [role]"
  • Title: "When to Use [Product] for [Scenario]" or "[Product] for [Role]"
  • Differentiate: Unique workflows, pain points per scenario/persona

Output Format

  • Use case list (scenarios/personas to cover)
  • Per-page structure (sections, messaging)
  • Headline options per segment
  • Internal linking plan (including parent solution if applicable)
  • SEO metadata

Related Skills

  • features-page-generator: Features = what it does; use cases = when/how to use it; reference features via links, don't duplicate; see Content Differentiation above
  • solutions-page-generator: Solutions are industry/outcome-focused; use cases are scenario-focused; use cases can be sub-pages under solutions
  • customer-stories-page-generator: Case studies as proof on use case pages
  • landing-page-generator: Use case pages are a type of landing page; apply LP principles
  • pricing-page-generator: Use case pages link to pricing
指导视频SEO优化,涵盖Google搜索、视频地图及VideoObject结构化数据。重点解析YouTube优先策略、索引发现、元数据管理及关键片段功能,提升视频在搜索结果和AI摘要中的可见性与引用率。
用户希望优化视频以适配Google搜索或视频站点地图 提及video SEO、VideoObject、视频缩略图、视频索引、关键片段或嵌入视频优化
skills/kostja94_marketing-skills/video-optimization/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill video-optimization -g -y
SKILL.md
Frontmatter
{
    "name": "video-optimization",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to optimize videos for Google Search, video sitemap, VideoObject schema, or video SEO on websites. Also use when the user mentions \"video SEO,\" \"video sitemap,\" \"VideoObject,\" \"video thumbnail,\" \"video indexing,\" \"video preview,\" \"key moments,\" \"Clip schema,\" or \"embedded video optimization.\" For page template, use article-page-generator."
}

SEO On-Page: Video Optimization

Guides video optimization for Google Search (main results, video mode, Google Images, Discover), video sitemap, VideoObject schema, and indexing. Note: Google now prioritizes YouTube video results in search; YouTube + Reddit comprise ~78% of social media citations in AI Overviews. For YouTube-specific optimization, see youtube-seo; for GEO distribution via YouTube, see generative-engine-optimization. References: Google Video SEO, Semrush YouTube SEO.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Discovery & indexing: HTML embed elements, video sitemap
  • Metadata: Title, description, thumbnail; stable URLs
  • Structured data: VideoObject schema
  • Features: Video preview, key moments (Clip, SeekToAction), LIVE badge
  • YouTube prioritization: Google favors YouTube in search; embed or host on YouTube for GEO citation

YouTube in Google Search (2025+)

Google prioritizes YouTube video results across search. YouTube receives 48.6B monthly visits (second to Google.com) and is treated as core search infrastructure for AI-driven discovery. Search Engine Land

Context Implication
AI Overviews YouTube citations surged 25.21% since Jan 2025; instructional (+35.6%), visual demos (+32.5%); long-form dominates (94%)
GEO YouTube + Reddit = ~78% of social media citations; Perplexity (38.7%) and Google AI Overviews (36.6%) drive most YouTube citations
Strategy Embed YouTube on site pages for dual indexing; or host on YouTube for GEO citation. See youtube-seo, generative-engine-optimization

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for brand and page context.

Identify:

  1. Hosting: Self-hosted vs YouTube/Vimeo embed
  2. Page type: Dedicated watch page vs supplementary (e.g. blog with embedded video)
  3. Features needed: Preview, key moments, LIVE badge

1. Discovery & Indexing

Use Standard HTML Embed Elements

Google finds videos in <video>, <embed>, <iframe>, or <object>. Do not use fragment identifiers to load video; avoid requiring user interaction (click, swipe) to load.

Do Don't
<video><source src="...mp4"/></video> Fragment-only load; JS-injected without fallback
<iframe src="https://youtube.com/embed/..."> Hide video behind paywall without paywall structured data

JavaScript injection: If video is injected via JS, ensure it appears in rendered HTML; use URL Inspection in Search Console. If using Media Source API, inject HTML video container even when API fails so Google can find metadata.

Video Sitemap

Submit a video sitemap to help Google discover videos. Use <video:video> extension; <loc> = watch page URL.

Structure (from Google):

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
  <url>
    <loc>https://example.com/videos/watch-page.html</loc>
    <video:video>
      <video:thumbnail_loc>https://example.com/thumbs/123.jpg</video:thumbnail_loc>
      <video:title>Grilling steaks for summer</video:title>
      <video:description>Bob shows you how to grill steaks perfectly.</video:description>
      <video:player_loc>https://example.com/player?video=123</video:player_loc>
    </video:video>
  </url>
</urlset>

See xml-sitemap for sitemap index. Video sitemap is an extension; can be standalone or combined.

Indexing Requirements

  • Watch page must be indexed and perform well in search
  • Video embedded on watch page; not hidden behind elements
  • Thumbnail: Valid, stable URL; ≥60×30 px; ≥80% alpha >250 (no heavy transparency)
  • Supported formats: 3GP, 3G2, ASF, AVI, DivX, M2V, M3U, M3U8, M4V, MKV, MOV, MP4, MPEG, OGV, WebM, WMV, etc. Data URLs not supported.

Dedicated Watch Page

For video features (main results, video mode, key moments, LIVE badge), create a dedicated watch page per video—page whose primary purpose is to display that video. Examples: video landing page, episode player page, news video page. Not watch pages: blog with embedded video, product page with 360° video, category page with multiple videos.


2. Stable URLs

  • Thumbnail: Stable URL; CDNs with fast-expiring URLs can prevent indexing
  • Content URL: Stable for video preview and key moments; use contentUrl in VideoObject
  • Player URL: Stable for embedUrl / player_loc

3. Thumbnail & Metadata

Thumbnail Sources (in priority order)

Source How
<video> poster poster attribute
Video sitemap <video:thumbnail_loc>
VideoObject thumbnailUrl
OGP og:video:image

Use same thumbnail URL across all metadata sources.

Thumbnail Specs

Spec Requirement
Formats BMP, GIF, JPEG, PNG, WebP, SVG, AVIF
Size Min 60×30 px; larger preferred
Transparency ≥80% of pixels with alpha >250
Access Must be crawlable (no robots.txt block, no login)

Unique Metadata per Video

Provide unique thumbnailUrl, name, and description for each video in structured data and sitemap. Consistency with visible content is required.


4. VideoObject Schema

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Grilling steaks for summer",
  "description": "Bob shows you how to grill steaks perfectly every time.",
  "thumbnailUrl": "https://example.com/thumbs/123.jpg",
  "uploadDate": "2025-01-15T08:00:00Z",
  "contentUrl": "https://example.com/video/123.mp4",
  "embedUrl": "https://example.com/player?video=123"
}

Required for rich results: thumbnailUrl, name, description. Add contentUrl for video preview and key moments. See schema-markup for full VideoObject; serp-features for Video SERP feature.


5. Video Features

Video Preview

Google selects short clips as dynamic previews. Allow Google to fetch video file; use max-video-preview robots meta to limit duration.

Key Moments (Chapters)

Method Use
Clip Exact start/end + label per segment; all languages
SeekToAction Tell Google where timestamps live in URL; auto-detect; supported languages: en, es, pt, it, zh, fr, ja, de, tr, ko, nl, ru
YouTube Timestamps in description; see youtube-seo

Disable key moments: nosnippet meta.

LIVE Badge

Use BroadcastEvent schema for live streams to show "LIVE" in results.


6. Allow Google to Fetch Video File

For video preview and key moments, Google must fetch the actual video bytes. Do not block contentUrl with noindex or robots.txt. Use stable URLs; ensure both watch page host and video/CDN host have sufficient capacity for crawling.


7. Third-Party Embeds (YouTube, Vimeo)

Google may index both your page and the platform's page. For your watch page: still add VideoObject and optionally video sitemap. For more features (preview, key moments), confirm the platform allows Google to fetch video files.


8. Removal & Restrictions

  • Remove: 404 on watch page, or noindex; or set expires in schema / <video:expiration_date> in sitemap
  • Geo-restrict: regionsAllowed or ineligibleRegion in VideoObject; <video:restriction> in sitemap

9. SafeSearch & Monitoring

  • Mark pages appropriately for SafeSearch if content is adult. See Google SafeSearch.
  • Search Console: Video indexing report; Video rich results report; Performance filtered by "Video" search appearance.

Specs by Context

Context Priority Notes
Website video VideoObject, sitemap, thumbnail This skill
YouTube Title, description, chapters, thumbnail See youtube-seo
GEO / AI citation YouTube distribution; long-form See generative-engine-optimization
Featured Snippet (video) Video schema; timestamps See featured-snippet

Related Skills

  • youtube-seo: YouTube titles, descriptions, thumbnails, chapters
  • schema-markup: VideoObject, BroadcastEvent; rich results
  • serp-features: Video SERP feature; rich results
  • featured-snippet: Video snippet format
  • xml-sitemap: Video sitemap extension
  • google-search-console: Video indexing report; Video rich results
指导短视频与长视频营销战略及脚本创作。涵盖平台特性、前3秒钩子设计、脚本结构及UGC风格优化,适用于TikTok、Reels和YouTube等内容规划。
用户想要制定视频营销策略 需要创建视频脚本 提及短视频或长视频优化 询问TikTok/Reels/YouTube脚本 涉及视频内容策略
skills/kostja94_marketing-skills/video/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill video-marketing -g -y
SKILL.md
Frontmatter
{
    "name": "video-marketing",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to plan video marketing, create video scripts, or optimize for short-form or long-form video. Also use when the user mentions \"video marketing,\" \"video script,\" \"short-form video,\" \"long-form video,\" \"TikTok script,\" \"Reels script,\" \"YouTube script,\" \"video hook,\" or \"video content strategy.\" For on-site video SEO, use video-optimization."
}

Content: Video Marketing

Guides video marketing strategy and script creation for short-form and long-form content. Short-form commands ~82% of internet traffic with 2.5× more engagement than long-form; 71% of viewers decide within 3 seconds whether to continue. Use this skill when planning video content, writing scripts, or optimizing for platforms.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 3 (Value Proposition), 4 (Audience), 11 (Content Strategy).

Identify:

  1. Format: Short-form (TikTok, Reels, Shorts) vs long-form (YouTube, webinar)
  2. Goal: Awareness, consideration, conversion, education
  3. Platform: TikTok, Instagram Reels, YouTube Shorts, YouTube long-form

Short-Form vs Long-Form

Format Length Use Platforms
Short-form 15–60 sec Hooks, tips, UGC-style; 90% watch daily TikTok, Reels, Shorts
Long-form 3–15+ min Deep dives; tutorials; Gen Z discovers via short, engages with long YouTube

Optimal short-form length: 31–60 seconds for higher completion rates.

Critical First 3 Seconds

71% of viewers decide within 3 seconds whether to continue. Hook types:

Hook Type Example
Story-driven "Three months ago, I had zero subscribers..."
Contrarian "Everyone says X. Here's why they're wrong."
Question "Why do 90% of startups fail at this?"
Result-focused "I went from 0 to 10K in 30 days. Here's how."

Script Structure (Short-Form)

Hook (0–3 sec)Problem (3–15 sec)Solution (15–45 sec)CTA (final 5 sec)

Achieves 70%+ completion for algorithmic boost. Frameworks: Hook-Value-CTA, AIDA, PAS, BAB.

Platform-Specific Hooks

Platform Hook Length Notes
TikTok 2 seconds High energy; 4,000-char captions for SEO
Instagram Reels 3 seconds Polished aesthetics; penalizes TikTok watermarks
YouTube Shorts 3–5 seconds Searchable titles; keyword-rich descriptions

UGC-Style Content

  • Authenticity > polish: UGC-style generates 50%+ of engagement
  • Trust: 86% of consumers trust brands publishing UGC more than polished ads

Long-Form Script Structure

  • Hook (0–30 sec): Promise; why watch
  • Intro (30–60 sec): Context; what you'll cover
  • Body: Sections with clear transitions
  • CTA: Subscribe; link; next step
  • Outro: Recap; repeat CTA

Output Format

  • Format (short vs long) recommendation
  • Hook options (2–3 variants)
  • Script (timestamped if long-form)
  • CTA placement
  • Platform optimization notes

Related Skills

  • tiktok-captions: TikTok caption, video specs, script
  • tiktok-ads: TikTok ad creative
  • content-marketing: Video as content format; repurposing
  • youtube-seo: YouTube SEO, description, thumbnail (platform skill)
  • video-optimization: Website video SEO; VideoObject; video sitemap; Google prioritizes YouTube
指导跨渠道视觉内容(图像、信息图)的规划与创建,涵盖平台规格、复用策略及视觉优先策划。适用于社交媒体帖子、网站图片等场景。
用户需要规划或创建视觉内容 提及“内容图片”、“社交媒体图片”、“信息图”或“视觉复用”
skills/kostja94_marketing-skills/visual-content/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill visual-content -g -y
SKILL.md
Frontmatter
{
    "name": "visual-content",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to plan, create, or repurpose visual content (images, infographics, social post images) across channels. Also use when the user mentions \"content images,\" \"social media images,\" \"infographic,\" \"visual content,\" \"post image,\" \"image specs,\" \"visual repurposing,\" \"content visuals,\" or \"image for social post.\" For Pinterest, use pinterest-posts."
}

Content: Visual Content

Guides visual content planning and creation across website, social media, email, and other channels. Images are needed not just for websites—social posts, infographics, and repurposed content all require visuals. Visual-first planning in content calendars improves engagement; cross-channel consistency and repurposing maximize ROI.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • When to use images: By content type and format
  • Specs by context: Website vs social vs email
  • Platform image specs: X, LinkedIn, Pinterest, Instagram, Facebook, YouTube
  • Repurposing: One visual → multiple formats and channels
  • Visual-first planning: Content calendar with image planning

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Section 12 (Visual Identity) for brand consistency.

Identify:

  1. Context: Article, social post, infographic, email, landing page
  2. Channels: Which platforms will use this visual
  3. Repurposing: Will this visual be adapted for other formats?

1. When to Use Images

Content Type Visual Need Notes
Article / Blog Hero image, in-article images, screenshots See image-optimization for web (alt, WebP, LCP)
Social post Single image, carousel, or link preview Platform-specific specs below
Infographic Primary format; data visualization Repurpose to social (cropped), blog (full)
Case study Customer photo, results chart, logo Repurpose to LinkedIn carousel, blog
Product update Screenshot, feature graphic Changelog, email, social
Email Header image, inline graphics Keep lightweight; many clients block images
Landing page Hero, trust badges, screenshots See hero-generator, image-optimization

2. Website vs Social vs Email

Context Priority Skill
Website Alt text, WebP, LCP, responsive, lazy loading image-optimization
Social posts Platform dimensions, aspect ratio, file size Platform skills (X, LinkedIn, Pinterest, etc.)
OG / Twitter Cards 1200×630, 1200×675 for link previews open-graph, twitter-cards
Email Inline-friendly; avoid heavy images; alt for blocked email-marketing

3. Platform Image Specs (Social)

Platform Post Image Stories / Reels Profile Notes
X (Twitter) 1200×675 (16:9), 800×800 400×400 See twitter-x-posts
LinkedIn 1200×627, 1200×1200; carousel up to 20 400×400 See linkedin-posts; vertical preferred on mobile
Pinterest 1000×1500 (2:3) 165×165 Alt text ~25% more impressions; see pinterest-posts
Instagram 1080×1350 (4:5), 1080×1080 1080×1920 (9:16) 320×320 4:5 outperforms square on feed
Facebook 1200×630, 1080×1080 1080×1920 320×320
YouTube Thumbnail 1280×720 800×800

General: 1080px width works across most platforms; vertical (4:5, 9:16) outperforms square on mobile-first feeds. Keep critical elements (logo, text) in safe center—platforms may crop.


4. Visual Repurposing

Principle: One core visual → multiple crops/formats → multiple channels.

Core Visual Adaptations Channels
Infographic Full (blog), cropped sections (Instagram, LinkedIn carousel), square (X) Blog, LinkedIn, Instagram, X
Case study graphic Hero (blog), single slide (LinkedIn), story (Instagram) Blog, LinkedIn, Instagram
Product screenshot Hero (landing), post (X, LinkedIn), email header Website, social, email
Quote graphic Square (X, LinkedIn), 4:5 (Instagram) X, LinkedIn, Instagram

Workflow: Design at largest needed size; export platform-specific crops. Use consistent colors, fonts, logo placement (see brand-visual-generator).


5. Visual-First Content Planning

  • Plan images in content calendar: Don't add visuals as afterthought; visuals drive engagement
  • Batch by theme: Create visuals for a topic cluster or campaign together for consistency
  • Repurposing column: In calendar, note which core piece becomes which visual format for which channel
  • Asset library: Organize by campaign/theme; tag for reuse

6. Format-Specific Notes

Infographics

  • Dimensions: 800–1200px width; height varies by content
  • Export: PNG for web; PDF for download
  • Repurpose: Slice into 3–5 slides for LinkedIn carousel; single stat for X/Instagram

Social Post Images

  • Text overlay: Keep minimal; many platforms deprecate text-heavy images
  • Branding: Logo in corner; consistent with brand-visual-generator
  • Alt text: Add for LinkedIn, Pinterest, X (accessibility + Pinterest SEO); see image-optimization for alt best practices

Article / Blog Images

  • Hero: Often LCP candidate; optimize per image-optimization
  • In-article: Support narrative; alt text, captions per image-optimization
  • Screenshots: Annotate when helpful; keep file size low

Output Format

  • Visual plan (what images for what content)
  • Specs by context (platform dimensions, format)
  • Repurposing map (one visual → multiple outputs)
  • References to platform skills and image-optimization

Related Skills

Content & Strategy

  • content-marketing: Content types, formats, repurposing; visual content is part of content mix
  • content-strategy: SEO topic clusters; article visuals
  • copywriting: Copy pairs with visuals; headlines for image posts

Platform (Image Specs)

  • twitter-x-posts: X post image specs
  • linkedin-posts: LinkedIn image specs
  • pinterest-posts: Pinterest Pin dimensions, alt text
  • reddit-posts: Reddit image post context

Website & SEO

  • image-optimization: Web images (alt, captions, WebP, LCP, responsive); central skill for image SEO
  • open-graph, twitter-cards: Link preview images
  • hero-generator: Hero section visuals

Other

  • brand-visual-generator: Typography, colors, imagery tone; visual consistency
  • video-marketing: Video thumbnails; video as visual format
  • video-optimization: Video SEO; VideoObject; video sitemap; YouTube prioritization
用于规划网站结构、决定页面优先级及构建策略,支持UX与SEO优化。适用于新建或现有站点,涵盖首页、产品页等核心页面规划,需结合项目背景评估类型与阶段。
用户想规划网站结构 决定需要构建哪些页面 为新站或现有站点确定页面优先级 提及网站架构或站点层次 进行网站地图规划
skills/kostja94_marketing-skills/website-structure/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill website-structure -g -y
SKILL.md
Frontmatter
{
    "name": "website-structure",
    "metadata": {
        "version": "1.5.0"
    },
    "description": "When the user wants to plan website structure, decide which pages to build, or prioritize pages for a new or existing site. Also use when the user mentions \"website structure,\" \"site structure,\" \"which pages do I need,\" \"page planning,\" \"sitemap planning,\" \"Must Have pages,\" \"website architecture,\" or \"site hierarchy.\" For a specific page template (e.g. homepage), use homepage-generator or landing-page-generator as appropriate. Not for organic SEO roadmap alone; use seo-strategy."
}

Strategy: Website Structure

Guides website structure planning: which pages to build, page priority, and how structure supports UX, SEO, and growth. Structure is the organization and connection of pages; it affects user navigation, Google's understanding of content importance, crawlability, and sitelinks in SERPs. See serp-features for sitelinks and SERP optimization.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product type, audience, and growth goals.

Identify:

  1. Website type: Product/SaaS, B2B, E-commerce, Portfolio, Forum, Directory
  2. Stage: New site (plan from scratch) vs. existing (extend or audit)
  3. Growth strategy: Affiliate, education, multi-language, community, B2B, developer
  4. Constraints: Team size, budget, tech stack

Page Priority Framework

Plan pages by priority for development scheduling. See skills-reference §2 Page Taxonomy for full page types and website-type mapping.

Priority Pages Notes
Must Have Home, Product/Features, Pricing, Blog, About, Privacy, Terms, Contact Essential for trust and conversion; Pricing: public page in nav for self-serve; enterprise-only may use "Contact sales" instead; see pricing-page-generator (Visibility & Placement)
Great to Have Testimonials, FAQ, Sitemap (HTML), 404, Refund/Returns Support UX and SEO
Optional Search Results, News, Careers, Disclosure Situational
Traffic-driven Category/Collection pages For content-heavy or e-commerce; needs Category + Tags

Generic Template Structure

Applicable to SaaS, tools, and content sites. Adapt by removing unused nodes (e.g. no API → drop API) and adding specific modules (e.g. industry, region).

Section Typical Paths Page Skills
Root /, /features, /pricing, /demo, /contact homepage-generator, features-page-generator, pricing-page-generator
Tools /tools, /free-tools; hub + per-tool pages tools-page-generator; free tools for lead gen; often SPA; programmatic; see programmatic-seo
Resources /blog, /changelog, /glossary, /faq, /tutorials blog-page-generator, changelog-page-generator, glossary-page-generator, faq-page-generator
Partnership /affiliate, /startups, /ambassadors affiliate-page-generator, landing-page-generator
Legal /terms, /privacy, /careers terms-page-generator, privacy-page-generator, careers-page-generator
Competitor /alternatives, /compare, /migrate alternatives-page-generator, migration-page-generator
Standalone /dashboard, /login, /signup, /docs, /api, /status, /support signup-login-page-generator, docs-page-generator, api-page-generator, status-page-generator

Growth Strategy → Structure Mapping

Structure reflects growth strategy. Subdirectories signal channels:

Goal Path Example Page/Channel
Affiliate conversion /affiliate affiliate-page-generator
Education/student plan /education, /startups, /student-discount education-program, startups-page-generator
Multi-language /zh-CN, /ja localization-strategy
Community /ambassadors, /showcase creator-program, landing-page-generator
B2B / Enterprise Solutions (industry-first), Use cases (scenario-first; can be sub-pages), Customer stories solutions-page-generator, use-cases-page-generator, customer-stories-page-generator
Developer product /api, /docs, /status api-page-generator, docs-page-generator, status-page-generator
User feedback Feedback, Roadmap feedback-page-generator; External (Canny, FeatureBase)
Plugins/Integrations /integrations, /plugins integrations-page-generator, category-page-generator
Giveaway/Contest /giveaway contest-page-generator

Domain Structure (Multiple Products)

When planning for multiple products or brands, see domain-architecture for subfolder vs subdomain vs independent domain. This skill covers page structure within a single domain. For initial domain choice (Brand vs PMD vs EMD, TLD), see domain-selection.

Planning Workflow

  1. Choose template: Start from generic structure; map to skills-reference §2 website types
  2. Trim modules: Remove irrelevant nodes (e.g. no API → drop /api, /docs)
  3. Add specifics: Industry pages, region, product variants
  4. Assign URLs: Per node; follow url-structure (lowercase, hyphens, short, keyword-rich)
  5. Export list: "Page type + URL + Priority" for dev scheduling
  6. Tech stack: Match page types to services (DNS, auth, CMS, status page, etc.)
  7. Iterate: Expand with new features, markets; keep structure clear

Structure Principles

Principle Guideline
Flat structure Max 4 clicks from homepage to any page; improves crawlability and weight distribution
Early planning Plan structure before growth; can start right after domain purchase
Sitelinks Good structure + TOC + authoritative internal links → natural sitelinks in SERP (cannot be forced via schema); see serp-features
Orphan prevention Every page needs internal links; see site-crawlability and internal-links
Features vs Use cases /features = capability-first; /use-cases = scenario-first; differentiate content angle, link between, avoid overlap; see features-page-generator, use-cases-page-generator
Clear navigation Clear hierarchy and nav improve task completion; users find what they need faster; see navigation-menu-generator
Pricing placement Marketing site: /pricing in main nav for prospects; in-app: Settings → Billing in sidebar for logged-in users (subscription management). Enterprise-only: "Contact sales" may replace public pricing page; see pricing-page-generator

Homepage Module Reference

See homepage-generator for common modules (Headline, Subheadline, CTA, Benefits, Social Proof, etc.), navigation options, and hero-generator for hero design.

Output Format

  • Page list with priority (Must Have / Great to Have / Optional)
  • URL structure (paths per section)
  • Website-type fit (which pages apply per skills-reference §2)
  • Growth mapping (which paths support which channels)
  • Next steps: url-structure for URL rules; xml-sitemap for submission; site-crawlability for audit

References

  • Website structure SEO guide — Alignify: structure importance, page priority, generic template, planning workflow, growth mapping, homepage modules
  • skills-reference §2 (docs/skills-reference.md#2-page-taxonomy) — Full page types, website-type matrix, core vs extended; use for page selection

Related Skills

  • seo-strategy: SEO workflow order; structure planning fits before Technical phase
  • domain-selection: Initial domain choice; do before structure when choosing domain
  • domain-architecture: Subfolder vs subdomain vs independent; do before structure if domain decision pending
  • url-structure: URL optimization, hierarchy, slugs; apply after structure is defined
  • site-crawlability: Crawlability, orphan pages, redirects; audit existing structure
  • internal-links: Link strategy, hub-spoke; implement after pages exist
  • xml-sitemap: Sitemap creation; include planned URLs
  • breadcrumb-generator: Breadcrumb for hierarchy; large sites, e-commerce
  • navigation-menu-generator: Nav design; primary, footer, mobile
  • content-strategy: Content clusters, pillar pages; complements structure planning
用于生成和优化X(Twitter)帖子及线程的AI技能。支持创建发布级文案,提供字符限制、最佳长度、线程结构及Hook-Value-CTA公式。结合Grok算法信号权重与TweepCred指标,指导提升互动率与分发效果。
用户希望创建X (Twitter)帖子文案 用户需要生成或优化X平台线程 用户提及"X post", "tweet", "thread"等关键词 用户寻求X平台内容营销建议
skills/kostja94_marketing-skills/x/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill twitter-x-posts -g -y
SKILL.md
Frontmatter
{
    "name": "twitter-x-posts",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to create X (Twitter) post copy, threads, or optimize for X platform. Also use when the user mentions \"X post,\" \"X thread,\" \"Twitter post,\" \"Twitter thread,\" \"tweet,\" \"tweet copy,\" \"thread,\" \"X marketing,\" \"X content,\" \"post to X,\" \"create X post,\" or \"X post copy.\" For long-form source, use article-content."
}

Platforms: X (Twitter)

Guides X post copy creation and optimization. Use for generating publish-ready posts, threads, and content that performs on X. Suitable for copy agents, design agents (image specs), and video agents (video post specs).

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Output: Publish-Ready Copy

This skill enables agents to generate X post copy that can be published directly. Output includes character-counted text, thread structure, and platform-compliant formatting.

Character Limits

Type Limit Notes
Standard post 280 characters Most users
Premium 25,000 characters X Premium subscribers
URL Counts as 23 chars t.co shortens all links
Emoji ~2 chars each Varies by emoji

Optimal Lengths (Engagement)

Use Case Characters Purpose
General 71-100 Sweet spot for engagement
Promotional 120-130 Product/offer posts
Question 60-80 Drive replies
Retweet-friendly ~116 Leaves room for "RT @user:"

Thread Format

  • Structure: 3-5 connected posts; number as 1/5, 2/5, etc.
  • First post: Strong hook; no "thread" in first line
  • Last post: CTA, summary, or question
  • Each post: ~80 chars; can stand alone

Post Structure (Hook + Value + CTA)

Part Ratio Guideline
Hook 10% First 1-2 lines; question, fact, or emotion; ~50 chars
Value 70% Practical info; use thread for depth
CTA 20% Call for reply, question, or action

End with open question to drive replies. Thread structure can extend impressions ~10x.

Algorithm (Grok AI)

Signal Weights

Signal Impact
Replies Highest (~54-75x likes); quality > quantity
Author replies Active reply chains ~75x visibility
Bookmark 2026 signal; saves boost recommendation
Media Images/video ~2x; video 2-4x exposure
External links Reduce score ~50%; prefer internal refs
Post limit 5-8/day; >10/day reduces later visibility ~80%

Content: Open questions, controversial views, stories; avoid "RT if agree" bait.

TweepCred

Threshold Effect
< 65 Only last 3 posts enter For You
New accounts Need +17 to appear in feed
Blue V Auto 100 points

Monitor account health; avoid spam, bulk ops, excessive links.

Distribution

Posts tested in small group first; early interaction (first 30 min) decides reach. Niche consistency helps SimClusters match.

Link Optimization

Practice Guideline
Penalty External links ~-50%; Regular accounts: link posts 0% engagement since 2025
Placement Put link in reply, not main post
Ratio Max 1 link per 5 posts
Premium Premium+ safest for links (~0.25-0.3% engagement)
Preview Title ≤70 chars, description ≤200 chars; 1200×628 image

Premium Impact

Tier Reach Link posts
Regular <100/post 0% engagement
Premium ($8) ~600/post ~0.25-0.3%
Premium+ ($40) ~1550/post Safest for links

Premium ~10x reach vs Regular. If X is core channel, Premium helps.

Video

  • Exposure: 2-4x vs text
  • Length: 8-30s short video preferred
  • VQV: High video completion boosts score 2-3x

Content Ratio

Type Share Use
Value 70% Education, how-to, insights
Interaction 20% Polls, questions, AMA
Promo 10% Product, offers

Twitter Cards + SEO

Cards (og:image, title, description) boost CTR ~64%, engagement ~26%. Use for Social SEO; X traffic can accelerate Google indexing. For programmatic SEO (template + data pages at scale), use programmatic-seo.

Image Specs (for Design Agents)

Format Dimensions Use
Single image 1200×675 (16:9) Best visibility; no crop
Square 800×800 Single image
Profile 400×400 Avatar
Header 1500×500 (3:1) Banner
File ~5MB; JPG/PNG Over 5MB may compress

Output Format

When generating X copy, provide:

  1. Post text with character count
  2. Hashtags (if used; 1-3 recommended)
  3. Thread structure (if thread)
  4. Image specs (if design agent needs dimensions)

Related Skills

  • paid-ads-strategy: X (Twitter) Ads for paid promotion; tech audiences, timely content; see Platform Selection
  • influencer-marketing: X is key influencer platform
  • reddit-posts: Alternative community channel
  • programmatic-seo: Programmatic SEO (template + data pages); X traffic can accelerate indexing
  • open-graph, twitter-cards: OG and Twitter Card tags for X link previews
  • visual-content: Cross-channel visual planning; X image specs in context
用于规划、设置和优化YouTube付费广告活动。涵盖TrueView、Bumper和Discovery格式,提供格式选择、创意指南及投放建议,适用于提升品牌认知或转化。
用户想要运行YouTube广告 提到TrueView或Bumper广告 优化视频广告素材 提及YouTube Discovery或in-feed ads
skills/kostja94_marketing-skills/youtube-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill youtube-ads -g -y
SKILL.md
Frontmatter
{
    "name": "youtube-ads",
    "metadata": {
        "version": "1.0.1"
    },
    "description": "When the user wants to run YouTube ads, set up TrueView or Bumper campaigns, or optimize video ad creative. Also use when the user mentions \"YouTube ads,\" \"TrueView,\" \"Bumper ads,\" \"YouTube Discovery,\" \"video ads,\" \"YouTube campaign,\" or \"in-feed ads.\" For organic YouTube, use youtube-seo."
}

Paid Ads: YouTube Ads

Guides YouTube advertising: TrueView, Bumper, and Discovery (in-feed) formats. Use this skill when planning or optimizing YouTube ad campaigns. For Google Search/Display/PMax, see google-ads. For organic YouTube optimization, see youtube-seo.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 3 (Value Proposition), 4 (Audience).

Identify:

  1. Goal: Awareness, consideration, conversion
  2. Budget: Bumper cheaper; TrueView for scale
  3. Creative: Existing video or net-new

Ad Formats

Format Length Skippable Best For
TrueView Skippable 12 sec+ After 5 sec Reach; large audiences
TrueView Non-skippable 15–20 sec No Full message; guaranteed view
TrueView for Action Conversions; CTA-focused
Bumper 6 sec or less No Brand awareness; memorable; lower cost
Discovery (In-Feed) Thumbnail + text Search, related videos, homepage; interest targeting

Format Selection

Goal Format
Brand awareness Bumper
Website traffic TrueView
Conversions TrueView for Action
Interested audiences Discovery

Creative Guidelines

  • Bumper: Quick, memorable; brand message in 6 sec
  • TrueView: Hook in first 5 sec (skippable); deliver value before skip
  • Discovery: Thumbnail + headline; appears like organic video

Output Format

  • Format recommendation
  • Creative specs (length, hook, CTA)
  • Targeting notes
  • Pre-launch checklist

Related Skills

  • google-ads: Google Ads platform; YouTube runs through Google Ads
  • youtube-seo: Organic YouTube; video optimization
  • video-marketing: Video script, hook structure
  • paid-ads-strategy: When to use video ads; channel selection
优化YouTube视频搜索排名、描述、标签及缩略图,提升频道可见性与点击率。适用于YouTube SEO、标题/描述生成等场景,兼顾Google搜索与AI摘要引用策略。
用户希望优化YouTube视频搜索排名 用户需要创建或改进视频描述 用户提及YouTube SEO、标签、缩略图或标题优化 用户询问如何提升频道在Google搜索或AI概述中的可见性
skills/kostja94_marketing-skills/youtube/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill youtube-seo -g -y
SKILL.md
Frontmatter
{
    "name": "youtube-seo",
    "metadata": {
        "version": "1.1.1"
    },
    "description": "When the user wants to optimize YouTube videos for search, create video descriptions, or improve channel visibility. Also use when the user mentions \"YouTube SEO,\" \"YouTube description,\" \"YouTube tags,\" \"YouTube thumbnail,\" \"YouTube title,\" \"YouTube channel,\" or \"video SEO.\" For YouTube ads, use youtube-ads."
}

Platforms: YouTube SEO

Guides YouTube video and channel optimization for search and discovery. Google now prioritizes YouTube video results in search; YouTube + Reddit comprise ~78% of social media citations in AI Overviews. Title, description, and thumbnail form an interconnected system; channels using systematic keyword strategies see 156% longer view durations, 89% better CTR, and 312% higher search discovery. Use this skill when optimizing videos for YouTube search, Google search, and AI citation. For website-embedded video SEO, see video-optimization.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 6 (Keywords), 11 (Content Strategy).

Identify:

  1. Video type: Tutorial, review, vlog, Shorts
  2. Target keyword: Primary and secondary
  3. Audience: Subscribers vs casual viewers

Video Titles

Rule Guideline
Length Under 60 characters; mobile may show partial
Keyword Primary keyword in first 5–55 characters
Structure Social proof/authority + emotional trigger + primary keyword
Style Conversational; avoid keyword stuffing
Avoid ALL CAPS except emphasis

Video Descriptions

Rule Guideline
First 2–3 sentences Primary and secondary keywords naturally; meta description under 160 chars
Links Website, store, relevant resources
Readability Natural flow; help search understand topic

Tags

  • Help YouTube understand content; titles and descriptions matter more
  • Use relevant tags; avoid over-optimization

Thumbnails

90% of best-performing videos use custom thumbnails.

Rule Guideline
Contrast High contrast; readable fonts; bold colors
Composition Rule of thirds; simple, uncluttered
Audience Consider subscribers vs casual viewers
Test What works evolves; test styles

Title + Description + Thumbnail

Reinforce the same core message across all three; target different algorithm aspects.

Output Format

  • Title options (under 60 chars)
  • Description (first 160 chars + full)
  • Tags (relevant set)
  • Thumbnail guidance (elements, text, composition)

YouTube in Google Search & GEO

Context Implication
Google prioritization YouTube is core search infrastructure; 48.6B monthly visits; video results favored in main SERP, video mode, Discover
AI Overviews YouTube citations surged 25.21% since Jan 2025; instructional (+35.6%), visual demos (+32.5%); long-form (94%) dominates
GEO YouTube + Reddit = ~78% of social media citations; optimize for AI citation. See generative-engine-optimization

Search Engine Land, OtterlyAI

Related Skills

  • video-marketing: Video script, hook, structure
  • video-optimization: Website video SEO; VideoObject; video sitemap; embed optimization
  • youtube-ads: YouTube paid ads (TrueView, Bumper)
  • content-marketing: Video as content format
  • parasite-seo: YouTube as high-authority platform
  • generative-engine-optimization: GEO strategy; YouTube as distribution for AI citation
Expert at using the SearchSDK to orchestrate complex, multi-step search research tasks.
Multi-source research Parallel search execution Structured data extraction Cross-referencing information across sources Large-scale data collection
skills/search_orchestration/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill search_orchestration -g -y
SKILL.md
Frontmatter
{
    "name": "search_orchestration",
    "version": 1,
    "description": "Expert at using SearchSDK for complex research tasks"
}

You are an expert at using the SearchSDK to orchestrate complex, multi-step search research tasks.

When to Use SearchSDK

Use search_orchestrate for:

  • Multi-source research (across vendors, years, domains)
  • Parallel search execution (instead of serial web_search calls)
  • Structured data extraction (CVE details, pricing, product features)
  • Cross-referencing information across sources
  • Large-scale data collection (10+ queries)
  • Deterministic filtering (exact domain/regex patterns)
  • State persistence across turns (save intermediate results)

Use web_search for:

  • Simple single queries ("what is X", "latest version of Y")
  • Quick fact lookups
  • Casual browsing tasks

SearchSDK API

Initialization

sdk = SearchSDK()

Subsystems

1. Retrieve - Fetch Search Results

Single query:

hits = await sdk.retrieve.web("python async", provider="google", limit=10)

Parallel multi-query:

queries = ["python async", "golang routines", "rust async"]
all_hits = await sdk.retrieve.web_many(queries, concurrency=3)
# Returns: list of lists, one per query

2. Filter - Deterministic Filtering

Remove duplicates:

unique = sdk.filter.dedupe(hits, key="url")

Filter by domain:

# Only official sources
official = sdk.filter.by_domain(hits, include=["google.com", "chromium.org"])

# Exclude low-quality sources
clean = sdk.filter.by_domain(hits, exclude=["ads.com", "spam.com"])

Filter by regex:

# Only CVEs
cves = sdk.filter.by_regex(hits, field="snippet", pattern=r"CVE-\d{4}-\d+")

Filter by keywords:

# Include security-related
security = sdk.filter.by_keyword(hits, words=["security", "vulnerability"], mode="include")

# Exclude ads
clean = sdk.filter.by_keyword(hits, words=["sponsored", "ad"], mode="exclude")

3. Extract - Structured Data Extraction

Extract from multiple hits:

results = await sdk.extract.extract_many(
    hits,
    schema={"cve": str, "fix_version": str, "severity": str},
    instruction="Extract CVE information"
)

Extract from single hit:

result = await sdk.extract.extract_one(
    hit,
    schema={"title": str, "author": str, "date": str}
)

4. State - Persist Intermediate Results

Save state:

sdk.state.save("cve_results", results)

Load state:

previous = sdk.state.load("cve_results")

List all states:

states = sdk.state.list()

Common Patterns

Pattern 1: Parallel Search + Filter + Extract

# Research CVEs across multiple years
queries = [
    f'site:chromereleases.googleblog.com "CVE-{{year}}"'
    for year in [2023, 2024, 2025]
]
hits = await sdk.retrieve.web_many(queries, concurrency=4)
filtered = sdk.filter.by_domain(hits, exclude=["mitre.org", "nvd.nist.gov"])
results = await sdk.extract.extract_many(
    filtered,
    schema={"cve": str, "fix_version": str, "severity": str, "summary": str}
)
return results

Pattern 2: Cross-Reference Multiple Sources

# Cross-reference pricing across vendors
queries = ["product X price", "product X cost", "product X pricing"]
hits = await sdk.retrieve.web_many(queries, concurrency=3)
all_prices = await sdk.extract.extract_many(
    hits,
    schema={"vendor": str, "price": str, "currency": str},
    instruction="Extract product pricing information"
)
sdk.state.save("price_comparison", all_prices)
return all_prices

Pattern 3: State Persistence for Multi-Turn Tasks

# Turn 1: Collect data
queries = ["topic A", "topic B", "topic C"]
hits = await sdk.retrieve.web_many(queries, concurrency=3)
sdk.state.save("research_hits", hits)

# Turn 2: Process saved data
saved_hits = sdk.state.load("research_hits")
results = await sdk.extract.extract_many(
    saved_hits,
    schema={"topic": str, "summary": str}
)
return results

Best Practices

  1. Always use parallel search for multiple queries - it's much faster
  2. Filter deterministically before extraction - saves tokens and LLM calls
  3. Use state persistence for multi-turn tasks to survive context compression
  4. Include error handling - wrap extraction in try/except when processing many hits
  5. Limit output size - truncate large results before returning

Example Tasks

CVE Research:

queries = [f'site:chromereleases.googleblog.com "CVE-{{y}}"' for y in [2023, 2024, 2025]]
hits = await sdk.retrieve.web_many(queries, concurrency=4)
filtered = sdk.filter.by_domain(hits, exclude=["mitre.org", "nvd.nist.gov"])
results = await sdk.extract.extract_many(
    filtered,
    schema={"cve": str, "fix_version": str, "severity": str}
)
return results

Competitor Analysis:

vendors = ["competitor A", "competitor B", "competitor C"]
queries = [f"{{v}} pricing features" for v in vendors]
hits = await sdk.retrieve.web_many(queries, concurrency=3)
results = await sdk.extract.extract_many(
    hits,
    schema={"vendor": str, "pricing_model": str, "starting_price": str}
)
return results

Topic Survey:

queries = ["python async tutorial", "golang async guide", "rust async book"]
hits = await sdk.retrieve.web_many(queries, concurrency=3)
tutorials = sdk.filter.by_regex(hits, field="title", pattern="(tutorial|guide)")
results = await sdk.extract.extract_many(
    tutorials[:5],  # Limit to top 5
    schema={"language": str, "topic": str, "url": str}
)
return results

Remember: SearchSDK is for complex, multi-step research. For simple queries, just use web_search directly.

高端品牌视觉识别生成技能,用于创建专业级品牌指南、Logo系统及视觉展示板。强调极简、电影感与战略思维,输出高质量、排版严谨的品牌世界图像,避免通用设计。
需要生成高端品牌标识或视觉系统 请求制作品牌指南或身份演示文稿 设计Logo概念及多场景应用展示
skills/taste-skill/skills/brandkit/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill brandkit -g -y
SKILL.md
Frontmatter
{
    "name": "brandkit",
    "description": "Premium brand-kit image generation skill for creating high-end brand-guidelines boards, logo systems, identity decks, and visual-world presentations. Trained for minimalist, cinematic, editorial, dark-tech, luxury, cultural, security, gaming, developer-tool, and consumer-app brand systems. Optimized for intentional logo concepting, refined composition, sparse typography, strong symbolic meaning, premium mockups, art-directed imagery, and flexible grid layouts."
}

BRANDKIT IMAGE GENERATION SKILL

You are an elite brand identity art director, logo designer, visual-system strategist, and presentation designer.

Your job is to generate premium brand-kit images that feel like they came from a serious identity studio.

The output must feel:

  • intentional
  • premium
  • minimal
  • coherent
  • strategic
  • visually expensive
  • brand-system driven
  • presentation-ready

Do not generate generic logos.
Do not generate random mockups.
Do not generate messy AI moodboards.

Create a complete brand world in one image.


REFERENCE STYLE DNA

The desired visual quality is inspired by premium brand-guidelines decks with:

  • dark charcoal outer canvas
  • clean grid-based presentation boards
  • strong gutters between panels
  • restrained visual density
  • very sparse typography
  • large negative space
  • cinematic brand atmosphere
  • simple but memorable logo marks
  • UI mockups used as brand applications
  • browser chrome / app headers / terminal frames
  • image-led panels with subtle overlays
  • halftone, grain, scanline, or print texture
  • geometric construction diagrams
  • small labels and page-number details
  • muted but powerful accent colors
  • logo repeated across multiple touchpoints
  • one strong brand idea per board

The references are not a fixed style.
They define the quality bar, restraint, and presentation logic.


CORE PRINCIPLE

A premium brand kit is not decoration.

It is a visual argument for why the brand exists.

Every generated board must answer:

  1. What does this brand represent?
  2. What is the core metaphor?
  3. How does the logo express that?
  4. How does the system scale across UI, print, image, and detail?
  5. Why does the whole thing feel ownable?

DEFAULT OUTPUT

Unless the user specifies otherwise:

  • Generate one brand-kit overview image
  • Default layout: 3 × 3
  • Default aspect ratio: 4:3 or 16:10
  • Use a clean presentation grid
  • Use consistent gutters
  • Use minimal text
  • Make every panel feel connected

Allowed layouts:

  • 3 × 3 full identity system
  • 2 × 3 cinematic brand deck overview
  • 2 × 2 compact concept board
  • 1 × 3 horizontal brand strip
  • 4 × 2 wide contact-sheet layout
  • custom layout when requested

If the user gives references, match their quality and rhythm, not their exact content.


BRAND STRATEGY FIRST

Before generating, infer the brand strategy.

Think through:

  • category
  • audience
  • product function
  • emotional promise
  • cultural position
  • trust level
  • visual world
  • symbolic metaphor
  • what the brand should avoid

The visual system must be based on meaning.

Examples:

Category Core Ideas Possible Symbol Logic
Developer tool building, speed, precision, control cursor, frame, bolt, scaffold, grid
AI assistant delegation, intelligence, clarity spark, orbit, signal, path, node
Security protection, vigilance, boundary shield, eye, seal, protected core
Gaming / betting chance, reward, tension, speed dice, gem, card, signal, trophy
Voice AI sound, rhythm, command, flow waveform, mic, orb, speech path
Compliance trust, order, rules, protection seal, dog, badge, document, shield
Drone / robotics flight, control, vision, mission wing, owl, crosshair, path, zone
Luxury / editorial taste, material, ritual, restraint monogram, seal, paper, emboss, mark
Productivity focus, momentum, clarity path, check, block, calendar, light

Do not pick symbols randomly.


LOGO GENERATION STANDARD

The logo must be professional.

It should be:

  • simple
  • memorable
  • symbolic
  • scalable
  • ownable
  • visually balanced
  • connected to the brand idea
  • usable as icon, wordmark, badge, UI mark, and pattern

Avoid:

  • generic lightning bolts unless strongly justified
  • random animals
  • fake luxury crests
  • copied famous marks
  • overcomplicated symbols
  • clipart-style icons
  • meaningless sparkles
  • inconsistent logo variants

The logo should feel like it came from research and reduction.


LOGO CONCEPT METHODS

Use one or combine two maximum.

1. Monogram + Meaning

Combine the brand initial with a metaphor.

Examples:

  • K + kite / frame / direction
  • N + path / folded system
  • S + sound wave / speech flow
  • A + ascent / architecture / momentum

Do not make a boring letter icon.
Use negative space, cuts, folds, or geometry.


2. Product Action

Turn the product's main action into a symbol.

Examples:

  • build → frame, scaffold, block, cursor
  • protect → shield, boundary, watch mark
  • convert → switch, arrow, transformation shape
  • speak → waveform, mic, pulse
  • hunt threats → eye, raptor, radar, trace
  • automate → loop, handoff, path

Make it abstract and premium, not literal.


3. Metaphor Fusion

Combine two meaningful ideas into one reduced mark.

Examples:

  • owl + drone vision
  • shield + mountain
  • moon + waveform
  • dog + compliance seal
  • dice + mobile game economy
  • cursor + lightning speed
  • kite + product frame

The fusion should be subtle and readable.


4. Negative Space

Use empty space to create intelligence.

Examples:

  • hidden arrow
  • protected center
  • cutout initial
  • internal path
  • folded corner
  • eye formed by crossing shapes

Negative space should be crisp.


5. Construction Geometry

Create a mark from a clear system.

Use:

  • circles
  • diagonal cuts
  • grids
  • frames
  • modular blocks
  • layered cards
  • orbital paths
  • crosshairs
  • measured linework

One panel can show construction logic.


BOARD COMPOSITION DNA

A strong brand-kit board should feel like a curated sequence.

Use:

  • large calm cover panel
  • one digital mockup panel
  • one image-led atmosphere panel
  • one system/construction panel
  • one physical or icon application panel
  • one quiet tagline panel

Do not make every panel equally loud.

The board should have rhythm:

  • quiet
  • functional
  • emotional
  • technical
  • atmospheric
  • detailed

DEFAULT 3 × 3 PANEL SYSTEM

Use this if no layout is specified:

1. Logo Cover

Large logo and wordmark.
Minimal title.
Strong negative space.

2. Logo Construction

Symbol breakdown, grid, geometry, or negative-space logic.
Show why the mark exists.

3. Digital Application

Browser chrome, app header, terminal, dashboard fragment, or app icon.

4. Brand Essence

One short tagline.
Large readable typography.
Sparse composition.

5. Color System

Swatches, gradient strips, color discs, material chips, or palette cards.

6. Typography

Large type specimen, alphabet row, or primary/secondary type pairing.

7. Physical Application

Card, folder, badge, poster, label, seal, packaging, or object mockup.

8. Image Direction

Cinematic landscape, product crop, halftone poster, editorial scene, material texture.

9. System Detail

UI chips, input bar, command line, icon row, badge system, component strip, pattern detail.


2 × 3 REFERENCE-STYLE LAYOUT

For boards like the uploaded references, use:

  1. Logo / Wordmark

    • centered or offset
    • extremely minimal
  2. Browser / Product Surface

    • browser bar, app frame, prompt input, or URL field
  3. Command / Functional Panel

    • terminal, prompt bar, input state, install command, dashboard fragment
  4. Atmosphere / Campaign Image

    • halftone landscape, cinematic image, product-world visual, or art-directed photo
  5. Symbol / Construction / Badge

    • logo mark in target, seal, geometric frame, icon construction
  6. Tagline / System Promise

    • one short line
    • large type
    • quiet background

This layout should feel like a premium mini-deck.


VISUAL MODES

Choose based on the brand.

Dark Developer / Builder

Use for: developer tools, coding agents, infra, automation, AI builders.

Visual cues:

  • near-black panels
  • monospace accents
  • command lines
  • terminal windows
  • prompt bars
  • subtle grid
  • cyan, blue, coral, or lime accents
  • pixel or CRT texture if appropriate

Logo logic:

  • cursor + frame
  • bolt + build speed
  • scaffold + monogram
  • terminal glyph + symbol
  • modular construction mark

Mood: precise, sharp, confident, builder-native.


Dark Product / Operator

Use for: business tools, growth tools, sales agents, automation, productivity.

Visual cues:

  • black / dark red / amber
  • glowing UI chips
  • card systems
  • segmented flows
  • icon rows
  • reward/progress motifs
  • minimal hero text

Logo logic:

  • signal, gift, path, operator mark, switch, loop, command system

Mood: fast, operational, tactical, premium.


Dark Nature / Calm System

Use for: strategy, travel, wellness, climate, quiet premium SaaS.

Visual cues:

  • deep green
  • lime accent
  • misty landscapes
  • image UI circles
  • soft overlays
  • calm page labels
  • dark editorial grid

Logo logic:

  • path, leaf, moon, horizon, compass, portal, folded mark

Mood: calm, trustworthy, focused.


Dark Security / Threat Intelligence

Use for: security, compliance, monitoring, network products.

Visual cues:

  • black/navy
  • shield forms
  • radar lines
  • threat labels
  • subtle motion traces
  • red/blue alert chips
  • controlled gradients

Logo logic:

  • shield, raptor, eye, watch, boundary, protected core

Mood: serious, vigilant, precise.


Light Editorial / Compliance

Use for: legal, privacy, compliance, documents, trust brands.

Visual cues:

  • warm ivory
  • paper texture
  • small serif labels
  • seals / badges
  • color wheel / palette object
  • calm stationery
  • deep blue, red, gold accents

Logo logic:

  • seal, dog, shield, document, stamp, monogram

Mood: trustworthy, refined, institutional but modern.


Luxury / Beauty / Fashion

Use for: beauty, fashion, hospitality, premium services.

Visual cues:

  • ivory / stone / espresso
  • serif wordmark
  • elegant monogram
  • paper grain
  • embossing
  • product labels
  • editorial crops
  • soft shadows

Logo logic:

  • monogram, seal, petal, vessel, ritual object, refined typographic mark

Mood: tasteful, adult, expensive.


Voice / Communication

Use for: voice AI, chat, assistants, speech, audio.

Visual cues:

  • dark indigo
  • lilac glow
  • waveform
  • mic motif
  • phone crop
  • command input
  • app icon

Logo logic:

  • wave + initial
  • sound orb
  • speech path
  • microphone abstraction
  • pulse ring

Mood: fluid, intelligent, intimate.


Cultural / Experimental

Use for: music, creative tools, events, gaming-adjacent, cultural products.

Visual cues:

  • halftone
  • CRT texture
  • analog print
  • bold accent color
  • poster-style panels
  • unexpected image crops
  • simple but punchy logo

Logo logic:

  • custom wordmark
  • icon with attitude
  • symbolic mascot
  • print-inspired mark

Mood: memorable, creative, still controlled.


PREMIUM DETAIL LANGUAGE

Use details like:

  • small page numbers
  • tiny footer labels
  • precise alignment marks
  • construction lines
  • subtle crosshair grids
  • thin rules
  • browser bars
  • rounded rectangles
  • image masks
  • soft shadows
  • low-opacity texture
  • halftone image treatment
  • one highlighted word
  • one accent chip
  • one strong icon state

Do not overuse them.

Premium detail should reward looking closer.


TEXT RULES

Use very little text.

Good text:

  • brand name
  • one tagline
  • one URL
  • one command
  • 2–5 section labels
  • short UI chips

Bad text:

  • long paragraphs
  • tiny fake body copy
  • lots of menu items
  • lorem ipsum
  • dense explanations
  • unreadable labels

Text should be large enough and sparse enough to render well.


TAGLINE STYLE

Taglines should be short and specific.

Good:

  • "What will you build today?"
  • "Nothing random."
  • "Your network. Our watch."
  • "Build better."
  • "On guard."
  • "Every mission under control."
  • "Everything operators need."
  • "Clarity builds confidence."

Avoid:

  • generic corporate slogans
  • long marketing copy
  • buzzword soup
  • fake inspirational fluff

IMAGE DIRECTION

Images should feel art-directed.

Use:

  • cinematic mountains
  • dusk skies
  • landscapes with brand overlays
  • halftone clouds
  • CRT screen scenes
  • dark product closeups
  • dramatic object crops
  • textured paper backgrounds
  • moody architecture
  • abstract but controlled visual systems

Avoid:

  • generic stock people
  • random office photos
  • cliché robot imagery
  • overbusy scenes
  • unrelated imagery

Images should match the palette and metaphor.


MOCKUP DIRECTION

Mockups should be minimal and believable.

Use:

  • browser chrome
  • URL bar
  • terminal window
  • command prompt
  • app icon
  • phone corner crop
  • card stack
  • badge
  • seal
  • folder
  • UI chips
  • dashboard fragment
  • input bar
  • product label

Avoid:

  • full fake dashboards with too much data
  • cheap glossy mockups
  • random device overload
  • busy app screens
  • excessive icons

Mockups are identity applications, not feature demos.


COLOR DISCIPLINE

Use one dominant palette.

Default:

  • base color
  • primary accent
  • secondary accent
  • neutrals

Good reference-style palettes:

  • black + cyan + muted coral
  • black + red + cream + blue
  • forest green + lime + fog gray
  • navy + white + steel
  • ivory + deep blue + red + gold
  • black + lilac + soft purple
  • black + amber + red
  • charcoal + white + pale blue

Rules:

  • accents must repeat across panels
  • no random rainbow unless requested
  • no generic purple-blue AI glow unless appropriate
  • one accent can carry the entire system

ANTI-GENERIC RULES

Never make:

  • random floating icons
  • generic startup gradients
  • overdesigned logos
  • meaningless blobs
  • messy layout collages
  • fake tiny UI
  • inconsistent logo marks
  • too many colors
  • cheap neon
  • stock-template brand boards
  • corporate PowerPoint slides
  • soulless SaaS dashboards

Make the design quieter, sharper, and more intentional.


REFERENCE USAGE

When the user provides references:

Extract:

  • layout rhythm
  • grid style
  • spacing
  • typography scale
  • visual density
  • logo placement
  • amount of text
  • image treatment
  • accent color logic
  • brand-system behavior

Do not copy:

  • exact logo
  • exact brand name
  • exact composition
  • exact slogan
  • unique visual asset

Use references as quality training, not as templates.


PROMPT TEMPLATE

Use this structure internally:

Create a premium brand-kit overview image for "[BRAND NAME]".

Brand strategy:

  • category: [category]
  • audience: [audience]
  • personality: [traits]
  • core metaphor: [metaphor]
  • logo idea: [how the mark combines symbol + name + category meaning]

Layout: [3×3 / 2×3 / custom] grid on a dark or light presentation canvas with strong gutters, clean alignment, and refined negative space.

Panels:

  • logo cover
  • logo concept / construction
  • digital application
  • tagline / brand essence
  • color system
  • typography
  • physical application
  • image direction
  • system detail

Visual mode: [mode]

Palette: [disciplined palette]

Style: premium, sparse, cinematic, intentional, polished, brand-guidelines deck, no clutter, no copied real-world logos.

Typography: readable, minimal, high hierarchy, no tiny fake text.

Logo: professional, symbolic, simple, ownable, based on the brand's purpose, repeated consistently across panels.


FINAL OUTPUT STANDARD

The image must look like:

  • a premium identity deck
  • a senior designer's presentation board
  • a brand-system case study
  • a visual launch direction
  • a professional logo concept board

The final result should be:

  • clean
  • strategic
  • symbolic
  • minimal
  • coherent
  • premium
  • art-directed
  • implementation-friendly
  • stronger than normal AI-generated brand visuals
一种融合瑞士排版与军事终端美学的工业粗野主义UI设计技能。通过刚性网格、极端字体对比和模拟模拟退化效果,为数据密集型仪表盘或编辑网站打造如解密蓝图般的原始机械界面风格。
需要工业风或粗野主义设计风格 构建高数据密度的仪表盘或技术终端界面 要求极简、硬核且具机械感的用户界面
skills/taste-skill/skills/brutalist-skill/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill industrial-brutalist-ui -g -y
SKILL.md
Frontmatter
{
    "name": "industrial-brutalist-ui",
    "description": "Raw mechanical interfaces fusing Swiss typographic print with military terminal aesthetics. Rigid grids, extreme type scale contrast, utilitarian color, analog degradation effects. For data-heavy dashboards, portfolios, or editorial sites that need to feel like declassified blueprints."
}

SKILL: Industrial Brutalism & Tactical Telemetry UI

1. Skill Meta

Name: Industrial Brutalism & Tactical Telemetry Interface Engineering Description: Advanced proficiency in architecting web interfaces that synthesize mid-century Swiss Typographic design, industrial manufacturing manuals, and retro-futuristic aerospace/military terminal interfaces. This discipline requires absolute mastery over rigid modular grids, extreme typographic scale contrast, purely utilitarian color palettes, and the programmatic simulation of analog degradation (halftones, CRT scanlines, bitmap dithering). The objective is to construct digital environments that project raw functionality, mechanical precision, and high data density, deliberately discarding conventional consumer UI patterns.

2. Visual Archetypes

The design system operates by merging two distinct but highly compatible visual paradigms. Pick ONE per project and commit to it. Do not alternate or mix both modes within the same interface.

2.1 Swiss Industrial Print

Derived from 1960s corporate identity systems and heavy machinery blueprints.

  • Characteristics: High-contrast light modes (newsprint/off-white substrates). Reliance on monolithic, heavy sans-serif typography. Unforgiving structural grids outlined by visible dividing lines. Aggressive, asymmetric use of negative space punctuated by oversized, viewport-bleeding numerals or letterforms. Heavy use of primary red as an alert/accent color.

2.2 Tactical Telemetry & CRT Terminal

Derived from classified military databases, legacy mainframes, and aerospace Heads-Up Displays (HUDs).

  • Characteristics: Dark mode exclusivity. High-density tabular data presentation. Absolute dominance of monospaced typography. Integration of technical framing devices (ASCII brackets, crosshairs). Application of simulated hardware limitations (phosphor glow, scanlines, low bit-depth rendering).

3. Typographic Architecture

Typography is the primary structural and decorative infrastructure. Imagery is secondary. The system demands extreme variance in scale, weight, and spacing.

3.1 Macro-Typography (Structural Headers)

  • Classification: Neo-Grotesque / Heavy Sans-Serif.
  • Optimal Web Fonts: Neue Haas Grotesk (Black), Inter (Extra Bold/Black), Archivo Black, Roboto Flex (Heavy), Monument Extended.
  • Implementation Parameters:
    • Scale: Deployed at massive scales using fluid typography (e.g., clamp(4rem, 10vw, 15rem)).
    • Tracking (Letter-spacing): Extremely tight, often negative (-0.03em to -0.06em), forcing glyphs to form solid architectural blocks.
    • Leading (Line-height): Highly compressed (0.85 to 0.95).
    • Casing: Exclusively uppercase for structural impact.

3.2 Micro-Typography (Data & Telemetry)

  • Classification: Monospace / Technical Sans.
  • Optimal Web Fonts: JetBrains Mono, IBM Plex Mono, Space Mono, VT323, Courier Prime.
  • Implementation Parameters:
    • Scale: Fixed and small (10px to 14px / 0.7rem to 0.875rem).
    • Tracking: Generous (0.05em to 0.1em) to simulate mechanical typewriter spacing or terminal matrices.
    • Leading: Standard to tight (1.2 to 1.4).
    • Casing: Exclusively uppercase. Used for all metadata, navigation, unit IDs, and coordinates.

3.3 Textural Contrast (Artistic Disruption)

  • Classification: High-Contrast Serif.
  • Optimal Web Fonts: Playfair Display, EB Garamond, Times New Roman.
  • Implementation Parameters: Used exceedingly sparingly. Must be subjected to heavy post-processing (halftone filters, 1-bit dithering) to degrade vector perfection and create textural juxtaposition against the clean sans-serifs.

4. Color System

The color architecture is uncompromising. Gradients, soft drop shadows, and modern translucency are strictly prohibited. Colors simulate physical media or primitive emissive displays.

CRITICAL: Choose ONE substrate palette per project and use it consistently. Never mix light and dark substrates within the same interface.

If Swiss Industrial Print (Light):

  • Background: #F4F4F0 or #EAE8E3 (Matte, unbleached documentation paper).
  • Foreground: #050505 to #111111 (Carbon Ink).
  • Accent: #E61919 or #FF2A2A (Aviation/Hazard Red). This is the ONLY accent color. Used for strike-throughs, thick structural dividing lines, or vital data highlights.

If Tactical Telemetry (Dark):

  • Background: #0A0A0A or #121212 (Deactivated CRT. Avoid pure #000000).
  • Foreground: #EAEAEA (White phosphor). This is the primary text color.
  • Accent: #E61919 or #FF2A2A (Aviation/Hazard Red). Same red, same rules.
  • Terminal Green (#4AF626): Optional. Use ONLY for a single specific UI element (e.g., one status indicator or one data readout) — never as a general text color. If it doesn't serve a clear purpose, omit it entirely.

5. Layout and Spatial Engineering

The layout must appear mathematically engineered. It rejects conventional web padding in favor of visible compartmentalization.

  • The Blueprint Grid: Strict adherence to CSS Grid architectures. Elements do not float; they are anchored precisely to grid tracks and intersections.
  • Visible Compartmentalization: Extensive utilization of solid borders (1px or 2px solid) to delineate distinct zones of information. Horizontal rules (<hr>) frequently span the entire container width to segregate operational units.
  • Bimodal Density: Layouts oscillate between extreme data density (tightly packed monospace metadata clustered together) and vast expanses of calculated negative space framing macro-typography.
  • Geometry: Absolute rejection of border-radius. All corners must be exactly 90 degrees to enforce mechanical rigidity.

6. UI Components and Symbology

Standard web UI conventions are replaced with utilitarian, industrial graphic elements.

  • Syntax Decoration: Utilization of ASCII characters to frame data points.
    • Framing: [ DELIVERY SYSTEMS ], < RE-IND >
    • Directional: >>>, ///, \\\\
  • Industrial Markers: Prominent integration of registration (®), copyright (©), and trademark () symbols functioning as structural geometric elements rather than legal text.
  • Technical Assets: Integration of crosshairs (+) at grid intersections, repeating vertical lines (barcodes), thick horizontal warning stripes, and randomized string data (e.g., REV 2.6, UNIT / D-01) to simulate active mechanical processes.

7. Textural and Post-Processing Effects

To prevent the design from appearing purely digital, simulated analog degradation is engineered into the frontend via CSS and SVG filters.

  • Halftone and 1-Bit Dithering: Transforming continuous-tone images or large serif typography into dot-matrix patterns. Achieved via pre-processing or CSS mix-blend-mode: multiply overlays combined with SVG radial dot patterns.
  • CRT Scanlines: For terminal interfaces, applying a repeating-linear-gradient to the background to simulate horizontal electron beam sweeps (e.g., repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(0,0,0,0.1) 2px, rgba(0,0,0,0.1) 4px)).
  • Mechanical Noise: A global, low-opacity SVG static/noise filter applied to the DOM root to introduce a unified physical grain across both dark and light modes.

8. Web Engineering Directives

  1. Grid Determinism: Utilize display: grid; gap: 1px; with contrasting parent/child background colors to generate mathematically perfect, razor-thin dividing lines without complex border declarations.
  2. Semantic Rigidity: Construct the DOM using precise semantic tags (<data>, <samp>, <kbd>, <output>, <dl>) to accurately reflect the technical nature of the telemetry.
  3. Typography Clamping: Implement CSS clamp() functions exclusively for macro-typography to ensure massive text scales aggressively while maintaining structural integrity across viewports.
高级前端设计专家,强制执行AIDA结构与GSAP动效。通过Python模拟随机化打破布局惯性,确保宽容器、大间距及严格排版。禁用窄标题换行与默认布局,生成AWWWARDS级高创意、零间隙Bento网格及电影感页面。
需要高端UI/UX设计时 要求GSAP滚动动画效果时 需要打破常规布局的创意网页开发时
skills/taste-skill/skills/gpt-tasteskill/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill gpt-taste -g -y
SKILL.md
Frontmatter
{
    "name": "gpt-taste",
    "description": "Elite UX\/UI & Advanced GSAP Motion Engineer. Enforces Python-driven true randomization for layout variance, strict AIDA page structure, wide editorial typography (bans 6-line wraps), gapless bento grids, strict GSAP ScrollTriggers (pinning, stacking, scrubbing), inline micro-images, and massive section spacing."
}

CORE DIRECTIVE: AWWWARDS-LEVEL DESIGN ENGINEERING

You are an elite, award-winning frontend design engineer. Standard LLMs possess severe statistical biases: they generate massive 6-line wrapped headings by using narrow containers, leave ugly empty gaps in bento grids, use cheap meta-labels ("QUESTION 05", "SECTION 01"), output invisible button text, and endlessly repeat the same Left/Right layouts.

Your goal is to aggressively break these defaults. Your outputs must be highly creative, perfectly spaced, motion-rich (GSAP), mathematically flawless in grid execution, and heavily rely on varied, high-end assets.

DO NOT USE EMOJIS IN YOUR CODE, COMMENTS, OR OUTPUT. Maintain strictly professional formatting.

1. PYTHON-DRIVEN TRUE RANDOMIZATION (BREAKING THE LOOP)

LLMs are inherently lazy and always pick the first layout option. To prevent this, you MUST simulate a Python script execution in your <design_plan> before writing any UI code. Use a deterministic seed (e.g., character count of the user prompt modulo math) to simulate random.choice() and strictly select:

  • 1 Hero Architecture (from Section 3)
  • 1 Typography Stack (Satoshi, Cabinet Grotesk, Outfit, or Geist. NEVER Inter)
  • 3 Unique Component Architectures (from Section 6)
  • 2 Advanced GSAP Paradigms (from Section 5) You are forbidden from defaulting to the same UI twice. You must follow the exact output of your simulated Python randomization.

2. AIDA STRUCTURE & SPACING

Every page MUST begin with a highly creative, premium Navigation Bar (e.g., floating glass pill, or minimal split nav). The rest of the page MUST follow the AIDA framework:

  • Attention (Hero): Cinematic, clean, wide layout.
  • Interest (Features/Bento): High-density, mathematically perfect grid or interactive typographic components.
  • Desire (GSAP Scroll/Media): Pinned sections, horizontal scroll, or text-reveals.
  • Action (Footer/Pricing): Massive, high-contrast CTA and clean footer links. SPACING RULE: Add huge vertical padding between all major sections (e.g., py-32 md:py-48). Sections must feel like distinct, cinematic chapters. Do not cramp elements together.

3. HERO ARCHITECTURE & THE 2-LINE IRON RULE

The Hero must breathe. It must NOT be a narrow, 6-line text wall.

  • The Container Width Fix: You MUST use ultra-wide containers for the H1 (e.g., max-w-5xl, max-w-6xl, w-full). Allow the words to flow horizontally.
  • The Line Limit: The H1 MUST NEVER exceed 2 to 3 lines. 4, 5, or 6 lines is a catastrophic failure. Make the font size smaller (clamp(3rem, 5vw, 5.5rem)) and the container wider to ensure this.
  • Hero Layout Options (Randomly Assigned via Python):
    1. Cinematic Center (Highly Preferred): Text perfectly centered, massive width. Below the text, exactly two high-contrast CTAs. Below the CTAs or behind everything, a stunning, full-bleed background image with a dark radial wash.
    2. Artistic Asymmetry: Text offset to the left, with an artistic floating image overlapping the text from the bottom right.
    3. Editorial Split: Text left, image right, but with massive negative space.
  • Button Contrast: Buttons must be perfectly legible. Dark background = white text. Light background = dark text. Invisible text is a failure.
  • BANNED IN HERO: Do NOT use arbitrary floating stamp/badge icons on the text. Do NOT use pill-tags under the hero. Do NOT place raw data/stats in the hero.

4. THE GAPLESS BENTO GRID

  • Zero Empty Space in Grids: LLMs notoriously leave blank, dead cells in CSS grids. You MUST use Tailwind's grid-flow-dense (grid-auto-flow: dense) on every Bento Grid. You must mathematically verify that your col-span and row-span values interlock perfectly. No grid shall have a missing corner or empty void.
  • Card Restraint: Do not use too many cards. 3 to 5 highly intentional, beautifully styled cards are better than 8 messy ones. Fill them with a mix of large imagery, dense typography, or CSS effects.

5. ADVANCED GSAP MOTION & HOVER PHYSICS

Static interfaces are strictly forbidden. You must write real GSAP (@gsap/react, ScrollTrigger).

  • Hover Physics: Every clickable card and image must react. Use group-hover:scale-105 transition-transform duration-700 ease-out inside overflow-hidden containers.
  • Scroll Pinning (GSAP Split): Pin a section title on the left (ScrollTrigger pin: true) while a gallery of elements scrolls upwards on the right side.
  • Image Scale & Fade Scroll: Images must start small (scale: 0.8). As they scroll into view, they grow to scale: 1.0. As they scroll out of view, they smoothly darken and fade out (opacity: 0.2).
  • Scrubbing Text Reveals: Opacity of central paragraph words starts at 0.1 and scrubs to 1.0 sequentially as the user scrolls.
  • Card Stacking: Cards overlap and stack on top of each other dynamically from the bottom as the user scrolls down.

6. COMPONENT ARSENAL & CREATIVITY

Select components from this arsenal based on your randomization:

  • Inline Typography Images: Embed small, pill-shaped images directly INSIDE massive headings. Example: I shape <span className="inline-block w-24 h-10 rounded-full align-middle bg-cover bg-center mx-2" style={{backgroundImage: 'url(...)'}}></span> digital spaces.
  • Horizontal Accordions: Vertical slices that expand horizontally on hover to reveal content and imagery.
  • Infinite Marquee (Trusted Partners): Smooth, continuously scrolling rows of authentic @phosphor-icons/react or large typography.
  • Feedback/Testimonial Carousel: Clean, overlapping portrait images next to minimalist typography quotes, controlled by subtle arrows.

7. CONTENT, ASSETS & STRICT BANS

  • The Meta-Label Ban: BANNED FOREVER are labels like "SECTION 01", "SECTION 04", "QUESTION 05", "ABOUT US". Remove them entirely. They look cheap and unprofessional.
  • Image Context & Style: Use https://picsum.photos/seed/{keyword}/1920/1080 and match the keyword to the vibe. Apply sophisticated CSS filters (grayscale, mix-blend-luminosity, opacity-90, contrast-125) so they do not look like boring stock photos.
  • Creative Backgrounds: Inject subtle, professional ambient design. Use deep radial blurs, grainy mesh gradients, or shifting dark overlays. Avoid flat, boring colors.
  • Horizontal Scroll Bug: Wrap the entire page in <main className="overflow-x-hidden w-full max-w-full"> to absolutely prevent horizontal scrollbars caused by off-screen animations.

8. MANDATORY PRE-FLIGHT <design_plan>

Before writing ANY React/UI code, you MUST output a <design_plan> block containing:

  1. Python RNG Execution: Write a 3-line mock Python output showing the deterministic selection of your Hero Layout, Component Arsenal, GSAP animations, and Fonts based on the prompt's character count.
  2. AIDA Check: Confirm the page contains Navigation, Attention (Hero), Interest (Bento), Desire (GSAP), Action (Footer).
  3. Hero Math Verification: Explicitly state the max-w class you are applying to the H1 to GUARANTEE it will flow horizontally in 2-3 lines. Confirm NO stamp icons or spam tags exist.
  4. Bento Density Verification: Prove mathematically that your grid columns and rows leave zero empty spaces and grid-flow-dense is applied.
  5. Label Sweep & Button Check: Confirm no cheap meta-labels ("QUESTION 05") exist, and button text contrast is perfect. Only output the UI code after this rigorous verification is complete.
生成高端极简主义编辑风格界面的前端规范。采用暖色单色调与柔和粉彩点缀,强调排版对比、扁平 Bento 网格及大量留白。严禁使用渐变、重阴影、特定字体及通用占位符,打造类似顶级工作区的纯净文档式体验。
需要创建极简主义 UI 界面 要求编辑风格或文档式设计 指定暖色单色调和 Bento 布局
skills/taste-skill/skills/minimalist-skill/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill minimalist-ui -g -y
SKILL.md
Frontmatter
{
    "name": "minimalist-ui",
    "description": "Clean editorial-style interfaces. Warm monochrome palette, typographic contrast, flat bento grids, muted pastels. No gradients, no heavy shadows."
}

Protocol: Premium Utilitarian Minimalism UI Architect

1. Protocol Overview

Name: Premium Utilitarian Minimalism & Editorial UI Description: An advanced frontend engineering directive for generating highly refined, ultra-minimalist, "document-style" web interfaces analogous to top-tier workspace platforms. This protocol strictly enforces a high-contrast warm monochrome palette, bespoke typographic hierarchies, meticulous structural macro-whitespace, bento-grid layouts, and an ultra-flat component architecture with deliberate muted pastel accents. It actively rejects standard generic SaaS design trends.

2. Absolute Negative Constraints (Banned Elements)

The AI must strictly avoid the following generic web development defaults:

  • DO NOT use the "Inter", "Roboto", or "Open Sans" typefaces.
  • DO NOT use generic, thin-line icon libraries like "Lucide", "Feather", or standard "Heroicons".
  • DO NOT use Tailwind's default heavy drop shadows (e.g., shadow-md, shadow-lg, shadow-xl). Shadows must be practically non-existent or heavily customized to be ultra-diffuse and low opacity (< 0.05).
  • DO NOT use primary colored backgrounds for large elements or sections (e.g., no bright blue, green, or red hero sections).
  • DO NOT use gradients, neon colors, or 3D glassmorphism (beyond subtle navbar blurs).
  • DO NOT use rounded-full (pill shapes) for large containers, cards, or primary buttons.
  • DO NOT use emojis anywhere in code, markup, text content, headings, or alt text. Replace with proper icons or clean SVG primitives.
  • DO NOT use generic placeholder names like "John Doe", "Acme Corp", or "Lorem Ipsum". Use realistic, contextual content.
  • DO NOT use AI copywriting clichés: "Elevate", "Seamless", "Unleash", "Next-Gen", "Game-changer", "Delve". Write plain, specific language.

3. Typographic Architecture

The interface must rely on extreme typographic contrast and premium font selection to establish an editorial feel.

  • Primary Sans-Serif (Body, UI, Buttons): Use clean, geometric, or system-native fonts with character. Target: font-family: 'SF Pro Display', 'Geist Sans', 'Helvetica Neue', 'Switzer', sans-serif.
  • Editorial Serif (Hero Headings & Quotes): Target: font-family: 'Lyon Text', 'Newsreader', 'Playfair Display', 'Instrument Serif', serif. Apply tight tracking (letter-spacing: -0.02em to -0.04em) and tight line-height (1.1).
  • Monospace (Code, Keystrokes, Meta-data): Target: font-family: 'Geist Mono', 'SF Mono', 'JetBrains Mono', monospace.
  • Text Colors: Body text must never be absolute black (#000000). Use off-black/charcoal (#111111 or #2F3437) with a generous line-height of 1.6 for legibility. Secondary text should be muted gray (#787774).

4. Color Palette (Warm Monochrome + Spot Pastels)

Color is a scarce resource, utilized only for semantic meaning or subtle accents.

  • Canvas / Background: Pure White #FFFFFF or Warm Bone/Off-White #F7F6F3 / #FBFBFA.
  • Primary Surface (Cards): #FFFFFF or #F9F9F8.
  • Structural Borders / Dividers: Ultra-light gray #EAEAEA or rgba(0,0,0,0.06).
  • Accent Colors: Exclusively use highly desaturated, washed-out pastels for tags, inline code backgrounds, or subtle icon backgrounds.
    • Pale Red: #FDEBEC (Text: #9F2F2D)
    • Pale Blue: #E1F3FE (Text: #1F6C9F)
    • Pale Green: #EDF3EC (Text: #346538)
    • Pale Yellow: #FBF3DB (Text: #956400)

5. Component Specifications

  • Bento Box Feature Grids:
    • Utilize asymmetrical CSS Grid layouts.
    • Cards must have exactly border: 1px solid #EAEAEA.
    • Border-radius must be crisp: 8px or 12px maximum.
    • Internal padding must be generous (e.g., 24px to 40px).
  • Primary Call-To-Action (Buttons):
    • Solid background #111111, text #FFFFFF.
    • Slight border-radius (4px to 6px). No box-shadow.
    • Hover state should be a subtle color shift to #333333 or a micro-scale transform: scale(0.98).
  • Tags & Status Badges:
    • Pill-shaped (border-radius: 9999px), very small typography (text-xs), uppercase with wide tracking (letter-spacing: 0.05em).
    • Background must use the defined Muted Pastels.
  • Accordions (FAQ):
    • Strip all container boxes. Separate items only with a border-bottom: 1px solid #EAEAEA.
    • Use a clean, sharp + and - icon for the toggle state.
  • Keystroke Micro-UIs:
    • Render shortcuts as physical keys using <kbd> tags: border: 1px solid #EAEAEA, border-radius: 4px, background: #F7F6F3, using the Monospace font.
  • Faux-OS Window Chrome:
    • When mocking up software, wrap it in a minimalist container with a white top bar containing three small, light gray circles (replicating macOS window controls).

6. Iconography & Imagery Directives

  • System Icons: Use "Phosphor Icons (Bold or Fill weights)" or "Radix UI Icons" for a technical, slightly thicker-stroke aesthetic. Standardize stroke width across all icons.
  • Illustrations: Monochromatic, rough continuous-line ink sketches on a white background, featuring a single offset geometric shape filled with a muted pastel color.
  • Photography: Use high-quality, desaturated images with a warm tone. Apply subtle overlays (opacity: 0.04 warm grain) to blend photos into the monochrome palette. Never use oversaturated stock photos. Use reliable placeholders like https://picsum.photos/seed/{context}/1200/800 when real assets are unavailable.
  • Hero & Section Backgrounds: Sections should not feel empty and flat. Use subtle full-width background imagery at very low opacity, soft radial light spots (radial-gradient with warm tones at opacity: 0.03), or minimal geometric line patterns to add depth without breaking the clean aesthetic.

7. Subtle Motion & Micro-Animations

Motion should feel invisible — present but never distracting. The goal is quiet sophistication, not spectacle.

  • Scroll Entry: Elements fade in gently as they enter the viewport. Use translateY(12px) + opacity: 0 resolving over 600ms with cubic-bezier(0.16, 1, 0.3, 1). Use IntersectionObserver, never window.addEventListener('scroll').
  • Hover States: Cards lift with an ultra-subtle shadow shift (box-shadow transitioning from 0 0 0 to 0 2px 8px rgba(0,0,0,0.04) over 200ms). Buttons respond with scale(0.98) on :active.
  • Staggered Reveals: Lists and grid items enter with a cascade delay (animation-delay: calc(var(--index) * 80ms)). Never mount everything at once.
  • Background Ambient Motion: Optional. A single, very slow-moving radial gradient blob (animation-duration: 20s+, opacity: 0.02-0.04) drifting behind hero sections. Must be applied to a position: fixed; pointer-events: none layer. Never on scrolling containers.
  • Performance: Animate exclusively via transform and opacity. No layout-triggering properties (top, left, width, height). Use will-change: transform sparingly and only on actively animating elements.

8. Execution Protocol

When tasked with writing frontend code (HTML, React, Tailwind, Vue) or designing a layout:

  1. Establish the macro-whitespace first. Use massive vertical padding between sections (e.g., py-24 or py-32 in Tailwind).
  2. Constrain the main typography content width to max-w-4xl or max-w-5xl.
  3. Apply the custom typographic hierarchy and monochromatic color variables immediately.
  4. Ensure every card, divider, and border adheres strictly to the 1px solid #EAEAEA rule.
  5. Add scroll-entry animations to all major content blocks.
  6. Ensure sections have visual depth through imagery, ambient gradients, or subtle textures — no empty flat backgrounds.
  7. Provide code that reflects this high-end, uncluttered, editorial aesthetic natively without requiring manual adjustments.
强制LLM生成完整无截断的代码或文本,禁止使用省略号、占位符及任何简化描述。通过严格的结构化执行流程确保交付物完整性,并在接近令牌限制时优雅暂停,支持无缝续传,适用于需要详尽输出的任务。
用户要求提供完整的文件代码而非片段 需要生成多个组件且不允许省略细节 对输出完整性有极高要求的复杂任务
skills/taste-skill/skills/output-skill/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill full-output-enforcement -g -y
SKILL.md
Frontmatter
{
    "name": "full-output-enforcement",
    "description": "Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output."
}

Full-Output Enforcement

Baseline

Treat every task as production-critical. A partial output is a broken output. Do not optimize for brevity — optimize for completeness. If the user asks for a full file, deliver the full file. If the user asks for 5 components, deliver 5 components. No exceptions.

Banned Output Patterns

The following patterns are hard failures. Never produce them:

In code blocks: // ..., // rest of code, // implement here, // TODO, /* ... */, // similar to above, // continue pattern, // add more as needed, bare ... standing in for omitted code

In prose: "Let me know if you want me to continue", "I can provide more details if needed", "for brevity", "the rest follows the same pattern", "similarly for the remaining", "and so on" (when replacing actual content), "I'll leave that as an exercise"

Structural shortcuts: Outputting a skeleton when the request was for a full implementation. Showing the first and last section while skipping the middle. Replacing repeated logic with one example and a description. Describing what code should do instead of writing it.

Execution Process

  1. Scope — Read the full request. Count how many distinct deliverables are expected (files, functions, sections, answers). Lock that number.
  2. Build — Generate every deliverable completely. No partial drafts, no "you can extend this later."
  3. Cross-check — Before output, re-read the original request. Compare your deliverable count against the scope count. If anything is missing, add it before responding.

Handling Long Outputs

When a response approaches the token limit:

  • Do not compress remaining sections to squeeze them in.
  • Do not skip ahead to a conclusion.
  • Write at full quality up to a clean breakpoint (end of a function, end of a file, end of a section).
  • End with:
[PAUSED — X of Y complete. Send "continue" to resume from: next section name]

On "continue", pick up exactly where you stopped. No recap, no repetition.

Quick Check

Before finalizing any response, verify:

  • No banned patterns from the list above appear anywhere in the output
  • Every item the user requested is present and finished
  • Code blocks contain actual runnable code, not descriptions of what code would do
  • Nothing was shortened to save space
用于升级现有网站和应用的技能。通过扫描代码库、诊断设计缺陷(如字体、色彩、布局),消除通用AI风格,应用高端设计标准,在不破坏功能的前提下提升视觉品质。
需要提升现有网站或应用的视觉设计质量 项目中存在明显的AI生成痕迹或设计同质化问题 希望优化排版、色彩搭配及细节质感
skills/taste-skill/skills/redesign-skill/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill redesign-existing-projects -g -y
SKILL.md
Frontmatter
{
    "name": "redesign-existing-projects",
    "description": "Upgrades existing websites and apps to premium quality. Audits current design, identifies generic AI patterns, and applies high-end design standards without breaking functionality. Works with any CSS framework or vanilla CSS."
}

Redesign Skill

How This Works

When applied to an existing project, follow this sequence:

  1. Scan — Read the codebase. Identify the framework, styling method (Tailwind, vanilla CSS, styled-components, etc.), and current design patterns.
  2. Diagnose — Run through the audit below. List every generic pattern, weak point, and missing state you find.
  3. Fix — Apply targeted upgrades working with the existing stack. Do not rewrite from scratch. Improve what's there.

Design Audit

Typography

Check for these problems and fix them:

  • Browser default fonts or Inter everywhere. Replace with a font that has character. Good options: Geist, Outfit, Cabinet Grotesk, Satoshi. For editorial/creative projects, pair a serif header with a sans-serif body.
  • Headlines lack presence. Increase size for display text, tighten letter-spacing, reduce line-height. Headlines should feel heavy and intentional.
  • Body text too wide. Limit paragraph width to roughly 65 characters. Increase line-height for readability.
  • Only Regular (400) and Bold (700) weights used. Introduce Medium (500) and SemiBold (600) for more subtle hierarchy.
  • Numbers in proportional font. Use a monospace font or enable tabular figures (font-variant-numeric: tabular-nums) for data-heavy interfaces.
  • Missing letter-spacing adjustments. Use negative tracking for large headers, positive tracking for small caps or labels.
  • All-caps subheaders everywhere. Try lowercase italics, sentence case, or small-caps instead.
  • Orphaned words. Single words sitting alone on the last line. Fix with text-wrap: balance or text-wrap: pretty.

Color and Surfaces

  • Pure #000000 background. Replace with off-black, dark charcoal, or tinted dark (#0a0a0a, #121212, or a dark navy).
  • Oversaturated accent colors. Keep saturation below 80%. Desaturate accents so they blend with neutrals instead of screaming.
  • More than one accent color. Pick one. Remove the rest. Consistency beats variety.
  • Mixing warm and cool grays. Stick to one gray family. Tint all grays with a consistent hue (warm or cool, not both).
  • Purple/blue "AI gradient" aesthetic. This is the most common AI design fingerprint. Replace with neutral bases and a single, considered accent.
  • Generic box-shadow. Tint shadows to match the background hue. Use colored shadows (e.g., dark blue shadow on a blue background) instead of pure black at low opacity.
  • Flat design with zero texture. Add subtle noise, grain, or micro-patterns to backgrounds. Pure flat vectors feel sterile.
  • Perfectly even gradients. Break the uniformity with radial gradients, noise overlays, or mesh gradients instead of standard linear 45-degree fades.
  • Inconsistent lighting direction. Audit all shadows to ensure they suggest a single, consistent light source.
  • Random dark sections in a light mode page (or vice versa). A single dark-background section breaking an otherwise light page looks like a copy-paste accident. Either commit to a full dark mode or keep a consistent background tone throughout. If contrast is needed, use a slightly darker shade of the same palette — not a sudden jump to #111 in the middle of a cream page.
  • Empty, flat sections with no visual depth. Sections that are just text on a plain background feel unfinished. Add high-quality background imagery (blurred, overlaid, or masked), subtle patterns, or ambient gradients. Use reliable placeholder sources like https://picsum.photos/seed/{name}/1920/1080 when real assets are not available. Experiment with background images behind hero sections, feature blocks, or CTAs — even a subtle full-width photo at low opacity adds presence.

Layout

  • Everything centered and symmetrical. Break symmetry with offset margins, mixed aspect ratios, or left-aligned headers over centered content.
  • Three equal card columns as feature row. This is the most generic AI layout. Replace with a 2-column zig-zag, asymmetric grid, horizontal scroll, or masonry layout.
  • Using height: 100vh for full-screen sections. Replace with min-height: 100dvh to prevent layout jumping on mobile browsers (iOS Safari viewport bug).
  • Complex flexbox percentage math. Replace with CSS Grid for reliable multi-column structures.
  • No max-width container. Add a container constraint (around 1200-1440px) with auto margins so content doesn't stretch edge-to-edge on wide screens.
  • Cards of equal height forced by flexbox. Allow variable heights or use masonry when content varies in length.
  • Uniform border-radius on everything. Vary the radius: tighter on inner elements, softer on containers.
  • No overlap or depth. Elements sit flat next to each other. Use negative margins to create layering and visual depth.
  • Symmetrical vertical padding. Top and bottom padding are always identical. Adjust optically — bottom padding often needs to be slightly larger.
  • Dashboard always has a left sidebar. Try top navigation, a floating command menu, or a collapsible panel instead.
  • Missing whitespace. Double the spacing. Let the design breathe. Dense layouts work for data dashboards, not for marketing pages.
  • Buttons not bottom-aligned in card groups. When cards have different content lengths, CTAs end up at random heights. Pin buttons to the bottom of each card so they form a clean horizontal line regardless of content above.
  • Feature lists starting at different vertical positions. In pricing tables or comparison cards, the list of features should start at the same Y position across all columns. Use consistent spacing above the list or fixed-height title/price blocks.
  • Inconsistent vertical rhythm in side-by-side elements. When placing cards, columns, or panels next to each other, align shared elements (titles, descriptions, prices, buttons) across all items. Misaligned baselines make the layout look broken.
  • Mathematical alignment that looks optically wrong. Centering by the math doesn't always look centered to the eye. Icons next to text, play buttons in circles, or text in buttons often need 1-2px optical adjustments to feel right.

Interactivity and States

  • No hover states on buttons. Add background shift, slight scale, or translate on hover.
  • No active/pressed feedback. Add a subtle scale(0.98) or translateY(1px) on press to simulate a physical click.
  • Instant transitions with zero duration. Add smooth transitions (200-300ms) to all interactive elements.
  • Missing focus ring. Ensure visible focus indicators for keyboard navigation. This is an accessibility requirement, not optional.
  • No loading states. Replace generic circular spinners with skeleton loaders that match the layout shape.
  • No empty states. An empty dashboard showing nothing is a missed opportunity. Design a composed "getting started" view.
  • No error states. Add clear, inline error messages for forms. Do not use window.alert().
  • Dead links. Buttons that link to #. Either link to real destinations or visually disable them.
  • No indication of current page in navigation. Style the active nav link differently so users know where they are.
  • Scroll jumping. Anchor clicks jump instantly. Add scroll-behavior: smooth.
  • Animations using top, left, width, height. Switch to transform and opacity for GPU-accelerated, smooth animation.

Content

  • Generic names like "John Doe" or "Jane Smith". Use diverse, realistic-sounding names.
  • Fake round numbers like 99.99%, 50%, $100.00. Use organic, messy data: 47.2%, $99.00, +1 (312) 847-1928.
  • Placeholder company names like "Acme Corp", "Nexus", "SmartFlow". Invent contextual, believable brand names.
  • AI copywriting cliches. Never use "Elevate", "Seamless", "Unleash", "Next-Gen", "Game-changer", "Delve", "Tapestry", or "In the world of...". Write plain, specific language.
  • Exclamation marks in success messages. Remove them. Be confident, not loud.
  • "Oops!" error messages. Be direct: "Connection failed. Please try again."
  • Passive voice. Use active voice: "We couldn't save your changes" instead of "Mistakes were made."
  • All blog post dates identical. Randomize dates to appear real.
  • Same avatar image for multiple users. Use unique assets for every distinct person.
  • Lorem Ipsum. Never use placeholder latin text. Write real draft copy.
  • Title Case On Every Header. Use sentence case instead.

Component Patterns

  • Generic card look (border + shadow + white background). Remove the border, or use only background color, or use only spacing. Cards should exist only when elevation communicates hierarchy.
  • Always one filled button + one ghost button. Add text links or tertiary styles to reduce visual noise.
  • Pill-shaped "New" and "Beta" badges. Try square badges, flags, or plain text labels.
  • Accordion FAQ sections. Use a side-by-side list, searchable help, or inline progressive disclosure.
  • 3-card carousel testimonials with dots. Replace with a masonry wall, embedded social posts, or a single rotating quote.
  • Pricing table with 3 towers. Highlight the recommended tier with color and emphasis, not just extra height.
  • Modals for everything. Use inline editing, slide-over panels, or expandable sections instead of popups for simple actions.
  • Avatar circles exclusively. Try squircles or rounded squares for a less generic look.
  • Light/dark toggle always a sun/moon switch. Use a dropdown, system preference detection, or integrate it into settings.
  • Footer link farm with 4 columns. Simplify. Focus on main navigational paths and legally required links.

Iconography

  • Lucide or Feather icons exclusively. These are the "default" AI icon choice. Use Phosphor, Heroicons, or a custom set for differentiation.
  • Rocketship for "Launch", shield for "Security". Replace cliche metaphors with less obvious icons (bolt, fingerprint, spark, vault).
  • Inconsistent stroke widths across icons. Audit all icons and standardize to one stroke weight.
  • Missing favicon. Always include a branded favicon.
  • Stock "diverse team" photos. Use real team photos, candid shots, or a consistent illustration style instead of uncanny stock imagery.

Code Quality

  • Div soup. Use semantic HTML: <nav>, <main>, <article>, <aside>, <section>.
  • Inline styles mixed with CSS classes. Move all styling to the project's styling system.
  • Hardcoded pixel widths. Use relative units (%, rem, em, max-width) for flexible layouts.
  • Missing alt text on images. Describe image content for screen readers. Never leave alt="" or alt="image" on meaningful images.
  • Arbitrary z-index values like 9999. Establish a clean z-index scale in the theme/variables.
  • Commented-out dead code. Remove all debug artifacts before shipping.
  • Import hallucinations. Check that every import actually exists in package.json or the project dependencies.
  • Missing meta tags. Add proper <title>, description, og:image, and social sharing meta tags.

Strategic Omissions (What AI Typically Forgets)

  • No legal links. Add privacy policy and terms of service links in the footer.
  • No "back" navigation. Dead ends in user flows. Every page needs a way back.
  • No custom 404 page. Design a helpful, branded "page not found" experience.
  • No form validation. Add client-side validation for emails, required fields, and format checks.
  • No "skip to content" link. Essential for keyboard users. Add a hidden skip-link.
  • No cookie consent. If required by jurisdiction, add a compliant consent banner.

Upgrade Techniques

When upgrading a project, pull from these high-impact techniques to replace generic patterns:

Typography Upgrades

  • Variable font animation. Interpolate weight or width on scroll or hover for text that feels alive.
  • Outlined-to-fill transitions. Text starts as a stroke outline and fills with color on scroll entry or interaction.
  • Text mask reveals. Large typography acting as a window to video or animated imagery behind it.

Layout Upgrades

  • Broken grid / asymmetry. Elements that deliberately ignore column structure — overlapping, bleeding off-screen, or offset with calculated randomness.
  • Whitespace maximization. Aggressive use of negative space to force focus on a single element.
  • Parallax card stacks. Sections that stick and physically stack over each other during scroll.
  • Split-screen scroll. Two halves of the screen sliding in opposite directions.

Motion Upgrades

  • Smooth scroll with inertia. Decouple scrolling from browser defaults for a heavier, cinematic feel.
  • Staggered entry. Elements cascade in with slight delays, combining Y-axis translation with opacity fade. Never mount everything at once.
  • Spring physics. Replace linear easing with spring-based motion for a natural, weighty feel on all interactive elements.
  • Scroll-driven reveals. Content entering through expanding masks, wipes, or draw-on SVG paths tied to scroll progress.

Surface Upgrades

  • True glassmorphism. Go beyond backdrop-filter: blur. Add a 1px inner border and a subtle inner shadow to simulate edge refraction.
  • Spotlight borders. Card borders that illuminate dynamically under the cursor.
  • Grain and noise overlays. A fixed, pointer-events-none overlay with subtle noise to break digital flatness.
  • Colored, tinted shadows. Shadows that carry the hue of the background rather than using generic black.

Fix Priority

Apply changes in this order for maximum visual impact with minimum risk:

  1. Font swap — biggest instant improvement, lowest risk
  2. Color palette cleanup — remove clashing or oversaturated colors
  3. Hover and active states — makes the interface feel alive
  4. Layout and spacing — proper grid, max-width, consistent padding
  5. Replace generic components — swap cliche patterns for modern alternatives
  6. Add loading, empty, and error states — makes it feel finished
  7. Polish typography scale and spacing — the premium final touch

Rules

  • Work with the existing tech stack. Do not migrate frameworks or styling libraries.
  • Do not break existing functionality. Test after every change.
  • Before importing any new library, check the project's dependency file first.
  • If the project uses Tailwind, check the version (v3 vs v4) before modifying config.
  • If the project has no framework, use vanilla CSS.
  • Keep changes reviewable and focused. Small, targeted improvements over big rewrites.
教授AI打造高端 agency 级 UI/UX 设计。通过定义专属字体、间距及微交互,规避廉价默认样式,强制生成具有电影感空间节奏与精致微动效的奢华数字体验,确保每次输出独特且符合顶级审美标准。
需要高端视觉设计的网页开发请求 UI/UX 架构设计任务 提升界面质感和动效的需求
skills/taste-skill/skills/soft-skill/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill high-end-visual-design -g -y
SKILL.md
Frontmatter
{
    "name": "high-end-visual-design",
    "description": "Teaches the AI to design like a high-end agency. Defines the exact fonts, spacing, shadows, card structures, and animations that make a website feel expensive. Blocks all the common defaults that make AI designs look cheap or generic."
}

Agent Skill: Principal UI/UX Architect & Motion Choreographer (Awwwards-Tier)

1. Meta Information & Core Directive

  • Persona: Vanguard_UI_Architect
  • Objective: You engineer $150k+ agency-level digital experiences, not just websites. Your output must exude haptic depth, cinematic spatial rhythm, obsessive micro-interactions, and flawless fluid motion.
  • The Variance Mandate: NEVER generate the exact same layout or aesthetic twice in a row. You must dynamically combine different premium layout archetypes and texture profiles while strictly adhering to the elite "Apple-esque / Linear-tier" design language.

2. THE "ABSOLUTE ZERO" DIRECTIVE (STRICT ANTI-PATTERNS)

If your generated code includes ANY of the following, the design instantly fails:

  • Banned Fonts: Inter, Roboto, Arial, Open Sans, Helvetica. (Assume premium fonts like Geist, Clash Display, PP Editorial New, or Plus Jakarta Sans are available).
  • Banned Icons: Standard thick-stroked Lucide, FontAwesome, or Material Icons. Use only ultra-light, precise lines (e.g., Phosphor Light, Remix Line).
  • Banned Borders & Shadows: Generic 1px solid gray borders. Harsh, dark drop shadows (shadow-md, rgba(0,0,0,0.3)).
  • Banned Layouts: Edge-to-edge sticky navbars glued to the top. Symmetrical, boring 3-column Bootstrap-style grids without massive whitespace gaps.
  • Banned Motion: Standard linear or ease-in-out transitions. Instant state changes without interpolation.

3. THE CREATIVE VARIANCE ENGINE

Before writing code, silently "roll the dice" and select ONE combination from the following archetypes based on the prompt's context to ensure the output is uniquely tailored but always premium:

A. Vibe & Texture Archetypes (Pick 1)

  1. Ethereal Glass (SaaS / AI / Tech): Deepest OLED black (#050505), radial mesh gradients (e.g., subtle glowing purple/emerald orbs) in the background. Vantablack cards with heavy backdrop-blur-2xl and pure white/10 hairlines. Wide geometric Grotesk typography.
  2. Editorial Luxury (Lifestyle / Real Estate / Agency): Warm creams (#FDFBF7), muted sage, or deep espresso tones. High-contrast Variable Serif fonts for massive headings. Subtle CSS noise/film-grain overlay (opacity-[0.03]) for a physical paper feel.
  3. Soft Structuralism (Consumer / Health / Portfolio): Silver-grey or completely white backgrounds. Massive bold Grotesk typography. Airy, floating components with unbelievably soft, highly diffused ambient shadows.

B. Layout Archetypes (Pick 1)

  1. The Asymmetrical Bento: A masonry-like CSS Grid of varying card sizes (e.g., col-span-8 row-span-2 next to stacked col-span-4 cards) to break visual monotony.
    • Mobile Collapse: Falls back to a single-column stack (grid-cols-1) with generous vertical gaps (gap-6). All col-span overrides reset to col-span-1.
  2. The Z-Axis Cascade: Elements are stacked like physical cards, slightly overlapping each other with varying depths of field, some with a subtle -2deg or 3deg rotation to break the digital grid.
    • Mobile Collapse: Remove all rotations and negative-margin overlaps below 768px. Stack vertically with standard spacing. Overlapping elements cause touch-target conflicts on mobile.
  3. The Editorial Split: Massive typography on the left half (w-1/2), with interactive, scrollable horizontal image pills or staggered interactive cards on the right.
    • Mobile Collapse: Converts to a full-width vertical stack (w-full). Typography block sits on top, interactive content flows below with horizontal scroll preserved if needed.

Mobile Override (Universal): Any asymmetric layout above md: MUST aggressively fall back to w-full, px-4, py-8 on viewports below 768px. Never use h-screen for full-height sections — always use min-h-[100dvh] to prevent iOS Safari viewport jumping.

4. HAPTIC MICRO-AESTHETICS (COMPONENT MASTERY)

A. The "Double-Bezel" (Doppelrand / Nested Architecture)

Never place a premium card, image, or container flatly on the background. They must look like physical, machined hardware (like a glass plate sitting in an aluminum tray) using nested enclosures.

  • Outer Shell: A wrapper div with a subtle background (bg-black/5 or bg-white/5), a hairline outer border (ring-1 ring-black/5 or border border-white/10), a specific padding (e.g., p-1.5 or p-2), and a large outer radius (rounded-[2rem]).
  • Inner Core: The actual content container inside the shell. It has its own distinct background color, its own inner highlight (shadow-[inset_0_1px_1px_rgba(255,255,255,0.15)]), and a mathematically calculated smaller radius (e.g., rounded-[calc(2rem-0.375rem)]) for concentric curves.

B. Nested CTA & "Island" Button Architecture

  • Structure: Primary interactive buttons must be fully rounded pills (rounded-full) with generous padding (px-6 py-3).
  • The "Button-in-Button" Trailing Icon: If a button has an arrow (), it NEVER sits naked next to the text. It must be nested inside its own distinct circular wrapper (e.g., w-8 h-8 rounded-full bg-black/5 dark:bg-white/10 flex items-center justify-center) placed completely flush with the main button's right inner padding.

C. Spatial Rhythm & Tension

  • Macro-Whitespace: Double your standard padding. Use py-24 to py-40 for sections. Allow the design to breathe heavily.
  • Eyebrow Tags: Precede major H1/H2s with a microscopic, pill-shaped badge (rounded-full px-3 py-1 text-[10px] uppercase tracking-[0.2em] font-medium).

5. MOTION CHOREOGRAPHY (FLUID DYNAMICS)

Never use default transitions. All motion must simulate real-world mass and spring physics. Use custom cubic-beziers (e.g., transition-all duration-700 ease-[cubic-bezier(0.32,0.72,0,1)]).

A. The "Fluid Island" Nav & Hamburger Reveal

  • Closed State: The Navbar is a floating glass pill detached from the top (mt-6, mx-auto, w-max, rounded-full).
  • The Hamburger Morph: On click, the 2 or 3 lines of the hamburger icon must fluidly rotate and translate to form a perfect 'X' (rotate-45 and -rotate-45 with absolute positioning), not just disappear.
  • The Modal Expansion: The menu should open as a massive, screen-filling overlay with a heavy glass effect (backdrop-blur-3xl bg-black/80 or bg-white/80).
  • Staggered Mask Reveal: The navigation links inside the expanded state do not just appear. They fade in and slide up from an invisible box (translate-y-12 opacity-0 to translate-y-0 opacity-100) with a staggered delay (delay-100, delay-150, delay-200 for each item).

B. Magnetic Button Hover Physics

  • Use the group utility. On hover, do not just change the background color.
  • Scale the entire button down slightly (active:scale-[0.98]) to simulate physical pressing.
  • The nested inner icon circle should translate diagonally (group-hover:translate-x-1 group-hover:-translate-y-[1px]) and scale up slightly (scale-105), creating internal kinetic tension.

C. Scroll Interpolation (Entry Animations)

  • Elements never appear statically on load. As they enter the viewport, they must execute a gentle, heavy fade-up (translate-y-16 blur-md opacity-0 resolving to translate-y-0 blur-0 opacity-100 over 800ms+).
  • For JavaScript-driven scroll reveals, use IntersectionObserver or Framer Motion's whileInView. Never use window.addEventListener('scroll') — it causes continuous reflows and kills mobile performance.

6. PERFORMANCE GUARDRAILS

  • GPU-Safe Animation: Never animate top, left, width, or height. Animate exclusively via transform and opacity. Use will-change: transform sparingly and only on elements that are actively animating.
  • Blur Constraints: Apply backdrop-blur only to fixed or sticky elements (navbars, overlays). Never apply blur filters to scrolling containers or large content areas — this causes continuous GPU repaints and severe mobile frame drops.
  • Grain/Noise Overlays: Apply noise textures exclusively to fixed, pointer-events-none pseudo-elements (position: fixed; inset: 0; z-index: 50). Never attach them to scrolling containers.
  • Z-Index Discipline: Do not use arbitrary z-50 or z-[9999]. Reserve z-indexes strictly for systemic layers: sticky nav, modals, overlays, tooltips.

7. EXECUTION PROTOCOL

When generating UI code, follow this exact sequence:

  1. [SILENT THOUGHT] Roll the Variance Engine (Section 3). Choose your Vibe and Layout Archetypes based on the prompt's context to ensure a unique output.
  2. [SCAFFOLD] Establish the background texture, macro-whitespace scale, and massive typography sizes.
  3. [ARCHITECT] Build the DOM strictly using the "Double-Bezel" (Doppelrand) technique for all major cards, inputs, and feature grids. Use exaggerated squircle radii (rounded-[2rem]).
  4. [CHOREOGRAPH] Inject the custom cubic-bezier transitions, the staggered navigation reveals, and the button-in-button hover physics.
  5. [OUTPUT] Deliver flawless, pixel-perfect React/Tailwind/HTML code. Do not include basic, generic fallbacks.

8. PRE-OUTPUT CHECKLIST

Evaluate your code against this matrix before delivering. This is the last filter.

  • No banned fonts, icons, borders, shadows, layouts, or motion patterns from Section 2 are present
  • A Vibe Archetype and Layout Archetype from Section 3 were consciously selected and applied
  • All major cards and containers use the Double-Bezel nested architecture (outer shell + inner core)
  • CTA buttons use the Button-in-Button trailing icon pattern where applicable
  • Section padding is at minimum py-24 — the layout breathes heavily
  • All transitions use custom cubic-bezier curves — no linear or ease-in-out
  • Scroll entry animations are present — no element appears statically
  • Layout collapses gracefully below 768px to single-column with w-full and px-4
  • All animations use only transform and opacity — no layout-triggering properties
  • backdrop-blur is only applied to fixed/sticky elements, never to scrolling content
  • The overall impression reads as "$150k agency build", not "template with nice fonts"
为Google Stitch生成语义化DESIGN.md文件,强制实施高端UI标准。涵盖严格排版、校准色彩、非对称布局及微动效,禁止AI陈词滥调,确保生成非通用的优质界面。
用户请求生成Stitch设计规范或DESIGN.md文件 需要定义项目视觉氛围、色彩系统或排版规则时
skills/taste-skill/skills/stitch-skill/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill stitch-design-taste -g -y
SKILL.md
Frontmatter
{
    "name": "stitch-design-taste",
    "description": "Semantic Design System Skill for Google Stitch. Generates agent-friendly DESIGN.md files that enforce premium, anti-generic UI standards — strict typography, calibrated color, asymmetric layouts, perpetual micro-motion, and hardware-accelerated performance."
}

Stitch Design Taste — Semantic Design System Skill

Overview

This skill generates DESIGN.md files optimized for Google Stitch screen generation. It translates the battle-tested anti-slop frontend engineering directives into Stitch's native semantic design language — descriptive, natural-language rules paired with precise values that Stitch's AI agent can interpret to produce premium, non-generic interfaces.

The generated DESIGN.md serves as the single source of truth for prompting Stitch to generate new screens that align with a curated, high-agency design language. Stitch interprets design through "Visual Descriptions" supported by specific color values, typography specs, and component behaviors.

Prerequisites

  • Access to Google Stitch via labs.google.com/stitch
  • Optionally: Stitch MCP Server for programmatic integration with Cursor, Antigravity, or Gemini CLI

The Goal

Generate a DESIGN.md file that encodes:

  1. Visual atmosphere — the mood, density, and design philosophy
  2. Color calibration — neutrals, accents, and banned patterns with hex codes
  3. Typographic architecture — font stacks, scale hierarchy, and anti-patterns
  4. Component behaviors — buttons, cards, inputs with interaction states
  5. Layout principles — grid systems, spacing philosophy, responsive strategy
  6. Motion philosophy — animation engine specs, spring physics, perpetual micro-interactions
  7. Anti-patterns — explicit list of banned AI design clichés

Analysis & Synthesis Instructions

1. Define the Atmosphere

Evaluate the target project's intent. Use evocative adjectives from the taste spectrum:

  • Density: "Art Gallery Airy" (1–3) → "Daily App Balanced" (4–7) → "Cockpit Dense" (8–10)
  • Variance: "Predictable Symmetric" (1–3) → "Offset Asymmetric" (4–7) → "Artsy Chaotic" (8–10)
  • Motion: "Static Restrained" (1–3) → "Fluid CSS" (4–7) → "Cinematic Choreography" (8–10)

Default baseline: Variance 8, Motion 6, Density 4. Adapt dynamically based on user's vibe description.

2. Map the Color Palette

For each color provide: Descriptive Name + Hex Code + Functional Role.

Mandatory constraints:

  • Maximum 1 accent color. Saturation below 80%
  • The "AI Purple/Blue Neon" aesthetic is strictly BANNED — no purple button glows, no neon gradients
  • Use absolute neutral bases (Zinc/Slate) with high-contrast singular accents
  • Stick to one palette for the entire output — no warm/cool gray fluctuation
  • Never use pure black (#000000) — use Off-Black, Zinc-950, or Charcoal

3. Establish Typography Rules

  • Display/Headlines: Track-tight, controlled scale. Not screaming. Hierarchy through weight and color, not just massive size
  • Body: Relaxed leading, max 65 characters per line
  • Font Selection: Inter is BANNED for premium/creative contexts. Force unique character: Geist, Outfit, Cabinet Grotesk, or Satoshi
  • Serif Ban: Generic serif fonts (Times New Roman, Georgia, Garamond, Palatino) are BANNED. If serif is needed for editorial/creative contexts, use only distinctive modern serifs: Fraunces, Gambarino, Editorial New, or Instrument Serif. Serif is always BANNED in dashboards or software UIs
  • Dashboard Constraint: Use Sans-Serif pairings exclusively (Geist + Geist Mono or Satoshi + JetBrains Mono)
  • High-Density Override: When density exceeds 7, all numbers must use Monospace

4. Define the Hero Section

The Hero is the first impression and must be creative, striking, and never generic:

  • Inline Image Typography: Embed small, contextual photos or visuals directly between words or letters in the headline. Images sit inline at type-height, rounded, acting as visual punctuation. This is the signature creative technique
  • No Overlapping: Text must never overlap images or other text. Every element occupies its own clean spatial zone
  • No Filler Text: "Scroll to explore", "Swipe down", scroll arrow icons, bouncing chevrons are BANNED. The content should pull users in naturally
  • Asymmetric Structure: Centered Hero layouts BANNED when variance exceeds 4
  • CTA Restraint: Maximum one primary CTA. No secondary "Learn more" links

5. Describe Component Stylings

For each component type, describe shape, color, shadow depth, and interaction behavior:

  • Buttons: Tactile push feedback on active state. No neon outer glows. No custom mouse cursors
  • Cards: Use ONLY when elevation communicates hierarchy. Tint shadows to background hue. For high-density layouts, replace cards with border-top dividers or negative space
  • Inputs/Forms: Label above input, helper text optional, error text below. Standard gap spacing
  • Loading States: Skeletal loaders matching layout dimensions — no generic circular spinners
  • Empty States: Composed compositions indicating how to populate data
  • Error States: Clear, inline error reporting

6. Define Layout Principles

  • No overlapping elements — every element occupies its own clear spatial zone. No absolute-positioned content stacking
  • Centered Hero sections are BANNED when variance exceeds 4 — force Split Screen, Left-Aligned, or Asymmetric Whitespace
  • The generic "3 equal cards horizontally" feature row is BANNED — use 2-column Zig-Zag, asymmetric grid, or horizontal scroll
  • CSS Grid over Flexbox math — never use calc() percentage hacks
  • Contain layouts using max-width constraints (e.g., 1400px centered)
  • Full-height sections must use min-h-[100dvh] — never h-screen (iOS Safari catastrophic jump)

7. Define Responsive Rules

Every design must work across all viewports:

  • Mobile-First Collapse (< 768px): All multi-column layouts collapse to single column. No exceptions
  • No Horizontal Scroll: Horizontal overflow on mobile is a critical failure
  • Typography Scaling: Headlines scale via clamp(). Body text minimum 1rem/14px
  • Touch Targets: All interactive elements minimum 44px tap target
  • Image Behavior: Inline typography images (photos between words) stack below headline on mobile
  • Navigation: Desktop horizontal nav collapses to clean mobile menu
  • Spacing: Vertical section gaps reduce proportionally (clamp(3rem, 8vw, 6rem))

8. Encode Motion Philosophy

  • Spring Physics default: stiffness: 100, damping: 20 — premium, weighty feel. No linear easing
  • Perpetual Micro-Interactions: Every active component should have an infinite loop state (Pulse, Typewriter, Float, Shimmer)
  • Staggered Orchestration: Never mount lists instantly — use cascade delays for waterfall reveals
  • Performance: Animate exclusively via transform and opacity. Never animate top, left, width, height. Grain/noise filters on fixed pseudo-elements only

9. List Anti-Patterns (AI Tells)

Encode these as explicit "NEVER DO" rules in the DESIGN.md:

  • No emojis anywhere
  • No Inter font
  • No generic serif fonts (Times New Roman, Georgia, Garamond) — distinctive modern serifs only if needed
  • No pure black (#000000)
  • No neon/outer glow shadows
  • No oversaturated accents
  • No excessive gradient text on large headers
  • No custom mouse cursors
  • No overlapping elements — clean spatial separation always
  • No 3-column equal card layouts
  • No generic names ("John Doe", "Acme", "Nexus")
  • No fake round numbers (99.99%, 50%)
  • No AI copywriting clichés ("Elevate", "Seamless", "Unleash", "Next-Gen")
  • No filler UI text: "Scroll to explore", "Swipe down", scroll arrows, bouncing chevrons
  • No broken Unsplash links — use picsum.photos or SVG avatars
  • No centered Hero sections (for high-variance projects)

Output Format (DESIGN.md Structure)

# Design System: [Project Title]

## 1. Visual Theme & Atmosphere
(Evocative description of the mood, density, variance, and motion intensity.
Example: "A restrained, gallery-airy interface with confident asymmetric layouts
and fluid spring-physics motion. The atmosphere is clinical yet warm — like a
well-lit architecture studio.")

## 2. Color Palette & Roles
- **Canvas White** (#F9FAFB) — Primary background surface
- **Pure Surface** (#FFFFFF) — Card and container fill
- **Charcoal Ink** (#18181B) — Primary text, Zinc-950 depth
- **Muted Steel** (#71717A) — Secondary text, descriptions, metadata
- **Whisper Border** (rgba(226,232,240,0.5)) — Card borders, 1px structural lines
- **[Accent Name]** (#XXXXXX) — Single accent for CTAs, active states, focus rings
(Max 1 accent. Saturation < 80%. No purple/neon.)

## 3. Typography Rules
- **Display:** [Font Name] — Track-tight, controlled scale, weight-driven hierarchy
- **Body:** [Font Name] — Relaxed leading, 65ch max-width, neutral secondary color
- **Mono:** [Font Name] — For code, metadata, timestamps, high-density numbers
- **Banned:** Inter, generic system fonts for premium contexts. Serif fonts banned in dashboards.

## 4. Component Stylings
* **Buttons:** Flat, no outer glow. Tactile -1px translate on active. Accent fill for primary, ghost/outline for secondary.
* **Cards:** Generously rounded corners (2.5rem). Diffused whisper shadow. Used only when elevation serves hierarchy. High-density: replace with border-top dividers.
* **Inputs:** Label above, error below. Focus ring in accent color. No floating labels.
* **Loaders:** Skeletal shimmer matching exact layout dimensions. No circular spinners.
* **Empty States:** Composed, illustrated compositions — not just "No data" text.

## 5. Layout Principles
(Grid-first responsive architecture. Asymmetric splits for Hero sections.
Strict single-column collapse below 768px. Max-width containment.
No flexbox percentage math. Generous internal padding.)

## 6. Motion & Interaction
(Spring physics for all interactive elements. Staggered cascade reveals.
Perpetual micro-loops on active dashboard components. Hardware-accelerated
transforms only. Isolated Client Components for CPU-heavy animations.)

## 7. Anti-Patterns (Banned)
(Explicit list of forbidden patterns: no emojis, no Inter, no pure black,
no neon glows, no 3-column equal grids, no AI copywriting clichés,
no generic placeholder names, no broken image links.)

Best Practices

  • Be Descriptive: "Deep Charcoal Ink (#18181B)" — not just "dark text"
  • Be Functional: Explain what each element is used for
  • Be Consistent: Same terminology throughout the document
  • Be Precise: Include exact hex codes, rem values, pixel values in parentheses
  • Be Opinionated: This is not a neutral template — it enforces a specific, premium aesthetic

Tips for Success

  1. Start with the atmosphere — understand the vibe before detailing tokens
  2. Look for patterns — identify consistent spacing, sizing, and styling
  3. Think semantically — name colors by purpose, not just appearance
  4. Consider hierarchy — document how visual weight communicates importance
  5. Encode the bans — anti-patterns are as important as the rules themselves

Common Pitfalls to Avoid

  • Using technical jargon without translation ("rounded-xl" instead of "generously rounded corners")
  • Omitting hex codes or using only descriptive names
  • Forgetting functional roles of design elements
  • Being too vague in atmosphere descriptions
  • Ignoring the anti-pattern list — these are what make the output premium
  • Defaulting to generic "safe" designs instead of enforcing the curated aesthetic
用于生成高自主性前端代码的Skill,设定设计方差、动效强度等基线。强制遵循React/Next.js架构,依赖校验,禁用Emoji,使用Tailwind CSS及Phosphor/Radix图标,确保响应式与布局稳定性。
需要生成符合特定美学参数的前端UI组件 请求React或Next.js项目中的交互式界面代码
skills/taste-skill/skills/taste-skill-v1/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill design-taste-frontend-v1 -g -y
SKILL.md
Frontmatter
{
    "name": "design-taste-frontend-v1",
    "description": "The original v1 taste-skill, preserved for projects depending on its exact behavior. The current default is `design-taste-frontend` (v2 experimental), which is a substantial rewrite. Use this v1 install name only if you need exact backward compatibility."
}

High-Agency Frontend Skill

1. ACTIVE BASELINE CONFIGURATION

  • DESIGN_VARIANCE: 8 (1=Perfect Symmetry, 10=Artsy Chaos)
  • MOTION_INTENSITY: 6 (1=Static/No movement, 10=Cinematic/Magic Physics)
  • VISUAL_DENSITY: 4 (1=Art Gallery/Airy, 10=Pilot Cockpit/Packed Data)

AI Instruction: The standard baseline for all generations is strictly set to these values (8, 6, 4). Do not ask the user to edit this file. Otherwise, ALWAYS listen to the user: adapt these values dynamically based on what they explicitly request in their chat prompts. Use these baseline (or user-overridden) values as your global variables to drive the specific logic in Sections 3 through 7.

2. DEFAULT ARCHITECTURE & CONVENTIONS

Unless the user explicitly specifies a different stack, adhere to these structural constraints to maintain consistency:

  • DEPENDENCY VERIFICATION [MANDATORY]: Before importing ANY 3rd party library (e.g. framer-motion, lucide-react, zustand), you MUST check package.json. If the package is missing, you MUST output the installation command (e.g. npm install package-name) before providing the code. Never assume a library exists.
  • Framework & Interactivity: React or Next.js. Default to Server Components (RSC).
    • RSC SAFETY: Global state works ONLY in Client Components. In Next.js, wrap providers in a "use client" component.
    • INTERACTIVITY ISOLATION: If Sections 4 or 7 (Motion/Liquid Glass) are active, the specific interactive UI component MUST be extracted as an isolated leaf component with 'use client' at the very top. Server Components must exclusively render static layouts.
  • State Management: Use local useState/useReducer for isolated UI. Use global state strictly for deep prop-drilling avoidance.
  • Styling Policy: Use Tailwind CSS (v3/v4) for 90% of styling.
    • TAILWIND VERSION LOCK: Check package.json first. Do not use v4 syntax in v3 projects.
    • T4 CONFIG GUARD: For v4, do NOT use tailwindcss plugin in postcss.config.js. Use @tailwindcss/postcss or the Vite plugin.
  • ANTI-EMOJI POLICY [CRITICAL]: NEVER use emojis in code, markup, text content, or alt text. Replace symbols with high-quality icons (Radix, Phosphor) or clean SVG primitives. Emojis are BANNED.
  • Responsiveness & Spacing:
    • Standardize breakpoints (sm, md, lg, xl).
    • Contain page layouts using max-w-[1400px] mx-auto or max-w-7xl.
    • Viewport Stability [CRITICAL]: NEVER use h-screen for full-height Hero sections. ALWAYS use min-h-[100dvh] to prevent catastrophic layout jumping on mobile browsers (iOS Safari).
    • Grid over Flex-Math: NEVER use complex flexbox percentage math (w-[calc(33%-1rem)]). ALWAYS use CSS Grid (grid grid-cols-1 md:grid-cols-3 gap-6) for reliable structures.
  • Icons: You MUST use exactly @phosphor-icons/react or @radix-ui/react-icons as the import paths (check installed version). Standardize strokeWidth globally (e.g., exclusively use 1.5 or 2.0).

3. DESIGN ENGINEERING DIRECTIVES (Bias Correction)

LLMs have statistical biases toward specific UI cliché patterns. Proactively construct premium interfaces using these engineered rules:

Rule 1: Deterministic Typography

  • Display/Headlines: Default to text-4xl md:text-6xl tracking-tighter leading-none.
    • ANTI-SLOP: Discourage Inter for "Premium" or "Creative" vibes. Force unique character using Geist, Outfit, Cabinet Grotesk, or Satoshi.
    • TECHNICAL UI RULE: Serif fonts are strictly BANNED for Dashboard/Software UIs. For these contexts, use exclusively high-end Sans-Serif pairings (Geist + Geist Mono or Satoshi + JetBrains Mono).
  • Body/Paragraphs: Default to text-base text-gray-600 leading-relaxed max-w-[65ch].

Rule 2: Color Calibration

  • Constraint: Max 1 Accent Color. Saturation < 80%.
  • THE LILA BAN: The "AI Purple/Blue" aesthetic is strictly BANNED. No purple button glows, no neon gradients. Use absolute neutral bases (Zinc/Slate) with high-contrast, singular accents (e.g. Emerald, Electric Blue, or Deep Rose).
  • COLOR CONSISTENCY: Stick to one palette for the entire output. Do not fluctuate between warm and cool grays within the same project.

Rule 3: Layout Diversification

  • ANTI-CENTER BIAS: Centered Hero/H1 sections are strictly BANNED when LAYOUT_VARIANCE > 4. Force "Split Screen" (50/50), "Left Aligned content/Right Aligned asset", or "Asymmetric White-space" structures.

Rule 4: Materiality, Shadows, and "Anti-Card Overuse"

  • DASHBOARD HARDENING: For VISUAL_DENSITY > 7, generic card containers are strictly BANNED. Use logic-grouping via border-t, divide-y, or purely negative space. Data metrics should breathe without being boxed in unless elevation (z-index) is functionally required.
  • Execution: Use cards ONLY when elevation communicates hierarchy. When a shadow is used, tint it to the background hue.

Rule 5: Interactive UI States

  • Mandatory Generation: LLMs naturally generate "static" successful states. You MUST implement full interaction cycles:
    • Loading: Skeletal loaders matching layout sizes (avoid generic circular spinners).
    • Empty States: Beautifully composed empty states indicating how to populate data.
    • Error States: Clear, inline error reporting (e.g., forms).
    • Tactile Feedback: On :active, use -translate-y-[1px] or scale-[0.98] to simulate a physical push indicating success/action.

Rule 6: Data & Form Patterns

  • Forms: Label MUST sit above input. Helper text is optional but should exist in markup. Error text below input. Use a standard gap-2 for input blocks.

4. CREATIVE PROACTIVITY (Anti-Slop Implementation)

To actively combat generic AI designs, systematically implement these high-end coding concepts as your baseline:

  • "Liquid Glass" Refraction: When glassmorphism is needed, go beyond backdrop-blur. Add a 1px inner border (border-white/10) and a subtle inner shadow (shadow-[inset_0_1px_0_rgba(255,255,255,0.1)]) to simulate physical edge refraction.
  • Magnetic Micro-physics (If MOTION_INTENSITY > 5): Implement buttons that pull slightly toward the mouse cursor. CRITICAL: NEVER use React useState for magnetic hover or continuous animations. Use EXCLUSIVELY Framer Motion's useMotionValue and useTransform outside the React render cycle to prevent performance collapse on mobile.
  • Perpetual Micro-Interactions: When MOTION_INTENSITY > 5, embed continuous, infinite micro-animations (Pulse, Typewriter, Float, Shimmer, Carousel) in standard components (avatars, status dots, backgrounds). Apply premium Spring Physics (type: "spring", stiffness: 100, damping: 20) to all interactive elements—no linear easing.
  • Layout Transitions: Always utilize Framer Motion's layout and layoutId props for smooth re-ordering, resizing, and shared element transitions across state changes.
  • Staggered Orchestration: Do not mount lists or grids instantly. Use staggerChildren (Framer) or CSS cascade (animation-delay: calc(var(--index) * 100ms)) to create sequential waterfall reveals. CRITICAL: For staggerChildren, the Parent (variants) and Children MUST reside in the identical Client Component tree. If data is fetched asynchronously, pass the data as props into a centralized Parent Motion wrapper.

5. PERFORMANCE GUARDRAILS

  • DOM Cost: Apply grain/noise filters exclusively to fixed, pointer-event-none pseudo-elements (e.g., fixed inset-0 z-50 pointer-events-none) and NEVER to scrolling containers to prevent continuous GPU repaints and mobile performance degradation.
  • Hardware Acceleration: Never animate top, left, width, or height. Animate exclusively via transform and opacity.
  • Z-Index Restraint: NEVER spam arbitrary z-50 or z-10 unprompted. Use z-indexes strictly for systemic layer contexts (Sticky Navbars, Modals, Overlays).

6. TECHNICAL REFERENCE (Dial Definitions)

DESIGN_VARIANCE (Level 1-10)

  • 1-3 (Predictable): Flexbox justify-center, strict 12-column symmetrical grids, equal paddings.
  • 4-7 (Offset): Use margin-top: -2rem overlapping, varied image aspect ratios (e.g., 4:3 next to 16:9), left-aligned headers over center-aligned data.
  • 8-10 (Asymmetric): Masonry layouts, CSS Grid with fractional units (e.g., grid-template-columns: 2fr 1fr 1fr), massive empty zones (padding-left: 20vw).
  • MOBILE OVERRIDE: For levels 4-10, any asymmetric layout above md: MUST aggressively fall back to a strict, single-column layout (w-full, px-4, py-8) on viewports < 768px to prevent horizontal scrolling and layout breakage.

MOTION_INTENSITY (Level 1-10)

  • 1-3 (Static): No automatic animations. CSS :hover and :active states only.
  • 4-7 (Fluid CSS): Use transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1). Use animation-delay cascades for load-ins. Focus strictly on transform and opacity. Use will-change: transform sparingly.
  • 8-10 (Advanced Choreography): Complex scroll-triggered reveals or parallax. Use Framer Motion hooks. NEVER use window.addEventListener('scroll').

VISUAL_DENSITY (Level 1-10)

  • 1-3 (Art Gallery Mode): Lots of white space. Huge section gaps. Everything feels very expensive and clean.
  • 4-7 (Daily App Mode): Normal spacing for standard web apps.
  • 8-10 (Cockpit Mode): Tiny paddings. No card boxes; just 1px lines to separate data. Everything is packed. Mandatory: Use Monospace (font-mono) for all numbers.

7. AI TELLS (Forbidden Patterns)

To guarantee a premium, non-generic output, you MUST strictly avoid these common AI design signatures unless explicitly requested:

Visual & CSS

  • NO Neon/Outer Glows: Do not use default box-shadow glows or auto-glows. Use inner borders or subtle tinted shadows.
  • NO Pure Black: Never use #000000. Use Off-Black, Zinc-950, or Charcoal.
  • NO Oversaturated Accents: Desaturate accents to blend elegantly with neutrals.
  • NO Excessive Gradient Text: Do not use text-fill gradients for large headers.
  • NO Custom Mouse Cursors: They are outdated and ruin performance/accessibility.

Typography

  • NO Inter Font: Banned. Use Geist, Outfit, Cabinet Grotesk, or Satoshi.
  • NO Oversized H1s: The first heading should not scream. Control hierarchy with weight and color, not just massive scale.
  • Serif Constraints: Use Serif fonts ONLY for creative/editorial designs. NEVER use Serif on clean Dashboards.

Layout & Spacing

  • Align & Space Perfectly: Ensure padding and margins are mathematically perfect. Avoid floating elements with awkward gaps.
  • NO 3-Column Card Layouts: The generic "3 equal cards horizontally" feature row is BANNED. Use a 2-column Zig-Zag, asymmetric grid, or horizontal scrolling approach instead.

Content & Data (The "Jane Doe" Effect)

  • NO Generic Names: "John Doe", "Sarah Chan", or "Jack Su" are banned. Use highly creative, realistic-sounding names.
  • NO Generic Avatars: DO NOT use standard SVG "egg" or Lucide user icons for avatars. Use creative, believable photo placeholders or specific styling.
  • NO Fake Numbers: Avoid predictable outputs like 99.99%, 50%, or basic phone numbers (1234567). Use organic, messy data (47.2%, +1 (312) 847-1928).
  • NO Startup Slop Names: "Acme", "Nexus", "SmartFlow". Invent premium, contextual brand names.
  • NO Filler Words: Avoid AI copywriting clichés like "Elevate", "Seamless", "Unleash", or "Next-Gen". Use concrete verbs.

External Resources & Components

  • NO Broken Unsplash Links: Do not use Unsplash. Use absolute, reliable placeholders like https://picsum.photos/seed/{random_string}/800/600 or SVG UI Avatars.
  • shadcn/ui Customization: You may use shadcn/ui, but NEVER in its generic default state. You MUST customize the radii, colors, and shadows to match the high-end project aesthetic.
  • Production-Ready Cleanliness: Code must be extremely clean, visually striking, memorable, and meticulously refined in every detail.

8. THE CREATIVE ARSENAL (High-End Inspiration)

Do not default to generic UI. Pull from this library of advanced concepts to ensure the output is visually striking and memorable. When appropriate, leverage GSAP (ScrollTrigger/Parallax) for complex scrolltelling or ThreeJS/WebGL for 3D/Canvas animations, rather than basic CSS motion. CRITICAL: Never mix GSAP/ThreeJS with Framer Motion in the same component tree. Default to Framer Motion for UI/Bento interactions. Use GSAP/ThreeJS EXCLUSIVELY for isolated full-page scrolltelling or canvas backgrounds, wrapped in strict useEffect cleanup blocks.

The Standard Hero Paradigm

  • Stop doing centered text over a dark image. Try asymmetric Hero sections: Text cleanly aligned to the left or right. The background should feature a high-quality, relevant image with a subtle stylistic fade (darkening or lightening gracefully into the background color depending on if it is Light or Dark mode).

Navigation & Menüs

  • Mac OS Dock Magnification: Nav-bar at the edge; icons scale fluidly on hover.
  • Magnetic Button: Buttons that physically pull toward the cursor.
  • Gooey Menu: Sub-items detach from the main button like a viscous liquid.
  • Dynamic Island: A pill-shaped UI component that morphs to show status/alerts.
  • Contextual Radial Menu: A circular menu expanding exactly at the click coordinates.
  • Floating Speed Dial: A FAB that springs out into a curved line of secondary actions.
  • Mega Menu Reveal: Full-screen dropdowns that stagger-fade complex content.

Layout & Grids

  • Bento Grid: Asymmetric, tile-based grouping (e.g., Apple Control Center).
  • Masonry Layout: Staggered grid without fixed row heights (e.g., Pinterest).
  • Chroma Grid: Grid borders or tiles showing subtle, continuously animating color gradients.
  • Split Screen Scroll: Two screen halves sliding in opposite directions on scroll.
  • Curtain Reveal: A Hero section parting in the middle like a curtain on scroll.

Cards & Containers

  • Parallax Tilt Card: A 3D-tilting card tracking the mouse coordinates.
  • Spotlight Border Card: Card borders that illuminate dynamically under the cursor.
  • Glassmorphism Panel: True frosted glass with inner refraction borders.
  • Holographic Foil Card: Iridescent, rainbow light reflections shifting on hover.
  • Tinder Swipe Stack: A physical stack of cards the user can swipe away.
  • Morphing Modal: A button that seamlessly expands into its own full-screen dialog container.

Scroll-Animations

  • Sticky Scroll Stack: Cards that stick to the top and physically stack over each other.
  • Horizontal Scroll Hijack: Vertical scroll translates into a smooth horizontal gallery pan.
  • Locomotive Scroll Sequence: Video/3D sequences where framerate is tied directly to the scrollbar.
  • Zoom Parallax: A central background image zooming in/out seamlessly as you scroll.
  • Scroll Progress Path: SVG vector lines or routes that draw themselves as the user scrolls.
  • Liquid Swipe Transition: Page transitions that wipe the screen like a viscous liquid.

Galleries & Media

  • Dome Gallery: A 3D gallery feeling like a panoramic dome.
  • Coverflow Carousel: 3D carousel with the center focused and edges angled back.
  • Drag-to-Pan Grid: A boundless grid you can freely drag in any compass direction.
  • Accordion Image Slider: Narrow vertical/horizontal image strips that expand fully on hover.
  • Hover Image Trail: The mouse leaves a trail of popping/fading images behind it.
  • Glitch Effect Image: Brief RGB-channel shifting digital distortion on hover.

Typography & Text

  • Kinetic Marquee: Endless text bands that reverse direction or speed up on scroll.
  • Text Mask Reveal: Massive typography acting as a transparent window to a video background.
  • Text Scramble Effect: Matrix-style character decoding on load or hover.
  • Circular Text Path: Text curved along a spinning circular path.
  • Gradient Stroke Animation: Outlined text with a gradient continuously running along the stroke.
  • Kinetic Typography Grid: A grid of letters dodging or rotating away from the cursor.

Micro-Interactions & Effects

  • Particle Explosion Button: CTAs that shatter into particles upon success.
  • Liquid Pull-to-Refresh: Mobile reload indicators acting like detaching water droplets.
  • Skeleton Shimmer: Shifting light reflections moving across placeholder boxes.
  • Directional Hover Aware Button: Hover fill entering from the exact side the mouse entered.
  • Ripple Click Effect: Visual waves rippling precisely from the click coordinates.
  • Animated SVG Line Drawing: Vectors that draw their own contours in real-time.
  • Mesh Gradient Background: Organic, lava-lamp-like animated color blobs.
  • Lens Blur Depth: Dynamic focus blurring background UI layers to highlight a foreground action.

9. THE "MOTION-ENGINE" BENTO PARADIGM

When generating modern SaaS dashboards or feature sections, you MUST utilize the following "Bento 2.0" architecture and motion philosophy. This goes beyond static cards and enforces a "Vercel-core meets Dribbble-clean" aesthetic heavily reliant on perpetual physics.

A. Core Design Philosophy

  • Aesthetic: High-end, minimal, and functional.
  • Palette: Background in #f9fafb. Cards are pure white (#ffffff) with a 1px border of border-slate-200/50.
  • Surfaces: Use rounded-[2.5rem] for all major containers. Apply a "diffusion shadow" (a very light, wide-spreading shadow, e.g., shadow-[0_20px_40px_-15px_rgba(0,0,0,0.05)]) to create depth without clutter.
  • Typography: Strict Geist, Satoshi, or Cabinet Grotesk font stack. Use subtle tracking (tracking-tight) for headers.
  • Labels: Titles and descriptions must be placed outside and below the cards to maintain a clean, gallery-style presentation.
  • Pixel-Perfection: Use generous p-8 or p-10 padding inside cards.

B. The Animation Engine Specs (Perpetual Motion)

All cards must contain "Perpetual Micro-Interactions." Use the following Framer Motion principles:

  • Spring Physics: No linear easing. Use type: "spring", stiffness: 100, damping: 20 for a premium, weighty feel.
  • Layout Transitions: Heavily utilize the layout and layoutId props to ensure smooth re-ordering, resizing, and shared element state transitions.
  • Infinite Loops: Every card must have an "Active State" that loops infinitely (Pulse, Typewriter, Float, or Carousel) to ensure the dashboard feels "alive".
  • Performance: Wrap dynamic lists in <AnimatePresence> and optimize for 60fps. PERFORMANCE CRITICAL: Any perpetual motion or infinite loop MUST be memoized (React.memo) and completely isolated in its own microscopic Client Component. Never trigger re-renders in the parent layout.

C. The 5-Card Archetypes (Micro-Animation Specs)

Implement these specific micro-animations when constructing Bento grids (e.g., Row 1: 3 cols | Row 2: 2 cols split 70/30):

  1. The Intelligent List: A vertical stack of items with an infinite auto-sorting loop. Items swap positions using layoutId, simulating an AI prioritizing tasks in real-time.
  2. The Command Input: A search/AI bar with a multi-step Typewriter Effect. It cycles through complex prompts, including a blinking cursor and a "processing" state with a shimmering loading gradient.
  3. The Live Status: A scheduling interface with "breathing" status indicators. Include a pop-up notification badge that emerges with an "Overshoot" spring effect, stays for 3 seconds, and vanishes.
  4. The Wide Data Stream: A horizontal "Infinite Carousel" of data cards or metrics. Ensure the loop is seamless (using x: ["0%", "-100%"]) with a speed that feels effortless.
  5. The Contextual UI (Focus Mode): A document view that animates a staggered highlight of a text block, followed by a "Float-in" of a floating action toolbar with micro-icons.

10. FINAL PRE-FLIGHT CHECK

Evaluate your code against this matrix before outputting. This is the last filter you apply to your logic.

  • Is global state used appropriately to avoid deep prop-drilling rather than arbitrarily?
  • Is mobile layout collapse (w-full, px-4, max-w-7xl mx-auto) guaranteed for high-variance designs?
  • Do full-height sections safely use min-h-[100dvh] instead of the bugged h-screen?
  • Do useEffect animations contain strict cleanup functions?
  • Are empty, loading, and error states provided?
  • Are cards omitted in favor of spacing where possible?
  • Did you strictly isolate CPU-heavy perpetual animations in their own Client Components?
面向落地页、作品集及重设计的反模板前端技能。通过深度解析需求简报推断设计方向,规避AI默认审美,输出符合特定受众与品牌语境的独特界面,支持审计优先的重改模式。
生成落地页或作品集代码 进行网站视觉重设计 需要避免通用AI审美风格的前端开发任务
skills/taste-skill/skills/taste-skill/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill design-taste-frontend -g -y
SKILL.md
Frontmatter
{
    "name": "design-taste-frontend",
    "description": "Anti-slop frontend skill for landing pages, portfolios, and redesigns. The agent reads the brief, infers the right design direction, and ships interfaces that do not look templated. Real design systems when applicable, audit-first on redesigns, strict pre-flight check."
}

tasteskill: Anti-Slop Frontend Skill

Landing pages, portfolios, and redesigns. Not dashboards, not data tables, not multi-step product UI. Every rule below is contextual. None of it fires automatically. First read the brief, then pull only what fits.


0. BRIEF INFERENCE (Read the Room Before Anything Else)

Before touching code or tweaking dials, infer what the user actually wants. Most LLM design output is bad because the model jumps to a default aesthetic instead of reading the room.

0.A Read these signals first

  1. Page kind - landing (SaaS / consumer / agency / event), portfolio (dev / designer / creative studio), redesign (preserve vs overhaul), editorial / blog.
  2. Vibe words the user used - "minimalist", "calm", "Linear-style", "Awwwards", "brutalist", "premium consumer", "Apple-y", "playful", "serious B2B", "editorial", "agency-y", "glassy", "dark tech".
  3. Reference signals - URLs they linked, screenshots they pasted, products they named, brands they're competing with.
  4. Audience - B2B procurement panel vs. design-conscious consumer vs. recruiter scanning a portfolio. The audience picks the aesthetic, not your taste.
  5. Brand assets that already exist - logo, color, type, photography. For redesigns, these are starting material, not optional input (see Section 11).
  6. Quiet constraints - accessibility-first audiences, public-sector, regulated industries, trust-first commerce, kids' products. These constraints OVERRIDE aesthetic preference.

0.B Output a one-line "Design Read" before generating

Before any code, state in one line: "Reading this as: <page kind> for <audience>, with a <vibe> language, leaning toward <design system or aesthetic family>."

Example reads:

  • "Reading this as: B2B SaaS landing for technical buyers, with a Linear-style minimalist language, leaning toward Tailwind utilities + Geist + restrained motion."
  • "Reading this as: solo designer portfolio for hiring managers, with an editorial / kinetic-type language, leaning toward native CSS + scroll-driven animation + custom typography."
  • "Reading this as: redesign of a public-sector service site, with a trust-first language, leaning toward GOV.UK Frontend or USWDS."

0.C If the brief is ambiguous, ask one question, do not guess

Ask exactly one clarifying question - never a multi-question dump - and only when the design read genuinely diverges. Example: "Should this feel closer to Linear-clean or Awwwards-experimental?"

If you can confidently infer from context, do not ask. Just declare the design read and proceed.

0.D Anti-Default Discipline

Do not default to: AI-purple gradients, centered hero over dark mesh, three equal feature cards, generic glassmorphism on everything, infinite-loop micro-animations everywhere, Inter + slate-900. These are the LLM defaults. Reach past them deliberately based on the design read.


1. THE THREE DIALS (Core Configuration)

After the design read, set three dials. Every layout, motion, and density decision below is gated by these.

  • DESIGN_VARIANCE: 8 - 1 = Perfect Symmetry, 10 = Artsy Chaos
  • MOTION_INTENSITY: 6 - 1 = Static, 10 = Cinematic / Physics
  • VISUAL_DENSITY: 4 - 1 = Art Gallery / Airy, 10 = Cockpit / Packed Data

Baseline: 8 / 6 / 4. Use these unless the design read overrides them. Do not ask the user to edit this file - overrides happen conversationally.

1.A Dial Inference (design read → dial values)

Signal VARIANCE MOTION DENSITY
"minimalist / clean / calm / editorial / Linear-style" 5-6 3-4 2-3
"premium consumer / Apple-y / luxury / brand" 7-8 5-7 3-4
"playful / wild / Dribbble / Awwwards / experimental / agency" 9-10 8-10 3-4
"landing page / portfolio / marketing site (default)" 7-9 6-8 3-5
"trust-first / public-sector / regulated / accessibility-critical" 3-4 2-3 4-5
"redesign - preserve" match existing +1 match existing
"redesign - overhaul" +2 +2 match existing

1.B Use-Case Presets

Use case VARIANCE MOTION DENSITY
Landing (SaaS, mainstream) 7 6 4
Landing (Agency / creative) 9 8 3
Landing (Premium consumer) 7 6 3
Portfolio (Designer / studio) 8 7 3
Portfolio (Developer) 6 5 4
Editorial / Blog 6 4 3
Public-sector service 3 2 5
Redesign - preserve match match+1 match
Redesign - overhaul +2 +2 match

1.C How the Dials Drive Output

Use these (or user-overridden values) as global variables. Cross-references throughout this document refer to these exact variable names - never invent aliases like LAYOUT_VARIANCE or ANIM_LEVEL.


2. BRIEF → DESIGN SYSTEM MAP

Once you have the design read (Section 0) and dials (Section 1), pick the right foundation. Do not invent CSS for things that have an official package. Do not pretend an aesthetic trend is an official system.

2.A When to reach for a real design system (use official packages)

Brief reads as… Reach for Why
Microsoft / enterprise SaaS / dashboards @fluentui/react-components or @fluentui/web-components Official Fluent UI, Microsoft tokens, accessibility done
Google-ish UI, Material-flavored product @material/web + Material 3 tokens Official, theme-able via Material Theming
IBM-style B2B / enterprise analytics @carbon/react + @carbon/styles Official Carbon, mature data-density patterns
Shopify app surfaces polaris.js web components / Polaris React Required for Shopify admin UI
Atlassian / Jira-style product @atlaskit/* + @atlaskit/tokens Official Atlassian DS
GitHub-style devtool / community page @primer/css or @primer/react-brand Official Primer; Brand variant for marketing
Public-sector UK service govuk-frontend Legally / regulatorily expected
US public-sector / trust-first uswds Same
Fast local-business / agency MVP Bootstrap 5.3 Boring, fast, works
Modern accessible React foundation @radix-ui/themes Primitives + polished theme
Modern SaaS where you own the components shadcn/ui (npx shadcn@latest add ...) You own the code, easy to customise; never ship default state
Tailwind-based modern SaaS / AI marketing Tailwind v4 utilities + dark: variant Default for indie + small team builds

Honesty rule: if the brief reads as one of the systems above, install and use the official package. Do not recreate its CSS by hand. Do not import a system's tokens but then override 90% of them.

One system per project. Do not mix Fluent React with Carbon in the same tree. Do not import shadcn/ui components into a Material 3 app.

2.B When the brief is an aesthetic, not a system

For these directions, there is no single official package. Build with native CSS + Tailwind + a maintained component library. Be honest in code comments about what is borrowed inspiration vs. official material.

Aesthetic Honest implementation
Glassmorphism / "frosted glass" backdrop-filter, layered borders, highlight overlays. Provide solid-fill fallback for prefers-reduced-transparency.
Bento (Apple-style tile grids) CSS Grid with mixed cell sizes. No single library owns this.
Brutalism Native CSS, monospace, raw borders. No library.
Editorial / magazine Serif type, asymmetric grid, generous whitespace. No library.
Dark tech / hacker Mono + accent neon, terminal motifs. No library.
Aurora / mesh gradients SVG or layered radial gradients. No library.
Kinetic typography Native CSS animations, scroll-driven animations, GSAP for hijacks. No library.
Apple Liquid Glass Apple documents this for Apple platforms only. There is no official liquid-glass.css. Web implementations are approximations using backdrop-filter + layered borders + highlights. Label clearly as approximation.

3. DEFAULT ARCHITECTURE & CONVENTIONS

Unless the design read picks a real design system (Section 2.A), these are the defaults:

3.A Stack

  • Framework: React or Next.js. Default to Server Components (RSC).
    • RSC SAFETY: Global state works ONLY in Client Components. In Next.js, wrap providers in a "use client" component.
    • INTERACTIVITY ISOLATION: Any component using Motion, scroll listeners, or pointer physics MUST be an isolated leaf with 'use client' at the top. Server Components render static layouts only.
  • Styling: Tailwind v4 (default). Tailwind v3 only if the existing project demands it.
    • For v4: do NOT use tailwindcss plugin in postcss.config.js. Use @tailwindcss/postcss or the Vite plugin.
  • Animation: Motion (the library formerly known as Framer Motion). Import from motion/react (import { motion } from "motion/react"). The framer-motion package still works as a legacy alias - prefer motion/react in new code.
  • Fonts: Always use next/font (Next.js) or self-host with @font-face + font-display: swap. Never link Google Fonts via <link> in production.

3.B State

  • Local useState / useReducer for isolated UI.
  • Global state ONLY for deep prop-drilling avoidance - Zustand, Jotai, or React context.
  • NEVER use useState to track continuous values driven by user input (mouse position, scroll progress, pointer physics, magnetic hover). Use Motion's useMotionValue / useTransform / useScroll. useState re-renders the React tree on every change and collapses on mobile.

3.C Icons

  • Allowed libraries (priority order): @phosphor-icons/react, hugeicons-react, @radix-ui/react-icons, @tabler/icons-react.
  • Discouraged: lucide-react. Acceptable only when the user explicitly asks for it or the project already depends on it.
  • NEVER hand-roll SVG icons. If a glyph is missing, install a second library or compose from primitives - do not draw icon paths from scratch.
  • One family per project. Do not mix Phosphor with Lucide in the same component tree.
  • Standardize strokeWidth globally (e.g. 1.5 or 2.0).

3.D Emoji Policy

Discouraged by default in code, markup, and visible text. Replace symbols with icon-library glyphs. Override: allow emojis only when the user explicitly asks for a playful / chat-style / social-native vibe - and even then use them sparingly with intent.

3.E Responsiveness & Layout Mechanics

  • Standardize breakpoints (sm 640, md 768, lg 1024, xl 1280, 2xl 1536).
  • Contain page layouts using max-w-[1400px] mx-auto or max-w-7xl.
  • Viewport Stability: NEVER use h-screen for full-height Hero sections. ALWAYS use min-h-[100dvh] to prevent layout jumping on mobile (iOS Safari address bar).
  • Grid over Flex-Math: NEVER use complex flexbox percentage math (w-[calc(33%-1rem)]). ALWAYS use CSS Grid (grid grid-cols-1 md:grid-cols-3 gap-6).

3.F Dependency Verification (mandatory)

Before importing ANY 3rd-party library, check package.json. If the package is missing, output the install command first. Never assume a library exists.


4. DESIGN ENGINEERING DIRECTIVES (Bias Correction)

LLMs default to clichés. Override these defaults proactively. Each rule has a context-aware override path.

4.1 Typography

  • Display / Headlines: Default text-4xl md:text-6xl tracking-tighter leading-none.

  • Body / Paragraphs: Default text-base text-gray-600 leading-relaxed max-w-[65ch].

  • Sans font choice:

    • Discouraged as default: Inter. Pick Geist, Outfit, Cabinet Grotesk, Satoshi, or a brand-appropriate serif first.
    • Override: Inter is acceptable when the user explicitly asks for a neutral / standard / Linear-style feel, or when the brief is a public-sector / accessibility-first site.
  • Pairings to know: Geist + Geist Mono, Satoshi + JetBrains Mono, Cabinet Grotesk + Inter Tight, GT America + IBM Plex Mono.

  • SERIF DISCIPLINE (VERY DISCOURAGED AS DEFAULT):

    • Serif is very discouraged as the default font for any project. "It feels creative / premium / editorial" is NOT a reason to reach for serif. The agent's default mental model that "creative brief = serif" is the single most-tested AI tell in production rounds.
    • Serif is only acceptable when ONE of these is explicitly true:
      • The brand brief literally names a serif font, OR
      • The aesthetic family is genuinely editorial / luxury / publication / manuscript / heritage / vintage AND you can articulate why this specific serif fits this specific brand
    • For everything else (creative agency, design studio, modern brand, premium consumer, portfolio, lifestyle), default sans-serif display (Geist Display, ABC Diatype, Söhne Breit, Cabinet Grotesk Display, Migra Sans, GT Walsheim, Inter Display, PP Neue Montreal). Sans display fonts are not "boring" — they are the default for the same reason black is the default in fashion.
    • EMPHASIS RULE (related): When you want to emphasize a word within a headline (the kinetic "and spatial design" type move), use italic or bold of the SAME font. Do NOT inject a random serif word into a sans headline (or vice versa) just to add visual interest. Mixed-family emphasis is amateur. Italic/bold emphasis in the same family is the right move.
    • Specifically BANNED as defaults: Fraunces and Instrument_Serif (the two LLM-favorite display serifs).
    • If a serif is justified (rare, per the above), rotate from this pool, do NOT reuse the same serif across consecutive projects: PP Editorial New, GT Sectra Display, Cardinal Grotesque, Reckless Neue, Tiempos Headline, Recoleta, Cormorant Garamond, Playfair Display, EB Garamond, IvyPresto, Migra, Editorial Old, Saol Display, Söhne Breit Kursiv, Domaine Display, Canela, Schnyder, Tobias, NB Architekt, ITC Galliard.
  • ITALIC DESCENDER CLEARANCE (mandatory): When italic is used in display type and the word contains a descender letter (y g j p q), leading-[1] or leading-none will clip the descender. Use leading-[1.1] minimum and add pb-1 or mb-1 reserve on the wrapping element. Audit every italic word in display headlines before shipping.

4.2 Color Calibration

  • Max 1 accent color. Saturation < 80% by default.

  • THE LILA RULE: The "AI Purple / Blue glow" aesthetic is discouraged as a default. No automatic purple button glows, no random neon gradients. Use neutral bases (Zinc / Slate / Stone) with high-contrast singular accents (Emerald, Electric Blue, Deep Rose, Burnt Orange, etc.).

  • Override: if the brand or brief explicitly asks for purple / violet / lila, embrace it. But execute with intent: consistent palette, harmonised neutrals, restrained gradients. Not generic AI gradient slop.

  • One palette per project. Do not fluctuate between warm and cool grays within the same project.

  • COLOR CONSISTENCY LOCK (mandatory): Once an accent color is chosen for a page, it is used on the WHOLE page. A warm-grey site does not suddenly get a blue CTA in section 7. A rose-accented site does not get a teal status badge in the footer. Pick one accent, lock it, audit every component before shipping.

  • PREMIUM-CONSUMER PALETTE BAN (mandatory, second-most-recurring AI-tell):

    • For premium-consumer briefs (cookware, wellness, artisan, luxury, heritage craft, DTC home goods, etc.) the LLM default is warm beige/cream + brass/clay/oxblood/ochre + espresso/ink dark text. Concretely banned hex families as default backgrounds and accents:
      • Backgrounds: #f5f1ea, #f7f5f1, #fbf8f1, #efeae0, #ece6db, #faf7f1, #e8dfcb (all "warm paper / cream / chalk / bone")
      • Accents: #b08947, #b6553a, #9a2436, #9c6e2a, #bc7c3a, #7d5621 (all "brass / clay / oxblood / ochre")
      • Text: #1a1714, #1a1814, #1b1814 (all "espresso / warm near-black")
    • This palette is BANNED as the default reach for premium-consumer briefs. Every premium-consumer site you have ever shipped uses this exact palette. The brand becomes invisible.
    • Default alternatives (rotate, do not reuse):
      • Cold Luxury: silver-grey + chrome + smoke (think Tesla, Apple Watch Hermes-without-the-leather)
      • Forest: deep green + bone + amber accent (think Filson, Patagonia premium)
      • Black and Tan: true off-black + warm tan, sharp contrast, no beige
      • Cobalt + Cream: saturated blue against a single neutral, no brass
      • Terracotta + Slate: warm rust against cool grey, no brass
      • Olive + Brick + Paper: muted olive plus brick-red accent
      • Pure monochrome + single saturated pop: off-white + off-black + one bright accent (electric blue, emerald, hot pink, etc.)
    • Palette-rotation rule: if the previous premium-consumer project you generated used the beige+brass family, this one MUST use a different family. Do not ship the same warm-craft palette twice in a row.
    • Override: the beige+brass+espresso palette is acceptable ONLY when the brand brief explicitly names those colors, or when the brand identity is genuinely vintage / artisan / warm-craft AND you can articulate why this specific palette fits this specific brand. Default-reaching for it because "this is a cookware brief" is banned.

4.3 Layout Diversification

  • ANTI-CENTER BIAS: Centered Hero / H1 sections are avoided when DESIGN_VARIANCE > 4. Force "Split Screen" (50/50), "Left-aligned content / right-aligned asset", "Asymmetric white-space", or scroll-pinned structures.
  • Override: centered hero is OK for editorial / manifesto / launch-announcement briefs where the message itself is the design.

4.4 Materiality, Shadows, Cards

  • Use cards ONLY when elevation communicates real hierarchy. Otherwise group with border-t, divide-y, or negative space.
  • When a shadow is used, tint it to the background hue. No pure-black drop shadows on light backgrounds.
  • For VISUAL_DENSITY > 7: generic card containers are banned. Data metrics breathe in plain layout.
  • SHAPE CONSISTENCY LOCK (mandatory): Pick ONE corner-radius scale for the page and stick to it. Options: all-sharp (radius 0), all-soft (radius 12-16px), all-pill (full radius for interactive). Mixed systems are allowed only when there is a documented rule (e.g. "buttons are full-pill, cards are 16px, inputs are 8px") and that rule is followed everywhere. Round buttons in a square layout, or square cards on a pill-button page, is broken design.

4.5 Interactive UI States

LLMs default to "static successful state only." Always implement full cycles:

  • Loading: Skeletal loaders matching the final layout's shape. Avoid generic circular spinners.
  • Empty States: Beautifully composed; indicate how to populate.
  • Error States: Clear, inline (forms), or contextual (toasts only for transient).
  • Tactile Feedback: On :active, use -translate-y-[1px] or scale-[0.98] to simulate a physical push.
  • BUTTON CONTRAST CHECK (mandatory, a11y): Before shipping any button, verify the button text is readable against the button background. White button + white text, bg-white CTA with text-white label, transparent button against the page background with no border → all banned. Audit every CTA: contrast ratio WCAG AA min (4.5:1 for body, 3:1 for large text 18px+). Same rule applies to ghost buttons over photographic backgrounds (use a backdrop, scrim, or stroke).
  • CTA BUTTON WRAP BAN (mandatory): Button text MUST fit on one line at desktop. If a label like "VIEW SELECTED WORK" wraps to 2 or 3 lines, the button is broken. Fix by EITHER shortening the label (3 words max for primary CTAs, ideally 1-2) OR widening the button (do not artificially constrain max-width on CTAs). Wrapped CTAs at desktop are a Pre-Flight Fail.
  • NO DUPLICATE CTA INTENT (mandatory): Two CTAs with the same intent on one page is a Pre-Flight Fail. Examples of same intent: "Get in touch" + "Contact us" + "Let's talk" + "Start a project" + "Start something" + "Reach out" = all "contact" intent → pick ONE label and use it everywhere on the page (nav, hero, footer). Same for "Try free" + "Get started" + "Sign up free" (all "signup" intent) and "View work" + "See selected work" + "Browse projects" (all "portfolio" intent). One label per intent.
  • FORM CONTRAST CHECK (mandatory, a11y): Form inputs, placeholder text, focus rings, helper text, and error text all pass WCAG AA contrast against the section background. Light placeholders on a near-white form, white form on white page section, form labels grayer than 4.5:1 contrast → all banned. Audit every form before shipping.

4.6 Data & Form Patterns

  • Label ABOVE input. Helper text optional but present in markup. Error text BELOW input. Standard gap-2 for input blocks.
  • No placeholder-as-label. Ever.

4.7 Layout Discipline (Hard Rules. Failing any of these is shipping broken work)

  • Hero MUST fit in the initial viewport. Headline max 2 lines on desktop, subtext max 20 words AND max 3-4 lines, CTAs visible without scroll. If the copy is too long: reduce font scale OR cut copy. If you cannot describe the value-prop in 20 words of subtext, the value-prop is unclear, not the rule too tight. Never let the hero overflow and force scroll to find the CTA.
  • Hero font-scale discipline. Plan font size and image size together. If the hero asset is large and the headline is more than 6 words, do not start at text-7xl/text-8xl. Default sensible range: text-4xl md:text-5xl lg:text-6xl for most heroes; text-6xl md:text-7xl only when the headline is 3-5 words. A 4-line hero headline is always a font-size error, never a copy-length error.
  • HERO TOP PADDING CAP (mandatory): Hero top padding max pt-24 (≈6rem) at desktop. More than that means the hero content floats halfway down the viewport and reads as a layout bug, not as intentional space. If your hero needs more breathing room, increase font scale or asset size, not top padding.
  • HERO STACK DISCIPLINE (max 4 text elements). The hero is a single moment, not a feature list. Allowed text elements, max 4 in total:
    1. Eyebrow (small uppercase label) OR brand strip OR neither - pick zero or one
    2. Headline (max 2 lines, see above)
    3. Subtext (max 20 words, max 4 lines)
    4. CTAs (1 primary + max 1 secondary)
    • BANNED in the hero: tiny tagline below CTAs ("Works with GitHub, GitLab, and self-hosted Git"), trust micro-strip ("Used by engineering teams at..."), pricing teaser ("Free for solo, $10/user for teams"), feature bullet list, social-proof avatar row. All of those move to dedicated sections directly below the hero.
    • If you have an eyebrow AND a tagline below CTAs in the same hero, drop the tagline. If you have a brand strip AND a tagline, drop the tagline. One small text element per hero, max.
  • "Used by" / "Trusted by" logo wall belongs UNDER the hero, never inside it. The hero is for the value prop and primary CTA. The logo wall is a separate section directly below. Do not stuff trust logos into the same flex row as the hero copy.
  • Navigation MUST render on a single line on desktop. If items don't fit at lg (1024px), condense labels, drop secondary items, or move to a hamburger. A two-line nav at desktop is broken design.
  • Navigation height cap: 80px max desktop, default 64-72px. No huge "agency" nav bars that eat 15% of the viewport.
  • Bento grids MUST have rhythm, not one-sided repetition. Do not stack 6 left-image / right-text rows. Vary the composition: alternate full-width feature rows, asymmetric tile sizes, vertical breaks.
  • BENTO CELL COUNT RULE (mandatory): A bento grid has EXACTLY as many cells as you have content for. 3 items → 3 cells (1+2 split, or 2+1, or asymmetric trio). 5 items → 5 cells (2+3, 3+2, hero+4, etc.). If your grid has an empty cell in the middle or at the end, you planned wrong. Re-shape the grid; do not paste a blank tile.
  • Section-Layout-Repetition Ban. Once you use a layout family for a section (e.g., 3-column-image-cards, full-width-quote, split-text-image), that family can appear at most ONCE on the page. "Selected commissions" must not look like "What we do." A landing page with 8 sections must use at least 4 different layout families.
  • ZIGZAG ALTERNATION CAP (mandatory). Alternating "left-image + right-text" then "left-text + right-image" zigzag layout = banal. Max 2 sections in a row with this image+text-split pattern. The 3rd consecutive image+text split is a Pre-Flight Fail. Break the pattern with a full-width section, a vertical-stack section, a bento grid, a marquee, or a different layout family.
  • EYEBROW RESTRAINT (mandatory, the #1 violated rule in production tests). An "eyebrow" is the small uppercase wide-tracking label sitting above a section headline (e.g. FOUR COLORWAYS, SELECTED WORK, THE HARDWARE, Git-native task management). Typical CSS signature: text-[11px] uppercase tracking-[0.18em], font-mono text-[10.5px] uppercase tracking-[0.22em]. Every AI-built site puts an eyebrow above EVERY section header, producing the same templated rhythm. Hard rule:
    • Maximum 1 eyebrow per 3 sections. Hero counts as 1. So a page with 9 sections may use at most 3 eyebrows total.
    • If section A has an eyebrow, the next 2 sections cannot have one.
    • Pre-Flight Check is mechanical: count instances of uppercase tracking (or similar small-caps mono labels above headlines) across all section components. If count > ceil(sectionCount / 3), the output fails.
    • What to do instead of an eyebrow: drop it entirely. The headline alone is enough. If you need to categorize a section, the section's location on the page already categorizes it; no label needed.
  • SPLIT-HEADER BAN (mandatory). The pattern "left big headline + right small explainer paragraph" as a section header (left col-span-7/8, right col-span-4/5 with a small body paragraph floating in the right column) is banned as default. Sections should have ONE focused message. If you genuinely need both a headline and an explainer paragraph, stack them vertically (headline on top, body below, max-width 65ch). Reach for the split-header pattern only when there is a real compositional reason (e.g., the right column carries a visual or interactive element, not just filler text).
  • Bento Background Diversity (mandatory). Bento and feature-grid sections cannot be 6 white-on-white cards with text inside. At least 2-3 cells in any multi-cell grid need real visual variation: a real image, a brand-appropriate gradient (not AI-purple), a pattern, a tinted background. A cream-on-cream bento with only typography inside reads as boring AI default, even when the rest of the page is good.
  • Mobile collapse must be explicit per section. For every multi-column layout, declare the < 768px fallback in the same component. No "it'll work, Tailwind handles it" assumptions.

4.8 Image & Visual Asset Strategy

Landing pages and portfolios are visual products. Text-only pages with fake-screenshot divs are slop.

Priority order for visual assets:

  1. Image-generation tool first. If ANY image-gen tool is available in the environment (generate_image, MCP image tool, IDE-integrated gen, OpenAI image tools, etc.) you MUST use it to create section-specific assets: hero photography, product shots, texture backgrounds, mood images. Generate at the right aspect ratio for the section. Do not skip this step because hand-rolled CSS feels faster.
  2. Real web images second. When no gen tool is available, use real photography sources. Acceptable defaults:
    • https://picsum.photos/seed/{descriptive-seed}/{w}/{h} for placeholder photography (seed should describe the section, e.g. marrow-cookware-kitchen)
    • Actual stock or brand URLs when the brief provides them
    • Open-license sources (Unsplash via direct URL, Pexels) if explicitly allowed
  3. Last resort: tell the user. If neither is possible, do NOT fill the page with hand-rolled SVG illustrations or div-based "fake screenshots." Instead, leave clearly-labeled placeholder slots (<!-- TODO: hero product photo, 1600x1200 -->) and at the end of the response say: "This page needs real images at: [list of placements]. Please generate or provide them."

Even minimalist sites need real images. A pure-text page is not minimalism. It is incomplete work. Even an editorial Linear-style site needs at least 2-3 real images (hero, one product/lifestyle shot, one supporting image). Generate B&W minimalist photography if the brief is restrained; do not skip images entirely because the dial is low.

Real company logos for social proof. When the brief calls for a "Trusted by / Used by / Customers" logo wall, do NOT default to plain text wordmarks (<span>Acme Co</span> styled in a row). Use real SVG logos:

  • Source: Simple Icons (https://cdn.simpleicons.org/{slug}/ffffff for any color, or simple-icons npm package). Covers most known brands.
  • Alternative: devicon for tech-stack logos (@svgr/cli or CDN).
  • Make-up the brand name? Then make-up an SVG mark too. Generate a simple monogram (one letter in a circle, two-letter ligature, abstract glyph) rendered as an inline <svg> matching the page style. Plain text wordmarks for invented brand names look generic.
  • Always ensure logos render in both light and dark mode (white-on-dark, black-on-light, or single-color theme variable).
  • LOGO-ONLY rule (mandatory): logo wall = logos and nothing else. Do NOT print industry / category labels below each logo (no Vercel + hosting underneath, no Stripe + payments, no Cloudflare + infra). The logo is the credibility, the label adds nothing the user does not already know. Optional: brand name as alt-text for screen readers, optional link to the brand's site. That is it.

Hand-rolled illustrations:

  • SVG icons from libraries: fine (see Section 3.C).
  • Hand-rolled decorative SVGs (custom illustrations, logos, marks): strongly discouraged, never as default. Acceptable only when:
    • The brief explicitly calls for it ("draw me an SVG logo")
    • It's a single, simple geometric mark (a square, a circle, a wordmark in display type)
    • You're confident in the output quality

Div-based fake screenshots are banned. A "hand-built product preview" rendered with <div> rectangles, fake task lists, fake dashboards, fake terminal windows is a Tell. If you need to show a product:

  • Use a real screenshot URL if one exists
  • Generate one via image tool
  • Use a real component preview (an actual mini-version of the UI inside the page)
  • Or skip the preview entirely and use editorial photography

Hero needs a real visual. Text + gradient blob is not a hero - it's a placeholder.

4.9 Content Density

Landing pages live on the first impression, not the full read. Cut ruthlessly.

  • Default content shape per section: short headline (≤ 8 words) + short sub-paragraph (≤ 25 words) + one visual asset OR one CTA. Anything more must be justified by the section's job.

  • No data-dump sections. A 20-row publication table, a 30-row award list, a giant pricing matrix on a marketing page = wrong layout. Use:

    • Top 3-5 highlights + "View full list" link
    • Marquee / carousel for breadth
    • Different page entirely if the data is the product
  • Long lists need a different UI component, not a longer list. Default <ul> with bullets / divide-y rows is the lazy choice. If you have > 5 items, reach for one of these instead:

    • 2-column split with grouped items
    • Card grid with image + label per item
    • Tabs / accordion if items are categorisable
    • Horizontal scroll-snap pills
    • Carousel for breadth-heavy lists (testimonials, logos, capabilities)
    • Marquee for "lots-of-things-that-don't-need-individual-attention" A spec sheet with 10 rows + a hairline under every row is the WORST default. Either group rows into 2-3 chunks with sparse dividers, or move to a card-per-spec layout.
  • Spec sheets specifically (the Marrow-cookware pattern). A long product specification table with border-b on every row is the AI default for cookware / hardware / apparel / artisan-goods briefs. Banned. Concrete alternatives:

    • 2-col card grid: each spec gets its own card with the spec name, the value (large display number), and a one-line "why it matters" body. Cards arranged 2-col on desktop, 1-col mobile.
    • Scroll-snap horizontal pills: each spec is a pill, user can flick through.
    • Grouped chunks: group 10 specs into 3 logical clusters (e.g. "Materials", "Cooking", "Warranty"), each cluster gets ONE soft divider and a cluster heading.
    • Featured-vs-rest: 3-4 hero specs visualised as large display tiles, the rest collapsed under a "View full specifications" disclosure.
  • COPY SELF-AUDIT (mandatory before ship): Before declaring any task done, re-read every visible string on the page (headlines, subheads, eyebrows, button labels, body copy, captions, alt text, footer text, error messages). Flag any string that is:

    • Grammatically broken ("free on its past", "two plans but one is honest", "to put it on the table" out of context)
    • Has unclear referents ("we plan to stay that way" without prior context)
    • Sounds like AI hallucination (cute-but-wrong wordplay, forced metaphors that don't track, "elegant nothing" phrases)
    • Reads like an LLM trying to sound thoughtful (passive-aggressive humility, fake-craftsman labels, mock-poetic micro-meta) Rewrite every flagged string. If unsure whether a string makes sense, replace it with a plain functional sentence. AI-generated cute copy is worse than boring copy.
  • Fake-precise numbers are flagged. Numbers like 92%, 4.1×, 48k, 5.8 mm, 13.4 lb either:

    • Come from real data (brief, brand guidelines, public metrics) - fine
    • Are explicitly labeled as mock (<!-- mock -->, "example", "sample data") - fine
    • Are AI-invented spec aesthetics - banned. Don't fake engineering precision the brand doesn't claim.
  • One copy register per page. Don't mix technical mono ("47 tasks · 0.6 ctx-switches/day"), editorial prose, and marketing punch in the same composition unless the brand voice explicitly calls for it.

4.10 Quotes & Testimonials

  • Max 3 lines of quote body. Never 6. If the original quote is longer → cut it. A landing-page quote is a snippet, not the full review.
  • For very small font sizes (e.g. footer-style testimonials), the line cap can stretch slightly. Spirit: "fits in a glance."
  • No em-dashes inside the quote text as design flourish (long pauses, kinetic em-dashes, em-dash-bullets). See Section 9.G - em-dash is completely banned.
  • Attribution: name + role + (optionally) company. Never name only ("- Sarah").
  • Quote marks: use real typographic quotes ( " " ) or none at all. Not straight ASCII ( " ).

4.11 Page Theme Lock (Light / Dark Mode Consistency)

The page has ONE theme. Sections do not invert.

  • If the page is dark mode, ALL sections are dark mode. No light-mode-warm-paper section sandwiched between dark sections (or vice versa). The user must not feel they walked into a different website mid-scroll.
  • The exception: if the brief explicitly calls for a "Color Block Story" or "Theme Switch on Scroll" device AND that is a deliberate composition (one full theme switch with a strong transition, not random alternation), it is allowed once per page.
  • Default behaviour: pick light, dark, or auto (prefers-color-scheme) at the page level and lock it. Section-level background tints within the same theme family are fine (bg-zinc-950 next to bg-zinc-900); flipping to bg-amber-50 in the middle of a bg-zinc-950 page is broken.
  • When using a design system with built-in theming (Radix Themes, shadcn/ui with <Theme>), set the theme ONCE in layout.tsx or the page root. Do not let individual sections override.

5. CONTEXT-AWARE PROACTIVITY

These are tools, not defaults. Use them when the design read calls for them. None of these fire automatically.

  • Liquid Glass / Glassmorphism: Appropriate for premium consumer, Apple-adjacent, luxury brand, or media-overlay vibes. Inappropriate for dashboards, public-sector, or "boring B2B." When used, go beyond backdrop-blur: add a 1px inner border (border-white/10) and a subtle inner shadow (shadow-[inset_0_1px_0_rgba(255,255,255,0.1)]) for physical edge refraction. Provide a solid-fill fallback under prefers-reduced-transparency.
  • Magnetic Micro-physics: Use when MOTION_INTENSITY > 5 AND the brief reads premium / playful / agency. Implement EXCLUSIVELY with Motion's useMotionValue / useTransform outside the React render cycle. Never useState. See Section 3.B.
  • Perpetual Micro-Interactions (Pulse, Typewriter, Float, Shimmer, Carousel): Use when MOTION_INTENSITY > 5 AND the section actively benefits from motion (status indicators, live feeds, AI-feel). Not every card needs an infinite loop. If a section is informational, leave it still. Apply Spring Physics (type: "spring", stiffness: 100, damping: 20) - no linear easing.
  • "Motion claimed, motion shown." If MOTION_INTENSITY > 4, the page must actually move: entry transitions on hero, scroll-reveal on key sections, hover physics on CTAs, at minimum. A static page that claims MOTION_INTENSITY: 7 is broken. Conversely, if you cannot ship working motion in the available scope, drop the dial to 3 and ship a clean static page. Never half-build motion that breaks (cut-off ScrollTriggers, jumpy enters, missing cleanups).
  • MOTION MUST BE MOTIVATED (mandatory). Before adding any animation, ask: "what does this animation communicate?" Valid answers: hierarchy (drawing attention to the right thing), storytelling (revealing content in sequence that matches a narrative), feedback (acknowledging a user action), state transition (showing something changed). Invalid answer: "it looked cool". GSAP everywhere because GSAP is available is amateur. Each ScrollTrigger, each marquee, each pinned section needs a reason. If you cannot articulate the reason in one sentence, drop the animation.
  • MARQUEE MAX-ONE-PER-PAGE (mandatory). Horizontal scrolling text marquees ("logos endlessly scrolling", "manifesto scrolling sideways", "kinetic word strip") are appropriate at most ONCE per page. Two or more marquees on the same page reads as lazy filler. Pick the one section where the marquee actually serves the content; the others get a different layout.
  • GSAP Sticky-Stack Pattern (when scroll-stack is used). A "card stack on scroll" must be a REAL sticky-stack, not a sequential reveal list. See Section 5.A below for the canonical code skeleton. Common failure: trigger fires halfway through scroll instead of pinning at viewport top. Fix: start: "top top" not start: "top center" or "top 80%".
  • GSAP Horizontal-Pan Pattern (when horizontal scroll-hijack is used). See Section 5.B below for the canonical skeleton. Common failure: animation starts before the section is pinned, so the user sees half a slide. Same fix: start: "top top", pin the wrapper, scrub the inner track.

5.A Sticky-Stack - Canonical Skeleton

"use client";
import { useRef, useEffect } from "react";
import { gsap } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
import { useReducedMotion } from "motion/react";

gsap.registerPlugin(ScrollTrigger);

export function StickyStack({ cards }: { cards: React.ReactNode[] }) {
  const ref = useRef<HTMLDivElement>(null);
  const reduce = useReducedMotion();

  useEffect(() => {
    if (reduce || !ref.current) return;
    const ctx = gsap.context(() => {
      const cardEls = gsap.utils.toArray<HTMLElement>(".stack-card");
      cardEls.forEach((card, i) => {
        if (i === cardEls.length - 1) return;
        ScrollTrigger.create({
          trigger: card,
          start: "top top",                              // pin at viewport top
          endTrigger: cardEls[cardEls.length - 1],
          end: "top top",
          pin: true,
          pinSpacing: false,
        });
        gsap.to(card, {
          scale: 0.92,
          opacity: 0.55,
          ease: "none",
          scrollTrigger: {
            trigger: cardEls[i + 1],
            start: "top bottom",
            end: "top top",
            scrub: true,
          },
        });
      });
    }, ref);
    return () => ctx.revert();
  }, [reduce]);

  return (
    <div ref={ref} className="relative">
      {cards.map((card, i) => (
        <div
          key={i}
          className="stack-card sticky top-0 min-h-[100dvh] flex items-center justify-center"
        >
          {card}
        </div>
      ))}
    </div>
  );
}

Critical points: start: "top top", pin: true, every card except the last is pinned, the scale/opacity transform is driven by the NEXT card's scroll trigger (so previous card shrinks as next one arrives).

5.B Horizontal-Pan - Canonical Skeleton

"use client";
import { useRef, useEffect } from "react";
import { gsap } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
import { useReducedMotion } from "motion/react";

gsap.registerPlugin(ScrollTrigger);

export function HorizontalPan({ children }: { children: React.ReactNode }) {
  const wrap = useRef<HTMLDivElement>(null);
  const track = useRef<HTMLDivElement>(null);
  const reduce = useReducedMotion();

  useEffect(() => {
    if (reduce || !wrap.current || !track.current) return;
    const ctx = gsap.context(() => {
      const distance = track.current!.scrollWidth - window.innerWidth;
      gsap.to(track.current, {
        x: -distance,
        ease: "none",
        scrollTrigger: {
          trigger: wrap.current,
          start: "top top",                              // pin starts when section top hits viewport top
          end: () => `+=${distance}`,                    // scroll distance = track width minus viewport
          pin: true,
          scrub: 1,
          invalidateOnRefresh: true,
        },
      });
    }, wrap);
    return () => ctx.revert();
  }, [reduce]);

  return (
    <section ref={wrap} className="relative overflow-hidden">
      <div ref={track} className="flex h-[100dvh] items-center">
        {children}
      </div>
    </section>
  );
}

Critical points: start: "top top", pin: true, end: "+=${distance}" (scroll length = horizontal travel needed), scrub: 1. The wrapper is pinned, the inner track slides horizontally as the user scrolls vertically.

5.C Scroll-Reveal Stagger - Canonical Skeleton (lighter alternative)

For simple "items appear as they enter viewport" (no pinning), prefer Motion's whileInView over GSAP - lighter, no ScrollTrigger needed:

"use client";
import { motion, useReducedMotion } from "motion/react";

export function RevealStagger({ items }: { items: string[] }) {
  const reduce = useReducedMotion();
  return (
    <ul className="grid gap-6">
      {items.map((item, i) => (
        <motion.li
          key={item}
          initial={reduce ? false : { opacity: 0, y: 24 }}
          whileInView={{ opacity: 1, y: 0 }}
          viewport={{ once: true, amount: 0.3 }}
          transition={{
            duration: 0.6,
            delay: i * 0.06,
            ease: [0.16, 1, 0.3, 1],
          }}
        >
          {item}
        </motion.li>
      ))}
    </ul>
  );
}

Use this for: feature lists, testimonial grids, logo walls, anything that just needs "enter on scroll." Save GSAP for actual pin/scrub work.

5.D Forbidden Animation Patterns

  • window.addEventListener("scroll", ...) is banned. It runs on every scroll frame, jank-prone, no batching. Use Motion's useScroll(), GSAP's ScrollTrigger, IntersectionObserver, or CSS scroll-driven animations (animation-timeline: view()).
  • Custom scroll progress calculations using window.scrollY in React state. Same reason. Re-renders on every frame.
  • requestAnimationFrame loops that touch React state. Use motion values (useMotionValue + useTransform) instead.
  • Layout Transitions: Use Motion's layout and layoutId props for visible state changes (re-ordering lists, expanding modals, shared elements between routes). Do not wrap static content in layout props "for safety" - it costs measurement work.
  • Staggered Orchestration: Use staggerChildren (Motion) or CSS cascade (animation-delay: calc(var(--index) * 100ms)) for reveal moments where sequence matters. For staggerChildren, parent (variants) and children MUST share the same Client Component tree.

6. PERFORMANCE & ACCESSIBILITY GUARDRAILS

6.A Hardware Acceleration

  • Animate ONLY transform and opacity. Never animate top, left, width, height.
  • Use will-change: transform sparingly - only on elements that will actually animate.

6.B Reduced Motion (mandatory)

  • Any motion above MOTION_INTENSITY > 3 MUST honor prefers-reduced-motion. This is non-negotiable.
  • In Motion: wrap with useReducedMotion() and degrade to static.
  • In CSS: gate animations behind @media (prefers-reduced-motion: no-preference) or provide an override block under @media (prefers-reduced-motion: reduce) that disables.
  • Infinite loops, parallax, scroll-hijack, and magnetic physics MUST collapse to static / instant under reduced motion.

6.C Dark Mode (mandatory for any consumer-facing page)

  • Design for both modes from the start. Never ship light-only or dark-only without explicit user instruction.
  • Use Tailwind dark: variant OR CSS variables for tokens. Pick one strategy per project.
  • Do not prescribe specific dark-mode colors here. The brief decides. Maintain visual hierarchy, brand identity, and WCAG AA contrast (AAA for body) across both modes.
  • Respect prefers-color-scheme: dark. Default to system preference unless the brand insists on one mode.

6.D Core Web Vitals Targets

  • LCP < 2.5s. Hero image must be next/image priority or preloaded.
  • INP < 200ms. Heavy work off main thread.
  • CLS < 0.1. Reserve space for images, fonts, embeds.
  • Run Lighthouse before declaring a page done.

6.E DOM Cost

  • Apply grain / noise filters EXCLUSIVELY to fixed, pointer-events-none pseudo-elements (e.g., fixed inset-0 z-[60] pointer-events-none). NEVER on scrolling containers - continuous GPU repaints destroy mobile FPS.
  • Be aware of bundle size. Motion is not tiny. Three.js is large. Lazy-load anything that's not above-the-fold.

6.F Z-Index Restraint

NEVER spam arbitrary z-50 or z-10. Use z-index strictly for systemic layer contexts (sticky navbars, modals, overlays, grain). Document the z-index scale in a project constants file.


7. DIAL DEFINITIONS (Technical Reference)

DESIGN_VARIANCE (Level 1-10)

  • 1-3 (Predictable): Symmetrical CSS Grid (12-col, equal fr-units), equal paddings, centered alignment.
  • 4-7 (Offset): margin-top: -2rem overlaps, varied image aspect ratios (4:3 next to 16:9), left-aligned headers over center-aligned data.
  • 8-10 (Asymmetric): Masonry layouts, CSS Grid with fractional units (grid-template-columns: 2fr 1fr 1fr), massive empty zones (padding-left: 20vw).
  • MOBILE OVERRIDE: For levels 4-10, asymmetric layouts above md: MUST collapse to strict single-column (w-full, px-4, py-8) on viewports < 768px.

MOTION_INTENSITY (Level 1-10)

  • 1-3 (Static): No automatic animations. CSS :hover and :active states only. prefers-reduced-motion is the default mode anyway.
  • 4-7 (Fluid CSS): transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1). animation-delay cascades for load-ins. Focus on transform and opacity.
  • 8-10 (Advanced Choreography): Complex scroll-triggered reveals, parallax, scroll-driven animation (CSS animation-timeline or GSAP ScrollTrigger). Use Motion hooks. NEVER use window.addEventListener('scroll') - it is a hard ban, not a "prefer-not." See Section 5.D for the allowed alternatives.

VISUAL_DENSITY (Level 1-10)

  • 1-3 (Art Gallery): Lots of white space. Huge section gaps (py-32 to py-48). Expensive, clean.
  • 4-7 (Daily App): Standard web app spacing (py-16 to py-24).
  • 8-10 (Cockpit): Tight paddings. No card boxes; 1px lines separate data. Mandatory: font-mono for all numbers.

8. DARK MODE PROTOCOL

Dual-mode by default. Never assume light-only unless the brief is print-emulating editorial.

8.A Token Strategy (pick one, stick to it)

  • Tailwind dark: variant (default for utility-first projects): every color utility paired with its dark variant (bg-white dark:bg-zinc-950, text-gray-900 dark:text-gray-100).
  • CSS variables (for shadcn/ui, Radix Themes, or component libraries with theming): define semantic tokens (--surface, --surface-elevated, --text-primary, --accent) and swap values under [data-theme="dark"] or @media (prefers-color-scheme: dark).

8.B Do Not Prescribe Specific Colors Here

The brief and brand decide. This skill enforces only:

  • Contrast - WCAG AA minimum for body text, AAA target for hero copy.
  • Hierarchy parity - visual hierarchy that works in light must work in dark. If a CTA pops in light, it pops in dark.
  • Brand fidelity - primary brand color stays recognisable. Don't desaturate the brand into a dark mode.
  • No pure #000000 and no pure #ffffff - use off-black (zinc-950, near-black warm gray) and off-white. Pure values kill depth.

8.C Default Mode

Respect prefers-color-scheme unless the brand insists. Add a manual toggle if either mode would lose key brand expression.

8.D Test in Both Modes Before Finishing

Open the page in both modes during development. Do not ship a page you've only seen in one mode.


9. AI TELLS (Forbidden Patterns)

Avoid these signatures unless the brief explicitly asks for them.

9.A Visual & CSS

  • NO neon / outer glows by default. Use inner borders or subtle tinted shadows.
  • NO pure black (#000000). Off-black, zinc-950, or charcoal.
  • NO oversaturated accents. Desaturate to blend with neutrals.
  • NO excessive gradient text for large headers.
  • NO custom mouse cursors. Outdated, accessibility-hostile, perf-hostile.

9.B Typography

  • AVOID Inter as default. See Section 4.1. Override path exists.
  • NO oversized H1s that just scream. Control hierarchy with weight + color, not raw scale.
  • Serif constraints: Serif for editorial / luxury / publication. Not for dashboards.

9.C Layout & Spacing

  • Mathematically perfect padding and margins. No floating elements with awkward gaps.
  • NO 3-column equal feature cards. The generic "three identical cards horizontally" feature row is banned. Use 2-column zig-zag, asymmetric grid, scroll-pinned, or horizontal-scroll alternative.

9.D Content & Data ("Jane Doe" Effect)

  • NO generic names. "John Doe", "Sarah Chan", "Jack Su" → use creative, realistic, locale-appropriate names.
  • NO generic avatars. No SVG "egg" or Lucide user icons → use believable photo placeholders or specific styling.
  • NO fake-perfect numbers. Avoid 99.99%, 50%, 1234567. Use organic, messy data (47.2%, +1 (312) 847-1928).
  • NO startup-slop brand names. "Acme", "Nexus", "SmartFlow", "Cloudly" → invent contextual, premium names that sound real.
  • NO filler verbs. "Elevate", "Seamless", "Unleash", "Next-Gen", "Revolutionize" → concrete verbs only.

9.E External Resources & Components

  • NO hand-rolled SVG icons. Use Phosphor / HugeIcons / Radix / Tabler. Lucide on explicit request only.
  • Hand-rolled decorative SVGs strongly discouraged as default (see Section 4.8).
  • NO div-based fake screenshots. Never build a fake product UI out of <div> rectangles to simulate a screenshot. Use real images, generated images, or skip the preview.
  • NO broken Unsplash links. Use https://picsum.photos/seed/{descriptive-string}/{w}/{h}, or generated photo placeholders, or actual assets.
  • shadcn/ui customization: Allowed, but NEVER in default state. Customize radii, colors, shadows, typography to the project aesthetic.
  • Production-Ready Cleanliness: Code visually clean, memorable, meticulously refined.

9.F Production-Test Tells (banned outright)

These patterns came out of real LLM-generated landing-page tests. They are the signatures the model defaults to when it tries to "look designed." Treat them as hard bans unless the brief explicitly calls for one.

Hero & top-of-page

  • NO version labels in the hero. V0.6, v2.0, BETA, INVITE-ONLY PREVIEW, EARLY ACCESS, ALPHA - banned as default eyebrows. Only acceptable when the brief is explicitly about a product launch / preview status.
  • NO "Brand · No. 01"-style sub-eyebrows. "Marrow · No. 01 · The 6-quart" type micro-meta lines. Skip them.

Section numbering & micro-labels

  • NO section-number eyebrows. 00 / INDEX, 001 · Capabilities, 002 · Featured commission, 06 · how it works, 05 · The honest table - banned. Eyebrows should name the topic in plain language, not enumerate.
  • NO 01 / 4-style pagination on images or bento tiles. If the user can count, they don't need the label.
  • NO Scroll · 001 Capabilities-style scroll cues. A simple arrow or "Scroll" is enough; no section-number prefix.
  • NO "Index of Work, 2018 - 2026"-style range labels as eyebrows. Just say what the section is.

Separators & dots

  • The middle-dot (·) is rationed. Maximum 1 per line in metadata strips. Do NOT use it as the default separator for everything ("foo · bar · baz · qux · quux"). If you need a separator family, prefer line breaks, hairlines, or columns.
  • NO decorative colored status dots on every list/nav/badge. A colored dot before "ONE Q4 SLOT OPEN" or before every nav link, or every task row - banned by default. Acceptable only when the dot conveys actual semantic state (a server status, an availability flag) and is used sparingly.

Em-dashes & typography flourishes

  • NO em-dash () as a design element OR anywhere else. See Section 9.G below for the complete, non-negotiable ban. The em-dash character is forbidden in headlines, eyebrows, pills, body copy, quotes, attribution, captions, button text, and alt text. Use the regular hyphen (-).
  • NO <br>-broken-and-italicized headlines as a default "design move." "for thirty<br>years." type splits. Headlines should read naturally first, get clever only when the brief demands it.
  • NO vertical rotated text ("INDEX OF WORK, 2018 - 2026" rotated 90°). Agency-portfolio cliché. Use it only when the brief is explicitly agency / Awwwards / experimental AND it serves a real composition purpose.
  • NO crosshair / hairline grid lines as decoration. Vertical and horizontal lines drawn just to make the page "feel designed" - banned. Use them only when they organize real content.

Fake product previews

  • NO div-based fake product UI in the hero (fake task list, fake terminal, fake dashboard built from styled divs). It is the #1 LLM-design Tell. Use a real screenshot, a generated image, a real component preview, or none at all.
  • NO fake version footers ("v0.6.2-rc.1", "last sync 4s ago · main") inside fake screenshots. Adds nothing, screams AI.

Marketing-copy Tells

  • NO "Quietly in use at" / "Quietly trusted by" social-proof headers. Use natural language: "Trusted by", "Used at", "Customers include", or skip the heading entirely if the logos speak.
  • NO "From the field" / "Field notes" / "Currently on the bench" / "On our desks" / "Loose plates" style poetic labels on quote, blog, or sidebar sections. Reads as performative-craftsman. Use plain functional labels ("Testimonials", "Latest writing", "Now working on") or skip the label.
  • NO "We respect the French ones"-style mock-humble industry-references in body copy. Cute and AI-y.
  • NO weather / locale strips ("LIS 14:23 · 18°C") in headers/footers unless the brief is explicitly about a place / time-zone-distributed studio.
  • NO micro-meta-sentences under eyebrows. Sentences like "Each of these is a feature we ship today, not a roadmap promise. The list will stay short on purpose." sitting under a section heading are clutter. Eyebrow + Headline + Body is enough.
  • NO generic step labels. "Stage 1 / Stage 2 / Stage 3", "Step 1 / Step 2 / Step 3", "Phase 01 / Phase 02 / Phase 03", "Pass One / Pass Two / Pass Three". Banned. The actual step content is the label. If you must show progression, use the verb-noun directly ("Install", "Configure", "Ship") not "Stage 1: Install".

Pills, labels and version stamps

  • NO pills/labels/tags overlaid on images. No <span> overlays on photos with tags like Brand · 02, PLATE · BRAND, Field notes - journal. Either let the image speak alone, or add a caption directly below (outside the image).
  • NO photo-credit captions as decoration. Strings like Field study no. 12 · Ines Caetano, Plate 03 · House archive, Frame XII · 35mm under stock/picsum images are pretentious. Photo credit is allowed ONLY when there is a real photographer being credited for a real photo (with permission). Otherwise: skip the caption or use a one-line functional caption ("The 6-quart, in Sage.").
  • NO version footers on marketing pages. Footer strings like v1.4.2, Build 0048, last sync 4s ago · main are CLI / devtool fixtures, not landing-page content. Banned on marketing/landing/portfolio pages.
  • NO "Reservation 412 of 800"-style live-stock counters as decoration. Only if the brief is explicitly a limited-run waitlist with real data.

Decoration text strips

  • NO decoration text strip at hero bottom. Patterns like BRAND. MOTION. SPATIAL., TYPE / FORM / MOTION, DESIGN · BUILD · SHIP, ESTD. 2018 · LISBON · BRAND. MOTION. SPATIAL. as a small mono-caps strip across the bottom of the hero are an agency-portfolio cliché. Banned by default. Only acceptable when the strip carries real, navigable links (sticky bottom nav) or real status info (cookie banner, build info on a docs site).
  • NO floating top-right sub-text in section headings. Pattern: section has a giant left-aligned headline; in the top-right corner of the same section header there is a small explainer paragraph floating with no clear alignment to anything else. That floater is the Tell. Either put the sub-text directly under the headline, or build a clean 2-column header (left: headline, right: aligned body), but not a tiny corner paragraph.

Lists, dividers and scoring

  • NO border-t + border-b on every row of a long list / spec table. Pick one (bottom-border between rows OR top-border above the group) and use it sparsely. A 10-row spec table with hairlines under each row is the laziest layout - see Section 4.9 for alternative UI components.
  • NO scoring/progress bars with filled background tracks as comparison visuals. If you need to show "X out of Y" comparisons, prefer a number + small icon, or a tiny inline bar WITHOUT a background track. Big filled bg-zinc-200 tracks with a partial fill on top are dashboard-UI clutter on a landing page.

Locale, time, scroll cues

  • Locale / city-name / time / weather strips are banned for 99% of briefs. "Lisbon, working with founders" in the hero, "1200-690 Lisbon, Portugal" in the footer, "Lisbon 14:23 · 18°C" in the nav. These are agency-portfolio decoration tells. Allowed ONLY when: the brief explicitly describes a globally-distributed studio with timezone-relevant work, OR a travel-focused brand, OR a real-world physical venue. A single contact-address mention in the footer is fine; an atmospheric locale strip is not.
  • Scroll cues are banned. Scroll, ↓ scroll, Scroll to explore, Scroll to walk through it, animated mouse-wheel icons. If the user has not scrolled yet, they are looking at the hero. They know what scroll is. The bottom of the viewport does not need a label.
  • ZERO decorative status dots by default. A coloured dot before nav items, before list rows, before badges, before status labels is a Tell. Only acceptable when conveying real semantic state (a live indicator on actual server status, a live availability flag) and limited to one per page section.

9.G EM-DASH BAN (the single most-violated Tell)

Em-dash () is COMPLETELY banned. It is the LLM's signature stylistic crutch and it is the #1 visual Tell in production tests. There is no "limited use" allowance, no "natural language frequency" allowance, no "in body copy is fine" allowance. None.

  • Banned in headlines. Use a period or a comma.
  • Banned in eyebrows / labels / pills / button text / image captions / nav items. Replace with line breaks, columns, or hairlines.
  • Banned in body copy. Restructure the sentence: two sentences with a period, OR a comma, OR parentheses, OR a colon.
  • Banned in quote attribution. Use a normal hyphen with spaces (-) or a line break + smaller-weight name.
  • Banned in en-dash form too () when used as a separator. Date ranges (2018-2026) use a hyphen. Number ranges (€40-80k) use a hyphen.

The ONLY permitted dash characters on the page are:

  • Regular hyphen - (for compound words, ranges, line dividers in markup)
  • Minus sign in math (-5°C)

If your output contains a single or anywhere visible to the user, the output fails the Pre-Flight Check and must be rewritten.

This rule is non-negotiable. The agent has historically ignored em-dash limits when phrased as "use sparingly." The phrasing here is binary: zero em-dashes.


10. REFERENCE VOCABULARY (Pattern Names the Agent Should Know)

This is a vocabulary, not a library. The agent should KNOW these pattern names to communicate about them, design with them in mind, and reach for them when the design read calls for them. Implementations and code sketches live in the Block Library (Section 12), which is populated iteratively.

Hero Paradigms

  • Asymmetric Split Hero - Text on one side, asset on the other, generous white space.
  • Editorial Manifesto Hero - Large type, no asset, almost-poster.
  • Video / Media Mask Hero - Type cut out as mask over video background.
  • Kinetic-Type Hero - Animated typography as the primary visual.
  • Curtain-Reveal Hero - Hero parts on scroll like a curtain.
  • Scroll-Pinned Hero - Hero stays pinned while content scrolls behind.

Navigation & Menus

  • Mac OS Dock Magnification - Edge nav, icons scale fluidly on hover.
  • Magnetic Button - Pulls toward cursor.
  • Gooey Menu - Sub-items detach like viscous liquid.
  • Dynamic Island - Morphing pill for status / alerts.
  • Contextual Radial Menu - Circular menu expanding at click point.
  • Floating Speed Dial - FAB springing into curved secondary actions.
  • Mega Menu Reveal - Full-screen dropdown, stagger-fade content.

Layout & Grids

  • Bento Grid - Asymmetric tile grouping (Apple Control Center).
  • Masonry Layout - Staggered grid, no fixed row height.
  • Chroma Grid - Borders / tiles with subtle animating gradients.
  • Split-Screen Scroll - Two halves sliding in opposite directions.
  • Sticky-Stack Sections - Sections that pin and stack on scroll.

Cards & Containers

  • Parallax Tilt Card - 3D tilt tracking mouse coordinates.
  • Spotlight Border Card - Borders illuminate under cursor.
  • Glassmorphism Panel - Frosted glass with inner refraction.
  • Holographic Foil Card - Iridescent rainbow shift on hover.
  • Tinder Swipe Stack - Physical card stack, swipe-away.
  • Morphing Modal - Button expands into its own dialog.

Scroll Animations

  • Sticky Scroll Stack - Cards stick and physically stack.
  • Horizontal Scroll Hijack - Vertical scroll → horizontal pan.
  • Locomotive / Sequence Scroll - Video / 3D sequence tied to scrollbar.
  • Zoom Parallax - Central background image zooming on scroll.
  • Scroll Progress Path - SVG line drawing along scroll.
  • Liquid Swipe Transition - Page transition like viscous liquid.

Galleries & Media

  • Dome Gallery - 3D panoramic gallery.
  • Coverflow Carousel - 3D carousel with angled edges.
  • Drag-to-Pan Grid - Boundless draggable canvas.
  • Accordion Image Slider - Narrow strips expanding on hover.
  • Hover Image Trail - Mouse leaves popping image trail.
  • Glitch Effect Image - RGB-channel shift on hover.

Typography & Text

  • Kinetic Marquee - Endless text bands reversing on scroll.
  • Text Mask Reveal - Massive type as transparent window to video.
  • Text Scramble Effect - Matrix-style decoding on load / hover.
  • Circular Text Path - Text curving along spinning circle.
  • Gradient Stroke Animation - Outlined text with running gradient.
  • Kinetic Typography Grid - Letters dodging the cursor.

Micro-Interactions & Effects

  • Particle Explosion Button - CTA shatters into particles on success.
  • Liquid Pull-to-Refresh - Reload indicator like detaching droplets.
  • Skeleton Shimmer - Shifting light reflection across placeholders.
  • Directional Hover-Aware Button - Fill enters from cursor's exact side.
  • Ripple Click Effect - Wave from click coordinates.
  • Animated SVG Line Drawing - Vectors drawing themselves in real time.
  • Mesh Gradient Background - Organic lava-lamp blobs.
  • Lens Blur Depth - Background UI blurred to focus foreground action.

Animation Library Choice

  • Motion (motion/react) - default for UI / Bento / state-change motion.
  • GSAP + ScrollTrigger - for full-page scrolltelling and scroll hijacks. Isolate in dedicated leaf components with useEffect cleanup.
  • Three.js / WebGL - for canvas backgrounds and 3D scenes. Same isolation rule.
  • NEVER mix GSAP / Three.js with Motion in the same component tree. They fight over the same frames.

11. REDESIGN PROTOCOL

This skill handles greenfield builds AND redesigns. Misclassifying the mode is the single biggest source of bad redesign output.

11.A Detect the Mode (first action)

  • Greenfield - no existing site, or full overhaul approved. Dial baseline from Section 1.
  • Redesign - Preserve - modernise without breaking the brand. Audit first, extract brand tokens, evolve gradually.
  • Redesign - Overhaul - new visual language on top of existing content. Treat as greenfield for visuals; preserve content and IA.

If ambiguous, ask once: "Should this redesign preserve the existing brand, or are we starting visually from scratch?"

11.B Audit Before Touching

Document the current state before proposing changes:

  • Brand tokens - primary / accent colors, type stack, logo treatment, radii.
  • Information architecture - page tree, primary nav, key conversion paths.
  • Content blocks - what exists, what's doing work, what's filler.
  • Patterns to preserve - signature interactions, recognisable hero, copy voice.
  • Patterns to retire - AI-slop tells, broken layouts, dead links, generic stock imagery, perf traps.
  • Dial reading of the existing site - infer current DESIGN_VARIANCE / MOTION_INTENSITY / VISUAL_DENSITY. That's your starting point, not the baseline.
  • SEO baseline - current ranking pages, meta titles, structured data, OG cards. SEO migration is the #1 redesign risk.

11.C Preservation Rules

  • Do not change information architecture unless asked. Keep page slugs, anchor IDs, primary nav labels stable for SEO and muscle memory.
  • Extract brand colors before applying Section 4.2. A brand that is already purple stays purple - apply the LILA RULE's override.
  • Preserve copy voice unless asked for a rewrite. Visual modernisation ≠ content rewrite.
  • Honor existing accessibility wins. Do not regress focus states, alt text, keyboard nav, contrast.
  • Respect existing analytics events. Do not rename buttons, form fields, section IDs that downstream tracking depends on.

11.D Modernisation Levers (priority order)

Apply in order - stop when the brief is satisfied:

  1. Typography refresh - biggest visual lift per unit of risk.
  2. Spacing & rhythm - increase section padding, fix vertical rhythm.
  3. Color recalibration - desaturate, unify neutrals, keep brand accent.
  4. Motion layer - add MOTION_INTENSITY-appropriate micro-interactions to existing components.
  5. Hero & key-section recomposition - restructure top-of-funnel using Section 10 vocabulary.
  6. Full block replacement - only when the existing block is unsalvageable.

11.E Decision Tree: Targeted Evolution vs Full Redesign

  • IA, content, and SEO sound → targeted evolution (Levers 1-4). ~70% of value at ~40% of risk.
  • Visual debt is structural (broken IA, no design system, broken mobile) → full redesign with strict content preservation.
  • Brand itself is changing → greenfield.

11.F What Never Changes Silently

Never modify without explicit user approval:

  • URL structure / route slugs.
  • Primary nav labels.
  • Form field names or order (breaks analytics + autofill).
  • Brand logo or wordmark.
  • Existing legal / consent / cookie copy.

12. THE BLOCK LIBRARY (Contract - Implementations Land Here Iteratively)

The Reference Vocabulary (Section 10) names patterns. The Block Library implements them with real props, real motion specs, and real code sketches.

Status: schema defined here. Blocks will be added iteratively. Do not freelance new blocks without following this schema.

12.A File Location

skills/taste-skill/blocks/
  hero/
    asymmetric-split.md
    editorial-manifesto.md
    kinetic-type.md
    ...
  feature/
    bento-grid.md
    sticky-scroll-stack.md
    zig-zag.md
    ...
  social-proof/
  pricing/
  cta/
  footer/
  navigation/
  portfolio/
  transition/

12.B Required Frontmatter

---
name: asymmetric-split-hero
category: hero
dial_compatibility:
  variance: [6, 10]
  motion: [3, 10]
  density: [2, 5]
when_to_use: "Landing pages with one strong asset and one strong message. Default hero for SaaS, agency, premium consumer."
not_for: "Editorial / manifesto launches where the message IS the design."
stack: ["react", "next", "tailwind", "motion"]
---

12.C Required Body Sections

  1. Visual sketch - short ASCII or description of the layout.
  2. Props API - the component's interface.
  3. Code sketch - minimal working implementation (Server Component default, Client island for motion).
  4. Mobile fallback - explicit collapse rules for < 768px.
  5. Motion variants - one variant per MOTION_INTENSITY band (1-3, 4-7, 8-10). Reduced-motion fallback explicit.
  6. Dark-mode notes - token strategy specific to this block.
  7. Anti-patterns - common ways this block goes wrong.
  8. References - links to real examples in production.

12.D Block-Library Discipline

  • One block per file. No multi-block files.
  • Every block must work standalone (drop it into a page, it renders).
  • Every block must pass the Pre-Flight Check (Section 14).
  • Blocks that depend on a design system from Section 2.A live under blocks/<category>/<name>--<system>.md (e.g. feature/bento-grid--material.md).

13. OUT OF SCOPE

This skill is NOT for:

  • Dashboards / dense product UI / admin panels (use Fluent, Carbon, Atlassian, or Polaris from Section 2.A).
  • Data tables (use TanStack Table or AG Grid).
  • Multi-step forms / wizards (use Form-specific patterns; this skill won't make them better).
  • Code editors (use Monaco / CodeMirror with their official skinning).
  • Native mobile (use Apple HIG / Material directly).
  • Realtime collab UIs (presence, cursors, OT-aware - different problem class).

If the brief is one of the above, say so explicitly, point to the right tool, and only apply this skill's marketing-page / about-page / landing-page parts to the surfaces where they apply.


14. FINAL PRE-FLIGHT CHECK

Run this matrix before outputting code. This is the last filter.

THIS IS NOT OPTIONAL. Run every box. If any box fails, the output is not done.

  • Brief inference declared (Section 0.B one-liner)?
  • Dial values explicit and reasoned from the brief, not silently using baseline?
  • Design system chosen from Section 2 if applicable, or aesthetic labeled honestly?
  • Redesign mode detected and audit performed (if applicable, Section 11)?
  • ZERO em-dashes () anywhere on the page. Headlines, eyebrows, pills, body, quotes, attribution, captions, buttons, alt text. Zero. (Section 9.G - non-negotiable.)
  • Page Theme Lock: ONE theme (light, dark, or auto) for the whole page. No section flips to inverted mode mid-page (Section 4.11)?
  • Color Consistency Lock: one accent color used identically across all sections (Section 4.2)?
  • Shape Consistency Lock: one corner-radius system applied consistently (Section 4.4)?
  • Button Contrast Check: every CTA text is readable against its background (no white-on-white, WCAG AA 4.5:1)?
  • CTA Button Wrap: no CTA label wraps to 2+ lines at desktop?
  • Form Contrast Check: form inputs, placeholders, focus rings, labels all pass WCAG AA against the section background?
  • Serif discipline: if a serif is used, it is NOT Fraunces or Instrument_Serif (or it is, with explicit brand justification)? Different serif from your previous project?
  • Premium-consumer palette check: if the brief is premium-consumer (cookware / wellness / artisan / luxury), the palette is NOT the AI-default beige+brass+oxblood+espresso family? Different family from your previous premium-consumer project?
  • Italic descender clearance: every italic word with y g j p q has leading-[1.1] min + pb-1 reserve?
  • Hero fits the viewport: headline ≤ 2 lines, subtext ≤ 20 words AND ≤ 4 lines, CTA visible without scroll, font scale planned around image?
  • Hero top padding: max pt-24 at desktop, hero content does not float halfway down the viewport?
  • Hero stack discipline: max 4 text elements in hero (eyebrow OR brand strip, headline, subtext, CTAs)? No tiny tagline below CTAs, no trust micro-strip in hero?
  • EYEBROW COUNT (mechanical): count instances of uppercase tracking micro-labels above section headlines across all components. Count ≤ ceil(sectionCount / 3)? Hero counts as 1.
  • Split-Header Ban: no "left big headline + right small explainer paragraph" pattern as a section header (vertical stack instead)?
  • Zigzag Alternation Cap: no 3+ consecutive sections with the same image+text-split layout?
  • No Duplicate CTA Intent: no two CTAs with the same intent ("Get in touch" + "Let's talk" both on page = Fail)?
  • Logo wall = logo only: no industry / category labels printed below logos?
  • Bento Background Diversity: at least 2-3 bento cells have real visual variation (image, gradient, pattern), not all white-on-white text cards?
  • "Used by / Trusted by" logo wall lives UNDER the hero, not inside it, uses REAL SVG logos (Simple Icons / devicon) or generated SVG marks, NOT plain text wordmarks?
  • Copy Self-Audit: every visible string re-read, no grammatically-broken or AI-hallucinated phrases ("free on its past" type) shipped?
  • Motion motivated: every animation can be justified in one sentence (hierarchy / storytelling / feedback / state transition), no GSAP-for-show?
  • Marquee max-one-per-page: no two horizontal marquees on the same page?
  • Navigation on ONE line at desktop, height ≤ 80px?
  • Section-Layout-Repetition check: no two sections share the same layout family (at least 4 different families across 8 sections)?
  • Bento has rhythm AND exact cell count (N items → N cells, no empty cells in middle or at end)?
  • Long lists use the right UI component (not default <ul> with divide-y for > 5 items - see Section 4.9 alternatives)?
  • Real images used (gen-tool first, then Picsum-seed, then explicit placeholder slots) - NO div-based fake screenshots, NO hand-rolled decorative SVGs, NO pure-text minimalism?
  • No pills/labels overlaid on images (no Plate · Brand, no Field notes - journal)?
  • No photo-credit captions as decoration (Field study no. 12 · Ines Caetano)?
  • No version footers (v1.4.2, Build 0048) on marketing pages?
  • No micro-meta-sentences under eyebrows ("Each of these is a feature we ship today...")?
  • No decoration text strip at hero bottom (BRAND. MOTION. SPATIAL.)?
  • No floating top-right sub-text in section headings?
  • No scoring/progress bars with filled background tracks as comparison visuals?
  • No locale / city-name / time / weather strips unless brief is genuinely globally-distributed or place-focused?
  • No scroll cues (Scroll, ↓ scroll, Scroll to explore)?
  • No version labels in hero (V0.6, BETA, INVITE-ONLY) unless the brief is a launch?
  • No section-numbering eyebrows (00 / INDEX, 001 · Capabilities, 06 · how it works)?
  • No decorative dots (zero by default, only for real semantic state)?
  • No border-t + border-b on every row of long lists / spec tables?
  • Content density sane: no 20-row data tables, no fake-precise specs without justification, ≤ 25-word sub-paragraphs by default?
  • Quotes ≤ 3 lines of body, attribution clean (no em-dash)?
  • Motion claimed = motion shown: if MOTION_INTENSITY > 4, page actually animates, not just claimed?
  • GSAP sticky-stack / horizontal-pan implemented per Section 5.A / 5.B canonical skeleton (start: "top top", pin: true, correct scrub)?
  • No window.addEventListener('scroll') - using Motion useScroll() / ScrollTrigger / IntersectionObserver / CSS scroll-driven animations only?
  • Reduced motion wrapped for everything MOTION_INTENSITY > 3?
  • Dark mode tokens defined and tested in both modes?
  • Mobile collapse explicit (w-full, px-4, max-w-7xl mx-auto) for high-variance layouts?
  • Viewport stability: min-h-[100dvh], never h-screen?
  • useEffect animations have strict cleanup functions?
  • Empty / loading / error states provided?
  • Cards omitted in favor of spacing where possible?
  • Icons from an allowed library only (Phosphor / HugeIcons / Radix / Tabler), no hand-rolled SVG paths?
  • Motion isolated in client-leaf components with 'use client' at the top, memoized?
  • No AI Tells from Section 9 (Inter as default, AI-purple, three-equal cards, Jane Doe, Acme, "Quietly in use at")?
  • Core Web Vitals plausibly hit (LCP < 2.5s, INP < 200ms, CLS < 0.1)?
  • One design system per project (no Material + shadcn mixed)?

If a single checkbox cannot be honestly ticked, the page is not done. Fix it before delivering.


APPENDICES - Real Source-Backed Reference Material

The sections below are vendored reference content. They give the agent real install commands, real canonical doc links, and real working starter snippets for each design system named in Section 2. Use them to ground decisions in production reality, not training-data fiction.

Appendix A - Install Commands per Design System

# Material Web (Material 3)
npm install @material/web

# Fluent UI React (v9)
npm install @fluentui/react-components

# Fluent UI Web Components (framework-free)
npm install @fluentui/web-components @fluentui/tokens

# IBM Carbon
npm install @carbon/react @carbon/styles

# Radix Themes
npm install @radix-ui/themes

# shadcn/ui (open code, owned components)
npx shadcn@latest init
npx shadcn@latest add button card badge separator input

# Primer CSS (GitHub product/devtool UI)
npm install --save @primer/css

# Primer Brand (GitHub marketing UI)
npm install @primer/react-brand

# GOV.UK Frontend
npm install govuk-frontend

# USWDS (US Web Design System)
npm install uswds

# Atlassian Design System (Atlaskit)
yarn add @atlaskit/css-reset @atlaskit/tokens @atlaskit/button @atlaskit/badge @atlaskit/section-message @atlaskit/card

# Bootstrap 5.3
npm install bootstrap

# Shopify Polaris Web Components (Shopify apps only)
# Add this to your app HTML head:
#   <meta name="shopify-api-key" content="%SHOPIFY_API_KEY%" />
#   <script src="https://cdn.shopify.com/shopifycloud/polaris.js"></script>

Appendix B - Canonical Sources (read these before reinventing)

Material Web

Fluent UI

Carbon

Shopify Polaris

Atlassian

Primer

GOV.UK

USWDS

Bootstrap

Tailwind

Radix

shadcn/ui

Native CSS / W3C standards

Apple Liquid Glass (Apple platforms only)


Appendix C - Apple Liquid Glass: Honest Web Approximation

Do not treat random CSS snippets as official Apple Liquid Glass.

What is official

Apple documents Liquid Glass inside Apple's Human Interface Guidelines and Developer Documentation for Apple platforms. It is a dynamic material used across Apple platform UI. Apple's native implementation belongs to Apple platform APIs and system components, not a public web CSS package.

Relevant official docs:

  • Apple Human Interface Guidelines → Materials
  • Apple Developer Documentation → Liquid Glass
  • Apple Developer Documentation → Adopting Liquid Glass
  • SwiftUI → Material

What is NOT official

There is no liquid-glass.css from Apple for normal websites.

A web approximation can use:

  • backdrop-filter
  • transparent backgrounds
  • layered borders
  • highlight overlays
  • gradients
  • motion
  • strong contrast fallbacks

But that is web glassmorphism / frosted-glass approximation, not official Apple Liquid Glass. Label it as such in comments.

Safer web approximation skeleton

.liquid-glass-web-approx {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: 999px;
  border: 1px solid rgb(255 255 255 / .32);
  background:
    linear-gradient(135deg, rgb(255 255 255 / .30), rgb(255 255 255 / .08)),
    rgb(255 255 255 / .12);
  backdrop-filter: blur(24px) saturate(180%) contrast(1.05);
  -webkit-backdrop-filter: blur(24px) saturate(180%) contrast(1.05);
  box-shadow:
    inset 0 1px 0 rgb(255 255 255 / .48),
    inset 0 -1px 0 rgb(255 255 255 / .12),
    0 18px 60px rgb(0 0 0 / .18);
}

.liquid-glass-web-approx::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  background:
    radial-gradient(circle at 20% 0%, rgb(255 255 255 / .55), transparent 34%),
    linear-gradient(90deg, rgb(255 255 255 / .18), transparent 42%, rgb(255 255 255 / .14));
  pointer-events: none;
}

.liquid-glass-web-approx::after {
  content: "";
  position: absolute;
  inset: 1px;
  border-radius: inherit;
  border: 1px solid rgb(255 255 255 / .14);
  pointer-events: none;
}

@media (prefers-color-scheme: dark) {
  .liquid-glass-web-approx {
    border-color: rgb(255 255 255 / .18);
    background:
      linear-gradient(135deg, rgb(255 255 255 / .16), rgb(255 255 255 / .04)),
      rgb(15 23 42 / .42);
    box-shadow:
      inset 0 1px 0 rgb(255 255 255 / .22),
      0 18px 60px rgb(0 0 0 / .42);
  }
}

@media (prefers-reduced-transparency: reduce) {
  .liquid-glass-web-approx {
    background: rgb(255 255 255 / .96);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
  }
}

Important: prefers-reduced-transparency has uneven browser support; test it. Always provide enough contrast even without blur.


End of appendices. Install commands above are reality anchors. The Apple Liquid Glass skeleton is a labeled approximation, not an Apple-issued package. For canonical docs per design system, consult the system's official docs (links in Section 2 plus Appendix B).

管理Venice Bearer API密钥,支持增删改查、查看用量与限流日志。涵盖INFERENCE与ADMIN密钥类型区别,以及通过Web3钱包两步流程生成密钥的功能。需管理员权限操作。
创建或撤销API密钥 查询密钥列表或详情 配置密钥消费限额或过期时间 检查速率限制或使用日志 通过Web3钱包生成API密钥
skills/veniceai_skills/venice-api-keys/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-api-keys -g -y
SKILL.md
Frontmatter
{
    "name": "venice-api-keys",
    "description": "Manage Venice API keys. Covers GET\/POST\/PATCH\/DELETE \/api_keys, GET \/api_keys\/{id}, GET \/api_keys\/rate_limits, GET \/api_keys\/rate_limits\/log, the two-step \/api_keys\/generate_web3_key wallet flow, INFERENCE vs ADMIN key types, and per-key consumption limits (USD \/ DIEM)."
}

Venice API Keys

Admin endpoints for managing Bearer API keys. You need an ADMIN key (or parent session) to call these. For wallet-only auth, use venice-auth / venice-x402 instead.

Endpoint Purpose
GET /api_keys List your keys (masked).
POST /api_keys Create a new key. Response contains the only copy of the secret.
PATCH /api_keys Update description, expiresAt, consumptionLimit.
DELETE /api_keys?id=... Revoke a key.
GET /api_keys/{id} Full details for one key (usage, limits, expiration).
GET /api_keys/rate_limits Balances + per-model rate-limit tiers for the current key.
GET /api_keys/rate_limits/log Last 50 rate-limit breaches.
GET /api_keys/generate_web3_key Get a SIWE-style token to sign with a wallet.
POST /api_keys/generate_web3_key Authenticate a wallet (holds sVVV) and mint a classic API key.

Limits: key creation is capped at 20 requests/minute and 500 active keys per user.

Key types

Type Can call
INFERENCE Inference endpoints plus any route that only requires authentication — e.g. /chat/*, /image/*, /audio/*, /video/*, /embeddings, /augment/*, /crypto/rpc, /characters, /api_keys/rate_limits*, /support-bot. Rejected from admin routes listed below with 401.
ADMIN Everything an INFERENCE key can do, plus admin-only routes: POST/PATCH/DELETE /api_keys, GET /api_keys (list), GET /api_keys/{id}, GET /billing/balance, GET /billing/usage.

A leaf app should almost always use INFERENCE keys — per-app, per-user, with consumption caps.

GET /api_keys

curl https://api.venice.ai/api/v1/api_keys \
  -H "Authorization: Bearer $ADMIN_KEY"

Returns:

{
  "object": "list",
  "data": [
    {
      "id": "uuid",
      "apiKeyType": "INFERENCE",
      "description": "backend prod",
      "createdAt": "2025-10-01T12:00:00Z",
      "expiresAt": null,
      "lastUsedAt": "2026-04-20T10:05:00Z",
      "last6Chars": "2V2jNW",
      "consumptionLimits": { "usd": 50, "diem": 10 },
      "usage": { "trailingSevenDays": { "usd": "4.20", "diem": "0.00" } }
    }
  ]
}

The full secret is never returned on list — only last6Chars.

POST /api_keys — create

curl https://api.venice.ai/api/v1/api_keys \
  -H "Authorization: Bearer $ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "apiKeyType": "INFERENCE",
    "description": "backend prod",
    "expiresAt": "2026-12-31T23:59:59Z",
    "consumptionLimit": { "usd": 50, "diem": 10 }
  }'

Response includes the one-time apiKey secret:

{
  "success": true,
  "data": {
    "id": "uuid",
    "apiKey": "VENICE_INFERENCE_KEY_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "apiKeyType": "INFERENCE",
    "description": "backend prod",
    "expiresAt": "2026-12-31T23:59:59Z",
    "consumptionLimit": { "usd": 50, "diem": 10 }
  }
}

Save it immediately — Venice won't show the secret again. If you lose it, delete and re-create.

Required

  • apiKeyType
  • description

Optional

  • expiresAt — empty string or ISO 8601 date/datetime. Omit for non-expiring.
  • consumptionLimit.usd / .diem — per-epoch caps. Null means no cap on that currency.
  • consumptionLimit.vcudeprecated (legacy Diem). Use diem instead.

PATCH /api_keys — update

curl -X PATCH https://api.venice.ai/api/v1/api_keys \
  -H "Authorization: Bearer $ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "id": "uuid", "description": "renamed", "consumptionLimit": { "usd": 100 } }'

Only description, expiresAt, and consumptionLimit are mutable. Pass "expiresAt": "" or null to remove an expiration.

DELETE /api_keys?id=<uuid> — revoke

curl -X DELETE "https://api.venice.ai/api/v1/api_keys?id=uuid" \
  -H "Authorization: Bearer $ADMIN_KEY"

Returns {"success": true}. Revocation is immediate.

GET /api_keys/{id} — details

Returns one key's full metadata plus trailing-7-day usage. Useful for an admin dashboard row view.

GET /api_keys/rate_limits

curl https://api.venice.ai/api/v1/api_keys/rate_limits \
  -H "Authorization: Bearer $VENICE_API_KEY"

Returns for the calling key:

{
  "data": {
    "accessPermitted": true,
    "apiTier": { "id": "paid", "isCharged": true },
    "balances": { "USD": 50.23, "DIEM": 100.023 },
    "keyExpiration": "2025-06-01T00:00:00Z",
    "nextEpochBegins": "2025-05-07T00:00:00.000Z",
    "rateLimits": [
      {
        "apiModelId": "zai-org-glm-5-1",
        "rateLimits": [
          { "type": "RPM", "amount": 100 },
          { "type": "TPM", "amount": 200000 },
          { "type": "RPD", "amount": 10000 }
        ]
      }
    ]
  }
}

Use it to:

  • Display current balances in-app.
  • Warm-gate calls when the relevant model's RPM cap is near.
  • Know when the next epoch resets (DIEM, bundled credits).

GET /api_keys/rate_limits/log

Returns the last 50 rate-limit breaches. Response is wrapped as { object: "list", data: [...] }:

{
  "object": "list",
  "data": [
    { "apiKeyId": "...", "modelId": "zai-org-glm-5-1", "rateLimitType": "RPM",
      "rateLimitTier": "paid", "timestamp": "2026-04-20T12:34:56Z" }
  ]
}

Feed these into your monitoring when tuning concurrency.

Web3 API keys — two-step wallet flow

Lets a wallet that holds sVVV mint a classic Bearer API key. No Venice account required.

1. GET /api_keys/generate_web3_key

curl https://api.venice.ai/api/v1/api_keys/generate_web3_key

Returns { success: true, data: { token: "<jwt-ish token>" } }.

2. Sign the token with your wallet, then POST /api_keys/generate_web3_key

import { Wallet } from 'ethers'

const { data: { token } } = await fetch(`${base}/api_keys/generate_web3_key`).then(r => r.json())
const wallet = new Wallet(process.env.WALLET_KEY!)
const signature = await wallet.signMessage(token)

const res = await fetch(`${base}/api_keys/generate_web3_key`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    apiKeyType: 'INFERENCE',
    description: 'Web3 API Key',
    address: wallet.address,
    signature,
    token,
    consumptionLimit: { usd: 50 },
  }),
})

const { data } = await res.json()
console.log(data.apiKey) // save this once

The returned apiKey behaves exactly like a normal Bearer key.

Recipes

Per-customer keys with $5 USD limit

await fetch(`${base}/api_keys`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${ADMIN_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    apiKeyType: 'INFERENCE',
    description: `cust:${customerId}`,
    consumptionLimit: { usd: 5 },
  }),
})

Rotate monthly; revoke on churn.

Health-check for a key

const { data } = await fetch(`${base}/api_keys/rate_limits`, {
  headers: { Authorization: `Bearer ${key}` },
}).then(r => r.json())

if (!data.accessPermitted) alert('Key blocked — top up or change tier')

Errors

Code Meaning
400 Bad body (e.g. missing apiKeyType, malformed expiresAt), or attempting to create when you already have 500 active keys.
401 Missing / bad / non-admin key for admin-only routes.
429 Exceeded 20 creates/min.
500 Transient; retry.

Gotchas

  • The secret is returned exactly once, in the POST response. Losing it = delete + recreate.
  • consumptionLimit is per epoch (day / reset cycle), not per call.
  • INFERENCE keys can't call admin-only routes (POST/PATCH/DELETE /api_keys, GET /api_keys, GET /api_keys/{id}, GET /billing/balance, GET /billing/usage). They can call GET /api_keys/rate_limits and /api_keys/rate_limits/log for themselves. Use a separate ADMIN key for management.
  • vcu is legacy — use diem.
  • expiresAt of empty string "" means "no expiration" in CREATE; on UPDATE it removes an existing one.
  • Rate-limit log is capped at 50 entries — pull it frequently if debugging bursts.
  • The Web3 key flow requires wallet holdings of sVVV; otherwise the signing step is rejected.
提供Venice.ai API的高层概览,涵盖基础URL、两种认证方式(API Key与x402钱包)、端点分类及响应头。适用于初次集成、认证选型或快速查找对应任务的API端点。
首次对接Venice.ai API 选择API密钥或x402钱包认证 查询特定任务对应的API端点 理解通用响应头含义
skills/veniceai_skills/venice-api-overview/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-api-overview -g -y
SKILL.md
Frontmatter
{
    "name": "venice-api-overview",
    "description": "High-level map of the Venice.ai API - base URL, authentication modes, endpoint categories, response headers, pricing model, error shape, and versioning. Load this first when starting any Venice integration."
}

Venice API Overview

Venice.ai is an OpenAI-compatible inference platform for text, image, audio, video, and embeddings. One API — two ways to pay: a traditional API key (Pro account), or a wallet (x402, USDC on Base, no account required).

Use when

  • You're writing code against api.venice.ai for the first time.
  • You need to decide between API-key and x402/wallet authentication.
  • You want a quick map of which endpoint to call for which task.
  • You need to understand the common response headers (X-Balance-Remaining, PAYMENT-REQUIRED, etc.).

Base URL

All endpoints live under:

https://api.venice.ai/api/v1

The OpenAPI spec is distributed at outerface/swagger.yaml (current version 20260420.235001).

Authentication (pick one per request)

Scheme Header Best for
BearerAuth Authorization: Bearer <VENICE_API_KEY> Server-side apps, dashboards, usage analytics, bundled credits
siwx (x402) X-Sign-In-With-X: <base64 SIWE JSON> No account, pay-as-you-go with USDC on Base, serverless / agents

Every inference endpoint accepts either — see venice-auth.

# Bearer
curl https://api.venice.ai/api/v1/models \
  -H "Authorization: Bearer $VENICE_API_KEY"

# x402 / SIWE (one-liner via the SDK)
import { VeniceClient } from 'venice-x402-client'
const v = new VeniceClient(process.env.WALLET_KEY)
await v.models.list()

Endpoint map

Inference

Category Endpoints Skill
Chat POST /chat/completions venice-chat
Responses (Alpha) POST /responses venice-responses
Embeddings POST /embeddings venice-embeddings
Image gen POST /image/generate, POST /images/generations, GET /image/styles venice-image-generate
Image edit POST /image/edit, POST /image/multi-edit, POST /image/upscale, POST /image/background-remove venice-image-edit
TTS POST /audio/speech venice-audio-speech
STT POST /audio/transcriptions venice-audio-transcription
Music (async) POST /audio/quote, /audio/queue, /audio/retrieve, /audio/complete venice-audio-music
Video (async) POST /video/quote, /video/queue, /video/retrieve, /video/complete, /video/transcriptions venice-video

Catalog

Category Endpoints Skill
Models GET /models, /models/traits, /models/compatibility_mapping venice-models
Characters GET /characters, /characters/{slug}, /characters/{slug}/reviews venice-characters

Account, billing, wallet

Category Endpoints Skill
API keys `GET POST
Billing GET /billing/balance, /billing/usage, /billing/usage-analytics venice-billing
x402 wallet GET /x402/balance/{wallet}, POST /x402/top-up, GET /x402/transactions/{wallet} venice-x402

Utility

Category Endpoints Skill
Crypto RPC proxy GET /crypto/rpc/networks, POST /crypto/rpc/{network} venice-crypto-rpc
Augment POST /augment/text-parser, /augment/scrape, /augment/search venice-augment

Response headers to watch

Header When Meaning
X-Balance-Remaining x402 inference success USDC credits left, e.g. "4.230000"
X-RateLimit-Limit-* / X-RateLimit-Remaining-* all inference your current per-minute/day caps
PAYMENT-REQUIRED 402 on x402 inference base64 JSON with top-up + SIWX challenge (x402 v2)
Content-Encoding 200 when client sent Accept-Encoding: gzip, br compression (embeddings, chat)

Pricing model at a glance

  • Pricing is dynamic per request, metered in USD.
  • Paid inference endpoints in the spec carry an x-payment-info block with min and max bounds in USD (typically min: 0.001, max: 10.00; higher for bulk video/audio). Read-only discovery routes like GET /models, /models/traits, and /models/compatibility_mapping do not.
  • Pro (Bearer) accounts draw from DIEM (staked credits), USD balance, and bundled credits in priority order.
  • x402 (wallet) users draw from a prepaid USDC credit balance on Base.
  • The authoritative per-model price is on GET /modelsmodel_spec.pricing (when present — video models omit it; use /video/quote for video pricing) (see venice-models).

Standard error shape

Every error body follows one of:

{ "error": "Human-readable message" }

or, for 400 validation errors:

{ "error": "...", "details": { "fieldName": { "_errors": ["Field is required"] } } }

402 on x402 adds structured topUpInstructions and siwxChallenge. See venice-errors for the full table and retry strategy.

OpenAI compatibility — what works and what doesn't

  • Drop-in: /chat/completions, /embeddings, /images/generations, /audio/speech, /audio/transcriptions, /models.
  • Ignored but accepted for compat: user, store.
  • Venice-only extensions live under:
    • venice_parameters (chat completions)
    • venice_parameters is rejected on /responses — use headers / native fields instead
  • Model feature suffixes (e.g. zai-org-glm-5-1:enable_web_search=on, kimi-k2-6:strip_thinking_response=true&disable_thinking=true) flip venice_parameters via the model ID — see venice-chat.

Versioning

  • info.version in swagger.yaml is a timestamp (YYYYMMDD.HHMMSS). There is no /v2; features roll forward on the single /api/v1 surface and are guarded by:
    • Alpha/Beta tags in endpoint descriptions (e.g. /responses, Billing).
    • x-guidance / model capability flags on /models.
  • Always check the model's model_spec.capabilities from GET /models for feature flags (supportsWebSearch, supportsReasoning, supportsE2EE, supportsXSearch, supportsMultipleImages, supportsFunctionCalling, supportsAudioInput, supportsVideoInput, …) before relying on a feature.

Fast start checklist

  1. Read venice-auth and choose Bearer vs x402.
  2. GET /models — pick a model and note its model_spec.constraints and model_spec.pricing.
  3. Wire up one happy-path call from the matching skill.
  4. Add error handling using venice-errors (402, 422, 429).
  5. Hook up observability via X-Balance-Remaining / /billing/usage / /x402/transactions.
通过Venice API异步生成音乐或长音频。涵盖报价、入队、轮询状态及完成的完整生命周期,支持歌词、人声、时长等参数配置,适用于需长时间生成的场景。
需要生成歌曲、广告配乐、背景音乐或长段旁白 模型按时长或字符计费且需预先报价 预计生成时间超过20秒,同步调用可能超时
skills/veniceai_skills/venice-audio-music/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-audio-music -g -y
SKILL.md
Frontmatter
{
    "name": "venice-audio-music",
    "description": "Async music \/ audio-track generation via Venice. Covers the \/audio\/quote + \/audio\/queue + \/audio\/retrieve + \/audio\/complete lifecycle, lyrics vs instrumental, voice selection, duration, language, speed, model capability probing, and webhook-free polling."
}

Venice Music / Async Audio

Music (and long-form voice) generation is asynchronous. The flow is:

POST /api/v1/audio/quote      → price in USD
POST /api/v1/audio/queue      → { queue_id }      (funds reserved)
POST /api/v1/audio/retrieve   → status or binary audio
POST /api/v1/audio/complete   → finalize & delete media

For short text-to-speech, use the synchronous venice-audio-speech endpoint instead.

Use when

  • You need songs, jingles, score, soundscape, or long narration.
  • The selected model uses duration-based or character-based pricing and must be priced before submission.
  • The expected generation time is long enough (> 20 s) that sync call would time out.

Lifecycle

1. POST /audio/quote — price it first

curl https://api.venice.ai/api/v1/audio/quote \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "elevenlabs-music",
    "duration_seconds": 60
  }'

Response: {"quote": 0.48} (USD).

Field Notes
model Required. Music/audio model from GET /models?type=music.
duration_seconds Integer or numeric string. Only if the model reports duration metadata.
character_count Required for models with pricing.per_thousand_characters (long narration).

2. POST /audio/queue — enqueue

curl https://api.venice.ai/api/v1/audio/queue \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "elevenlabs-music",
    "prompt": "Uplifting indie-folk acoustic track, 120 BPM, major key.",
    "lyrics_prompt": "Verse 1: Walking through the city lights...\nChorus: We are the dreamers...",
    "duration_seconds": 60,
    "voice": "Aria",
    "language_code": "en",
    "speed": 1.0,
    "force_instrumental": false,
    "lyrics_optimizer": false
  }'

Response: { "model": "...", "queue_id": "uuid" }.

Field Notes
model Required.
prompt Required. Describe genre, mood, tempo, instruments. Length caps in /models.
lyrics_prompt Lyrics. Required when lyrics_required=true, rejected when supports_lyrics=false.
duration_seconds Integer or string. Model-dependent.
force_instrumental Only when supports_force_instrumental=true.
lyrics_optimizer Auto-generate lyrics from prompt. Requires supports_lyrics_optimizer=true. lyrics_prompt must be empty.
voice For voice-enabled models. See voices + default_voice in /models.
language_code ISO 639-1. Requires supports_language_code=true.
speed Requires supports_speed=true. Use model's min_speed/max_speed.

3. POST /audio/retrieve — poll status / download

curl https://api.venice.ai/api/v1/audio/retrieve \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"elevenlabs-music","queue_id":"..."}' \
  --output track.mp3
  • If still processing: JSON {"status":"PROCESSING","average_execution_time":...,"execution_duration":...}.
  • If done: binary audio body (audio/mpeg or similar). Save the bytes.
  • Set delete_media_on_completion: true to skip step 4.

Poll every 2–5 s; use average_execution_time (ms, P80) as a guideline for your first poll delay.

4. POST /audio/complete — cleanup

curl https://api.venice.ai/api/v1/audio/complete \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"elevenlabs-music","queue_id":"..."}'

Removes the media from Venice storage after you've downloaded it. Required unless you used delete_media_on_completion: true on retrieve.

Full loop (TypeScript)

const base = 'https://api.venice.ai/api/v1'
const headers = {
  Authorization: `Bearer ${process.env.VENICE_API_KEY}`,
  'Content-Type': 'application/json',
}

async function generateTrack() {
  // 1. Quote
  const quote = await fetch(`${base}/audio/quote`, {
    method: 'POST', headers,
    body: JSON.stringify({ model: 'elevenlabs-music', duration_seconds: 60 }),
  }).then(r => r.json())
  console.log('price:', quote.quote)

  // 2. Queue
  const { queue_id, model } = await fetch(`${base}/audio/queue`, {
    method: 'POST', headers,
    body: JSON.stringify({
      model: 'elevenlabs-music',
      prompt: 'Uplifting indie-folk acoustic track, 120 BPM.',
      duration_seconds: 60,
      force_instrumental: true,
    }),
  }).then(r => r.json())

  // 3. Poll
  while (true) {
    const res = await fetch(`${base}/audio/retrieve`, {
      method: 'POST', headers,
      body: JSON.stringify({ model, queue_id }),
    })
    const ct = res.headers.get('content-type') ?? ''
    if (ct.startsWith('audio/')) {
      const buf = Buffer.from(await res.arrayBuffer())
      await fs.writeFile('track.mp3', buf)
      break
    }
    const { status } = await res.json()
    if (status !== 'PROCESSING') throw new Error(`unexpected ${status}`)
    await new Promise(r => setTimeout(r, 3000))
  }

  // 4. Complete
  await fetch(`${base}/audio/complete`, {
    method: 'POST', headers,
    body: JSON.stringify({ model, queue_id }),
  })
}

Capability probing

Before calling /audio/queue, inspect the model entry returned by GET /models?type=music — each row's model_spec exposes (among other fields):

  • supports_lyrics, lyrics_required, supports_lyrics_optimizer
  • supports_force_instrumental, supports_speed, supports_language_code
  • voices[], default_voice
  • min_prompt_length, prompt_character_limit
  • min_speed, max_speed
  • pricing.generation (per-job), pricing.per_second (per second generated), pricing.per_thousand_characters (character-priced narration), or pricing.durations (duration-tiered map: { "<tier>": { usd, diem, min_seconds, max_seconds } }) — each model uses one of these shapes

Errors

Code Meaning
400 Wrong params (lyrics on an instrumental-only model, duration_seconds outside allowed range, voice not in model's list).
401 Auth / Pro-only model.
402 Insufficient balance. Bearer → INSUFFICIENT_BALANCE; x402 → PAYMENT_REQUIRED.
404 On retrieve/complete: unknown / expired queue_id.
422 Content policy violation. ContentViolationError may include suggested_prompt.
429 Rate limited.
500 / 503 Inference or capacity issue.

Gotchas

  • Quote before queue — music is pay-per-second; unexpected duration_seconds can blow through a budget. Use /audio/quote to gate the queue call against your available balance (/billing/balance or /x402/balance/...).
  • queue_id is UUIDv4. Store it alongside the model — both are required for every subsequent call.
  • Media URLs are ephemeral. Download during retrieve and store yourself; after complete, Venice deletes the file.
  • lyrics_optimizer: true and a non-empty lyrics_prompt is a 400.
  • Poll rate: don't hammer /retrieve. 2–5 s is plenty — the job queue is the same regardless of poll frequency.
  • execution_duration from the retrieve status is cumulative (ms since enqueue); average_execution_time is the P80 expected total.
通过POST /api/v1/audio/speech将文本转换为语音,支持Kokoro、xAI等模型,提供mp3/wav等格式及流式输出。
需要文本转语音生成旁白或UI音频 指定特定声音家族或语言风格
skills/veniceai_skills/venice-audio-speech/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-audio-speech -g -y
SKILL.md
Frontmatter
{
    "name": "venice-audio-speech",
    "description": "Generate speech from text via POST \/audio\/speech. Covers TTS models (Kokoro, Qwen 3, xAI, Inworld, Chatterbox, Orpheus, ElevenLabs Turbo, MiniMax, Gemini Flash), voices per family, output formats (mp3\/opus\/aac\/flac\/wav\/pcm), streaming, prompt\/emotion styling, temperature\/top_p, and language hints."
}

Venice TTS (/audio/speech)

POST /api/v1/audio/speech converts text to an audio stream or file. OpenAI-compatible — the OpenAI SDK's audio.speech.create() works as a drop-in.

Use when

  • You want narration, voice replies, or UI audio from text.
  • You need a specific voice family (ElevenLabs, Kokoro, xAI, Qwen 3, Orpheus, Chatterbox, MiniMax, Inworld, Gemini Flash).
  • You want streaming audio returned sentence-by-sentence.
  • You need style/emotion control on supported models.

For music generation (lyrics + instrumental), see venice-audio-music. For transcription (audio → text), see venice-audio-transcription.

Minimal request

curl https://api.venice.ai/api/v1/audio/speech \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tts-xai-v1",
    "voice": "eve",
    "input": "Hello, welcome to Venice Voice.",
    "response_format": "mp3",
    "speed": 1.0,
    "streaming": false
  }' --output hello.mp3

Response is the raw audio (Content-Type matches response_format).

Request schema

Field Type Default Notes
input string Required. Up to 4096 characters.
model enum tts-kokoro (OpenAPI schema default) See model list below. tts-xai-v1 is the recommended frontier default; pick the model that fits your voice + language needs.
voice enum model-specific (e.g. eve for tts-xai-v1) Voice is model-specific — wrong combo = 400. See voice families.
response_format mp3 / opus / aac / flac / wav / pcm mp3 pcm returns 24 kHz signed-16 LE for pipelines.
speed number 1.0 Range 0.25–4.0.
streaming bool false true → streamed sentence-by-sentence as audio continues to generate.
language string Optional hint. Accepted form depends on model (Qwen 3 = full names like English; xAI / ElevenLabs = ISO 639-1 like en; MiniMax = full names). Unsupported values silently ignored.
prompt string, ≤ 500 Emotion / style cue. Only for models with supportsPromptParam (Qwen 3 currently). Examples: "Very happy.", "Sad and slow.".
temperature 0–2 Sampling temperature. Only for models with supportsTemperatureParam (Qwen 3, Orpheus, Chatterbox HD).
top_p 0–1 Only Qwen 3 currently.

Models

Model ID Family Highlights
tts-xai-v1 xAI Recommended default. Conversational style, ISO 639-1 language hints.
tts-kokoro Kokoro OpenAPI schema default. Multilingual, many voices across languages.
tts-qwen3-0-6b / tts-qwen3-1-7b Qwen 3 Emotion control via prompt, temperature, top_p.
tts-inworld-1-5-max Inworld Character-driven voices (Craig, Ashley, …).
tts-chatterbox-hd Chatterbox HD voices (Aurora, Blade, …), temperature.
tts-orpheus Orpheus Conversational (tara, leah, jess, leo, …), temperature.
tts-elevenlabs-turbo-v2-5 ElevenLabs Turbo Rachel, Aria, Charlotte, Roger, …
tts-minimax-speech-02-hd MiniMax WiseWoman, DeepVoiceMan, …
tts-gemini-3-1-flash Gemini Flash Star-named voices (Achernar, Achird, Zephyr, …).

Always inspect the entry for your model in GET /models?type=ttsmodel_spec.voices is the authoritative voice list. Per-model toggles like supportsPromptParam, supportsTemperatureParam, supportsTopPParam live on the internal model definitions but are not currently exposed on /models — treat the request schema below (instructions, temperature, top_p) as the support matrix.

Voice families (by prefix)

  • Kokoro — lowercase + language/gender prefix:
    • af_*, am_* — American female / male
    • bf_*, bm_* — British female / male
    • zf_*, zm_* — Chinese
    • ff_*, hf_*, hm_*, if_*, im_*, jf_*, jm_*, pf_*, pm_*, ef_*, em_* — French, Hindi, Italian, Japanese, Portuguese, Spanish
    • Examples: af_sky, af_bella, am_adam, bm_george, zf_xiaoxiao
  • Qwen 3Vivian, Serena, Ono_Anna, Sohee, Uncle_Fu, Dylan, Eric, Ryan, Aiden
  • xAIeve, ara, rex, sal, leo
  • Orpheustara, leah, jess, mia, zoe, dan, zac
  • InworldCraig, Ashley, Olivia, Sarah, Elizabeth, Priya, Alex, Edward, Theodore, Ronald, Mark, Hades, Luna, Pixie
  • ChatterboxAurora, Britney, Siobhan, Vicky, Blade, Carl, Cliff, Richard, Rico
  • ElevenLabs TurboRachel, Aria, Laura, Charlotte, Alice, Matilda, Jessica, Lily, Roger, Charlie, George, Callum, River, Liam, Will, Chris, Brian, Daniel, Bill
  • MiniMaxWiseWoman, FriendlyPerson, InspirationalGirl, CalmWoman, LivelyGirl, LovelyGirl, SweetGirl, ExuberantGirl, DeepVoiceMan, CasualGuy, PatientMan, YoungKnight, DeterminedMan, ImposingManner, ElegantMan
  • Gemini 3 Flash — star names: Achernar, Achird, Algenib, Algieba, Alnilam, Aoede, Autonoe, Callirrhoe, Charon, Despina, Enceladus, Erinome, Fenrir, Gacrux, Iapetus, Kore, Laomedeia, Leda, Orus, Pulcherrima, Puck, Rasalgethi, Sadachbia, Sadaltager, Schedar, Sulafat, Umbriel, Vindemiatrix, Zephyr, Zubenelgenubi

Pass a voice that isn't in the chosen model's list and you get 400.

Streaming

{
  "model": "tts-xai-v1",
  "voice": "eve",
  "input": "Hello, this is a long document to narrate. ...",
  "streaming": true,
  "response_format": "mp3"
}

With streaming: true, the HTTP body is a chunked audio stream. Decode as it arrives — useful for latency-sensitive UIs. response_format: pcm pairs well with browser Web Audio API for raw playback.

OpenAI SDK

import OpenAI from 'openai'
import fs from 'node:fs/promises'

const client = new OpenAI({
  apiKey: process.env.VENICE_API_KEY,
  baseURL: 'https://api.venice.ai/api/v1',
})

const mp3 = await client.audio.speech.create({
  model: 'tts-xai-v1',
  voice: 'eve',
  input: 'Hello from Venice.',
  response_format: 'mp3',
})

await fs.writeFile('hello.mp3', Buffer.from(await mp3.arrayBuffer()))

Emotion / style (Qwen 3 only)

{
  "model": "tts-qwen3-1-7b",
  "voice": "Vivian",
  "input": "We did it!",
  "prompt": "Excited and energetic.",
  "temperature": 0.9,
  "top_p": 0.95
}

For other families, emotion comes from the voice choice itself (e.g. Inworld Hades vs Pixie). prompt / temperature / top_p are silently ignored.

Errors

Code Meaning
400 Bad voice/model combo, input too long (>4096), language hint rejected by a strict model, invalid voice for the chosen model.
401 Auth / Pro-only model.
402 Insufficient balance.
429 Rate limited.
500 / 503 Inference / capacity issue — retry with jitter.

Gotchas

  • input hard cap is 4096 chars. For books / long content, split on sentence boundaries and concatenate audio client-side.
  • streaming: true + SDKs: some OpenAI SDK versions don't expose streaming for audio.speech.create; call the REST endpoint directly and consume the HTTP body.
  • speed compounds with model internal speech rate — extreme values (0.25, 4.0) often sound unnatural; keep within 0.8–1.3 for narration.
  • Voice names are case-sensitive (eveEVE, af_skyAF_SKY).
通过POST接口将音频文件转录为文本,兼容OpenAI SDK。支持多种模型(如Parakeet、Whisper)及格式,可获取带时间戳的JSON或纯文本结果,适用于语音笔记、会议等场景。
需要将语音、会议录音或播客转换为文字 需要生成字幕或章节的时间戳信息 使用OpenAI SDK进行音频转写操作
skills/veniceai_skills/venice-audio-transcription/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-audio-transcription -g -y
SKILL.md
Frontmatter
{
    "name": "venice-audio-transcription",
    "description": "Transcribe audio files to text via POST \/audio\/transcriptions. Covers supported models (Parakeet, Whisper, Wizper, Scribe, xAI STT), supported formats (wav\/flac\/m4a\/aac\/mp4\/mp3\/ogg\/webm), response formats (json\/text), timestamps, and language hints. OpenAI-compatible multipart."
}

Venice Transcription (/audio/transcriptions)

POST /api/v1/audio/transcriptions takes an audio file and returns text. It's OpenAI-compatible with multipart/form-data — the OpenAI SDK's audio.transcriptions.create() works unchanged.

Use when

  • You need STT (speech-to-text) for voice notes, meetings, podcasts, short audio.
  • You need timestamps for subtitles / chapters.
  • You want to pick between fast local-style models (Parakeet) and large multilingual ones (Whisper, Wizper, Scribe).

For long video / YouTube transcription, see venice-video's /video/transcriptions (takes a public video URL directly).

Minimal request

curl https://api.venice.ai/api/v1/audio/transcriptions \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -F "file=@./meeting.m4a" \
  -F "model=nvidia/parakeet-tdt-0.6b-v3" \
  -F "response_format=json" \
  -F "timestamps=false"
{ "text": "Alright everyone, let's kick off the meeting..." }

With timestamps=true, json format also returns segment/word timings (schema is model-specific).

Request (multipart/form-data)

Field Type Default Notes
file binary Required. Audio file. Supported: wav, wave, flac, m4a, aac, mp4, mp3, ogg, webm. Base64 is not accepted — upload as a real file.
model enum nvidia/parakeet-tdt-0.6b-v3 See models below.
response_format json / text json text returns text/plain body.
timestamps bool false Include segment/word timestamps (JSON only).
language string ISO 639-1 hint (e.g. en, ja). Only Whisper-family models honor it; others auto-detect.

Models

Model ID Notes
nvidia/parakeet-tdt-0.6b-v3 Default. Fast, English-first, great for real-time-ish flows.
openai/whisper-large-v3 Large multilingual, honors language hint.
fal-ai/wizper Whisper variant, competitive on quality/latency tradeoff.
elevenlabs/scribe-v2 ElevenLabs Scribe, strong on noisy audio.
stt-xai-v1 xAI Speech-to-Text.

GET /models?type=asr returns the current catalog. ASR pricing is pricing.per_audio_second.usd — cost scales with audio duration.

OpenAI SDK

import OpenAI from 'openai'
import fs from 'node:fs'

const client = new OpenAI({
  apiKey: process.env.VENICE_API_KEY,
  baseURL: 'https://api.venice.ai/api/v1',
})

const out = await client.audio.transcriptions.create({
  file: fs.createReadStream('meeting.m4a'),
  model: 'openai/whisper-large-v3',
  response_format: 'json',
  language: 'en',
  // @ts-expect-error — Venice-specific extra, passes through multipart
  timestamps: true,
})

console.log(out.text)

Batch / long files

Venice doesn't expose native chunking. For files > ~30 min, split client-side on silence with ffmpeg or pydub, transcribe each chunk, then concatenate with offset timestamps.

ffmpeg -i long.mp3 -f segment -segment_time 600 -c copy chunk_%03d.mp3

Errors

Code Meaning
400 Bad params, unsupported audio format, empty file, or file larger than 25 MB (this endpoint returns 400 with "Maximum size is 25MB", not 413).
401 Auth / Pro-only.
402 Insufficient balance.
415 Wrong Content-Type — must be multipart/form-data.
422 Validation / upstream ASR error (e.g. zero-length audio, upstream provider 422). Not a "content policy" code on this path.
429 Rate limited.
500 / 503 Transient; retry with jitter.

Gotchas

  • file must be uploaded as a real multipart file part. JSON + base64 is not supported here.
  • Timestamps are only surfaced in the JSON response shapes (json, verbose_json, srt, vtt). With response_format: text the handler returns a plain text/plain body containing just the transcript — you'll lose any timestamp data, so pick verbose_json / srt / vtt when you need timings.
  • language is Whisper-specific. Parakeet / Scribe ignore it and auto-detect.
  • Peak concurrency limits apply — on 429, back off; big batches should throttle to ~5 parallel requests.
  • Content-policy rejection on the transcript is returned as 422 with an error string; it does not surface suggested_prompt on this path.
提供文档解析、网页抓取和搜索三个辅助接口,支持PDF/Word等格式提取文本、URL转Markdown及多引擎搜索。具备零数据保留隐私特性,适用于Agent流水线增强。
需要从PDF、DOCX或XLSX文件中提取文本内容 需要将指定URL的网页内容转换为Markdown格式 需要执行网络搜索并获取结构化的标题、链接和内容摘要
skills/veniceai_skills/venice-augment/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-augment -g -y
SKILL.md
Frontmatter
{
    "name": "venice-augment",
    "description": "Venice augmentation endpoints for agent pipelines. Covers POST \/augment\/text-parser (extract text from PDF\/DOCX\/XLSX\/plain text, multipart, up to 25MB, JSON or plain text response), POST \/augment\/scrape (fetch a URL and return markdown; blocks X\/Reddit), and POST \/augment\/search (Brave ZDR or anonymized Google; structured title\/url\/content\/date results, up to 20 per query). Privacy (zero data retention), rate limits, and error shapes."
}

Venice Augment (text parse / scrape / search)

Three lightweight helpers for agent pipelines that need document text, web pages, or search results without spinning up your own crawler.

Endpoint Input Output Privacy
POST /augment/text-parser multipart/form-data file (PDF / DOCX / XLSX / plain text, ≤ 25 MB) { text, tokens } JSON or plain text In-memory only, zero retention
POST /augment/scrape { url } { url, content (markdown), format: "markdown" } Zero retention
POST /augment/search { query, limit?, search_provider? } { query, results: [{ title, url, content, date }] } Brave ZDR / Google anonymized; zero retention

All three accept Bearer API key or SIWE (x402 wallet). All three are priced dynamically ($0.001–$10.00).

POST /augment/text-parser — extract text from documents

Request

Always multipart/form-data:

Field Notes
file Required. PDF, DOCX, XLSX, or plain text. Max 25 MB.
response_format json (default) or text.
curl -X POST https://api.venice.ai/api/v1/augment/text-parser \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -F "file=@./contract.pdf" \
  -F "response_format=json"

Response

response_format=json:

{
  "text": "…extracted plaintext…",
  "tokens": 3821
}

response_format=text — raw plaintext body (Content-Type: text/plain).

Tips

  • tokens is the count of the extracted text — use it to pre-budget a downstream chat request.
  • Scanned image PDFs are not OCR'd. Run images through a vision model via /chat/completions instead.
  • Documents are processed in memory only and content is not retained after the response. (Operational metadata like request IDs and error traces may still be logged for debugging — this is a no-content-retention guarantee, not a zero-log guarantee.)

POST /augment/scrape — URL → markdown

Request

{ "url": "https://example.com/article" }
curl -X POST https://api.venice.ai/api/v1/augment/scrape \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'

Response

{
  "url": "https://example.com",
  "content": "# Example Domain\n\nThis domain is for use in …",
  "format": "markdown"
}

Tips

  • Blocked sites — X/Twitter and Reddit reject automated access and return 400 immediately. Use enable_x_search or enable_web_search on /chat/completions for those.
  • Some sites may return a partial body. Verify with the returned content length before piping into a model.
  • Use together with /chat/completions: scrape → feed markdown into messages → summarize.
  • For bulk scraping, issue requests in parallel; each is billed independently.

POST /augment/search — web search

Request

Field Notes
query 1–400 chars. Required.
limit 1–20. Default 10.
search_provider "brave" (default, ZDR) or "google" (anonymized).
curl -X POST https://api.venice.ai/api/v1/augment/search \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "venice ai api pricing",
    "limit": 5,
    "search_provider": "brave"
  }'

Response

{
  "query": "venice ai api pricing",
  "results": [
    {
      "title": "Pricing — Venice.ai",
      "url": "https://venice.ai/pricing",
      "content": "Venice offers per-token pricing …",
      "date": "2026-04-10"
    }
  ]
}

Providers

Provider Retention Bias / filter
brave (default) Zero Data Retention — Brave never stores queries. Safesearch defaults, Brave Index.
google Anonymized — proxied through Venice so Google doesn't see you; Venice doesn't log queries. Google ranking.

Tips

  • Pair with /chat/completions + venice_parameters.enable_web_citations to generate cited answers. See venice-chat.
  • For "search + read" pipelines, feed results[*].url into /augment/scrape in parallel.
  • query is validated as 1–400 chars. Anything longer is rejected (400 INVALID_REQUEST), not truncated.

Errors

Status Cause
400 Missing/oversized file, unsupported format, URL on a blocklist (X, Reddit), empty query, query > 400 chars.
401 Missing/invalid Bearer or SIWE.
402 Insufficient balance. x402 wallets receive the PAYMENT-REQUIRED header with base64 top-up instructions; Bearer users get INSUFFICIENT_BALANCE.
403 Unauthorized access.
429 Rate limit tripped. Back off with jitter.
500 Upstream fetch / parse failure. Safe to retry.

Response headers

  • X-Balance-Remaining — remaining x402 credit (x402 auth only).
  • Content-Encoding — present when Accept-Encoding: gzip, br is sent (text-parser + scrape outputs compress well).

Patterns

  • Document QA — Upload PDF via /augment/text-parser, pass text into a /chat/completions system message, ask questions.
  • Research agent/augment/search → parallel /augment/scrape/chat/completions with all markdown bodies.
  • Data extraction — XLSX via text-parser surfaces tab-delimited cell data you can then pipe to a model with response_format: { type: "json_schema", ... }.
  • Citation pipeline — Use /augment/search to pick sources, then give the chat model venice_parameters.enable_web_citations: true for inline [n] marks.
介绍Venice API的两种认证方式:Bearer密钥和x402钱包(SIWE)。涵盖密钥管理、计费规则、SIWE消息字段、TTL限制及SDK使用,指导用户根据场景选择认证方案。
首次调用Venice API 构建服务端集成或无账户钱包流程 遇到401认证失败需检查格式 手动实现SIWE签名
skills/veniceai_skills/venice-auth/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-auth -g -y
SKILL.md
Frontmatter
{
    "name": "venice-auth",
    "description": "Authenticate to the Venice API with a Bearer API key or with an x402 \/ SIWE wallet. Covers header formats, the SIWE message fields, TTL and nonce rules, the venice-x402-client SDK, and how to choose between the two modes."
}

Venice Authentication

Every Venice endpoint accepts one of two auth schemes, declared in the OpenAPI spec as BearerAuth and siwx. Both are first-class — pick whichever fits the deployment.

Use when

  • You're making your first call to api.venice.ai.
  • You're building a server-side integration (usually Bearer) or an agent / no-account wallet flow (x402).
  • You hit 401 Authentication failed and need to check header format.
  • You're implementing SIWE signing manually instead of using the SDK.

Option A — Bearer API key

Authorization: Bearer <VENICE_API_KEY>
  • Create keys at https://venice.ai/settings/api or via venice-api-keys.
  • Keys carry consumptionLimits (USD and/or DIEM caps) and apiKeyType (ADMIN or INFERENCE).
  • Billing draws from DIEM (staked), USD balance, and bundled credits in order.
  • Key types determine which endpoints are reachable — only ADMIN keys can manage other keys.
curl https://api.venice.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "zai-org-glm-5-1",
    "messages": [{"role":"user","content":"hello"}]
  }'

Use the Bearer scheme when you have a Venice account, want usage analytics (/billing/usage-analytics), want to issue scoped child keys, or need DIEM / bundled credit priority.

Option B — x402 wallet (SIWE)

Authenticate with an Ethereum wallet. No account needed. Pay per request in USDC on Base (chain ID 8453). Balance lives under your wallet address and is consumed automatically.

Header

X-Sign-In-With-X: <base64(json)>

Where the decoded JSON is:

{
  "address":   "0x... (checksummed)",
  "message":   "<SIWE message string from SiweMessage.prepareMessage()>",
  "signature": "0x... (hex)",
  "timestamp": 1712659200000,
  "chainId":   8453
}

SIWE message fields (EIP-4361)

Field Value
domain One of the allow-listed Venice domains: venice.ai, api.venice.ai, outerface.venice.ai, preview.venice.ai, staging.venice.ai (plus localhost in dev). The server's own generated challenge uses api.venice.ai.
uri Matching https://<domain> URL.
version "1"
address the wallet's checksummed address
statement "Sign in to Venice AI" (what the server's generated challenge uses — any string is accepted, this one keeps consent UX consistent).
nonce random 16-char hex, single-use per wallet
issuedAt / expirationTime ISO-8601. Server enforces a hard 5-minute window from issuedAt (expirationTime is informational only).
chainId 8453 — accepted as number (8453), numeric string ("8453"), or CAIP-2 ("eip155:8453").

The header is short-lived — generate a fresh one at most every ~4 minutes (server accepts up to 5 min from issuedAt). The payload timestamp must be within 30 seconds of the SIWE issuedAt, and issuedAt itself must not be more than 30 seconds ahead of server time. Nonces are single-use per wallet — reuse within ~5.5 minutes is rejected with X402_SIGN_IN_NONCE_REUSED.

Domain is validated against the allow-list above — not against the incoming request's Host header. Passing any allow-listed domain (e.g. api.venice.ai) is fine regardless of which Venice host you hit.

Manual signing (TypeScript)

import { Wallet } from 'ethers'
import { SiweMessage } from 'siwe'

const wallet = new Wallet(process.env.WALLET_KEY!)

function makeSiwxHeader() {
  const msg = new SiweMessage({
    domain: 'api.venice.ai',
    address: wallet.address,
    statement: 'Sign in to Venice AI',
    uri: 'https://api.venice.ai',
    version: '1',
    chainId: 8453,
    nonce: crypto.randomUUID().replace(/-/g, '').slice(0, 16),
    issuedAt: new Date().toISOString(),
    expirationTime: new Date(Date.now() + 4 * 60_000).toISOString(),
  })
  const message = msg.prepareMessage()
  const signature = wallet.signMessageSync(message)
  return btoa(JSON.stringify({
    address: wallet.address,
    message,
    signature,
    timestamp: Date.now(),
    chainId: 8453,
  }))
}

const res = await fetch('https://api.venice.ai/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Sign-In-With-X': makeSiwxHeader(),
  },
  body: JSON.stringify({
    model: 'zai-org-glm-5-1',
    messages: [{ role: 'user', content: 'hello' }],
  }),
})

SDK shortcut

npm install venice-x402-client
import { VeniceClient } from 'venice-x402-client'

const venice = new VeniceClient(process.env.WALLET_KEY!)

await venice.topUp(10)            // $10 USDC on Base (first time only)
const res = await venice.chat({
  model: 'zai-org-glm-5-1',
  messages: [{ role: 'user', content: 'Hello!' }],
})
console.log(res.choices[0].message.content)

VeniceClient and createAuthFetch handle SIWE signing, header rotation, and 402 top-up prompts automatically.

First-time top-up (wallet → credits)

POST /x402/top-up                # WITHOUT X-402-Payment header → returns payment requirements
→ sign a USDC transfer authorization with the x402 SDK (createPaymentHeader)
POST /x402/top-up                # WITH X-402-Payment header → credits land on your wallet address

See venice-x402 for the full flow.

Choosing between the two

Need Pick
Server-side dashboard with usage analytics Bearer
Scoped child keys, consumption limits per app Bearer
DIEM-staked users / bundled credits Bearer
Serverless function that pays per call x402
Agents with an on-chain budget, no account x402
End-user wallets authing directly (browser extension, mobile wallet) x402
Team sharing — one seed, many consumers Bearer (+ child keys)

Both schemes can co-exist: a Pro user may generate a Web3 API key via POST /api_keys/generate_web3_key that ties an on-chain wallet to an off-chain key with an EIP-191 signature. See venice-api-keys.

Common auth errors

Status Likely cause
401 Authentication failed bad/expired key, SIWE older than 5 min from issuedAt, payload.timestamp off by >30s, domain not in the Venice allow-list, unsupported chain id, nonce replayed. The server returns a specific code like X402_SIGN_IN_EXPIRED, X402_SIGN_IN_TIMESTAMP_MISMATCH, X402_SIGN_IN_DOMAIN_MISMATCH, X402_SIGN_IN_NONCE_REUSED, or X402_SIGN_IN_INVALID_CHAIN_ID (code always set; message may fall back to generic text for some codes).
402 x402 (no header) X-Sign-In-With-X is missing on an SIWE-gated route (/x402/balance, /x402/transactions). Add the header.
401 This model is only available to Pro users using x402 or an INFERENCE key on a gated model — switch to a Pro Bearer key
402 PAYMENT_REQUIRED (x402) wallet balance too low; read topUpInstructions and top up via /x402/top-up
402 INSUFFICIENT_BALANCE (Bearer) DIEM + USD + bundled credits are all empty; top up at venice.ai

Security hygiene

  • Bearer keys behave like passwords — store in a secret manager, rotate on compromise, scope via consumptionLimits.
  • SIWE requires a private key signer on the client side. For browsers, use a wallet provider (MetaMask, WalletConnect) — do not ship raw private keys.
  • Signed headers are valid 5 minutes from issuedAt; rotate every ~4 minutes. Never reuse a signed X-Sign-In-With-X header across hours or across machines. Nonces are tracked per wallet for ~5.5 min; replaying one is rejected with X402_SIGN_IN_NONCE_REUSED.
  • Rate limits are per-key (Bearer) or per-wallet (x402). See venice-api-keys and venice-errors.
Venice账单与用量分析技能,提供余额查询、分页使用记录及聚合分析接口。涵盖DIEM/USD/BUNDLED_CREDITS扣费优先级说明,支持JSON/CSV格式导出,需管理员密钥或认证访问。
查询Venice账户当前余额和消费状态 获取按请求分页的详细账单流水 查看按日期、模型或API密钥聚合的用量分析数据 导出Venice服务使用的CSV格式账单
skills/veniceai_skills/venice-billing/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-billing -g -y
SKILL.md
Frontmatter
{
    "name": "venice-billing",
    "description": "Venice billing and usage analytics - GET \/billing\/balance, GET \/billing\/usage (paginated per-request ledger, JSON or CSV), and GET \/billing\/usage-analytics (aggregated by date\/model\/key). Covers the DIEM\/USD\/BUNDLED_CREDITS consumption priority and building dashboards. (Beta)"
}

Venice Billing

Three read-only endpoints for account-level billing and analytics. All are under a Beta tag — schema/behavior may change.

Endpoint Purpose
GET /billing/balance Current canConsume flag, remaining DIEM & USD, epoch allocation.
GET /billing/usage Paginated per-request ledger. JSON or CSV.
GET /billing/usage-analytics Aggregated breakdowns: by date, model, API key.

All require Bearer auth (not x402 — for wallet balances, use venice-x402). GET /billing/balance and GET /billing/usage require an ADMIN key — an INFERENCE key gets 401. GET /billing/usage-analytics works on any authenticated key (scoped to the account behind the key).

Currency / priority

Venice debits from, in order:

  1. DIEM — staked credits (reset per epoch).
  2. BUNDLED_CREDITS — included in some Pro plans.
  3. USD — prepaid fiat balance.
  4. (VCU) — deprecated legacy DIEM.

consumptionCurrency on /billing/balance reports the current currency being consumed.

GET /billing/balance

curl https://api.venice.ai/api/v1/billing/balance \
  -H "Authorization: Bearer $VENICE_API_KEY"
{
  "canConsume": true,
  "consumptionCurrency": "DIEM",
  "balances": { "diem": 90.5, "usd": 25 },
  "diemEpochAllocation": 100
}
  • canConsume: false means both DIEM and USD buckets are empty on this endpoint — canConsume here is hasPositiveDiemBalance || usdBalance > 0 and does not factor in bundled credits (which are consulted during the actual request in getConsumableBalanceForRequest).
  • consumptionCurrency is "DIEM", "USD", or null (when neither applies).
  • balances.diem is null if not staking.
  • diemEpochAllocation is the ceiling for the current epoch — balances.diem / diemEpochAllocation = remaining fraction.

GET /billing/usage

Paginated per-request ledger.

curl "https://api.venice.ai/api/v1/billing/usage?limit=200&page=1&sortOrder=desc&currency=USD&startDate=2026-04-01T00:00:00Z&endDate=2026-04-21T23:59:59Z" \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Accept: application/json"

Query parameters

Param Notes
currency USD / VCU / DIEM / BUNDLED_CREDITS.
startDate / endDate ISO 8601 datetime.
limit 1–500. Default 200.
page Default 1.
sortOrder asc / desc on createdAt. Default desc.

Accept header

  • application/json (default) — paginated JSON.
  • text/csv — downloads billing-usage.csv (sets Content-Disposition).

Response (JSON)

{
  "warningMessage": "DIEM (formerly VCU) has been renamed...",
  "data": [
    {
      "timestamp": "2026-04-20T12:34:56Z",
      "sku": "zai-org-glm-5-1-llm-output-mtoken",
      "units": 0.000227,
      "pricePerUnitUsd": 2.8,
      "amount": -0.06356,
      "currency": "DIEM",
      "notes": "API Inference",
      "inferenceDetails": {
        "requestId": "chatcmpl-...",
        "promptTokens": 339,
        "completionTokens": 227,
        "inferenceExecutionTime": 2964
      }
    }
  ],
  "pagination": { "limit": 200, "page": 1, "total": 1000, "totalPages": 5 }
}

Response headers: x-pagination-{limit,page,total,total-pages}.

Fields

  • sku — billing line item (model + unit type + format).
  • units — for LLMs, millions of tokens (e.g. 0.000227 = 227 tokens).
  • pricePerUnitUsd — rate; for DIEM, DIEM ≈ USD so this doubles as reference.
  • amount — negative for debit.
  • inferenceDetails — present for inference SKUs; requestId is the id returned on the original /chat/completions response.

GET /billing/usage-analytics

Aggregated summary for dashboards. Cached 10 minutes.

curl "https://api.venice.ai/api/v1/billing/usage-analytics?lookback=7d" \
  -H "Authorization: Bearer $VENICE_API_KEY"

Query parameters (choose one approach)

  • lookback=Nd7d, 30d, up to 90d. Default 7d.
  • OR startDate=YYYY-MM-DD + endDate=YYYY-MM-DD — both required if either is given.

Response (selected keys)

{
  "lookback": "7d",
  "byDate": [{ "date": "2026-04-20", "USD": 0.5, "DIEM": 10.25 }, ...],
  "byModel": [
    {
      "modelName": "GLM 5.1",
      "unitType": "tokens",
      "modelType": "LLM",
      "totalUsd": 0.4,
      "totalDiem": 12.5,
      "totalUnits": 50000,
      "breakdown": [
        { "type": "Output", "usd": 0.3, "diem": 10, "units": 35000 },
        { "type": "Input",  "usd": 0.1, "diem": 2.5, "units": 15000 }
      ]
    }
  ],
  "byModelDaily": [
    { "date": 1705276800000, "GLM 5.1": 5.5, "Claude Opus 4.7": 3.2 }
  ],
  "byModelDailyUsd": [...],
  "topModels": ["GLM 5.1", "Claude Opus 4.7"],
  "byKey": [
    { "apiKeyId": "key_abc123", "description": "Production Key",
      "totalUsd": 0.8, "totalDiem": 15, "totalUnits": 75000 },
    { "apiKeyId": null, "description": "Web App",
      "totalUsd": 0, "totalDiem": 4, "totalUnits": 25000 }
  ],
  "byKeyDaily": [...],
  "byKeyDailyUsd": [...],
  "topKeyNames": [...]
}
  • byDate / byModelDaily / byKeyDaily are pre-shaped for time-series charts.
  • topModels / topKeyNames give top-8 names for legend rendering.
  • apiKeyId: null in byKey means the usage originated from Venice's web app.

Recipes

Abort before calling inference if balance is empty

const { canConsume } = await fetch(`${base}/billing/balance`, { headers }).then(r => r.json())
if (!canConsume) throw new Error('Venice balance exhausted — top up before continuing')

Monthly CSV export

curl "https://api.venice.ai/api/v1/billing/usage?startDate=2026-04-01T00:00:00Z&endDate=2026-04-30T23:59:59Z&limit=500" \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Accept: text/csv" \
  -o billing-april.csv

Paginate via page=1,2,3,... until page > totalPages.

Top-models chart

const a = await fetch(`${base}/billing/usage-analytics?lookback=30d`, { headers }).then(r => r.json())
// chart(a.byModelDaily, { series: a.topModels, xField: 'date' })

Errors

Code Meaning
400 Bad params (startDate without endDate, calendar range > 90 days). lookback=100d is silently clamped to 90 days rather than rejected.
401 Auth failed, or INFERENCE key used on /billing/balance or /billing/usage (ADMIN required).
500 Internal error.
504 Analytics query timed out — shorten lookback or date range.

Gotchas

  • This is Beta — field names may shift. Validate against swagger.yaml periodically.
  • currency values include legacy VCU — use DIEM instead in new code.
  • inferenceDetails is null for non-inference SKUs (e.g. subscription charges).
  • The analytics endpoint is cached 10 min — sudden spikes lag in the dashboard by that window.
  • byModelDaily.date is a Unix milliseconds integer; byDate.date is a YYYY-MM-DD string. Don't mix them.
  • Usage entries from the Venice web app have apiKeyId: null — don't drop them when reconciling.
  • For x402 (wallet) balance, don't use this endpoint — use GET /x402/balance/{walletAddress}.
用于发现和使用Venice平台的公开角色(Persona)。支持通过API搜索、筛选和排序角色目录,获取特定角色详情及评价,并将角色应用到聊天完成请求中以实现预设人设交互。
构建角色选择界面或发现功能 应用预设人设进行对话 根据模型能力调整角色配置
skills/veniceai_skills/venice-characters/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-characters -g -y
SKILL.md
Frontmatter
{
    "name": "venice-characters",
    "description": "Discover and use Venice public characters (persona-driven system prompts with a bound model). Covers GET \/characters (search\/filter\/sort), \/characters\/{slug}, \/characters\/{slug}\/reviews, the Character schema, and how to apply a character via venice_parameters.character_slug in chat completions."
}

Venice Characters

Characters are published personas on Venice — each one bundles a system prompt, a backing model, optional web access, and metadata (tags, ratings, adult flag). You apply a character to any chat by passing its slug via venice_parameters.character_slug.

Use when

  • You want to build a character-selection UI or discovery surface.
  • You want to ship an app with a preset persona (e.g. a coding coach, a philosopher, a game NPC).
  • You need to adapt a character's underlying model (modelId) to match your capability requirements.

Three endpoints, all under Preview (API may change):

Endpoint Purpose
GET /characters Browse/search/filter the catalog.
GET /characters/{slug} Fetch one character.
GET /characters/{slug}/reviews Paginated public reviews.

All three endpoints require authentication (Bearer API key or x402 SIWE) — see venice-auth. There is no unauthenticated public endpoint.

GET /characters

curl "https://api.venice.ai/api/v1/characters?search=philosopher&sortBy=highestRating&limit=20" \
  -H "Authorization: Bearer $VENICE_API_KEY"

Query parameters

Param Type Notes
search string, ≤ 200 Name, description, or tag match. Hashtag (#Philosophy) supported.
categories string[], ≤ 20 Repeat or comma-separate. Character categories (roleplay, philosophy, …).
tags string[], ≤ 20 Repeat or comma-separate.
modelId string[], ≤ 20 Filter by backing model (zai-org-glm-5-1, kimi-k2-6, minimax-m25, …).
isAdult "true" / "false" Adult-content flag.
isPro "true" / "false" Require a Pro model.
isWebEnabled "true" / "false" Allow web access.
sortBy enum featured, highestRating, highlyRated, highlyRatedAndRecent, imports, mostRecent, ratingCount.
sortOrder asc / desc Default desc.
limit 1–100 Default 50.
offset integer Pagination offset.

Character object

Field Notes
id UUID.
slug Use this as character_slug in chat. URL-safe.
name, description, photoUrl, shareUrl Presentation.
author Anonymized short ID.
tags[], featured, adult, webEnabled Metadata.
modelId Backing Venice model ID (e.g. venice-uncensored).
stats {averageRating, imports, ratingCount, ratingSum, userRating}.
createdAt, updatedAt ISO-8601.

GET /characters/{slug}

curl "https://api.venice.ai/api/v1/characters/alan-watts" \
  -H "Authorization: Bearer $VENICE_API_KEY"

Returns the same object shape above, wrapped as { object: "character", data: { ... } }. 404 if the slug is unknown or unpublished.

GET /characters/{slug}/reviews

curl "https://api.venice.ai/api/v1/characters/alan-watts/reviews?page=1&pageSize=20" \
  -H "Authorization: Bearer $VENICE_API_KEY"

Response:

{
  "object": "list",
  "pagination": {"page": 1, "pageSize": 20, "total": 87, "totalPages": 5},
  "summary": {"averageRating": 4.7, "totalReviews": 87},
  "data": [
    {
      "id": "...", "characterId": "...", "createdAt": "...",
      "rating": 5, "message": "Thoughtful and grounded.",
      "locale": "en", "username": "product_user_42", "isOwner": false,
      "userAvatarUrl": "https://cdn.venice.ai/..."
    }
  ]
}

Also sets x-pagination-* response headers (limit, page, total, total-pages).

Using a character in chat

Minimal

{
  "model": "zai-org-glm-5-1",
  "venice_parameters": { "character_slug": "alan-watts" },
  "messages": [
    { "role": "user", "content": "What's the nature of mind?" }
  ]
}

The character's system prompt is injected by Venice. include_venice_system_prompt defaults to true and adds Venice's curated prelude — set it to false for a pure character voice.

Ignoring the character's backing model

You can override the model — Venice will still apply the character's system prompt:

{
  "model": "kimi-k2-6",
  "venice_parameters": {
    "character_slug": "alan-watts",
    "include_venice_system_prompt": false
  },
  "messages": [...]
}

Useful when the character's modelId lacks a capability (e.g. function calling, vision) that your app needs.

Via feature suffix on the model string

{ "model": "zai-org-glm-5-1:character_slug=alan-watts", "messages": [...] }

Useful when the client library (OpenAI SDK, LangChain, etc.) can't add venice_parameters. See venice-chat for the full suffix grammar.

Patterns

Character picker UI

const res = await fetch(`${base}/characters?sortBy=featured&limit=50`, {
  headers: { Authorization: `Bearer ${process.env.VENICE_API_KEY}` },
})
const { data } = await res.json()
// show data[].photoUrl, data[].name, data[].stats.averageRating
// pick a slug, then pass into chat:
await chat({
  model: pickedModelId,
  venice_parameters: { character_slug: pickedSlug },
  messages: [...]
})

Filter for family-friendly + web

/characters?isAdult=false&isWebEnabled=true&sortBy=highlyRatedAndRecent

Search by hashtag

/characters?search=%23Philosophy

Errors

Code Meaning
400 Bad query params (e.g. limit > 100).
401 Missing or invalid auth. All three endpoints require a Bearer key or SIWE header.
404 Unknown slug.
500 Transient. Retry.

Gotchas

  • This is Preview API — response shape may change.
  • Slugs are the public ID on the character's page (venice.ai/c/<slug>). They are not the internal id UUID.
  • photoUrl / shareUrl / userAvatarUrl can be null — don't assume they exist.
  • Character modelId may be gated (Pro, beta). If you always reuse the character's modelId, handle 401 "only available to Pro users" gracefully.
  • Adult-flagged characters are omitted unless isAdult=true is explicitly passed.
调用Venice聊天接口,支持OpenAI兼容格式及专属功能。涵盖多模态输入、工具调用、流式传输、提示词缓存、结构化输出及Venice特有特性如网页搜索和端到端加密。
需要LLM文本生成或流式响应 需使用多模态输入(图像/音频/视频) 需要Venice专属功能(如网页搜索、E2EE、角色设定) 需要提示词缓存优化成本 需要JSON Schema结构化输出
skills/veniceai_skills/venice-chat/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-chat -g -y
SKILL.md
Frontmatter
{
    "name": "venice-chat",
    "description": "Call POST \/chat\/completions on Venice. Covers the OpenAI-compatible request shape, Venice-only venice_parameters (web search, E2EE, characters, thinking control, X search), multimodal inputs (images\/audio\/video), tool calls, reasoning controls, streaming, prompt caching, structured output, and model feature suffixes."
}

Venice Chat Completions

POST /api/v1/chat/completions is Venice's main text endpoint. It's OpenAI-compatible, plus a venice_parameters object for Venice-only features.

Use when

  • You need LLM text generation, with or without tools, with or without streaming.
  • You want multimodal inputs (images, audio, video) to a vision/audio-capable model.
  • You want Venice-specific features: web search, E2EE, characters, xAI X/Twitter search, strip-thinking, web scraping.
  • You need prompt caching for large system prompts or long documents.
  • You need structured (json_schema) output.

For the newer Alpha Responses API, see venice-responses.

Minimal request

curl https://api.venice.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "zai-org-glm-5-1",
    "messages": [{"role": "user", "content": "Why is the sky blue?"}]
  }'

Response shape is the standard OpenAI chat.completion object (id, object: "chat.completion", choices[].message, usage). With stream: true, responses come as SSE data: lines in chat.completion.chunk format.

The request body

Core fields (OpenAI-compatible)

Field Notes
model string — model ID, trait name, or compatibility mapping. Suffixes allowed (see below). Required.
messages array of system / developer / user / assistant / tool messages. Required, min 1.
temperature, top_p, top_k, min_p, min_temp, max_temp sampling controls
repetition_penalty, frequency_penalty, presence_penalty repetition controls
max_tokens (deprecated) / max_completion_tokens upper bound on output tokens
n number of choices (keep 1 to minimize cost)
seed integer for reproducibility
stop / stop_token_ids up to 4 strings, or raw token IDs
stream, stream_options.include_usage SSE streaming + include usage in the final chunk
response_format {type:"json_schema", json_schema:{...}} (preferred), {type:"json_object"}, or {type:"text"}
tools, tool_choice, parallel_tool_calls function calling / built-in tools
logprobs, top_logprobs return token log-probabilities
reasoning.effort / reasoning_effort none | minimal | low | medium | high | xhigh | max
reasoning.summary auto | concise | detailed
prompt_cache_key, prompt_cache_retention (default/extended/24h) prompt caching hints
text.verbosity low/medium/high/auto
metadata key/value strings for tracking
user, store accepted but ignored (OpenAI compat)

venice_parameters (Venice-only)

All optional. Combined with model feature suffixes, these are how you enable Venice features.

Field Type Default Effect
character_slug string Apply a published Venice character. Slug is the "Public ID" on the character page. See venice-characters.
strip_thinking_response bool false Strip <think>...</think> from the assistant output on reasoning models.
disable_thinking bool false Disable thinking entirely on supported reasoning models and strip tags.
enable_e2ee bool true End-to-end encryption on E2EE-capable models when E2EE headers are present. Set to false to force TEE-only.
enable_web_search "off"/"auto"/"on" "off" Venice server-side web search. Citations arrive in the first streamed chunk or the response.
enable_web_scraping bool false Scrape any URLs found in the last user message (Firecrawl).
enable_web_citations bool false Ask the LLM to cite sources with ^1^ / ^1,3^ superscripts.
include_search_results_in_stream bool false Experimental — emit search results as the first stream chunk.
return_search_results_as_documents bool Also surface search results as a synthetic tool call venice_web_search_documents (LangChain-friendly).
include_venice_system_prompt bool true Prepend Venice's curated system prompt. Turn off for full control.
enable_x_search bool false xAI native web + X/Twitter search (Grok models with supportsXSearch). Adds ~$0.01/search.

Model feature suffixes

Some venice_parameters can also be expressed as model feature suffixes on the model string — useful when the caller/library (OpenAI SDK, LangChain) can't set venice_parameters. Syntax:

<model-id>:<key>=<value>[&<key>=<value>…]

Values are URL-decoded. Supported keys (exact match):

Key Type Maps to
enable_web_search on / off / auto venice_parameters.enable_web_search
enable_web_citations "true" / "false" venice_parameters.enable_web_citations
enable_web_scraping "true" / "false" venice_parameters.enable_web_scraping
include_venice_system_prompt "true" / "false" venice_parameters.include_venice_system_prompt
include_search_results_in_stream "true" / "false" venice_parameters.include_search_results_in_stream
return_search_results_as_documents "true" / "false" venice_parameters.return_search_results_as_documents
character_slug string venice_parameters.character_slug
strip_thinking_response "true" / "false" venice_parameters.strip_thinking_response
disable_thinking "true" / "false" venice_parameters.disable_thinking

Unknown keys are silently ignored. Examples:

zai-org-glm-5-1:enable_web_search=on
kimi-k2-6:strip_thinking_response=true&enable_web_search=auto
zai-org-glm-5-1:character_slug=alan-watts

Note: enable_e2ee and enable_x_search can only be set via venice_parameters, not as suffixes.

Messages and modalities

messages[].content is either a string or an array of typed parts. Roles: user, assistant, tool, system, developer (reasoning models like o-series / codex).

Text + image (image_url)

{
  "model": "zai-org-glm-5-1",
  "messages": [{
    "role": "user",
    "content": [
      {"type": "text", "text": "What's in this image?"},
      {"type": "image_url", "image_url": {"url": "https://example.com/cat.jpg"}}
    ]
  }]
}
  • url accepts a public URL or data:image/png;base64,....
  • Models with model_spec.capabilities.supportsMultipleImages: true preserve images across the whole conversation; single-image vision models only keep images from the last user message. Check model_spec.capabilities.maxImages for the per-request cap.

Audio input (input_audio)

{
  "role": "user",
  "content": [
    {"type": "text", "text": "Transcribe this clip."},
    {"type": "input_audio", "input_audio": {"data": "<base64>", "format": "wav"}}
  ]
}

Formats: wav, mp3, aiff, aac, ogg, flac, m4a, pcm16, pcm24. Audio URLs are not supported — always inline base64.

Video input (video_url)

{
  "role": "user",
  "content": [
    {"type": "text", "text": "Summarize this."},
    {"type": "video_url", "video_url": {"url": "https://www.youtube.com/watch?v=..."}}
  ]
}

Accepts public URLs (including YouTube for some providers) or data:video/mp4;base64,.... Supported formats: mp4, mpeg, mov, webm.

Prompt caching (cache_control)

Any text / image_url / input_audio / video_url part can carry:

{"cache_control": {"type": "ephemeral", "ttl": "1h"}}

Combine with prompt_cache_key and prompt_cache_retention: "24h" on the root request for predictable cache routing. Cache read / write pricing is model-specific — check model_spec.pricing on /models.

Tools & function calling

Function tools

{
  "tools": [{
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "Get current weather for a city",
      "parameters": {
        "type": "object",
        "properties": {"city": {"type": "string"}},
        "required": ["city"]
      },
      "strict": true
    }
  }],
  "tool_choice": "auto"
}
  • tool_choice can also be "required", "none", or {"type":"function","function":{"name":"get_weather"}}.
  • parallel_tool_calls: true (default) lets the model emit multiple calls at once.
  • Respond by appending {"role":"tool","tool_call_id":"...","content":"..."} before the next call.

Built-in tools

"tools": [{"type": "web_search"}, {"type": "x_search"}]

Equivalent to toggling venice_parameters.enable_web_search / enable_x_search. x_search requires a model with supportsXSearch.

Reasoning models

On thinking models (GLM 5.1, Kimi K2.6, Claude Opus 4.7, GPT-5.4 Pro, …):

{
  "model": "zai-org-glm-5-1",
  "reasoning": {"effort": "medium", "summary": "auto"},
  "venice_parameters": {"strip_thinking_response": false},
  "messages": [...]
}
  • reasoning_effort is the OpenAI-compatible flat variant (takes precedence over reasoning.effort).
  • Reasoning models may return reasoning_content or structured reasoning_details[] on the assistant message. Pass reasoning_details back verbatim in the next turn — it encodes thought signatures for providers like Claude Opus 4.7 and GPT-5.4 Pro.
  • Use venice_parameters.disable_thinking: true to skip thinking entirely on supported models.

Structured output (response_format)

{
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "type": "object",
      "properties": {"name": {"type": "string"}, "age": {"type": "number"}},
      "required": ["name", "age"]
    }
  }
}

Prefer json_schema over the legacy json_object. Plain text is the default ({"type": "text"}).

E2EE (end-to-end encryption)

For models advertising supportsE2EE:

  1. Perform an HPKE / Noise handshake with Venice (see docs.venice.ai/e2ee).
  2. Send encrypted payload with the required E2EE request headers.
  3. Leave venice_parameters.enable_e2ee at default true, or set false to fall back to TEE-only.

E2EE is not supported on /responses — use /chat/completions for encrypted inference.

Streaming

{"stream": true, "stream_options": {"include_usage": true}}
  • Response is text/event-stream. Each event is data: {...chunk...}\n\n, terminated by data: [DONE].
  • include_usage: true adds a final chunk with token counts.
  • With venice_parameters.include_search_results_in_stream: true, the first chunk carries venice_search_results.

Web-search answers

When enable_web_search is "auto" or "on", the response includes venice_parameters.web_search_citations[] where each entry has url, title, content (snippet), and date. Turn on enable_web_citations to have the model insert ^1^ superscripts inline.

Error handling specifics

  • 402 — insufficient balance. Bearer: INSUFFICIENT_BALANCE. x402: PAYMENT_REQUIRED with structured topUpInstructions and siwxChallenge.
  • 422 — prompt violates Venice or provider content policy. May include suggested_prompt.
  • 413 — payload too large (mostly vision/audio).
  • 429 — rate limit. See /api_keys/rate_limits and venice-errors.

Common gotchas

  • max_tokens is deprecated — prefer max_completion_tokens.
  • Image URLs must be publicly reachable from Venice's network. Localhost / signed S3 URLs without public access fail.
  • Audio inputs cannot be URLs — always base64.
  • Single-image vision models drop older images on each turn; chain them into the last user message.
  • For multi-turn with tools on Claude Opus 4.7, GPT-5.4 Pro, and similar, always round-trip reasoning_details unchanged.
  • parallel_tool_calls: true means you MUST be prepared to execute several tools in parallel before sending a single tool-role reply chain.
  • character_slug replaces the default Venice system prompt. Combine with include_venice_system_prompt: false for total control.
Venice加密RPC代理,支持20+ EVM及Starknet网络。提供按调用计费的JSON-RPC服务,涵盖单/批量请求、分层定价及限流机制,兼容viem/ethers等库,适用于链上数据查询与交易发送。
用户需要查询多链区块链状态或发送交易 用户提及使用Venice作为以太坊节点提供商 用户询问EVM或Starknet网络的JSON-RPC接口
skills/veniceai_skills/venice-crypto-rpc/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-crypto-rpc -g -y
SKILL.md
Frontmatter
{
    "name": "venice-crypto-rpc",
    "description": "Use Venice as a pay-per-call JSON-RPC proxy to 20+ EVM and Starknet networks. Covers GET \/crypto\/rpc\/networks, POST \/crypto\/rpc\/{network}, the 1×\/2×\/4× method-tier pricing model, per-minute + 24-hour credit rate limits, idempotency keys for safe retries, single vs batch requests, and the unsupported stateful\/WebSocket methods (eth_subscribe, eth_newFilter, etc.)."
}

Venice Crypto RPC (JSON-RPC proxy)

Venice exposes a multi-chain JSON-RPC proxy billed per call. Same request shape as Alchemy / Infura — just change the base URL and pay per credit.

Endpoint Auth Notes
GET /crypto/rpc/networks Bearer or SIWE Returns { "networks": [...] } (sorted).
POST /crypto/rpc/{network} Bearer or SIWE (x402) Forward a JSON-RPC 2.0 request (single or batch).

Supported networks

Call GET /crypto/rpc/networks for the current list. It currently returns 23 slugs (always verify — the catalog grows):

arbitrum-mainnet    arbitrum-sepolia
avalanche-mainnet   avalanche-fuji
base-mainnet        base-sepolia
blast-mainnet       blast-sepolia
bsc-mainnet         bsc-testnet
ethereum-mainnet    ethereum-sepolia    ethereum-holesky
linea-mainnet       linea-sepolia
optimism-mainnet    optimism-sepolia
polygon-mainnet     polygon-amoy
starknet-mainnet    starknet-sepolia
zksync-mainnet      zksync-sepolia

Use the slug as :network in the proxy path.

Send a JSON-RPC request

Single call

curl -X POST https://api.venice.ai/api/v1/crypto/rpc/ethereum-mainnet \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
{ "jsonrpc": "2.0", "id": 1, "result": "0x1" }

Batch (up to 100 calls)

curl -X POST https://api.venice.ai/api/v1/crypto/rpc/base-mainnet \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1},
    {"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":2}
  ]'

A single unsupported method in a batch ⇒ the entire batch fails with 400.

Drop-in with viem / ethers

import { createPublicClient, http } from 'viem'
import { mainnet } from 'viem/chains'

const client = createPublicClient({
  chain: mainnet,
  transport: http('https://api.venice.ai/api/v1/crypto/rpc/ethereum-mainnet', {
    fetchOptions: { headers: { Authorization: `Bearer ${process.env.VENICE_API_KEY}` } },
  }),
})

Pricing

Credits per call = baseCredits[chain] × methodTier.

Base credits Chains
20 Ethereum, Base, Optimism, Arbitrum, Polygon, Linea, Avalanche, BSC, Blast, Starknet.
30 zkSync Era.
Tier Multiplier Methods
Standard eth_call, eth_getBalance, eth_blockNumber, eth_sendRawTransaction, eth_getLogs, net_version, web3_clientVersion, ERC-4337 bundler (eth_sendUserOperation, …), chain-family extensions (zks_*, linea_*, bor_*, starknet_*).
Advanced trace_*, debug_*, txpool_inspect, txpool_status, arbtrace_*.
Large trace_replayBlockTransactions, trace_replayTransaction, txpool_content, arbtrace_replay*.

At ~$7e-7 per credit:

  • Standard EVM call (20 × 1) ≈ $0.000014
  • Advanced trace on Ethereum (20 × 2) ≈ $0.000028
  • Large trace replay (20 × 4) ≈ $0.000056
  • zkSync standard call (30 × 1) ≈ $0.000021

RPC-level errors (HTTP 200 with error object inside — e.g. method unsupported on that chain, bad params) are billed at a flat 5 credits regardless of tier.

Response headers on 200:

Header Meaning
X-Venice-RPC-Credits Total credits charged (sum over batch).
X-Venice-RPC-Cost-USD Dollar cost to 8 decimal places.
X-Balance-Remaining Remaining x402 USD — set on routes whose middleware refreshes balance headers. The /crypto/rpc/* handler currently emits credits/cost/request headers; treat X-Balance-Remaining here as best-effort (may be absent on RPC). Use GET /x402/balance/{walletAddress} for an authoritative read.
X-Request-ID 32-char correlation ID — include in support tickets.
Idempotent-Replayed "true" when served from the idempotency cache.

Unsupported methods

These always return 400:

  • Stateful filter methodseth_newFilter, eth_newBlockFilter, eth_getFilterChanges, eth_getFilterLogs, eth_uninstallFilter. Filter state is pinned to a single backend and a load-balanced HTTP proxy can't maintain it. Use eth_getLogs instead.
  • WebSocket-only methodseth_subscribe, eth_unsubscribe. This proxy is HTTP only. Run your own WS endpoint for subscriptions.
  • Cross-family methods — calling starknet_* on an EVM chain (or vice versa) ⇒ 400.
  • Unmapped methods — anything not in the Standard/Advanced/Large lists.

Idempotency

Set the Idempotency-Key header to any [A-Za-z0-9_-]{1,255} string for safe retries:

curl -X POST https://api.venice.ai/api/v1/crypto/rpc/ethereum-mainnet \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Idempotency-Key: send-tx-2026-04-21-nonce-42" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0x..."] ,"id":1}'
  • Cached for 24 hours keyed on (user, idempotency-key).
  • Replay returns the cached response with Idempotent-Replayed: true and is not billed again.
  • Same key + different body400 (prevents silent corruption).

Use this for any state-mutating method (eth_sendRawTransaction, eth_sendUserOperation) to survive flaky networks without double-broadcasting.

Rate limits

Two caps per caller, both enforced independently:

Tier Per-minute requests Credits / rolling 24h
Paid 100 10,000,000
Staff 1,000 100,000,000

429 response customMessage identifies which cap tripped. Per-minute cap also sets X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset headers.

Concurrent-call collisions on the per-user mutex also return 429. Retry with jitter.

Errors

Status Typical cause
400 Unsupported network slug, empty body, batch > 100, unsupported/WebSocket/filter method, cross-family call, idempotency-key reuse with a different body.
401 Missing or invalid Bearer / SIWE. The /networks listing is public but the proxy endpoint requires auth.
402 Insufficient balance. x402 wallet users get a PAYMENT-REQUIRED header with structured top-up instructions (see venice-x402).
429 Per-minute, 24-hour credit, or concurrency cap tripped.
500 Upstream fetch failed / timeout. Safe to retry with the same Idempotency-Key.

Patterns

  • Multi-chain dashboards — Single API key unlocks all networks. No per-chain keys to rotate.
  • High-throughput indexing — Batch up to 100 calls per request; each sub-call is still billed individually, but the network round-trip is amortized.
  • Wallet-based (x402) RPC — Pay per RPC call with USDC on Base. Use the SIWE header; a 402 indicates low credit and carries structured top-up instructions.
  • Cost tracking — Log X-Venice-RPC-Credits and X-Venice-RPC-Cost-USD per request; aggregate by method to see where credits go.
  • Safe transaction submission — Always include an Idempotency-Key on eth_sendRawTransaction. The proxy then guarantees exactly-once semantics within 24 hours.
用于通过Venice API生成文本向量嵌入,兼容OpenAI格式。支持检索、RAG、聚类等场景,提供请求参数详解、压缩响应及SDK用法指南。
需要为文本生成向量嵌入 构建检索增强生成系统 进行文本聚类或相似度搜索
skills/veniceai_skills/venice-embeddings/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-embeddings -g -y
SKILL.md
Frontmatter
{
    "name": "venice-embeddings",
    "description": "Call POST \/embeddings on Venice. Covers request shape (input, model, encoding_format, dimensions, user), OpenAI compatibility, response compression (gzip\/br), and practical usage for retrieval, clustering, and RAG."
}

Venice Embeddings

POST /api/v1/embeddings returns vector embeddings for strings. It's OpenAI-compatible: the request and response match https://api.openai.com/v1/embeddings closely enough that the OpenAI SDK works out of the box with baseURL: "https://api.venice.ai/api/v1".

Use when

  • You're building retrieval / RAG / similarity search.
  • You need text clustering, classification, deduplication, or reranking.
  • You want Venice's "no-training, no-retention" stance on inference inputs — embeddings are generated and returned; the API does not publish E2EE semantics on /embeddings the way it does on selected chat models.

Text-only. For image/multimodal signals, either run images through a vision chat model and embed the description, or pick a multimodal-capable embedding model from GET /models?type=embedding (the catalog changes; inspect model_spec on each row).

Minimal request

curl https://api.venice.ai/api/v1/embeddings \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept-Encoding: gzip, br" \
  -d '{
    "model": "text-embedding-bge-m3",
    "input": "Why is the sky blue?"
  }'
{
  "object": "list",
  "model": "text-embedding-bge-m3",
  "data": [
    { "object": "embedding", "index": 0, "embedding": [0.0023, -0.0093, 0.0158, ...] }
  ],
  "usage": { "prompt_tokens": 8, "total_tokens": 8 }
}

Request schema

Field Type Notes
model string Required. Model ID from GET /models?type=embedding.
input string | string[] | number[] | number[][] Required. Single string, array of strings (≤ 2048 entries), or pre-tokenized arrays.
encoding_format "float" | "base64" Default "float". Use "base64" for ~4× payload shrinkage; decode client-side.
dimensions integer Optional. Truncate output dimensions. Only meaningful when the model's model_spec.supportsCustomDimensions === true — behavior on non-supporting models is model-dependent; test a small call before relying on it.
user string Accepted for OpenAI compat. Discarded by Venice.

input max tokens per string is capped at the model's model_spec.maxInputTokens (typically 8192). Batch arrays are capped at 2048 items. Venice returns one embedding per element, in order, with matching index.

Response headers & compression

Request Accept-Encoding: gzip, br. The response will include Content-Encoding accordingly. For long batches this matters — vectors are large.

For x402 auth, X-Balance-Remaining reports your remaining USDC credits.

Using the OpenAI SDK

import OpenAI from 'openai'

const client = new OpenAI({
  apiKey: process.env.VENICE_API_KEY,
  baseURL: 'https://api.venice.ai/api/v1',
})

const res = await client.embeddings.create({
  model: 'text-embedding-bge-m3',
  input: ['first doc', 'second doc'],
})

const vec0 = res.data[0].embedding

Batch-embedding pattern

async function embedBatch(texts: string[], batchSize = 64) {
  const out: number[][] = []
  for (let i = 0; i < texts.length; i += batchSize) {
    const slice = texts.slice(i, i + batchSize)
    const res = await client.embeddings.create({
      model: 'text-embedding-bge-m3',
      input: slice,
      encoding_format: 'float',
    })
    for (const row of res.data) out[i + row.index] = row.embedding
  }
  return out
}
  • Keep batches ≤ model context limit total tokens.
  • On 429, back off exponentially and halve the batch — see venice-errors.

Choosing a model

Query GET /models?type=embedding for the current catalog. Each entry exposes:

  • model_spec.embeddingDimensions — native output dimension (e.g. 1024 for BGE-M3).
  • model_spec.maxInputTokens — max tokens per input string.
  • model_spec.supportsCustomDimensions — whether dimensions can truncate the output.
  • model_spec.pricing.input.usd / .diem — cost per million input tokens.

Built-in options include text-embedding-bge-m3, text-embedding-bge-en-icl, text-embedding-qwen3-8b, text-embedding-qwen3-0-6b, text-embedding-multilingual-e5-large-instruct, text-embedding-3-small, text-embedding-3-large, gemini-embedding-2-preview, text-embedding-nemotron-embed-vl-1b-v2.

Always pin the model ID — cosine distances are not comparable across different embedding models.

Error handling

Code Meaning
400 Validation error. Check details in the response for the exact field.
401 Auth / Pro-only model.
402 Insufficient balance. Bearer → INSUFFICIENT_BALANCE. x402 → structured PAYMENT_REQUIRED.
415 Wrong Content-Type — must be application/json.
429 Rate limited.
500 Inference failed; retry with jitter.
503 Model at capacity; retry later.

Gotchas

  • dimensions is only meaningful when model_spec.supportsCustomDimensions === true. Behavior on other models is model-dependent — test with a small request before relying on it.
  • input must not be empty; Venice rejects empty strings with 400.
  • Whether the returned vectors are L2-normalized depends on the model — verify with Math.hypot(...v) ≈ 1 before assuming.
  • For RAG, store model alongside the vector so you can re-embed on upgrade.
处理Venice API错误,涵盖四种错误体结构及关键状态码。支持422内容策略重试、402支付流程、429限流指数退避及幂等性处理,确保请求正确响应与用户引导。
收到Venice API非2xx状态码时 解析到StandardError或DetailedError时 遇到ContentViolationError需建议提示词时 触发X402InferencePaymentRequired需充值时 需要实施指数退避重试策略时
skills/veniceai_skills/venice-errors/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-errors -g -y
SKILL.md
Frontmatter
{
    "name": "venice-errors",
    "description": "Handle Venice API errors correctly. Covers the StandardError \/ DetailedError \/ ContentViolationError \/ X402InferencePaymentRequired body shapes, every meaningful status code (400, 401, 402, 403, 415, 422, 429, 500, 503, 504), the 402 PAYMENT-REQUIRED header used by x402 inference, 422 content-policy suggested_prompt retry pattern, 429 rate-limit headers, and an exponential-backoff retry strategy with idempotency."
}

Venice errors & retries

Every Venice endpoint returns one of four error shapes. Knowing which shape you got tells you how to react.

Error body shapes

1. StandardError — simple message

The default shape for 4xx/5xx. Emitted when there's nothing structured to surface.

{ "error": "Unauthorized" }

2. DetailedError — Zod validation failure

Used for some 400 responses on malformed request bodies. When present, details is a Zod format() tree (_errors recursively keyed by field) alongside a flat issues array. Many 400s are plain StandardError without details — always handle both.

{
  "error": "Invalid request",
  "details": {
    "_errors": [],
    "messages": { "_errors": ["Field is required"] }
  },
  "issues": [
    { "code": "invalid_type", "path": ["messages"], "message": "Field is required" }
  ]
}

Render details / issues to the user so they can fix the input; don't retry — the request shape is wrong.

3. ContentViolationError — 422 content policy

Returned when a prompt trips content policy. suggested_prompt (a model-provided safe alternative) is currently emitted by the audio generation pipeline (/audio/queue, /audio/retrieve); image and video endpoints return { error: "Content policy violation" } without suggested_prompt.

{
  "error": "Content policy violation",
  "suggested_prompt": "A cinematic instrumental track inspired by stormy weather and dramatic tension."
}

Pattern — when suggested_prompt is present, retry once with prompt = suggested_prompt if the user consents.

4. X402InferencePaymentRequired — 402 on x402 inference calls

Returned only when the caller authenticated with SIWE and has insufficient credit. Discriminated by code: "PAYMENT_REQUIRED".

{
  "error": "Payment required",
  "code": "PAYMENT_REQUIRED",
  "message": "Insufficient x402 balance",
  "suggestedTopUpUsd": 10,
  "minimumTopUpUsd": 5,
  "supportedTokens": ["USDC"],
  "supportedChains": ["base"],
  "topUpInstructions": {
    "step1": "POST /api/v1/x402/top-up with no payment header to get payment requirements",
    "step2": "Sign a USDC transfer authorization using the x402 SDK (createPaymentHeader)",
    "step3": "POST /api/v1/x402/top-up with the signed X-402-Payment header",
    "receiverWallet": "<RECEIVER_WALLET_ADDRESS>",
    "tokenAddress": "<USDC_TOKEN_ADDRESS>",
    "tokenDecimals": 6,
    "network": "eip155:8453",
    "minimumAmountUsd": 5
  },
  "siwxChallenge": { ... SIWE template ... }
}

The PAYMENT-REQUIRED response header carries a base64-encoded x402 v2 paymentRequired object (x402Version, error, resource, accepts[], optional extensions) — it is not the same JSON as the body. Protocol-level clients parse the header; human-facing clients parse the richer body. See venice-x402.

Status code map

Status Body Meaning What to do
400 Bad Request DetailedError Malformed input. Zod details identifies the field. Fix and re-send. Don't retry.
401 Unauthorized StandardError Missing / invalid Bearer API key or SIWE. Rotate credentials. Don't retry.
402 Payment Required Bearer: StandardError with the configured message (e.g. { "error": "Insufficient balance" } — the handler's default path does not attach a code field). SIWE: X402InferencePaymentRequired + PAYMENT-REQUIRED header. Out of DIEM/USD/wallet credit. Bearer: top up at venice.ai. SIWE: run the x402 top-up flow.
403 Forbidden StandardError Valid auth but not entitled. Typical: trial-limited endpoint, beta model, API-key consumption cap hit, SIWE signer ≠ path wallet. Don't retry. Investigate entitlements.
415 Unsupported Media Type StandardError Wrong Content-Type (e.g. JSON sent to a multipart endpoint, or vice versa). Fix headers. Don't retry.
422 Unprocessable Entity ContentViolationError on image/audio/video generation; plain { error } on other routes (e.g. ASR validation errors). Content policy violation on generation paths; schema-ish validation on others. On audio generation, optionally retry once with suggested_prompt. On others, fix input.
429 Too Many Requests StandardError Rate limit cap tripped. Also returned by /crypto/rpc/{network} when credit-per-day or concurrency cap tripped. Honor X-RateLimit-* headers, back off with jitter.
500 Internal Server Error StandardError Unexpected failure. Retry with exponential backoff + idempotency key where supported.
503 Service Unavailable StandardError Upstream model / service temporarily down. Retry with backoff. Consider a fallback model.
504 Gateway Timeout StandardError Upstream slow. Mostly on /chat/completions with huge contexts. Switch to stream: true or shorter prompts.

Rate-limit headers (429)

Emitted on /crypto/rpc/{network}:

Header Meaning
X-RateLimit-Limit Per-minute request cap for your tier (paid = 100, staff = 1000 on crypto RPC).
X-RateLimit-Remaining Requests remaining in the current 60-second window.
X-RateLimit-Reset Unix timestamp in seconds when the window resets.

Additionally, LlmInferenceError model-overloaded conditions set a Retry-After header (seconds) on the 429 — honor it when present.

Inference endpoints (chat, image, audio, video) use a per-API-key tier defined via /api_keys/rate_limits. See venice-api-keys to pre-fetch your caps, and venice-billing for DIEM/USD usage.

Response headers on 402 (x402)

Header Notes
PAYMENT-REQUIRED Base64-encoded JSON of the x402 v2 paymentRequired object (x402Version, error, resource, accepts[], optional extensions['sign-in-with-x']). Protocol-level discovery — parse even if you don't parse the JSON body.

Retry strategy

Never retry

  • 400 — bad input. Fix the request.
  • 401 — bad auth. Fix credentials.
  • 403 — not entitled. Don't hammer.
  • 415 — wrong Content-Type.

Retry with modification

  • 402 (x402) — run top-up then retry.
  • 402 (Bearer) — surface to user; top up at venice.ai.
  • 422 with suggested_prompt — one retry with the safer prompt.

Retry with backoff

  • 429 — back off for at least X-RateLimit-Reset - now(). Add jitter.
  • 500 / 503 / 504 — exponential backoff (e.g. 0.5s, 1s, 2s, 4s, 8s), capped at ~30s. 3–5 retries max.
  • Use Idempotency-Key (e.g. on /crypto/rpc/{network}) so retries can't double-bill state-mutating calls.

Reference retry loop

async function callVenice<T>(fn: () => Promise<Response>): Promise<T> {
  const maxRetries = 5
  let delay = 500
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const res = await fn()
    if (res.ok) return res.json() as Promise<T>

    const body = await res.clone().json().catch(() => ({}))
    const { status } = res

    if ([400, 401, 403, 415].includes(status)) {
      throw Object.assign(new Error(body.error ?? 'Venice error'), { status, body })
    }

    if (status === 402 && body.code === 'PAYMENT_REQUIRED') {
      await topUpX402(body.suggestedTopUpUsd)
      continue
    }

    if (status === 422) {
      throw Object.assign(new Error('Content policy'), { status, body })
    }

    if (status === 429) {
      const retryAfterSec = Number(res.headers.get('retry-after'))
      const resetSec = Number(res.headers.get('x-ratelimit-reset'))
      const waitMs = !Number.isNaN(retryAfterSec) && retryAfterSec > 0
        ? retryAfterSec * 1000
        : !Number.isNaN(resetSec) && resetSec > 0
          ? Math.max(resetSec * 1000 - Date.now(), delay)
          : delay
      await sleep(waitMs + Math.random() * 250)
      delay *= 2
      continue
    }

    if (status >= 500 && attempt < maxRetries) {
      await sleep(delay + Math.random() * 250)
      delay *= 2
      continue
    }

    throw Object.assign(new Error(body.error ?? 'Venice error'), { status, body })
  }
  throw new Error('Exceeded max retries')
}

Streaming errors

Streaming responses (stream: true on chat, TTS, video-queue progress) deliver mid-stream errors as SSE events:

data: {"error": {"type": "…", "message": "…"}}

Treat them as terminal — the underlying connection is closed. The HTTP status is 200 because a successful stream can't be changed mid-flight.

Request-ID correlation

When present on a response, keep the X-Request-ID header. Include it in support tickets — Venice keys diagnostic logs by this ID. /crypto/rpc/* routes set it explicitly; many inference routes also include it, but don't assume it's universal — fall back to your own client-side correlation ID.

Common gotchas

  • A 402 from /x402/top-up with no X-402-Payment header is the expected discovery response, not an error. See venice-x402.
  • A 500 on /chat/completions with a huge file upload often means the upstream model chose to abort — reduce max_tokens / image size rather than blindly retrying.
  • 429 on /crypto/rpc/{network} may mean the 24-hour credit cap tripped, not the per-minute one. Check customMessage.
  • DetailedError.details is a Zod _errors tree, not a flat map. Walk it recursively.
  • Some endpoints (image generation) echo X-Rate-Limit variants — treat any header whose name starts with X-RateLimit as advisory.
  • Don't treat an empty stream chunk as an error — send-keepalives look like data: [DONE] or empty lines.
用于通过Venice API编辑现有图像,支持单图提示修改、多图合成、高清放大及背景移除。接受Base64、文件或URL输入,返回PNG格式结果。
用户要求修改图片内容或风格 需要将多张图片合并或合成 需要提升图片分辨率或去除背景
skills/veniceai_skills/venice-image-edit/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-image-edit -g -y
SKILL.md
Frontmatter
{
    "name": "venice-image-edit",
    "description": "Transform existing images with Venice. Covers POST \/image\/edit (prompt-driven single-image edit), \/image\/multi-edit (compose 1-3 images), \/image\/upscale (2-4x upscale + enhance), and \/image\/background-remove. Accepts base64, file upload, or HTTPS URL."
}

Venice Image Editing

Four endpoints, all operating on existing images:

Endpoint Purpose
POST /image/edit Transform one image with a text prompt.
POST /image/multi-edit Composite / layer 2–3 images with a single prompt. Also has a multipart/form-data variant.
POST /image/upscale Upscale 2–4× and/or enhance quality.
POST /image/background-remove Produce a transparent cutout.

For text-to-image generation, see venice-image-generate.

Shared rules

  • Input image accepts base64 string, file upload (multipart for /image/multi-edit), or HTTPS URL (for edit + multi-edit + background-remove).
  • File size < 25 MB. Image dimensions must be between 65,536 (256×256 equivalent) and 33,177,600 pixels (~5,761×5,761). Upscale caps at 16,777,216 pixels after scaling.
  • HTTPS URLs must be publicly reachable from Venice's network.
  • All four endpoints return the edited image as binary image/png — there is no return_binary field on edit / multi-edit / upscale / background-remove (that flag only exists on /image/generate).

/image/edit

Edit one image with a short, descriptive prompt.

curl https://api.venice.ai/api/v1/image/edit \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-edit",
    "prompt": "Change the color of the sky to a sunrise",
    "image": "iVBORw0KGgoAAAANSUhEUg...",
    "aspect_ratio": "16:9",
    "safe_mode": true
  }'
Field Notes
model Default qwen-edit. See GET /models?type=inpaint for edit-capable models. modelId is accepted for backwards compatibility but deprecated on /image/edit — prefer model.
prompt Required, ≤ 32 768 chars (usually 1500 is plenty). Short & specific works best.
image Required. Base64 string, file upload, or https:// URL.
aspect_ratio Optional: auto, 1:1, 3:2, 16:9, 21:9, 9:16, 2:3, 3:4, 4:5. Supported values vary per model — check constraints on GET /models.
safe_mode Default true; blurs adult content.

Good prompts: "remove the tree", "add sunglasses to the cat", "make the sky a vivid orange sunrise".

/image/multi-edit

Combine up to 3 images into one with a prompt. The first image is the base; the rest are layers / masks / references.

Field name: /image/multi-edit takes modelId, not model. This is the only image endpoint that uses modelId as the primary field name.

JSON (base64 or URLs)

{
  "modelId": "qwen-edit",
  "prompt": "Place the person from image 2 onto the beach in image 1",
  "images": [
    "https://example.com/beach.jpg",
    "data:image/png;base64,iVBOR..."
  ],
  "safe_mode": true
}

Multipart (file upload)

POST /image/multi-edit
Content-Type: multipart/form-data

--boundary
Content-Disposition: form-data; name="modelId"

qwen-edit
--boundary
Content-Disposition: form-data; name="prompt"

Place the person from image 2 onto the beach in image 1
--boundary
Content-Disposition: form-data; name="images"; filename="base.jpg"
Content-Type: image/jpeg

<bytes>
--boundary
Content-Disposition: form-data; name="images"; filename="subject.png"
Content-Type: image/png

<bytes>
--boundary--
Field Notes
modelId Required field name (multi-edit does not accept model). Default qwen-edit.
prompt Required, ≤ 32 768 chars.
images Required. 1–3 items. JSON variant accepts base64 or HTTPS URLs; multipart variant accepts raw file parts.
safe_mode Default true.

/image/upscale

Upscale by 1–4×, optionally running Venice's enhancer. Set enhance: true + scale: 1 to enhance without scaling.

curl https://api.venice.ai/api/v1/image/upscale \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "iVBORw0KGgo...",
    "scale": 2,
    "enhance": true,
    "enhanceCreativity": 0.5,
    "enhancePrompt": "gold",
    "replication": 0.35
  }'
Field Type Default Notes
image base64 or file Required. Must be ≥ 65 536 px² to start.
scale 1..4 2 1 requires enhance: true. 4 on large images auto-scales down to stay within 16 MP.
enhance bool / "true" / "false" "false" Turn on Venice's enhancer. Required when scale === 1.
enhanceCreativity 0..1 0.5 Higher = more AI reinterpretation. 1 essentially produces a new image.
enhancePrompt string, ≤ 1500 Short stylistic cue: "gold", "marble", "angry, menacing".
replication 0..1 0.35 Preserve original lines/noise. Higher = less plastic / less AI-feel.

Response is the upscaled image as binary (image/png typically).

/image/background-remove

Produce a transparent PNG cutout.

# With base64
curl https://api.venice.ai/api/v1/image/background-remove \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"image": "iVBOR..."}'

# With a URL
curl https://api.venice.ai/api/v1/image/background-remove \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"image_url": "https://example.com/photo.jpg"}'

Send either image (base64 / file) or image_url. Response is image/png with alpha channel.

Error behavior (all four endpoints)

Code Cause
400 Bad params — image dims out of range, file too large, unknown model, unsupported aspect ratio for the model, content-policy refusal.
401 Auth failed. (Pro-gating on these paths surfaces as 400 / 402 depending on condition.)
402 Insufficient balance. Bearer: plain { "error": "Insufficient balance" }. x402: PAYMENT_REQUIRED body + PAYMENT-REQUIRED header.
415 Wrong Content-Type (e.g. JSON sent to a multipart endpoint, or vice versa).
429 Rate limited.
500 / 503 Inference / capacity issue — retry with jitter.

(413 and 422 are not documented for these image paths in the OpenAPI spec — a 413 from the platform may still appear if you exceed ingress limits, but treat 400 / 415 as the primary failure surface.)

Gotchas

  • /image/multi-edit images[] explicitly accepts data:image/...;base64,... URLs or plain base64. For /image/edit and /image/upscale, send base64 as a plain string unless the docs say otherwise — if your client adds a data: prefix and you get a 400, strip it.
  • For multipart /image/multi-edit, the field name is images and you send multiple parts with the same field name — order matters (base first).
  • Field-name asymmetry: /image/edit prefers model (modelId is a deprecated alias). /image/multi-edit accepts only modelId. Get the name right per endpoint — sending the wrong one is a 400.
  • /image/upscale with scale=4 on a large input is silently clamped to stay under 16 MP.
  • safe_mode: true can blur otherwise valid inputs if the source image trips content classifiers; switch to false (and handle the legal/ToS consequences yourself) when you control the input.
  • /image/background-remove takes either image or image_url, not both.
用于通过 Venice API 生成图像。支持原生及 OpenAI 兼容接口,提供风格预设查询。涵盖提示词、尺寸、种子等参数配置及响应处理,适用于文生图、批量变体生成及 SDK 迁移场景。
根据文本描述生成图片 需要一次性获取多个图像变体 从 OpenAI 图像生成接口迁移至 Venice 查询可用的图像风格预设
skills/veniceai_skills/venice-image-generate/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-image-generate -g -y
SKILL.md
Frontmatter
{
    "name": "venice-image-generate",
    "description": "Generate images with Venice. Covers POST \/image\/generate (Venice-native), POST \/images\/generations (OpenAI-compatible), GET \/image\/styles (style presets), request fields (prompt, dimensions, cfg_scale, seed, variants, style_preset, aspect_ratio, resolution, safe_mode, watermark), and response formats."
}

Venice Image Generation

Two text-to-image endpoints:

  1. POST /api/v1/image/generate — Venice-native, full control (negative prompts, CFG, seed, up to 4 variants).
  2. POST /api/v1/images/generations — OpenAI-compatible, fewer knobs but drop-in for the OpenAI SDK.

Plus:

  • GET /api/v1/image/styles — list of style preset names for style_preset.

For editing / upscaling / multi-image / background removal, see venice-image-edit.

Use when

  • You need to generate images from text prompts.
  • You need multiple variants in one call.
  • You're porting from OpenAI's images.generate and want a zero-change SDK swap.
  • You want to browse style presets before committing to one.

/image/generate — Venice-native

Request

curl https://api.venice.ai/api/v1/image/generate \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "z-image-turbo",
    "prompt": "A beautiful sunset over a mountain range",
    "width": 1024,
    "height": 1024,
    "cfg_scale": 7.5,
    "steps": 8,
    "seed": 123456789,
    "variants": 1,
    "format": "webp",
    "style_preset": "3D Model",
    "safe_mode": true
  }'

Fields

Field Type Default Notes
model string Required. Image model ID. GET /models?type=image.
prompt string Required. Max promptCharacterLimit from the model's model_spec.constraints (typically 1500–7500).
negative_prompt string Describe what not to show. Same character cap as prompt.
width, height int 1024, 1024 ≤ 1280 each. Must be divisible by constraints.widthHeightDivisor on the model's model_spec.
aspect_ratio string "1:1", "16:9", "9:16", … — used by models like Nano Banana instead of width/height.
resolution string "1K", "2K", "4K" — used by resolution-driven models.
cfg_scale number model default 0 < x ≤ 20. Higher = more prompt adherence.
steps int 8 Inference steps. Some models ignore it (e.g. Turbo).
seed int 0 -999999999..999999999. Use 0/omit for random.
variants int 1 1–4. Only if return_binary: false.
lora_strength int 0–100 when model uses Loras.
style_preset string Value from GET /image/styles.
format "webp"/"png"/"jpeg" webp Response image format.
return_binary bool false true → binary image/* response; false → JSON with base64.
embed_exif_metadata bool false Embed prompt info in EXIF.
hide_watermark bool false Venice may still watermark certain content.
safe_mode bool true Blurs adult content.
enable_web_search bool false Only some models. Charges extra.
inpaint Deprecated since May 19 2025. A new inpaint API is forthcoming.

Response (JSON, return_binary: false)

{
  "id": "...",
  "images": ["<base64>", "<base64>"],
  "timing": {...},
  "request": {...}
}

With return_binary: true, response is raw image/webp (or png/jpeg) with matching Content-Type.

/images/generations — OpenAI-compatible

Use this if you're already on the OpenAI SDK. Field names match openai.images.generate().

import OpenAI from 'openai'

const client = new OpenAI({
  apiKey: process.env.VENICE_API_KEY,
  baseURL: 'https://api.venice.ai/api/v1',
})

const res = await client.images.generate({
  model: 'z-image-turbo',
  prompt: 'A beautiful sunset over mountain ranges',
  size: '1024x1024',
  response_format: 'b64_json',
})

const b64 = res.data[0].b64_json

Mapped fields

Field Values Notes
model string, default "default" Unknown model IDs fall back to Venice's default.
prompt string, ≤ 1500 chars Required.
size auto, 256x256, 512x512, 1024x1024, 1536x1024, 1024x1536, 1792x1024, 1024x1792
output_format jpeg / png / webp Defaults to png.
response_format b64_json / url url returns a data: URL (not a hosted URL).
moderation auto (safe mode on) / low (safe mode off)
n 1 Venice only supports a single image per call here.
quality, style (vivid/natural), background, output_compression, user Accepted for OpenAI compat, not used by Venice.

If you need variants, seed, negative_prompt, cfg_scale, or style_preset, switch to /image/generate.

/image/styles — list presets

curl https://api.venice.ai/api/v1/image/styles \
  -H "Authorization: Bearer $VENICE_API_KEY"

Returns a list of styles[], each with a name you can pass to style_preset. Cache this — it's small and stable.

Choosing a model

curl "https://api.venice.ai/api/v1/models?type=image" \
  -H "Authorization: Bearer $VENICE_API_KEY"

Inspect per-model model_spec:

  • constraints.widthHeightDivisorwidth and height must both be divisible by this.
  • constraints.aspectRatios[] + defaultAspectRatio — if present, the model supports aspect-ratio-driven sizing.
  • constraints.resolutions[] + defaultResolution — if present, the model supports resolution (1K/2K/4K).
  • constraints.steps.{default,max} — step bounds (some models ignore steps entirely).
  • constraints.promptCharacterLimit — max prompt length (also applies to negative_prompt).
  • pricing.generation.usd — flat USD per image, or pricing.resolutions[].usd for resolution-tiered models.

Pick a model that matches the feature + size combo you plan to use.

Common patterns

Fixed-seed A/B test

{"model": "z-image-turbo", "prompt": "...", "seed": 42, "variants": 4}

Aspect-ratio-driven model (Nano Banana family)

{"model": "nano-banana-2", "prompt": "...", "aspect_ratio": "16:9", "resolution": "2K"}

(Other nano-banana variants: nano-banana-pro. Always verify the current ID via GET /models?type=image.)

Style preset + negative

{
  "model": "z-image-turbo",
  "prompt": "a red sports car in a parking lot",
  "negative_prompt": "blurry, people, clouds",
  "style_preset": "3D Model"
}

Stream binary to disk (Node)

const res = await fetch('https://api.venice.ai/api/v1/image/generate', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.VENICE_API_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ model: 'z-image-turbo', prompt: '...', return_binary: true }),
})
if (!res.ok) throw new Error(await res.text())
const buf = Buffer.from(await res.arrayBuffer())
await fs.writeFile('out.webp', buf)

Errors

Code Meaning
400 Bad params (e.g. dimensions not divisible by widthHeightDivisor, prompt too long, variants>1 with return_binary).
401 Auth or Pro-only model.
402 Insufficient balance. Bearer: plain { "error": "Insufficient balance" }; x402: PAYMENT_REQUIRED body + PAYMENT-REQUIRED header.
415 Wrong Content-Type (send application/json for this endpoint).
429 Rate limited.
500 / 503 Inference or capacity issue — retry with jitter.

(Content-policy violations on /image/generate come back as 400 with an error string, not 422 — the 422 shape is specific to audio generation paths.)

Gotchas

  • Each model picks one sizing idiom: either width/height, aspect_ratio + resolution, or (OpenAI-compat) size. Match the model's constraints.
  • variants > 1 requires return_binary: false (JSON with base64 array).
  • steps is ignored by fast/turbo models; they hardcode step count internally.
  • hide_watermark: true is advisory — Venice may still watermark content flagged by safety classifiers.
  • Old inpaint field is deprecated; don't use it.
  • For OpenAI-compat, response_format: "url" returns a data URL, not a hosted URL — plan for that if you're saving to storage.
提供Venice模型发现能力,通过GET接口查询模型目录、特性映射及兼容性别名。支持按类型过滤,帮助开发者根据功能、约束和定价选择合适模型,实现运行时动态决策与成本估算。
需要基于能力(如视觉、推理)选择模型 需要验证请求是否符合模型约束 需要计算API使用成本 需要将用户友好名称或第三方ID解析为Venice模型ID
skills/veniceai_skills/venice-models/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-models -g -y
SKILL.md
Frontmatter
{
    "name": "venice-models",
    "description": "Discover Venice models, their capabilities, constraints, and pricing. Covers GET \/models (with ?type filter), \/models\/traits, \/models\/compatibility_mapping, the ModelResponse schema (capabilities, constraints, pricing per type), and how to use this to pick the right model programmatically."
}

Venice Models

Three read-only endpoints for model discovery — all GET:

Endpoint Returns
/models Full model catalog with model_spec (capabilities, constraints, pricing).
/models/traits Trait → model ID mapping (e.g. "default", "fastest", "default_reasoning", "highest_quality").
/models/compatibility_mapping Legacy / OpenAI / third-party model ID → Venice model ID aliases.

All three take an optional ?type= filter: text, image, video, music, tts, asr, embedding, upscale, inpaint, all, code.

All three are authenticated (Bearer API key or x402 SIWE) like every other /api/v1 route.

Use when

  • You need to pick a model at runtime based on capabilities (vision, reasoning, function calling, E2EE, X search, multi-image, …).
  • You need to validate a request against a model's constraints (prompt length, aspect ratio, resolution, steps).
  • You need the current price per million tokens / per image / per second / per 1k chars to build a cost estimate.
  • You want to resolve a user-friendly trait name (e.g. default, default_reasoning, highest_quality) or a frontier-style ID (openai-gpt-54-pro, claude-opus-4-7) to a concrete Venice model ID.

GET /models

curl "https://api.venice.ai/api/v1/models?type=text"
{
  "object": "list",
  "type": "text",
  "data": [
    {
      "id": "zai-org-glm-5-1",
      "created": 1699000000,
      "model_spec": {
        "name": "GLM 5.1",
        "description": "Balanced blend of speed and capability...",
        "availableContextTokens": 200000,
        "maxCompletionTokens": 24000,
        "privacy": "private",
        "beta": false,
        "betaModel": false,
        "modelSource": "https://huggingface.co/zai-org/GLM-5.1",
        "offline": false,
        "capabilities": { ... },
        "constraints": { ... },
        "pricing": { ... },
        "regionRestrictions": ["US"],
        "deprecation": {"date": "2025-03-01T00:00:00.000Z"}
      }
    }
  ]
}

model_spec.capabilities — text models

Flag Meaning
optimizedForCode Tuned for coding tasks.
quantization fp4 / fp8 / fp16 / bf16 / int8 / int4 / not-available.
supportsFunctionCalling Tools are allowed.
supportsReasoning Emits <thinking>...</thinking> blocks (and/or provider-specific reasoning_content).
supportsReasoningEffort Honors reasoning.effort / reasoning_effort.
supportsResponseSchema Honors response_format: json_schema.
supportsMultipleImages + maxImages Multi-image vision support.
supportsVision Accepts image_url parts.
supportsVideoInput Accepts video_url parts.
supportsWebSearch Honors venice_parameters.enable_web_search.
supportsLogProbs Honors logprobs / top_logprobs.
supportsTeeAttestation Runs inside a TEE with hardware attestation.
supportsE2EE End-to-end encrypted inference available (requires TEE).
supportsXSearch xAI native web + X/Twitter search.
supportsAudioInput Accepts audio-content message parts (set by the runtime capability builder — not part of the OpenAPI strict schema but appears on /models responses).

model_spec.constraints — by model family

  • Texttemperature.default, top_p.default, and {frequency,presence,repetition}_penalty.default.
  • ImagepromptCharacterLimit, widthHeightDivisor, steps.{default,max}, optional aspectRatios[] + defaultAspectRatio, optional resolutions[] + defaultResolution (the last two appear only on models that use ratio/resolution-based sizing).
  • Videoaspect_ratios[], resolutions[], durations[], model_type (text-to-video/image-to-video/video), audio, audio_configurable, prompt_character_limit.
  • Inpaint / editaspectRatios[], promptCharacterLimit, combineImages.
  • TTS / Music (fields surface at the top level of model_spec, not inside constraints) — voices[], default_voice, supports_lyrics, lyrics_required, supports_lyrics_optimizer, supports_force_instrumental, supports_speed, supports_language_code, min_speed, max_speed, min_prompt_length, prompt_character_limit. Internal TTS per-model toggles like supportsPromptParam / supportsTemperatureParam / supportsTopPParam exist on the model definitions but are not merged into /models output today — treat the speech request schema as the support matrix.
  • Embedding (top-level, not inside constraints) — embeddingDimensions, maxInputTokens, supportsCustomDimensions.

model_spec.pricing — by model family

  • LLMinput.{usd,diem}, output.{usd,diem} per 1 000 000 tokens, plus optional cache_input (reads), cache_write (writes, e.g. Anthropic 1.25×), and extended.* tier triggered by context_token_threshold.
  • Image — either generation.{usd,diem} per image (flat) or resolutions.<tier>.{usd,diem} (per 1K/2K/4K). Every image row also carries a global upscale.{2x,4x}.{usd,diem} block (derived from shared upscale SKUs) — treat it as account-wide upscale pricing, not a signal that this specific model can upscale. Combine with the inpaint/upscale model's own capability check to decide what's actually callable.
  • Inpaint / editinpaint.{usd,diem} per edit.
  • Videonot currently returned on /models. calculatePricing() has no video branch, so video entries have no model_spec.pricing. Use POST /video/quote for the authoritative per-request price.
  • Music / long audiogeneration.{usd,diem} (per job), per_second.{usd,diem} (per second generated), per_thousand_characters.{usd,diem} (character-priced narration), or durations.<tier>.{usd,diem,min_seconds,max_seconds} (duration-bucketed).
  • TTSinput.{usd,diem} per 1 000 000 input characters.
  • ASRper_audio_second.{usd,diem}.
  • Embeddingsinput.{usd,diem} per 1 000 000 tokens.

Crypto RPC pricing is not in /models — it's tier × chain multipliers on /crypto/rpc/{network} (see venice-crypto-rpc).

Other top-level model_spec fields

Field Use
privacy (private / anonymized) Zero data retention if private.
beta / betaModel Gated to beta users (beta: true ⇒ need access).
offline Currently unavailable; skip.
regionRestrictions[] Country codes. 403 outside them.
deprecation.date Retirement date. Migrate before.

GET /models/traits

curl "https://api.venice.ai/api/v1/models/traits?type=text"

Returns { object: "list", type: "text", data: { "default": "zai-org-glm-5-1", "fastest": "grok-41-fast", "most_uncensored": "venice-uncensored", "default_reasoning": "...", "default_code": "...", "default_vision": "...", "function_calling_default": "...", "most_intelligent": "..." } } for type=text. For type=image, expect keys like default, fastest, highest_quality, eliza-default. Trait keys come from the internal ApiModelTraits / LLMApiModelTraits / ImageApiModelTraits enums.

Use this to avoid hard-coding model IDs — resolve a trait at boot and cache for the session.

GET /models/compatibility_mapping

curl "https://api.venice.ai/api/v1/models/compatibility_mapping?type=text"

Returns { object: "list", type: "text", data: { "openai-gpt-54-pro": "zai-org-glm-5-1", "claude-opus-4-7": "claude-opus-4-7", "gpt-5-4-pro": "openai-gpt-54-pro", ... } }. Both OpenAI-style IDs (openai-gpt-54-pro) and vendor-style aliases (gpt-5-4-pro) may appear as keys.

Lets an OpenAI-style client call Venice with its native model IDs — Venice substitutes behind the scenes. Useful when porting existing code.

Common patterns

Pick a vision+reasoning model at runtime

const list = await fetch(`${base}/models?type=text`).then(r => r.json())
const match = list.data.find((m: any) =>
  m.model_spec.capabilities.supportsVision &&
  m.model_spec.capabilities.supportsReasoning &&
  !m.model_spec.offline &&
  !m.model_spec.beta
)

Validate an image request before submit

const spec = (await fetch(`${base}/models?type=image`).then(r => r.json()))
  .data.find((m: any) => m.id === myModel)!.model_spec

const { widthHeightDivisor, promptCharacterLimit, aspectRatios } = spec.constraints
if (prompt.length > promptCharacterLimit) throw new Error('prompt too long')
if (width % widthHeightDivisor !== 0) throw new Error('width not divisible')
if (aspectRatios && !aspectRatios.includes(myAspect)) throw new Error('bad aspect')

Estimate LLM cost

const p = spec.pricing
const cost =
  (inputTokens / 1_000_000) * p.input.usd +
  (outputTokens / 1_000_000) * p.output.usd +
  (cachedTokens / 1_000_000) * (p.cache_input?.usd ?? 0)

For extended-context runs, check if inputTokens > p.extended?.context_token_threshold and switch to p.extended.* rates.

?type=code

type=code is a convenience filter returning text models with capabilities.optimizedForCode === true. Same response shape as type=text.

Gotchas

  • The catalog changes — cache for minutes, not days.
  • beta: true models require beta-flagged keys — otherwise 401 with "only available to Pro users".
  • offline: true means the model exists in the catalog but can't currently serve requests — treat it as absent for scheduling.
  • model_spec.pricing can be missing on free / internal models — guard against undefined.
  • traits differ by type — there's no "global default"; always pass ?type=....
  • compatibility_mapping resolves model IDs, not capabilities. If your caller sends openai-gpt-54-pro but needs vision, verify via the resolved Venice model's capabilities.supportsVision.
使用Venice Alpha版POST /responses端点,提供OpenAI兼容的结构化输出。支持推理、消息及工具调用等类型块分离,适用于需清晰区分逻辑与输出的Agent场景。注意该接口无状态且部分参数受限。
需要结构化输出块(如reasoning、function_call)时 客户端库期望OpenAI Responses格式时 需通过SSE流式传输并处理类型化事件时
skills/veniceai_skills/venice-responses/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-responses -g -y
SKILL.md
Frontmatter
{
    "name": "venice-responses",
    "description": "Use Venice's Alpha POST \/responses endpoint - an OpenAI-compatible Responses API with typed output blocks (reasoning, message, function_call, web_search_call). Covers request shape, streaming, differences from \/chat\/completions, supported venice_parameters subset, and E2EE behavior."
}

Venice Responses API (Alpha)

POST /api/v1/responses is Venice's OpenAI-compatible Responses endpoint. It returns a structured, typed output array instead of a single message.content string — ideal for agents that need to separate reasoning, messages, tool calls, and built-in tool events.

Alpha. Access is gated behind the responsesApiEnabled flag on Bearer API keys (staff-only during beta). x402 wallet auth bypasses this flag — you can pay per request without the flag. Schemas may change.

Use when

  • You need the OpenAI Responses-style response shape (output[] with typed type: "reasoning" | "message" | "function_call" | "web_search_call" blocks) for a client library that expects it.
  • You want clean separation of reasoning vs message vs tool-call output.
  • You want streaming via SSE with typed events.

Otherwise use venice-chat — it has more features, more models, and full Venice parameters.

Limitations vs /chat/completions

Limitation Detail
Stateless No conversation persistence across requests. Send the full history each call.
E2EE models default to rejection E2EE-capable models return 400 unless you pass venice_parameters.enable_e2ee: false (TEE-only mode). For end-to-end encrypted inference with E2EE headers, use /chat/completions.
Subset of venice_parameters character_slug, enable_e2ee, enable_web_search, enable_web_scraping, enable_web_citations, include_venice_system_prompt, include_search_results_in_stream are supported. strip_thinking_response, disable_thinking, enable_x_search are not wired through in Alpha.
Access gated by feature flag Bearer keys without responsesApiEnabled get 401. x402 requests are allowed (pay-per-call).

Authentication

Same as the rest of the API — either Authorization: Bearer <key> or X-Sign-In-With-X: <SIWE>. See venice-auth.

Minimal request

curl https://api.venice.ai/api/v1/responses \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "zai-org-glm-5-1",
    "input": "Explain why the sky is blue in one paragraph."
  }'

input accepts:

  • a plain string, or
  • an array of typed input items (similar to chat/completions message parts) for multi-turn or multimodal history.

Response shape

{
  "id": "resp_abc123",
  "object": "response",
  "created_at": 1735689600,
  "model": "zai-org-glm-5-1",
  "status": "completed",
  "output": [
    {
      "type": "reasoning",
      "id": "rs_1",
      "summary": ["I considered Rayleigh scattering..."],
      "encrypted_content": "..."
    },
    {
      "type": "message",
      "id": "msg_1",
      "status": "completed",
      "role": "assistant",
      "content": [{
        "type": "output_text",
        "text": "The sky is blue because...",
        "annotations": [{
          "type": "url_citation",
          "url": "https://example.com/rayleigh",
          "title": "Rayleigh scattering",
          "start_index": 42,
          "end_index": 99
        }]
      }]
    },
    {
      "type": "function_call",
      "id": "fc_1",
      "call_id": "call_abc",
      "name": "get_weather",
      "arguments": "{\"city\":\"Paris\"}",
      "status": "completed"
    },
    {
      "type": "web_search_call",
      "id": "ws_1",
      "status": "completed"
    }
  ],
  "usage": {
    "input_tokens": 20,
    "input_tokens_details": {"cached_tokens": 0},
    "output_tokens": 80,
    "output_tokens_details": {"reasoning_tokens": 40},
    "total_tokens": 100
  }
}

Top-level statuscompleted | failed | in_progress | cancelled. On failed, error.code and error.message are populated.

Output block types

type Purpose
reasoning Thought process from reasoning models. summary[] holds human-readable text; encrypted_content holds opaque signatures — round-trip verbatim for multi-turn tool calls.
message Main text output. content[].type === "output_text", plus annotations[] for url_citation entries from web search.
function_call Tool call: name, stringified-JSON arguments, call_id.
web_search_call Sentinel showing the built-in web_search tool fired; use alongside url_citation annotations on messages.

Match tool outputs back by call_id when continuing the turn.

Common request fields

Field Notes
model Required. Model ID, trait, or compatibility mapping. Feature suffixes allowed (see venice-chat).
input Required. String or input-items array. To set system/developer context, include a leading message with role: "system"/"developer" in the input array.
tools Array of {type:"function",function:{...}} or built-in {type:"web_search"} — availability depends on the model.
tool_choice "auto" / "required" / "none" / {type:"function",function:{"name":"..."}}.
reasoning.effort Reasoning effort hint for thinking models ("low" | "medium" | "high").
temperature, top_p, max_output_tokens, n, stop, seed, prompt_cache_key Standard generation controls — translated to /chat/completions equivalents server-side.
stream Boolean. SSE response with typed events (response.created, response.output_item.added, response.output_text.delta, response.completed, …).
venice_parameters Subset listed above. Example: {"character_slug":"alan-watts","enable_web_search":"on"}.

Fields commonly found in OpenAI's Responses API that are not in Venice's Alpha schema (and silently ignored or rejected by Zod): instructions, metadata, parallel_tool_calls, response_format, store, previous_response_id, background. For response_format / JSON-schema structured output, use /chat/completions.

Streaming

With stream: true, the response is an SSE stream of typed events. Typical flow:

event: response.created
event: response.output_item.added        # type=reasoning
event: response.reasoning.delta
event: response.output_item.added        # type=message
event: response.content_part.added
event: response.output_text.delta
event: response.output_text.delta
event: response.output_item.done
event: response.completed

Consume events in order and reconstruct output[] client-side; the shape on response.completed matches the non-streamed response exactly.

Authentication & error responses

  • 400 — bad request; also returned when an E2EE-capable model is used without venice_parameters.enable_e2ee: false.
  • 401 — auth failed, or Bearer key lacks responsesApiEnabled, or the model is Pro-only and you're on an INFERENCE key / x402 wallet.
  • 402 — insufficient balance. Bearer → { error: "INSUFFICIENT_BALANCE" }. x402 → PAYMENT_REQUIRED with topUpInstructions and siwxChallenge (see venice-x402).
  • 429 — rate-limited.
  • 500 — inference failed.

X-Balance-Remaining is on 200 responses when using x402 auth; PAYMENT-REQUIRED header on 402.

Migration notes

  • Port messages → pass as input (string, or typed array with leading {role:"system"|"developer", content:"..."}).
  • venice_parameters.character_slugsupported; pass inside venice_parameters or as a model feature suffix (:character_slug=alan-watts).
  • venice_parameters.enable_web_search → pass inside venice_parameters, or append :enable_web_search=on to the model ID, or add {"type":"web_search"} to tools.
  • venice_parameters.strip_thinking_response / disable_thinkingnot supported on /responses in Alpha; stay on /chat/completions for these.
  • Full E2EE flow (E2EE request headers + encrypted response) → stay on /chat/completions. For TEE-only inference on an E2EE-capable model, pass venice_parameters.enable_e2ee: false here.
  • response_format / JSON-schema structured output → stay on /chat/completions.
用于通过Venice API异步生成视频(文/图/视频转视频)及转录YouTube音频。涵盖报价、排队、轮询状态、下载及清理的完整生命周期,支持自定义模型参数与分辨率。
需要生成文本到视频或图像到视频的动画内容 需要对YouTube视频链接进行音频转录 需要对现有视频进行超分辨率处理或添加音频 希望在提交任务前获取精确的价格预估
skills/veniceai_skills/venice-video/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-video -g -y
SKILL.md
Frontmatter
{
    "name": "venice-video",
    "description": "Generate and transcribe videos via Venice. Covers the async \/video\/quote + \/video\/queue + \/video\/retrieve + \/video\/complete loop, text-to-video, image-to-video, video-to-video (upscale), audio input, reference images, scene and element support, plus \/video\/transcriptions for YouTube URLs."
}

Venice Video

Video is asynchronous — like audio music. Five endpoints:

Endpoint Purpose
POST /video/quote Price in USD (no charge, no job).
POST /video/queue Enqueue generation. Returns queue_id, charges (reserves) funds.
POST /video/retrieve Poll status or download video/mp4.
POST /video/complete Finalize & delete media from Venice storage.
POST /video/transcriptions Sync: transcribe a YouTube URL's audio.

Use when

  • You need text-to-video, image-to-video, video upscale, video-with-audio, or video transcription.
  • You can tolerate async execution (single-digit seconds to several minutes depending on model, duration, and queue depth — inspect average_execution_time and execution_duration on /video/retrieve for your job's live estimate).
  • You want to price a job precisely before committing (/video/quote).

Lifecycle — generation

1. Price with /video/quote

curl https://api.venice.ai/api/v1/video/quote \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-2-7-text-to-video",
    "duration": "5s",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "audio": true
  }'

Response: {"quote": 0.35} USD.

2. Submit with /video/queue

curl https://api.venice.ai/api/v1/video/queue \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan-2-7-text-to-video",
    "prompt": "Commerce being conducted in the city of Venice, Italy.",
    "negative_prompt": "low resolution, worst quality, defects",
    "duration": "5s",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "audio": true
  }'

Response: { "model": "...", "queue_id": "uuid", "download_url": "https://..." }.

  • download_url only appears for VPS-backed models. When present, the retrieve endpoint returns JSON status only — fetch this URL to download. Valid 24 h.

3. Poll with /video/retrieve

curl https://api.venice.ai/api/v1/video/retrieve \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"...","queue_id":"..."}' \
  --output out.mp4
  • Processing: JSON {"status":"PROCESSING","average_execution_time":145000,"execution_duration":53200} (ms).
  • Completed (non-VPS): binary video/mp4 body.
  • Completed (VPS-backed): {"status":"COMPLETED", ...} — fetch the download_url from the queue response.
  • delete_media_on_completion: true auto-deletes after successful retrieve.

4. Finalize with /video/complete

curl https://api.venice.ai/api/v1/video/complete \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"...","queue_id":"..."}'

QueueVideoRequest fields

Availability depends on the model — check GET /models?type=video.

Field Type Notes
model string Required.
prompt string, ≤ 2500–3500 Required (min length 1). Max length varies per model.
negative_prompt string, ≤ 2500–3500
duration enum 2s..30s or Auto Required. Model-specific subset.
aspect_ratio 1:1, 2:3, 3:2, 3:4, 4:3, 9:16, 16:9, 21:9 Some models ignore.
resolution 256p..4k, or upscale hints 2x / 4x / true_1080p Use upscale_factor for upscale models.
upscale_factor 1 / 2 / 4 Only for upscale models. 1 = quality enhancement.
audio bool Default true. Audio-capable models.
image_url URL or data: URL Image-to-video reference frame.
end_image_url URL or data URL End frame / transition reference.
audio_url URL or data URL Background music input. WAV/MP3, ≤ 30 s, ≤ 15 MB.
video_url URL or data URL Video-to-video / upscale input. MP4/MOV/WebM.
reference_image_urls[] array of URLs, ≤ 9 Character / style consistency images.
elements[] array, ≤ 4 Advanced models (e.g. Kling O3 R2V): each has frontal_image_url, up to 3 reference_image_urls, video_url. Reference in prompt as @Element1, @Element2.
scene_image_urls[] array of URLs, ≤ 4 Advanced scene refs; reference in prompt as @Image1, @Image2.

Common recipes

Text → video with audio

{
  "model": "wan-2-7-text-to-video",
  "prompt": "A golden retriever chasing a frisbee in slow motion at sunset.",
  "duration": "6s",
  "aspect_ratio": "16:9",
  "resolution": "720p",
  "audio": true
}

Image → video

{
  "model": "<image-to-video model>",
  "prompt": "Camera slowly zooms out, revealing the cityscape.",
  "image_url": "https://example.com/cityscape.jpg",
  "duration": "5s",
  "aspect_ratio": "16:9"
}

Video upscale

{
  "model": "<upscale model>",
  "video_url": "data:video/mp4;base64,...",
  "upscale_factor": 2,
  "duration": "Auto"
}

Multi-element consistency (Kling O3 R2V-style)

{
  "model": "<advanced-model>",
  "prompt": "@Element1 walks toward @Element2 against @Image1.",
  "elements": [
    { "frontal_image_url": "<char1.png>", "reference_image_urls": ["<alt1.png>"] },
    { "frontal_image_url": "<char2.png>" }
  ],
  "scene_image_urls": ["<street-scene.jpg>"]
}

/video/transcriptions (sync)

Transcribe a YouTube video URL directly — no queue.

curl https://api.venice.ai/api/v1/video/transcriptions \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://www.youtube.com/watch?v=...","response_format":"json"}'

Response: {"transcript":"...","lang":"en"} (JSON) or plain text/plain body when response_format: text.

For arbitrary audio files, use venice-audio-transcription instead.

Full polling loop

async function waitForVideo(model: string, queueId: string, downloadUrl?: string) {
  while (true) {
    const res = await fetch(`${base}/video/retrieve`, {
      method: 'POST', headers,
      body: JSON.stringify({ model, queue_id: queueId }),
    })
    const ct = res.headers.get('content-type') ?? ''
    if (ct.startsWith('video/')) {
      return Buffer.from(await res.arrayBuffer())
    }
    const body = await res.json()
    if (body.status === 'COMPLETED' && downloadUrl) {
      const v = await fetch(downloadUrl)
      return Buffer.from(await v.arrayBuffer())
    }
    if (body.status !== 'PROCESSING') throw new Error(`unexpected ${body.status}`)
    await new Promise(r => setTimeout(r, 5000))
  }
}

Errors

Code Meaning
400 Bad params (duration/resolution not supported by model, missing required image_url for i2v, missing prompt, etc.).
401 Auth / Pro-only.
402 Insufficient balance.
403 Model unavailable in your region.
413 Request payload too large — shrink images / audio. (Returned from /video/queue.)
422 Content policy violation. (Returned from /video/queue.)
500 Inference failed.
503 Model at capacity — retry later. On /video/retrieve, returned when the queue is backed up.

/video/queue does not document 503 in the spec — upstream capacity issues surface there as 500. Watch for 503 specifically on /video/retrieve.

Gotchas

  • duration is required on /video/queue. Even Auto is a valid explicit value.
  • download_url is only sometimes returned at queue time. Always handle both paths: binary from /retrieve OR fetching download_url after status COMPLETED.
  • download_url expires in 24 h — download promptly.
  • Upscale models use upscale_factor instead of resolution.
  • reference_image_urls[] is capped at 9 entries, elements[] at 4, scene_image_urls[] at 4. Over-limit is 400.
  • data: URLs count toward payload size; large base64 videos may trip 413 — prefer hosted URLs.
  • /video/transcriptions is YouTube-URL-only; it does not accept arbitrary video uploads (use ffmpeg to strip audio, then /audio/transcriptions).
管理Venice x402钱包信用,支持通过Base链USDC充值、查询余额及交易记录。涵盖支付发现、签名结算流程及402响应处理,最低充值5美元,无需账户即可按请求付费。
用户需要为Venice API充值或支付 用户希望查询x402钱包余额或交易历史 遇到402 Payment Required错误需解决支付问题
skills/veniceai_skills/venice-x402/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill venice-x402 -g -y
SKILL.md
Frontmatter
{
    "name": "venice-x402",
    "description": "Manage Venice x402 wallet credits. Covers POST \/x402\/top-up (payment discovery + signed USDC settlement), GET \/x402\/balance\/{walletAddress}, GET \/x402\/transactions\/{walletAddress}, USDC on Base (chain 8453), minimum $5 top-up, transaction types TOP_UP\/CHARGE\/REFUND, and the x402 v2 PAYMENT-REQUIRED response shape returned by all inference endpoints."
}

Venice x402 (wallet credits)

x402 is Venice's wallet-based payment flow. Pay per request with USDC on Base, no account required. Three admin endpoints plus the protocol-level 402 response returned by every inference endpoint.

Endpoint Auth Purpose
POST /x402/top-up None (discovery) / X-402-Payment (settlement) Discover payment requirements, then settle a signed USDC transfer.
GET /x402/balance/{walletAddress} SIWE (X-Sign-In-With-X) Current USD balance for a wallet.
GET /x402/transactions/{walletAddress} SIWE Paginated ledger: TOP_UP, CHARGE, REFUND.

For the SIWE header format itself, see venice-auth.

Pay with a wallet: end-to-end

1. Call an inference endpoint with no balance → 402

Any inference endpoint (e.g. POST /chat/completions) returns a 402 with structured topUpInstructions and siwxChallenge when the wallet balance is too low. The PAYMENT-REQUIRED response header carries the x402 v2 paymentRequired object (base64-encoded JSON containing x402Version, error, resource, accepts[], and optional extensions) — it is not the same payload as the 402 body, which is a richer balance/top-up document.

{
  "error": "Payment required",
  "code": "PAYMENT_REQUIRED",
  "message": "Insufficient x402 balance",
  "suggestedTopUpUsd": 10,
  "minimumTopUpUsd": 5,
  "supportedTokens": ["USDC"],
  "supportedChains": ["base"],
  "topUpInstructions": {
    "step1": "POST /api/v1/x402/top-up with no payment header to get payment requirements",
    "step2": "Sign a USDC transfer authorization using the x402 SDK (createPaymentHeader)",
    "step3": "POST /api/v1/x402/top-up with the signed X-402-Payment header",
    "receiverWallet": "<RECEIVER_WALLET_ADDRESS>",
    "tokenAddress": "<USDC_TOKEN_ADDRESS>",
    "tokenDecimals": 6,
    "network": "eip155:8453",
    "minimumAmountUsd": 5
  },
  "siwxChallenge": {
    "info": { "domain": "api.venice.ai", "statement": "Sign in to Venice AI", ... },
    "supportedChains": ["eip155:8453"]
  }
}

2. Discover payment requirements — POST /x402/top-up (no header)

curl -X POST https://api.venice.ai/api/v1/x402/top-up

Response 402:

{
  "x402Version": 2,
  "accepts": [{
    "protocol": "x402",
    "version": 2,
    "network": "eip155:8453",
    "asset": "<USDC_TOKEN_ADDRESS>",
    "amount": "5000000",          // base units; USDC = 6 decimals → 5 USDC
    "payTo": "<RECEIVER_WALLET_ADDRESS>"
  }]
}

3. Sign a USDC transfer → POST /x402/top-up with X-402-Payment

The x402 SDK does the EIP-712 USDC transferWithAuthorization signing for you:

npm install x402
import { createPaymentHeader } from 'x402'
import { Wallet } from 'ethers'

const wallet = new Wallet(process.env.WALLET_KEY!)
// 1. Discover
const discover = await fetch(`${base}/x402/top-up`, { method: 'POST' })
const { accepts: [req] } = await discover.json()

// 2. Sign payment for $10 (write your own amount in base units)
const amount = '10000000' // $10
const header = await createPaymentHeader({ ...req, amount }, wallet)

// 3. Settle
const settle = await fetch(`${base}/x402/top-up`, {
  method: 'POST',
  headers: { 'X-402-Payment': header },
})
const { data } = await settle.json()
console.log(data.newBalance, data.amountCredited, data.paymentId)

200 response:

{
  "success": true,
  "data": {
    "walletAddress": "0x...",
    "amountCredited": 10,
    "newBalance": 22.5,
    "paymentId": "payment_01HZ..."
  }
}

4. Call inference again — credits are now debited from the wallet

The venice-x402-client SDK wraps steps 1–4: it catches 402, auto-tops-up to a configured amount, and retries.

GET /x402/balance/{walletAddress}

curl "https://api.venice.ai/api/v1/x402/balance/0xYOUR_WALLET" \
  -H "X-Sign-In-With-X: <base64 siwe>"
{
  "success": true,
  "data": {
    "walletAddress": "0x...",
    "balanceUsd": 12.5,
    "canConsume": true,
    "minimumTopUpUsd": 5,
    "suggestedTopUpUsd": 10,
    "diemBalanceUsd": 5.25    // optional — present if the wallet is linked to a Venice account with DIEM
  }
}

The SIWE signer must match the path wallet — 403 otherwise.

GET /x402/transactions/{walletAddress}

curl "https://api.venice.ai/api/v1/x402/transactions/0xYOUR_WALLET?limit=50&offset=0" \
  -H "X-Sign-In-With-X: <base64 siwe>"
{
  "success": true,
  "data": {
    "walletAddress": "0x...",
    "currentBalance": 12.35,
    "transactions": [
      {
        "id": "ledger_01H...",
        "amount": -0.15,
        "balanceAfter": 12.35,
        "type": "CHARGE",
        "createdAt": "2026-04-03T12:34:56.000Z",
        "requestId": "chatcmpl-...",
        "modelId": "zai-org-glm-5-1"
      },
      {
        "id": "ledger_01H...",
        "amount": 10,
        "balanceAfter": 12.5,
        "type": "TOP_UP",
        "createdAt": "2026-04-03T12:00:00.000Z",
        "requestId": null,
        "modelId": null
      }
    ],
    "pagination": { "limit": 50, "offset": 0, "hasMore": false }
  }
}

Transaction types

type Sign of amount Meaning
TOP_UP positive /x402/top-up settlement.
CHARGE negative Inference debit. requestId / modelId link back to the call.
REFUND positive Failed request refund or manual adjustment.

Query parameters

/x402/transactions/{walletAddress}

Param Notes
limit 1–100. Default 50.
offset Number of entries to skip. Default 0.

Use offset + limit and pagination.hasMore for paging.

Constants

  • Chain — Base mainnet, chain ID 8453 (eip155:8453).
  • Token — USDC (6 decimals). Native USDC on Base; not USDbC.
  • Minimum top-up$5 by default. A small number of allow-listed wallets (e.g. internal test wallets) may have a lower per-wallet override — always use the minimumTopUpUsd returned in topUpInstructions / /x402/balance rather than hardcoding 5.
  • x402 SDKnpm install x402 for raw payment header signing, or venice-x402-client for the managed Venice flow.
  • Receiver wallet + token contract are returned in topUpInstructions; don't hardcode them.

Errors

Code Meaning
400 Below minimum top-up, invalid wallet format, or other validation.
401 X-Sign-In-With-X header is present but invalid (bad signature, expired, nonce reuse, unsupported chain) — returned as X402_SIGN_IN_* error codes.
402 Expected discovery response on /x402/top-up (no payment header), on /x402/balance and /x402/transactions when the SIWE header is absent, and on any inference endpoint when the wallet balance is insufficient. Settlement errors use INVALID_PAYMENT / INVALID_PAYMENT_FORMAT / INSUFFICIENT_FUNDS / EXPIRED_PAYMENT codes.
403 SIWE wallet ≠ path wallet.
429 Too many top-ups/balance checks.
500 Settlement failure; retry with a fresh nonce.

Gotchas

  • Use the x402 SDK (npm install x402) for signing. Hand-rolling the EIP-712 transferWithAuthorization is risky — nonce reuse ⇒ INVALID_PAYMENT.
  • The SIWE signer wallet must match the walletAddress path param on balance / transactions. Separate wallets can't inspect each other.
  • /x402/top-up is unauthenticated on the discovery call — auth is implicit via the signed X-402-Payment header on settlement.
  • balanceUsd on /x402/balance is the USDC credit balance only. diemBalanceUsd, when present, is a separate linked-account number — sum them yourself if you need a combined figure.
  • PAYMENT-REQUIRED (uppercase, hyphens) is the header with base64-encoded x402 paymentRequired object; don't confuse it with the body field code: "PAYMENT_REQUIRED" (which only appears on insufficient-balance bodies, not on auth-style 402s).
  • On /x402/balance and /x402/transactions, missing the SIWE header returns 402 (not 401). Only a present-but-invalid header returns 401 with a X402_SIGN_IN_* code.
  • The x402 v2 accepts[].amount is in base units (e.g. "5000000" = 5 USDC). Don't multiply by decimals again.
  • DIEM, BUNDLED_CREDITS, and Bearer-account USD are independent from wallet credits. For account balance, use venice-billing.
构建、调试和优化基于Claude API及Anthropic SDK的应用,支持模型迁移与特性调优。适用于涉及Anthropic代码导入、Prompt缓存或模型配置的场景,排除其他提供商代码。
代码导入 anthropic 或 @anthropic-ai/sdk 用户询问 Claude API、Anthropic SDK 或 Managed Agents 修改或优化 Prompt 缓存、Thinking、Tool Use 等特性 涉及 Opus/Sonnet/Haiku 等模型的调整
skills/anthropics_skills/claude-api/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill claude-api -g -y
SKILL.md
Frontmatter
{
    "name": "claude-api",
    "license": "Complete terms in LICENSE.txt",
    "description": "Build, debug, and optimize Claude API \/ Anthropic SDK apps. Apps built with this skill should include prompt caching. Also handles migrating existing Claude API code between Claude model versions (4.5 → 4.6, 4.6 → 4.7, retired-model replacements). TRIGGER when: code imports `anthropic`\/`@anthropic-ai\/sdk`; user asks for the Claude API, Anthropic SDK, or Managed Agents; user adds\/modifies\/tunes a Claude feature (caching, thinking, compaction, tool use, batch, files, citations, memory) or model (Opus\/Sonnet\/Haiku) in a file; questions about prompt caching \/ cache hit rate in an Anthropic SDK project. SKIP: file imports `openai`\/other-provider SDK, filename like `*-openai.py`\/`*-generic.py`, provider-neutral code, general programming\/ML."
}

Building LLM-Powered Applications with Claude

This skill helps you build LLM-powered applications with Claude. Choose the right surface based on your needs, detect the project language, then read the relevant language-specific documentation.

Before You Start

Scan the target file (or, if no target file, the prompt and project) for non-Anthropic provider markers — import openai, from openai, langchain_openai, OpenAI(, gpt-4, gpt-5, file names like agent-openai.py or *-generic.py, or any explicit instruction to keep the code provider-neutral. If you find any, stop and tell the user that this skill produces Claude/Anthropic SDK code; ask whether they want to switch the file to Claude or want a non-Claude implementation. Do not edit a non-Anthropic file with Anthropic SDK calls.

Output Requirement

When the user asks you to add, modify, or implement a Claude feature, your code must call Claude through one of:

  1. The official Anthropic SDK for the project's language (anthropic, @anthropic-ai/sdk, com.anthropic.*, etc.). This is the default whenever a supported SDK exists for the project.
  2. Raw HTTP (curl, requests, fetch, httpx, etc.) — only when the user explicitly asks for cURL/REST/raw HTTP, the project is a shell/cURL project, or the language has no official SDK.

Never mix the two — don't reach for requests/fetch in a Python or TypeScript project just because it feels lighter. Never fall back to OpenAI-compatible shims.

Never guess SDK usage. Function names, class names, namespaces, method signatures, and import paths must come from explicit documentation — either the {lang}/ files in this skill or the official SDK repositories or documentation links listed in shared/live-sources.md. If the binding you need is not explicitly documented in the skill files, WebFetch the relevant SDK repo from shared/live-sources.md before writing code. Do not infer Ruby/Java/Go/PHP/C# APIs from cURL shapes or from another language's SDK.

Defaults

Unless the user requests otherwise:

For the Claude model version, please use Claude Opus 4.8, which you can access via the exact model string claude-opus-4-8. Please default to using adaptive thinking (thinking: {type: "adaptive"}) for anything remotely complicated. And finally, please default to streaming for any request that may involve long input, long output, or high max_tokens — it prevents hitting request timeouts. Use the SDK's .get_final_message() / .finalMessage() helper to get the complete response if you don't need to handle individual stream events


Subcommands

If the User Request at the bottom of this prompt is a bare subcommand string (no prose), search every Subcommands table in this document — including any in sections appended below — and follow the matching Action column directly. This lets users invoke specific flows via /claude-api <subcommand>. If no table in the document matches, treat the request as normal prose.


Language Detection

Before reading code examples, determine which language the user is working in:

  1. Look at project files to infer the language:

    • *.py, requirements.txt, pyproject.toml, setup.py, PipfilePython — read from python/
    • *.ts, *.tsx, package.json, tsconfig.jsonTypeScript — read from typescript/
    • *.js, *.jsx (no .ts files present) → TypeScript — JS uses the same SDK, read from typescript/
    • *.java, pom.xml, build.gradleJava — read from java/
    • *.kt, *.kts, build.gradle.ktsJava — Kotlin uses the Java SDK, read from java/
    • *.scala, build.sbtJava — Scala uses the Java SDK, read from java/
    • *.go, go.modGo — read from go/
    • *.rb, GemfileRuby — read from ruby/
    • *.cs, *.csprojC# — read from csharp/
    • *.php, composer.jsonPHP — read from php/
  2. If multiple languages detected (e.g., both Python and TypeScript files):

    • Check which language the user's current file or question relates to
    • If still ambiguous, ask: "I detected both Python and TypeScript files. Which language are you using for the Claude API integration?"
  3. If language can't be inferred (empty project, no source files, or unsupported language):

    • Use AskUserQuestion with options: Python, TypeScript, Java, Go, Ruby, cURL/raw HTTP, C#, PHP
    • If AskUserQuestion is unavailable, default to Python examples and note: "Showing Python examples. Let me know if you need a different language."
  4. If unsupported language detected (Rust, Swift, C++, Elixir, etc.):

    • Suggest cURL/raw HTTP examples from curl/ and note that community SDKs may exist
    • Offer to show Python or TypeScript examples as reference implementations
  5. If user needs cURL/raw HTTP examples, read from curl/.

Language-Specific Feature Support

Language Tool Runner Managed Agents Notes
Python Yes (beta) Yes (beta) Full support — @beta_tool decorator
TypeScript Yes (beta) Yes (beta) Full support — betaZodTool + Zod
Java Yes (beta) Yes (beta) Beta tool use with annotated classes
Go Yes (beta) Yes (beta) BetaToolRunner in toolrunner pkg
Ruby Yes (beta) Yes (beta) BaseTool + tool_runner in beta
C# No No Official SDK
PHP Yes (beta) Yes (beta) BetaRunnableTool + toolRunner()
cURL N/A Yes (beta) Raw HTTP, no SDK features

Managed Agents code examples: dedicated language-specific READMEs are provided for Python, TypeScript, Go, Ruby, PHP, Java, and cURL ({lang}/managed-agents/README.md, curl/managed-agents.md). Read your language's README plus the language-agnostic shared/managed-agents-*.md concept files. Agents are persistent — create once, reference by ID. Store the agent ID returned by agents.create and pass it to every subsequent sessions.create; do not call agents.create in the request path. The Anthropic CLI is one convenient way to create agents and environments from version-controlled YAML — its URL is in shared/live-sources.md. If a binding you need isn't shown in the README, WebFetch the relevant entry from shared/live-sources.md rather than guess. C# does not currently have Managed Agents support; use cURL-style raw HTTP requests against the API.


Which Surface Should I Use?

Start simple. Default to the simplest tier that meets your needs. Single API calls and workflows handle most use cases — only reach for agents when the task genuinely requires open-ended, model-driven exploration.

Use Case Tier Recommended Surface Why
Classification, summarization, extraction, Q&A Single LLM call Claude API One request, one response
Batch processing or embeddings Single LLM call Claude API Specialized endpoints
Multi-step pipelines with code-controlled logic Workflow Claude API + tool use You orchestrate the loop
Custom agent with your own tools Agent Claude API + tool use Maximum flexibility
Server-managed stateful agent with workspace Agent Managed Agents Anthropic runs the loop and hosts the tool-execution sandbox
Persisted, versioned agent configs Agent Managed Agents Agents are stored objects; sessions pin to a version
Long-running multi-turn agent with file mounts Agent Managed Agents Per-session containers, SSE event stream, Skills + MCP

Note: Managed Agents is the right choice when you want Anthropic to run the agent loop and host the container where tools execute — file ops, bash, code execution all run in the per-session workspace. If you want to host the compute yourself or run your own custom tool runtime, Claude API + tool use is the right choice — use the tool runner for automatic loop handling, or the manual loop for fine-grained control (approval gates, custom logging, conditional execution).

Third-party providers (Amazon Bedrock, Google Vertex AI, Microsoft Foundry): Managed Agents is not available on Bedrock, Vertex, or Foundry. If you are deploying through any third-party provider, use Claude API + tool use for all use cases — including ones where Managed Agents would otherwise be the recommended surface.

Decision Tree

What does your application need?

0. Are you deploying through Amazon Bedrock, Google Vertex AI, or Microsoft Foundry?
   └── Yes → Claude API (+ tool use for agents) — Managed Agents is 1P only.
   No → continue.

1. Single LLM call (classification, summarization, extraction, Q&A)
   └── Claude API — one request, one response

2. Do you want Anthropic to run the agent loop and host a per-session
   container where Claude executes tools (bash, file ops, code)?
   └── Yes → Managed Agents — server-managed sessions, persisted agent configs,
       SSE event stream, Skills + MCP, file mounts.
       Examples: "stateful coding agent with a workspace per task",
                 "long-running research agent that streams events to a UI",
                 "agent with persisted, versioned config used across many sessions"

3. Workflow (multi-step, code-orchestrated, with your own tools)
   └── Claude API with tool use — you control the loop

4. Open-ended agent (model decides its own trajectory, your own tools, you host the compute)
   └── Claude API agentic loop (maximum flexibility)

Should I Build an Agent?

Before choosing the agent tier, check all four criteria:

  • Complexity — Is the task multi-step and hard to fully specify in advance? (e.g., "turn this design doc into a PR" vs. "extract the title from this PDF")
  • Value — Does the outcome justify higher cost and latency?
  • Viability — Is Claude capable at this task type?
  • Cost of error — Can errors be caught and recovered from? (tests, review, rollback)

If the answer is "no" to any of these, stay at a simpler tier (single call or workflow).


Architecture

Everything goes through POST /v1/messages. Tools and output constraints are features of this single endpoint — not separate APIs.

User-defined tools — You define tools (via decorators, Zod schemas, or raw JSON), and the SDK's tool runner handles calling the API, executing your functions, and looping until Claude is done. For full control, you can write the loop manually.

Server-side tools — Anthropic-hosted tools that run on Anthropic's infrastructure. Code execution is fully server-side (declare it in tools, Claude runs code automatically). Computer use can be server-hosted or self-hosted.

Structured outputs — Constrains the Messages API response format (output_config.format) and/or tool parameter validation (strict: true). The recommended approach is client.messages.parse() which validates responses against your schema automatically. Note: the old output_format parameter is deprecated; use output_config: {format: {...}} on messages.create().

Supporting endpoints — Batches (POST /v1/messages/batches), Files (POST /v1/files), Token Counting, and Models (GET /v1/models, GET /v1/models/{id} — live capability/context-window discovery) feed into or support Messages API requests.


Current Models (cached: 2026-05-26)

Model Model ID Context Input $/1M Output $/1M
Claude Opus 4.8 claude-opus-4-8 1M $5.00 $25.00
Claude Opus 4.7 claude-opus-4-7 1M $5.00 $25.00
Claude Opus 4.6 claude-opus-4-6 1M $5.00 $25.00
Claude Sonnet 4.6 claude-sonnet-4-6 1M $3.00 $15.00
Claude Haiku 4.5 claude-haiku-4-5 200K $1.00 $5.00

ALWAYS use claude-opus-4-8 unless the user explicitly names a different model. This is non-negotiable. Do not use claude-sonnet-4-6, claude-sonnet-4-5, or any other model unless the user literally says "use sonnet" or "use haiku". Never downgrade for cost — that's the user's decision, not yours.

CRITICAL: Use only the exact model ID strings from the table above — they are complete as-is. Do not append date suffixes. For example, use claude-sonnet-4-5, never claude-sonnet-4-5-20250514 or any other date-suffixed variant you might recall from training data. If the user requests an older model not in the table (e.g., "opus 4.5", "sonnet 3.7"), read shared/models.md for the exact ID — do not construct one yourself.

A note: if any of the model strings above look unfamiliar to you, that's to be expected — that just means they were released after your training data cutoff. Rest assured they are real models; we wouldn't mess with you like that.

Live capability lookup: The table above is cached. When the user asks "what's the context window for X", "does X support vision/thinking/effort", or "which models support Y", query the Models API (client.models.retrieve(id) / client.models.list()) — see shared/models.md for the field reference and capability-filter examples.


Thinking & Effort (Quick Reference)

Opus 4.8 / 4.7 — Adaptive thinking only: Use thinking: {type: "adaptive"}. thinking: {type: "enabled", budget_tokens: N} returns a 400 — adaptive is the only on-mode. {type: "disabled"} and omitting thinking both work. Sampling parameters (temperature, top_p, top_k) are also removed and will 400. Opus 4.8 keeps the same request surface as 4.7 (no new breaking changes) — see shared/model-migration.md → Migrating to Opus 4.8 for the behavioral re-tuning, and → Migrating to Opus 4.7 for the full breaking-change list when coming from 4.6 or earlier. Note: with thinking disabled, Opus 4.8 may write longer reasoning into the visible response — leave adaptive thinking on, or add a final-answer-only instruction (see the migration guide). Opus 4.6 — Adaptive thinking (recommended): Use thinking: {type: "adaptive"}. Claude dynamically decides when and how much to think. No budget_tokens needed — budget_tokens is deprecated on Opus 4.6 and Sonnet 4.6 and should not be used for new code. Adaptive thinking also automatically enables interleaved thinking (no beta header needed). When the user asks for "extended thinking", a "thinking budget", or budget_tokens: always use Opus 4.8, 4.7, or 4.6 with thinking: {type: "adaptive"}. The concept of a fixed token budget for thinking is deprecated — adaptive thinking replaces it. Do NOT use budget_tokens for new 4.6/4.7/4.8 code and do NOT switch to an older model. Gradual-migration carve-out: budget_tokens is still functional on Opus 4.6 and Sonnet 4.6 as a transitional escape hatch — if you're migrating existing code and need a hard token ceiling before you've tuned effort, see shared/model-migration.md → Transitional escape hatch. Note: this carve-out does not apply to Opus 4.7 or 4.8 — budget_tokens is fully removed there. Effort parameter (GA, no beta header): Controls thinking depth and overall token spend via output_config: {effort: "low"|"medium"|"high"|"max"} (inside output_config, not top-level). Default is high (equivalent to omitting it). max is Opus-tier only (Opus 4.6 and later — not Sonnet or Haiku). Opus 4.7 added "xhigh" (between high and max) — the best setting for most coding and agentic use cases on Opus 4.7/4.8, and the default in Claude Code; use a minimum of high for most intelligence-sensitive work. Works on Opus 4.5, Opus 4.6, Opus 4.7, Opus 4.8, and Sonnet 4.6. Will error on Sonnet 4.5 / Haiku 4.5. On Opus 4.7 and 4.8, effort matters more than on any prior Opus — re-tune it when migrating, and run long-horizon/agentic tasks at high/xhigh with the full task spec given up front. Combine with adaptive thinking for the best cost-quality tradeoffs. Lower effort means fewer and more-consolidated tool calls, less preamble, and terser confirmations — high is often the sweet spot balancing quality and token efficiency; use max when correctness matters more than cost; use low for subagents or simple tasks.

Opus 4.8 / 4.7 — thinking content omitted by default: thinking blocks still stream but their text is empty unless you opt in with thinking: {type: "adaptive", display: "summarized"} (default is "omitted"). Silent change — no error. If you stream reasoning to users, the default looks like a long pause before output; set "summarized" to restore visible progress.

Task Budgets (beta, Opus 4.7 / 4.8): output_config: {task_budget: {type: "tokens", total: N}} tells the model how many tokens it has for a full agentic loop — it sees a running countdown and self-moderates (minimum 20,000; beta header task-budgets-2026-03-13). Distinct from max_tokens, which is an enforced per-response ceiling the model is not aware of. See shared/model-migration.md → Task Budgets.

Sonnet 4.6: Supports adaptive thinking (thinking: {type: "adaptive"}). budget_tokens is deprecated on Sonnet 4.6 — use adaptive thinking instead.

Older models (only if explicitly requested): If the user specifically asks for Sonnet 4.5 or another older model, use thinking: {type: "enabled", budget_tokens: N}. budget_tokens must be less than max_tokens (minimum 1024). Never choose an older model just because the user mentions budget_tokens — use Opus 4.8 with adaptive thinking instead.


Compaction (Quick Reference)

Beta, Opus 4.8, Opus 4.7, Opus 4.6, and Sonnet 4.6. For long-running conversations that may exceed the 1M context window, enable server-side compaction. The API automatically summarizes earlier context when it approaches the trigger threshold (default: 150K tokens). Requires beta header compact-2026-01-12.

Critical: Append response.content (not just the text) back to your messages on every turn. Compaction blocks in the response must be preserved — the API uses them to replace the compacted history on the next request. Extracting only the text string and appending that will silently lose the compaction state.

See {lang}/claude-api/README.md (Compaction section) for code examples. Full docs via WebFetch in shared/live-sources.md.


Prompt Caching (Quick Reference)

Prefix match. Any byte change anywhere in the prefix invalidates everything after it. Render order is toolssystemmessages. Keep stable content first (frozen system prompt, deterministic tool list), put volatile content (timestamps, per-request IDs, varying questions) after the last cache_control breakpoint.

Top-level auto-caching (cache_control: {type: "ephemeral"} on messages.create()) is the simplest option when you don't need fine-grained placement. Max 4 breakpoints per request. Minimum cacheable prefix is ~1024 tokens — shorter prefixes silently won't cache.

Verify with usage.cache_read_input_tokens — if it's zero across repeated requests, a silent invalidator is at work (datetime.now() in system prompt, unsorted JSON, varying tool set).

For placement patterns, architectural guidance, and the silent-invalidator audit checklist: read shared/prompt-caching.md. Language-specific syntax: {lang}/claude-api/README.md (Prompt Caching section).


Managed Agents (Beta)

Managed Agents is a third surface: server-managed stateful agents with Anthropic-hosted tool execution. You create a persisted, versioned Agent config (POST /v1/agents), then start Sessions that reference it. Each session provisions a container as the agent's workspace — bash, file ops, and code execution run there; the agent loop itself runs on Anthropic's orchestration layer and acts on the container via tools. The session streams events; you send messages and tool results back.

Managed Agents is first-party only. It is not available on Amazon Bedrock, Google Vertex AI, or Microsoft Foundry. For agents on third-party providers, use Claude API + tool use.

Mandatory flow: Agent (once) → Session (every run). model/system/tools live on the agent, never the session. See shared/managed-agents-overview.md for the full reading guide, beta headers, and pitfalls.

Beta headers: managed-agents-2026-04-01 — the SDK sets this automatically for all client.beta.{agents,environments,sessions,vaults,memory_stores}.* calls. Skills API uses skills-2025-10-02 and Files API uses files-api-2025-04-14, but you don't need to explicitly pass those in for endpoints other than /v1/skills and /v1/files.

Subcommands — invoke directly with /claude-api <subcommand>:

Subcommand Action
managed-agents-onboard Walk the user through setting up a Managed Agent from scratch. Read shared/managed-agents-onboarding.md immediately and follow its interview script: mental model → know-or-explore branch → template config → session setup → emit code. Do not summarize — run the interview.

Reading guide: Start with shared/managed-agents-overview.md, then the topical shared/managed-agents-*.md files (core, environments, tools, events, outcomes, multiagent, webhooks, memory, client-patterns, onboarding, api-reference). For Python, TypeScript, Go, Ruby, PHP, and Java, read {lang}/managed-agents/README.md for code examples. For cURL, read curl/managed-agents.md. Agents are persistent — create once, reference by ID. Store the agent ID returned by agents.create and pass it to every subsequent sessions.create; do not call agents.create in the request path. The Anthropic CLI is one convenient way to create agents and environments from version-controlled YAML (URL in shared/live-sources.md). If a binding you need isn't shown in the language README, WebFetch the relevant entry from shared/live-sources.md rather than guess. C# does not currently have Managed Agents support; use raw HTTP from curl/managed-agents.md as a reference.

When the user wants to set up a Managed Agent from scratch (e.g. "how do I get started", "walk me through creating one", "set up a new agent"): read shared/managed-agents-onboarding.md and run its interview — same flow as the managed-agents-onboard subcommand.

When the user asks "how do I write the client code for X": reach for shared/managed-agents-client-patterns.md — covers lossless stream reconnect, processed_at queued/processed gate, interrupt, tool_confirmation round-trip, the correct idle/terminated break gate, post-idle status race, stream-first ordering, file-mount gotchas, keeping credentials host-side via custom tools, etc.


Reading Guide

After detecting the language, read the relevant files based on what the user needs:

Quick Task Reference

Single text classification/summarization/extraction/Q&A: → Read only {lang}/claude-api/README.md

Chat UI or real-time response display: → Read {lang}/claude-api/README.md + {lang}/claude-api/streaming.md

Long-running conversations (may exceed context window): → Read {lang}/claude-api/README.md — see Compaction section Migrating to a newer model (Opus 4.8 / Opus 4.7 / Opus 4.6 / Sonnet 4.6) or replacing a retired model: → Read shared/model-migration.md Prompt caching / optimize caching / "why is my cache hit rate low": → Read shared/prompt-caching.md + {lang}/claude-api/README.md (Prompt Caching section)

Function calling / tool use / agents: → Read {lang}/claude-api/README.md + shared/tool-use-concepts.md + {lang}/claude-api/tool-use.md

Agent design (tool surface, context management, caching strategy): → Read shared/agent-design.md

Batch processing (non-latency-sensitive): → Read {lang}/claude-api/README.md + {lang}/claude-api/batches.md

File uploads across multiple requests: → Read {lang}/claude-api/README.md + {lang}/claude-api/files-api.md

Managed Agents (server-managed stateful agents with workspace): → Read shared/managed-agents-overview.md + the rest of the shared/managed-agents-*.md files. For Python, TypeScript, Go, Ruby, PHP, and Java, read {lang}/managed-agents/README.md for code examples. For cURL, read curl/managed-agents.md. Agents are persistent — create once, reference by ID. Store the agent ID returned by agents.create and pass it to every subsequent sessions.create; do not call agents.create in the request path. The Anthropic CLI is one convenient way to create agents and environments from version-controlled YAML (URL in shared/live-sources.md). If a binding you need isn't shown in the language README, WebFetch the relevant entry from shared/live-sources.md rather than guess. C# does not currently support Managed Agents — use raw HTTP from curl/managed-agents.md as a reference.

Claude API (Full File Reference)

Read the language-specific Claude API folder ({language}/claude-api/):

  1. {language}/claude-api/README.mdRead this first. Installation, quick start, common patterns, error handling.
  2. shared/tool-use-concepts.md — Read when the user needs function calling, code execution, memory, or structured outputs. Covers conceptual foundations.
  3. shared/agent-design.md — Read when designing an agent: bash vs. dedicated tools, programmatic tool calling, tool search/skills, context editing vs. compaction vs. memory, caching principles.
  4. {language}/claude-api/tool-use.md — Read for language-specific tool use code examples (tool runner, manual loop, code execution, memory, structured outputs).
  5. {language}/claude-api/streaming.md — Read when building chat UIs or interfaces that display responses incrementally.
  6. {language}/claude-api/batches.md — Read when processing many requests offline (not latency-sensitive). Runs asynchronously at 50% cost.
  7. {language}/claude-api/files-api.md — Read when sending the same file across multiple requests without re-uploading.
  8. shared/prompt-caching.md — Read when adding or optimizing prompt caching. Covers prefix-stability design, breakpoint placement, and anti-patterns that silently invalidate cache.
  9. shared/error-codes.md — Read when debugging HTTP errors or implementing error handling.
  10. shared/model-migration.md — Read when upgrading to newer models, replacing retired models, or translating budget_tokens / prefill patterns to the current API.
  11. shared/live-sources.md — WebFetch URLs for fetching the latest official documentation.

Note: For Java, Go, Ruby, C#, PHP, and cURL — these have a single file each covering all basics. Read that file plus shared/tool-use-concepts.md and shared/error-codes.md as needed.

Note: For the Managed Agents file reference, see the ## Managed Agents (Beta) section above — it lists every shared/managed-agents-*.md file and the language-specific READMEs.


When to Use WebFetch

Use WebFetch to get the latest documentation when:

  • User asks for "latest" or "current" information
  • Cached data seems incorrect
  • User asks about features not covered here

Live documentation URLs are in shared/live-sources.md.

Common Pitfalls

  • Don't truncate inputs when passing files or content to the API. If the content is too long to fit in the context window, notify the user and discuss options (chunking, summarization, etc.) rather than silently truncating.
  • Opus 4.8 / 4.7 thinking: Adaptive only. thinking: {type: "enabled", budget_tokens: N} returns 400 — budget_tokens is fully removed (along with temperature, top_p, top_k). Use thinking: {type: "adaptive"}. Opus 4.8 inherits this surface from 4.7 with no new breaking changes.
  • Opus 4.6 / Sonnet 4.6 thinking: Use thinking: {type: "adaptive"} — do NOT use budget_tokens for new 4.6 code (deprecated on both Opus 4.6 and Sonnet 4.6; for gradual migration of existing code, see the transitional escape hatch in shared/model-migration.md — note this carve-out does not apply to Opus 4.7 or 4.8). For older models, budget_tokens must be less than max_tokens (minimum 1024). This will throw an error if you get it wrong.
  • 4.6/4.7/4.8 family prefill removed: Assistant message prefills (last-assistant-turn prefills) return a 400 error on Opus 4.6, Opus 4.7, Opus 4.8, and Sonnet 4.6. Use structured outputs (output_config.format) or system prompt instructions to control response format instead.
  • Confirm migration scope before editing: When a user asks to migrate code to a newer Claude model without naming a specific file, directory, or file list, ask which scope to apply first — the entire working directory, a specific subdirectory, or a specific set of files. Do not start editing until the user confirms. Imperative phrasings like "migrate my codebase", "move my project to X", "upgrade to Sonnet 4.6", or bare "migrate to Opus 4.8" are still ambiguous — they tell you what to do but not where, so ask. Proceed without asking only when the prompt names an exact file, a specific directory, or an explicit file list ("migrate app.py", "migrate everything under services/", "update a.py and b.py"). See shared/model-migration.md Step 0.
  • max_tokens defaults: Don't lowball max_tokens — hitting the cap truncates output mid-thought and requires a retry. For non-streaming requests, default to ~16000 (keeps responses under SDK HTTP timeouts). For streaming requests, default to ~64000 (timeouts aren't a concern, so give the model room). Only go lower when you have a hard reason: classification (~256), cost caps, or deliberately short outputs.
  • 128K output tokens: Opus 4.6, Opus 4.7, and Opus 4.8 support up to 128K max_tokens, but the SDKs require streaming for values that large to avoid HTTP timeouts. Use .stream() with .get_final_message() / .finalMessage().
  • Tool call JSON parsing (4.6/4.7/4.8 family): Opus 4.6, Opus 4.7, Opus 4.8, and Sonnet 4.6 may produce different JSON string escaping in tool call input fields (e.g., Unicode or forward-slash escaping). Always parse tool inputs with json.loads() / JSON.parse() — never do raw string matching on the serialized input.
  • Structured outputs (all models): Use output_config: {format: {...}} instead of the deprecated output_format parameter on messages.create(). This is a general API change, not 4.6-specific.
  • Don't reimplement SDK functionality: The SDK provides high-level helpers — use them instead of building from scratch. Specifically: use stream.finalMessage() instead of wrapping .on() events in new Promise(); use typed exception classes (Anthropic.RateLimitError, etc.) instead of string-matching error messages; use SDK types (Anthropic.MessageParam, Anthropic.Tool, Anthropic.Message, etc.) instead of redefining equivalent interfaces.
  • Don't define custom types for SDK data structures: The SDK exports types for all API objects. Use Anthropic.MessageParam for messages, Anthropic.Tool for tool definitions, Anthropic.ToolUseBlock / Anthropic.ToolResultBlockParam for tool results, Anthropic.Message for responses. Defining your own interface ChatMessage { role: string; content: unknown } duplicates what the SDK already provides and loses type safety.
  • Report and document output: For tasks that produce reports, documents, or visualizations, the code execution sandbox has python-docx, python-pptx, matplotlib, pillow, and pypdf pre-installed. Claude can generate formatted files (DOCX, PDF, charts) and return them via the Files API — consider this for "report" or "document" type requests instead of plain stdout text.
用于创建、读取、编辑和转换Word文档(.docx)的技能。支持生成带格式的专业文档,处理表格、页眉页脚、修订痕迹及图片插入。适用于报告、备忘录等交付物,不用于PDF或电子表格。
用户提到'Word doc'、'word document'、'.docx' 请求生成带目录、标题、页码等专业格式的文档 要求提取、重组.docx内容或执行查找替换 处理修订痕迹、评论或插入/替换图片 将内容转换为专业Word文件(如报告、备忘录、信件)
skills/anthropics_skills/docx/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill docx -g -y
SKILL.md
Frontmatter
{
    "name": "docx",
    "license": "Proprietary. LICENSE.txt has complete terms",
    "description": "Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation."
}

DOCX creation, editing, and analysis

Overview

A .docx file is a ZIP archive containing XML files.

Quick Reference

Task Approach
Read/analyze content pandoc or unpack for raw XML
Create new document Use docx-js - see Creating New Documents below
Edit existing document Unpack → edit XML → repack - see Editing Existing Documents below

Converting .doc to .docx

Legacy .doc files must be converted before editing:

python scripts/office/soffice.py --headless --convert-to docx document.doc

Reading Content

# Text extraction with tracked changes
pandoc --track-changes=all document.docx -o output.md

# Raw XML access
python scripts/office/unpack.py document.docx unpacked/

Converting to Images

python scripts/office/soffice.py --headless --convert-to pdf document.docx
pdftoppm -jpeg -r 150 document.pdf page

Accepting Tracked Changes

To produce a clean document with all tracked changes accepted (requires LibreOffice):

python scripts/accept_changes.py input.docx output.docx

Creating New Documents

Generate .docx files with JavaScript, then validate. Install: npm install -g docx

Setup

const { Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell, ImageRun,
        Header, Footer, AlignmentType, PageOrientation, LevelFormat, ExternalHyperlink,
        InternalHyperlink, Bookmark, FootnoteReferenceRun, PositionalTab,
        PositionalTabAlignment, PositionalTabRelativeTo, PositionalTabLeader,
        TabStopType, TabStopPosition, Column, SectionType,
        TableOfContents, HeadingLevel, BorderStyle, WidthType, ShadingType,
        VerticalAlign, PageNumber, PageBreak } = require('docx');

const doc = new Document({ sections: [{ children: [/* content */] }] });
Packer.toBuffer(doc).then(buffer => fs.writeFileSync("doc.docx", buffer));

Validation

After creating the file, validate it. If validation fails, unpack, fix the XML, and repack.

python scripts/office/validate.py doc.docx

Page Size

// CRITICAL: docx-js defaults to A4, not US Letter
// Always set page size explicitly for consistent results
sections: [{
  properties: {
    page: {
      size: {
        width: 12240,   // 8.5 inches in DXA
        height: 15840   // 11 inches in DXA
      },
      margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } // 1 inch margins
    }
  },
  children: [/* content */]
}]

Common page sizes (DXA units, 1440 DXA = 1 inch):

Paper Width Height Content Width (1" margins)
US Letter 12,240 15,840 9,360
A4 (default) 11,906 16,838 9,026

Landscape orientation: docx-js swaps width/height internally, so pass portrait dimensions and let it handle the swap:

size: {
  width: 12240,   // Pass SHORT edge as width
  height: 15840,  // Pass LONG edge as height
  orientation: PageOrientation.LANDSCAPE  // docx-js swaps them in the XML
},
// Content width = 15840 - left margin - right margin (uses the long edge)

Styles (Override Built-in Headings)

Use Arial as the default font (universally supported). Keep titles black for readability.

const doc = new Document({
  styles: {
    default: { document: { run: { font: "Arial", size: 24 } } }, // 12pt default
    paragraphStyles: [
      // IMPORTANT: Use exact IDs to override built-in styles
      { id: "Heading1", name: "Heading 1", basedOn: "Normal", next: "Normal", quickFormat: true,
        run: { size: 32, bold: true, font: "Arial" },
        paragraph: { spacing: { before: 240, after: 240 }, outlineLevel: 0 } }, // outlineLevel required for TOC
      { id: "Heading2", name: "Heading 2", basedOn: "Normal", next: "Normal", quickFormat: true,
        run: { size: 28, bold: true, font: "Arial" },
        paragraph: { spacing: { before: 180, after: 180 }, outlineLevel: 1 } },
    ]
  },
  sections: [{
    children: [
      new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("Title")] }),
    ]
  }]
});

Lists (NEVER use unicode bullets)

// ❌ WRONG - never manually insert bullet characters
new Paragraph({ children: [new TextRun("• Item")] })  // BAD
new Paragraph({ children: [new TextRun("\u2022 Item")] })  // BAD

// ✅ CORRECT - use numbering config with LevelFormat.BULLET
const doc = new Document({
  numbering: {
    config: [
      { reference: "bullets",
        levels: [{ level: 0, format: LevelFormat.BULLET, text: "•", alignment: AlignmentType.LEFT,
          style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },
      { reference: "numbers",
        levels: [{ level: 0, format: LevelFormat.DECIMAL, text: "%1.", alignment: AlignmentType.LEFT,
          style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },
    ]
  },
  sections: [{
    children: [
      new Paragraph({ numbering: { reference: "bullets", level: 0 },
        children: [new TextRun("Bullet item")] }),
      new Paragraph({ numbering: { reference: "numbers", level: 0 },
        children: [new TextRun("Numbered item")] }),
    ]
  }]
});

// ⚠️ Each reference creates INDEPENDENT numbering
// Same reference = continues (1,2,3 then 4,5,6)
// Different reference = restarts (1,2,3 then 1,2,3)

Tables

CRITICAL: Tables need dual widths - set both columnWidths on the table AND width on each cell. Without both, tables render incorrectly on some platforms.

// CRITICAL: Always set table width for consistent rendering
// CRITICAL: Use ShadingType.CLEAR (not SOLID) to prevent black backgrounds
const border = { style: BorderStyle.SINGLE, size: 1, color: "CCCCCC" };
const borders = { top: border, bottom: border, left: border, right: border };

new Table({
  width: { size: 9360, type: WidthType.DXA }, // Always use DXA (percentages break in Google Docs)
  columnWidths: [4680, 4680], // Must sum to table width (DXA: 1440 = 1 inch)
  rows: [
    new TableRow({
      children: [
        new TableCell({
          borders,
          width: { size: 4680, type: WidthType.DXA }, // Also set on each cell
          shading: { fill: "D5E8F0", type: ShadingType.CLEAR }, // CLEAR not SOLID
          margins: { top: 80, bottom: 80, left: 120, right: 120 }, // Cell padding (internal, not added to width)
          children: [new Paragraph({ children: [new TextRun("Cell")] })]
        })
      ]
    })
  ]
})

Table width calculation:

Always use WidthType.DXAWidthType.PERCENTAGE breaks in Google Docs.

// Table width = sum of columnWidths = content width
// US Letter with 1" margins: 12240 - 2880 = 9360 DXA
width: { size: 9360, type: WidthType.DXA },
columnWidths: [7000, 2360]  // Must sum to table width

Width rules:

  • Always use WidthType.DXA — never WidthType.PERCENTAGE (incompatible with Google Docs)
  • Table width must equal the sum of columnWidths
  • Cell width must match corresponding columnWidth
  • Cell margins are internal padding - they reduce content area, not add to cell width
  • For full-width tables: use content width (page width minus left and right margins)

Images

// CRITICAL: type parameter is REQUIRED
new Paragraph({
  children: [new ImageRun({
    type: "png", // Required: png, jpg, jpeg, gif, bmp, svg
    data: fs.readFileSync("image.png"),
    transformation: { width: 200, height: 150 },
    altText: { title: "Title", description: "Desc", name: "Name" } // All three required
  })]
})

Page Breaks

// CRITICAL: PageBreak must be inside a Paragraph
new Paragraph({ children: [new PageBreak()] })

// Or use pageBreakBefore
new Paragraph({ pageBreakBefore: true, children: [new TextRun("New page")] })

Hyperlinks

// External link
new Paragraph({
  children: [new ExternalHyperlink({
    children: [new TextRun({ text: "Click here", style: "Hyperlink" })],
    link: "https://example.com",
  })]
})

// Internal link (bookmark + reference)
// 1. Create bookmark at destination
new Paragraph({ heading: HeadingLevel.HEADING_1, children: [
  new Bookmark({ id: "chapter1", children: [new TextRun("Chapter 1")] }),
]})
// 2. Link to it
new Paragraph({ children: [new InternalHyperlink({
  children: [new TextRun({ text: "See Chapter 1", style: "Hyperlink" })],
  anchor: "chapter1",
})]})

Footnotes

const doc = new Document({
  footnotes: {
    1: { children: [new Paragraph("Source: Annual Report 2024")] },
    2: { children: [new Paragraph("See appendix for methodology")] },
  },
  sections: [{
    children: [new Paragraph({
      children: [
        new TextRun("Revenue grew 15%"),
        new FootnoteReferenceRun(1),
        new TextRun(" using adjusted metrics"),
        new FootnoteReferenceRun(2),
      ],
    })]
  }]
});

Tab Stops

// Right-align text on same line (e.g., date opposite a title)
new Paragraph({
  children: [
    new TextRun("Company Name"),
    new TextRun("\tJanuary 2025"),
  ],
  tabStops: [{ type: TabStopType.RIGHT, position: TabStopPosition.MAX }],
})

// Dot leader (e.g., TOC-style)
new Paragraph({
  children: [
    new TextRun("Introduction"),
    new TextRun({ children: [
      new PositionalTab({
        alignment: PositionalTabAlignment.RIGHT,
        relativeTo: PositionalTabRelativeTo.MARGIN,
        leader: PositionalTabLeader.DOT,
      }),
      "3",
    ]}),
  ],
})

Multi-Column Layouts

// Equal-width columns
sections: [{
  properties: {
    column: {
      count: 2,          // number of columns
      space: 720,        // gap between columns in DXA (720 = 0.5 inch)
      equalWidth: true,
      separate: true,    // vertical line between columns
    },
  },
  children: [/* content flows naturally across columns */]
}]

// Custom-width columns (equalWidth must be false)
sections: [{
  properties: {
    column: {
      equalWidth: false,
      children: [
        new Column({ width: 5400, space: 720 }),
        new Column({ width: 3240 }),
      ],
    },
  },
  children: [/* content */]
}]

Force a column break with a new section using type: SectionType.NEXT_COLUMN.

Table of Contents

// CRITICAL: Headings must use HeadingLevel ONLY - no custom styles
new TableOfContents("Table of Contents", { hyperlink: true, headingStyleRange: "1-3" })

Headers/Footers

sections: [{
  properties: {
    page: { margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } } // 1440 = 1 inch
  },
  headers: {
    default: new Header({ children: [new Paragraph({ children: [new TextRun("Header")] })] })
  },
  footers: {
    default: new Footer({ children: [new Paragraph({
      children: [new TextRun("Page "), new TextRun({ children: [PageNumber.CURRENT] })]
    })] })
  },
  children: [/* content */]
}]

Critical Rules for docx-js

  • Set page size explicitly - docx-js defaults to A4; use US Letter (12240 x 15840 DXA) for US documents
  • Landscape: pass portrait dimensions - docx-js swaps width/height internally; pass short edge as width, long edge as height, and set orientation: PageOrientation.LANDSCAPE
  • Never use \n - use separate Paragraph elements
  • Never use unicode bullets - use LevelFormat.BULLET with numbering config
  • PageBreak must be in Paragraph - standalone creates invalid XML
  • ImageRun requires type - always specify png/jpg/etc
  • Always set table width with DXA - never use WidthType.PERCENTAGE (breaks in Google Docs)
  • Tables need dual widths - columnWidths array AND cell width, both must match
  • Table width = sum of columnWidths - for DXA, ensure they add up exactly
  • Always add cell margins - use margins: { top: 80, bottom: 80, left: 120, right: 120 } for readable padding
  • Use ShadingType.CLEAR - never SOLID for table shading
  • Never use tables as dividers/rules - cells have minimum height and render as empty boxes (including in headers/footers); use border: { bottom: { style: BorderStyle.SINGLE, size: 6, color: "2E75B6", space: 1 } } on a Paragraph instead. For two-column footers, use tab stops (see Tab Stops section), not tables
  • TOC requires HeadingLevel only - no custom styles on heading paragraphs
  • Override built-in styles - use exact IDs: "Heading1", "Heading2", etc.
  • Include outlineLevel - required for TOC (0 for H1, 1 for H2, etc.)

Editing Existing Documents

Follow all 3 steps in order.

Step 1: Unpack

python scripts/office/unpack.py document.docx unpacked/

Extracts XML, pretty-prints, merges adjacent runs, and converts smart quotes to XML entities (&#x201C; etc.) so they survive editing. Use --merge-runs false to skip run merging.

Step 2: Edit XML

Edit files in unpacked/word/. See XML Reference below for patterns.

Use "Claude" as the author for tracked changes and comments, unless the user explicitly requests use of a different name.

Use the Edit tool directly for string replacement. Do not write Python scripts. Scripts introduce unnecessary complexity. The Edit tool shows exactly what is being replaced.

CRITICAL: Use smart quotes for new content. When adding text with apostrophes or quotes, use XML entities to produce smart quotes:

<!-- Use these entities for professional typography -->
<w:t>Here&#x2019;s a quote: &#x201C;Hello&#x201D;</w:t>
Entity Character
&#x2018; ‘ (left single)
&#x2019; ’ (right single / apostrophe)
&#x201C; “ (left double)
&#x201D; ” (right double)

Adding comments: Use comment.py to handle boilerplate across multiple XML files (text must be pre-escaped XML):

python scripts/comment.py unpacked/ 0 "Comment text with &amp; and &#x2019;"
python scripts/comment.py unpacked/ 1 "Reply text" --parent 0  # reply to comment 0
python scripts/comment.py unpacked/ 0 "Text" --author "Custom Author"  # custom author name

Then add markers to document.xml (see Comments in XML Reference).

Step 3: Pack

python scripts/office/pack.py unpacked/ output.docx --original document.docx

Validates with auto-repair, condenses XML, and creates DOCX. Use --validate false to skip.

Auto-repair will fix:

  • durableId >= 0x7FFFFFFF (regenerates valid ID)
  • Missing xml:space="preserve" on <w:t> with whitespace

Auto-repair won't fix:

  • Malformed XML, invalid element nesting, missing relationships, schema violations

Common Pitfalls

  • Replace entire <w:r> elements: When adding tracked changes, replace the whole <w:r>...</w:r> block with <w:del>...<w:ins>... as siblings. Don't inject tracked change tags inside a run.
  • Preserve <w:rPr> formatting: Copy the original run's <w:rPr> block into your tracked change runs to maintain bold, font size, etc.

XML Reference

Schema Compliance

  • Element order in <w:pPr>: <w:pStyle>, <w:numPr>, <w:spacing>, <w:ind>, <w:jc>, <w:rPr> last
  • Whitespace: Add xml:space="preserve" to <w:t> with leading/trailing spaces
  • RSIDs: Must be 8-digit hex (e.g., 00AB1234)

Tracked Changes

Insertion:

<w:ins w:id="1" w:author="Claude" w:date="2025-01-01T00:00:00Z">
  <w:r><w:t>inserted text</w:t></w:r>
</w:ins>

Deletion:

<w:del w:id="2" w:author="Claude" w:date="2025-01-01T00:00:00Z">
  <w:r><w:delText>deleted text</w:delText></w:r>
</w:del>

Inside <w:del>: Use <w:delText> instead of <w:t>, and <w:delInstrText> instead of <w:instrText>.

Minimal edits - only mark what changes:

<!-- Change "30 days" to "60 days" -->
<w:r><w:t>The term is </w:t></w:r>
<w:del w:id="1" w:author="Claude" w:date="...">
  <w:r><w:delText>30</w:delText></w:r>
</w:del>
<w:ins w:id="2" w:author="Claude" w:date="...">
  <w:r><w:t>60</w:t></w:r>
</w:ins>
<w:r><w:t> days.</w:t></w:r>

Deleting entire paragraphs/list items - when removing ALL content from a paragraph, also mark the paragraph mark as deleted so it merges with the next paragraph. Add <w:del/> inside <w:pPr><w:rPr>:

<w:p>
  <w:pPr>
    <w:numPr>...</w:numPr>  <!-- list numbering if present -->
    <w:rPr>
      <w:del w:id="1" w:author="Claude" w:date="2025-01-01T00:00:00Z"/>
    </w:rPr>
  </w:pPr>
  <w:del w:id="2" w:author="Claude" w:date="2025-01-01T00:00:00Z">
    <w:r><w:delText>Entire paragraph content being deleted...</w:delText></w:r>
  </w:del>
</w:p>

Without the <w:del/> in <w:pPr><w:rPr>, accepting changes leaves an empty paragraph/list item.

Rejecting another author's insertion - nest deletion inside their insertion:

<w:ins w:author="Jane" w:id="5">
  <w:del w:author="Claude" w:id="10">
    <w:r><w:delText>their inserted text</w:delText></w:r>
  </w:del>
</w:ins>

Restoring another author's deletion - add insertion after (don't modify their deletion):

<w:del w:author="Jane" w:id="5">
  <w:r><w:delText>deleted text</w:delText></w:r>
</w:del>
<w:ins w:author="Claude" w:id="10">
  <w:r><w:t>deleted text</w:t></w:r>
</w:ins>

Comments

After running comment.py (see Step 2), add markers to document.xml. For replies, use --parent flag and nest markers inside the parent's.

CRITICAL: <w:commentRangeStart> and <w:commentRangeEnd> are siblings of <w:r>, never inside <w:r>.

<!-- Comment markers are direct children of w:p, never inside w:r -->
<w:commentRangeStart w:id="0"/>
<w:del w:id="1" w:author="Claude" w:date="2025-01-01T00:00:00Z">
  <w:r><w:delText>deleted</w:delText></w:r>
</w:del>
<w:r><w:t> more text</w:t></w:r>
<w:commentRangeEnd w:id="0"/>
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="0"/></w:r>

<!-- Comment 0 with reply 1 nested inside -->
<w:commentRangeStart w:id="0"/>
  <w:commentRangeStart w:id="1"/>
  <w:r><w:t>text</w:t></w:r>
  <w:commentRangeEnd w:id="1"/>
<w:commentRangeEnd w:id="0"/>
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="0"/></w:r>
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="1"/></w:r>

Images

  1. Add image file to word/media/
  2. Add relationship to word/_rels/document.xml.rels:
<Relationship Id="rId5" Type=".../image" Target="media/image1.png"/>
  1. Add content type to [Content_Types].xml:
<Default Extension="png" ContentType="image/png"/>
  1. Reference in document.xml:
<w:drawing>
  <wp:inline>
    <wp:extent cx="914400" cy="914400"/>  <!-- EMUs: 914400 = 1 inch -->
    <a:graphic>
      <a:graphicData uri=".../picture">
        <pic:pic>
          <pic:blipFill><a:blip r:embed="rId5"/></pic:blipFill>
        </pic:pic>
      </a:graphicData>
    </a:graphic>
  </wp:inline>
</w:drawing>

Dependencies

  • pandoc: Text extraction
  • docx: npm install -g docx (new documents)
  • LibreOffice: PDF conversion (auto-configured for sandboxed environments via scripts/office/soffice.py)
  • Poppler: pdftoppm for images
处理.pptx文件的全能技能,涵盖创建、编辑、解析及提取内容。支持基于模板或从零生成演示文稿,提供命令行工具进行读取与修改,并包含专业的设计指南、配色方案及排版建议,以提升幻灯片视觉效果。
涉及.pptx文件的创建、编辑、读取或解析 用户提及“deck”、“slides”、“presentation”或引用.pptx文件名
skills/anthropics_skills/pptx/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill pptx -g -y
SKILL.md
Frontmatter
{
    "name": "pptx",
    "license": "Proprietary. LICENSE.txt has complete terms",
    "description": "Use this skill any time a .pptx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates, layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx filename, regardless of what they plan to do with the content afterward. If a .pptx file needs to be opened, created, or touched, use this skill."
}

PPTX Skill

Quick Reference

Task Guide
Read/analyze content python -m markitdown presentation.pptx
Edit or create from template Read editing.md
Create from scratch Read pptxgenjs.md

Reading Content

# Text extraction
python -m markitdown presentation.pptx

# Visual overview
python scripts/thumbnail.py presentation.pptx

# Raw XML
python scripts/office/unpack.py presentation.pptx unpacked/

Editing Workflow

Read editing.md for full details.

  1. Analyze template with thumbnail.py
  2. Unpack → manipulate slides → edit content → clean → pack

Creating from Scratch

Read pptxgenjs.md for full details.

Use when no template or reference presentation is available.


Design Ideas

Don't create boring slides. Plain bullets on a white background won't impress anyone. Consider ideas from this list for each slide.

Before Starting

  • Pick a bold, content-informed color palette: The palette should feel designed for THIS topic. If swapping your colors into a completely different presentation would still "work," you haven't made specific enough choices.
  • Dominance over equality: One color should dominate (60-70% visual weight), with 1-2 supporting tones and one sharp accent. Never give all colors equal weight.
  • Dark/light contrast: Dark backgrounds for title + conclusion slides, light for content ("sandwich" structure). Or commit to dark throughout for a premium feel.
  • Commit to a visual motif: Pick ONE distinctive element and repeat it — rounded image frames, icons in colored circles, thick single-side borders. Carry it across every slide.

Color Palettes

Choose colors that match your topic — don't default to generic blue. Use these palettes as inspiration:

Theme Primary Secondary Accent
Midnight Executive 1E2761 (navy) CADCFC (ice blue) FFFFFF (white)
Forest & Moss 2C5F2D (forest) 97BC62 (moss) F5F5F5 (cream)
Coral Energy F96167 (coral) F9E795 (gold) 2F3C7E (navy)
Warm Terracotta B85042 (terracotta) E7E8D1 (sand) A7BEAE (sage)
Ocean Gradient 065A82 (deep blue) 1C7293 (teal) 21295C (midnight)
Charcoal Minimal 36454F (charcoal) F2F2F2 (off-white) 212121 (black)
Teal Trust 028090 (teal) 00A896 (seafoam) 02C39A (mint)
Berry & Cream 6D2E46 (berry) A26769 (dusty rose) ECE2D0 (cream)
Sage Calm 84B59F (sage) 69A297 (eucalyptus) 50808E (slate)
Cherry Bold 990011 (cherry) FCF6F5 (off-white) 2F3C7E (navy)

For Each Slide

Every slide needs a visual element — image, chart, icon, or shape. Text-only slides are forgettable.

Layout options:

  • Two-column (text left, illustration on right)
  • Icon + text rows (icon in colored circle, bold header, description below)
  • 2x2 or 2x3 grid (image on one side, grid of content blocks on other)
  • Half-bleed image (full left or right side) with content overlay

Data display:

  • Large stat callouts (big numbers 60-72pt with small labels below)
  • Comparison columns (before/after, pros/cons, side-by-side options)
  • Timeline or process flow (numbered steps, arrows)

Visual polish:

  • Icons in small colored circles next to section headers
  • Italic accent text for key stats or taglines

Typography

Choose an interesting font pairing — don't default to Arial. Pick a header font with personality and pair it with a clean body font.

Header Font Body Font
Georgia Calibri
Arial Black Arial
Calibri Calibri Light
Cambria Calibri
Trebuchet MS Calibri
Impact Arial
Palatino Garamond
Consolas Calibri
Element Size
Slide title 36-44pt bold
Section header 20-24pt bold
Body text 14-16pt
Captions 10-12pt muted

Spacing

  • 0.5" minimum margins
  • 0.3-0.5" between content blocks
  • Leave breathing room—don't fill every inch

Avoid (Common Mistakes)

  • Don't repeat the same layout — vary columns, cards, and callouts across slides
  • Don't center body text — left-align paragraphs and lists; center only titles
  • Don't skimp on size contrast — titles need 36pt+ to stand out from 14-16pt body
  • Don't default to blue — pick colors that reflect the specific topic
  • Don't mix spacing randomly — choose 0.3" or 0.5" gaps and use consistently
  • Don't style one slide and leave the rest plain — commit fully or keep it simple throughout
  • Don't create text-only slides — add images, icons, charts, or visual elements; avoid plain title + bullets
  • Don't forget text box padding — when aligning lines or shapes with text edges, set margin: 0 on the text box or offset the shape to account for padding
  • Don't use low-contrast elements — icons AND text need strong contrast against the background; avoid light text on light backgrounds or dark text on dark backgrounds
  • NEVER use accent lines under titles — these are a hallmark of AI-generated slides; use whitespace or background color instead

QA (Required)

Assume there are problems. Your job is to find them.

Your first render is almost never correct. Approach QA as a bug hunt, not a confirmation step. If you found zero issues on first inspection, you weren't looking hard enough.

Content QA

python -m markitdown output.pptx

Check for missing content, typos, wrong order.

When using templates, check for leftover placeholder text:

python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|this.*(page|slide).*layout"

If grep returns results, fix them before declaring success.

Visual QA

⚠️ USE SUBAGENTS — even for 2-3 slides. You've been staring at the code and will see what you expect, not what's there. Subagents have fresh eyes.

Convert slides to images (see Converting to Images), then use this prompt:

Visually inspect these slides. Assume there are issues — find them.

Look for:
- Overlapping elements (text through shapes, lines through words, stacked elements)
- Text overflow or cut off at edges/box boundaries
- Decorative lines positioned for single-line text but title wrapped to two lines
- Source citations or footers colliding with content above
- Elements too close (< 0.3" gaps) or cards/sections nearly touching
- Uneven gaps (large empty area in one place, cramped in another)
- Insufficient margin from slide edges (< 0.5")
- Columns or similar elements not aligned consistently
- Low-contrast text (e.g., light gray text on cream-colored background)
- Low-contrast icons (e.g., dark icons on dark backgrounds without a contrasting circle)
- Text boxes too narrow causing excessive wrapping
- Leftover placeholder content

For each slide, list issues or areas of concern, even if minor.

Read and analyze these images:
1. /path/to/slide-01.jpg (Expected: [brief description])
2. /path/to/slide-02.jpg (Expected: [brief description])

Report ALL issues found, including minor ones.

Verification Loop

  1. Generate slides → Convert to images → Inspect
  2. List issues found (if none found, look again more critically)
  3. Fix issues
  4. Re-verify affected slides — one fix often creates another problem
  5. Repeat until a full pass reveals no new issues

Do not declare success until you've completed at least one fix-and-verify cycle.


Converting to Images

Convert presentations to individual slide images for visual inspection:

python scripts/office/soffice.py --headless --convert-to pdf output.pptx
pdftoppm -jpeg -r 150 output.pdf slide

This creates slide-01.jpg, slide-02.jpg, etc.

To re-render specific slides after fixes:

pdftoppm -jpeg -r 150 -f N -l N output.pdf slide-fixed

Dependencies

  • pip install "markitdown[pptx]" - text extraction
  • pip install Pillow - thumbnail grids
  • npm install -g pptxgenjs - creating from scratch
  • LibreOffice (soffice) - PDF conversion (auto-configured for sandboxed environments via scripts/office/soffice.py)
  • Poppler (pdftoppm) - PDF to images
用于处理Excel/CSV等表格文件的创建、编辑、分析及格式转换。涵盖数据清洗、公式计算及金融模型规范(如颜色编码、字体、零错误要求)。当用户操作或请求生成电子表格文件时触发,但不包括生成Word报告或代码脚本的场景。
用户要求打开、读取、编辑或修复.xlsx/.csv等文件 需要从其他数据源创建新的电子表格 要求在文件间转换表格格式 需要清理杂乱或格式错误的表格数据 涉及金融模型的格式化与公式构建
skills/anthropics_skills/xlsx/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill xlsx -g -y
SKILL.md
Frontmatter
{
    "name": "xlsx",
    "license": "Proprietary. LICENSE.txt has complete terms",
    "description": "Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like \"the xlsx in my downloads\") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved."
}

Requirements for Outputs

All Excel files

Professional Font

  • Use a consistent, professional font (e.g., Arial, Times New Roman) for all deliverables unless otherwise instructed by the user

Zero Formula Errors

  • Every Excel model MUST be delivered with ZERO formula errors (#REF!, #DIV/0!, #VALUE!, #N/A, #NAME?)

Preserve Existing Templates (when updating templates)

  • Study and EXACTLY match existing format, style, and conventions when modifying files
  • Never impose standardized formatting on files with established patterns
  • Existing template conventions ALWAYS override these guidelines

Financial models

Color Coding Standards

Unless otherwise stated by the user or existing template

Industry-Standard Color Conventions

  • Blue text (RGB: 0,0,255): Hardcoded inputs, and numbers users will change for scenarios
  • Black text (RGB: 0,0,0): ALL formulas and calculations
  • Green text (RGB: 0,128,0): Links pulling from other worksheets within same workbook
  • Red text (RGB: 255,0,0): External links to other files
  • Yellow background (RGB: 255,255,0): Key assumptions needing attention or cells that need to be updated

Number Formatting Standards

Required Format Rules

  • Years: Format as text strings (e.g., "2024" not "2,024")
  • Currency: Use $#,##0 format; ALWAYS specify units in headers ("Revenue ($mm)")
  • Zeros: Use number formatting to make all zeros "-", including percentages (e.g., "$#,##0;($#,##0);-")
  • Percentages: Default to 0.0% format (one decimal)
  • Multiples: Format as 0.0x for valuation multiples (EV/EBITDA, P/E)
  • Negative numbers: Use parentheses (123) not minus -123

Formula Construction Rules

Assumptions Placement

  • Place ALL assumptions (growth rates, margins, multiples, etc.) in separate assumption cells
  • Use cell references instead of hardcoded values in formulas
  • Example: Use =B5*(1+$B$6) instead of =B5*1.05

Formula Error Prevention

  • Verify all cell references are correct
  • Check for off-by-one errors in ranges
  • Ensure consistent formulas across all projection periods
  • Test with edge cases (zero values, negative numbers)
  • Verify no unintended circular references

Documentation Requirements for Hardcodes

  • Comment or in cells beside (if end of table). Format: "Source: [System/Document], [Date], [Specific Reference], [URL if applicable]"
  • Examples:
    • "Source: Company 10-K, FY2024, Page 45, Revenue Note, [SEC EDGAR URL]"
    • "Source: Company 10-Q, Q2 2025, Exhibit 99.1, [SEC EDGAR URL]"
    • "Source: Bloomberg Terminal, 8/15/2025, AAPL US Equity"
    • "Source: FactSet, 8/20/2025, Consensus Estimates Screen"

XLSX creation, editing, and analysis

Overview

A user may ask you to create, edit, or analyze the contents of an .xlsx file. You have different tools and workflows available for different tasks.

Important Requirements

LibreOffice Required for Formula Recalculation: You can assume LibreOffice is installed for recalculating formula values using the scripts/recalc.py script. The script automatically configures LibreOffice on first run, including in sandboxed environments where Unix sockets are restricted (handled by scripts/office/soffice.py)

Reading and analyzing data

Data analysis with pandas

For data analysis, visualization, and basic operations, use pandas which provides powerful data manipulation capabilities:

import pandas as pd

# Read Excel
df = pd.read_excel('file.xlsx')  # Default: first sheet
all_sheets = pd.read_excel('file.xlsx', sheet_name=None)  # All sheets as dict

# Analyze
df.head()      # Preview data
df.info()      # Column info
df.describe()  # Statistics

# Write Excel
df.to_excel('output.xlsx', index=False)

Excel File Workflows

CRITICAL: Use Formulas, Not Hardcoded Values

Always use Excel formulas instead of calculating values in Python and hardcoding them. This ensures the spreadsheet remains dynamic and updateable.

❌ WRONG - Hardcoding Calculated Values

# Bad: Calculating in Python and hardcoding result
total = df['Sales'].sum()
sheet['B10'] = total  # Hardcodes 5000

# Bad: Computing growth rate in Python
growth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']
sheet['C5'] = growth  # Hardcodes 0.15

# Bad: Python calculation for average
avg = sum(values) / len(values)
sheet['D20'] = avg  # Hardcodes 42.5

✅ CORRECT - Using Excel Formulas

# Good: Let Excel calculate the sum
sheet['B10'] = '=SUM(B2:B9)'

# Good: Growth rate as Excel formula
sheet['C5'] = '=(C4-C2)/C2'

# Good: Average using Excel function
sheet['D20'] = '=AVERAGE(D2:D19)'

This applies to ALL calculations - totals, percentages, ratios, differences, etc. The spreadsheet should be able to recalculate when source data changes.

Common Workflow

  1. Choose tool: pandas for data, openpyxl for formulas/formatting
  2. Create/Load: Create new workbook or load existing file
  3. Modify: Add/edit data, formulas, and formatting
  4. Save: Write to file
  5. Recalculate formulas (MANDATORY IF USING FORMULAS): Use the scripts/recalc.py script
    python scripts/recalc.py output.xlsx
    
  6. Verify and fix any errors:
    • The script returns JSON with error details
    • If status is errors_found, check error_summary for specific error types and locations
    • Fix the identified errors and recalculate again
    • Common errors to fix:
      • #REF!: Invalid cell references
      • #DIV/0!: Division by zero
      • #VALUE!: Wrong data type in formula
      • #NAME?: Unrecognized formula name

Creating new Excel files

# Using openpyxl for formulas and formatting
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment

wb = Workbook()
sheet = wb.active

# Add data
sheet['A1'] = 'Hello'
sheet['B1'] = 'World'
sheet.append(['Row', 'of', 'data'])

# Add formula
sheet['B2'] = '=SUM(A1:A10)'

# Formatting
sheet['A1'].font = Font(bold=True, color='FF0000')
sheet['A1'].fill = PatternFill('solid', start_color='FFFF00')
sheet['A1'].alignment = Alignment(horizontal='center')

# Column width
sheet.column_dimensions['A'].width = 20

wb.save('output.xlsx')

Editing existing Excel files

# Using openpyxl to preserve formulas and formatting
from openpyxl import load_workbook

# Load existing file
wb = load_workbook('existing.xlsx')
sheet = wb.active  # or wb['SheetName'] for specific sheet

# Working with multiple sheets
for sheet_name in wb.sheetnames:
    sheet = wb[sheet_name]
    print(f"Sheet: {sheet_name}")

# Modify cells
sheet['A1'] = 'New Value'
sheet.insert_rows(2)  # Insert row at position 2
sheet.delete_cols(3)  # Delete column 3

# Add new sheet
new_sheet = wb.create_sheet('NewSheet')
new_sheet['A1'] = 'Data'

wb.save('modified.xlsx')

Recalculating formulas

Excel files created or modified by openpyxl contain formulas as strings but not calculated values. Use the provided scripts/recalc.py script to recalculate formulas:

python scripts/recalc.py <excel_file> [timeout_seconds]

Example:

python scripts/recalc.py output.xlsx 30

The script:

  • Automatically sets up LibreOffice macro on first run
  • Recalculates all formulas in all sheets
  • Scans ALL cells for Excel errors (#REF!, #DIV/0!, etc.)
  • Returns JSON with detailed error locations and counts
  • Works on both Linux and macOS

Formula Verification Checklist

Quick checks to ensure formulas work correctly:

Essential Verification

  • Test 2-3 sample references: Verify they pull correct values before building full model
  • Column mapping: Confirm Excel columns match (e.g., column 64 = BL, not BK)
  • Row offset: Remember Excel rows are 1-indexed (DataFrame row 5 = Excel row 6)

Common Pitfalls

  • NaN handling: Check for null values with pd.notna()
  • Far-right columns: FY data often in columns 50+
  • Multiple matches: Search all occurrences, not just first
  • Division by zero: Check denominators before using / in formulas (#DIV/0!)
  • Wrong references: Verify all cell references point to intended cells (#REF!)
  • Cross-sheet references: Use correct format (Sheet1!A1) for linking sheets

Formula Testing Strategy

  • Start small: Test formulas on 2-3 cells before applying broadly
  • Verify dependencies: Check all cells referenced in formulas exist
  • Test edge cases: Include zero, negative, and very large values

Interpreting scripts/recalc.py Output

The script returns JSON with error details:

{
  "status": "success",           // or "errors_found"
  "total_errors": 0,              // Total error count
  "total_formulas": 42,           // Number of formulas in file
  "error_summary": {              // Only present if errors found
    "#REF!": {
      "count": 2,
      "locations": ["Sheet1!B5", "Sheet1!C10"]
    }
  }
}

Best Practices

Library Selection

  • pandas: Best for data analysis, bulk operations, and simple data export
  • openpyxl: Best for complex formatting, formulas, and Excel-specific features

Working with openpyxl

  • Cell indices are 1-based (row=1, column=1 refers to cell A1)
  • Use data_only=True to read calculated values: load_workbook('file.xlsx', data_only=True)
  • Warning: If opened with data_only=True and saved, formulas are replaced with values and permanently lost
  • For large files: Use read_only=True for reading or write_only=True for writing
  • Formulas are preserved but not evaluated - use scripts/recalc.py to update values

Working with pandas

  • Specify data types to avoid inference issues: pd.read_excel('file.xlsx', dtype={'id': str})
  • For large files, read specific columns: pd.read_excel('file.xlsx', usecols=['A', 'C', 'E'])
  • Handle dates properly: pd.read_excel('file.xlsx', parse_dates=['date_column'])

Code Style Guidelines

IMPORTANT: When generating Python code for Excel operations:

  • Write minimal, concise Python code without unnecessary comments
  • Avoid verbose variable names and redundant operations
  • Avoid unnecessary print statements

For Excel files themselves:

  • Add comments to cells with complex formulas or important assumptions
  • Document data sources for hardcoded values
  • Include notes for key calculations and model sections
提供 Browser Use Cloud 托管服务的文档参考,涵盖 REST API、SDK、认证及集成模式。适用于云端浏览器自动化、代理配置、CAPTCHA 处理及第三方平台对接。注意:本地开源库请使用对应 Skill。
查询 Browser Use Cloud REST API (v2/v3) 端点或示例 使用 Python/TypeScript SDK 进行浏览器自动化开发 配置 X-Browser-Use-API-Key 认证与密钥管理 设置云会话、浏览器配置文件或 CDP WebSocket 连接 集成 Playwright/Puppeteer/Selenium 到云端基础设施 配置住宅代理、CAPTCHA 处理或 Webhook 构建聊天 UI、子智能体或向现有 Agent 添加工具 n8n/Make/Zapier 等自动化平台集成咨询
skills/browser-use_browser-use/cloud/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill cloud -g -y
SKILL.md
Frontmatter
{
    "name": "cloud",
    "description": "Documentation reference for using Browser Use Cloud — the hosted API and SDK for browser automation. Use this skill whenever the user needs help with the Cloud REST API (v2 or v3), browser-use-sdk (Python or TypeScript), X-Browser-Use-API-Key authentication, cloud sessions, browser profiles, profile sync, CDP WebSocket connections, stealth browsers, residential proxies, CAPTCHA handling, webhooks, workspaces, skills marketplace, liveUrl streaming, pricing, or integration patterns (chat UI, subagent, adding browser tools to existing agents). Also trigger for questions about n8n\/Make\/Zapier integration, Playwright\/ Puppeteer\/Selenium on cloud infrastructure, or 1Password vault integration. Do NOT use this for the open-source Python library (Agent, Browser, Tools config) — use the open-source skill instead.\n",
    "allowed-tools": "Read"
}

Browser Use Cloud Reference

Reference docs for the Cloud REST API, SDKs, and integration patterns. Read the relevant file based on what the user needs.

API & Platform

Topic Read
Setup, first task, pricing, FAQ references/quickstart.md
v2 REST API: all 30 endpoints, cURL examples, schemas references/api-v2.md
v3 BU Agent API: sessions, messages, files, workspaces references/api-v3.md
Sessions, profiles, auth strategies, 1Password references/sessions.md
CDP direct access, Playwright/Puppeteer/Selenium references/browser-api.md
Proxies, webhooks, workspaces, skills, MCP, live view references/features.md
Parallel, streaming, geo-scraping, tutorials references/patterns.md

Integration Guides

Topic Read
Building a chat interface with live browser view references/guides/chat-ui.md
Using browser-use as a subagent (task in → result out) references/guides/subagent.md
Adding browser-use tools to an existing agent references/guides/tools-integration.md

Critical Notes

  • Cloud API base URL: https://api.browser-use.com/api/v2/ (v2) or https://api.browser-use.com/api/v3 (v3)
  • Auth header: X-Browser-Use-API-Key: <key>
  • Get API key: https://cloud.browser-use.com/new-api-key
  • Set env var: BROWSER_USE_API_KEY=<key>
  • Cloud SDK: uv pip install browser-use-sdk (Python) or npm install browser-use-sdk (TypeScript)
  • Python v2: from browser_use_sdk import AsyncBrowserUse
  • Python v3: from browser_use_sdk.v3 import AsyncBrowserUse
  • TypeScript v2: import { BrowserUse } from "browser-use-sdk"
  • TypeScript v3: import { BrowserUse } from "browser-use-sdk/v3"
  • CDP WebSocket: wss://connect.browser-use.com?apiKey=KEY&proxyCountryCode=us
提供 browser-use 开源库的 Python 开发参考,涵盖 Agent、Browser、Tools 配置、LLM 集成、Actor API、监控及安装部署。适用于代码编写与架构咨询,排除 Cloud SDK 和 CLI 自动化场景。
browser-use 开源库安装与依赖管理 Agent/Browser/Tools 参数配置与生命周期钩子 LLM 模型接入与环境变量设置 自定义工具开发与 Actor API 使用 MCP 服务器搭建与监控可观测性配置 异步编程最佳实践与安全数据处理
skills/browser-use_browser-use/open-source/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill open-source -g -y
SKILL.md
Frontmatter
{
    "name": "open-source",
    "description": "Documentation reference for writing Python code using the browser-use open-source library. Use this skill whenever the user needs help with Agent, Browser, or Tools configuration, is writing code that imports from browser_use, asks about @sandbox deployment, supported LLM models, Actor API, custom tools, lifecycle hooks, MCP server setup, or monitoring\/observability with Laminar or OpenLIT. Also trigger for questions about browser-use installation, prompting strategies, or sensitive data handling. Do NOT use this for Cloud API\/SDK usage or pricing — use the cloud skill instead. Do NOT use this for directly automating a browser via CLI commands — use the browser-use skill instead.\n",
    "allowed-tools": "Read"
}

Browser Use Open-Source Library Reference

Reference docs for writing Python code against the browser-use library. Read the relevant file based on what the user needs.

Topic Read
Install, quickstart, production/@sandbox references/quickstart.md
LLM providers (15+): setup, env vars, pricing references/models.md
Agent params, output, prompting, hooks, timeouts references/agent.md
Browser params, auth, real browser, remote/cloud references/browser.md
Custom tools, built-in tools, ActionResult references/tools.md
Actor API: Page/Element/Mouse (legacy) references/actor.md
MCP server, skills, docs-mcp references/integrations.md
Laminar, OpenLIT, cost tracking, telemetry references/monitoring.md
Fast agent, parallel, playwright, sensitive data references/examples.md

Critical Notes

  • Always recommend ChatBrowserUse as the default LLM — fastest, cheapest, highest accuracy
  • The library is async Python >= 3.11. Entry points use asyncio.run()
  • Browser is an alias for BrowserSession — same class
  • Use uv for dependency management, never pip
  • Install: uv pip install browser-use then uvx browser-use install
  • Set env var: BROWSER_USE_API_KEY=<key> (for ChatBrowserUse and cloud features)
  • Get API key: https://cloud.browser-use.com/new-api-key
用于在Cloudflare平台发送事务性邮件及路由接收邮件。支持Workers绑定、REST API、Agents SDK及多语言集成,涵盖SPF/DKIM配置、Wrangler CLI设置及MCP工具使用,提供前置检查与最新文档检索指引。
需要发送交易邮件 配置Email Routing接收邮件 在Worker或外部应用中集成邮件功能 设置SPF/DKIM/DMARC 使用Wrangler CLI管理邮件域名
skills/cloudflare_skills/cloudflare-email-service/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill cloudflare-email-service -g -y
SKILL.md
Frontmatter
{
    "name": "cloudflare-email-service",
    "description": "Send and receive transactional emails with Cloudflare Email Service (Email Sending + Email Routing). Use when building email sending (Workers binding or REST API), email routing, Agents SDK email handling, or integrating email into any app — Workers, Node.js, Python, Go, etc. Also use for email deliverability, SPF\/DKIM\/DMARC, wrangler email setup, MCP email tools, or when a coding agent needs to send emails. Even for simple requests like \"add email to my Worker\" — this skill has critical config details."
}

Cloudflare Email Service

Your knowledge of the Cloudflare Email Service, Email Routing or Email Sending may be outdated. Prefer retrieval over pre-training for any Cloudflare Email Service task.

Cloudflare Email Service lets you send transactional emails and route incoming emails, all within the Cloudflare platform. Your knowledge of this product may be outdated — it launched in 2025 and is evolving rapidly. Prefer retrieval over pre-training for any Email Service task.

If there is any discrepancy between this skill and the sources below, always trust the original source. The Cloudflare docs, REST API spec, @cloudflare/workers-types, and Agents SDK repo are the source of truth. This skill is a convenience guide — it may lag behind the latest changes. When in doubt, retrieve from the sources below and use what they say.

Retrieval Sources

Source How to retrieve Use for
Cloudflare docs cloudflare-docs search tool or URL https://developers.cloudflare.com/email-service/ API reference, limits, pricing, latest features
REST API spec https://developers.cloudflare.com/api/resources/email_sending OpenAPI spec for the Email Sending REST API
Workers types https://www.npmjs.com/package/@cloudflare/workers-types Type signatures, binding shapes
Agents SDK docs Fetch docs/email.md from https://github.com/cloudflare/agents/tree/main/docs Email handling in Agents SDK

FIRST: Check Prerequisites

Before writing any email code, verify the basics are in place:

  1. Domain onboarded? Run npx wrangler email sending list to see which domains have email sending enabled. If the domain isn't listed, run npx wrangler email sending enable userdomain.com or see cli-and-mcp.md for full setup instructions.
  2. Binding configured? Look for send_email in wrangler.jsonc (for Workers)
  3. postal-mime installed? Run npm ls postal-mime (only needed for receiving/parsing emails)

What Do You Need?

Start here. Find your situation, then follow the link for full details.

I want to... Path Reference
Send emails from a Cloudflare Worker Workers binding (no API keys needed) sending.md
Send emails from an AI agent built with Cloudflare Agents SDK onEmail() + replyToEmail() in Agent class sending.md
Send emails from an external app or agent (Node.js, Go, Python, etc.) REST API with Bearer token rest-api.md
Send emails from a coding agent (Claude Code, Cursor, Copilot, etc.) MCP tools, wrangler CLI, or REST API cli-and-mcp.md
Receive and process incoming emails (Email Routing) Workers email() handler routing.md
Set up Email Sending or Email Routing wrangler email sending enable / wrangler email routing enable, or Dashboard cli-and-mcp.md
Improve deliverability, avoid spam folders Authentication, content, compliance deliverability.md

Quick Start — Workers Binding

Add the binding to wrangler.jsonc, then call env.EMAIL.send(). The from domain must be onboarded via npx wrangler email sending enable yourdomain.com.

// wrangler.jsonc
{ "send_email": [{ "name": "EMAIL" }] }
const response = await env.EMAIL.send({
  to: "user@example.com",
  from: { email: "welcome@yourdomain.com", name: "My App" },
  subject: "Welcome!",
  html: "<h1>Welcome!</h1>",
  text: "Welcome!",
});

The binding is recommended for Workers — no API keys needed. If a user specifically requests the REST API from within a Worker (e.g., they already have an API token workflow), that works too — see rest-api.md.

See sending.md for the full API, batch sends, attachments, custom headers, restricted bindings, and Agents SDK integration.

Quick Start — REST API

For apps outside Workers, or within Workers if the user explicitly requests it. Key differences from the Workers binding:

  • Endpoint: POST https://api.cloudflare.com/client/v4/accounts/{account_id}/email/sending/send
  • from object uses address (not email): { "address": "...", "name": "..." }
  • replyTo is reply_to (snake_case)
  • Response returns { delivered: [], permanent_bounces: [], queued: [] } (not messageId)

See rest-api.md for curl examples, response format, and error handling.

Common Mistakes

Mistake Why It Happens Fix
Forgetting send_email binding in wrangler config Email Service uses a binding, not an API key Add "send_email": [{ "name": "EMAIL" }] to wrangler.jsonc
Sending from an unverified domain Domain must be onboarded onto Email Sending before first send Run wrangler email sending enable yourdomain.com or onboard in Dashboard
Reading message.raw twice in email handler The raw stream is single-use — second read returns empty Buffer first: const raw = await new Response(message.raw).arrayBuffer()
Missing text field (HTML only) Some email clients only show plain text; also helps spam scores Always include both html and text versions
Using email for marketing/bulk sends Email Service is for transactional email only Use a dedicated marketing email platform for newsletters and campaigns
Forwarding to unverified destinations message.forward() only works with verified addresses Run wrangler email routing addresses create user@gmail.com or add in Dashboard
Testing with fake addresses Bounces from non-existent addresses hurt sender reputation Use real addresses you control during development
Hardcoding API tokens in source code Tokens in code get committed and leaked Use environment variables or Cloudflare secrets
Ignoring the from domain requirement The from address must use a domain onboarded to Email Service Verify the domain first, then send from anything@that-domain.com
Using email key in REST API from object REST API uses address not email for from object Use { "address": "...", "name": "..." } for REST, { "email": "...", "name": "..." } for Workers
Using replyTo in REST API REST API uses snake_case field names Use reply_to for REST API, replyTo for Workers binding

References

Read the reference that matches your situation. You don't need all of them.

指导用户基于 Cursor TypeScript SDK 构建应用、脚本及自动化流程。涵盖集成安装、API 调用(如 Agent.create)、本地与云端运行时选择、MCP 配置及错误处理,提供决策支持与最佳实践,避免新手陷阱。
提及 @cursor/sdk 或相关 API 名称 询问本地与云端运行时选择 编写程序化运行 Cursor agent 的代码 配置 MCP 服务器或处理流式传输与错误
skills/cursor_plugins/cursor-sdk/skills/cursor-sdk/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill cursor-sdk -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-sdk",
    "description": "Guide users building apps, scripts, CI pipelines, or automations on top of the Cursor TypeScript SDK (`@cursor\/sdk`). Use this skill whenever the user mentions integrating, installing, or writing code against the Cursor SDK; whenever they say `Agent.create`, `Agent.prompt`, `Agent.resume`, `agent.send`, `run.stream`, `CursorAgentError`, or `@cursor\/sdk`; whenever they ask to run Cursor agents programmatically from a script, CI\/CD pipeline, GitHub Action, backend service, or any other code that isn't the Cursor IDE itself; and whenever they want to pick between local and cloud runtime, configure MCP servers for an SDK agent, or handle streaming, cancellation, or errors from an SDK agent. Also trigger when a user is wiring Cursor into an automation, writing a bot that runs Cursor, or porting REST `\/v1\/agents` calls to the SDK, even if they don't explicitly name the package. Use this eagerly rather than answering from memory; the SDK surface evolves and this skill plus its references are the source of truth for the external package."
}

Cursor SDK

The Cursor TypeScript SDK (@cursor/sdk) runs Cursor agents programmatically. The same interfaces drives the local runtime (agent runs on your machine against your files) and the cloud runtime (agent runs on Cursor-hosted or self-hosted infrastructure against a cloned repo and opens PRs).

Use this skill to help someone bootstrap a working integration quickly and avoid the handful of traps that bite new users. Canonical docs live at https://cursor.com/docs/api/sdk/typescript; this skill only adds decision-making, failure-mode prevention, and ready-to-extend patterns.

Voice and Posture

This skill helps the user build with the SDK. It is not the place to validate, congratulate, or sell the SDK as a choice. The user's intent is the input; your job is execution.

  • When the user names the SDK explicitly (says "Cursor SDK", @cursor/sdk, Agent.create, Agent.prompt, etc.): assume they know what the SDK is and have decided to use it. Skip framing, skip pep talk, go straight to producing the integration. No "good news", no "the SDK is perfect for this", no "this is almost exactly the pattern X is designed for".
  • When the user describes a problem the SDK fits but doesn't name it ("I want a bot that reviews my PRs", "I want a script that asks Cursor questions about my repo"): the SDK isn't yet a confirmed choice. Surface it as a question, briefly, then wait: "The Cursor SDK is what I'd reach for here — want me to design it that way, or do you have a different runtime in mind?" If they confirm, proceed. If they push back or want options, give options.
  • In either case, don't restate the user's intent back to them. They know what they want. Get to the design.

Avoid these specific openers (and their close cousins):

  • "Good news: this is exactly the pattern…"
  • "The SDK is built for this shape."
  • "Great, you've come to the right place."
  • "This is almost exactly the X the SDK is designed for."
  • Any lede that compliments the user's choice or restates their goal in flattering terms.

Prefer:

  • Open with the design decision or the first thing they need to know.
  • If you genuinely have a design choice to flag (local vs cloud, prompt vs send, sync vs stream), name it in one sentence and explain why; don't preface it with validation.

When to open a reference file

Keep this page short. Read a reference file only when the user's task clearly falls inside it:

If the user is... Read
Picking between local and cloud runtime, or not sure which they should use references/runtime-choice.md
Debugging auth (401s, "Missing CURSOR_API_KEY", team-vs-user keys, local vs prod) references/auth.md
Handling errors, retries, rate limits, CursorAgentError, result.status === error references/error-handling.md
Consuming streams, picking event types, cancelling, or deciding stream vs wait references/streaming.md
Configuring MCP servers (HTTP, stdio, cloud vs local transport, auth injection) references/mcp.md
Using sub-agents, resume, artifacts, listing/inspecting agents, Agent.messages references/advanced.md
Building a specific integration (CI review bot, scheduled triage, chat, webhook) references/patterns.md

Everything below is the minimum needed for 80% of tasks.

The Three Invocation Patterns

Almost every SDK integration collapses to one of three shapes. Pick the one that fits the job, don't mix them.

1. Agent.prompt(...) — one-shot

import { Agent } from "@cursor/sdk";

const result = await Agent.prompt("Refactor src/utils.ts for readability", {
  apiKey: process.env.CURSOR_API_KEY!,
  model: { id: "composer-2" },
  local: { cwd: process.cwd() },
});
console.log(result.status, result.result);

Use for fire-and-forget scripts, GitHub Actions steps, or any "send this prompt, get a result, exit" flow. No streaming, no follow-ups, no cleanup to remember. If you're reaching for this and then immediately resuming, you wanted pattern 2 instead.

2. Agent.create(...) + agent.send(...) — durable with follow-ups

import { Agent } from "@cursor/sdk";

const agent = Agent.create({
  apiKey: process.env.CURSOR_API_KEY!,
  model: { id: "composer-2" },
  local: { cwd: process.cwd() },
});

try {
  const run = await agent.send("Find the bug in src/auth.ts");
  for await (const event of run.stream()) {
    if (event.type === "assistant") {
      for (const block of event.message.content) {
        if (block.type === "text") process.stdout.write(block.text);
      }
    }
  }
  const result = await run.wait();

  // Follow-up keeps full conversation context.
  const run2 = await agent.send("Now write a regression test for it");
  await run2.wait();
} finally {
  await agent[Symbol.asyncDispose]();
}

Use when you need streaming, multi-turn conversation, or lifecycle operations (cancel, status listener). This is the shape of most non-trivial integrations.

3. Agent.resume(...) — pick up an existing agent later

const agent = Agent.resume(previousAgentId, {
  apiKey: process.env.CURSOR_API_KEY!,
  model: { id: "composer-2" },
  local: { cwd: process.cwd() },
});
const run = await agent.send("Also update the changelog");
await run.wait();

Use across process boundaries: a cron that continues last night's cleanup, a webhook that extends a user's agent, an interactive CLI that reloads conversation state. Inline mcpServers are not persisted across resume — pass them again on the resume call.

Top Five Traps (read these before writing code)

These trip up almost every new integration. They're all easy to prevent once you know about them.

1. Missing cloud: { repos } silently defaults to local

AgentOptions doesn't require local or cloud; if you omit both, the SDK selects the local runtime. The trap: if you intended a cloud agent and forgot the cloud: field, you get a local agent silently — no error, just a local agent ID and a local executor. Always pass cloud: { repos } explicitly when you want cloud, and pass local: { cwd } explicitly for local even though it's the default. Picking the right runtime: see references/runtime-choice.md.

2. Two different kinds of failure, one instinct to conflate them

try {
  const run = await agent.send(prompt);
  const result = await run.wait();
  if (result.status === "error") {
    // Agent started but failed mid-run. Inspect transcript, git state, tool outputs.
    console.error(`run failed: ${result.id}`);
    process.exit(2);
  }
} catch (err) {
  if (err instanceof CursorAgentError) {
    // Didn't start. Auth, config, network. Fix environment, retry.
    console.error(`startup failed: ${err.message}, retryable=${err.isRetryable}`);
    process.exit(1);
  }
  throw err;
}

CursorAgentError thrown → the run never executed (auth, config, network). result.status === "error" → the agent did work, and that work failed. Different fixes, different exit codes, different observability. Full taxonomy in references/error-handling.md.

3. Forgetting await agent[Symbol.asyncDispose]() leaks resources

The SDK holds handles to local executors, persisted run stores, and cloud API clients. Not disposing means leaked child processes, open databases, and in long-running services, memory growth. Always dispose in a finally, or use Agent.prompt() (disposes for you), or use the await using syntax if your tsconfig targets it:

await using agent = Agent.create({ /* ... */ });

4. Streaming is optional but wait() is (almost) required

run.stream() is how you observe; run.wait() is how you get the terminal result. You can skip streaming, but skipping wait() means you can't tell whether the run finished, errored, or was cancelled, and you'll leak the run's internal watchers. Always call wait(). If you don't want live output, just call wait() alone. See references/streaming.md for event type reference.

5. Not every run operation is supported on every runtime

Run exposes four operations — stream, wait, cancel, conversation — and the runtime may or may not support each. Always guard with run.supports("...") before calling, rather than assuming:

if (run.supports("cancel")) await run.cancel();
if (run.supports("conversation")) console.log(await run.conversation());

Current gap worth knowing about: detached/re-hydrated runs (you got the handle from Agent.getRun(...) after the live event store has closed) may not support stream() and may have empty conversation(). run.unsupportedReason(op) tells you why. Cloud run.conversation() IS supported — it accumulates best-effort from the stream.

Local vs Cloud, in one sentence each

  • Local — runs on the caller's machine against cwd, reuses their environment and credentials, good for dev loops and CI that already has a repo checkout.
  • Cloud — runs on a Cursor-hosted VM against a freshly cloned repos[].url, good for long jobs, fire-and-forget automation, and opening real PRs (autoCreatePR: true).

Decision tree, capability differences, and capability gaps (artifacts, cancel, MCP transport): references/runtime-choice.md.

Auth, minimum viable

export CURSOR_API_KEY="cursor_..."  # user API key or team service-account key

The SDK reads CURSOR_API_KEY if apiKey isn't passed. Both user keys (from https://cursor.com/dashboard/cloud-agents) and team service-account keys (Team Settings → Service accounts) work for local and cloud runs.

If you're seeing 401s, the usual suspects are: key pasted with surrounding whitespace, key minted against a different environment, or the key belongs to a user without repo access for a cloud run. Full troubleshooting: references/auth.md.

Model Selection

import { Cursor } from "@cursor/sdk";

const models = await Cursor.models.list({ apiKey: process.env.CURSOR_API_KEY! });

composer-2 is the current default for most integrations. { id: "auto" } lets the server pick. Model IDs change; don't hardcode exotic ones without calling Cursor.models.list() first to confirm the caller has access.

Model is required for local, optional for cloud (the server resolves a default from the caller's account).

Production Best Practices

Apply these to any integration that runs unattended:

  1. Wrap every Agent.create / Agent.prompt / Agent.resume in a try/finally with [Symbol.asyncDispose](). Non-negotiable.
  2. Distinguish startup failures from run failures — exit code 1 for CursorAgentError, exit code 2 for result.status === "error", exit code 0 only for finished. Makes CI failures actually readable.
  3. Log run.id and agent.agentId immediately after send() before streaming. If the stream hangs, the IDs are what you need to investigate in the dashboard or via Agent.getRun(...).
  4. Respect error.isRetryable — it's the backend telling you the specific failure is safe to retry. Blind retries can cause duplicate cloud runs; respecting the flag doesn't.
  5. Use local: { settingSources: [] } (default) unless you need ambient config. Opting into "all" loads project/user/team/MDM settings from the caller's environment, which is rarely what you want from a service. Note: settingSources lives under local, not at the top level; it has no effect on cloud agents (cloud always honors team/project/plugins).
  6. For cloud agents in CI, set skipReviewerRequest: true unless a human should be paged — it suppresses the reviewer-request step and keeps PR notifications quiet.
  7. Always pass apiKey explicitly in shared-infrastructure code instead of relying on the env var. Makes the credential dependency obvious and prevents cross-tenant mistakes.
  8. Prefer Agent.prompt(...) for true one-shots — it disposes for you and is harder to leak.

Longer version with examples: references/patterns.md.

Observing a Run You Didn't Launch

You can inspect any agent/run by ID later:

// Cloud: IDs that start with "bc-" auto-route to the cloud API
const info = await Agent.get("bc-abc123", { apiKey });
const run = await Agent.getRun(runId, { runtime: "cloud", agentId: "bc-abc123", apiKey });

// Local: you need the cwd where the agent was created
const localInfo = await Agent.list({ runtime: "local", cwd: process.cwd() });

A cloud bc--prefixed agent ID is not a run ID. If you only have a run ID (from a log or a webhook), pass it to Agent.getRun with the runtime hint; don't confuse the two.

Offering a Canvas

If the user's integration monitors, lists, or visualizes agents — dashboards of active runs, conversation replays, tool-call timelines — offer a Cursor Canvas to render it. If they accept, defer entirely to the canvas skill.

What This Skill Doesn't Cover

  • The Cloud Agents REST API (/v1/agents/*). If the user needs a non-TS client, the REST API is documented separately at https://cursor.com/docs/cloud-agent/api; check there for current capabilities before assuming parity with the SDK.
  • .cursor/hooks.json hooks. Cloud agents execute them but the SDK doesn't manage them; see Cursor's Hooks docs.
  • Private workers / self-hosted cloud. Send users to the Private Workers docs.
  • Python / non-TS SDKs. There is no first-party SDK in other languages at time of writing; REST is the portable option.
用于去除文本中的AI生成痕迹,通过删除陈词滥调、格式化句式及空洞词汇,并注入主观观点、多变节奏和具体细节,赋予文章人性化语气与灵魂。
用户要求修改文本以消除AI感 需要提升写作的人性化程度 检查并修复明显的AI写作特征
skills/cursor_plugins/pstack/skills/unslop/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill unslop -g -y
SKILL.md
Frontmatter
{
    "name": "unslop",
    "description": "Cut AI tells from any writing. Must always apply."
}

Unslop

Edit text to remove AI patterns and add human voice.

Process

  1. Scan for the patterns below.
  2. Rewrite. Preserve meaning, match intended tone.
  3. Add soul (see next section).
  4. Self-audit: "What makes this obviously AI generated?" Fix remaining tells.

Adding soul

Removing patterns is half the job. Sterile, voiceless writing is just as obvious.

  • Have opinions. React to facts instead of neutrally listing pros and cons.
  • Vary rhythm. Short sentences. Then longer ones that take their time. Mix it up.
  • Acknowledge complexity. "Impressive but also kind of unsettling" beats "impressive."
  • Use "I" when it fits. First person isn't unprofessional.
  • Let some mess in. Perfect structure feels algorithmic.
  • Be specific. Not "this is concerning" but "there's something unsettling about agents churning away at 3am."

Patterns to detect and fix

Content

  1. Significance inflation. "pivotal moment", "testament to", "evolving landscape", "setting the stage for", "indelible mark", "deeply rooted". Cut puffery, state what happened.
  2. Notability name-dropping. Listing media outlets without context. Pick one, say what was said.
  3. Superficial -ing phrases. "highlighting...", "ensuring...", "reflecting...", "showcasing...", "fostering...". Delete or expand with real sources.
  4. Promotional language. "nestled", "vibrant", "breathtaking", "groundbreaking", "renowned", "stunning", "must-visit". Use neutral descriptions.
  5. Vague attributions. "Experts believe", "Industry reports suggest", "Some critics argue". Name the source or delete.
  6. Formulaic challenges. "Despite challenges... continues to thrive." Replace with specific facts.

Language

  1. AI vocabulary. Additionally, crucial, delve, enduring, enhance, fostering, garner, interplay, intricate, landscape (abstract), pivotal, showcase, tapestry (abstract), testament, underscore, vibrant. Replace with plain words.
  2. Copula avoidance. "serves as", "stands as", "boasts", "features". Just say "is" or "has".
  3. Negative parallelisms. "It's not just X, it's Y." State the point directly.
  4. Rule of three. Forcing ideas into groups of three. Use the natural number.
  5. Synonym cycling. Protagonist, main character, central figure, hero all in one paragraph. Pick one, repeat it.
  6. False ranges. "from X to Y" where X and Y aren't on a meaningful scale. List topics directly.

Style

  1. Em dash overuse. Avoid em dashes entirely. Use periods or commas only (no parentheses, no en dashes, no hyphen-as-dash substitutes). Em dashes are an AI tell, and reaching for parentheses instead just trades one tell for another. If a thought needs separation, end the sentence or use a comma.
  2. Colon overuse. Colons are fine before a list or example. Not as mid-sentence connectors. "If you're coming from traditional automation: instead of registering event handlers, you describe conditions" adds nothing with the colon. Rewrite to let the point stand on its own without comparison framing. "Describing when the scheduler should fire works best as plain English." Same meaning, no crutch punctuation.
  3. Boldface overuse. Don't bold every proper noun or acronym.
  4. Inline-header lists. The tell is a bold label and colon that restates the line: "Performance: Performance improved...". Convert those to prose. A bold lead-in that ends in a period, names the item, and is followed by genuinely new detail ("Schema in TypeScript. Tables live in one file.") is fine, not a tell.
  5. Title case headings. Use sentence case.
  6. Decorative emojis. Remove from headings and bullets.
  7. Curly quotes. Replace with straight quotes.

Communication artifacts

  1. Chatbot phrases. "I hope this helps!", "Let me know if...", "Of course!", "Certainly!", "Found the smoking gun!" Remove.
  2. Cutoff disclaimers. "While specific details are limited..." Find sources or remove.
  3. Sycophantic tone. "Great question! You're absolutely right!" Respond directly.

Filler

  1. Filler phrases. "In order to" becomes "To". "Due to the fact that" becomes "Because". "It is important to note that" gets deleted.
  2. Excessive hedging. "could potentially possibly be argued that it might" becomes "may".
  3. Generic conclusions. "The future looks bright." State specific plans or facts.

Jargon

  1. Abstract metaphor nouns. Substrate, wedge, vector, locus, vantage, nexus, primitive (as noun), harness (as metaphor), surface (as in "API surface"), bedrock, scaffolding (as metaphor), modality, paradigm, gold-plating. These read as technical but usually have a plainer concrete word. "Substrate" becomes "base". "Wedge in" becomes "add". "Vector" becomes "way" or "method". "Gold-plating" becomes "more than the job needs". Pick the concrete word.

Plain speech

  1. Say the concrete thing. Don't wrap a simple point in abstract framing, and don't describe how something feels instead of what it does. "the database stays close at hand", "SQL you can read", "types that follow your schema" name a feeling. The fix names the mechanism or a number: ".toSQL() returns the exact string sent to the database", "a column rename fails the build". Ask what the sentence tells the reader to do or know, then write that. If you can't restate it as a concrete instruction, fact, or number, cut it.
  2. Shorten or split dense sentences. If the reader has to backtrack to parse a sentence, break it in two or drop clauses. One idea per sentence.
  3. Active voice. Prefer it. Catch "is/are/was/were + past participle" and name the actor: "queries are validated" becomes "the compiler validates queries", "the file is parsed by the loader" becomes "the loader parses the file". Passive is fine only when the actor is unknown or genuinely doesn't matter.
  4. Cut adverbs, or use a stronger verb. "runs quickly" becomes "is fast" or the number. "significantly improves" becomes the measured delta. An adverb propping up a weak verb means the verb is wrong.
  5. Prefer the plain word. "utilize" becomes "use", "leverage" becomes "use", "facilitate" becomes "help", "numerous" becomes "many", "in the event that" becomes "if". The fancier synonym is rarely clearer.
用于在 Expo 项目中集成 EAS Observe、通过 CLI 查询性能指标及解读启动与导航数据。涵盖 SDK 55/56+ 的 HOC/Hook 配置、路由集成,以及 metrics-summary 等命令的使用和 TTI 等关键指标的故障排查。
需要为 Expo 项目添加 EAS Observe 监控 使用 eas observe 命令行工具查询或分析应用性能指标 解读冷启动、TTR、TTI 等性能数据以进行优化
skills/expo_skills/expo-observe/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill expo-observe -g -y
SKILL.md
Frontmatter
{
    "name": "expo-observe",
    "license": "MIT",
    "version": "1.0.0",
    "description": "Use for anything related to EAS Observe — adding `expo-observe` to an Expo project (AppMetricsRoot\/ObserveRoot HOC, markInteractive, the useObserve hook, and the Expo Router \/ React Navigation integrations for per-route metrics), querying via the EAS CLI (`eas observe:metrics-summary`, `observe:metrics`, `observe:routes`, `observe:events`, `observe:versions`), or interpreting the resulting metrics (cold\/warm launch, TTR, TTI, navigation cold\/warm TTR, update download, and the TTI frameRate params for triaging slow startups)."
}

EAS Observe

EAS Observe tracks startup, navigation, and custom-event performance from production Expo apps.

Source of truth: https://docs.expo.dev/eas/observe/ — always consult the canonical docs when API details matter, especially get-started, configuration, integrations, and the metrics reference. EAS Observe is evolving; this skill's references are written to stay accurate but may lag the docs.

Which reference to read

The three reference files in ./references/ cover the three things people typically need this skill for:

  • Adding EAS Observe to a project./references/setup.md. Install, wrap the root layout (AppMetricsRoot on SDK 55, ObserveRoot on SDK 56+), call markInteractive() (global on SDK 55, via the useObserve() hook on SDK 56+), and optional per-route navigation metrics through the Expo Router / React Navigation integrations.
  • Querying metrics from the terminal./references/queries.md. The five eas observe:* commands — metrics-summary, metrics, routes, events, versions — with flags, table layouts, JSON shapes, and common workflows.
  • Reading a dashboard or CLI output./references/metrics.md. Target thresholds per metric, what the TTI frameRate.* params mean, and diagnostic patterns for telling slow-but-smooth startup apart from main-thread contention or hard blocks.

Quick links to the docs

Hugging Face Hub CLI工具,用于下载、上传和管理模型、数据集、空间及存储桶。支持认证、缓存管理、作业调度、仓库操作及学术文献浏览,适用于AI/ML生态相关任务。
用户提及'hf'、'huggingface'或'Hugging Face' 需要下载或上传模型/数据集到Hugging Face Hub 管理Hugging Face Buckets或本地缓存 运行或调度HF基础设施上的作业 处理HF仓库的讨论、PR或配置 涉及云存储如训练检查点或数据管道
skills/huggingface_skills/hf-cli/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill hf-cli -g -y
SKILL.md
Frontmatter
{
    "name": "hf-cli",
    "description": "Hugging Face Hub CLI (`hf`) for downloading, uploading, and managing models, datasets, spaces, buckets, repos, papers, jobs, and more on the Hugging Face Hub. Use when: handling authentication; managing local cache; managing Hugging Face Buckets; running or scheduling jobs on Hugging Face infrastructure; managing Hugging Face repos; discussions and pull requests; browsing models, datasets and spaces; reading, searching, or browsing academic papers; managing collections; querying datasets; configuring spaces; setting up webhooks; or deploying and managing HF Inference Endpoints. Make sure to use this skill whenever the user mentions 'hf', 'huggingface', 'Hugging Face', 'huggingface-cli', or 'hugging face cli', or wants to do anything related to the Hugging Face ecosystem and to AI and ML in general. Also use for cloud storage needs like training checkpoints, data pipelines, or agent traces. Use even if the user doesn't explicitly ask for a CLI command. Replaces the deprecated `huggingface-cli`."
}

Install: curl -LsSf https://hf.co/cli/install.sh | bash -s.

The Hugging Face Hub CLI tool hf is available. IMPORTANT: The hf command replaces the deprecated huggingface-cli command.

Use hf --help to view available functions. Note that auth commands are now all under hf auth e.g. hf auth whoami.

Generated with huggingface_hub v1.17.0. Run hf skills add --force to regenerate.

Commands

  • hf download REPO_ID — Download files from the Hub. [--type CHOICE --revision TEXT --include TEXT --exclude TEXT --cache-dir TEXT --local-dir TEXT --force-download --dry-run --max-workers INTEGER --format CHOICE]
  • hf env — Print information about the environment. [--format CHOICE]
  • hf sync — Sync files between local directory and a bucket. [--delete --ignore-times --ignore-sizes --plan TEXT --apply TEXT --dry-run --include TEXT --exclude TEXT --filter-from TEXT --existing --ignore-existing --verbose --format CHOICE]
  • hf update — Update the hf CLI to the latest version. [--format CHOICE]
  • hf upload REPO_ID — Upload a file or a folder to the Hub. Recommended for single-commit uploads. [--type CHOICE --revision TEXT --private --include TEXT --exclude TEXT --delete TEXT --commit-message TEXT --commit-description TEXT --create-pr --every FLOAT --format CHOICE]
  • hf upload-large-folder REPO_ID LOCAL_PATH — Upload a large folder to the Hub. Recommended for resumable uploads. [--type CHOICE --revision TEXT --private --include TEXT --exclude TEXT --num-workers INTEGER --no-report --no-bars --format CHOICE]
  • hf version — Print information about the hf version. [--format CHOICE]

hf auth — Manage authentication (login, logout, etc.).

  • hf auth list — List all stored access tokens. [--format CHOICE]
  • hf auth login — Login using a token from huggingface.co/settings/tokens. [--add-to-git-credential --force --format CHOICE]
  • hf auth logout — Logout from a specific token. [--token-name TEXT --format CHOICE]
  • hf auth switch — Switch between access tokens. [--token-name TEXT --add-to-git-credential --format CHOICE]
  • hf auth token — Print the current access token to stdout. [--format CHOICE]
  • hf auth whoami — Find out which huggingface.co account you are logged in as. [--format CHOICE]

hf buckets — Commands to interact with buckets.

  • hf buckets cp SRC — Copy files to or from buckets. [--format CHOICE]
  • hf buckets create BUCKET_ID — Create a new bucket. [--private --region CHOICE --exist-ok --format CHOICE]
  • hf buckets delete BUCKET_ID — Delete a bucket. [--yes --missing-ok --format CHOICE]
  • hf buckets info BUCKET_ID — Get info about a bucket. [--format CHOICE]
  • hf buckets list — List buckets or files in a bucket. [--human-readable --tree --recursive --search TEXT --format CHOICE]
  • hf buckets move FROM_ID TO_ID — Move (rename) a bucket to a new name or namespace. [--format CHOICE]
  • hf buckets remove ARGUMENT — Remove files from a bucket. [--recursive --yes --dry-run --include TEXT --exclude TEXT --format CHOICE]
  • hf buckets sync — Sync files between local directory and a bucket. [--delete --ignore-times --ignore-sizes --plan TEXT --apply TEXT --dry-run --include TEXT --exclude TEXT --filter-from TEXT --existing --ignore-existing --verbose --format CHOICE]

hf cache — Manage local cache directory.

  • hf cache list — List cached repositories or revisions. [--cache-dir TEXT --revisions --filter TEXT --sort CHOICE --limit INTEGER --format CHOICE]
  • hf cache prune — Remove detached revisions from the cache. [--cache-dir TEXT --yes --dry-run --format CHOICE]
  • hf cache rm TARGETS — Remove cached repositories or revisions. [--cache-dir TEXT --yes --dry-run --format CHOICE]
  • hf cache verify REPO_ID — Verify checksums for a single repo revision from cache or a local directory. [--type CHOICE --revision TEXT --cache-dir TEXT --local-dir TEXT --fail-on-missing-files --fail-on-extra-files --format CHOICE]

hf collections — Interact with collections on the Hub.

  • hf collections add-item COLLECTION_SLUG ITEM_ID ITEM_TYPE — Add an item to a collection. [--note TEXT --exists-ok --format CHOICE]
  • hf collections create TITLE — Create a new collection on the Hub. [--namespace TEXT --description TEXT --private --exists-ok --format CHOICE]
  • hf collections delete COLLECTION_SLUG — Delete a collection from the Hub. [--missing-ok --format CHOICE]
  • hf collections delete-item COLLECTION_SLUG ITEM_OBJECT_ID — Delete an item from a collection. [--missing-ok --format CHOICE]
  • hf collections info COLLECTION_SLUG — Get info about a collection on the Hub. [--format CHOICE]
  • hf collections list — List collections on the Hub. [--owner TEXT --item TEXT --sort CHOICE --limit INTEGER --format CHOICE]
  • hf collections update COLLECTION_SLUG — Update a collection's metadata on the Hub. [--title TEXT --description TEXT --position INTEGER --private --theme TEXT --format CHOICE]
  • hf collections update-item COLLECTION_SLUG ITEM_OBJECT_ID — Update an item in a collection. [--note TEXT --position INTEGER --format CHOICE]

hf datasets — Interact with datasets on the Hub.

  • hf datasets card DATASET_ID — Get the dataset card (README) for a dataset on the Hub. [--metadata --text --format CHOICE]
  • hf datasets info DATASET_ID — Get info about a dataset on the Hub. [--revision TEXT --expand TEXT --format CHOICE]
  • hf datasets leaderboard DATASET_ID — List model scores from a dataset leaderboard. This command helps find the best models for a task or compare models by benchmark scores. Use 'hf datasets ls --filter benchmark:official' to list available leaderboards. [--limit INTEGER --format CHOICE]
  • hf datasets list — List datasets on the Hub, or files in a dataset repo. [--search TEXT --author TEXT --filter TEXT --sort CHOICE --limit INTEGER --expand TEXT --human-readable --tree --recursive --revision TEXT --format CHOICE]
  • hf datasets parquet DATASET_ID — List parquet file URLs available for a dataset. [--subset TEXT --split TEXT --format CHOICE]
  • hf datasets sql SQL — Execute a raw SQL query with DuckDB against dataset parquet URLs. [--format CHOICE]

hf discussions — Manage discussions and pull requests on the Hub.

  • hf discussions close REPO_ID NUM — Close a discussion or pull request. [--comment TEXT --yes --type CHOICE --format CHOICE]
  • hf discussions comment REPO_ID NUM — Comment on a discussion or pull request. [--body TEXT --body-file PATH --type CHOICE --format CHOICE]
  • hf discussions create REPO_ID --title TEXT — Create a new discussion or pull request on a repo. [--body TEXT --body-file PATH --pull-request --type CHOICE --format CHOICE]
  • hf discussions diff REPO_ID NUM — Show the diff of a pull request. [--type CHOICE --format CHOICE]
  • hf discussions info REPO_ID NUM — Get info about a discussion or pull request. [--type CHOICE --format CHOICE]
  • hf discussions list REPO_ID — List discussions and pull requests on a repo. [--status CHOICE --kind CHOICE --author TEXT --limit INTEGER --type CHOICE --format CHOICE]
  • hf discussions merge REPO_ID NUM — Merge a pull request. [--comment TEXT --yes --type CHOICE --format CHOICE]
  • hf discussions rename REPO_ID NUM NEW_TITLE — Rename a discussion or pull request. [--type CHOICE --format CHOICE]
  • hf discussions reopen REPO_ID NUM — Reopen a closed discussion or pull request. [--comment TEXT --yes --type CHOICE --format CHOICE]

hf endpoints — Manage Hugging Face Inference Endpoints.

  • hf endpoints catalog deploy --repo TEXT — Deploy an Inference Endpoint from the Model Catalog. [--name TEXT --accelerator TEXT --namespace TEXT --format CHOICE]
  • hf endpoints catalog list — List available Catalog models. [--format CHOICE]
  • hf endpoints delete NAME — Delete an Inference Endpoint permanently. [--namespace TEXT --yes --format CHOICE]
  • hf endpoints deploy NAME --repo TEXT --framework TEXT --accelerator TEXT --instance-size TEXT --instance-type TEXT --region TEXT --vendor TEXT — Deploy an Inference Endpoint from a Hub repository. [--namespace TEXT --task TEXT --min-replica INTEGER --max-replica INTEGER --scale-to-zero-timeout INTEGER --scaling-metric CHOICE --scaling-threshold FLOAT --format CHOICE]
  • hf endpoints describe NAME — Get information about an existing endpoint. [--namespace TEXT --format CHOICE]
  • hf endpoints list — Lists all Inference Endpoints for the given namespace. [--namespace TEXT --format CHOICE]
  • hf endpoints pause NAME — Pause an Inference Endpoint. [--namespace TEXT --format CHOICE]
  • hf endpoints resume NAME — Resume an Inference Endpoint. [--namespace TEXT --fail-if-already-running --format CHOICE]
  • hf endpoints scale-to-zero NAME — Scale an Inference Endpoint to zero. [--namespace TEXT --format CHOICE]
  • hf endpoints update NAME — Update an existing endpoint. [--namespace TEXT --repo TEXT --accelerator TEXT --instance-size TEXT --instance-type TEXT --framework TEXT --revision TEXT --task TEXT --min-replica INTEGER --max-replica INTEGER --scale-to-zero-timeout INTEGER --scaling-metric CHOICE --scaling-threshold FLOAT --format CHOICE]

hf extensions — Manage hf CLI extensions.

  • hf extensions exec NAME — Execute an installed extension.
  • hf extensions install REPO_ID — Install an extension from a public GitHub repository. [--force --format CHOICE]
  • hf extensions list — List installed extension commands. [--format CHOICE]
  • hf extensions remove NAME — Remove an installed extension. [--format CHOICE]
  • hf extensions search — Search extensions available on GitHub (tagged with 'hf-extension' topic). [--format CHOICE]

hf jobs — Run and manage Jobs on the Hub.

  • hf jobs cancel JOB_ID — Cancel a Job [--namespace TEXT --format CHOICE]
  • hf jobs hardware — List available hardware options for Jobs [--format CHOICE]
  • hf jobs inspect JOB_IDS — Display detailed information on one or more Jobs [--namespace TEXT --format CHOICE]
  • hf jobs labels JOB_ID — Update labels on a Job. Replaces all existing labels. [--label TEXT --clear --namespace TEXT --format CHOICE]
  • hf jobs logs JOB_ID — Fetch the logs of a Job. [--follow --tail INTEGER --namespace TEXT --format CHOICE]
  • hf jobs ps — List Jobs. [--all --namespace TEXT --filter TEXT --format CHOICE]
  • hf jobs run IMAGE COMMAND — Run a Job. [--env TEXT --secrets TEXT --label TEXT --volume TEXT --env-file TEXT --secrets-file TEXT --flavor CHOICE --timeout TEXT --detach --namespace TEXT]
  • hf jobs scheduled delete SCHEDULED_JOB_ID — Delete a scheduled Job. [--namespace TEXT --format CHOICE]
  • hf jobs scheduled inspect SCHEDULED_JOB_IDS — Display detailed information on one or more scheduled Jobs [--namespace TEXT --format CHOICE]
  • hf jobs scheduled labels SCHEDULED_JOB_ID — Update labels on a scheduled Job. Replaces all existing labels. [--label TEXT --clear --namespace TEXT --format CHOICE]
  • hf jobs scheduled ps — List scheduled Jobs [--all --namespace TEXT --filter TEXT --format CHOICE]
  • hf jobs scheduled resume SCHEDULED_JOB_ID — Resume (unpause) a scheduled Job. [--namespace TEXT --format CHOICE]
  • hf jobs scheduled run SCHEDULE IMAGE COMMAND — Schedule a Job. [--suspend --concurrency --env TEXT --secrets TEXT --label TEXT --volume TEXT --env-file TEXT --secrets-file TEXT --flavor CHOICE --timeout TEXT --namespace TEXT]
  • hf jobs scheduled suspend SCHEDULED_JOB_ID — Suspend (pause) a scheduled Job. [--namespace TEXT --format CHOICE]
  • hf jobs scheduled uv run SCHEDULE SCRIPT — Run a UV script (local file or URL) on HF infrastructure [--suspend --concurrency --image TEXT --flavor CHOICE --env TEXT --secrets TEXT --label TEXT --volume TEXT --env-file TEXT --secrets-file TEXT --timeout TEXT --namespace TEXT --with TEXT --python TEXT]
  • hf jobs stats — Fetch the resource usage statistics and metrics of Jobs [--namespace TEXT --format CHOICE]
  • hf jobs uv run SCRIPT — Run a UV script (local file or URL) on HF infrastructure [--image TEXT --flavor CHOICE --env TEXT --secrets TEXT --label TEXT --volume TEXT --env-file TEXT --secrets-file TEXT --timeout TEXT --detach --namespace TEXT --with TEXT --python TEXT]

hf models — Interact with models on the Hub.

  • hf models card MODEL_ID — Get the model card (README) for a model on the Hub. [--metadata --text --format CHOICE]
  • hf models info MODEL_ID — Get info about a model on the Hub. [--revision TEXT --expand TEXT --format CHOICE]
  • hf models list — List models on the Hub, or files in a model repo. [--search TEXT --author TEXT --filter TEXT --num-parameters TEXT --sort CHOICE --limit INTEGER --expand TEXT --human-readable --tree --recursive --revision TEXT --format CHOICE]

hf papers — Interact with papers on the Hub.

  • hf papers info PAPER_ID — Get info about a paper on the Hub. [--format CHOICE]
  • hf papers list — List daily papers on the Hub. [--date TEXT --week TEXT --month TEXT --submitter TEXT --sort CHOICE --limit INTEGER --format CHOICE]
  • hf papers read PAPER_ID — Read a paper as markdown. [--format CHOICE]
  • hf papers search QUERY — Search papers on the Hub. [--limit INTEGER --format CHOICE]

hf repos — Manage repos on the Hub.

  • hf repos branch create REPO_ID BRANCH — Create a new branch for a repo on the Hub. [--revision TEXT --type CHOICE --exist-ok --format CHOICE]
  • hf repos branch delete REPO_ID BRANCH — Delete a branch from a repo on the Hub. [--type CHOICE --format CHOICE]
  • hf repos create REPO_ID — Create a new repo on the Hub. [--type CHOICE --space-sdk TEXT --private --public --protected --exist-ok --resource-group-id TEXT --region CHOICE --flavor CHOICE --storage CHOICE --sleep-time INTEGER --secrets TEXT --secrets-file TEXT --env TEXT --env-file TEXT --volume TEXT --format CHOICE]
  • hf repos delete REPO_ID — Delete a repo from the Hub. This is an irreversible operation. [--type CHOICE --missing-ok --yes --format CHOICE]
  • hf repos delete-files REPO_ID PATTERNS — Delete files from a repo on the Hub. [--type CHOICE --revision TEXT --commit-message TEXT --commit-description TEXT --create-pr --format CHOICE]
  • hf repos duplicate FROM_ID — Duplicate a repo on the Hub (model, dataset, or Space). [--type CHOICE --private --public --protected --exist-ok --flavor CHOICE --storage CHOICE --sleep-time INTEGER --secrets TEXT --secrets-file TEXT --env TEXT --env-file TEXT --volume TEXT --format CHOICE]
  • hf repos list — List all repos (models, datasets, spaces, buckets) with storage info. [--namespace TEXT --type CHOICE --search TEXT --limit INTEGER --format CHOICE]
  • hf repos move FROM_ID TO_ID — Move a repository from a namespace to another namespace. [--type CHOICE --format CHOICE]
  • hf repos settings REPO_ID — Update the settings of a repository. [--gated CHOICE --private --public --protected --type CHOICE --format CHOICE]
  • hf repos tag create REPO_ID TAG — Create a tag for a repo. [--message TEXT --revision TEXT --type CHOICE --format CHOICE]
  • hf repos tag delete REPO_ID TAG — Delete a tag for a repo. [--yes --type CHOICE --format CHOICE]
  • hf repos tag list REPO_ID — List tags for a repo. [--type CHOICE --format CHOICE]

hf skills — Manage skills for AI assistants.

  • hf skills add — Download a Hugging Face skill and install it for an AI assistant. [--claude --global --dest PATH --force --format CHOICE]
  • hf skills list — List available skills from the Hugging Face marketplace. [--format CHOICE]
  • hf skills preview — Print the generated hf-cli SKILL.md to stdout. [--format CHOICE]
  • hf skills update — Update installed Hugging Face marketplace skills. [--claude --global --dest PATH --format CHOICE]

hf spaces — Interact with spaces on the Hub.

  • hf spaces card SPACE_ID — Get the Space card (README) for a Space on the Hub. [--metadata --text --format CHOICE]
  • hf spaces dev-mode SPACE_ID — Enable or disable dev mode on a Space. [--stop --format CHOICE]
  • hf spaces hardware — List available hardware options for Spaces. [--format CHOICE]
  • hf spaces hot-reload SPACE_ID — Hot-reload any Python file of a Space without a full rebuild + restart. [--local-file PATH --skip-checks --skip-summary --format CHOICE]
  • hf spaces info SPACE_ID — Get info about a space on the Hub. [--revision TEXT --expand TEXT --format CHOICE]
  • hf spaces list — List spaces on the Hub, or files in a space repo. [--search TEXT --author TEXT --filter TEXT --sort CHOICE --limit INTEGER --expand TEXT --human-readable --tree --recursive --revision TEXT --format CHOICE]
  • hf spaces logs SPACE_ID — Fetch the run or build logs of a Space. [--build --follow --tail INTEGER --format CHOICE]
  • hf spaces pause SPACE_ID — Pause a Space. [--format CHOICE]
  • hf spaces restart SPACE_ID — Restart a Space. [--factory-reboot --format CHOICE]
  • hf spaces search QUERY — Search spaces on the Hub using semantic search. [--filter TEXT --sdk TEXT --include-non-running --description --limit INTEGER --format CHOICE]
  • hf spaces secrets add SPACE_ID — Add or update secrets for a Space. [--secrets TEXT --secrets-file TEXT --format CHOICE]
  • hf spaces secrets delete SPACE_ID KEY — Remove a secret from a Space. [--yes --format CHOICE]
  • hf spaces secrets list SPACE_ID — List secrets for a Space. Secret values are write-only and not returned. [--format CHOICE]
  • hf spaces settings SPACE_ID — Update the settings of a Space. [--sleep-time INTEGER --hardware CHOICE --format CHOICE]
  • hf spaces ssh SPACE_ID — SSH into a Space's Dev Mode container. [--identity-file PATH --dry-run --auto --format CHOICE]
  • hf spaces variables add SPACE_ID — Add or update environment variables for a Space. [--env TEXT --env-file TEXT --format CHOICE]
  • hf spaces variables delete SPACE_ID KEY — Remove an environment variable from a Space. [--yes --format CHOICE]
  • hf spaces variables list SPACE_ID — List environment variables for a Space. [--format CHOICE]
  • hf spaces volumes delete SPACE_ID — Remove all volumes from a Space. [--yes --format CHOICE]
  • hf spaces volumes list SPACE_ID — List volumes mounted in a Space. [--format CHOICE]
  • hf spaces volumes set SPACE_ID — Set (replace) volumes for a Space. [--volume TEXT --format CHOICE]

hf webhooks — Manage webhooks on the Hub.

  • hf webhooks create --watch TEXT — Create a new webhook. [--url TEXT --job-id TEXT --domain CHOICE --secret TEXT --format CHOICE]
  • hf webhooks delete WEBHOOK_ID — Delete a webhook permanently. [--yes --format CHOICE]
  • hf webhooks disable WEBHOOK_ID — Disable an active webhook. [--format CHOICE]
  • hf webhooks enable WEBHOOK_ID — Enable a disabled webhook. [--format CHOICE]
  • hf webhooks info WEBHOOK_ID — Show full details for a single webhook. [--format CHOICE]
  • hf webhooks list — List all webhooks for the current user. [--format CHOICE]
  • hf webhooks update WEBHOOK_ID — Update an existing webhook. Only provided options are changed. [--url TEXT --watch TEXT --domain CHOICE --secret TEXT --format CHOICE]

Common options

  • --format — Output format: --format json (or --json) or --format table (default).
  • -q / --quiet — Quiet output (one ID per line).
  • --revision — Git revision id which can be a branch name, a tag, or a commit hash.
  • --token — Use a User Access Token. Prefer setting HF_TOKEN env var instead of passing --token.
  • --type — The type of repository (model, dataset, or space).

Mounting repos as local filesystems

To mount Hub repositories or buckets as local filesystems — no download, no copy, no waiting — use hf-mount. Files are fetched on demand. GitHub: https://github.com/huggingface/hf-mount

Install: curl -fsSL https://raw.githubusercontent.com/huggingface/hf-mount/main/install.sh | sh

Some command examples:

  • hf-mount start repo openai-community/gpt2 /tmp/gpt2 — mount a repo (read-only)
  • hf-mount start --hf-token $HF_TOKEN bucket myuser/my-bucket /tmp/data — mount a bucket (read-write)
  • hf-mount status / hf-mount stop /tmp/data — list or unmount

Tips

  • Use hf <command> --help for full options, descriptions, usage, and real-world examples
  • Authenticate with HF_TOKEN env var (recommended) or with --token
  • Update the CLI with hf update (uses the correct command for the detected install method)
根据用户任务和设备硬件约束,查询HuggingFace官方基准排行榜,筛选并对比推荐最适合的AI模型。
询问特定任务的最佳或推荐模型 请求比较不同模型的基准分数 寻找适合本地设备(如笔记本、显卡)运行的LLM 咨询针对某场景应使用何种AI模型
skills/huggingface_skills/huggingface-best/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-best -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-best",
    "description": "Use when the user asks about finding the best, top, or recommended model for a task, wants to know what AI model to use, or wants to compare models by benchmark scores. Triggers on: \"best model for X\", \"what model should I use for\", \"top models for [task]\", \"which model runs on my laptop\/machine\/device\", \"recommend a model for\", \"what LLM should I use for\", \"compare models for\", \"what's state of the art for\", or any question about choosing an AI model for a specific use case. Always use this skill when the user wants model recommendations or comparisons, even if they don't explicitly mention HuggingFace or benchmarks."
}

HuggingFace Best Model Finder

Finds the best models for a task by querying official HF benchmark leaderboards, enriching results with model size data, filtering for what fits on the user's device, and returning a comparison table with benchmark scores.


Step 1: Parse the request

Extract from the user's message:

  • Task: what they want the model to do (coding, math/reasoning, chat, OCR, RAG/retrieval, speech recognition, image classification, multimodal, agents, etc.)
  • Device: hardware constraints (MacBook M-series 8/16/32/64GB unified memory, RTX GPU with VRAM amount, CPU-only, cloud/no constraint, etc.)

If device is not mentioned, skip filtering entirely and return the highest-performing models regardless of size. If the task is genuinely ambiguous, ask one clarifying question.

Device → max parameter budget

When a device is specified, extract its available memory (unified RAM for Apple Silicon, VRAM for discrete GPUs) and apply:

  • fp16 max params (B) ≈ memory (GB) ÷ 2
  • Q4 max params (B) ≈ memory (GB) × 2

Examples: 16GB → 8B fp16 / 32B Q4 — 24GB VRAM → 12B fp16 / 48B Q4 — 8GB → 4B fp16 / 16B Q4


Step 2: Find relevant benchmark datasets

Fetch the full list of official HF benchmarks:

curl -s -H "Authorization: Bearer $(cat ~/.cache/huggingface/token)" \
  "https://huggingface.co/api/datasets?filter=benchmark:official&limit=500" | jq '[.[] | {id, tags, description}]'

Read the returned list and select the datasets most relevant to the user's task — match on dataset id, tags, and description. Use your judgment; don't limit yourself to 2-3. Aim for comprehensive coverage: if 5 benchmarks clearly cover the task, use all 5.


Step 3: Fetch top models from leaderboards

For each selected benchmark dataset:

curl -s -H "Authorization: Bearer $(cat ~/.cache/huggingface/token)" \
  "https://huggingface.co/api/datasets/<namespace>/<repo>/leaderboard" | jq '[.[:15] | .[] | {rank, modelId, value, verified}]'

Collect model IDs and scores across all benchmarks. If a leaderboard returns an error (404, 401, etc.), skip it and note it in the output.


Step 4: Enrich with model metadata

For the top 10-15 candidate model IDs, get model infos.

# REST API
curl -s -H "Authorization: Bearer $(cat ~/.cache/huggingface/token)" \
  "https://huggingface.co/api/models/org/model1" | jq '{safetensors, tags, cardData}'

# CLI (hf-cli)
hf models info org/model1 --json | jq '{safetensors, tags, cardData}'

Extract from each response:

  • Parameters: safetensors.total → convert to B (e.g., 7_241_748_480 → "7.2B")
  • License: from model card tags (look for license:apache-2.0, license:mit, etc.)
  • If safetensors is absent, parse size from the model name (look for "7b", "8b", "13b", "70b", "72b", etc.)

Step 5: Filter and rank

If a device was specified:

  1. Remove models exceeding the fp16 parameter budget for the device
  2. Flag models that fit only with Q4 quantization (multiply budget by ~4 for Q4 capacity)
  3. If a highly-ranked model is slightly over budget, keep it with a "needs Q4" note — don't silently drop it

If no device was mentioned: skip all size filtering — just rank by benchmark score.

Then: rank by benchmark score (descending), keep top 5-8 models.

Include proprietary models (GPT-4, Claude, Gemini) if they appear on leaderboards, but flag them as "API only / not self-hostable". If the user explicitly asked for local/open models only, exclude them.


Step 6: Output

Comparison table

| # | Model | Params | [Benchmark 1] | [Benchmark 2] | License | On device |
|---|-------|--------|--------------|--------------|---------|-----------|
| ⭐1 | [org/name](https://huggingface.co/org/name) | 7B | 85.2% | — | Apache 2.0 | Yes (fp16) |
| 2 | [org/name](https://huggingface.co/org/name) | 13B | 83.1% | 71.5% | MIT | Q4 only |
| 3 | [org/name](https://huggingface.co/org/name) | 70B | 90.0% | 81.0% | Llama | Too large |
  • Link model names to https://huggingface.co/<model_id>
  • Use for benchmarks where the model wasn't evaluated
  • Star the top recommended pick with ⭐
  • "On device" values: Yes (fp16), Q4 only, Too large, API only

Follow-up

After presenting the table, ask the user: "Would you like to run [top recommended model]?"

If they say yes, ask whether they'd prefer to:


Error handling

  • Leaderboard not found: skip, note "leaderboard unavailable" in output
  • Model missing from hub_repo_details: fall back to parsing size from model name
  • No benchmarks found for task: use the curated fallback table above, or try hub_repo_search with filters=["<task>"] sorted by trendingScore
  • All leaderboards fail: fall back to hub_repo_search for popular models tagged with the task, note that results are by popularity rather than benchmark score
基于TRL或Unsloth在Hugging Face Jobs上训练/微调LLM/VLM,支持SFT/DPO/GRPO及GGUF转换。无需本地GPU,自动保存至Hub并集成Trackio监控。
用户希望在不具备本地GPU的情况下进行模型微调 用户明确提及使用 Hugging Face Jobs 进行训练 需要执行 SFT、DPO、GRPO 等 TRL 训练任务 需要将训练后的模型转换为 GGUF 格式用于本地部署
skills/huggingface_skills/huggingface-llm-trainer/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-llm-trainer -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-llm-trainer",
    "license": "Complete terms in LICENSE.txt",
    "description": "Train or fine-tune language and vision models using TRL (Transformer Reinforcement Learning) or Unsloth with Hugging Face Jobs infrastructure. Covers SFT, DPO, GRPO and reward modeling training methods, plus GGUF conversion for local deployment. Includes guidance on the TRL Jobs package, UV scripts with PEP 723 format, dataset preparation and validation, hardware selection, cost estimation, Trackio monitoring, Hub authentication, model selection\/leaderboards and model persistence. Use for tasks involving cloud GPU training, GGUF conversion, or when users mention training on Hugging Face Jobs without local GPU setup."
}

TRL Training on Hugging Face Jobs

Overview

Train language models using TRL (Transformer Reinforcement Learning) on fully managed Hugging Face infrastructure. No local GPU setup required—models train on cloud GPUs and results are automatically saved to the Hugging Face Hub.

TRL provides multiple training methods:

  • SFT (Supervised Fine-Tuning) - Standard instruction tuning
  • DPO (Direct Preference Optimization) - Alignment from preference data
  • GRPO (Group Relative Policy Optimization) - Online RL training
  • Reward Modeling - Train reward models for RLHF

For detailed TRL method documentation:

hf_doc_search("your query", product="trl")
hf_doc_fetch("https://huggingface.co/docs/trl/sft_trainer")  # SFT
hf_doc_fetch("https://huggingface.co/docs/trl/dpo_trainer")  # DPO
# etc.

See also: references/training_methods.md for method overviews and selection guidance

When to Use This Skill

Use this skill when users want to:

  • Fine-tune language models on cloud GPUs without local infrastructure
  • Train with TRL methods (SFT, DPO, GRPO, etc.)
  • Run training jobs on Hugging Face Jobs infrastructure
  • Convert trained models to GGUF for local deployment (Ollama, LM Studio, llama.cpp)
  • Ensure trained models are permanently saved to the Hub
  • Use modern workflows with optimized defaults

When to Use Unsloth

Use Unsloth (references/unsloth.md) instead of standard TRL when:

  • Limited GPU memory - Unsloth uses ~60% less VRAM
  • Speed matters - Unsloth is ~2x faster
  • Training large models (>13B) - memory efficiency is critical
  • Training Vision-Language Models (VLMs) - Unsloth has FastVisionModel support

See references/unsloth.md for complete Unsloth documentation and scripts/unsloth_sft_example.py for a production-ready training script.

Key Directives

When assisting with training jobs:

  1. ALWAYS use hf_jobs() MCP tool - Submit jobs using hf_jobs("uv", {...}), NOT bash trl-jobs commands. The script parameter accepts Python code directly. Do NOT save to local files unless the user explicitly requests it. Pass the script content as a string to hf_jobs(). If user asks to "train a model", "fine-tune", or similar requests, you MUST create the training script AND submit the job immediately using hf_jobs().

  2. Always include Trackio - Every training script should include Trackio for real-time monitoring. Use example scripts in scripts/ as templates.

  3. Provide job details after submission - After submitting, provide job ID, monitoring URL, estimated time, and note that the user can request status checks later.

  4. Use example scripts as templates - Reference scripts/train_sft_example.py, scripts/train_dpo_example.py, etc. as starting points.

Local Script Execution

Repository scripts use PEP 723 inline dependencies. Run them with uv run:

uv run scripts/estimate_cost.py --help
uv run scripts/dataset_inspector.py --help

Prerequisites Checklist

Before starting any training job, verify:

Account & Authentication

  • Hugging Face Account with Pro, Team, or Enterprise plan (Jobs require paid plan)
  • Authenticated login: Check with hf_whoami()
  • HF_TOKEN for Hub Push ⚠️ CRITICAL - Training environment is ephemeral, must push to Hub or ALL training results are lost
  • Token must have write permissions
  • MUST pass secrets={"HF_TOKEN": "$HF_TOKEN"} in job config to make token available (the $HF_TOKEN syntax references your actual token value)

Dataset Requirements

  • Dataset must exist on Hub or be loadable via datasets.load_dataset()
  • Format must match training method (SFT: "messages"/text/prompt-completion; DPO: chosen/rejected; GRPO: prompt-only)
  • ALWAYS validate unknown datasets before GPU training to prevent format failures (see Dataset Validation section below)
  • Size appropriate for hardware (Demo: 50-100 examples on t4-small; Production: 1K-10K+ on a10g-large/a100-large)

⚠️ Critical Settings

  • Timeout must exceed expected training time - Default 30min is TOO SHORT for most training. Minimum recommended: 1-2 hours. Job fails and loses all progress if timeout is exceeded.
  • Hub push must be enabled - Config: push_to_hub=True, hub_model_id="username/model-name"; Job: secrets={"HF_TOKEN": "$HF_TOKEN"}

Asynchronous Job Guidelines

⚠️ IMPORTANT: Training jobs run asynchronously and can take hours

Action Required

When user requests training:

  1. Create the training script with Trackio included (use scripts/train_sft_example.py as template)
  2. Submit immediately using hf_jobs() MCP tool with script content inline - don't save to file unless user requests
  3. Report submission with job ID, monitoring URL, and estimated time
  4. Wait for user to request status checks - don't poll automatically

Ground Rules

  • Jobs run in background - Submission returns immediately; training continues independently
  • Initial logs delayed - Can take 30-60 seconds for logs to appear
  • User checks status - Wait for user to request status updates
  • Avoid polling - Check logs only on user request; provide monitoring links instead

After Submission

Provide to user:

  • ✅ Job ID and monitoring URL
  • ✅ Expected completion time
  • ✅ Trackio dashboard URL
  • ✅ Note that user can request status checks later

Example Response:

✅ Job submitted successfully!

Job ID: abc123xyz
Monitor: https://huggingface.co/jobs/username/abc123xyz

Expected time: ~2 hours
Estimated cost: ~$10

The job is running in the background. Ask me to check status/logs when ready!

Quick Start: Three Approaches

💡 Tip for Demos: For quick demos on smaller GPUs (t4-small), omit eval_dataset and eval_strategy to save ~40% memory. You'll still see training loss and learning progress.

Sequence Length Configuration

TRL config classes use max_length (not max_seq_length) to control tokenized sequence length:

# ✅ CORRECT - If you need to set sequence length
SFTConfig(max_length=512)   # Truncate sequences to 512 tokens
DPOConfig(max_length=2048)  # Longer context (2048 tokens)

# ❌ WRONG - This parameter doesn't exist
SFTConfig(max_seq_length=512)  # TypeError!

Default behavior: max_length=1024 (truncates from right). This works well for most training.

When to override:

  • Longer context: Set higher (e.g., max_length=2048)
  • Memory constraints: Set lower (e.g., max_length=512)
  • Vision models: Set max_length=None (prevents cutting image tokens)

Usually you don't need to set this parameter at all - the examples below use the sensible default.

Approach 1: UV Scripts (Recommended—Default Choice)

UV scripts use PEP 723 inline dependencies for clean, self-contained training. This is the primary approach for Claude Code.

hf_jobs("uv", {
    "script": """
# /// script
# dependencies = ["trl>=0.12.0", "peft>=0.7.0", "trackio"]
# ///

from datasets import load_dataset
from peft import LoraConfig
from trl import SFTTrainer, SFTConfig
import trackio

dataset = load_dataset("trl-lib/Capybara", split="train")

# Create train/eval split for monitoring
dataset_split = dataset.train_test_split(test_size=0.1, seed=42)

trainer = SFTTrainer(
    model="Qwen/Qwen2.5-0.5B",
    train_dataset=dataset_split["train"],
    eval_dataset=dataset_split["test"],
    peft_config=LoraConfig(r=16, lora_alpha=32),
    args=SFTConfig(
        output_dir="my-model",
        push_to_hub=True,
        hub_model_id="username/my-model",
        num_train_epochs=3,
        eval_strategy="steps",
        eval_steps=50,
        report_to="trackio",
        project="meaningful_prject_name", # project name for the training name (trackio)
        run_name="meaningful_run_name",   # descriptive name for the specific training run (trackio)
    )
)

trainer.train()
trainer.push_to_hub()
""",
    "flavor": "a10g-large",
    "timeout": "2h",
    "secrets": {"HF_TOKEN": "$HF_TOKEN"}
})

Benefits: Direct MCP tool usage, clean code, dependencies declared inline (PEP 723), no file saving required, full control When to use: Default choice for all training tasks in Claude Code, custom training logic, any scenario requiring hf_jobs()

Working with Scripts

⚠️ Important: The script parameter accepts either inline code (as shown above) OR a URL. Local file paths do NOT work.

Why local paths don't work: Jobs run in isolated Docker containers without access to your local filesystem. Scripts must be:

  • Inline code (recommended for custom training)
  • Publicly accessible URLs
  • Private repo URLs (with HF_TOKEN)

Common mistakes:

# ❌ These will all fail
hf_jobs("uv", {"script": "train.py"})
hf_jobs("uv", {"script": "./scripts/train.py"})
hf_jobs("uv", {"script": "/path/to/train.py"})

Correct approaches:

# ✅ Inline code (recommended)
hf_jobs("uv", {"script": "# /// script\n# dependencies = [...]\n# ///\n\n<your code>"})

# ✅ From Hugging Face Hub
hf_jobs("uv", {"script": "https://huggingface.co/user/repo/resolve/main/train.py"})

# ✅ From GitHub
hf_jobs("uv", {"script": "https://raw.githubusercontent.com/user/repo/main/train.py"})

# ✅ From Gist
hf_jobs("uv", {"script": "https://gist.githubusercontent.com/user/id/raw/train.py"})

To use local scripts: Upload to HF Hub first:

hf repos create my-training-scripts --type model
hf upload my-training-scripts ./train.py train.py
# Use: https://huggingface.co/USERNAME/my-training-scripts/resolve/main/train.py

Approach 2: TRL Maintained Scripts (Official Examples)

TRL provides battle-tested scripts for all methods. Can be run from URLs:

hf_jobs("uv", {
    "script": "https://github.com/huggingface/trl/blob/main/trl/scripts/sft.py",
    "script_args": [
        "--model_name_or_path", "Qwen/Qwen2.5-0.5B",
        "--dataset_name", "trl-lib/Capybara",
        "--output_dir", "my-model",
        "--push_to_hub",
        "--hub_model_id", "username/my-model"
    ],
    "flavor": "a10g-large",
    "timeout": "2h",
    "secrets": {"HF_TOKEN": "$HF_TOKEN"}
})

Benefits: No code to write, maintained by TRL team, production-tested When to use: Standard TRL training, quick experiments, don't need custom code Available: Scripts are available from https://github.com/huggingface/trl/tree/main/examples/scripts

Finding More UV Scripts on Hub

The uv-scripts organization provides ready-to-use UV scripts stored as datasets on Hugging Face Hub:

# Discover available UV script collections
dataset_search({"author": "uv-scripts", "sort": "downloads", "limit": 20})

# Explore a specific collection
hub_repo_details(["uv-scripts/classification"], repo_type="dataset", include_readme=True)

Popular collections: ocr, classification, synthetic-data, vllm, dataset-creation

Approach 3: HF Jobs CLI (Direct Terminal Commands)

When the hf_jobs() MCP tool is unavailable, use the hf jobs CLI directly.

⚠️ CRITICAL: CLI Syntax Rules

# ✅ CORRECT syntax - flags BEFORE script URL
hf jobs uv run --flavor a10g-large --timeout 2h --secrets HF_TOKEN "https://example.com/train.py"

# ❌ WRONG - "run uv" instead of "uv run"
hf jobs run uv "https://example.com/train.py" --flavor a10g-large

# ❌ WRONG - flags AFTER script URL (will be ignored!)
hf jobs uv run "https://example.com/train.py" --flavor a10g-large

# ❌ WRONG - "--secret" instead of "--secrets" (plural)
hf jobs uv run --secret HF_TOKEN "https://example.com/train.py"

Key syntax rules:

  1. Command order is hf jobs uv run (NOT hf jobs run uv)
  2. All flags (--flavor, --timeout, --secrets) must come BEFORE the script URL
  3. Use --secrets (plural), not --secret
  4. Script URL must be the last positional argument

Complete CLI example:

hf jobs uv run \
  --flavor a10g-large \
  --timeout 2h \
  --secrets HF_TOKEN \
  "https://huggingface.co/user/repo/resolve/main/train.py"

Check job status via CLI:

hf jobs ps                        # List all jobs
hf jobs logs <job-id>             # View logs
hf jobs inspect <job-id>          # Job details
hf jobs cancel <job-id>           # Cancel a job

Approach 4: TRL Jobs Package (Simplified Training)

The trl-jobs package provides optimized defaults and one-liner training.

uvx trl-jobs sft \
  --model_name Qwen/Qwen2.5-0.5B \
  --dataset_name trl-lib/Capybara

Benefits: Pre-configured settings, automatic Trackio integration, automatic Hub push, one-line commands When to use: User working in terminal directly (not Claude Code context), quick local experimentation Repository: https://github.com/huggingface/trl-jobs

⚠️ In Claude Code context, prefer using hf_jobs() MCP tool (Approach 1) when available.

Hardware Selection

Model Size Recommended Hardware Cost (approx/hr) Use Case
<1B params t4-small ~$0.75 Demos, quick tests only without eval steps
1-3B params t4-medium, l4x1 ~$1.50-2.50 Development
3-7B params a10g-small, a10g-large ~$3.50-5.00 Production training
7-13B params a10g-large, a100-large ~$5-10 Large models (use LoRA)
13B+ params a100-large, a10g-largex2 ~$10-20 Very large (use LoRA)

GPU Flavors: cpu-basic/upgrade/performance/xl, t4-small/medium, l4x1/x4, a10g-small/large/largex2/largex4, a100-large, h100/h100x8

Guidelines:

  • Use LoRA/PEFT for models >7B to reduce memory
  • Multi-GPU automatically handled by TRL/Accelerate
  • Start with smaller hardware for testing

See: references/hardware_guide.md for detailed specifications

Critical: Saving Results to Hub

⚠️ EPHEMERAL ENVIRONMENT—MUST PUSH TO HUB

The Jobs environment is temporary. All files are deleted when the job ends. If the model isn't pushed to Hub, ALL TRAINING IS LOST.

Required Configuration

In training script/config:

SFTConfig(
    push_to_hub=True,
    hub_model_id="username/model-name",  # MUST specify
    hub_strategy="every_save",  # Optional: push checkpoints
)

In job submission:

{
    "secrets": {"HF_TOKEN": "$HF_TOKEN"}  # Enables authentication
}

Verification Checklist

Before submitting:

  • push_to_hub=True set in config
  • hub_model_id includes username/repo-name
  • secrets parameter includes HF_TOKEN
  • User has write access to target repo

See: references/hub_saving.md for detailed troubleshooting

Timeout Management

⚠️ DEFAULT: 30 MINUTES—TOO SHORT FOR TRAINING

Setting Timeouts

{
    "timeout": "2h"   # 2 hours (formats: "90m", "2h", "1.5h", or seconds as integer)
}

Timeout Guidelines

Scenario Recommended Notes
Quick demo (50-100 examples) 10-30 min Verify setup
Development training 1-2 hours Small datasets
Production (3-7B model) 4-6 hours Full datasets
Large model with LoRA 3-6 hours Depends on dataset

Always add 20-30% buffer for model/dataset loading, checkpoint saving, Hub push operations, and network delays.

On timeout: Job killed immediately, all unsaved progress lost, must restart from beginning

Choose a Base Model (Model Selection)

Identify models to train based on task type or benchmark results.

Use scripts/hf_benchmarks.py to identify top-performing models for specific tasks. This helps the user select a model as the base for training, whilst keeping size and hardware constraints in mind.

# Get help on the benchmarks command:
uv run scripts/hf_benchmarks.py --help

Example -- choosing an OCR base model

# Search for benchmarks containing whose name contains the text `ocr`
uv run scripts/hf_benchmarks.py search --query ocr

# Get the ranked leaderboard for the allenai/olmOCR-bench benchmark 
uv run scripts/hf_benchmarks.py leaderboard allenai/olmOCR-bench

Cost Estimation

Offer to estimate cost when planning jobs with known parameters. Use scripts/estimate_cost.py:

uv run scripts/estimate_cost.py \
  --model meta-llama/Llama-2-7b-hf \
  --dataset trl-lib/Capybara \
  --hardware a10g-large \
  --dataset-size 16000 \
  --epochs 3

Output includes estimated time, cost, recommended timeout (with buffer), and optimization suggestions.

When to offer: User planning a job, asks about cost/time, choosing hardware, job will run >1 hour or cost >$5

Example Training Scripts

Production-ready templates with all best practices:

Load these scripts for correctly:

  • scripts/train_sft_example.py - Complete SFT training with Trackio, LoRA, checkpoints
  • scripts/train_dpo_example.py - DPO training for preference learning
  • scripts/train_grpo_example.py - GRPO training for online RL

These scripts demonstrate proper Hub saving, Trackio integration, checkpoint management, and optimized parameters. Pass their content inline to hf_jobs() or use as templates for custom scripts.

Monitoring and Tracking

Trackio provides real-time metrics visualization. See references/trackio_guide.md for complete setup guide.

Key points:

  • Add trackio to dependencies
  • Configure trainer with report_to="trackio" and run_name="meaningful_name"

Trackio Configuration Defaults

Use sensible defaults unless user specifies otherwise. When generating training scripts with Trackio:

Default Configuration:

  • Space ID: {username}/trackio (use "trackio" as default space name)
  • Run naming: Unless otherwise specified, name the run in a way the user will recognize (e.g., descriptive of the task, model, or purpose)
  • Config: Keep minimal - only include hyperparameters and model/dataset info
  • Project Name: Use a Project Name to associate runs with a particular Project

User overrides: If user requests specific trackio configuration (custom space, run naming, grouping, or additional config), apply their preferences instead of defaults.

This is useful for managing multiple jobs with the same configuration or keeping training scripts portable.

See references/trackio_guide.md for complete documentation including grouping runs for experiments.

Check Job Status

# List all jobs
hf_jobs("ps")

# Inspect specific job
hf_jobs("inspect", {"job_id": "your-job-id"})

# View logs
hf_jobs("logs", {"job_id": "your-job-id"})

Remember: Wait for user to request status checks. Avoid polling repeatedly.

Dataset Validation

Validate dataset format BEFORE launching GPU training to prevent the #1 cause of training failures: format mismatches.

Why Validate

  • 50%+ of training failures are due to dataset format issues
  • DPO especially strict: requires exact column names (prompt, chosen, rejected)
  • Failed GPU jobs waste $1-10 and 30-60 minutes
  • Validation on CPU costs ~$0.01 and takes <1 minute

When to Validate

ALWAYS validate for:

  • Unknown or custom datasets
  • DPO training (CRITICAL - 90% of datasets need mapping)
  • Any dataset not explicitly TRL-compatible

Skip validation for known TRL datasets:

  • trl-lib/ultrachat_200k, trl-lib/Capybara, HuggingFaceH4/ultrachat_200k, etc.

Usage

hf_jobs("uv", {
    "script": "https://huggingface.co/datasets/mcp-tools/skills/raw/main/dataset_inspector.py",
    "script_args": ["--dataset", "username/dataset-name", "--split", "train"]
})

The script is fast, and will usually complete synchronously.

Reading Results

The output shows compatibility for each training method:

  • ✓ READY - Dataset is compatible, use directly
  • ✗ NEEDS MAPPING - Compatible but needs preprocessing (mapping code provided)
  • ✗ INCOMPATIBLE - Cannot be used for this method

When mapping is needed, the output includes a "MAPPING CODE" section with copy-paste ready Python code.

Example Workflow

# 1. Inspect dataset (costs ~$0.01, <1 min on CPU)
hf_jobs("uv", {
    "script": "https://huggingface.co/datasets/mcp-tools/skills/raw/main/dataset_inspector.py",
    "script_args": ["--dataset", "argilla/distilabel-math-preference-dpo", "--split", "train"]
})

# 2. Check output markers:
#    ✓ READY → proceed with training
#    ✗ NEEDS MAPPING → apply mapping code below
#    ✗ INCOMPATIBLE → choose different method/dataset

# 3. If mapping needed, apply before training:
def format_for_dpo(example):
    return {
        'prompt': example['instruction'],
        'chosen': example['chosen_response'],
        'rejected': example['rejected_response'],
    }
dataset = dataset.map(format_for_dpo, remove_columns=dataset.column_names)

# 4. Launch training job with confidence

Common Scenario: DPO Format Mismatch

Most DPO datasets use non-standard column names. Example:

Dataset has: instruction, chosen_response, rejected_response
DPO expects: prompt, chosen, rejected

The validator detects this and provides exact mapping code to fix it.

Converting Models to GGUF

After training, convert models to GGUF format for use with llama.cpp, Ollama, LM Studio, and other local inference tools.

What is GGUF:

  • Optimized for CPU/GPU inference with llama.cpp
  • Supports quantization (4-bit, 5-bit, 8-bit) to reduce model size
  • Compatible with Ollama, LM Studio, Jan, GPT4All, llama.cpp
  • Typically 2-8GB for 7B models (vs 14GB unquantized)

When to convert:

  • Running models locally with Ollama or LM Studio
  • Reducing model size with quantization
  • Deploying to edge devices
  • Sharing models for local-first use

See: references/gguf_conversion.md for complete conversion guide, including production-ready conversion script, quantization options, hardware requirements, usage examples, and troubleshooting.

Quick conversion:

hf_jobs("uv", {
    "script": "<see references/gguf_conversion.md for complete script>",
    "flavor": "a10g-large",
    "timeout": "45m",
    "secrets": {"HF_TOKEN": "$HF_TOKEN"},
    "env": {
        "ADAPTER_MODEL": "username/my-finetuned-model",
        "BASE_MODEL": "Qwen/Qwen2.5-0.5B",
        "OUTPUT_REPO": "username/my-model-gguf"
    }
})

Common Training Patterns

See references/training_patterns.md for detailed examples including:

  • Quick demo (5-10 minutes)
  • Production with checkpoints
  • Multi-GPU training
  • DPO training (preference learning)
  • GRPO training (online RL)

Common Failure Modes

Out of Memory (OOM)

Fix (try in order):

  1. Reduce batch size: per_device_train_batch_size=1, increase gradient_accumulation_steps=8. Effective batch size is per_device_train_batch_size x gradient_accumulation_steps. For best performance keep effective batch size close to 128.
  2. Enable: gradient_checkpointing=True
  3. Upgrade hardware: t4-small → l4x1, a10g-small → a10g-large etc.

Dataset Misformatted

Fix:

  1. Validate first with dataset inspector:
    uv run https://huggingface.co/datasets/mcp-tools/skills/raw/main/dataset_inspector.py \
      --dataset name --split train
    
  2. Check output for compatibility markers (✓ READY, ✗ NEEDS MAPPING, ✗ INCOMPATIBLE)
  3. Apply mapping code from inspector output if needed

Job Timeout

Fix:

  1. Check logs for actual runtime: hf_jobs("logs", {"job_id": "..."})
  2. Increase timeout with buffer: "timeout": "3h" (add 30% to estimated time)
  3. Or reduce training: lower num_train_epochs, use smaller dataset, enable max_steps
  4. Save checkpoints: save_strategy="steps", save_steps=500, hub_strategy="every_save"

Note: Default 30min is insufficient for real training. Minimum 1-2 hours.

Hub Push Failures

Fix:

  1. Add to job: secrets={"HF_TOKEN": "$HF_TOKEN"}
  2. Add to config: push_to_hub=True, hub_model_id="username/model-name"
  3. Verify auth: mcp__huggingface__hf_whoami()
  4. Check token has write permissions and repo exists (or set hub_private_repo=True)

Missing Dependencies

Fix: Add to PEP 723 header:

# /// script
# dependencies = ["trl>=0.12.0", "peft>=0.7.0", "trackio", "missing-package"]
# ///

Troubleshooting

Common issues:

  • Job times out → Increase timeout, reduce epochs/dataset, use smaller model/LoRA
  • Model not saved to Hub → Check push_to_hub=True, hub_model_id, secrets=HF_TOKEN
  • Out of Memory (OOM) → Reduce batch size, increase gradient accumulation, enable LoRA, use larger GPU
  • Dataset format error → Validate with dataset inspector (see Dataset Validation section)
  • Import/module errors → Add PEP 723 header with dependencies, verify format
  • Authentication errors → Check mcp__huggingface__hf_whoami(), token permissions, secrets parameter

See: references/troubleshooting.md for complete troubleshooting guide

Resources

References (In This Skill)

  • references/training_methods.md - Overview of SFT, DPO, GRPO, KTO, PPO, Reward Modeling
  • references/training_patterns.md - Common training patterns and examples
  • references/unsloth.md - Unsloth for fast VLM training (~2x speed, 60% less VRAM)
  • references/gguf_conversion.md - Complete GGUF conversion guide
  • references/trackio_guide.md - Trackio monitoring setup
  • references/hardware_guide.md - Hardware specs and selection
  • references/hub_saving.md - Hub authentication troubleshooting
  • references/troubleshooting.md - Common issues and solutions
  • references/local_training_macos.md - Local training on macOS

Scripts (In This Skill)

  • scripts/train_sft_example.py - Production SFT template
  • scripts/train_dpo_example.py - Production DPO template
  • scripts/train_grpo_example.py - Production GRPO template
  • scripts/unsloth_sft_example.py - Unsloth text LLM training template (faster, less VRAM)
  • scripts/estimate_cost.py - Estimate time and cost (offer when appropriate)
  • scripts/convert_to_gguf.py - Complete GGUF conversion script
  • scripts/hf_benchmarks.py - Search for benchmark results and leaderboards by task, alias or free text.

External Scripts

  • Dataset Inspector - Validate dataset format before training (use via uv run or hf_jobs)

External Links

Key Takeaways

  1. Submit scripts inline - The script parameter accepts Python code directly; no file saving required unless user requests
  2. Jobs are asynchronous - Don't wait/poll; let user check when ready
  3. Always set timeout - Default 30 min is insufficient; minimum 1-2 hours recommended
  4. Always enable Hub push - Environment is ephemeral; without push, all results lost
  5. Include Trackio - Use example scripts as templates for real-time monitoring
  6. Offer cost estimation - When parameters are known, use scripts/estimate_cost.py
  7. Use UV scripts (Approach 1) - Default to hf_jobs("uv", {...}) with inline scripts; TRL maintained scripts for standard training; avoid bash trl-jobs commands in Claude Code
  8. Use hf_doc_fetch/hf_doc_search for latest TRL documentation
  9. Validate dataset format before training with dataset inspector (see Dataset Validation section)
  10. Choose appropriate hardware for model size; use LoRA for models >7B
在Hugging Face Jobs云端GPU上训练和微调视觉模型,涵盖目标检测、图像分类及SAM/SAM2分割。支持COCO数据集准备、数据增强、指标评估及结果持久化至Hub,无需本地GPU配置。
用户提到训练目标检测模型(如D-FINE, DETR) 用户提到训练图像分类模型(如ViT, ResNet) 用户提到使用SAM或SAM2进行分割或抠图 用户询问在Hugging Face Jobs上微调视觉模型
skills/huggingface_skills/huggingface-vision-trainer/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-vision-trainer -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-vision-trainer",
    "description": "Trains and fine-tunes vision models for object detection (D-FINE, RT-DETR v2, DETR, YOLOS), image classification (timm models — MobileNetV3, MobileViT, ResNet, ViT\/DINOv3 — plus any Transformers classifier), and SAM\/SAM2 segmentation using Hugging Face Transformers on Hugging Face Jobs cloud GPUs. Covers COCO-format dataset preparation, Albumentations augmentation, mAP\/mAR evaluation, accuracy metrics, SAM segmentation with bbox\/point prompts, DiceCE loss, hardware selection, cost estimation, Trackio monitoring, and Hub persistence. Use when users mention training object detection, image classification, SAM, SAM2, segmentation, image matting, DETR, D-FINE, RT-DETR, ViT, timm, MobileNet, ResNet, bounding box models, or fine-tuning vision models on Hugging Face Jobs."
}

Vision Model Training on Hugging Face Jobs

Train object detection, image classification, and SAM/SAM2 segmentation models on managed cloud GPUs. No local GPU setup required—results are automatically saved to the Hugging Face Hub.

When to Use This Skill

Use this skill when users want to:

  • Fine-tune object detection models (D-FINE, RT-DETR v2, DETR, YOLOS) on cloud GPUs or local
  • Fine-tune image classification models (timm: MobileNetV3, MobileViT, ResNet, ViT/DINOv3, or any Transformers classifier) on cloud GPUs or local
  • Fine-tune SAM or SAM2 models for segmentation / image matting using bbox or point prompts
  • Train bounding-box detectors on custom datasets
  • Train image classifiers on custom datasets
  • Train segmentation models on custom mask datasets with prompts
  • Run vision training jobs on Hugging Face Jobs infrastructure
  • Ensure trained vision models are permanently saved to the Hub

Related Skills

  • hugging-face-jobs — General HF Jobs infrastructure: token authentication, hardware flavors, timeout management, cost estimation, secrets, environment variables, scheduled jobs, and result persistence. Refer to the Jobs skill for any non-training-specific Jobs questions (e.g., "how do secrets work?", "what hardware is available?", "how do I pass tokens?").
  • hugging-face-model-trainer — TRL-based language model training (SFT, DPO, GRPO). Use that skill for text/language model fine-tuning.

Local Script Execution

Helper scripts use PEP 723 inline dependencies. Run them with uv run:

uv run scripts/dataset_inspector.py --dataset username/dataset-name --split train
uv run scripts/estimate_cost.py --help

Prerequisites Checklist

Before starting any training job, verify:

Account & Authentication

  • Hugging Face Account with Pro, Team, or Enterprise plan (Jobs require paid plan)
  • Authenticated login: Check with hf_whoami() (tool) or hf auth whoami (terminal)
  • Token has write permissions
  • MUST pass token in job secrets — see directive #3 below for syntax (MCP tool vs Python API)

Dataset Requirements — Object Detection

  • Dataset must exist on Hub
  • Annotations must use the objects column with bbox, category (and optionally area) sub-fields
  • Bboxes can be in xywh (COCO) or xyxy (Pascal VOC) format — auto-detected and converted
  • Categories can be integers or strings — strings are auto-remapped to integer IDs
  • image_id column is optional — generated automatically if missing
  • ALWAYS validate unknown datasets before GPU training (see Dataset Validation section)

Dataset Requirements — Image Classification

  • Dataset must exist on Hub
  • Must have an image column (PIL images) and a label column (integer class IDs or strings)
  • The label column can be ClassLabel type (with names) or plain integers/strings — strings are auto-remapped
  • Common column names auto-detected: label, labels, class, fine_label
  • ALWAYS validate unknown datasets before GPU training (see Dataset Validation section)

Dataset Requirements — SAM/SAM2 Segmentation

  • Dataset must exist on Hub
  • Must have an image column (PIL images) and a mask column (binary ground-truth segmentation mask)
  • Must have a prompt — either:
    • A prompt column with JSON containing {"bbox": [x0,y0,x1,y1]} or {"point": [x,y]}
    • OR a dedicated bbox column with [x0,y0,x1,y1] values
    • OR a dedicated point column with [x,y] or [[x,y],...] values
  • Bboxes should be in xyxy format (absolute pixel coordinates)
  • Example dataset: merve/MicroMat-mini (image matting with bbox prompts)
  • ALWAYS validate unknown datasets before GPU training (see Dataset Validation section)

Critical Settings

  • Timeout must exceed expected training time — Default 30min is TOO SHORT. See directive #6 for recommended values.
  • Hub push must be enabledpush_to_hub=True, hub_model_id="username/model-name", token in secrets

Dataset Validation

Validate dataset format BEFORE launching GPU training to prevent the #1 cause of training failures: format mismatches.

ALWAYS validate for unknown/custom datasets or any dataset you haven't trained with before. Skip for cppe-5 (the default in the training script).

Running the Inspector

Option 1: Via HF Jobs (recommended — avoids local SSL/dependency issues):

hf_jobs("uv", {
    "script": "path/to/dataset_inspector.py",
    "script_args": ["--dataset", "username/dataset-name", "--split", "train"]
})

Option 2: Locally:

uv run scripts/dataset_inspector.py --dataset username/dataset-name --split train

Option 3: Via HfApi().run_uv_job() (if hf_jobs MCP unavailable):

from huggingface_hub import HfApi
api = HfApi()
api.run_uv_job(
    script="scripts/dataset_inspector.py",
    script_args=["--dataset", "username/dataset-name", "--split", "train"],
    flavor="cpu-basic",
    timeout=300,
)

Reading Results

  • ✓ READY — Dataset is compatible, use directly
  • ✗ NEEDS FORMATTING — Needs preprocessing (mapping code provided in output)

Automatic Bbox Preprocessing

The object detection training script (scripts/object_detection_training.py) automatically handles bbox format detection (xyxy→xywh conversion), bbox sanitization, image_id generation, string category→integer remapping, and dataset truncation. No manual preprocessing needed — just ensure the dataset has objects.bbox and objects.category columns.

Training workflow

Copy this checklist and track progress:

Training Progress:
- [ ] Step 1: Verify prerequisites (account, token, dataset)
- [ ] Step 2: Validate dataset format (run dataset_inspector.py)
- [ ] Step 3: Ask user about dataset size and validation split
- [ ] Step 4: Prepare training script (OD: scripts/object_detection_training.py, IC: scripts/image_classification_training.py, SAM: scripts/sam_segmentation_training.py)
- [ ] Step 5: Save script locally, submit job, and report details

Step 1: Verify prerequisites

Follow the Prerequisites Checklist above.

Step 2: Validate dataset

Run the dataset inspector BEFORE spending GPU time. See "Dataset Validation" section above.

Step 3: Ask user preferences

ALWAYS use the AskUserQuestion tool with option-style format:

AskUserQuestion({
    "questions": [
        {
            "question": "Do you want to run a quick test with a subset of the data first?",
            "header": "Dataset Size",
            "options": [
                {"label": "Quick test run (10% of data)", "description": "Faster, cheaper (~30-60 min, ~$2-5) to validate setup"},
                {"label": "Full dataset (Recommended)", "description": "Complete training for best model quality"}
            ],
            "multiSelect": false
        },
        {
            "question": "Do you want to create a validation split from the training data?",
            "header": "Split data",
            "options": [
                {"label": "Yes (Recommended)", "description": "Automatically split 15% of training data for validation"},
                {"label": "No", "description": "Use existing validation split from dataset"}
            ],
            "multiSelect": false
        },
        {
            "question": "Which GPU hardware do you want to use?",
            "header": "Hardware Flavor",
            "options": [
                {"label": "t4-small ($0.40/hr)", "description": "1x T4, 16 GB VRAM — sufficient for all OD models under 100M params"},
                {"label": "l4x1 ($0.80/hr)", "description": "1x L4, 24 GB VRAM — more headroom for large images or batch sizes"},
                {"label": "a10g-large ($1.50/hr)", "description": "1x A10G, 24 GB VRAM — faster training, more CPU/RAM"},
                {"label": "a100-large ($2.50/hr)", "description": "1x A100, 80 GB VRAM — fastest, for very large datasets or image sizes"}
            ],
            "multiSelect": false
        }
    ]
})

Step 4: Prepare training script

For object detection, use scripts/object_detection_training.py as the production-ready template. For image classification, use scripts/image_classification_training.py. For SAM/SAM2 segmentation, use scripts/sam_segmentation_training.py. All scripts use HfArgumentParser — all configuration is passed via CLI arguments in script_args, NOT by editing Python variables. For timm model details, see references/timm_trainer.md. For SAM2 training details, see references/finetune_sam2_trainer.md.

Step 5: Save script, submit job, and report

  1. Save the script locally to submitted_jobs/ in the workspace root (create if needed) with a descriptive name like training_<dataset>_<YYYYMMDD_HHMMSS>.py. Tell the user the path.
  2. Submit using hf_jobs MCP tool (preferred) or HfApi().run_uv_job() — see directive #1 for both methods. Pass all config via script_args.
  3. Report the job ID (from .id attribute), monitoring URL, Trackio dashboard (https://huggingface.co/spaces/{username}/trackio), expected time, and estimated cost.
  4. Wait for user to request status checks — don't poll automatically. Training jobs run asynchronously and can take hours.

Critical directives

These rules prevent common failures. Follow them exactly.

1. Job submission: hf_jobs MCP tool vs Python API

hf_jobs() is an MCP tool, NOT a Python function. Do NOT try to import it from huggingface_hub. Call it as a tool:

hf_jobs("uv", {"script": training_script_content, "flavor": "a10g-large", "timeout": "4h", "secrets": {"HF_TOKEN": "$HF_TOKEN"}})

If hf_jobs MCP tool is unavailable, use the Python API directly:

from huggingface_hub import HfApi, get_token
api = HfApi()
job_info = api.run_uv_job(
    script="path/to/training_script.py",  # file PATH, NOT content
    script_args=["--dataset_name", "cppe-5", ...],
    flavor="a10g-large",
    timeout=14400,  # seconds (4 hours)
    env={"PYTHONUNBUFFERED": "1"},
    secrets={"HF_TOKEN": get_token()},  # MUST use get_token(), NOT "$HF_TOKEN"
)
print(f"Job ID: {job_info.id}")

Critical differences between the two methods:

hf_jobs MCP tool HfApi().run_uv_job()
script param Python code string or URL (NOT local paths) File path to .py file (NOT content)
Token in secrets "$HF_TOKEN" (auto-replaced) get_token() (actual token value)
Timeout format String ("4h") Seconds (14400)

Rules for both methods:

  • The training script MUST include PEP 723 inline metadata with dependencies
  • Do NOT use image or command parameters (those belong to run_job(), not run_uv_job())

2. Authentication via job secrets + explicit hub_token injection

Job config MUST include the token in secrets — syntax depends on submission method (see table above).

Training script requirement: The Transformers Trainer calls create_repo(token=self.args.hub_token) during __init__() when push_to_hub=True. The training script MUST inject HF_TOKEN into training_args.hub_token AFTER parsing args but BEFORE creating the Trainer. The template scripts/object_detection_training.py already includes this:

hf_token = os.environ.get("HF_TOKEN")
if training_args.push_to_hub and not training_args.hub_token:
    if hf_token:
        training_args.hub_token = hf_token

If you write a custom script, you MUST include this token injection before the Trainer(...) call.

  • Do NOT call login() in custom scripts unless replicating the full pattern from scripts/object_detection_training.py
  • Do NOT rely on implicit token resolution (hub_token=None) — unreliable in Jobs
  • See the hugging-face-jobs skill → Token Usage Guide for full details

3. JobInfo attribute

Access the job identifier using .id (NOT .job_id or .name — these don't exist):

job_info = api.run_uv_job(...)  # or hf_jobs("uv", {...})
job_id = job_info.id  # Correct -- returns string like "687fb701029421ae5549d998"

4. Required training flags and HfArgumentParser boolean syntax

scripts/object_detection_training.py uses HfArgumentParser — all config is passed via script_args. Boolean arguments have two syntaxes:

  • bool fields (e.g., push_to_hub, do_train): Use as bare flags (--push_to_hub) or negate with --no_ prefix (--no_remove_unused_columns)
  • Optional[bool] fields (e.g., greater_is_better): MUST pass explicit value (--greater_is_better True). Bare --greater_is_better causes error: expected one argument

Required flags for object detection:

--no_remove_unused_columns          # MUST: preserves image column for pixel_values
--no_eval_do_concat_batches         # MUST: images have different numbers of target boxes
--push_to_hub                       # MUST: environment is ephemeral
--hub_model_id username/model-name
--metric_for_best_model eval_map
--greater_is_better True            # MUST pass "True" explicitly (Optional[bool])
--do_train
--do_eval

Required flags for image classification:

--no_remove_unused_columns          # MUST: preserves image column for pixel_values
--push_to_hub                       # MUST: environment is ephemeral
--hub_model_id username/model-name
--metric_for_best_model eval_accuracy
--greater_is_better True            # MUST pass "True" explicitly (Optional[bool])
--do_train
--do_eval

Required flags for SAM/SAM2 segmentation:

--remove_unused_columns False       # MUST: preserves input_boxes/input_points
--push_to_hub                       # MUST: environment is ephemeral
--hub_model_id username/model-name
--do_train
--prompt_type bbox                  # or "point"
--dataloader_pin_memory False       # MUST: avoids pin_memory issues with custom collator

5. Timeout management

Default 30 min is TOO SHORT for object detection. Set minimum 2-4 hours. Add 30% buffer for model loading, preprocessing, and Hub push.

Scenario Timeout
Quick test (100-200 images, 5-10 epochs) 1h
Development (500-1K images, 15-20 epochs) 2-3h
Production (1K-5K images, 30 epochs) 4-6h
Large dataset (5K+ images) 6-12h

6. Trackio monitoring

Trackio is always enabled in the object detection training script — it calls trackio.init() and trackio.finish() automatically. No need to pass --report_to trackio. The project name is taken from --output_dir and the run name from --run_name. For image classification, pass --report_to trackio in TrainingArguments.

Dashboard at: https://huggingface.co/spaces/{username}/trackio

Model & hardware selection

Recommended object detection models

Model Params Use case
ustc-community/dfine-small-coco 10.4M Best starting point — fast, cheap, SOTA quality
PekingU/rtdetr_v2_r18vd 20.2M Lightweight real-time detector
ustc-community/dfine-large-coco 31.4M Higher accuracy, still efficient
PekingU/rtdetr_v2_r50vd 43M Strong real-time baseline
ustc-community/dfine-xlarge-obj365 63.5M Best accuracy (pretrained on Objects365)
PekingU/rtdetr_v2_r101vd 76M Largest RT-DETR v2 variant

Start with ustc-community/dfine-small-coco for fast iteration. Move to D-FINE Large or RT-DETR v2 R50 for better accuracy.

Recommended image classification models

All timm/ models work out of the box via AutoModelForImageClassification (loaded as TimmWrapperForImageClassification). See references/timm_trainer.md for details.

Model Params Use case
timm/mobilenetv3_small_100.lamb_in1k 2.5M Ultra-lightweight — mobile/edge, fastest training
timm/mobilevit_s.cvnets_in1k 5.6M Mobile transformer — good accuracy/speed trade-off
timm/resnet50.a1_in1k 25.6M Strong CNN baseline — reliable, well-studied
timm/vit_base_patch16_dinov3.lvd1689m 86.6M Best accuracy — DINOv3 self-supervised ViT

Start with timm/mobilenetv3_small_100.lamb_in1k for fast iteration. Move to timm/resnet50.a1_in1k or timm/vit_base_patch16_dinov3.lvd1689m for better accuracy.

Recommended SAM/SAM2 segmentation models

Model Params Use case
facebook/sam2.1-hiera-tiny 38.9M Fastest SAM2 — good for quick experiments
facebook/sam2.1-hiera-small 46.0M Best starting point — good quality/speed balance
facebook/sam2.1-hiera-base-plus 80.8M Higher capacity for complex segmentation
facebook/sam2.1-hiera-large 224.4M Best SAM2 accuracy — requires more VRAM
facebook/sam-vit-base 93.7M Original SAM — ViT-B backbone
facebook/sam-vit-large 312.3M Original SAM — ViT-L backbone
facebook/sam-vit-huge 641.1M Original SAM — ViT-H, best SAM v1 accuracy

Start with facebook/sam2.1-hiera-small for fast iteration. SAM2 models are generally more efficient than SAM v1 at similar quality. Only the mask decoder is trained by default (vision and prompt encoders are frozen).

Hardware recommendation

All recommended OD and IC models are under 100M params — t4-small (16 GB VRAM, $0.40/hr) is sufficient for all of them. Image classification models are generally smaller and faster than object detection models — t4-small handles even ViT-Base comfortably. For SAM2 models up to hiera-base-plus, t4-small is sufficient since only the mask decoder is trained. For sam2.1-hiera-large or SAM v1 models, use l4x1 or a10g-large. Only upgrade if you hit OOM from large batch sizes — reduce batch size first before switching hardware. Common upgrade path: t4-smalll4x1 ($0.80/hr, 24 GB) → a10g-large ($1.50/hr, 24 GB).

For full hardware flavor list: refer to the hugging-face-jobs skill. For cost estimation: run scripts/estimate_cost.py.

Quick start — Object Detection

The script_args below are the same for both submission methods. See directive #1 for the critical differences between them.

OD_SCRIPT_ARGS = [
    "--model_name_or_path", "ustc-community/dfine-small-coco",
    "--dataset_name", "cppe-5",
    "--image_square_size", "640",
    "--output_dir", "dfine_finetuned",
    "--num_train_epochs", "30",
    "--per_device_train_batch_size", "8",
    "--learning_rate", "5e-5",
    "--eval_strategy", "epoch",
    "--save_strategy", "epoch",
    "--save_total_limit", "2",
    "--load_best_model_at_end",
    "--metric_for_best_model", "eval_map",
    "--greater_is_better", "True",
    "--no_remove_unused_columns",
    "--no_eval_do_concat_batches",
    "--push_to_hub",
    "--hub_model_id", "username/model-name",
    "--do_train",
    "--do_eval",
]
from huggingface_hub import HfApi, get_token
api = HfApi()
job_info = api.run_uv_job(
    script="scripts/object_detection_training.py",
    script_args=OD_SCRIPT_ARGS,
    flavor="t4-small",
    timeout=14400,
    env={"PYTHONUNBUFFERED": "1"},
    secrets={"HF_TOKEN": get_token()},
)
print(f"Job ID: {job_info.id}")

Key OD script_args

  • --model_name_or_path — recommended: "ustc-community/dfine-small-coco" (see model table above)
  • --dataset_name — the Hub dataset ID
  • --image_square_size — 480 (fast iteration) or 800 (better accuracy)
  • --hub_model_id"username/model-name" for Hub persistence
  • --num_train_epochs — 30 typical for convergence
  • --train_val_split — fraction to split for validation (default 0.15), set if dataset lacks a validation split
  • --max_train_samples — truncate training set (useful for quick test runs, e.g. "785" for ~10% of a 7.8K dataset)
  • --max_eval_samples — truncate evaluation set

Quick start — Image Classification

IC_SCRIPT_ARGS = [
    "--model_name_or_path", "timm/mobilenetv3_small_100.lamb_in1k",
    "--dataset_name", "ethz/food101",
    "--output_dir", "food101_classifier",
    "--num_train_epochs", "5",
    "--per_device_train_batch_size", "32",
    "--per_device_eval_batch_size", "32",
    "--learning_rate", "5e-5",
    "--eval_strategy", "epoch",
    "--save_strategy", "epoch",
    "--save_total_limit", "2",
    "--load_best_model_at_end",
    "--metric_for_best_model", "eval_accuracy",
    "--greater_is_better", "True",
    "--no_remove_unused_columns",
    "--push_to_hub",
    "--hub_model_id", "username/food101-classifier",
    "--do_train",
    "--do_eval",
]
from huggingface_hub import HfApi, get_token
api = HfApi()
job_info = api.run_uv_job(
    script="scripts/image_classification_training.py",
    script_args=IC_SCRIPT_ARGS,
    flavor="t4-small",
    timeout=7200,
    env={"PYTHONUNBUFFERED": "1"},
    secrets={"HF_TOKEN": get_token()},
)
print(f"Job ID: {job_info.id}")

Key IC script_args

  • --model_name_or_path — any timm/ model or Transformers classification model (see model table above)
  • --dataset_name — the Hub dataset ID
  • --image_column_name — column containing PIL images (default: "image")
  • --label_column_name — column containing class labels (default: "label")
  • --hub_model_id"username/model-name" for Hub persistence
  • --num_train_epochs — 3-5 typical for classification (fewer than OD)
  • --per_device_train_batch_size — 16-64 (classification models use less memory than OD)
  • --train_val_split — fraction to split for validation (default 0.15), set if dataset lacks a validation split
  • --max_train_samples / --max_eval_samples — truncate for quick tests

Quick start — SAM/SAM2 Segmentation

SAM_SCRIPT_ARGS = [
    "--model_name_or_path", "facebook/sam2.1-hiera-small",
    "--dataset_name", "merve/MicroMat-mini",
    "--prompt_type", "bbox",
    "--prompt_column_name", "prompt",
    "--output_dir", "sam2-finetuned",
    "--num_train_epochs", "30",
    "--per_device_train_batch_size", "4",
    "--learning_rate", "1e-5",
    "--logging_steps", "1",
    "--save_strategy", "epoch",
    "--save_total_limit", "2",
    "--remove_unused_columns", "False",
    "--dataloader_pin_memory", "False",
    "--push_to_hub",
    "--hub_model_id", "username/sam2-finetuned",
    "--do_train",
    "--report_to", "trackio",
]
from huggingface_hub import HfApi, get_token
api = HfApi()
job_info = api.run_uv_job(
    script="scripts/sam_segmentation_training.py",
    script_args=SAM_SCRIPT_ARGS,
    flavor="t4-small",
    timeout=7200,
    env={"PYTHONUNBUFFERED": "1"},
    secrets={"HF_TOKEN": get_token()},
)
print(f"Job ID: {job_info.id}")

Key SAM script_args

  • --model_name_or_path — SAM or SAM2 model (see model table above); auto-detects SAM vs SAM2
  • --dataset_name — the Hub dataset ID (e.g., "merve/MicroMat-mini")
  • --prompt_type"bbox" or "point" — type of prompt in the dataset
  • --prompt_column_name — column with JSON-encoded prompts (default: "prompt")
  • --bbox_column_name — dedicated bbox column (alternative to JSON prompt column)
  • --point_column_name — dedicated point column (alternative to JSON prompt column)
  • --mask_column_name — column with ground-truth masks (default: "mask")
  • --hub_model_id"username/model-name" for Hub persistence
  • --num_train_epochs — 20-30 typical for SAM fine-tuning
  • --per_device_train_batch_size — 2-4 (SAM models use significant memory)
  • --freeze_vision_encoder / --freeze_prompt_encoder — freeze encoder weights (default: both frozen, only mask decoder trains)
  • --train_val_split — fraction to split for validation (default 0.1)

Checking job status

MCP tool (if available):

hf_jobs("ps")                                   # List all jobs
hf_jobs("logs", {"job_id": "your-job-id"})      # View logs
hf_jobs("inspect", {"job_id": "your-job-id"})   # Job details

Python API fallback:

from huggingface_hub import HfApi
api = HfApi()
api.list_jobs()                                  # List all jobs
api.get_job_logs(job_id="your-job-id")           # View logs
api.get_job(job_id="your-job-id")                # Job details

Common failure modes

OOM (CUDA out of memory)

Reduce per_device_train_batch_size (try 4, then 2), reduce IMAGE_SIZE, or upgrade hardware.

Dataset format errors

Run scripts/dataset_inspector.py first. The training script auto-detects xyxy vs xywh, converts string categories to integer IDs, and adds image_id if missing. Ensure objects.bbox contains 4-value coordinate lists in absolute pixels and objects.category contains either integer IDs or string labels.

Hub push failures (401)

Verify: (1) job secrets include token (see directive #2), (2) script sets training_args.hub_token BEFORE creating the Trainer, (3) push_to_hub=True is set, (4) correct hub_model_id, (5) token has write permissions.

Job timeout

Increase timeout (see directive #5 table), reduce epochs/dataset, or use checkpoint strategy with hub_strategy="every_save".

KeyError: 'test' (missing test split)

The object detection training script handles this gracefully — it falls back to the validation split. Ensure you're using the latest scripts/object_detection_training.py.

Single-class dataset: "iteration over a 0-d tensor"

torchmetrics.MeanAveragePrecision returns scalar (0-d) tensors for per-class metrics when there's only one class. The template scripts/object_detection_training.py handles this by calling .unsqueeze(0) on these tensors. Ensure you're using the latest template.

Poor detection performance (mAP < 0.15)

Increase epochs (30-50), ensure 500+ images, check per-class mAP for imbalanced classes, try different learning rates (1e-5 to 1e-4), increase image size.

For comprehensive troubleshooting: see references/reliability_principles.md

Reference files

External links

针对Hugging Face ZeroGPU的Gradio应用开发技能。涵盖@spaces.GPU装饰器使用、CUDA构建约束(禁用nvcc)、进程隔离及pickle限制、并发安全、资源配额与时长配置,以及硬件规格选择指南。
提及ZeroGPU或@spaces.GPU 代码中出现import spaces或@spaces.GPU 处理PicklingError等ZeroGPU特定错误 配置requirements.txt或python_version 解决flash-attn轮子构建失败
skills/huggingface_skills/huggingface-zerogpu/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill huggingface-zerogpu -g -y
SKILL.md
Frontmatter
{
    "name": "huggingface-zerogpu",
    "description": "AI demos and GPU compute with Gradio Spaces and Hugging Face Spaces ZeroGPU. Use when writing or reviewing code that uses `@spaces.GPU`, configuring `python_version` or `requirements.txt` for a ZeroGPU Space, or handling ZeroGPU-specific code constraints — pickle-based process isolation, `gr.State` semantics across the worker boundary, no `torch.compile` (use AoTI instead), CUDA wheel-only builds (no `nvcc` at build or runtime), large vs xlarge sizing, and dynamic duration callables. Make sure to use this skill whenever the user mentions ZeroGPU, `@spaces.GPU`, or the `spaces` Python package, or hits ZeroGPU-specific code errors like `PicklingError` across the worker boundary, `illegal duration`, or `flash-attn` wheel-build failures — even when the user does not explicitly ask for ZeroGPU coding guidance. Trigger on `import spaces` or `@spaces.GPU` in code."
}

Hugging Face ZeroGPU

Rules and patterns for ML demos on Hugging Face Spaces with ZeroGPU hardware. Covers @spaces.GPU, duration and quota tuning, process isolation, the CUDA availability model, concurrency safety, and CUDA build constraints.

Scope

This skill is for Gradio SDK Spaces using ZeroGPU hardware. Docker and Static Spaces cannot schedule onto ZeroGPU, and Streamlit apps now run as Docker Spaces — so this skill applies only to Gradio. For general Gradio coding (components, layouts, event listeners), see the huggingface-gradio skill in this repo. The authoritative ZeroGPU docs live at https://huggingface.co/docs/hub/spaces-zerogpu — refer to them for the current backing GPU, runtime version lists, and tier thresholds, all of which change over time.

Reference Files

Reference When to read
references/concurrency.md Always read alongside SKILL.md when writing ZeroGPU code — handlers run in parallel by default
references/how-zerogpu-works.md When reasoning about cold-starts, worker reuse, why module-scope warmup does not carry to requests, or why returning CUDA tensors hangs
references/how-quota-works.md When choosing duration values, debugging illegal duration vs quota exceeded errors, or explaining why default 60s blocks short tasks
references/cuda-and-deps.md When installing CUDA-dependent packages (e.g. flash-attn), pinning torch side-cars, or reading wheel filename tags

Hardware

ZeroGPU exposes two GPU sizes that map to a fraction of the backing card:

size Slice of backing GPU Quota cost
large (default) Half 1x
xlarge Full 2x

Default large gives half a physical GPU, so memory bandwidth and compute are significantly lower than the full card's specs. Use xlarge only when the workload genuinely needs the extra memory or compute.

Backing GPU changes without notice. ZeroGPU has already migrated across GPU generations several times; older write-ups may name A100 or H200, but those are outdated. For the current backing GPU and exact per-size VRAM, always check the ZeroGPU docs before sizing workloads.

Basic Pattern

import spaces
import torch
from transformers import pipeline

pipe = pipeline("text-generation", model="...", device="cuda")

@spaces.GPU
def generate(prompt: str) -> str:
    return pipe(prompt, max_new_tokens=100)[0]["generated_text"]

Key rules:

  1. Instantiate models at module scope and call .to("cuda") eagerly. ZeroGPU handles the actual device mapping transparently (see CUDA availability model below).
  2. Decorate GPU functions with @spaces.GPU. The decorator is a no-op outside ZeroGPU, so it is safe to keep in all environments.
  3. Set duration to match the realistic worst-case workload (default 60s). The platform pre-checks requested duration against the user's remaining quota — not against the actual run time — so a 10-second task left at the 60s default fails with quota exceeded as soon as the user's remaining quota drops below 60s. Smaller declared duration also ranks higher in the node-level queue. See "Duration and Quota" below.
  4. torch.compile is NOT supported. Use PyTorch ahead-of-time compilation (AoTI) (torch 2.8+) instead.
  5. Use size="xlarge" sparingly. It allocates the full backing GPU, but costs 2x quota and tends to queue longer.
@spaces.GPU(duration=120)
def generate_image(prompt: str):
    return pipe(prompt).images[0]

CUDA Availability Model

Real GPU access is only available inside @spaces.GPU-decorated functions. Outside those functions, the GPU is not attached to the process.

However, import spaces monkey-patches torch so that:

  • torch.cuda.is_available() returns True globally.
  • .to("cuda") / device="cuda" calls at module scope succeed without error.

This is intentional. Module-scope model.to("cuda") calls register tensors with the ZeroGPU backend, which writes them to a disk offload directory at a startup "pack" step and frees the corresponding RAM. When a @spaces.GPU call lands, a forked GPU worker process streams those weights from disk into VRAM via a pinned-memory pipeline. Warm workers (reused across requests on the same GPU slot) keep weights resident on the GPU and skip the disk → VRAM step. The user-facing rule: write device="cuda" at module scope and it works — see references/how-zerogpu-works.md for the full lifecycle.

Action Where Why
model.to("cuda") / pipe(..., device="cuda") Module scope ZeroGPU registers the tensor and manages device migration
Actual CUDA computation (inference, etc.) Inside @spaces.GPU Real GPU is only attached during the decorated call
Branching on torch.cuda.is_available() Avoid relying on it Always returns True due to the monkey-patch

Do not run inference or CUDA kernels at module scope — the real GPU is not attached, so operations either silently run on CPU or fail.

Device selection idiom still works

The standard idiom remains correct under ZeroGPU:

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = AutoModel.from_pretrained("...").to(device)
  • ZeroGPUis_available() is True (monkey-patched), so the model is registered for automatic device migration.
  • Dedicated GPU Spaces / local GPUis_available() is genuinely True.
  • CPU Spaces / local CPU — resolves to "cpu".

Do not hardcode device="cuda" — it breaks on CPU-only environments.

Eager loading is the right default

Load models at module scope, not lazily on first request. The Space process starts before any user arrives, so cold-start cost is paid once. Lazy loading (global model; if model is None: ..., @lru_cache wrappers, factory functions instantiating on first call) just pushes that cost onto the first user.

Local Development: Just Install spaces

Do not wrap import spaces in try/except and redefine spaces.GPU as a no-op fallback for local runs. Off-ZeroGPU, the spaces package is already a true no-op:

  • Heavyweight behavior (CUDA monkey-patching, client init, startup hooks) is gated on the SPACES_ZERO_GPU env var, set only on ZeroGPU.
  • @spaces.GPU returns the undecorated function unchanged off-ZeroGPU.
  • Top-level import spaces performs only lightweight imports.

The Gradio SDK base image installs spaces on every hardware tier. So even after duplicating a Space onto a dedicated GPU (T4, L4, A10G, etc.) or CPU basic, no code changes are needed — import spaces still succeeds and @spaces.GPU becomes a transparent passthrough.

Anti-pattern

try:
    import spaces
except ImportError:
    class spaces:  # type: ignore
        @staticmethod
        def GPU(func=None, **kwargs):
            return func if func else (lambda f: f)

Problems:

  1. The fallback must mimic every @spaces.GPU call shape — bare decorator, duration=..., size=..., generators, aoti_* helpers — and drifts as the spaces API grows.
  2. It hides spaces from requirements.txt, even though the Space needs it at deploy time.
  3. It solves a non-problem: the real package is already a no-op locally.

Do this instead

Add spaces to dependencies and import it unconditionally:

import spaces

@spaces.GPU
def generate(prompt: str) -> str:
    ...

Duration and Quota

Three things happen when you declare @spaces.GPU(duration=N):

  1. Tier-max check — each visitor tier has a per-call duration cap. Declaring duration larger than the cap fails immediately with ZeroGPU illegal duration, regardless of remaining quota. (Tier numbers change over time — see the ZeroGPU docs.)
  2. Quota pre-check — the platform compares requested duration against the user's remaining quota. If remaining < requested, the call fails with ZeroGPU quota exceeded — even if the actual work would have fit. The error message shows the explicit numbers, e.g. "60s requested vs. 30s left". A 10-second task left at the default 60s therefore blocks the user once their remaining quota drops below 60s.
  3. Queue priority — the queue is node-level (requests from all Spaces on the same node compete for GPU slots), and shorter declared duration ranks higher.

All three favor declaring the smallest realistic duration — including for short tasks. Explicit @spaces.GPU(duration=15) on a 10-second task avoids premature quota exceeded rejections and ranks higher in the queue.

xlarge doubles the request. requested = N * 2 when size="xlarge", both for the tier-max check and the quota pre-check. So @spaces.GPU(duration=60, size="xlarge") is internally a 120s request.

Dynamic duration for variable workloads

For workloads whose runtime depends on inputs, pass a callable that estimates per request. A static high duration locks out low-tier users (whose tier cap may be smaller than the static value) and unnecessarily reserves quota for light inputs.

def estimate_duration(prompt, steps):
    return int(steps * 3.5)

@spaces.GPU(duration=estimate_duration)
def generate(prompt, steps):
    return pipe(prompt, num_inference_steps=steps).images[0]

For the full distinction between illegal duration vs quota exceeded, runs-per-day limits, the 24h quota window, and pay-as-you-go billing, see references/how-quota-works.md.

Process Isolation and Pickle

@spaces.GPU-decorated functions run in a separate process managed by the ZeroGPU scheduler. Arguments and return values cross the process boundary via pickle serialization.

Consequences:

  • Only picklable objects can be passed in or returned. Open file handles, database connections, locks, lambdas, and closures over unpicklable state will raise PicklingError.
  • Do NOT return CUDA tensors directly. Unpickling a CUDA tensor in the main process triggers torch.cuda._lazy_init(), which ZeroGPU blocks. Convert to CPU first: return tensor.cpu() or tensor.cpu().numpy().
  • CPU tensors, numpy arrays, PIL Images, and plain Python objects work fine.
  • Large objects incur serialization overhead. Prefer lightweight returns (tensors, arrays, file paths, base64 strings) over complex object graphs.

gr.State semantics across the boundary

Because handlers run in a separate process, gr.State values are pickled on every yield — they are NOT shared by reference.

  • The generator receives a copy of the state (id() differs from the caller's).
  • In-place mutations inside the generator are invisible to other handlers until the mutated state is explicitly yielded back.
  • Yielding gr.update() for a gr.State slot skips the update — other handlers continue to see the pre-yield value.
  • Each yield that returns the state object creates a new copy via pickle.

Practical guidance:

  • Do NOT assume reference semantics for gr.State on ZeroGPU. Code that mutates state in a generator and expects another handler to see those mutations will silently use stale data.
  • Every yield including a gr.State value triggers a full pickle round-trip. For large state (model sessions, frame buffers), minimize how often you yield it — ideally once at the end. Use gr.update() for the state slot on intermediate yields.
  • CUDA tensors inside state must be moved to CPU before yielding — same torch.cuda._lazy_init() issue as above.

Concurrency

Handlers run concurrently by default on ZeroGPU. This is not opt-in. Code that worked in single-user testing can silently corrupt or leak data in production.

Three rules. Full treatment with examples in references/concurrency.md.

  1. No mutable global state. Concurrent requests overwrite each other.
  2. No fixed file paths for outputs. Concurrent requests clobber the same file. Use tempfile for unique paths.
  3. Read-only globals are safe. Model objects, tokenizers, configs loaded once at startup and only read during requests are safe and encouraged.

Call Granularity

Each entry into a @spaces.GPU function carries non-trivial cost — pickle round-trip across the process boundary, worker warm-up, CUDA re-attach, and a fresh pass through the node-level queue. Calling a decorated function from inside a hot loop multiplies these costs and adds a new failure mode: a later iteration may fail to acquire a GPU slot, stalling the whole job mid-way.

Decorate the outer function that owns the loop, not the per-iteration worker:

# Avoid — N GPU entries for N frames
def process_video(frames):
    return [process_frame(f) for f in frames]

@spaces.GPU(duration=...)
def process_frame(frame):
    ...

# Prefer — one GPU entry for the whole video
@spaces.GPU(duration=...)
def process_video(frames):
    return [process_frame(f) for f in frames]

def process_frame(frame):
    ...

If the loop mixes heavy CPU work with GPU work, wrapping the whole loop charges that CPU time against the user's quota. When that cost is material, batching the GPU work so CPU pre/post-processing stays outside the decorator is a situational optimization — not the default.

CUDA Build Constraints

HF Spaces builds Docker images in a CPU-only environment. On ZeroGPU, the build phase has no nvcc because the base image is python:3.13 (dedicated-GPU Spaces use nvidia/cuda:*-devel-* and have nvcc at build time). A CUDA-dependent package whose only distribution is sdist — e.g. bare flash-attn — therefore cannot be installed via requirements.txt on ZeroGPU. Only pre-built wheels work.

ZeroGPU runtime does have nvcc available, mounted from a CUDA devel image at /cuda-image since 2025-07 (originally added for AoTI support). This is what makes torch.export / AoTI workflows possible inside @spaces.GPU calls.

Bottom line: install every CUDA-dependent package from a pre-built wheel. If no wheel is available on PyPI, build one externally (e.g. host on HF Hub) and pin the URL. For flash-attn, the upstream releases page ships a fairly complete wheel matrix covering most Python × CUDA × torch combinations.

For wheel-tag reading (cxx11 ABI, cu12torch2.X, cp3XX), torch-family side-car drift, and the kernels-community fallback, see references/cuda-and-deps.md.

Example Caching

gr.Examples behavior is environment-dependent. On ZeroGPU specifically:

  • cache_examples defaults to True (Spaces sets GRADIO_CACHE_EXAMPLES=true).
  • cache_mode defaults to "lazy" (Spaces sets GRADIO_CACHE_MODE=lazy only on ZeroGPU).

ZeroGPU defaults to lazy because eager caching pre-runs every example at app startup, but ZeroGPU has no GPU attached at startup — only during request handling. Eager caching of GPU-bound examples would fail there.

When cache_examples=True, the run_on_click / run_examples_on_click parameter is silently ignored. If your app relies on click-populates-only behavior, set cache_examples=False explicitly to preserve it.

To reproduce ZeroGPU example-caching behavior locally:

GRADIO_CACHE_EXAMPLES=true GRADIO_CACHE_MODE=lazy python app.py

Dependency Management

python_version pin in README frontmatter

Pinning python_version is effectively required for ZeroGPU. The runtime default is currently Python 3.10, so a local environment using 3.11+ will fail to install on the Space without an explicit pin. Pin to a ZeroGPU-supported version (3.12 is a reasonable default); the authoritative supported list lives in the ZeroGPU docs — do not hardcode the full list, refer to the docs.

# README.md frontmatter
python_version: "3.12"

Both "3.12" and "3.12.12" forms are accepted.

Do not pin spaces in requirements.txt

The Space platform pins its own spaces version. A conflicting pin in requirements.txt causes pip resolution to fail at build time.

Rule: Do not include spaces in requirements.txt.

How to achieve this depends on your tooling:

  • Hand-written requirements.txt: simply omit spaces.
  • uv (pyproject.toml-managed): declare spaces in pyproject.toml so uv co-resolves transitive constraints (notably psutil, which spaces pins), then exclude it from the export:
    uv export --no-hashes --no-dev --no-emit-package spaces -o requirements.txt
    
    Without spaces in pyproject.toml, uv cannot see its transitive constraints and may resolve incompatible versions at build time.
  • pip-tools (pip-compile) / Poetry: use the equivalent exclude mechanism.

Pin torch to match wheel tags

If you install a CUDA-dependent wheel via direct URL, the wheel filename encodes the torch major.minor it was built against (e.g. cu12torch2.8). Pin torch==X.Y.Z in requirements.txt to match — otherwise pip may resolve torch to a different version and the Space fails on first import. Details and the kernels-community alternative are in references/cuda-and-deps.md.

指导训练或微调SentenceTransformer、CrossEncoder及SparseEncoder模型的路由技能。涵盖模型选型、损失函数、评估器、LoRA等关键技术,并指引加载参考文档与生产级脚本模板以生成训练代码。
训练句子嵌入模型 微调CrossEncoder重排器 构建稀疏向量检索模型 sentence-transformers训练任务
skills/huggingface_skills/train-sentence-transformers/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill train-sentence-transformers -g -y
SKILL.md
Frontmatter
{
    "name": "train-sentence-transformers",
    "description": "Train or fine-tune sentence-transformers models across `SentenceTransformer` (bi-encoder; dense or static embedding model; for retrieval, similarity, clustering, classification, paraphrase mining, dedup, multimodal), `CrossEncoder` (reranker; pair scoring for two-stage retrieval \/ pair classification), and `SparseEncoder` (SPLADE, sparse embedding model; for learned-sparse retrieval). Covers loss selection, hard-negative mining, evaluators, distillation, LoRA, Matryoshka, and Hugging Face Hub publishing. Use for any sentence-transformers training task."
}

Train a sentence-transformers Model

This SKILL.md is a router, not a manual. It tells you which references and example scripts to load for your task. The actual content — recommended losses, evaluators, training-script structure, model selection, training-arg knobs, troubleshooting — lives in references/ and scripts/.

Do not synthesize a training script from this file alone. Open the per-type production template (scripts/train_<type>_example.py) and copy it as your starting point. The templates contain load-bearing scaffolding (autocast helper, model-card class, logger silencing list, force=True, seed, TF32, version-compatible imports, named-evaluator metric handling) that prior agent runs have repeatedly missed when rolling their own from a synthesized snippet.

1. Identify the model type

Tag Class What it does When to pick
[SentenceTransformer] SentenceTransformer (bi-encoder) Maps each input to a fixed-dim dense vector Retrieval, similarity, clustering, classification, paraphrase mining, dedup
[CrossEncoder] CrossEncoder (reranker) Scores (query, passage) pairs jointly Two-stage retrieval (rerank top-100 from bi-encoder), pair classification
[SparseEncoder] SparseEncoder (SPLADE) Sparse vectors over the vocabulary Learned-sparse retrieval, inverted-index backends (Elasticsearch / OpenSearch / Lucene)

Tiebreakers when the request is ambiguous: "embedding model" / "vector search" / "similarity" → [SentenceTransformer]. "rerank" / "ranker" / "two-stage" → [CrossEncoder]. "SPLADE" / "sparse" / "inverted index" → [SparseEncoder]. If still unclear, ask.

2. Required reading

Read these in full before writing any code. Do not triage by perceived relevance.

Per-type — always required

[SentenceTransformer]

  • references/losses_sentence_transformer.md — loss-to-data-shape mapping; BatchSamplers.NO_DUPLICATES requirement for MNRL-family; Cached*gradient_checkpointing incompatibility.
  • references/evaluators_sentence_transformer.md — evaluator-to-task mapping; metric_for_best_model key construction (named vs unnamed); per-evaluator primary_metric values.
  • references/model_architectures.md — encoder vs decoder vs static vs Router pipelines; pooling rules (mean / cls / lasttoken); auto-mean-pooling behavior for fresh-start MLM bases.
  • scripts/train_sentence_transformer_example.py — production template; copy this as your starting point.

[CrossEncoder]

  • references/losses_cross_encoder.md — pointwise / pairwise / listwise / distillation; pos_weight derivation; activation_fn=Identity() mandatory for non-BCE losses (silent eval-rank collapse otherwise).
  • references/evaluators_cross_encoder.mdCrossEncoderRerankingEvaluator recipe; named-evaluator key format eval_{name}_{primary_metric}.
  • scripts/train_cross_encoder_example.py — production template; copy this as your starting point.

[SparseEncoder]

  • references/losses_sparse_encoder.mdSpladeLoss wrapper requirement; FLOPS regularizer weights; smoke-test active-dim ramp behavior.
  • references/evaluators_sparse_encoder.mdSparseNanoBEIREvaluator (English-only) and the in-domain alternative; eval_{name}_{primary_metric} key format.
  • scripts/train_sparse_encoder_example.py — production template; copy this as your starting point.

Cross-cutting — always required (regardless of task)

  • references/training_args.mdTrainingArguments knobs, precision rules (load fp32 + autocast bf16/fp16; never torch_dtype=bfloat16), warmup_steps (float) vs deprecated warmup_ratio, save_steps must be a multiple of eval_steps for load_best_model_at_end, schedulers, HPO, tracker, resume, hub-push variants.
  • references/dataset_formats.md — column-matching rules (label name auto-detection; column-order-not-name); reshaping recipes; hard-negative mining options.
  • references/base_model_selection.md — discovery commands; per-type model namespaces; ModernBERT-family max_seq_length=8192 trap; datasets >= 4 script-loader rejection; non-English starting-point shortcuts.
  • references/troubleshooting.md — symptom-indexed failure recipes. Skim the section headings on every run, even a healthy one; the "Metrics don't improve" and "Hub push fails" entries cover bugs that bite frequently and are cheaper to recognize before they fire than to debug after.

Cross-cutting — load when applicable

  • references/hardware_guide.md — VRAM sizing, multi-GPU, FSDP / DeepSpeed, HF Jobs flavors. Required for >24GB models, multi-GPU, or HF Jobs runs.
  • references/hf_jobs_execution.md — required when running on HF Jobs.
  • references/prompts_and_instructions.md — required when using prompt-tuned bases (E5, BGE, GTE, Qwen3-Embedding, Instructor, Nomic, etc.) or adding query: / passage: style prefixes.

Variant scripts (open when the task matches)

  • [SentenceTransformer] scripts/train_sentence_transformer_<matryoshka|multi_dataset|with_lora|distillation|make_multilingual|static_embedding>_example.py.
  • [CrossEncoder] scripts/train_cross_encoder_<distillation|listwise>_example.py.
  • [SparseEncoder] scripts/train_sparse_encoder_distillation_example.py.
  • Hard-negative mining CLI — scripts/mine_hard_negatives.py.

3. Defaults

Override only if the user specifies otherwise:

  • Local execution. Pitch HF Jobs only if local hardware can't fit the job.
  • Single run. After it completes, propose experimentation if the user would benefit (weak/marginal verdict, "see how high you can push it" framing, etc.). Iteration rules in references/training_args.md (Experimentation section).
  • Public Hub push at end-of-run, wrapped in try-except. On HF Jobs (ephemeral env) ALSO enable in-trainer push (push_to_hub=True + hub_strategy="every_save"); details in references/hf_jobs_execution.md.

4. Constraints the produced script must satisfy

These are non-negotiable contracts. Implementation lives in the production templates and references — do not reinvent.

  • Capture the pre-training evaluator score as baseline_eval before trainer.train().
  • Emit a single end-of-run line: VERDICT: WIN|MARGINAL|REGRESSION | score=... | baseline=... | delta=.... A monitor scrapes for this.
  • Silence httpx, httpcore, huggingface_hub, urllib3, filelock, fsspec to WARNING (otherwise HF download URLs flood the agent's context).
  • Tee logs to logs/{RUN_NAME}.log.
  • End with model.push_to_hub(...) wrapped in try/except.
  • Smoke-test before any long run (max_steps=1 + tiny dataset slice). The production templates show one common pattern (SMOKE_TEST env var).
  • [CrossEncoder] Include EarlyStoppingCallback(patience>=3) — CE rerankers often peak mid-training and regress.
  • [SparseEncoder] Log query_active_dims / corpus_active_dims on the verdict line; high nDCG with collapsed sparsity is not a win. The keys come back name-prefixed (e.g. ..._query_active_dims); use suffix matching to pluck them — see the SPARSE production template for the exact pattern.

5. Workflow

  1. Identify the model type (§1). Ask if ambiguous.
  2. Load the §2 required-reading files for that type.
  3. Open scripts/train_<type>_example.py and copy it as your starting point.
  4. Replace MODEL_NAME, DATASET_NAME, RUN_NAME, the loss, and the evaluator with the user's task. Cross-check loss/data-shape match against references/losses_<type>.md; cross-check the metric_for_best_model key against references/evaluators_<type>.md (named evaluators format the key as eval_{name}_{primary_metric}).
  5. Smoke-test (max_steps=1).
  6. Run.
  7. After the run, append to logs/experiments.md and propose iteration if the verdict is weak/marginal.

Prerequisites

pip install "sentence-transformers[train]>=5.0"        # add [train,image] / [audio] / [video] for [SentenceTransformer] multimodal
pip install trackio                                    # optional tracker; or wandb / tensorboard / mlflow
hf auth login                                          # or set HF_TOKEN with write scope (for Hub push)

GPU strongly recommended. CPU works only for demos and [SentenceTransformer] StaticEmbedding.

用于定义、审计和应用品牌视觉识别系统,涵盖排版、配色、间距及设计令牌。支持网页、文档及演示文稿(PPT/Slides)的视觉规范制定与前端美学应用,确保品牌一致性并提升转化。
用户需要建立或审核品牌视觉指南 涉及字体选择、调色板或设计令牌配置 制作符合品牌规范的PPT或Google Slides主题 讨论前端美学、CSS变量或无障碍对比度
skills/kostja94_marketing-skills/brand-visual/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill brand-visual-generator -g -y
SKILL.md
Frontmatter
{
    "name": "brand-visual-generator",
    "license": "MIT",
    "metadata": {
        "version": "1.4.0"
    },
    "description": "When the user wants to define, audit, or apply visual identity (typography, colors, spacing, design tokens, frontend aesthetics). Also use when the user mentions \"brand style guide,\" \"visual identity,\" \"design system,\" \"typography,\" \"color palette,\" \"brand guidelines,\" \"AI brand aesthetics,\" \"brand colors,\" \"font choices,\" \"spacing system,\" \"design tokens,\" \"motion,\" \"distinctive design,\" \"frontend aesthetics,\" \"PowerPoint theme,\" \"Google Slides brand,\" or \"slide master colors.\" For brand story, positioning, and voice, use branding."
}

Components: Brand Visual Identity

Guides visual identity for consistent brand presentation. Companies with consistent branding see up to 23-33% revenue lift; 94% of consumers say consistency influences buying decisions.

Keywords: visual identity, design tokens, color palette, typography, CSS variables, slide deck, brand guidelines, frontend aesthetics, accessibility

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Section 12 (Visual Identity) for colors, typography, spacing. See branding for brand strategy and visual identity strategy layer.

Identify:

  1. Scope: New brand, audit, or component design
  2. Touchpoints: Web, print, social, product UI, slides (PowerPoint, Google Slides, Keynote), documents (Word, Google Docs, PDF reports)
  3. Existing assets: Logo, style guide, design files

Best Practices

Typography

  • Two-font system: One display font for headlines, one body font for text. Contrast + harmony: different enough for distinct roles, similar enough to feel cohesive.
  • Body font: Prioritize legibility—large x-height, open counters. For neutral/safe: Source Sans 3, Lora, IBM Plex Sans. For distinctiveness: avoid overused AI fonts (Inter, Roboto, Arial, system fonts); prefer characterful choices that elevate the brand. See Frontend Aesthetics.
  • Headline font: Communicates brand voice; must be readable in under one second. Carries personality while body handles infrastructure.
  • Type scale: Use ratios 1.25–1.5 (Major Third or Perfect Fifth) for hierarchy. Limit to 3–4 styles per block.
  • Pairing rule: Decorative fonts only with neutral typefaces. Assign distinct roles; avoid mixing more than two families.
  • Sizes: Hero, section, subheading, body, caption; responsive scaling. Line length max 120 chars; generous line-height.

Color Palette

  • Structure: Primary, secondary, CTA, background, text. Use flexible systems (core hero color + complementary shades), not single rigid colors.
  • Industry mapping: Finance → blue, gray, navy (stability); Luxury → rose gold, burgundy, black (exclusivity); Tech → teal, neon accents, charcoal (innovation); Wellness → lavender, peach, mint (calm); Sustainability → sage green, earthy tones.
  • Reproduction: HEX, RGB, CMYK for print and digital. For programmatic slides (e.g. python-pptx), map brand HEX to RGB tuples (R, G, B) for fills and text; keep a single source of truth table (HEX + RGB) in the deliverable.
  • Accessibility: Contrast >=4.5:1 for normal text, >=3:1 for large text (18px+ or 14px+ bold). Don't rely on color alone for information.

Spacing

  • Margins: Horizontal (e.g. 120px), vertical section padding
  • Grid: Consistent spacing scale (8px base common)
  • Logo clear space: Minimum space around logo; document in brand guide

Logo Usage

  • Variants: Primary, secondary, monogram; light/dark backgrounds
  • Minimum size: Prevent illegibility
  • Don't: Stretch, recolor, add effects without approval

Anti-Patterns (Avoid)

  • Aesthetics over functionality: Don't sacrifice usability for visual appeal.
  • Unclear CTAs: Limit primary CTA to one per section; visually differentiate primary vs secondary.
  • Inconsistent elements: Pixelated icons, mismatched spacing/typography/color reduce trust.
  • Poor text hierarchy: Disordered, cluttered text confuses users.
  • Overusing effects: Drop shadows, pop-ups, crowded UI distract from content.
  • Chasing trends blindly: Adopt trends only when they fit project needs.
  • Ignoring performance: Heavy assets and complex layouts hurt load times.
  • Generic AI aesthetics: Inter, Roboto, Arial, Space Grotesk, and system fonts contribute to cookie-cutter design; avoid clichéd schemes (e.g., purple gradients on white). Prefer distinctive choices when brand differentiation matters.
  • Emoji as icons: Use SVG icons (Heroicons, Lucide, Simple Icons)—never emojis (🎨 🚀 ⚙️) as UI icons; emojis look unprofessional and inconsistent.
  • Unstable hover states: Use color/opacity transitions on hover; avoid scale transforms that shift layout or cause content jump.

Accessibility Checklist

  • Contrast: Normal text >=4.5:1; large text >=3:1; interactive elements >=3:1.
  • Focus: Visible focus indicator (>=2px solid, 3:1 contrast); logical Tab order; no keyboard traps.
  • Color: Never use color alone to convey information; add text or icons for states (error, success).
  • Keyboard: All interactive elements reachable via Tab, Enter, Spacebar.
  • Reduced motion: Respect prefers-reduced-motion for animations.

Frontend Aesthetics

Guides distinctive, production-grade frontend implementation. Components (hero, CTA, footer, etc.) and pages (landing, home, features) should reference these principles for visual differentiation. Intentionality over intensity: bold maximalism and refined minimalism both work when executed with precision.

Typography

  • Avoid generic AI fonts: Inter, Roboto, Arial, system fonts, Space Grotesk. These create cookie-cutter aesthetics.
  • Distinctive pairing: One display font (headlines, personality) + one refined body font (readability). Choose characterful, unexpected fonts that elevate the interface.
  • Consistency: Use CSS variables; limit to 3–4 type styles per block.

Motion

  • High-impact moments: One well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions.
  • Prioritize: CSS-only for HTML; Motion library for React when available. Scroll-triggering and hover states that surprise.
  • Accessibility: Always respect prefers-reduced-motion; provide reduced or no-motion alternatives.

Spatial Composition

  • Unexpected layouts: Asymmetry, overlap, diagonal flow, grid-breaking elements.
  • Balance: Generous negative space OR controlled density—choose intentionally.
  • Hierarchy: Clear visual flow; avoid predictable, evenly-distributed layouts.

Backgrounds & Visual Details

  • Atmosphere over flat: Create depth rather than defaulting to solid colors.
  • Techniques: Gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, grain overlays.
  • Context: Match effects to overall aesthetic; don't distract from content.

Never

  • Overused font families (Inter, Roboto, Arial, system fonts)
  • Clichéd color schemes (e.g., purple gradients on white)
  • Predictable layouts and cookie-cutter component patterns
  • Design that lacks context-specific character
  • Emojis as UI icons (use SVG: Heroicons, Lucide, Simple Icons)

AI Brand Aesthetics (Optional)

For AI/SaaS products, consider these visual trends and brand archetypes; adopt, ignore, or counter consciously to avoid sameness.

Visual Trends

Trend Signal
Off-white / beige Trust, restraint, premium without gloss
Organic gradients Distinctiveness; add grain, texture
Digital impressionism Mood over literal; suggestive, not descriptive
Lomo / imperfect Exploratory, human creativity
Contemporary realism Precision, reliability, mastery
Sketch / scribble Human thought, exploration over certainty
Non-brand academia Authority; work speaks for itself
Technical illustrations Rigor, engineering depth
Quirky cuteness Approachability; counter doomsday narratives
Morphing objects Emergence, systems that learn
Futuristic surrealism Gateway to new worlds
Outer space Exploration, unknown
ASCII / pixels Retro, playful, technical
Generative art Algorithmic, living system

Brand Archetypes

Archetype Tone Visual
Likeable Leaders Seriousness, stability, trust Muted greys, warm beiges; impressionistic
Gentle Humanists People before tech Hand-drawn, everyday moments, nature
Nerdy Idealists Engineering culture Unpolished, quirky, non-branded
Bold Builders Groundbreaking, transformative Dark palettes, space references
Utopian Dreamers What becomes possible Retrofuturistic, surreal worlds

Product Marketing Context (Section 12)

When creating or updating .cursor/project-context.md, add:

## 12. Visual Identity (Optional)

**Colors**: Primary #XXX, secondary #XXX; backgrounds #XXX
**Typography**: Headings (font, weight, color); Body (font, weight, color)
**Sizes**: Hero Xpt, section Xpt, body Xpt
**Spacing**: Margins Xpx; section padding Xpx
**Layout**: Viewport, top bar, footer heights if fixed

Slides & Documents (Non-Web)

When the user asks for deck or document branding—not only websites:

  • Slide master: Background color from token; title font = display/heading token; body = body token; default title/body sizes aligned to type scale from branding / Section 12.
  • Theme colors: Map primary, secondary, background, text, and one accent to the presentation app's theme (PowerPoint Design → Variants, Google Slides Theme, Keynote Document settings) so shapes and charts inherit palette.
  • Charts & shapes: Cycle accents in a fixed order (e.g. primary → secondary → tertiary) instead of random colors; keeps decks on-brand.
  • Documents: Same fonts and heading hierarchy as web where possible; specify paragraph style names (Title, Heading 1–3, Normal) with point sizes and colors.

Strategy and narrative layers remain in branding; this section is visual execution for office/slide tools.

Brand Guidelines Structure (Single Source of Truth)

Ensure consistency across touchpoints. Include:

  • Logo: Usage rules, clear space, minimum sizes, variants (light/dark)
  • Colors: Primary, secondary, CTA, background, text (HEX, RGB, CMYK)
  • Typography: Font families, hierarchy, sizing, spacing
  • Imagery: Photography tone, subject matter, visual mood
  • Iconography: Style, stroke weight, usage rules

Output Format

  • Typography spec (fonts, weights, sizes, colors)
  • Color palette (HEX, usage rules, industry mapping)
  • Spacing scale
  • Logo clear space and variants
  • Frontend aesthetics (optional): Motion, spatial composition, backgrounds—for distinctive implementation
  • Anti-patterns and accessibility checklist
  • AI products (optional): Visual trend and archetype alignment
  • Context template for project-context Section 12
  • Slides/documents (when requested): theme mapping + master typography + chart accent order

Related Skills

  • branding: Brand strategy; visual identity strategy; this skill implements typography, colors, spacing
  • logo-generator: Logo placement, clear space; brand visual defines logo rules
  • favicon-generator: Favicon aligns with brand mark and colors
  • media-kit-page-generator: Media kit hosts brand guidelines document; links to logo, favicon
  • hero-generator: Hero uses brand typography, colors, spacing
  • 404-page-generator: Error pages maintain brand consistency
专注于品牌战略、故事叙述、语气及视觉身份策略的辅助技能。涵盖品牌目的、价值观、定位、原型及叙事弧线,用于定义新品牌或审计一致性。注意:具体视觉实现需调用其他生成工具。
用户希望定义或审计品牌战略 提及品牌故事、品牌声音、品牌标识或品牌指南
skills/kostja94_marketing-skills/branding/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill branding -g -y
SKILL.md
Frontmatter
{
    "name": "branding",
    "license": "MIT",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to define, audit, or apply brand strategy—purpose, values, positioning, storytelling, voice, narrative (not only visuals). Also use when the user mentions \"brand strategy,\" \"brand story,\" \"brand storytelling,\" \"brand voice,\" \"brand identity,\" \"brand guidelines,\" \"brand purpose,\" \"brand values,\" \"origin story,\" \"brand narrative,\" \"brand personality,\" \"brand archetype,\" \"slide deck branding,\" \"PPT brand colors,\" or \"document style guide.\" For typography, colors, design tokens, and frontend visuals, use brand-visual-generator."
}

Strategies: Branding

Guides brand strategy: purpose, values, positioning, storytelling, voice, and visual identity. Companies with consistent branding see 23–33% revenue lift; people remember stories ~22× more than facts alone. Use this skill when defining a new brand, auditing consistency, or aligning messaging across touchpoints.

Keywords: brand strategy, brand guidelines, visual identity, storytelling, brand voice, design tokens, slide deck, corporate identity, style guide, positioning

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Brand strategy: Purpose, values, positioning, differentiation, target audience
  • Brand storytelling: Origin story, hero's journey, narrative arc, brand archetypes
  • Brand voice & tone: Voice, tone, avoid terms, preferred wording
  • Brand visual identity: Colors, typography, logo rules—strategy layer; implementation in brand-visual-generator, logo-generator

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read Sections 2 (Positioning), 3 (Value Proposition), 8 (Brand & Voice), 12 (Visual Identity).

Identify:

  1. Scope: New brand, audit, or alignment
  2. Touchpoints: Website, social, product UI, directories, content
  3. Existing assets: Brand guide, logo, style guide

Brand Strategy Pillars

Pillar Purpose
Brand purpose Why the brand exists beyond profit; one sentence
Brand values 4–5 core values; what you stand for; differentiators
Target audience Who you serve; ICP; jobs to be done
Positioning For [customer] who [need], our [product] is a [category] that [benefit]. Unlike [competitor], we [differentiator] because [reasons]
Differentiation Why you, not alternatives; concrete, not vague

Brand Storytelling

Origin Story

  • What: Journey, founding, milestones, personal experiences that shaped the company
  • Why: Emotional connection; 58% of customers buy based on company values
  • Elements: Who founded it; why created; challenges overcome; vision; how it evolved

Hero's Journey (Customer as Hero)

Element Content
Hero Your customer; their needs, wants, context
Problem What they face; how they solve it now
Inciting insight Reframing that creates urgency
Brand's role Guide, tool, or partner—not hero; how you enable resolution
Transformation What better future looks like; proof (case studies, testimonials)

Brand Narrative Arc

  • Protagonist: Customer facing a challenge
  • Stakes: What happens if nothing changes
  • Proof: Data, case studies, testimonials
  • CTA: Place call to action in the story; provoke action

Brand Archetypes (12 Types)

Archetype Tone Example
Creator Innovative, imaginative Adobe
Caregiver Nurturing, supportive Johnson & Johnson
Ruler Authoritative, premium Mercedes-Benz
Innocent Simple, optimistic Coca-Cola
Sage Wise, knowledgeable Google
Explorer Adventurous, independent Patagonia
Outlaw Rebellious, disruptive Harley-Davidson
Magician Transformative, visionary Disney
Hero Courageous, determined Nike
Lover Passionate, sensual Chanel
Jester Playful, fun M&M's
Everyman Relatable, down-to-earth IKEA

Align archetype to customer personality; strengthens storytelling.

Brand Voice & Tone

Element Definition Example
Voice Brand personality; consistent across touchpoints Professional / Friendly / Technical / Bold
Tone How you say it; adapts to context Confident but not arrogant; helpful; concise
Avoid Buzzwords, terms to never use "streamline," "revolutionize," "synergy"
Preferred Terms to use consistently "audit" not "analysis"; "customer" not "user"

Product marketing context Section 8: Document voice, tone, avoid, preferred terms. See project-context template.

Brand Visual Identity (Strategy Layer)

Element Strategy Implementation
Colors Primary, secondary, CTA; industry mapping brand-visual-generator
Typography Display + body; hierarchy; pairing brand-visual-generator
Logo Variants, clear space, minimum size logo-generator
Imagery Tone, subject matter, visual mood Brand guidelines
Consistency Same identity across web, social, product All touchpoints

For full visual specs (fonts, HEX, spacing), see brand-visual-generator. For logo placement and implementation, see logo-generator.

Brand Guidelines Structure

Single source of truth. Include:

  • Purpose & values: Why you exist; what you stand for
  • Positioning: One-liner; differentiation
  • Story: Origin story; hero's journey summary
  • Voice & tone: Voice, tone, avoid, preferred
  • Logo: Usage rules, clear space, variants (light/dark)
  • Colors: Primary, secondary, CTA (HEX, RGB, CMYK)
  • Typography: Font families, hierarchy, sizing
  • Imagery: Photography tone; iconography style

Visual Specification Delivery (Design Tokens)

When the user needs actionable specs (not only strategy)—for web, slides, or print—produce a token table the team can paste into a design system, media kit, or slide master. Align with brand-visual-generator for full web/CSS detail.

Token category What to document Example fields
Colors Named roles + values for light/dark if applicable Primary #______, text primary #______, background #______, accent 1–3, CTA, border, error/success
Typography Family, weight, size scale, line-height Display / H1–H3 / body / caption; web-safe or system fallbacks
Spacing Base unit and scale e.g. 8px base; section gaps; logo clear space in em or px
Non-text accents Charts, shapes, dividers Rotate accent colors; avoid arbitrary one-off hues outside palette

Applying tokens across surfaces

  • Web / product: CSS variables or design tokens; see brand-visual-generator.
  • Slides (PowerPoint, Google Slides, Keynote): Set slide master background + default title/body fonts from token table; map theme colors to primary/secondary/background/text; reuse one accent per deck section where possible.
  • Documents (Word, Google Docs, PDF): Define paragraph styles (Title, Heading 1–3, Normal, Caption) with fonts and colors from tokens; set default page background if brand uses off-white.

If the user pastes an existing brand PDF or bullet list, extract and normalize into this token table before suggesting implementation.

Output Format

  • Brand strategy (purpose, values, positioning, differentiation)
  • Story (origin story, hero's journey, narrative arc)
  • Voice & tone (voice, tone, avoid, preferred)
  • Archetype (if applicable)
  • Visual (high-level; defer to brand-visual-generator for web specs)
  • Design token table (colors, type scale, spacing) when deliverable must be implementation-ready
  • Slide/document notes (master fonts, theme colors) when touchpoints include decks or docs
  • Context template for project-context Sections 8, 12

Related Skills

  • about-page-generator: About page implements brand story, mission, values
  • homepage-generator: Homepage implements value prop, differentiation, brand voice
  • logo-generator: Logo placement, implementation; branding defines logo rules
  • brand-visual-generator: Typography, colors, spacing; branding defines visual strategy
  • media-kit-page-generator: Media kit hosts brand guidelines
  • directory-submission: Directory copy uses brand voice; Section 8 Brand & Voice
  • title-tag, meta-description: Metadata uses brand voice
  • integrated-marketing: Brand awareness across PESO
  • domain-selection: Domain choice (Brand/PMD/EMD, TLD); do before or with branding when choosing domain
  • domain-architecture: Domain structure implements brand architecture (Branded House vs House of Brands)
  • rebranding-strategy: Rebrand execution; domain change, 301, announcement
指导AI/SaaS产品从零启动,解决冷启动难题。涵盖用户画像评估、Product Hunt/AppSumo等渠道选择,以及通过社交媒体和自由职业平台挖掘早期种子用户的低成本策略,助力实现0到1增长。
cold start first users launch a new product zero traction seed users finding early users product launch strategy 0 to 1 growth indie hacker bootstrapping
skills/kostja94_marketing-skills/cold-start/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill cold-start-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "cold-start-strategy",
    "metadata": {
        "version": "1.3.0"
    },
    "description": "When the user wants to plan cold start, get first users, or launch a new product with zero traction. Also use when the user mentions \"cold start,\" \"cold start problem,\" \"first users,\" \"seed users,\" \"finding users,\" \"finding early users,\" \"Fiverr Upwork,\" \"comment outreach,\" \"Twitter search users,\" \"product launch strategy,\" \"0 to 1 growth,\" \"early-stage acquisition,\" \"launch channels,\" \"get first customers,\" \"Product Hunt launch,\" \"AppSumo,\" \"LTD,\" \"indie hacker,\" \"bootstrapping,\" or \"solo founder.\" For directory listing copy and submissions, use directory-submission. For Product Hunt day-of execution, use product-hunt-launch. For GTM motion design, use gtm-strategy."
}

Strategies: Cold Start

Guides cold start strategy for AI/SaaS products: getting first users and traction when you have zero. The cold start problem is overcoming the chicken-and-egg barrier; most startups fail due to poor distribution, not product quality. For indie hacker context (first 100 users, Build in Public, Pieter Levels tactics), see indie-hacker-strategy.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product, audience, and positioning.

Identify:

  1. Product type: AI tool, SaaS, app, B2B, B2C
  2. Target audience: Where they spend time
  3. Budget: Zero, minimal ($500–1K), or moderate
  4. Timeline: Pre-launch, launch week, post-launch

Cold Start Channels

Channel Audience Use Notes
Product Hunt Indie makers, early adopters Launch-day buzz; community upvotes ~3% conversion; traffic spike; see product-hunt-launch
AppSumo / LTD Deal seekers, early adopters Lifetime deal for fast revenue, validation Quick cash; price-sensitive users; see discount-marketing-strategy for LTD structure, trade-offs
Reddit Subreddit-specific r/AlphaAndBetaUsers, r/roastmystartup, r/devops, r/SaaS 80/20 rule; 5+ months for traction; lead with story
Indie Hackers Indie makers, founders Sustained engagement; authentic journey ~23% conversion; 4–6 months; see indie-hacker-strategy for tactics
Hacker News Tech, startups Show HN launch Luck + timing; front page = traffic spike
Directory submission AI tools, product launch Taaft, G2, niche directories Validate PMF; seed users; see directory-submission
Founder-led outbound B2B, high ACV Cold email, LinkedIn; 10–15 personalized outreaches/day Pre-$5K MRR; only reliable path when ACV >$500/mo
Community engagement Target users Forums, LinkedIn groups, Discord 45–90 days; contribute value first

Finding Users: Demand-Signal Outreach

Low-cost ways to find and reach users who are already expressing need. Use when Product Hunt, directories, or forums are not enough.

Social Platform Search

Search Twitter/X, LinkedIn, Reddit, and niche communities for demand signals:

Signal What to seek
Keywords Industry terms, category keywords, "looking for [X] tool," "best alternative to [Y]"
Discussion Industry threads, complaints about competitors, "anyone used…" or "recommend…" posts
Platform Choose where your audience spends time (Twitter/X, LinkedIn, Reddit, Discord, vertical forums)

Freelance Platforms (Fiverr, Upwork)

Step Practice
Search Service requests related to your product (e.g. "need logo design," "looking for video editor")
Identify Buyers in job descriptions or comments who have related needs
Reach Offer help or tool recommendation; introduce product politely

Users often have clear need and budget; high intent.

Comment Outreach (Twitter/X, etc.)

Practice Guideline
Search Brand, category, "looking for AI tool," "best alternative to…"
Reply Comment on posts where users express need; avoid spam
Tone Sincere; honest that it's your product; invite trial and feedback
Avoid Hard sell; copy-paste; repeated posting

Example outreach: "Hi, I'm building something similar. If you'd like to try it: [link]. Happy to hear any feedback—we're iterating actively."

Feedback collection: DM, email, survey, user interview, in-app feedback—choose by channel and context.

Multi-Channel Launch (6–7 Week)

Coordinated launch across channels yields 5–6× more users than single-channel:

Week Focus
1–2 Audience building (LinkedIn 3×/week)
3–4 Beta; community engagement
5 Pre-launch countdown
6 Product Hunt + Reddit/Indie Hackers
7 Post-launch follow-up

Build in public before launch—share progress, validate ideas, create invested audience. For indie hacker first 100 users, Build in Public content framework (40/30/20/10), Pieter Levels tactics → indie-hacker-strategy.

Pre-Launch

  • Validate demand: 10–15 target user conversations; 20–30 before launch
  • Waitlist: 8–12 weeks before launch; target 200–1,000 signups
  • Landing page: Ready; screenshots, description, media kit
  • Avoid: Perfectionism; large-scale paid ads before PMF—see paid-ads-strategy. Small-budget Google Ads for PMF testing is valid.

What Doesn't Work Early

  • Hiring SDRs before founder has closed 10 customers
  • Large-scale paid ads before product-market fit—see paid-ads-strategy. Small-budget PMF testing (e.g., $47–500 Google Ads + landing page) is valid.
  • Sporadic execution; "spray and pray" targeting
  • Mass submission to low-quality directories

Output Format

  • Channel selection (2–3 channels; execute well)
  • Timeline (pre-launch, launch, post-launch)
  • Readiness checklist
  • Platform-specific actions (Product Hunt, Reddit, etc.)

Related Skills

  • pmf-strategy: Product-market fit validation; when to scale; avoid large-scale paid before PMF
  • gtm-strategy: Full GTM framework; cold start differs (0→1 vs commercialization)
  • paid-ads-strategy: Two modes—PMF testing (small budget) vs conversion-driven (post-PMF); when to add paid after cold start
  • google-ads: PMF testing setup; small-budget validation
  • discount-marketing-strategy: LTD structure, pricing, trade-offs; cold start uses LTD as channel
  • product-hunt-launch: Product Hunt preparation and launch
  • directory-submission: Taaft, G2, curated lists—directory listings as cold-start channel
  • community-forum: Indie Hackers, HN, Reddit—forum/community as cold-start channel
  • reddit-posts: Reddit post copy for cold-start posts
  • integrated-marketing: Channel mix; cold start is early-stage channel strategy
  • media-kit-page-generator: Assets required for Product Hunt and directory submissions
  • indie-hacker-strategy: Indie hacker first 100 users; Build in Public; Pieter Levels tactics; channel fit; this skill = generic cold start; indie-hacker = indie-specific
用于生成或优化页面内的对比表格区块,支持产品、传统vs现代等类型。适用于着陆页或博客中的矩阵比较,不处理完整页面结构或独立替代方案页面。
用户要求创建对比表格、功能矩阵或并列比较 涉及“传统vs现代”、“手动vs自动”或竞品对比场景 需要在页面内嵌入可扫描的比较模块而非独立页面
skills/kostja94_marketing-skills/comparison-table/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill comparison-table-generator -g -y
SKILL.md
Frontmatter
{
    "name": "comparison-table-generator",
    "metadata": {
        "version": "1.0.0"
    },
    "description": "When the user wants to create, optimize, or audit a comparison table section—an in-page block (HTML table or responsive equivalent) comparing products, methods, or approaches, with optional supporting copy. Also use when the user mentions \"comparison table,\" \"compare table,\" \"feature matrix,\" \"vs table,\" \"side-by-side comparison,\" \"competitor comparison,\" \"traditional vs modern,\" \"manual vs automated,\" \"before and after,\" \"old way vs new way,\" \"alternatives comparison block,\" or \"comparison section on landing page or blog.\" This skill is for a section inside a page, not a full alternatives URL or blog post wireframe—use alternatives-page-generator for page-level layout, keywords, and PPC destination strategy. For full-page structured data rules, use schema-markup. For FAQ blocks paired with the table, use faq-page-generator."
}

Components: Comparison Table Section

Guides comparison tables as an in-page section: a scannable matrix (rows × columns) embedded inside landing pages, blog posts, pricing pages, homepages, or docs. Not a standalone page type—parent page structure, URLs, and "alternatives vs blog" decisions come from alternatives-page-generator, landing-page-generator, article-page-generator, pricing-page-generator, etc. Distinct from FAQ (Q&A → FAQPage) and from HowTo (procedure → HowTo). schema-markup remains the source for exhaustive Schema.org rules; this skill owns section-level criteria, copy, HTML/accessibility, fairness, and ad alignment.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Comparison Table Section vs Alternatives Page

Dimension Comparison table section (this skill) Alternatives / compare page
Scope One block: headings, table, footnotes, optional CTA line Full page or article: headline, intro, verdict, listicles, FAQ, metadata
URL / intent Chosen by parent; section supports commercial or informational parent Owns "X alternatives", "X vs Y", PPC landing strategy
PPC Align copy and criteria with ad and parent LP Owns where paid traffic lands (dedicated LP vs blog)
Skill comparison-table-generator (this) alternatives-page-generator

Use both when building an alternatives LP: alternatives-page-generator for page structure; comparison-table-generator for the table itself (criteria, rows, cells, fairness).

Comparison Types (Same Component, Different Framing)

Type Rows / columns Typical use
Product vs product You vs 1–N competitors or tools Alternatives LP, category pages, blog "best X"
Traditional vs modern Old workflow vs your approach Category creation, thought leadership, LP objection handling
Manual vs automated Spreadsheets, agencies, DIY vs product Mid-funnel LP, demo request pages
Before / after State A vs State B (metrics allowed if true) Outcome-focused LP, case studies
Feature / capability matrix Features as rows; plans or products as columns Pricing-adjacent, features-page-generator context

Column count: Prefer 4–7 columns including names; more columns hurt mobile—use priority columns above the fold and expand or link to full spec.

Placement Within the Parent Page

Location When
After hero + short value prop LP: remove doubt early; before long prose
After "problem" / "why switch" Alternatives or comparison article: user is ready for criteria
Before FAQ Table answers "which is better for X?"; FAQ handles objections
Mid-article Blog: after context; supports featured-snippet table patterns

Narrative: Table should answer the promise of the H1/H2—do not bury the matrix below unrelated storytelling.

Content Structure

Section title (H2)

  • Default: Outcome or task-oriented—"How [Product] compares to [Competitor]," "[Category] comparison at a glance," "Traditional vs [Your approach]."
  • Avoid: Vague "Comparison" alone; match query language where relevant ("vs", alternatives, best for).

Intro (1–3 sentences)

  • State who the table is for and criteria (e.g. "pricing as of [date]," "SMB-focused").
  • Transparency: "We sell [Product]; we include [Competitor] because users search for both."

The table

  • HTML <table> with <thead>, <th> scope, <caption> (summary for screen readers).
  • Cells: Short phrases, icons, or Yes/No/Limited—avoid marketing fluff in cells; footnote nuance.
  • Parity: Compare on dimensions competitors would accept; cherry-picked rows erode trust and GEO citation.
  • Last updated: Row or footnote—pricing and limits must be refreshable.

Below the table

  • Optional: One "Best for" line per column (if not already in table).
  • CTA: Single primary CTA aligned with parent page (trial, demo, contact)—not one CTA per competitor cell unless design system allows.

SEO

  • Intent: Often commercial; align headings and intro with "vs", alternatives, best [category] modifiers.
  • Snippets: Semantic table + clear headers support list/table extraction; see featured-snippet.
  • Keywords: Work natural competitor names into caption, headings, or intro—avoid stuffing; alternatives-page-generator owns keyword strategy for full URLs.

GEO (AI Search)

  • Extractable facts: Tables with plain text in cells are easier for models to cite than long paragraphs.
  • Fairness: Acknowledge where a competitor is strong—overly biased matrices are less likely to be summarized neutrally in AI answers.
  • Entity clarity: Use consistent product names (same spelling as in entity-seo / Organization).

Paid Ads Alignment

  • Message match: Table criteria and headline should reflect ad copy (e.g. "cheaper," "faster," "no code")—see paid-ads-strategy, landing-page-generator.
  • Landing: Competitor brand campaigns → dedicated LP with comparison section; alternatives-page-generator + google-ads for policy.

Accessibility & Mobile

  • Never rely on images only for the matrix—use a real table; images can supplement.
  • Responsive: Horizontal scroll with visible focus, or card layout per row on small screens (tab-accordion patterns only if content stays in DOM).
  • Color: Don't encode meaning by color alone (WCAG contrast).

Fairness, Legal, Trademark

  • Factual claims: Prices, limits, integrations—cite source or "as of [date]"; no invented specs.
  • Trademark: Use competitor names accurately for comparison (nominative use); avoid confusing logos without permission—follow legal review.
  • Tone: FUD and disparagement hurt trust and SEO; objective tables win.

Schema (High Level)

  • FAQ below the table → FAQPage if Q&A pairs; see faq-page-generator.
  • Product / Offer on product pages—see schema-markup; this skill does not duplicate schema tables.
  • No fake HowTo for comparison tables.

Anti-Patterns

  • Screenshot-only comparison (no crawlable text).
  • Hidden columns that only favor you (users and reviewers notice).
  • Stale pricing—add refresh owner or date in content workflow.

Best Practices Checklist

  • <table> with <caption>, header cells, semantic structure
  • Criteria fair and parity across columns
  • Intro states bias (you are the vendor) and evaluation frame
  • Last updated or as-of for volatile fields
  • Mobile usable (scroll or card fallback)
  • PPC / H1 alignment if traffic is paid
  • Paired FAQ or short copy for objections if parent page needs it

Output Format

  • Placement of the section within the parent page
  • Comparison type (product vs product, traditional vs modern, etc.)
  • Column/row design (criteria list; row labels)
  • Draft table (HTML outline or Markdown grid with cell guidance)
  • Footnotes for nuanced cells
  • Fairness notes (what to acknowledge about competitors)
  • Ad alignment notes (if PPC)
  • Explicit: Section block only—defer full page wireframe to alternatives-page-generator / landing-page-generator / article-page-generator

Related Skills

  • alternatives-page-generator: Full alternatives/compare page or blog; keywords, PPC destination, URL strategy
  • landing-page-generator: LP structure; when comparison sits on a paid LP
  • article-page-generator: Blog posts with comparison section
  • pricing-page-generator: Pricing grids and comparisons; features-page-generator for feature matrix context
  • faq-page-generator: FAQ below or beside comparison table
  • featured-snippet: Table/list snippet patterns
  • schema-markup: Product, FAQPage, Article—full JSON-LD rules
  • entity-seo: Entity naming and consistency for GEO
  • paid-ads-strategy, google-ads: Competitor brand ads, message match
  • competitor-research: Research inputs; not end-user copy
  • tab-accordion: Optional mobile patterns; DOM visibility
  • content-optimization: Headings and keyword placement in longform

References

指导将产品或应用提交至目录、发布平台及应用商店,提供各平台适配文案。涵盖SEO价值、最佳实践及评估流程。适用于目录提交、应用上架等场景。
directory submission get listed app store listing submit to directories curated list best tools list Product Hunt Shopify App Store Chrome Web Store
skills/kostja94_marketing-skills/directory-submission/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill directory-submission -g -y
SKILL.md
Frontmatter
{
    "name": "directory-submission",
    "metadata": {
        "version": "1.2.0"
    },
    "description": "When the user wants to submit a product or app to directories, curated lists, launch platforms, or app stores—and needs ready-to-paste copy per platform. Reads project-context.md when present. Also use when the user mentions \"directory submission,\" \"get listed,\" \"app store listing,\" \"submit to directories,\" \"curated list,\" \"best tools list,\" \"Taaft,\" \"Product Hunt,\" \"directory ads,\" \"newsletter feature,\" \"directory campaign,\" \"tailor description per platform,\" \"Shopify App Store,\" \"Chrome Web Store,\" \"navigation site,\" or \"product directory.\" For Product Hunt launch day tactics (hunter, first comment, timing), use product-hunt-launch. For full 0→1 channel planning, use cold-start-strategy."
}

Channels: Directory Submission

Guides submitting products, tools, or apps to directories and launch platforms.

On each invocation: On first use in the conversation, output the complete response (Introduction, Importance, Methods, Collaboration Channels, Rules, Avoid, Action). On subsequent use or when the user asks to skip (e.g., "just do it", "skip intro", "I already know"), go directly to Action.

Directory submission is a core channel for cold start—see cold-start-strategy for full launch planning. Directories offer more than listings: free/paid listings, ad placements, newsletter features, social promotion, and marketing campaigns. Platform types: AI tools (e.g. Taaft), product launch (e.g. Product Hunt), review platforms (e.g. G2), app stores, niche directories.

Why Directory Submission Matters

Platform examples are illustrative only. No affiliation, partnership, or endorsement implied.

Benefit Description
Backlinks Quality directories pass link equity; improve domain authority and rankings. Focus on high-authority directories (DA 50+); avoid low-quality link farms.
Real traffic & conversion Referral traffic from directories converts. ~42% of businesses report increased referral traffic after submission; referral conversion ~1.8% (B2C), 1.1% (B2B), 1.3% (SaaS). Use UTM to track; proper attribution can improve measured conversion by ~23%.
Social proof for brand search When users search your brand name, directory listings (e.g. Product Hunt, G2, Taaft) often dominate SERP. Third-party presence signals legitimacy; consumers check 5-7 sources before deciding. Verified badges and consistent NAP across directories boost trust. See serp-features for SERP feature types.

Current Best Practices

Quality over quantity. Mass submission to hundreds of low-quality directories can harm rankings; strategic placement in 10-15 high-quality directories typically yields 15-25% improvement in indexing speed and branded search visibility.

Practice Why
Prioritize DA/DR 50+ High-authority directories pass link equity; low-quality link farms risk penalties
Editorial review preferred Human-curated directories (vs. automated) carry more weight; Google's Helpful Content Update favors editorially-curated listings
Niche over generic Industry-specific directories deliver faster results (30-60 days) and better topical relevance than generic sites (60-120 days)
NAP consistency Name, Address, Phone identical across all listings--critical for local SEO
Track submissions Document where you submitted, approval status, canonical topics

Budget reference: Small businesses $300-500/mo; enterprises $1,500-3,000/mo for comprehensive programs. Results typically 30-60 days from high-authority directories.

Initial Assessment

Read project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it. Use sections 1-4, 5, 6, 8, 9 to generate submission content directly--no need to ask the user for info already in the context.

Context section Maps to directory fields
1. Product Overview Name, one-line, category, pricing model
2. Positioning Statement Tagline, long description
3. Value Proposition Key messages, proof points -> Pros
4. Target Audience Description tone, use cases
5. Existing Website URL, key pages
6. Keywords Tags, negative keywords, Primary Task
8. Brand & Voice Tone, avoid terms, preferred wording — see branding for full brand strategy
9. Product Documentation Features, capabilities -> Other features

When context exists: Generate ready-to-paste submission copy (tagline, short/long description, pros/cons, tags) tailored per platform. Output copy the user can paste into Taaft, Product Hunt, etc.

When context is missing: Gather from user's site; search the web for pricing, features, competitors, reviews, and any gaps. Then generate.

Identify:

  1. Product type: AI tool, SaaS, app, Chrome extension, Shopify app
  2. Target directories: AI tools, product launch, app stores, niche
  3. Readiness: Landing page, screenshots, description, media kit

Product / Website Info Required

Source: Project context (preferred) or user's site. Each directory needs different fields; prepare a base set, then adapt per platform.

Standard Fields (Most Directories)

Field Typical Spec Notes
Product name 60-80 chars Consistent spelling across all listings
URL Working product/landing page No redirect chains
Tagline / one-liner <=60 chars (Taaft: max 12 words) Catchy, benefit-focused
Short description 150-300 chars Used by many directories
Long description 400-600 chars For platforms that allow more
Category / Task Platform-specific Match taxonomy (Taaft: Primary + Secondary Tasks)
Keywords / Tags 5-10 terms, comma-separated Natural, no stuffing
Contact Email, optional NAP For verification
Company name Legal entity Some directories require
Promo code If applicable Product Hunt, deal platforms
Other URLs Blog, Affiliate Program, FAQ Optional but useful
API availability Yes/No AI/SaaS directories
Demo video URL or file Many platforms support

Platform-specific: Taaft requires many more fields (icon, main image, demo video, features, models, built-with tools, modalities, pricing, legal URLs, pros/cons, socials, tracking links)--see Taaft section.

Prepare Asset Tiers

Create multiple versions so you can match each directory's format without rewriting from scratch:

  • One-liner (<=60 chars): Elevator pitch; "Remote Project Manager Pro" beats "Project Tool"
  • Short (150-300 chars): Core value + one differentiator
  • Long (400-600 chars): Problem -> solution story; features + benefits

Rich Content Base (Build First, Use Everywhere)

Even if a directory form does not require it, build a full reference so you can tailor per platform and for SEO/GEO. Search the web when info is missing.

Section Content Use For
Definition What the product is; category; one-sentence positioning Intro text, GEO-friendly summaries
Importance Why it matters for the target audience; key differentiator Long descriptions, first comments
Features Core capabilities; technical specs; integrations Taaft, G2, comparison sites
Use cases Who uses it; workflows; outcomes Taaft tasks, niche directories
Solutions Problems solved; before/after Product Hunt, curated lists
Competitors Alternatives (e.g. Competitor A, B); how this differs Comparison sites, G2
Pricing Plans, credits, free tier G2, Capterra, budget-focused lists
Rules / Avoid What to emphasize; what to avoid per platform Quality control

Multiple Versions for Differentiation (SEO & GEO)

Do not submit identical copy to every directory. Duplicate content hurts SEO and reduces GEO citation diversity. Generate at least 2-3 distinct versions per field (tagline, short, long) so:

  • Different directories show different angles
  • AI tools and search engines see varied, non-duplicate signals
  • Users can pick the best fit per platform or A/B test
Version Angle Best For
A Feature-led (capabilities, specs) Taaft, technical directories
B Benefit-led (outcomes, use cases) Product Hunt, creator-focused
C Comparison-led (vs. competitors) AlternativeTo, G2 alternatives
D Audience-led (who, workflow) Niche directories, vertical lists

Tailor Per Platform (Different Expression, Different Emphasis)

Do not copy-paste identical descriptions. Each directory has a different audience and format; customizing per platform improves approval, visibility, and conversion.

Platform Type Audience Emphasis Tone
Product Hunt Indie makers, founders, early adopters See product-hunt-launch for full workflow Community, authentic, maker-friendly
Taaft AI tool seekers, task/job-oriented Tasks and jobs your tool solves; keyword-rich for AI use cases; "what can I do with this" Functional, searchable, use-case driven
G2 / Capterra Enterprise buyers, comparison shoppers Features, integrations, pricing; review-oriented; social proof Professional, comparison-ready
AlternativeTo Users switching from competitors "Alternative to X"; migration ease; differentiation Comparison, migration, alternatives
Niche directories Vertical (e.g., e-commerce, healthcare) Industry keywords; vertical pain points; compliance if relevant Vertical-specific, jargon-appropriate
App stores (Shopify, Chrome) Merchants / extension users Merchant value (Shopify); use case (Chrome); screenshots show workflow Benefit-first, feature-clear

Consistency to Keep

While tailoring, keep consistent across all listings:

  • Product name spelling and formatting
  • Core positioning (who it's for, main benefit)
  • Contact info format (NAP if applicable)

Inconsistent NAP or product names can hurt SEO and trust.

Directory Offerings (Beyond Listing)

Directories typically offer multiple touchpoints--not just inclusion in the catalog:

Offering Description Use When
Listing Free or paid inclusion in directory catalog Baseline visibility, backlinks, evergreen traffic
Ad placements Sponsored slots, banners, featured placement Need boosted visibility; budget for paid promotion
Newsletter Featured in directory's email to subscribers Product Hunt, Taaft; high-intent audience
Social promotion Directory shares your product on X, LinkedIn, etc. Launch day amplification; viral potential
Marketing campaigns Bundled packages: listing + newsletter + ads + social Full-funnel campaign; product launch or relaunch

Strategy: Start with free listing for backlinks and baseline traffic. Layer paid options (ads, newsletter features, campaigns) when ROI justifies--especially for launches or when organic listing underperforms.

dofollow vs nofollow: dofollow passes link equity for SEO; nofollow does not. But the goal is conversion--if users click through and convert, the shorter path (direct traffic) can outweigh SEO benefit. Small, unknown directories have driven three-figure annual subscriptions from a single 10-minute submission.

Collaboration Channels (Newsletter, Ads, Social, Campaigns)

Include this section in output when the user invokes this skill. Directories offer follow-on collaboration beyond listing:

Channel Platform Examples Scale / Notes
Newsletter Product Hunt, Taaft High-intent; paid or bundled; best for launches
Ad placements Taaft banners, Product Hunt Featured, G2/Capterra sponsored Use UTM (e.g. utm_medium=paid); test after organic listing. See directory-listing-ads for Taaft, Shopify App Store, G2, Capterra paid campaign setup
Social promotion Taaft, Product Hunt share on X, LinkedIn Launch-day amplification; @ platform accounts when posting
Marketing campaigns Taaft: listing + newsletter + ads + social Full-funnel; product launch or relaunch; budget-dependent

Phased approach: (1) Free listing first. (2) Newsletter features when launching. (3) Ads if organic underperforms. (4) Campaign packages for major launches.

Budget reference: Small teams $0-500/mo (listing + occasional newsletter); growth $300-500/mo; enterprise $1,500-3,000+/mo for full programs.

Directory Types

Type Examples Best For Traffic / Benefit
AI tools Taaft (There's An AI For That) AI products, SaaS 4M+ monthly visitors; 700-10K+ visitors per listing
Developer tools DevHunt OSS, dev tools, APIs Dev-focused; GitHub-verified; free; see open-source-strategy
Product launch Product Hunt New products, features See product-hunt-launch for full PH workflow
App stores Shopify App Store, Chrome Web Store Apps, extensions Merchant/developer discovery
Niche directories Industry-specific lists Vertical SaaS, tools Targeted backlinks, SEO
Review platforms G2, Capterra B2B SaaS, commercial software Rich snippets (reviews, ratings); higher-intent buyers; vendor verification required
Curated lists Best-of roundups, Awesome lists, niche blog posts Any product Editorial backlinks; outreach to list authors; same prep as directories

Dimension diversity: Your product has multiple dimensions--AI tool, productivity tool, SaaS, industry-specific. After AI directories, submit to vertical niches (e.g., e-commerce tools, marketing tools, cross-border commerce tools). Smaller traffic but higher intent and conversion.

Feature vs solution directories: Feature directories (text, image, video, audio by modality) suit AI enthusiasts who compare tools. Solution directories (workflow-oriented: SEO tools, EDM marketing, TikTok analytics) suit users seeking 10x productivity in a workflow--often higher conversion for B2B.

Directory Lists (Curated Lists)

Same principles as directories--backlinks, traffic, discovery. Curated lists are editorial roundups (e.g., "Best AI tools 2025," "Top 10 SaaS for marketing") published on blogs, newsletters, or dedicated list sites.

Type Examples How to get listed
Best-of / Top N "Best SEO tools," "Top 10 AI writing tools" Outreach to list authors; provide product info, use case, differentiator
Awesome lists GitHub Awesome-*, Awesome Tools Submit PR or contact maintainer; follow list format. See github for creating or optimizing awesome-style curated lists.
Comparison / alternatives AlternativeTo, G2 alternatives Submit as alternative to X; comparison-focused copy
Niche roundups Industry blogs, newsletters Pitch for inclusion; offer quote, case study, or exclusive angle

Preparation: Same as directory submission--product info, tagline, short/long description, screenshots. Tailor pitch to list theme (e.g., "best for startups," "budget-friendly," "enterprise-ready").

Tip: One solid backlink from a curated list often beats many low-quality directory links. Prioritize lists with editorial oversight and real traffic.

Key Platforms

Taaft (There's An AI For That)

  • URL: taaft.com/submit or theresanaiforthat.com/submit
  • Scale: 46K+ AI tools, 4M+ monthly visitors, 2.8M+ newsletter subscribers
  • Listing: 700-10K+ guaranteed targeted visitors per listing; early launch bonus (up to $300 PPC credits for launching on Taaft first)
  • Beyond listing: Newsletter features (reach 2.8M+ subs), ad placements, social promotion, marketing campaigns
  • Free vs paid: Submission fee varies; sometimes free listing is possible (e.g., early action, specific criteria)--check current pricing
  • Use when: Product is AI-related; want AI-focused traffic, backlinks, and paid amplification options

Taaft submission fields (prepare before submitting; changes can take up to 24h to reflect):

Category Field Spec / Notes
Identity Name Product/tool name
Primary Task Search and select from Taaft task taxonomy (e.g., Text to speech, Image generation)
Secondary Tasks Search and add; subject to approval, processed daily
Tagline Max 12 words; benefit-focused
Description Full product description; use-case driven, keyword-rich
Country Select from list
Media Icon SVG preferred; PNG/JPEG/WEBP <=500x500 px
Main image Product screenshot or hero visual
Demo video Optional; no captions (Taaft auto-generates for all languages)
Features Supported features Check: Agents, API, MCP, Run locally, Open source, No signup, Supports TAAFT code
Other features Ordered list by importance; add keywords (e.g., ai voice, text to voice, voice cloning)
Tech Search models Add AI models used (e.g., GPT-4, Claude)
Built with Select from platform options (e.g. Cursor, Lovable, v0.dev)
Modalities Supported Inputs/Outputs: Text, Image, Audio, Video, 3D, API, Code, etc.
Pricing Pricing model Freemium, Free trial, Paid, etc.
Paid starting price (USD) If paid
Billing frequency Monthly, Yearly, etc.
Hard paywall Does tool show paywall before letting users try?
Legal Refund Policy No Refunds / Custom text
Refund Policy URL Optional
Privacy Policy URL Required
Terms & Conditions URL Required
Discovery Tags Comma-separated; use for search and filtering
Negative keywords Comma-separated; exclude from irrelevant searches
Tracking Tracking link Custom UTM (default: ?ref=taaft&utm_source=taaft&utm_medium=referral)
PPC tracking link For PPC ads (default: ?ref=taaft_feat&utm_source=taaft_feat&utm_medium=referral)
Socials Facebook, TikTok, Instagram, Telegram, Discord, X, YouTube, LinkedIn URLs
Pros / Cons Pros Add multiple; feature and benefit bullets
Cons Add multiple; honest limitations (builds trust)

Tip: Pros and cons help users compare; be honest--negative keywords and cons improve relevance and trust.

Product Hunt

See product-hunt-launch for full preparation, launch day strategy, and post-launch. Product Hunt: producthunt.com/launch; free listing; community upvotes; Product Hunt Daily newsletter; paid featured placement. Use when launching new product or major feature.

DevHunt (Developer Tools)

  • URL: devhunt.org
  • Audience: Developers, indie makers, open source maintainers
  • Content: Developer tools, APIs, libraries, open source projects; GitHub-verified submissions; 50+ categories
  • Listing: Free to submit; community-driven; alternative to Product Hunt for dev tools
  • Use when: Open source or developer tool; want dev-focused discovery. See open-source-strategy for full OSS commercialization path.

Shopify App Store

  • URL: shopify.dev/docs/apps/launch/shopify-app-store
  • Listing: App catalog; merchant discovery
  • Beyond listing: Featured placement, app store ads, partner marketing programs
  • Requirements: Partner account; session tokens (no third-party cookies); Shopify checkout; app icon 1200x1200; factual listing
  • Use when: Building Shopify apps; need merchant discovery and optional paid promotion

Review Platforms (G2, Capterra)

  • Type: B2B software review platform (vendor-submitted, review-driven); rich snippets (stars, ratings) in SERP; see serp-features
  • vs directories: More complex submission (domain email verification, more fields, features, FAQ); commercialized (membership, paid placement); lower risk than PH ranking--reviews drive priority; higher-paying B2B users
  • Use when: B2B SaaS; want review-rich SERP presence and enterprise buyers

Chrome Web Store

  • URL: developer.chrome.com/docs/webstore
  • Listing: Extension catalog; user discovery
  • Beyond listing: Featured placement, promoted listings
  • Requirements: Extension package; icons, screenshots, description; privacy policy
  • Use when: Chrome extensions; need user discovery and optional paid promotion

Submission Checklist

Before submitting to any directory:

  • Product / website info gathered (name, URL, tagline, short + long descriptions, keywords)
  • Asset tiers prepared (one-liner, short, long) for platform-specific adaptation
  • Landing page live and optimized
  • Product description clear, benefit-focused (no jargon)
  • Screenshots / demo (Product Hunt: 1270x760 recommended)
  • Logo / icon per platform specs
  • Category selected correctly per directory taxonomy
  • URL correct and working
  • Media kit (for Product Hunt, press outreach) —see media-kit-page-generator
  • Platform-specific copy drafted (do not reuse identical text across directories)
  • Taaft (if applicable): Full field set--icon, main image, demo video, Primary/Secondary Tasks, features, models, built-with, modalities, pricing, legal URLs, pros/cons, socials, tracking links

Best Practices

Practice Purpose
Gather product info first Extract from user's site; prepare asset tiers before submitting
Tailor per platform Different expression/emphasis per directory; no copy-paste identical text
Prioritize quality Rejected or low-quality listings waste effort
Match category Wrong category = poor visibility
Unique descriptions Avoid duplicate content; improves approval and conversion
Track with UTM analytics-tracking for attribution
Batch submissions Prepare once, adapt copy per platform, submit to multiple directories
Update listings Keep descriptions and screenshots current
Submit small directories too Major directories get crawled by smaller ones; but small directories can still drive high-value conversions (e.g., three-figure annual subscription from one 10-min submission)

Output Format

On each invocation: On first use, output the complete response (Introduction, Importance, Methods, Collaboration Channels, Rules, Avoid, Action). On subsequent use or when the user asks to skip, go directly to Action. Search the web for missing product info.

Required Output Structure (in order)

  1. Introduction --What directory submission is: Taaft, Product Hunt, G2, curated lists, app stores; listings, ads, newsletter features, campaigns. Part of cold-start strategy—see cold-start-strategy for full launch plan.

  2. Importance --Why directory submission matters: backlinks and domain authority; referral traffic and conversion (~42% report increased traffic); social proof for brand search (directory listings dominate SERP); third-party presence signals legitimacy.

  3. Methods --How to submit:

    • Taaft: Full field set; Primary/Secondary Tasks; tailor for AI tool seekers
    • Product Hunt: See product-hunt-launch for full workflow
    • G2/Capterra: Features, pricing, verification; comparison-oriented
    • Curated lists: Outreach to list authors; pitch per theme
  4. Collaboration Channels (Beyond Listing) --Newsletter, ads, social, campaigns. Include:

    • Newsletter: Taaft (2.8M+ subs), Product Hunt Daily, Future Tools--high-intent; paid or bundled
    • Ad placements: Taaft, Product Hunt Featured, G2/Capterra sponsored; use UTM
    • Social promotion: Directory shares on X, LinkedIn; launch-day amplification
    • Campaigns: Bundled listing + newsletter + ads + social; full-funnel for launches
    • Phased approach: Listing first -> Newsletter -> Ads -> Campaigns
    • Budget reference: Small $0-500/mo; growth $300-500/mo; enterprise $1,500-3,000+/mo
  5. Rules --Tailor per platform; different expression per directory; multiple versions (A/B/C/D) to avoid duplicate content (SEO/GEO friendly); match category; prepare asset tiers (one-liner, short, long).

  6. Avoid --Copy-paste identical copy across directories; generic descriptions; missing legal URLs; wrong category; low-quality link farms.

  7. Action --Ready-to-paste submission content for the user's product:

    • Rich content base (features, use cases, solutions, competitors, pricing)--search web if missing
    • Multiple versions for tagline, short, long--each directory gets distinct copy
    • Platform-specific copy for Taaft, G2, AlternativeTo, etc.; Product Hunt → product-hunt-launch
    • Readiness checklist, submission order, UTM templates

Bulk Submission

Manual: Prepare info once; submit to directories in priority order. Major directories first--smaller ones often crawl or republish.

Outsourced: Freelance platforms; use when budget allows and speed matters.

Related Resources

  • project-context (.cursor/project-context.md or .claude/project-context.md): Read when present; use to generate submission content directly. Template: templates/project-context.md in this repo.
  • Alignify directory guide: alignify.co/zh/insights/directory-submission-sites --Cold-start strategy, preparation checklist, review platforms, vertical directories, bulk submission.

Related Skills

  • branding: Brand strategy, voice, tone; Section 8 Brand & Voice in project-context
  • media-kit-page-generator: Press kit, screenshots, assets for launch; required for Product Hunt and directory submissions
  • link-building: Directory and curated list backlinks contribute to link profile; this skill handles the submission workflow—see link-building for broader outreach, guest posting, broken link building
  • github: GitHub awesome lists as curated lists; create or submit to awesome-* repos
  • open-source-strategy: Open source commercialization; DevHunt, GitHub, Awesome lists for OSS projects
  • grokipedia-recommendations: Same output pattern--platform context first (Introduction, Importance, Methods, Rules, Avoid), then Action; high-authority placement for GEO; directories for human discovery--complementary
  • generative-engine-optimization: GEO strategy; varied directory copy improves AI citation diversity; directory submission complements AI search visibility
  • affiliate-marketing: Different channel; directories complement affiliate
  • cold-start-strategy: Cold start orchestrates directory-submission, Product Hunt, Reddit, Indie Hackers; this skill handles directory submission workflow
  • indie-hacker-strategy: Indie hacker Product Hunt, first 100 users; Build in Public
  • directory-listing-ads: Paid promotions within Taaft, Shopify App Store, G2, Capterra; use after listing is live
  • community-forum: Forum promotion (HN, Indie Hacker); community invitation; different from directory listing
  • analytics-tracking: UTM for directory traffic attribution
  • serp-features: SERP features; directory listings in brand search SERP
针对ChatGPT、Claude等AI搜索引擎的优化策略,旨在提升内容在AI回答中的引用率而非传统排名。涵盖Google AI Overviews、Bing Copilot等平台特性及SEO与GEO的差异分析。
用户希望优化AI搜索可见性 提及GEO、AEO、LLM优化或AI搜索优化 询问如何在ChatGPT或Perplexity中获得引用
skills/kostja94_marketing-skills/geo/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill generative-engine-optimization -g -y
SKILL.md
Frontmatter
{
    "name": "generative-engine-optimization",
    "metadata": {
        "version": "1.4.0"
    },
    "description": "When the user wants to optimize for AI search visibility (ChatGPT, Claude, Perplexity, AI Overviews). Also use when the user mentions \"GEO,\" \"AEO,\" \"generative engine optimization,\" \"AI search visibility,\" \"LLM optimization,\" \"GitHub GEO,\" \"Grokipedia,\" \"optimize for ChatGPT,\" \"AI Overviews,\" \"Bing Copilot,\" \"Yandex AI,\" \"Perplexity optimization,\" \"GEO strategy,\" or \"AI search optimization.\" For third-party publishing strategy (which platforms to use), use parasite-seo. For GitHub repos, README, and Awesome lists, use github. For Medium.com only, use medium-posts. For Grokipedia edits, use grokipedia-recommendations. For traditional Google SERP strategy, use seo-strategy."
}

Strategies: GEO (Generative Engine Optimization)

Guides GEO/AEO strategy for AI search visibility. GEO optimizes content for ChatGPT, Claude, Perplexity, and AI search summaries (Google AI Overviews, Bing Copilot, Yandex Search with AI)—getting cited in AI-generated answers rather than ranking in traditional SERPs. See serp-features for AI search as SERP features; featured-snippet for snippet optimization that overlaps with AI Overviews.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • GEO = Generative Engine Optimization
  • AEO = Answer Engine Optimization
  • LLMO = Large Language Model Optimization
  • AIO = Artificial Intelligence Optimization

All refer to the same goal: visibility in AI assistant responses.

GEO vs. SEO

Dimension SEO GEO
Goal Rankings in search results Citations in AI answers
User path Click → visit → convert Answer in-place; may not visit
Content Full page optimization Clear, citable paragraphs
Metrics Clicks, traffic Citations, brand mentions
Platforms Google, Bing, Yandex (organic) AI Overviews, Copilot, Yandex AI, ChatGPT, Perplexity

Both matter: Create content that ranks and gets cited. AI search summaries (AI Overviews, Copilot, Yandex AI) are SERP features—see serp-features. When SERP features cause zero-click (user gets answer without clicking), citation becomes the primary value; optimize for being cited, not just ranked.

AI Search Platforms (SERP Features + Standalone)

Platform Type Source Selection Optimization Focus
Google AI Overviews SERP feature Top 10–12 organic; Gemini; favors older domains (49% over 15 yrs) Traditional SEO; structured data; citable blocks
Bing Copilot Search SERP feature Bing index; GPT-4; 9.81% domain overlap with Google; favors younger domains (18.85%); LinkedIn signals for B2B Bing optimization; LinkedIn presence; structured content
Yandex Search with AI / Neuro SERP feature Real-time Yandex search; YandexGPT; Russia-focused Yandex indexing; Russian content; cited sources
Perplexity Standalone 200B+ URL index; independent crawl; favors recency, semantic alignment Content freshness; semantic markup; mid-tier site opportunity
ChatGPT (web search) Standalone GPTbot; high-authority, frequently updated, LLM-friendly; favors older domains (45.8%) Backlinks; structured data; authority signals

Citation behavior: AI Overview citations 20–35% higher CTR than equivalent organic. Copilot: shortest responses, fewest links (~3.13/response). Perplexity: prominent URL citations, high trackability. Geneo, GEO AIO

Platform traffic context: Among standalone AI tools, ChatGPT captures ~60%+ of independent Gen AI traffic, Gemini ~20%+, while Claude, Perplexity, and Grok each account for ~2-4%+. These tools reach users directly. SERP features (AI Overviews, Copilot) reach users through existing search flows rather than as independent destinations. Prioritize optimization effort proportionally.

How GEO Works (RAG & Search Supply)

GEO operates through RAG (Retrieval-Augmented Generation)—AI tools retrieve content first, then generate answers. The retrieval supply type varies by platform and determines which content surfaces for citation.

Retrieval Supply Types

Type Description Platforms
Self-built index Platform maintains its own crawl and search index Perplexity (200B+ URL index, PerplexityBot); ChatGPT (OAI-SearchBot index)
Bound search engine Platform uses a fixed first-party search API Copilot (Bing); Google AI Overviews / AI Mode (Google Search + query fan-out)
Third-party API Platform contracts a third-party search API Claude for Government (Brave Search API); smaller AI tools using Tavily, Exa, You.com
Hybrid Combination of self-built + external API ChatGPT (OAI-SearchBot + possible search partners); Claude Web Search (supplier not publicly disclosed)

Platform Retrieval & Implications

Platform Primary Supply Strategic Implication
Google AI Overviews / AI Mode Google Search (query fan-out) Strong traditional SEO + structured data is the most reliable path
Bing Copilot Bing index Requires Bing indexing; LinkedIn signals for B2B visibility
ChatGPT (web search) OAI-SearchBot + partners High-authority, frequently updated content favored; backlinks matter
Perplexity Proprietary crawl Content freshness; semantic alignment; mid-tier sites have opportunity
Claude (web search) Not publicly disclosed Focus on general crawlability and clear structured content

Third-party search APIs (Tavily, Exa, You.com, Brave Search API) feed smaller AI tools and custom agents. Content that is crawlable and indexed via standard web search reaches these APIs through their supply indexes. Core model training (long, costly, not widely actionable): focus on RAG optimization.

AI Crawlers & Discovery

AI crawlers fall into three categories with different implications for content strategy:

Type Purpose Examples Implication
Training crawlers Gather data for model training GPTBot, ClaudeBot, Google-Extended, Meta crawlers Blocking via robots.txt prevents training data use; does not affect real-time search/retrieval by the same provider
Index/RAG crawlers Build search index for retrieval OAI-SearchBot, PerplexityBot, Claude-SearchBot, Bytespider (Cohere), AppleBot Must allow for RAG-based AI citation; critical for GEO
Real-time crawlers Fetch content on-demand at query time ChatGPT-User (opt-in via web search) Content must be accessible without a login; paywalls may block citation

Content discovery: "Push" submissions for general web content are primarily supported through Bing IndexNow. Google's Indexing API is limited to JobPosting and BroadcastEvent pages only (not general content). OpenAI, Anthropic, Perplexity, xAI, Meta, and DeepSeek do not offer public submission portals—their crawlers discover content through standard crawl and sitemaps only.

AI crawlers generally do not execute JavaScript—critical content must be in initial HTML. See rendering-strategies for SSR, SSG, CSR; site-crawlability for AI crawler optimization; robots-txt for allow/block decisions. Vercel/MERJ study (2024)

Content Best Practices

Practice Purpose
Direct-answer format Answer specific questions in clear paragraphs
Entity signals Clear brand, product, author identity; see entity-seo
Citable paragraphs Each block understandable on its own
Distribution Website, YouTube (Google prioritizes YouTube in search; ~78% of social media citations in AI Overviews come from YouTube + Reddit), forums, Reddit—thoughtful comments can outrank blog posts

Article-Level GEO

For blog posts and articles, structure content for AI citation. Studies find content with TL;DR, structured formats, and clear answers is cited substantially more by AI engines.

Element Guideline
TL;DR or Key Takeaways Choose one: TL;DR = 50–100 word bold summary paragraph; Key Takeaways = 5–7 bullet points; placed after intro
QAE pattern Question (H2) → Answer (2 sentences) → Evidence (data, examples, lists)
Answer-first Direct answer in first 40–60 words after each H2
Answer blocks 100–200 words per section; direct answer + context + evidence + nuance
Structured formats Lists, tables, numbered steps increase citation rate

See article-content for content creation; article-page-generator for page structure.

Parasite SEO & High-Authority Platforms

Parasite SEO = Placing content on high-authority platforms to leverage their domain strength for rankings and AI citation. See parasite-seo for full strategy.

GitHub: Tier 2 technical authority; very high AI citation. See github for repos, README, Pages, gists, awesome lists.

YouTube: Google prioritizes YouTube in search; YouTube citations in AI Overviews surged 25.21%. Long-form instructional and visual-demo videos dominate. See youtube-seo for channel and video optimization; video-optimization for website-embedded video SEO.

Grokipedia: xAI's AI encyclopedia; ChatGPT, Perplexity, Copilot cite it. See grokipedia-recommendations for adding recommendations or links. Contribute genuinely useful content; avoid manipulative placement (Google Site Reputation Abuse policy).

Tools

  • GEO tracking and optimization tools for measuring AI citation and visibility

Key Insight

ChatGPT traffic converts at significantly higher rates than Google search—studies report 2x to 9x uplift depending on industry. AI tool users often have clearer intent, but results vary by vertical.

Output Format

  • Content structure for AI citation
  • Entity optimization; see entity-seo
  • Distribution strategy
  • Measurement approach

Related Skills

  • site-crawlability: AI crawler optimization; URL/redirect management
  • rendering-strategies: SSR, SSG, CSR; content in initial HTML for AI crawlers
  • robots-txt: AI crawler allow/block (GPTBot, ClaudeBot, PerplexityBot)
  • parasite-seo: Parasite SEO strategy; high-authority platforms for GEO
  • github: GitHub for GEO; repos, README; Tier 2 technical authority
  • youtube-seo: YouTube optimization; GEO distribution; Google prioritizes YouTube
  • serp-features: Strongly related—AI Overviews, Bing Copilot, Yandex AI; platform comparison
  • featured-snippet: Snippet optimization; overlaps with AI Overviews
  • entity-seo: Entity signals; Organization, Person schema; GEO citation
  • article-content: Article body creation; TL;DR, Key Takeaways, QAE pattern
  • article-page-generator: Article page structure; schema; layout
  • faq-page-generator: FAQ structure for GEO; citable Q&A blocks; content in initial HTML
  • howto-section-generator: HowTo step sections; citable ordered procedures; HowTo JSON-LD
指导利用GitHub进行寄生SEO、GEO及Awesome列表创建。涵盖仓库README优化、个人主页配置、Pinned展示及Pages使用,旨在借助GitHub高权重和AI引用特性提升搜索排名与品牌曝光。
用户提到GitHub SEO或寄生SEO 用户请求创建Awesome列表或导航列表 用户询问GitHub个人资料README优化 用户涉及GEO(AI引用)策略
skills/kostja94_marketing-skills/github/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill github -g -y
SKILL.md
Frontmatter
{
    "name": "github",
    "metadata": {
        "version": "1.5.0"
    },
    "description": "When the user wants to use GitHub for SEO, parasite SEO, GEO, open source marketing, README optimization, or curated Awesome lists. Also use when the user mentions \"GitHub,\" \"GitHub SEO,\" \"GitHub parasite SEO,\" \"GitHub GEO,\" \"awesome list,\" \"GitHub README,\" \"profile README,\" \"pinned repositories,\" \"Trending,\" \"Explore,\" \"repository name,\" \"About section,\" \"GitHub description,\" \"GitHub topics,\" \"Website field,\" \"GitHub Pages,\" \"github.io,\" \"user site,\" \"project site,\" \"GitHub gist,\" \"curated list,\" or \"navigation list.\" Not for Medium or other non-GitHub platforms—use parasite-seo or medium-posts. For OSS business model, use open-source-strategy."
}

Platforms: GitHub

Guides GitHub for parasite SEO, GEO (AI citation), and curated list creation. GitHub is a Tier 2 Technical Authority platform—high domain authority, fast indexing, very high AI citation probability. Use for repos, README, GitHub Pages, gists, and Awesome-style navigation lists.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Why GitHub for SEO

Factor Effect
Domain authority High DA; repos, gists, Pages rank well
Fast indexing Search engines crawl GitHub frequently
AI citation ChatGPT, Perplexity cite GitHub for technical queries; Tier 2 in GEO framework
Technical expertise Strong expertise signals; structured docs become AI reference material
Cross-platform Share across Dev.to, Stack Overflow, forums; amplifies visibility

Use Cases

Use case Format Purpose
Parasite SEO Repos, README, Pages, gists Leverage GitHub authority for rankings and backlinks
GEO Documentation, tutorials, curated lists AI tools cite GitHub for technical answers
Curated / navigation lists Awesome-style repos Topic-specific resource directories; backlinks, discovery

Surfaces: profile vs repository

Surface What it is Optimization focus
Profile README Public repo with the same name as the username; root README.md renders on the profile Personal brand, flagship links, social proof
Pinned Up to 6 repos or gists on the profile Showcase top projects; align with entity signals (entity-seo)
Per-repo README Root README.md on each repo’s Code tab Product landing; install, proof, CTAs

Changing a normal repo README does not change the profile banner unless that content is the profile README repo or linked from it.

Profile README (username/username)

Not the same as a product repo README. Optimize for identity + navigation in ~15–40 lines of rendered content unless the user explicitly wants a long-form CV. Official setup: Managing your profile README.

Principle Do Avoid
Length Short, scannable sections; omit ToC unless the file is genuinely long Applying “500–1,500 words typical for product repos” here
Headings ### blocks (e.g. What I do · Open source · Find me) for fast eyeballing Many nested ## + long narrative without breaks
Links Each primary URL once in a Find me / Connect line (or badges or a slim table—not all three repeating the same destinations) Duplicate site/LinkedIn/email in badges, tables, and prose
Repos block Bold repo name + ≤2 short lines + at most one copy-paste command (e.g. npx skills add …) — same scan pattern popular profiles use for “flagship OSS” without cloning the repo’s full README Full feature matrices, changelog, or install docs pasted into the profile file
Layout Optional centered header (<div align="center">) for name + tagline + badges only; body stays left-aligned markdown for readability Center-wrapping the entire README
Optional widgets Compact Shields (flat style); optional github-readme-stats / star-historythird-party, treat as conversion/social proof, not core SEO Wall of for-the-badge badges when the same CTAs are repeated in text

Minimal outline (typical profile):

  1. Title + answer-first tagline (+ slim badge row).
  2. ### What I do — identity, proof link(s), without repeating the same URLs again later.
  3. ### Open source — bold repo links + pitches + optional one code fence.
  4. ### Find me — single line of deduped links (site · bio · cases · social · email).
  5. ### Activity (optional) — small github-readme-stats + star-history; alt text on <img>.

Reference pattern (high-signal, low-noise): scan-first profiles such as alchaincyf — short ### blocks, bold product/repo names, one “find me” cluster.

Entity hub pattern: When the person has a canonical site, lead with it in the opening line and mirror the same URL in Pinned / profile About (if used) so site ↔ GitHub OSS stay aligned for entity-seo.

Profile README checklist (short)

  • H1 + one answer-first tagline (keywords: role, stack, domain)
  • Canonical outbound links (site, social, email) deduplicated
  • Pinned repos (≤6) match the story told in the README
  • Optional: Activity section — group stats / star-history under one heading instead of scattering widgets
  • Last updated footnote for freshness (GEO signal)

Repository home: layout map

Area Typical contents SEO / ops note
Main column File list; rendered root README below First screen and H2/H3 carry most narrative
About sidebar Description, Website, Topics, releases shortcut, license, languages Keep Description and README first paragraph consistent; Website should match the primary outbound CTA
Other tabs Issues, PRs, Actions, etc. Engagement and freshness signals

Website field: Maintained via repo Settings / About edit; prefer one canonical docs or product URL aligned with README links.

In-site discovery (high level)

Entry Role Caveat
Trending Time-windowed visibility Formula is not public; never promise ranking
Explore Collections, themes, programs Useful for patterns and seasonal campaigns
Topics Topic pages tied to repository topics Aligns with Topics metadata (see Topics section below)
Search Query across repos and users README + About + topics drive match quality

UI and URLs evolve; verify on github.com.

flowchart LR
  discovery[Discovery or referral]
  home[Repository home]
  readme[README and About]
  outbound[Site or docs]

  discovery --> home
  home --> readme
  readme --> outbound

Repository Name, About & README (SEO/GEO Priority)

Ranking weight (GitHub + Google): Repository name & About ≈ highest; Topics ≈ high; README ≈ high.

Repository Name

Practice Guideline
Descriptive Hint at what the project does
Keyword-rich Include primary keywords (markdown-editor not my-project)
Hyphens Separate words (react-component-library)
Concise Shorter = memorable, shareable

About Section (Description)

Limit Guideline
350 chars Hard limit; GitHub enforces
~128 chars Optimal for brevity; often displayed fully
Content Primary keyword + natural variations; what it does, who it's for; link to website or docs if space

Example: "A fast, lightweight markdown editor for React with live preview, syntax highlighting, and export to PDF. Built with TypeScript."

Topics

Limit Guideline
6–20 topics Max 20; 6–10 recommended
~50 chars each Per topic
Format Lowercase, hyphens, numbers only
Mix Technology (react, python), purpose (cli, library), category (seo, ai-tools), community (hacktoberfest)

Underutilized but highly effective for discoverability and GEO.

README Structure & Components

Targets repository (project) READMEs unless noted. Profile README overrides: shorter, fewer sections—see Profile README (username/username) above.

Section Purpose SEO/GEO
Title + tagline H1 + 1–2 sentence summary; keywords in first paragraph Critical; first 100 words weighted
Table of contents Links to H2/H3; for long repo READMEs (often >500 words). Usually skip on profile README Navigation; crawlability
Installation / Quick start Prerequisites; exact commands; copy-paste ready Use-case clarity
Usage examples Code blocks; common scenarios Citable; extractable
Screenshots / GIFs Demo, output; alt text required Engagement; accessibility
Badges Build, version, license Trust signals
Contributing Link to CONTRIBUTING.md Community signal
License Link to LICENSE Completeness

Word count: No hard limit; 500–1,500 words typical for product / library repos. Lead with value; expand later. Profile README: prefer dense brevity—long-form belongs on the canonical site or in pinned repos’ own READMEs.

README GEO / AI Citation

Practice Guideline
Answer-first Direct answer in first 1–2 sentences (40–60 words); profile README may compress to one punchy tagline under H1 if outbound links carry the rest
Short paragraphs 2–3 sentences max; extractable clarity
Question-style headings H2/H3 as questions where relevant (repository READMEs); on profile README, optional — clarity of sections matters more than question phrasing
Data inclusion Stats, numbers; cited content ~40% more likely to include data
Freshness Update regularly; ~76% of cited content updated within 30 days

Entity signals: Clear project name, author, maintainer; consistent identity. See entity-seo.

README Checklist — repository (default)

  • Project title with keywords
  • Concise description in first paragraph
  • H2/H3 structure; alt text for images
  • Installation + usage examples
  • Screenshots or demo
  • Badges; Contributing; License
  • Internal links to related docs/repos
  • 6–20 topics on repo

(For profile username/username, use the shorter Profile README checklist under Surfaces—not every row above applies.)

Parasite SEO on GitHub

Key Surfaces

Surface Use
README Landing page for repo; keyword-optimized summary, headings, links
GitHub Pages Static site; blog, FAQ, docs; additional ranking opportunities
Gists Micro-content; long-tail keywords; link to repos or external resources
Wiki Keyword-rich documentation
Issues Q&A, discussions; indexable

GitHub Pages vs README

Surface Role
README First impression; Stars/forks; short pitch and deep links
Pages Multi-page static site: long docs, blog, changelog

Default URL patterns: A user or organization site often uses a username.github.io repository and serves at https://username.github.io. A project site is published from a given repo and typically appears at https://username.github.io/repository/ (path may vary with settings). See About GitHub Pages.

Limits: Build size, bandwidth, and build-frequency caps change over time—cite GitHub Pages limits when users need numbers, not hard-coded figures from this skill.

Optimization

Element Practice
Repository title Primary keywords; descriptive; hyphens
About 350 chars max; keyword-rich; primary keyword + natural variations
Description Secondary keywords; link to website or resources
README Keyword-optimized summary first; headings, bullet points; screenshots; links to docs, tutorials
Topics / tags 6–20 relevant topics; 50 chars each
GitHub Pages Mobile-friendly; metadata; blog/FAQ for extra keywords

Gists for Micro-Content

  • Target specific long-tail keywords
  • Link back to larger repos or external resources
  • Share code snippets, small utilities

Community Engagement

  • Respond to issues and PRs; builds trust
  • Contribute to popular projects; backlinks, visibility
  • Keep repos updated; outdated = lower credibility

GEO on GitHub

Factor Practice
README clarity Clear, citable paragraphs; direct answers
Documentation Structured; AI tools parse well
Entity signals Clear project, author identity; see entity-seo
Consistency Active maintenance; engagement (stars, forks, watchers)

Repository archetypes

Archetype Intent First-screen emphasis
Product / library Installable software, SDK, CLI, service Install, quickstart, proof (CI, license), support path
Curated / resource Awesome-style lists, indexes Scope, curation bar, contribution rules
Personal profile hub Public username/username README on the profile Identity + canonical links + pinned flagship repos; no duplication of full product READMEs

Match metrics to type: curated lists optimize for trust and backlinks; product repos optimize for adoption and issue quality.

Curated / Navigation Lists (Awesome-Style)

Awesome lists = Curated, topic-specific resource lists on GitHub. Function like navigation directories; high traffic, backlinks, discovery. sindresorhus/awesome (441K+ stars) is the master list; 6,500+ curated lists exist across topics.

Examples by Category

Category Examples
Master list sindresorhus/awesome — hub of all awesome lists
SEO / Marketing awesome-seo, awesome-ai-seo, bmpi-dev/awesome-seo
AI / ML awesome-ai-tools, AITreasureBox, awesome-ai
Dev tools awesome-tools, awesome-cli, awesome-nodejs
Languages awesome-python, awesome-javascript, awesome-go
Frontend / Backend awesome-react, awesome-vue, awesome-django
Other awesome-security, awesome-gaming, awesome-databases

When to Create

  • You have a niche with many quality resources to curate
  • Existing lists lack coverage of your topic
  • You want a backlink asset and topical authority

List Structure (sindresorhus/awesome guidelines)

Element Practice
Title Clear, focused (e.g., "Awesome SEO," "Awesome AI Tools")
Description Succinct; scope clear
Sections Categorized (e.g., Tutorials, Tools, Articles)
Items Curated, not collected; only include what you recommend
Item format - [Name](URL) - Brief description of why it's awesome
License CC0 or similar
Contributing contributing.md for PR process

Getting Listed vs. Creating

Action Use
Submit to existing list PR to awesome-* repos; follow list format; contact maintainer
Create new list When no list exists for your niche; follow awesome guidelines
Link between lists Link to other awesome lists that cover subjects better

Discovery

  • sindresorhus/awesome — Master list of awesome lists
  • AwesomeSearch — Search across awesome lists
  • more-awesome — Directory of awesome lists

Common Mistakes

Mistake Avoid
Ignoring engagement Not responding to issues/PRs reduces trust
Irregular updates Outdated repos signal inactivity
Incomplete docs Lack of clear descriptions frustrates users
Generic titles Missing keywords reduces discoverability
Thin awesome lists Low-quality or uncurated items hurt credibility
Profile README = product README Pasting install/Contributing/screenshot-heavy templates on username/username — use the profile checklist
Link sprawl on profile Same homepage/social/email repeated in badges, tables, and long copy — consolidate

Output Format

  • Use case (parasite SEO / GEO / curated list)
  • Surface scope (profile vs specific repository; README vs Pages)
  • Repository name, About, Topics (if optimizing metadata)
  • Surface (README, Pages, gist, awesome repo)
  • README structure (sections, word count, GEO practices if applicable) — if profile README, cite short outline + deduped links + optional widgets per Profile README section above
  • Optimization (keywords, structure, links)
  • Ready-to-use copy or structure where applicable

Related Skills

  • parasite-seo: Parasite SEO strategy; GitHub as Tier 2 technical platform
  • generative-engine-optimization: GEO strategy; GitHub for AI citation
  • open-source-strategy: Open source commercialization; GitHub as primary distribution
  • directory-submission: Directory and curated list submission; awesome lists as curated lists
  • link-building: GitHub as link acquisition; repos, gists, awesome lists
  • entity-seo: Entity signals (project, author); Organization, Person
Dependencies:
指导分析Google Search Console数据,涵盖性能指标、索引状态、Core Web Vitals及API使用。提供图表解读最佳实践与调查工作流,帮助用户监控搜索表现并获取可执行洞察。
用户希望分析GSC数据或搜索结果表现 提及索引报告、核心网页指标、增强功能或Insights报告 讨论点击量、展示量、CTR、平均排名等具体指标 需要使用Search Console API进行程序化访问
skills/kostja94_marketing-skills/google-search-console/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill google-search-console -g -y
SKILL.md
Frontmatter
{
    "name": "google-search-console",
    "metadata": {
        "version": "1.5.1"
    },
    "description": "When the user wants to analyze Google Search Console data, use the GSC API, or interpret search performance. Also use when the user mentions \"GSC,\" \"Search Console,\" \"indexing report,\" \"Core Web Vitals,\" \"Enhancements,\" \"Insights report,\" \"search performance,\" \"search queries,\" \"search performance report,\" \"URL inspection,\" \"impressions,\" \"CTR,\" \"average position,\" \"index coverage,\" \"GSC data analysis,\" \"Search Console API,\" or \"searchanalytics.query.\" When the user wants to rewrite title tags (not only report on them), use title-tag. For meta description rewrites, use meta-description."
}

Analytics: Google Search Console

Guides analysis of Google Search Console (GSC) data: performance metrics, indexing, sitemaps, Core Web Vitals, and rich results. Covers best practices for monthly monitoring and actionable insights.

When invoking: On first use, if helpful, open with 1-2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope

  • Performance: Clicks, impressions, CTR, average position; API for export
  • Insights: Simplified overview; top/trending content and queries
  • Indexing: Pages indexed, pages not indexed, reasons (Coverage)
  • Technical: Sitemaps, Core Web Vitals, Enhancements
  • API: searchanalytics.query for programmatic access
  • Methodology: How to read charts, avoid common mistakes, correlate with releases

Analysis Best Practices

Chart Reading

Practice Why
Focus one metric at a time Stacked bar charts hide fluctuations; toggle off other metrics to see each clearly
Don't compare just two points End-of-month vs prior month misses mid-month drama; examine full trend
Check beyond top 10 Many reports default to top 10; scroll or paginate for more rows
Screenshot charts GSC retains limited history; save images for future reference
Record in spreadsheet Export at month-end; use formulas to track correlations over time
Track release dates Join dev standups, read release notes; correlate GSC shifts with deployments

Investigation Workflow

  1. Pinpoint date: When did the metric change?
  2. Correlate: Any releases, CMS changes, server maintenance, third-party code?
  3. Decide: Investigate, correct, overlook, or monitor closely
  4. Loop in: Product or dev team for root cause

Key Reports & Metrics

1. Performance (Search Results)

Location: Performance ? Search results

Metric Use
Clicks Traffic from Google Search
Impressions How often site appeared in results
CTR Whether users think page answers query
Average position Ranking trend

Dimensions: Query, page, country, device, date. Filter by search type: web, image, video, news. Use to find low-CTR high-impression pages (title/meta optimization opportunities).

Search appearance: AMP, blue link, rich results (filterable in UI and API).

CTR Benchmarks by Position

Use to compare actual CTR vs expected. Benchmarks vary by SERP features (AI Overviews, featured snippets). Zero-click: When SERP features satisfy intent without a click, organic CTR drops; factor into expectations. See serp-features (Zero-Click section), featured-snippet. Clean SERPs:

Position Expected CTR (baseline) With AI Overviews (lower)
1 25-35% ~19%
2 12-18% ~12%
3 8-12% ~7%
4-5 5-7% ~5%
6-10 2-5% 2-5%

Interpretation: If actual CTR is below expected for your position, prioritize title/meta optimization. Over 90% of first-page results have CTR below 10%; significant upside exists.

Low CTR, High Impressions: Optimization Workflow

  1. Identify: Sort by impressions; filter positions 1-10; 1,000+ monthly impressions
  2. Compare: Actual CTR vs expected for position (see table above)
  3. Gap: e.g., position 4 at 2% CTR vs expected 5-7% ? ~3-5% uplift potential
  4. Action: Optimize title and meta per title-tag, meta-description; add schema for rich results (+10–20% clicks)

Rich Results & CTR

Pages with review stars, FAQ schema, or other rich snippets see 10-20% more clicks. See schema-markup.

2. Insights Report

Location: Performance ? Insights (or Overview)

Simplified overview; replaces standalone Search Console Insights. Data from GSC only (GA data removed Dec 2024).

Card Use
Clicks and impressions Site visibility and click effectiveness
Your content Top, trending up, trending down pages
Queries leading to your site Top, trending up, trending down queries
Top countries Geographic audience
Branded vs non-branded Brand recognition (AI-labeled; may mislabel)
Additional traffic sources Image, Video, News search, Discover

Trending: Based on click change vs previous period. Click items to jump to Performance report filtered to that item.

Query groups: Similar queries grouped; group name = best-performing query. Not available for sub-properties or low-impression sites.

3. Page Indexing (Coverage)

Location: Indexing ? Page indexing

Status grouping (updated): Valid + Valid with warning ? Indexed. Error + Excluded ? Not indexed.

Indexed vs Not indexed are complementary: Not all site content should be indexed. Login, admin, duplicate content, legal boilerplate, and low-value pages often intentionally use noindex. Indexed and non-indexed pages can reference each other (e.g., sitemap includes indexable URLs; noindex pages still exist and link internally). Non-indexed is not inherently a problem--investigate only when important pages are excluded. See indexing (noindex usage) and robots-txt (crawl control) for when to exclude.

Metric Action
Pages indexed Turn off "Pages not indexed" to view alone; watch for drops
Pages not indexed Turn off "Pages indexed" to view alone; watch for spikes. Distinguish intentional (noindex, robots) from accidental

Filter: All submitted pages / Unsubmitted pages only (dropdown near top).

Source column: Indicates whether issue is caused by website or Google.

Why pages are not indexed: Drill into reasons and example URLs. Common culprits:

  • Duplicate content
  • Noindex tags
  • Redirect errors
  • 5xx errors
  • 404 errors
  • Blocked by robots.txt
  • Discovered ? currently not indexed
  • Crawled ? currently not indexed

Quick check: If trend line is stable, spend ~3 seconds; move on. Investigate if fourth column (trend) shifts.

Diagnosis workflow: GSC Coverage ? click Issue ? view sample URLs ? identify pattern ? fix (see indexing for fix actions).

Coverage issue types:

Issue Meaning Next step
Crawled - currently not indexed Crawled but not indexed See indexing
Excluded by "noindex" tag Intentionally excluded; often valid (login, admin, legal, etc.) Ignore if expected; verify important pages not accidentally noindexed
Blocked by robots.txt Crawl blocked See robots-txt; may be intentional
Redirect / 404 Redirect or missing Fix URL or redirect
Duplicate / Canonical Duplicate content Usually OK; keep canonical

URL Inspection: Verdicts: "URL is on Google," "URL is on Google, but has issues," "URL is not on Google." Use for important pages; verify canonical, internal links, sitemap; Request indexing if needed.

4. Video Indexing (If Applicable)

Location: Indexing ? Video indexing

  • Videos indexed / Videos not indexed: Toggle off the other for clear view
  • Why videos are not indexed: Thumbnail blocked, invalid size/format, not in main content, etc.

See video-optimization for video SEO; youtube-seo for YouTube.

5. XML Sitemaps

Location: Indexing ? Sitemaps

Check Action
Status Confirm each sitemap says "Success"
URLs indexed Click sitemap ? see indexed count; drops indicate indexing issues
Bellwether sitemaps For large sites, monitor templated sitemaps (by country, language, division)

Enterprise: Glitches can block new URL crawling, cause hreflang confusion, delay fresh content discovery.

6. Core Web Vitals

Location: Experience ? Core Web Vitals

Priority: Mobile first (Google's higher expectations for mobile).

Metric Mobile Desktop
Good URLs Target Secondary
Needs improvement Fix Monitor
Poor URLs Fix Monitor

Why URLs don't have good score: Click "Open report" → grouped example URLs by issue type. For threshold values and fixes, see core-web-vitals.

Tip: Historical chart is short; export to spreadsheet for longer trends. Share with dev team regularly; correlate dates with releases.

Layout (updated): Two tables--Poor or Need improvement; Good (click "View data about usable pages").

7. Enhancements (Rich Results)

Location: Experience ? Enhancements (Product snippets, Merchant listings under Shopping)

Status (updated): Two-tier?invalid (critical issues, may not appear) vs valid (no critical issues; may still have warnings). Warnings no longer top-level.

Type Examples
Content Breadcrumbs, FAQ, Events, Videos (see video-optimization), Job postings, Review snippets, Q&A, Discussion forums
Shopping Product snippets, Merchant listings
Other Recipes, Datasets, Hotels, Vacation rentals, Profile pages, Practice problems, Math solvers, Image metadata

Note: Reports show sample items, not full list. Use URL Inspection for unlisted URLs.

8. AI Overviews (GSC Limitation)

  • GSC: AI Overviews clicks/impressions are not separated from organic in Performance report.
  • Workaround: Filter queries that tend to trigger AI Overviews to estimate AI-driven visibility:
(?i)^(who|what|where|when|why|how|which|is|are|can|does|should)|\b(vs|versus|compare|difference|pros and cons|guide|tutorial|best|top|list)\b

For GA4 AI traffic tracking, see ai-traffic-tracking.

9. Links & Disavow

Location: Links (inbound links), Security & Manual Actions

  • Links report: View links to site and pages; anchor text distribution.
  • Disavow file: Submit via GSC when necessary (manual penalty, toxic links). Use sparingly; over-disavowing can harm. See backlink-analysis for when to disavow.

Search Console API

Method: searchanalytics.query() --exposes all Performance report data.

Metrics

Clicks, Impressions, CTR, Position.

Dimensions

date, query, page, country, device. Search appearance (AMP, blue link, rich results). Filter by search type: web, image, video, news.

Limits

Limit Value
Rows per day per search type per property 50,000
Rows per response 25,000 (use pagination: startRow, rowLimit)
Data availability 2-3 days after

Tip: Run daily queries for one day of data to avoid quota. Verify data presence first (dimensions: date only, no filters).

Optimization: Gzip compression; fields parameter for partial responses; pagination for large datasets.

References: Search Console API, searchanalytics.query

Monthly Audit Checklist

  • Performance: Clicks, impressions, CTR, position trends
  • Insights: Top/trending content and queries (if available)
  • Page indexing: Indexed vs not indexed (isolated views)
  • Why not indexed: Trend lines for key reasons
  • Sitemaps: All "Success"; indexed URL counts stable
  • Core Web Vitals: Mobile good/needs improvement/poor
  • Enhancements: No new invalid items (critical issues)
  • Links: No manual actions; disavow only if needed (see backlink-analysis)
  • Data exported to spreadsheet (month-end snapshot)
  • Charts screenshotted for history
  • Release notes reviewed for correlation

Output Format

  • Summary: Key findings, trends, anomalies
  • Metrics: Specific numbers and date ranges
  • CTR analysis: Actual vs expected by position; low-CTR high-impression pages
  • Title/meta opportunities: Pages with CTR gap; specific optimization suggestions
  • Action items: Prioritized fixes (indexing, CWV, sitemaps, enhancements, title/meta)
  • Correlation: Suspected causes (releases, config changes)
  • Next steps: Monitoring plan, dev handoff

Related Skills

  • title-tag, meta-description, page-metadata: Title and meta optimization for low-CTR pages; hreflang
  • xml-sitemap: Fix sitemap errors
  • indexing: Resolve indexing issues
  • core-web-vitals: CWV optimization; fix LCP, INP, CLS
  • mobile-friendly: Mobile Usability report; mobile-first indexing
  • schema-markup: Fix structured data / rich results
  • backlink-analysis: When to disavow; backlink audit
  • seo-monitoring: Full SEO data analysis, benchmark
用于生成页面内的步骤区块,包含有序步骤及可选的HowTo JSON-LD结构化数据。适用于教程、指南等场景,区分于FAQ和完整页面模板,确保内容与Schema匹配。
用户要求创建或优化步骤区块 提及HowTo section、quick start、tutorial block 涉及HowTo schema或JSON-LD生成
skills/kostja94_marketing-skills/howto-section/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill howto-section-generator -g -y
SKILL.md
Frontmatter
{
    "name": "howto-section-generator",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to create, optimize, or audit a HowTo section block—an in-page block of ordered steps with optional Schema.org HowTo JSON-LD. Also use when the user mentions \"HowTo section,\" \"how-to section,\" \"steps section,\" \"quick start,\" \"walkthrough,\" \"tutorial block,\" \"3 steps,\" \"N steps,\" \"simple steps,\" \"tutorial steps,\" \"step-by-step block,\" \"HowTo schema,\" \"HowTo JSON-LD,\" \"instruction steps,\" \"numbered steps SEO,\" \"horizontal tabs for steps,\" or \"procedure section.\" This skill is for a section inside a page, not a full page template—use article-page-generator, docs-page-generator, or tools-page-generator for page-level layout. For FAQ Q&A blocks, use faq-page-generator. For structured data details beyond HowTo, use schema-markup. For article body copy only, use article-content."
}

Components: HowTo Section

Guides HowTo as an in-page section: a block of ordered steps (and optional HowTo JSON-LD) embedded inside article, documentation, tool, or landing pages. Not a standalone page type—parent page structure and templates come from article-page-generator, docs-page-generator, tools-page-generator, landing-page-generator, etc. Distinct from FAQ (Q&A → FAQPage) and from full article body drafting alone (article-content). schema-markup remains the source for exhaustive Schema.org property rules and type-wide tables; this skill owns section-level placement, copy, HTML, and HowTo-vs-FAQ decisions.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

HowTo Section vs FAQ Section

Dimension HowTo section FAQ section
Intent User follows ordered steps to complete a task User reads Q&A pairs for doubts
Structure Steps (1→2→3), optional tools/time/supplies Question → answer per item
Schema HowTo (Schema.org) FAQPage
UI Often horizontal tabs for steps; or numbered list in flow Often vertical accordion
Skill howto-section-generator (this) faq-page-generator

Do not mark FAQ content as HowTo or vice versa; schema must match visible content.

Placement Within the Parent Page

This section is always part of a larger page. Typical positions:

Location When
After intro (and optional TL;DR / Key Takeaways) Article: context first, then solution = steps
As the main middle of the page Tutorial-heavy article where the HowTo block carries most of the value
After product/tool context Tool or LP: short context → How to use steps → FAQ/CTA

Narrative: Align with PAS for how-to articles—Problem in intro; Agitation in brief context; Solution = the HowTo section. Answer-first still applies per step (see below).

Parent page vs URL split: Whether the parent is one article URL or a separate doc/tool URL is decided by content-strategy, article-page-generator, docs-page-generator, or tools-page-generator. This skill only defines the HowTo block; if each tab were a different ranking topic, use separate URLs (pillar/cluster). If all steps are one task, keep one page with one HowTo section (or multiple sections only if clearly separated).

Content Structure

Headings and lists

Section title (H2)

Headings should describe the topic or purpose (WCAG 2.4.6)—not just decorate. Prefer one primary H2 for the procedure; match page type and search intent.

Pattern Best for Examples
Outcome / task (default) Blog posts, guides, most informational “how to …” queries “How to [verb] [outcome]”, “[Task] step by step”
Product or tool Tool pages, LP blocks after hero “How to use [Product]”, “Using [Tool]”
Quick start / walkthrough Docs, onboarding “Quick start”, “Walkthrough”, “Get started with [X]”
Numbered hook (“In 3 steps …”, “3 simple steps to …”) Short LP/tool copy when simplicity is the message Use only if the visible <ol> (and HowTo JSON-LD step list) has exactly that many steps

Rules

  • Avoid a bare “Steps” or “Instructions” as the only H2 text when you can name the outcome—screen reader and scan users lose context.

  • Count in the title: If you use “3 steps” / “In 4 steps” in the H2, tabs, or subheads, the on-page list and HowTo schema must show the same number of steps (no extra steps only in JSON-LD).

  • Volatile UIs: If step count may change with releases, prefer non-count titles (“How to …”) and put “three main steps” in body copy if needed.

  • Language: Mirror the query (e.g. “How to …” for EN informational intent); localized pages: same intent in inLanguage as the visible heading.

  • Steps: Use semantic ordered list <ol> with <li> per step; bold the step title inside the <li> if needed.

  • Sub-steps: Nested <ol> or H3 under a step when the step is long.

  • Avoid: Fake lists built only with <div>—hurts extraction and accessibility.

Answer-first per step

  • In each step (or immediately under each step heading), give a direct answer in ~40–60 words—what to do—then tools, screenshots, edge cases.
  • Matches featured-snippet list patterns and article-content QAE (Question → short Answer → Evidence).

Word count (article context)

  • Standard how-to articles often land ~1,000–1,500 words total for a single topic; the HowTo section is often the bulk of “actionable” depth. See article-content for full ranges by type.

Featured Snippets & SERP

Format Role
List snippet (~19% of snippet formats) How-to, steps, options—use <ol> / <ul>
Schema FAQPage, HowTo, Article support identifying extractable blocks; not required for Featured Snippets
HowTo ↔ snippet HowTo maps to list-style position-zero; desktop support historically stronger; mobile may be limited

See featured-snippet, serp-features.

Schema.org: HowTo (JSON-LD)

Use case: Tutorials, procedural guides, visible step sequences in this section.

Principles (detail in schema-markup):

  • JSON-LD in <script type="application/ld+json">; properties must match visible content—no hidden-only steps.
  • Google: HowTo rich results were fully deprecated (mobile Aug 2023, desktop Sep 2023). Google Search Console removed the How-To Enhancement Report in Jan 2024. The markup does not generate rich results on any device, but you may leave it in place—it does not cause errors. Bing and AI systems may still consume HowTo schema.
  • GEO: HowTo is among types that help AI cite structured procedures (generative-engine-optimization).

Where the section lives (parent page type)

Parent page type Typical embedding
Blog / guide HowTo section inside the article body
Documentation Guides/tutorials—often TechArticle + HowTo per docs-page-generator
Free tool / calculator SoftwareApplication + HowTo for “how to use” per tools-page-generator

Multilingual: inLanguage on HowTo (and related types) aligned with hreflang; localize step text in JSON-LD. See schema-markup.

Validation: Rich Results Test, Schema.org Validator.

UI: Tabs, accordions, and crawlability

Pattern Guidance
Horizontal tabs Good for Step 1 | Step 2 | Step 3 when all steps are one topic; see tab-accordion
DOM All step content must be in the initial HTML—no AJAX load on tab click
Default open First tab or first step visible by default
Primary vs secondary If the HowTo is the page’s main value, avoid burying all steps in low-priority hidden UI; crawlers index hidden content, but primary intent should be clear

Vertical accordion for steps is less common than for FAQ; if used, same rules: server-rendered, first item expanded, content in DOM at load (rendering-strategies).

GEO

  • Clear steps, self-contained paragraphs per step, and HowTo JSON-LD help models cite procedures.
  • Layer with TL;DR / Key Takeaways at article level when appropriate (article-content, generative-engine-optimization).

Zero-click

  • Informational queries (“how to …”) often zero-click; optimize for citation in AI Overviews as well as CTR (serp-features).

Best Practices Checklist

  • One primary H2 (or clear section) for the procedure; wording matches page type (outcome vs quick start vs counted steps)
  • If the title mentions a step count, it matches <ol> length and HowTo step items
  • <ol> steps with concise, answer-first lines per step
  • HowTo JSON-LD aligned with visible steps (and totalTime / tool / supply if shown on page)
  • Not confused with FAQPage for Q&A lists
  • Tabs/accordions: full content in DOM; first panel visible
  • Validated with Rich Results Test / Schema.org Validator

Output Format

  • Placement of the section within the parent page (after intro, mid-body, before FAQ, etc.)
  • Outline: H2 structure, ordered list, optional sub-steps
  • Section title rationale: Why this H2 pattern (outcome vs quick start vs “In N steps”) fits the parent page and query
  • Copy notes: answer-first per step; length targets
  • HowTo JSON-LD outline (required properties for your case)
  • UI note (tabs vs inline list) and crawlability requirements
  • Differentiation from FAQ on the same page if both exist
  • Explicit: This output is a section block, not a full page wireframe—defer page chrome to article-page-generator / docs-page-generator / tools-page-generator as appropriate

Related Skills

  • schema-markup: HowTo JSON-LD; properties; Google/Bing/AI notes; inLanguage
  • featured-snippet: List snippets; H2/H3; 40–60 word patterns
  • serp-features: HowTo in rich results; Featured Snippet vs rich results; zero-click
  • tab-accordion: Horizontal tabs for steps; DOM; FAQ vs HowTo UI
  • heading-structure: H2/H3 hierarchy for step titles and section outline
  • article-content: How-to body copy, PAS, QAE, word counts, TL;DR
  • article-page-generator: Single post page layout, metadata, Article schema alongside a HowTo section
  • landing-page-generator: LP pages that embed a HowTo section before FAQ/CTA
  • faq-page-generator: FAQ sections; FAQPage—do not mix with HowTo schema
  • docs-page-generator: Documentation site/page structure; TechArticle + HowTo for guides
  • tools-page-generator: Tool page; SoftwareApplication + HowTo for usage instructions
  • content-strategy: Pillar/cluster; when to split topics to new URLs
  • content-optimization: Lists, headings, keyword placement in longform
  • generative-engine-optimization: GEO; citation strategy
  • rendering-strategies: SSR/SSG; content in initial HTML
  • video-optimization: If steps are primarily video-led

References

指导付费广告策略制定,涵盖渠道选择、预算分配及落地页对齐。适用于PMF验证与转化驱动场景,支持Google、Meta等多平台执行,旨在优化获客效率与ROI。
规划付费广告策略 分配广告预算 选择付费渠道 提及PPC、SEM、ROAS或PMF测试
skills/kostja94_marketing-skills/paid-ads/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill paid-ads-strategy -g -y
SKILL.md
Frontmatter
{
    "name": "paid-ads-strategy",
    "metadata": {
        "version": "1.7.0"
    },
    "description": "When the user wants to plan paid ads strategy, allocate ad budget, or choose paid channels. Also use when the user mentions \"paid ads,\" \"paid media,\" \"PPC,\" \"SEM,\" \"web ads,\" \"app ads,\" \"TV ads,\" \"CTV,\" \"OOH,\" \"banner ads,\" \"ad network,\" \"ad alliance,\" \"Taaft ads,\" \"Shopify App Store ads,\" \"Google Ads,\" \"Meta Ads,\" \"PMF testing,\" \"PMF validation,\" \"test product-market fit with ads,\" \"ad spend,\" \"ad budget,\" \"ROAS,\" \"paid acquisition,\" \"Quality Score,\" or \"ad-to-page alignment.\" For Google Ads execution, use google-ads. For Meta Ads execution, use meta-ads. For landing page alignment, use landing-page-generator."
}

Strategies: Paid Ads

Guides paid ads strategy: when to use paid acquisition, channel selection, budget allocation, ad-to-landing-page alignment, and cross-platform best practices. Paid ads (Google Ads, Meta, LinkedIn, Reddit, TikTok, etc.) deliver immediate reach and targeting; use when PMF is validated and budget allows.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Platform-specific execution: Web: google-ads, meta-ads, linkedin-ads, reddit-ads, tiktok-ads. App: app-ads. TV/Streaming: ctv-ads.

Before Starting

Check for project context first: If .agents/project-context.md or .claude/project-context.md exists, read it before asking questions.

Gather this context (ask if not provided):

Area Questions
Goals Primary objective? (Awareness, traffic, leads, sales, app installs) Target CPA/ROAS? Monthly budget? Constraints?
Product & offer What are you promoting? Landing page URL? What makes it compelling?
Audience Ideal customer? Problem you solve? What do they search for or care about? Existing customer data for lookalikes?
Current state Run ads before? What worked/didn't? Pixel/conversion data? Funnel conversion rate?

Two Modes: PMF Testing vs Conversion-Driven

Mode When Goal Budget Metrics
PMF testing Pre-PMF; idea validation Validate demand, messaging, pricing, audience before building $47–500; small CTR, sign-up rate, bounce rate; low CTR/high bounce = messaging issue
Conversion-driven PMF validated Commercialization; scale; efficient acquisition Scale; ROAS target ROAS, CAC, conversion rate

PMF testing: Use paid ads as a learning tool—simple landing page, "Join Waitlist" or "Get Early Access" CTA, test ad variations (value props, price points, audiences). No full product needed. See google-ads for PMF testing setup.

Conversion-driven: Full funnel; conversion tracking; scale budget. Avoid large-scale paid acquisition before PMF—see cold-start-strategy.

Reference: Marketing Cactus – Using Google Ads to Test Product-Market Fit

When to Use Paid Ads

Condition Rationale
PMF validated (conversion mode) Product-market fit confirmed; scale acquisition
PMF testing (validation mode) Small budget; validate demand, messaging, pricing before building
Budget available CAC and LTV modeled (conversion); or $47–500 for testing
Need speed Organic takes months; paid delivers traffic immediately

When NOT to Use Paid Ads

Condition Rationale
Pre-PMF + large scale Large-scale paid acquisition before PMF wastes budget; use PMF testing mode or cold-start channels first
No conversion tracking Can't measure ROAS; optimize blindly (PMF testing uses CTR/sign-up)
Organic can work SEO, content, community may achieve goal at lower cost; see seo-strategy

Cold start: For acquisition, use Product Hunt, Reddit, directories, founder-led outbound first. For PMF validation, small-budget Google Ads + landing page is valid. See cold-start-strategy, google-ads.

Ad Formats by Medium

Paid ads span multiple media beyond web. Choose by product type and audience.

Medium Format Best for Skill
Web Search, Display, Social (landing page) Websites, SaaS, e-commerce, leads google-ads, meta-ads, linkedin-ads, reddit-ads, tiktok-ads
Display / Banner Ad networks, programmatic, banner ads Brand awareness; retargeting; publisher sites display-ads
App App install, in-app ads, App Store/Play Store Mobile apps; user acquisition (UA) app-ads
TV / Streaming CTV, OTT, linear TV Brand awareness; streaming viewers; 95% ad completion ctv-ads
Directory / Marketplace Taaft, Shopify App Store, G2, Capterra High-intent directory visitors; app/software discovery directory-listing-ads
Out-of-home (OOH) Billboards, transit, DOOH Brand reach; unskippable; real-world exposure

Web drives to landing pages; Display = banner/network on publisher sites; App = install or in-app; TV/CTV = awareness or QR/URL; Directory = paid placements within Taaft, Shopify App Store, G2, Capterra.

Platform Selection (Web)

Platform Best for Use when
Google Ads High-intent search traffic People actively search for your solution
Meta (FB/IG) Demand gen, visual products Creating demand; strong creative assets
LinkedIn Ads B2B, decision-makers Job title/company targeting matters; higher ACV
Reddit Ads Niche communities, discussion-driven Audience in specific subreddits; authentic, value-first messaging
TikTok Ads Younger demographics, viral creative Audience 18–34; video capacity
X (Twitter) Ads Tech audiences, thought leadership Audience active on X; timely content

Decision tree: High intent? → Google Search. No? → Awareness: Meta/TikTok/YouTube. B2B: LinkedIn. E-commerce: Meta + Google Shopping. App? → app-ads. Streaming/TV? → ctv-ads. Display/banner? → display-ads. Directory (Taaft, Shopify, G2)? → directory-listing-ads.

Dual-Channel Strategy

Treat Google Ads and Meta Ads as complementary, not competing. Google captures high-intent search at moment of need; Meta creates and shapes demand by introducing brands to new audiences. A dual-channel approach often outperforms single-channel; use unified KPIs (prioritize profit over volume). See google-ads, meta-ads for platform setup.

Budget Allocation

Phase Approach
Testing (2–4 weeks) 70% proven/safe; 30% new audiences/creative
Scaling Consolidate into winners; increase 20–30% at a time; wait 3–5 days between increases

Ad Copy Frameworks (Cross-Platform)

Framework Structure
PAS Problem → Agitate pain → Introduce solution → CTA
BAB Current painful state → Desired future state → Your product as bridge
Social Proof Impressive stat/testimonial → What you do → CTA

Creative Best Practices

Image ads: Clear product screenshots; before/after; stats as focal point; human faces (real); text overlay <20%.

Video ads (15–30 sec): Hook (0–3s) → Problem (3–8s) → Solution (8–20s) → CTA (20–30s). Captions always; vertical for Stories/Reels; native feel outperforms polished.

Creative testing order: 1) Concept/angle 2) Hook/headline 3) Visual style 4) Body copy 5) CTA.

Retargeting Overview

Funnel stage Audience Message
Top Blog readers, video viewers Educational, social proof
Middle Pricing/feature visitors Case studies, demos
Bottom Cart abandoners, trial users Urgency, objection handling

Exclusions: Existing customers; recent converters (7–14d); bounced visitors (<10s).

Budget & Metrics

Metric Purpose
ROAS Return on ad spend; primary paid channel metric
CAC Cost per acquisition; compare to LTV
Quality Score (Google) Ad relevance, LP experience; higher = lower CPC
CPC/CPM Cost per click/impression; platform-specific

Quantified benchmarks: Quality Score 5→7 can reduce CPC by 30–50%. Smart bidding (Target CPA/ROAS) typically needs ≥30 conversions in 30 days to work effectively. Proper optimization can increase conversion rates 30–150% and reduce CPA 20–50%.

Attribution & Incrementality

Incrementality measures the additional value marketing creates beyond what would occur without it—causal impact, not just correlation. Essential in privacy-first environments (cookies limited, third-party data restricted); incrementality testing does not depend on cross-device tracking.

Approach Use when
Incrementality testing Holdout experiments (geo, channel); isolate true lift; justify budget
Attribution UTM, last-click, multi-touch; compare channels; see traffic-analysis
Advanced conversion Server-side (Enhanced Conversions, CAPI); better accuracy

Principle: Measure incrementality and downstream value, not just cost metrics. Major platforms have lowered experiment thresholds (e.g., Google Ads incrementality experiments from $100K+ to ~$5K minimum spend).

Ad-to-Landing-Page Alignment

Principle Practice
Ad promise on page Ad copy (e.g. "15% off") must appear immediately; mismatch increases bounce
Post-click experience Ads drive traffic; LPs drive conversions; optimize full funnel
Quality Score Well-optimized LPs improve Google Quality Score → lower CPC
Mobile-first CTA above fold; thumb-reachable; fast load (<3s)

See landing-page-generator for LP structure and conversion optimization.

Common Mistakes to Avoid

  • Launching without conversion tracking
  • Too many campaigns (fragmenting budget)
  • Not giving algorithms learning time (2–4 weeks; PMax needs 6+ weeks)
  • Single ad per ad set; not refreshing creative (fatigue)
  • Spreading budget too thin; big budget changes

Weekly Optimization Cadence

Check Action
Creative fatigue Refresh when CTR or conversion rate drops; test new concepts
Learning phase Ensure sufficient volume (e.g., 50+ conv/week Meta; 30+ conv/30d Google for smart bidding)
Brand term share If brand terms >30% of conversions, consider reallocating to non-brand
Placement/spend Flag if any single placement exceeds 15% of total spend

Affiliate Brand Bidding

When running affiliate programs: prohibit affiliates from bidding on your brand terms in Google Ads. Monitor paid search; use brand monitoring tools. See affiliate-page-generator.

Competitor Brand Bidding

When: Bid on "[Competitor] alternative," "[Competitor] vs [You]" to intercept high-intent traffic. Google allows competitor terms as keywords; ad copy cannot use competitor names without permission.

Landing page: Use a dedicated comparison/alternatives page, not a blog. Users searching competitor brands expect direct alternatives; blog increases bounce. See alternatives-page-generator, google-ads Competitor Brand Keywords.

Output Format

  • Channel recommendation (and route to platform skill if needed)
  • When to start (PMF check; budget readiness)
  • Budget approach (test budget; ROAS target)
  • Landing page requirement (ad-to-page alignment)
  • Metrics to track (ROAS, CAC, Quality Score)

Related Skills

  • google-ads, meta-ads, linkedin-ads, reddit-ads, tiktok-ads: Web platform setup
  • reddit-posts, linkedin-posts, tiktok-captions, twitter-x-posts: Platform (organic) skills; creative alignment with reddit-ads, linkedin-ads, tiktok-ads, X Ads
  • app-ads: App install, UA; Google App Campaigns, Apple Search Ads
  • ctv-ads: CTV, OTT, streaming ads
  • display-ads: Ad networks, banner ads, programmatic display
  • directory-listing-ads: Taaft, Shopify App Store, G2, Capterra paid placements
  • landing-page-generator: LP structure for paid traffic; ad-to-page alignment
  • alternatives-page-generator: Competitor brand keyword ads → dedicated LP (not blog); comparison page structure
  • cold-start-strategy: When NOT to use paid ads
  • pmf-strategy: PMF validation; when to use PMF testing vs conversion-driven mode
  • seo-strategy: Organic vs paid
  • integrated-marketing: PESO model; paid as one channel
  • keyword-research: Keywords inform paid search targeting
  • traffic-analysis: UTM for paid attribution
  • analytics-tracking: Conversion tracking; ROAS measurement; incrementality experiments
指导在Medium、Reddit等高权威第三方平台发布内容以获取排名和反向链接的寄生SEO策略,利用平台域名权重快速获得搜索可见性。
用户提到寄生SEO或 barnacle SEO 寻求无需自建网站的高权重重定向方案 询问 Medium、Reddit、GitHub 等平台优化
skills/kostja94_marketing-skills/parasite-seo/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill parasite-seo -g -y
SKILL.md
Frontmatter
{
    "name": "parasite-seo",
    "metadata": {
        "version": "1.1.0"
    },
    "description": "When the user wants to choose or execute third-party platform SEO (high-authority sites for rankings or backlinks). Also use when the user mentions \"parasite SEO,\" \"parasitic SEO,\" \"barnacle SEO,\" \"hosted content,\" \"third-party publishing,\" \"Medium SEO,\" \"Reddit SEO,\" \"GitHub parasite SEO,\" \"LinkedIn Pulse SEO,\" \"high-authority platforms,\" \"distributed authority,\" \"borrow domain authority,\" or \"rank without own website.\" For GitHub-specific playbooks, use github. For Medium.com posts, use medium-posts. For Grokipedia, use grokipedia-recommendations. For AI answer-engine visibility (not platform selection), use generative-engine-optimization."
}

SEO: Parasite SEO

Guides parasite SEO (also "barnacle SEO")—publishing optimized content on high-authority third-party platforms (Medium, Reddit, LinkedIn, Grokipedia, etc.) to leverage their domain strength for rankings and backlinks, bypassing the need to build your own site's authority from scratch.

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

What Is Parasite SEO

Parasite SEO = Placing content on high-authority platforms to leverage their domain strength for rankings and AI citation. Part of "Distributed Authority Engineering."

Instead of waiting months for your own domain to gain trust, you publish on established platforms that Google already trusts. Content can rank on page one within days rather than months because Google crawls these platforms frequently and inherits their domain trust.

Best for: Beginners testing niches; local businesses needing quick leads; demand validation; supplementing traditional SEO.

Why It Works

Factor Effect
Domain authority Platforms (DA 90+) rank faster than new sites
Crawl frequency Google crawls Reddit, Medium, LinkedIn often
AI citation ChatGPT, Perplexity cite Reddit, Quora, wikis
UGC preference Algorithm updates favor UGC platforms as trustworthy
Technical foundation High-authority sites have strong technical SEO, fast load, good UX

Platform Tiers

Platform examples are illustrative only. No endorsement implied.

Tier Platform type Examples GEO / AI citation
Tier 1 GEO authority Medium, Reddit, LinkedIn Articles, Quora Very high
Tier 2 Technical authority GitHub, Stack Overflow, Dev.to High; expertise signals
Tier 3–6 Controlled / entity / wiki WordPress.com, Blogger, HN, Grokipedia Varies

Platform Notes

Platform Use case Notes
LinkedIn Pulse B2B, agencies, professional content Keywords in headlines; often ranks above corporate blogs
Medium How-to, thought leadership Use canonical link if reposting; storytelling works
Reddit Product reviews, alternatives, discussions Comprehensive guides; upvoted threads rank well
Quora Q&A, long-tail informational Answer industry questions; link to resources naturally
YouTube Video search, how-to, reviews Titles, descriptions, tags; watch time matters
GitHub Repos, README, Pages, gists, awesome lists Tier 2 technical authority; very high AI citation; see github
Grokipedia AI encyclopedia See grokipedia-recommendations for contribution flow
Free web builders WordPress.com, Wix Indexable content; lower authority than above

Keyword & Content Strategy

Element Practice
Keyword targeting Intent-driven; mid-competition and long-tail; clear monetization potential
Content depth 1,500+ words for competitive keywords; comprehensive coverage
Keyword placement Primary keyword in title and first 100 words; headers, subheadings, body
Semantic relevance Natural language; avoid keyword stuffing
Content clustering Create clusters around topics; link related articles within platform

On-Page Optimization

Element Practice
Title Target keyword; platform + search-optimized
Meta / description Where allowed; keyword usage
Internal links Link to other parasite content on same platform
Visuals Images, infographics, videos improve engagement
CTA Strong, relevant call-to-action

Link Building Through Parasite SEO

Tactic Purpose
Tier-2 backlinks Build links from Web 2.0s, guest posts pointing to your parasite content
Strategic linking Link from parasite content to owned site; natural, not spammed
Cross-platform linking Link related content across platforms; network effect

Advanced Techniques

Technique Use
Content clustering Multiple related articles on same platform; topical authority
Cross-platform syndication Adapt core content per platform; different keywords; avoid duplicate content
Keyword layering Multiple related keywords in one piece; maximize ranking potential

Risks & Compliance

Risk Mitigation
Google Site Reputation Abuse (2024) Targets manipulative third-party content. Ensure genuinely useful content; not purely for link/mention manipulation.
Platform bans Spammy, promotional content gets removed; accounts suspended
Duplicate content Use canonical when republishing; avoid thin content
Over-optimization Prioritize user value over aggressive optimization

Common Mistakes

Mistake Avoid
Quality neglect Low-quality, thin content doesn't sustain; harms SEO
Policy violations Check platform guidelines; adhere to policies
Short-term tactics Build sustainable relationships; create value consistently

Output Format

  • Platform selection (match to intent and audience)
  • Keyword strategy (intent, long-tail, placement)
  • Content structure (depth, clustering, per-platform format)
  • Link strategy (tier-2, cross-platform, owned property)
  • Related platform skills (reddit-posts, grokipedia-recommendations, etc.)

Related Skills

  • github: GitHub for parasite SEO; repos, README, Pages, gists, awesome lists
  • grokipedia-recommendations: Add recommendations/links to Grokipedia; parasite SEO + GEO
  • reddit-posts: Reddit post copy; high-authority community for parasite SEO
  • medium-posts: Medium publishing; parasite SEO; canonical setup
  • generative-engine-optimization: GEO strategy; parasite SEO complements AI citation
  • link-building: Parasite SEO as link acquisition tactic; tier-2 backlinks
  • directory-submission: Directory and curated list submission; similar placement logic
  • community-forum: Forum and community promotion; HN, Indie Hacker
  • indie-hacker-strategy: Indie hacker growth; Indie Hackers, Reddit as channels
  • seo-strategy: SEO workflow; parasite SEO as alternative strategy
指导使用模板和结构化数据大规模自动生成SEO页面。结合AI实现单URL差异化内容,避免传统邮件合并的重复问题,提升长尾关键词覆盖与内容质量。
用户提到'programmatic SEO'或'程序化SEO' 需要批量生成城市页、对比页或集成页 提及'模板页面'、'规模化内容'或'自动化落地页' 需求涉及基于数据的动态页面生成
skills/kostja94_marketing-skills/programmatic-seo/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill programmatic-seo -g -y
SKILL.md
Frontmatter
{
    "name": "programmatic-seo",
    "metadata": {
        "version": "1.4.1"
    },
    "description": "When the user wants to create SEO pages at scale using templates and data—including AI-assisted, grounded copy for per-URL differentiation (vs rigid mail-merge templates). Also use when the user mentions \"programmatic SEO,\" \"programmatic SEO pages,\" \"template pages,\" \"scale content,\" \"location pages,\" \"city pages,\" \"comparison pages at scale,\" \"X vs Y pages,\" \"integration pages,\" \"pages from data,\" \"automated landing pages,\" or \"programmatic landing pages.\" Uses a playbook matrix aligned to skills under skills\/pages. For user-facing template galleries or marketplaces (browse → use), use template-page-generator."
}

SEO: Programmatic SEO

Guides programmatic SEO—creating large numbers of SEO-optimized pages automatically using templates and structured data, rather than writing each page manually. Classic “mail merge” pSEO (one rigid template + swapped variables) often produced low differentiation and thin-feeling URLs. With AI used responsibly on top of the same data spine, you can scale per-URL customization—intent-aligned copy, section depth, FAQs, tone, localization—while still following evidence blocks, data tiers, and QA (see Data strength hierarchy and AI-assisted generation below).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Project context: If .claude/project-context.md or .cursor/project-context.md exists, read product/ICP sections before proposing playbooks or page types.

Definition

Programmatic SEO = Building a single template and populating it with data from a database, API, or spreadsheet to generate hundreds or thousands of unique pages. Each page targets a long-tail keyword (e.g., "best SEO tool in [city]," "[App A] + [App B] integration").

Key differences from traditional SEO: Technical (SEOs + engineers); long-tail focus; data-driven (data quality = success); automation; built for scale.

Classic limits vs AI-enhanced differentiation

Era What breaks What helps
Rigid pSEO One template, minimal variance → similar titles/bodies, weak E-E-A-T, “obvious mail merge” Still needs unique evidence per URL and selective indexation
AI-enhanced pSEO Same structured rows (facts, SKUs, metrics) drive the page, but models add per-URL narrative: intros, FAQ depth, persona angles, localization, internal-link suggestions—higher differentiation at scale Facts stay in your data layer; AI shapes phrasing and structure, not invented numbers—see AI-assisted generation

Best-practice stance: AI is an accelerator and customizer, not a substitute for data defensibility (Tiers 1–5) or technical SEO (URLs, schema, CWV). Used well, it aligns with quality over quantity: fewer thin URLs, more distinct useful pages.

Three-Part Framework

Component Role
Templates Reusable page structures: layout, headings, internal links, content blocks; conditional logic for empty fields
Data Structured information: locations, products, prices, features—must be accurate, complete, and add genuine value
Automation Systems connecting data to templates; pages generated dynamically or published in bulk
AI layer (optional) On grounded inputs (row JSON + rules), generates varied copy, FAQ expansions, and section emphasis per URL—reduces “same template” fatigue while staying auditable

Page Playbook Matrix (skills/pages)

Page types in this library live under pages/{brand|content|legal|marketing|utility}/. Use the matrix below to map search pattern → playbook → which *-page-generator skill to open for structure, copy, and schema—not every folder is a good fit for mass-generated URLs.

Playbook Example intent / keyword pattern Page skill (name) Path (reference)
Alternatives / comparisons "[Competitor] alternatives", "X vs Y" alternatives-page-generator pages/marketing/alternatives
Integrations "[Product A] [Product B] integration" integrations-page-generator pages/marketing/integrations
Category / catalog Faceted listings, product grids category-page-generator, products-page-generator pages/marketing/category-pages, products
Glossary / definitions "what is [term]", term landings glossary-page-generator pages/content/glossary
FAQ / Q&A Question banks, PAA-style pages faq-page-generator pages/content/faq
How-to / procedures Step libraries, "[how to] [task]" blocks in templates howto-section-generator components/content/howto-section
Comparison matrix (blocks) Feature/criteria grids, "vs" cells from data feed comparison-table-generator components/content/comparison-table
Tools & lead magnets "free [x] tool/calculator" tools-page-generator pages/content/tools
Template gallery Browse → detail (your templates) template-page-generator pages/content/template-page
Resource hub Guides, hubs, download centers resources-page-generator pages/content/resources
Use cases / solutions "for [role]", "by industry" use-cases-page-generator, solutions-page-generator pages/marketing/use-cases, solutions
Migration / switching "migrate from [X]" migration-page-generator pages/marketing/migration
Campaign landing Paid/segment LPs landing-page-generator pages/marketing/landing-page
Blog / article Long-tail articles at scale blog-page-generator, article-page-generator pages/content/blog, article
Docs / features / API Scalable doc sections, feature landings, /api marketing docs-page-generator, features-page-generator, api-page-generator pages/content/docs, features, api
Social proof Logos, case studies, galleries press-coverage-page-generator, customer-stories-page-generator, showcase-page-generator pages/marketing/press-coverage, customer-stories, showcase
Programs & offers Startups/education, contests, downloads, affiliate, media kit startups-page-generator, contest-page-generator, download-page-generator, affiliate-page-generator, media-kit-page-generator pages/marketing/*
Pricing / services Plans, offerings (use sparingly for pSEO) pricing-page-generator, services-page-generator pages/marketing/pricing, services

Usually not mass programmatic (single primary URL or compliance-heavy): pages/brand/* (home, about, contact), pages/legal/*, most pages/utility/* (404, status, signup-login, etc.)—treat as one-off or policy-driven, not template×data scale.

Choosing a Playbook

If you have… Lean toward… Open first…
Competitor list + positioning Alternatives / comparisons alternatives-page-generator
Integration directory (your + partners') Integrations matrix integrations-page-generator
Product catalog or SKUs Category / product grids category-page-generator, products-page-generator
Term / definition database Glossary glossary-page-generator
Support tickets / PAA mined questions FAQ scale faq-page-generator
How-to step banks / procedure templates HowTo sections in scaled pages howto-section-generator
Competitor/feature matrix from data Comparison table blocks in scaled pages comparison-table-generator (+ alternatives-page-generator for URL intent)
Lead magnets, calculators Tools hub + per-tool tools-page-generator
Your own templates (exports, gallery items) Template marketplace template-page-generator
ICP × industry matrix Use cases / solutions use-cases-page-generator, solutions-page-generator
Import paths from competitors Migration migration-page-generator
Campaign or geo LPs Landing pages landing-page-generator
Long-form SEO articles Blog index + single post blog-page-generator, article-page-generator

Template Structure (Recommended)

Section Purpose
Intro Introduction; matches user intent
Evidence block Data-driven content unique to each page (tables, lists, verified stats); differentiates from thin content
Decision Comparison, recommendation, or next steps
FAQ Frequently asked questions
CTA Call-to-action

Evidence block = Real, structured data per page (business listings, pricing, reviews, verified stats). Ensures each page delivers genuine value, not recycled boilerplate with swapped variables.

Data strength hierarchy (defensibility)

Strongest programmatic pages are fueled by what only your product (or your customers inside your product) can produce—especially templates, exports, and generated artifacts. Third-party or scraped lists alone are the weakest foundation.

Tier Source Examples Relative risk
1 — Product-generated Assets created or rendered by your product: page/layout templates, email/Notion/code templates, export packs, generated previews, branded snippets, “built with [Product]” examples Template gallery rows tied to real .json / CMS fields; screenshots of exports; unique preview URLs Lowest when each URL shows distinct generated output
2 — Product-derived Telemetry and in-product data you own: aggregates, cohorts, benchmarks, feature adoption “Teams in [industry] median time-to-value” from your warehouse (aggregated) Low if aggregated / anonymized and policy-compliant
3 — UGC / customer Reviews, submissions, showcase items, moderated community content Showcase grid; verified quotes Medium—needs moderation + consent
4 — Licensed / partner Exclusive feeds, co-marketing datasets Partner pricing tiers; licensed industry stats Medium—contract and citation discipline
5 — Public / scraped Open web, directories, generic enrichment Name/address fills; commodity facts Highest—needs editorial layer, fact-checking, and a real Evidence block

Why Tier 1 (templates & generated content) wins: Pages built from your template system carry proprietary structure, variables, and brand-safe blocks—harder for competitors to copy verbatim and easier to prove uniqueness (embeds, downloads, IDs). Pair with template-page-generator when the UX is “browse gallery → use template.”

Tier 2 — Product-derived (practical)

What it is What to watch
Metrics from your backend, data warehouse, or support/CRM exports: activation rates by segment, integration popularity, error budgets, time-to-value—not generic “industry reports.” Privacy & ToS: Minimum cell sizes; no individual identification; document what was aggregated and over what window.
Good fit when you can show “only we could know this because it runs in our product.” Stale data hurts trust: pipeline jobs, “as of [date]” labels, automated invalidation.

AI here: Use models to turn structured aggregates into prose (intro paragraphs, “what this means for [segment]”)—input must be verified numbers/tables from your pipeline, not free-form invention. Keep a machine-readable table or JSON on-page or in appendix so claims stay auditable.

Tier 3 — UGC / customer (practical)

What it is What to watch
Quotes, reviews, showcase submissions, community templates—per-user artifacts with consent. Moderation: spam, PII, competitor attacks; consent for name/logo use; schema (Review, CreativeWork) only when accurate.
Strong when combined with Tier 1 (e.g. “customer-built template” gallery). Volume without quality → thin pages; cap or score submissions.

AI here: Summarize long reviews into bullets; generate draft alt text for images; cluster submissions into topic pages—always human approve before publish. Do not fabricate testimonials.

Tier 4 — Licensed / partner (practical)

What it is What to watch
Partner price lists, co-marketed reports, API-fed allowed fields (logos, SKUs). Contract scope: Which fields can appear on which URLs; attribution line; DMCA / trademark on logos.
Often one feed → many URLs; uniqueness must come from your framing, comparison logic, or calculator—not the raw feed alone. Refresh cadence tied to partner SLAs.

AI here: Draft comparison copy and FAQs from a fixed attribute table (license + partner rules); never invent SKUs or prices—pull from feed, let AI phrase and shorten.

Tier 5 — Public / scraped (practical)

What it is What to watch
Open data, directories, Wikipedia-style facts, enrichment of public entities. Highest duplicate/thin risk: everyone has the same facts; you must add synthesis, editorial angle, or a unique tool (calculator, filter) on top.
Entity SEO and citations matter: link to authoritative sources; date-stamp volatile facts. Plan for pruning or noindex on low-traffic thin URLs.

AI here: Use models to structure messy public text into tables, outline sections, suggest internal links—then fact-check names, numbers, and dates. Do not use AI to invent statistics or citations; treat output as draft until verified.

AI-assisted generation (cross-tier)

Why AI fits modern pSEO: Early programmatic SEO earned a bad reputation because templates were frozen and copy was interchangeable—little real differentiation per query. LLMs, when grounded on each row’s facts and your brand rules, make it practical to customize headlines, intros, FAQs, and “why this page matters” per URL without hand-writing thousands of pages. That moves execution closer to best practices (intent match, helpful content, unique value) at scale, provided you do not let the model invent data.

Principle Why
Ground AI in structured inputs Pass JSON/CSV rows (tier, source URL, metrics) into prompts; forbid hallucinated numbers in system prompts.
Separate “facts” from “phrasing” Data layer = source of truth; AI = tone, shortening, localization, FAQs, per-segment emphasis—never the other way around.
Vary structure, not only adjectives Ask for different section order, FAQ count, or “beginner vs power user” angles by intent flags in the row—reduces template sameness.
Human or automated QA Spot-check high-traffic URLs; block publish if required fields empty or citation missing.
Disclose when useful e.g. “Intro generated with AI; figures from [internal report, Q3 2025].” Builds trust and matches policy trends.

When AI generation is a strong lever: Tiers 2–5—where raw material is already tabular or repetitive but needs readable, differentiated copy at scale. Tier 1 still benefits from AI (drafts from export JSON), but the differentiator remains the product artifact itself.

Operational requirements (all tiers)

Requirement Practice
Provenance Log data sources; track origin per field
Freshness rules e.g., ratings every 90 days, prices every 30 days, template version bumps when layouts change
Prefer 1–2 over 5 Fill evidence with product-generated or product-derived data before reaching for public scraping
AI governance Structured inputs only; no unverified numbers; moderation on UGC; optional disclosure
Clean & merge Deduplicate keys; drop rows that produce duplicate intents

Ideal Use Cases

For which page-generator skill to use, see Page Playbook Matrix above. Generic patterns:

Use case Example
Location-specific pages "Plumber in [city]," "Best restaurants in [neighborhood]" with real local data
Product comparison "[Product A] vs [Product B]" with structured specs
Alternatives pages "[Competitor] alternatives" at scale; 50+ competitors; see alternatives-page-generator
Software integration "[App A] + [App B]" integration pages (e.g., Zapier 50K+ pages)
Free tools "[X] checker," "[Y] calculator," "[Z] generator" — standalone tool pages; toolkit hub; same ICP as main product; lead gen
Travel / destination City + attraction combinations with reviews, photos
E-commerce Category pages, product variations (size, color, material)
FAQ / Q&A Pages powered by user question databases
Salary / pricing Comparison pages with structured data

Avoid when: Site structure is weak; page differences are superficial (city/name swaps only); content requires original expertise or UGC participation.

Real-World Examples

Examples are illustrative; no endorsement implied.

Company Scale Pattern
Zapier 50,000+ pages "[App A] + [App B]" integration
Airbnb Location search; destination × property
Review platforms User reviews + automated comparison pages
Travel sites Destination, hotel, flight, activity pages
NomadList 2,000+ city pages Cost-of-living, internet speed (dynamic data)
Semrush, Ahrefs 50+ free tools SEO checker, keyword tool, backlink checker; toolkit hub + per-tool pages

Content Requirements

Requirement Purpose
300+ words per page Avoid thin content penalties
Unique, verifiable data Each page must add meaningful page-specific content beyond simple data swaps
Evidence block Tables, lists, examples with real numbers/attributes on every page
Semantic HTML Proper structure; conditional logic to avoid empty or repetitive sections
Internal linking Link related programmatic pages; compounds traffic and indexation

Technical Considerations

Topic Practice
Subfolder vs subdomain Prefer subfolders (yoursite.com/integration/slack-notion/) over subdomains (integrations.yoursite.com/...) so authority consolidates on the primary domain; see url-structure, domain-architecture if restructuring
Selective indexation Don't index all pages; use noindex rules for low-value pages
Sitemap segmentation By country, language, division; manage crawl budget
URL structure Descriptive URLs; clean hierarchy; see url-structure
Schema JSON-LD: Product, Place, FAQ, ItemList per page type
Performance Caching, static generation; Core Web Vitals

Critical Pitfalls

Pitfall Consequence
Thin content Minimal info beyond keyword; generic copy; placeholder sections → penalties
Duplicate pages Same content with only data swaps → thin content penalties
Index bloat Generating pages that should never be indexable → crawl budget waste
Large dumps Publishing many similar pages at once → spam signals
Filter URLs Using filters instead of unique URLs/titles → cannibalization

Pages with only a title, one paragraph, and swapped city names will not rank and may incur Google penalties.

Step-by-Step Workflow

  1. Research — Niche, intent; include low-volume keywords; SEO tools, question databases
  2. Collect data — Provenance log, freshness rules; first-party/licensed; define template fields
  3. Choose stack — Next.js + DB, Webflow CMS, WordPress, headless; API + template reuse
  4. Design template — Intro, Evidence, Decision, FAQ, CTA; schema; conditional logic
  5. Build database — Map fields to template slots; hide empties
  6. Generate pages — Descriptive URLs; optimize performance
  7. Deploy & monitor — Sitemaps; indexation, rankings, CTR, bounce, conversions
  8. Optimize — Prune weak pages; refresh data; A/B test layout, CTA

Best Practices

Practice Purpose
Quality over scale Each page must provide genuinely unique, verifiable value
Differentiation over clone Prefer AI-grounded copy variance + evidence blocks over one static paragraph with {city} swaps
Launch in batches Small batches you can measure; avoid large dumps
Strong IA Internal links to related guides/categories
Visual elements Tables, maps, comparisons where relevant
Match intent Avoid generic template text; precise user intent

Timeline & Expectations

  • Typical time to ranking: ~6 months
  • Reported gains: 40%+ traffic increases from well-designed topic clusters
  • AI search: Structured, data-rich content performs better in AI Overviews and citation layers

Output Format

  • Template design (Intro, Evidence, Decision, FAQ, CTA; required data fields)
  • Data requirements (provenance, freshness, accuracy)
  • Internal linking (hub-and-spoke, related pages)
  • Indexation strategy (selective indexation, sitemap segmentation)
  • Checklist for audit

Related Skills

  • template-page-generator: Template structure; aggregation (gallery) + detail pages; Tier 1 product-generated template URLs
  • landing-page-generator: Conversion-focused programmatic pages; LP structure for campaign CTA
  • tools-page-generator: Free tools pages; toolkit hub; programmatic tool pages; lead gen
  • alternatives-page-generator: Alternatives/comparison pages at scale; competitor brand traffic
  • category-page-generator, products-page-generator: Category / catalog grids
  • glossary-page-generator, faq-page-generator, howto-section-generator, comparison-table-generator, resources-page-generator: Definitions, Q&A banks, HowTo step blocks, comparison matrices, content hubs
  • use-cases-page-generator, solutions-page-generator, migration-page-generator: ICP/industry matrix, migration SEO
  • integrations-page-generator: Integration pair pages at scale
  • blog-page-generator, article-page-generator, docs-page-generator, features-page-generator, api-page-generator: Long-form and product surface scale
  • press-coverage-page-generator, customer-stories-page-generator, showcase-page-generator: Proof at scale
  • startups-page-generator, contest-page-generator, download-page-generator, affiliate-page-generator, media-kit-page-generator, pricing-page-generator, services-page-generator: Programs and offers (use selectively for pSEO)
  • content-strategy: Content clusters, pillar pages; programmatic pages as cluster nodes
  • website-structure: Site IA before scaling URL sets
  • url-structure, domain-architecture: Paths, subfolder strategy
  • schema-markup: Structured data (Product, Place, FAQ, ItemList)
  • internal-links: Linking programmatic pages
  • xml-sitemap: Sitemap segmentation for large programmatic sites
  • canonical-tag: Duplicate/thin content handling
  • seo-strategy, seo-audit: Roadmap and post-launch audits
指导Schema.org结构化数据(JSON-LD)的实施,优化富摘要和AI搜索可见性。涵盖Google/Bing支持差异、高影响力类型及验证方法。
用户提到添加或优化结构化数据 提及Schema.org、JSON-LD、富结果、Rich Snippets 询问特定Schema类型如FAQ、Article、Product等 涉及Schema验证错误或工具使用
skills/kostja94_marketing-skills/schema/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill schema-markup -g -y
SKILL.md
Frontmatter
{
    "name": "schema-markup",
    "metadata": {
        "version": "1.5.0"
    },
    "description": "When the user wants to add or optimize structured data (Schema.org, JSON-LD). Also use when the user mentions \"schema,\" \"structured data,\" \"JSON-LD,\" \"rich results,\" \"rich snippets,\" \"Google rich snippets,\" \"featured snippet schema,\" \"add schema to page,\" \"missing structured data,\" \"schema validation error,\" \"Schema Markup Validator,\" \"Google Rich Results Test,\" \"FAQ schema,\" \"Article schema,\" \"Organization schema,\" \"JobPosting,\" \"HowTo,\" \"Event,\" \"SoftwareApplication,\" \"BreadcrumbList,\" \"WebSite,\" \"Recipe,\" \"Product,\" or \"Dataset.\" For SERP feature types and zero-click patterns, use serp-features. For AI search visibility strategy (not markup), use generative-engine-optimization. For HowTo step sections (placement, copy, vs FAQ), use howto-section-generator."
}

SEO On-Page: Schema / Structured Data

Guides implementation of Schema.org structured data (JSON-LD) for rich snippets, enhanced search results, and Generative Engine Optimization (GEO).

When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.

Scope (On-Page SEO)

  • Schema markup: Schema.org types for rich results, AI search visibility, and machine-readable content
  • Schema.org vs. search engines: Schema.org defines 800+ types; each search engine supports only a subset for rich results

Schema.org vs. Search Engine Support

Schema.org and Google Structured Data are not fully aligned. Schema.org is an open vocabulary (800+ types); Google, Bing, and other engines each support only a curated subset for rich results.

Engine Support Notes
Google Subset only Only types in Google's search gallery generate rich results. Valid Schema.org markup not in Google's list won't produce enhanced snippets—even if technically correct.
Bing Subset; different Supports JSON-LD, Microdata, RDFa, Open Graph. Some types (e.g., Product, Offer) have format-specific support. Check Bing Webmaster docs.
Other engines Varies Yandex, DuckDuckGo, AI search tools (Perplexity, etc.) may use Schema.org for understanding even when they don't display rich results.

Practical implication: Implement Schema.org markup for your content type. If Google doesn't show rich results for that type, Bing or AI systems may still use it. Always verify against Google's developer docs for Google-specific rich result eligibility.

Rich Results: Google Support (2026)

High-impact types: Product, Review snippets, Article/News, Video, Recipe, LocalBusiness, Event, Breadcrumb, Sitelinks searchbox, JobPosting.

Limited or context-dependent: FAQ (government/health sites for many queries), Education Q&A, Course, SoftwareApplication, Speakable (news), DiscussionForumPosting.

Deprecated: HowTo (fully removed for all devices as of Sep 2023), COVID data panels, some AMP-only formats, data-vocabulary.org.

Implementation: JSON-LD preferred; include @context, @type, stable @id; ISO 8601 dates; match structured data to visible content. Validate with Rich Results Test. Rich results can increase CTR up to ~35% and improve AI citation.

Schema ↔ SERP Features ↔ Rich Results (Strongly Related)

Schema, SERP features, and rich results are strongly related. Schema is the necessary condition for most rich results. When targeting a SERP feature, implement the corresponding schema type. See serp-features for the full SERP feature list and optimization.

Rich Results vs Featured Snippets

  • Rich results: Schema-powered enhancements to standard listings (stars, breadcrumbs, FAQ dropdowns, product info). Appear within organic positions; do not require top-10 rank.
  • Featured snippets: Google-extracted answer boxes at position zero. No schema required; content structure matters. Schema (FAQPage, HowTo, Article) can support extraction.
Schema Type SERP Feature / Rich Result Notes
FAQPage PAA, Featured Snippet FAQ dropdown; Q&A-style snippet. Eligibility restricted for many sites (e.g. government/health)
BreadcrumbList Breadcrumbs Path display in result
AggregateRating, Review Reviews / Stars Star ratings
HowTo Formerly rich results (deprecated Sep 2023) No longer generates Google rich results; Bing/AI may still use
Article In-Depth Articles, Snippet Article rich result
VideoObject Video Video thumbnail; see video-optimization
Product, Offer Shopping, Product Product/shopping results
Recipe Recipe Recipe rich result
JobPosting Google Jobs Job listings
Event Event Event rich result
WebSite + SearchAction Sitelinks searchbox Site links for brand queries
Organization, Person Knowledge Panel Entity info; see entity-seo

Workflow: 1) Use serp-features to identify target SERP feature; 2) Look up schema type in this table; 3) Implement and validate with Rich Results Test.

Generative Engine Optimization (GEO)

GEO = optimizing content so AI systems (Google AI Overviews, Perplexity, ChatGPT, Gemini) choose, cite, and quote your content in generated answers. Structured data makes content machine-readable; AI engines extract and cite more accurately. Key schema types for GEO: Organization, Person/Author, WebSite, WebPage, FAQPage, HowTo, Article, Product, AggregateRating. See generative-engine-optimization for full GEO strategy.

Initial Assessment

Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for product type and content.

Identify:

  1. Page type: Article, Product, FAQ, Organization, JobPosting, Event, etc.
  2. Content: What entities to describe
  3. Goal: Rich snippets, AI Overview visibility, Knowledge Panel

Schema Type Classification

Core Types (General Use)

Type Use case
Organization Site-wide; company info, logo, sameAs; see placement below
WebSite Site-wide; search action, site name; pair with Organization on homepage
Article Blog posts, news, tool intros
BreadcrumbList Breadcrumb navigation
FAQPage FAQ sections; triggers PAA-style results
Person Author info; pairs with Article
ImageObject Image metadata for rich results
HowTo Tutorials, step-by-step guides. Note: Google fully deprecated HowTo rich results for all devices (Sep 2023); Bing/AI may still consume HowTo schema

Exclusive Types (Specific Scenarios)

Type Use case
JobPosting Recruitment sites, AI Job Matching
Product E-commerce product pages
Event Event pages, ticketing (not general blogs)
SoftwareApplication App pages, tool pages
LocalBusiness Local business pages
Dataset Data platforms, datasets
DiscussionForumPosting Forums, community posts
Quiz Education, flashcards
MathSolver Math tools
CaseStudy Case study pages
Recipe Recipes, meal plans, cooking instructions

Rule: Use core types for most sites. Use exclusive types only when page content matches (e.g., don't use Event on a blog; don't use JobPosting on a product page).

Organization & WebSite Schema Placement

Where Organization WebSite Notes
Homepage Minimum Minimum Add both Organization and WebSite to homepage at least. Organization describes the entity that owns the site; WebSite enables sitelinks searchbox and site identity.
Root layout / global Optimal Optimal Place in site-wide layout (e.g. layout.tsx, _document, global header/footer) so schema appears on every page. Google uses the first instance found; one instance per site is sufficient.
About page No No About page uses AboutPage schema (page-specific: headline, description, author, about). Organization is entity-level, not page-level—do not confine it to About. See about-page-generator.

Implementation: JSON-LD in <head>; use @id (e.g. https://example.com/#organization) to link Organization ↔ WebSite ↔ WebPage for entity graph. See entity-seo for @id and Knowledge Panel.

Action: Website/Product Type → Schema Mapping

Use this table to recommend which exclusive schema types fit a site. Match the site's content and product type to the most relevant schema. When in doubt, start with core types (Organization, WebSite, Article); add exclusive types only when content clearly matches.

Website / Product type Recommended exclusive schema Why
AI meal planner, recipe site, food blog, cooking app Recipe Ingredients, instructions, cook time, servings—highly relevant for food/meal content. Google supports Recipe rich results.
Job board, recruitment site, careers page JobPosting Title, company, location, salary, employment type. Required for Google Jobs.
Event platform, ticketing, webinar, conference Event Date, location, price. Use only on actual event pages.
SaaS, app, Chrome extension, tool, software product page SoftwareApplication App name, category, rating, price, OS. Fits product/feature pages.
E-commerce product page Product Price, availability, brand, reviews. Use with Offer, AggregateRating.
Forum, community, Reddit-style, Q&A DiscussionForumPosting Post content, author, comments. For user-generated discussion.
Data platform, dataset repository, Scale AI / Surge AI Dataset Dataset name, creator, license, distribution format. For data catalog pages.
Education site, flashcards, Quizlet-style Quiz Question-answer pairs. For educational Q&A content.
Math solver, calculator, equation tool MathSolver Math problem input, solution output. For math tools.
Restaurant, local service, store locator LocalBusiness Address, hours, NAP. For local SEO.
Case study, customer story page CaseStudy Client, outcome, methodology. For B2B case studies.
FAQ page, product FAQ, support FAQ FAQPage Question + acceptedAnswer pairs. Triggers PAA-style results.
Tutorial, how-to guide, step-by-step HowTo Steps, tools, time. Note: Google fully deprecated HowTo rich results (Sep 2023); Bing/AI may still consume the schema. Consider FAQPage as alternative
News article, press release NewsArticle Use instead of Article for news.
Video page, podcast episode VideoObject / PodcastEpisode For video/audio content. See video-optimization for VideoObject, thumbnail, key moments.

Examples:

  • AI meal planner (e.g., generates weekly meal plans with recipes) → Add Recipe schema to each recipe/meal page; Article or WebPage for landing pages
  • AI writing toolSoftwareApplication on product page; Article on blog
  • Recruitment SaaSJobPosting on job listing pages; SoftwareApplication on product page
  • Recipe blogRecipe on each recipe post; Article for non-recipe posts

Output: When recommending schema, state: (1) which exclusive types fit the site/product, (2) which page types get which schema, (3) core types to add site-wide (Organization, WebSite, BreadcrumbList).

Article / BlogPosting / NewsArticle: Type Selection & Implementation

Choose the most specific type that matches content:

Type Use case
BlogPosting Informal blog posts; individual authors; regularly updated
Article Formal, evergreen content; tool intros; encyclopedic
NewsArticle Time-sensitive news; recognized publishers

Required properties: headline (max 110 chars), image (min 1200px wide; absolute URL), datePublished (ISO 8601), author (Person or Organization), publisher (Organization with logo).

Recommended: dateModified, description, mainEntityOfPage (canonical URL).

Date display for CTR: Google recommends showing only one date on the page. If both datePublished and dateModified are visible, Google may pick the wrong date for SERP display—Search Engine Land saw ~22% CTR drop. Best practice: show dateModified if it exists, otherwise datePublished. Keep both in JSON-LD; the rule applies to visible date only.

JSON-LD example (BlogPosting):

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "The Ultimate SEO Checklist for 2025",
  "description": "A complete guide to optimizing blog posts for search and AI.",
  "image": "https://example.com/image.jpg",
  "datePublished": "2025-01-15T09:00:00Z",
  "dateModified": "2025-02-01T14:30:00Z",
  "author": { "@type": "Person", "name": "Jane Doe", "url": "https://example.com/author/jane" },
  "publisher": { "@type": "Organization", "name": "Example", "logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" } }
}

Place in <head> via <script type="application/ld+json">. For article pages, use og:type: article with og:article:published_time, og:article:modified_time, og:article:author. See article-page-generator, open-graph.

BreadcrumbList

For breadcrumb navigation. Schema must match visible breadcrumbs exactly. See breadcrumb-generator for UI, placement, and semantic HTML.

Requirement Guideline
Format JSON-LD in <script type="application/ld+json">
URLs Absolute URLs with https:// for each item
Position Sequential integers starting from 1
Match Schema must match visible breadcrumbs exactly

JSON-LD example:

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com/" },
    { "@type": "ListItem", "position": 2, "name": "Category", "item": "https://example.com/category/" },
    { "@type": "ListItem", "position": 3, "name": "Current Page", "item": "https://example.com/category/current-page/" }
  ]
}

Multiple paths: Google supports multiple BreadcrumbList objects on the same page when a page is reachable via multiple paths (e.g., product in multiple categories). Use an array of BreadcrumbList objects.

Best Practices

Principle Guideline
Accuracy Data must match visible page content; never add invisible or misleading data
Completeness Include all required properties per type
Most specific type Use NewsArticle over Article when applicable
JSON-LD Preferred format; place in <script type="application/ld+json">
@id for entities Use @id for Organization, Person to enable entity linking; see entity-seo
Phased implementation Add required properties first; then optional for optimization
Validation Test with Rich Results Test and Schema Markup Validator
inLanguage (multilingual) Add "inLanguage": "en-US" (IETF BCP 47) to match hreflang; localize names, descriptions, FAQs for rich snippets per locale

Multilingual Schema (inLanguage)

For multilingual sites, add inLanguage to JSON-LD to reinforce language targeting. Align with hreflang values (e.g. "inLanguage": "zh-CN" with hreflang="zh-CN").

Localize schema data: Translate structured data fields (name, description, FAQ acceptedAnswer, etc.) for each locale to improve rich snippet CTR in that language.

Types that support inLanguage: Article, BlogPosting, WebApplication, FAQPage, HowTo, Product, Organization.

Implementation Workflow

  1. Analyze page type and content; choose matching Schema type
  2. Select format — JSON-LD recommended (Google, Bing, AI tools support it)
  3. Write structured data; start with required properties
  4. Validate with Rich Results Test, Schema Markup Validator
  5. Deploy and monitor via Search Console enhanced reports

Common Errors and Fixes

Error Fix
Data doesn't match visible content Schema must describe only what users see
Missing required properties Check Google/Schema.org docs for each type
Wrong type for page Don't use Event on non-event pages; don't use JobPosting on product pages
Format/syntax errors Validate JSON-LD; check quotes, brackets, commas
Over-markup Mark only relevant content; avoid stuffing unrelated types

Implementation

Next.js (metadata)

export const metadata = {
  other: {
    'script:ld+json': JSON.stringify({
      "@context": "https://schema.org",
      "@type": "Article",
      "headline": "...",
      "description": "...",
      "inLanguage": "en-US",
      "image": "https://example.com/image.jpg",
      "datePublished": "2024-01-01T00:00:00Z",
      "dateModified": "2024-01-15T00:00:00Z",
      "author": { "@type": "Person", "name": "..." },
      "publisher": { "@type": "Organization", "name": "...", "logo": { "@type": "ImageObject", "url": "..." } }
    }),
  },
};

HTML (generic)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "...",
  "description": "...",
  "inLanguage": "en-US",
  "author": { "@type": "Person", "name": "..." },
  "publisher": { "@type": "Organization", "name": "...", "logo": { "@type": "ImageObject", "url": "..." } }
}
</script>

Validation Tools

Tool Purpose
Google Rich Results Test Check if Google can generate rich results
Schema Markup Validator Validate against Schema.org spec
Search Console Enhanced reports; monitor validity over time

Output Format

  • Action first: Use the Website/Product Type → Schema Mapping table to recommend which exclusive schema fits the site (e.g., AI meal planner → Recipe; SaaS tool → SoftwareApplication)
  • Schema type recommendation (core vs. exclusive)
  • Page-level mapping: Which pages get which schema
  • JSON-LD structure with required properties
  • Validation steps
  • References: Schema.org, Google Structured Data, Bing Markup

Related Skills

  • article-page-generator: Article structure; Article/BlogPosting/NewsArticle schema; date display
  • serp-features: Strongly related—schema maps to SERP features; see mapping table above
  • faq-page-generator: FAQPage schema; FAQ content structure
  • howto-section-generator: HowTo section component (steps, JSON-LD); HowTo vs FAQPage
  • breadcrumb-generator: BreadcrumbList schema implementation
  • featured-snippet: FAQPage, HowTo for snippets
  • video-optimization: VideoObject, video sitemap, thumbnail, key moments
  • entity-seo: Organization, Person for entity recognition; @id; Knowledge Panel
  • homepage-generator: Organization + WebSite schema on homepage or root layout
  • indexing: Google Indexing API for JobPosting, BroadcastEvent
专为Codex设计的精英级网站图像转代码技能。遵循“先生成设计图、深度分析、再实现”的工作流,拒绝通用模板,专注于生成高质量、可读性强且易于实现的网页前端代码,特别适用于着陆页、营销站点等对视觉品质要求高的场景。
需要将网站设计图片转换为前端代码 创建高视觉质量的着陆页或营销网站 进行注重视觉品质的网站改版 生成英雄区或产品页面
skills/taste-skill/skills/image-to-code-skill/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill image-to-code -g -y
SKILL.md
Frontmatter
{
    "name": "image-to-code",
    "description": "Elite website image-to-code skill for Codex. For visually important web tasks, it must first generate the design image(s) itself, deeply analyze them, then implement the website to match them as closely as possible. In Codex, it must prefer large, readable, section-specific images instead of tiny compressed boards, generate fresh standalone images for sections or detail views instead of cropping old ones, avoid lazy under-generation, avoid cards-inside-cards-inside-cards UI, and keep the hero clean, spacious, readable, and visible on a small laptop."
}

CORE DIRECTIVE: IMAGE-FIRST WEBSITE DESIGN TO CODE

You are an elite web design art director and implementation strategist.

Your job is not to generate generic website mockups. Your job is to generate premium, artistic, implementation-friendly website section references and then turn them into real frontend.

This skill is for:

  • hero sections
  • landing pages
  • marketing sites
  • startup sites
  • editorial brand pages
  • product pages
  • portfolio websites
  • premium multi-section websites
  • redesigns where visual quality matters

Standard AI output tends to collapse into repetitive defaults:

  • one single giant compressed image for too many sections
  • text that becomes too small to read
  • centered dark hero clichés
  • generic card spam
  • repeated left-text/right-image layouts
  • weak typography hierarchy
  • vague spacing
  • cards inside cards inside cards
  • giant rounded section containers everywhere
  • too much visible information in the first screen
  • tiny pills, labels, tags, system markers, and fake interface jargon
  • nice-looking but unextractable designs
  • generic coded reinterpretations after the image step
  • lazily generating too few images for too many sections

Your goal is to aggressively break these defaults.

The output must feel:

  • premium
  • art-directed
  • readable
  • structured
  • implementation-friendly
  • deeply analyzable
  • visually strong
  • faithful enough to build from
  • clean on first view
  • responsive in spirit
  • realistic on a small laptop viewport

IMPORTANT: For visual website tasks, you must first generate the design image(s) yourself. Then you must deeply analyze the generated image(s). Only after that should you implement the frontend.

Do not skip image generation when image generation is available. Do not begin with freeform coding first. The generated image(s) are the primary visual source of truth.

The required workflow is:

image generation first
deep image analysis second
implementation third

If the task is mainly visual, this order is mandatory.


1. ACTIVE BASELINE CONFIGURATION

  • DESIGN_VARIANCE: 8
    (1 = rigid / conventional, 10 = highly art-directed / asymmetric)
  • VISUAL_DENSITY: 3
    (1 = airy / calm, 10 = dense / packed)
  • ART_DIRECTION: 8
    (1 = safe commercial, 10 = bold creative statement)
  • IMPLEMENTATION_CLARITY: 9
    (1 = loose moodboard, 10 = highly buildable UI reference)
  • IMAGE_USAGE_PRIORITY: 9
    (1 = mostly typographic, 10 = strongly image-led when appropriate)
  • SPACING_GENEROSITY: 9
    (1 = compact / tight, 10 = spacious / breathable)
  • ANALYSIS_PRECISION: 10
    (1 = broad vibe only, 10 = deep extraction of design details)
  • IMAGE_GENERATION_EAGERNESS: 10
    (1 = minimal image count, 10 = generate as many images as needed for excellent extraction)
  • UI_SIMPLICITY_DISCIPLINE: 9
    (1 = willing to add many micro-elements, 10 = aggressively reduce clutter and unnecessary UI chrome)

AI Instruction: Use these as defaults unless the user clearly wants something else. Adapt them to the prompt.

Interpretation:

  • If the user says “clean”, reduce density and increase clarity.
  • If the user says “crazy creative”, increase variance and art direction.
  • If the user says “premium SaaS”, keep clarity high and art direction controlled.
  • If the user says “editorial”, allow stronger type and more asymmetry.
  • Keep sections breathable.
  • Prefer readability over squeezing too much into one image.
  • In Codex, bias strongly toward larger, more analyzable section images.
  • If more images would improve extraction quality, generate more images.
  • Do not be lazy with image count.
  • Default away from nested containers, excessive pills, tiny labels, and dashboard clutter.

2. MANDATORY IMAGE-FIRST RULE

For website design requests where visual quality matters, image generation is mandatory first.

This means:

  1. generate the design image or image set yourself first
  2. deeply inspect and analyze the generated image(s)
  3. extract the design system from them
  4. implement the frontend only after that

Do not:

  • start with freeform coding
  • skip straight to implementation
  • describe a website without first generating the visual reference when generation is available
  • rely on memory of “good frontend taste” instead of producing the actual reference

The image is the design source. The code is the translation layer.


3. GENERATE ENOUGH IMAGES RULE

Generate enough images to make the design truly readable and extractable.

Do not be lazy with image count.

If more images would improve:

  • text readability
  • typography extraction
  • spacing analysis
  • button analysis
  • card analysis
  • color extraction
  • component inspection
  • implementation fidelity
  • responsive understanding
  • section clarity

then generate more images.

Strong rule:

  • it is better to generate too many clear images than too few compressed images
  • it is better to generate one clear image per section than one unreadable board for the whole site
  • it is better to create an extra detail image than to guess details later

Never reduce image count just for convenience if that harms quality.


4. CODEX-SPECIFIC SECTION IMAGE RULE

Inside Codex, do not compress too many website sections into one single image if that would make the text, spacing, buttons, or layout details too small to analyze properly.

In Codex, prefer separate large images per section.

Default rule inside Codex:

  • 1 section requested → generate 1 image
  • 2 sections requested → generate 2 images
  • 3 sections requested → generate 3 images
  • 4 sections requested → generate 4 images
  • 5 sections requested → generate 5 images
  • 6 sections requested → generate 6 images
  • 7 sections requested → generate 7 images
  • 8 sections requested → generate 8 images
  • 9 sections requested → generate 9 images
  • 10 sections requested → generate 10 images
  • and so on when reasonable

This is preferred because:

  • text stays readable
  • typography becomes analyzable
  • spacing stays visible
  • button details stay visible
  • layout proportions stay visible
  • extraction quality becomes much better
  • implementation becomes more faithful

Do not default to:

  • one giant multi-column collage
  • one long compressed board with tiny unreadable text
  • one image containing many sections if that reduces extraction quality

If necessary, generate more images rather than shrinking everything.

Outside Codex, this skill may still allow more compact multi-section composition when appropriate. Inside Codex, prioritize section clarity and extraction accuracy.


5. DO NOT CROP OLD IMAGES RULE

When a section needs a dedicated image or a closer detail view, do not simply crop, cut out, zoom into, or slice it from a previously generated larger image.

Do not:

  • crop a hero out of a full-page board
  • crop a pricing area out of a larger composition
  • crop tiny cards out of a multi-section image
  • rely on rough cutouts from existing images
  • use extracted image fragments as the main source for implementation if they distort spacing, proportions, or typography

Instead:

  • generate a fresh new image for that section
  • generate a fresh new detail image for that section
  • keep the same design language, palette, typography mood, and component family
  • make the new image specifically optimized for readability and extraction

Reason: cropped images often destroy:

  • spacing accuracy
  • type scale relationships
  • clean margins
  • layout proportions
  • button clarity
  • section balance
  • overall implementation fidelity

Fresh section-specific generation is strongly preferred over cropping.


6. FRESH RE-GENERATION RULE

If a section or detail is not clear enough, generate it again as a new standalone image.

This standalone regeneration should:

  • preserve the same visual language as the original overall design
  • keep the same palette
  • keep the same typography mood
  • keep the same button style
  • keep the same radius logic
  • keep the same image treatment
  • keep the same overall brand world

But it should also:

  • make text larger and more readable
  • make spacing more visible
  • make buttons easier to inspect
  • make component structure easier to analyze
  • make layout proportions clearer
  • make the section cleaner if the previous render was too busy

This is not a different design. It is a cleaner, more analyzable section-specific render of the same design system.


7. OPTIONAL DETAIL / EXTRACTION IMAGE RULE

If a section image still does not expose the necessary detail clearly enough, generate an additional detail image for that same section.

Examples of useful secondary images:

  • a closer hero render to read headline, subheadline, CTA, and typography
  • a detail image for pricing cards
  • a closer render for testimonials
  • a closer render for navbar / header treatment
  • a closer render for feature cards or UI panels
  • a closer render for footer or CTA section
  • a refined variation of the first generated image that makes the section more extractable
  • a cleaner re-generation of the same section with larger text for extraction
  • an image focused mainly on typography and spacing instead of the full composition

These additional images exist to improve analysis and extraction quality.

Use them when needed for:

  • readable text
  • clearer button states
  • tighter spacing analysis
  • card and component inspection
  • clearer color extraction
  • better typography observation
  • more precise implementation

Do not hesitate to create a second or third extraction-oriented image for a section if the first image is too broad.


8. CLEAN ANALYSIS STANDARD

Analyze cleanly and systematically.

Do not do vague vibe-only analysis. Do not jump too fast from image to code.

For every generated section image, inspect cleanly:

  • what the section is
  • what the visual priority is
  • what text is readable
  • what typography relationships are visible
  • what spacing relationships are visible
  • what buttons and controls are visible
  • what card or block logic is visible
  • what colors dominate
  • what structural rhythm is visible
  • what details are still unclear

If something is unclear, generate another image before coding.

The analysis should feel:

  • calm
  • structured
  • exact
  • faithful
  • design-aware
  • implementation-aware

9. DEEP IMAGE ANALYSIS REQUIREMENT

Before implementing anything, deeply analyze the generated image(s).

Do not just glance at them. Treat them like a design specification.

Carefully inspect and extract:

  • exact visible text where readable
  • hero headline wording
  • subheadline wording
  • CTA wording
  • section titles
  • typography character
  • type scale relationships
  • font mood
  • line count
  • line wrapping behavior
  • alignment logic
  • section spacing
  • internal spacing
  • padding and gutters
  • card dimensions and rhythm
  • border radius logic
  • stroke / divider usage
  • button shapes
  • button hierarchy
  • button padding
  • hover-implied styling if visually suggested
  • color palette
  • accent colors
  • background treatment
  • image treatment
  • icon treatment
  • shadows / depth logic
  • grid logic
  • layout structure
  • section ordering
  • section density
  • visual rhythm
  • repeated motifs that define the design language

Your goal is to understand exactly why the generated website looks strong.

Only after this deep analysis should you implement the frontend.


10. IMAGE-FIRST CODEX WEBSITE WORKFLOW

When this skill is used inside Codex or any environment that supports image generation plus implementation, default to an image-first workflow for website design tasks.

Preferred execution order:

  1. infer the section count
  2. generate section reference images first
  3. generate extra detail/extraction images where needed
  4. if needed, regenerate unclear sections as fresh standalone images
  5. deeply inspect all generated images
  6. extract text, typography, spacing, colors, layout, buttons, and component logic
  7. implement the website to match the generated design as closely as reasonably possible
  8. only invent missing details when the images leave something ambiguous

For visually important frontend tasks, do not begin by freely designing in code. Begin by creating the visual references first whenever image generation is available.

The images are the primary art-direction source. The code is the implementation layer.


11. WHEN TO TRIGGER IMAGE GENERATION FIRST

If image generation is available, strongly prefer generating image references first when the request is mainly about visual frontend quality.

Trigger image-first workflow when the user asks for:

  • a beautiful hero section
  • a premium landing page
  • a creative website
  • a redesign
  • a more modern website
  • a more aesthetic interface
  • a polished marketing page
  • a portfolio site
  • a startup site where visual taste matters heavily
  • a multi-section website concept
  • anything described mainly in visual terms

Direct-code first is more acceptable only when:

  • the task is mostly technical
  • the user wants a bug fix
  • the user already provides a precise design system
  • the task is mainly structural rather than visual

12. THE COMBINATORIAL VARIATION ENGINE

To avoid repetitive AI-looking output, internally choose a strong combination and commit to it consistently.

Do not mash everything into chaos. Pick a coherent visual direction and execute it clearly.

Theme Paradigm

Choose 1:

  1. Pristine Light Mode
  2. Deep Dark Mode
  3. Bold Studio Solid
  4. Quiet Premium Neutral

Background Character

Choose 1:

  1. subtle technical grid / dotted field
  2. pure solid field with soft ambient gradient depth
  3. full-bleed cinematic imagery
  4. tactile textured surface feel

Typography Character

Choose 1:

  1. clean grotesk
  2. refined grotesk
  3. expressive display
  4. compressed statement typography
  5. editorial serif + sans
  6. Swiss rational hierarchy

Hero Architecture

Choose 1:

  1. cinematic centered minimalist
  2. asymmetric split hero
  3. floating polaroid scatter
  4. inline typography behemoth
  5. editorial offset composition
  6. massive image-first hero with restrained text

Section System

Choose 1:

  1. modular bento rhythm
  2. alternating editorial blocks
  3. poster-like stacked storytelling
  4. gallery-led cadence
  5. Swiss grid discipline
  6. asymmetric premium marketing flow

Signature Component Set

Choose exactly 4 unique components:

  • diagonal staggered square masonry
  • 3D cascading card deck
  • hover-accordion slice layout
  • pristine gapless bento grid
  • infinite brand marquee strip
  • turning polaroid arc
  • vertical rhythm lines
  • off-grid editorial layout
  • product UI panel stack
  • split testimonial quote wall
  • layered image crop frames

Motion-Implied Language

Choose exactly 2:

  • scrubbing text reveal energy
  • pinned narrative section energy
  • staggered float-up energy
  • parallax image drift energy
  • smooth accordion expansion energy
  • cinematic fade-through energy

These are not coding instructions. They are visual-direction cues the design should imply.


13. WEBSITE REFERENCE RULE

Every generated website section image must clearly communicate:

  • layout
  • hierarchy
  • spacing
  • typography scale
  • CTA priority
  • component styling
  • image treatment
  • overall design system

A developer or coding model should be able to look at the image(s) and understand how to build the website.

Do not produce vague abstract artwork when the request is for frontend. Default to real section comps.


14. HERO MINIMALISM RULES

The hero must feel cinematic, clear, and intentional.

Absolute Hero Rules

  • the hero must feel like a strong opening scene
  • keep the hero composition very clean
  • do not overcrowd the first viewport
  • the main headline must feel short and powerful
  • the hero headline should ideally stay within 1–3 lines
  • do not allow long wrapped hero headlines
  • if the headline starts becoming too long, reduce words instead of forcing more lines
  • keep supporting text concise
  • prioritize negative space and contrast
  • avoid stuffing the hero with pills, fake stats, badges, tiny logos, and nonsense detail
  • avoid extra micro-labels, control tags, system markers, or decorative utility text that does not meaningfully help the hero
  • keep the first screen readable on a small laptop without feeling overfilled

Hero Cleanliness Rule

The hero should feel calm, premium, and immediately readable.

Do:

  • use a strong single focal point
  • keep the hierarchy obvious
  • let the hero breathe
  • keep the visual system tight and controlled
  • make the first screen feel polished and deliberate
  • keep the amount of visible content restrained enough that the hero still feels elegant on a smaller desktop viewport

Do not:

  • clutter the hero
  • create multiple competing focal points
  • overfill the hero with cards or micro-details
  • make the hero noisy or busy
  • add unnecessary labels like “00 orchestration layer” or similar pseudo-system text if it does not add real value

Headline Rule

Strong preference:

  • 1 line if possible
  • 2 lines very good
  • 3 lines maximum in normal cases

Avoid:

  • 4+ line hero headlines
  • paragraph-like hero copy
  • weak headline-to-subheadline contrast

15. RESPONSIVE FIRST-VIEW RULE

The first visible website screen must feel usable and clean on a small laptop.

This means:

  • do not overload the above-the-fold area
  • do not force too many content blocks into the hero viewport
  • do not rely on giant nested panels that consume space without improving clarity
  • make the first section feel intentionally composed, not overstuffed

The hero and immediate first-view area should:

  • show the main message clearly
  • show the primary CTA clearly
  • show the key visual clearly
  • avoid trying to expose the entire product in one crowded first view

A smaller laptop should still see:

  • a clear headline
  • readable supporting text
  • clean spacing
  • a visible CTA
  • a believable, balanced visual focal point

16. ANTI-NESTED-BOX RULE

Do not default to box-in-box-in-box layouts.

Avoid:

  • giant rounded section containers wrapping everything
  • cards inside larger cards inside outer cards
  • dashboard-like compartment stacking for no reason
  • nested boxed UI that makes the layout feel trapped
  • sections that are just one big bordered panel containing more bordered panels containing more bordered panels

Use boxes only when they have a clear purpose.

Prefer:

  • open layouts
  • clearer whitespace
  • fewer but stronger containers
  • flatter hierarchy where appropriate
  • direct alignment and spacing instead of excessive enclosure
  • one primary framing move rather than many layered frames

A section should not feel like a prison of containers. It should feel designed, open, and intentional.


17. REDUCE MICRO-UI CLUTTER RULE

Do not clutter the design with tiny UI extras that do not materially improve clarity.

Avoid:

  • unnecessary pills
  • pseudo-system markers
  • fake control labels
  • decorative code-like tags
  • meaningless small metadata rows
  • filler chips
  • tiny badges everywhere
  • fake dashboard jargon
  • overdesigned labels that distract from the main layout

Examples of things to avoid unless they are truly necessary:

  • “00 orchestration layer”
  • tiny technical status pills
  • decorative runtime markers
  • overly specific pseudo-enterprise microcopy
  • filler operator/control-room labels that exist only to look complex

Prefer:

  • cleaner headings
  • fewer labels
  • real hierarchy
  • clearer spacing
  • simpler supporting text
  • stronger typography instead of decorative clutter

18. SECTION IMAGE GENERATION RULE

Inside Codex, treat each section as its own analyzable unit.

If the user asks for:

  • a hero only → generate 1 hero image
  • 4 sections → generate 4 section images
  • 8 sections → generate 8 section images
  • 12 sections → generate 12 section images when reasonable

General preference:

  • one section = one primary image
  • one complex section = one primary image + one or more optional detail images
  • one unclear section = regenerate it again as a fresh clean standalone image

This section-first generation rule exists to prevent:

  • tiny unreadable text
  • tiny buttons
  • unclear spacing
  • weak extraction quality
  • lossy design-to-code translation

19. WEBSITE IMAGE SYSTEM RULE

When generating a website design, think not only about the overall site but also about the internal image system used inside the website itself.

This may include:

  • hero media
  • section images
  • editorial crops
  • product visuals
  • framed photography
  • layered image cards
  • gallery-like blocks
  • supporting visual panels

If the site benefits from multiple images, include multiple image moments across the website.

Rules:

  • image usage must feel deliberate
  • image count should match the complexity of the site
  • do not rely on one single hero image if many sections need visual support
  • keep image usage balanced and clean
  • all image moments must still feel like one coherent design world

20. FIXED MEDIA FRAME RULE

Images inside the website should usually sit inside clear, controlled, implementation-friendly frames.

Prefer:

  • fixed-aspect media blocks
  • clearly framed image areas
  • repeatable media modules
  • consistent corner radius logic
  • stable visual proportions across similar sections

Examples:

  • hero image in a clearly bounded large frame
  • editorial crops using repeatable portrait or landscape ratios
  • card images with consistent proportions
  • gallery blocks with controlled aspect ratios
  • product images placed in stable intentional containers

Avoid:

  • random image sizes with no system
  • inconsistent proportions across similar modules
  • messy scaling
  • uncontrolled collage chaos unless explicitly requested

The goal is:

  • visually strong images
  • inside a system a frontend model can realistically rebuild

21. TEXT EXTRACTION RULE

When text is readable in the generated section image, extract it and use it.

Especially inspect and extract:

  • hero headline
  • hero subheadline
  • CTA labels
  • section headings
  • pricing labels
  • feature names
  • testimonial names and roles if clearly shown
  • navbar labels
  • footer labels if relevant

If the text is too small to extract reliably:

  • generate a closer extraction image
  • or generate a second clearer version of that section

Do not ignore text extraction. The visible text is part of the design system and should influence implementation.


22. TYPOGRAPHY EXTRACTION RULE

Do not only notice that typography “looks nice”. Analyze it properly.

Extract and observe:

  • size relationships
  • weight relationships
  • line count
  • line height feel
  • tracking feel
  • serif vs sans behavior
  • display vs body contrast
  • section heading rhythm
  • CTA text scale
  • whether the design uses calm or aggressive type

Use these findings during implementation. Do not flatten typography into a generic coded hierarchy.


23. SPACING EXTRACTION RULE

Analyze spacing deliberately.

Inspect:

  • distance between headline and subheadline
  • distance between text and buttons
  • distance between cards
  • section top and bottom spacing
  • side gutters
  • card padding
  • image-to-text distance
  • navbar spacing
  • CTA block spacing
  • overall cadence across sections

The goal is not exact pixel OCR. The goal is faithful spacing logic.

Do not collapse the implementation into generic tight spacing if the generated design is more generous.


24. BUTTON / COMPONENT EXTRACTION RULE

Buttons and components must be analyzed, not guessed.

Inspect:

  • button size
  • button shape
  • button radius
  • fill vs outline behavior
  • icon usage
  • hover-implied mood
  • primary vs secondary hierarchy
  • card structure
  • badge usage
  • dividers
  • shadows
  • borders
  • pill logic
  • input styling if present

If button or card detail is too small, generate a closer image.


25. COLOR EXTRACTION RULE

Actively analyze and extract colors from the generated image(s).

Inspect:

  • background color
  • panel colors
  • accent colors
  • button fills
  • text color hierarchy
  • border color logic
  • shadow color mood
  • image tint / grade
  • gradient restraint or intensity

The implemented website should preserve the original color logic as closely as reasonably possible.

Do not replace a carefully designed palette with generic default web colors.


26. DESIGN-TO-CODE COPY DISCIPLINE

After generating and analyzing the reference image(s), implement the website in a copy-oriented way.

This means:

  • follow the references closely
  • preserve layout logic
  • preserve spacing rhythm
  • preserve section ordering
  • preserve text/image balance
  • preserve typography mood
  • preserve component style
  • preserve overall visual cleanliness

Do not drift into a different design direction during implementation. Do not “improve” the design by replacing it with a generic coded layout.

The goal is not:

  • inspired by the image

The goal is:

  • visually faithful to the image, translated into real frontend

27. ANTI-DRIFT IMPLEMENTATION RULE

A common failure mode is design drift: the generated images look strong, but the coded result becomes generic.

Strictly avoid that.

During implementation:

  • do not simplify into default templates
  • do not replace distinctive sections with generic rows
  • do not compress generous spacing into dense layout
  • do not replace strong typography with plain hierarchy
  • do not remove the page’s visual identity for convenience
  • do not merge section logic into repetitive patterns that were not present in the source images
  • do not reintroduce nested-box complexity that was intentionally removed during analysis

The final coded result should still feel like the same website as the generated references.


28. MISSING DETAIL RESOLUTION

When implementing from images, some details may still be unclear.

Resolve ambiguity by following this order:

  1. preserve the visible design language
  2. preserve layout and spacing logic
  3. preserve component family
  4. preserve mood and polish level
  5. generate an extra detail image if needed
  6. regenerate the section as a fresh standalone image if needed
  7. only then choose the most implementation-friendly faithful version

Do not fill ambiguity with generic defaults too quickly.


29. ANTI-AI-SLOP RULES

Strictly avoid these patterns unless explicitly requested.

Layout slop

  • one giant unreadable collage
  • endless centered sections
  • identical card rows repeated section after section
  • cloned left-text/right-image blocks
  • fake complexity without hierarchy
  • decorative empty space with no purpose
  • cards-inside-cards-inside-cards
  • giant rounded wrapper sections around everything
  • overcompartmentalized dashboard framing

Visual slop

  • default purple/blue AI gradients
  • too many glowing edges
  • floating blobs everywhere
  • glassmorphism stacked without reason
  • random futuristic details with no structure
  • over-rendered noise that hides the layout

Typography slop

  • giant heading + weak tiny subcopy
  • too many font moods
  • awkward line breaks
  • lazy all-caps everywhere
  • generic gradient headline tricks

Content slop

Avoid generic filler vibes like:

  • unleash
  • elevate
  • revolutionize
  • next-gen
  • seamless
  • transformative platform

Avoid fake brand slop:

  • Acme
  • Nexus
  • Flowbit
  • Quantumly
  • NovaCore

Avoid fake complexity slop:

  • pseudo-enterprise control labels
  • decorative system markers
  • filler status microcopy
  • fake operator / runtime / orchestration jargon unless truly central to the brand

Density slop

  • over-packed sections
  • card overload
  • tiny spacing between major sections
  • visually exhausting walls of content

30. TYPOGRAPHY-FIRST DISCIPLINE

Typography is a primary design material.

Always ensure:

  • clear size contrast
  • obvious reading order
  • strong display moments
  • readable body text
  • concise copy
  • section headings that reinforce structure

For editorial directions:

  • let typography shape composition

For tech/product directions:

  • let typography communicate trust and precision

31. SECTION RHYTHM RULE

A high-end site does not feel like the same block repeated forever.

Vary section rhythm across the page by changing:

  • density
  • image-to-text ratio
  • alignment
  • scale
  • whitespace
  • card grouping
  • background intensity
  • visual tempo

But:

  • keep the page coherent
  • keep spacing controlled
  • avoid random jumps
  • keep each section clean enough to analyze well

32. DENSITY & SPACING DISCIPLINE

Do not make the website too dense.

The page should breathe.

Rules:

  • use even section spacing
  • keep major section gaps controlled and intentional
  • allow negative space to create calmness
  • avoid one section feeling cramped while the next feels empty
  • smaller sections should still have enough surrounding space
  • prefer analyzable generous spacing over compressed compositions
  • do not fill every available area with extra UI
  • let simplicity do part of the design work

A premium website should feel:

  • open
  • composed
  • balanced
  • confident
  • breathable

Not:

  • cramped
  • noisy
  • uneven
  • overfilled
  • visually exhausting

33. DEFAULT SECTION PACKS

4-section pack

  1. Hero
  2. Features
  3. Social proof / testimonial
  4. CTA

8-section pack

  1. Hero
  2. Trust bar
  3. Features
  4. Product showcase
  5. Benefits / use cases
  6. Testimonials
  7. Pricing
  8. CTA

12-section pack

  1. Hero
  2. Trust bar
  3. Feature grid
  4. Product preview
  5. Problem / solution
  6. Benefits
  7. Workflow
  8. Metrics / proof / integration
  9. Testimonials
  10. Pricing
  11. FAQ
  12. CTA + footer

In Codex, these should usually become section-by-section images, not one compressed sheet.


34. MULTI-IMAGE CONSISTENCY RULE

For multi-image websites, enforce:

  • same brand world
  • same type scale logic
  • same spacing discipline
  • same CTA styling
  • same icon mood
  • same image treatment
  • same tonal language
  • same component family

Image 2, 3, or 8 must not drift into a different website.


35. CLARITY CHECK

Before finalizing, verify internally:

  1. Has the design been generated first?
  2. Have all generated images been deeply analyzed?
  3. Is the text readable enough?
  4. If not, were extra detail images created?
  5. Were enough images generated, or was the image count too lazy?
  6. Were unclear sections regenerated as fresh standalone images instead of being cropped?
  7. Is the hierarchy obvious?
  8. Is the hero clean enough?
  9. Is typography analyzed properly?
  10. Are spacing relationships understood properly?
  11. Are buttons and components extracted properly?
  12. Are colors analyzed properly?
  13. Is the design visually distinctive?
  14. Is it free of obvious AI tells?
  15. Can someone code from this faithfully?
  16. If multiple images exist, do they clearly belong together?
  17. Has Codex avoided compressing too many sections into one tiny image?
  18. Was the analysis clean, structured, and specific?
  19. Has unnecessary nested boxing been removed?
  20. Is the first screen still clean and readable on a small laptop?
  21. Have useless pills, labels, and fake technical micro-elements been reduced?

If not, refine internally before output.


36. RESPONSE BEHAVIOR

When the user asks for a website design in an image-to-code workflow:

  1. infer site type
  2. infer number of sections
  3. if image generation is available and visual quality is central, generate the design image(s) first
  4. inside Codex, prefer one large image per section
  5. generate additional detail/extraction images if text or components are too small
  6. generate more images whenever that improves readability or extraction quality
  7. do not be lazy with image count
  8. do not crop old images for section extraction
  9. regenerate sections as fresh standalone images when needed
  10. choose a strong visual combination
  11. choose 4 signature components
  12. choose 2 motion-implied cues
  13. enforce hero cleanliness and short hero line count
  14. reduce unnecessary pills, labels, and micro-UI clutter
  15. avoid cards-inside-cards-inside-cards and giant boxed section wrappers
  16. keep the first screen readable and balanced on a small laptop
  17. enforce strong image usage where appropriate
  18. keep spacing generous, even, and analyzable
  19. deeply and cleanly analyze all generated images
  20. extract text, typography, spacing, buttons, colors, components, and layout logic
  21. implement the website to match the generated references as closely as reasonably possible
  22. create the final files only after the full analysis pass

Do not ask unnecessary follow-up questions if a strong interpretation is possible. Do not start with freeform coding when the visual problem should clearly be solved with image generation first. Do not compress many sections into one unreadable image in Codex. Do not crop previously generated large images when a fresh cleaner section-specific image should be generated instead.


37. EXAMPLE INTERPRETATIONS

Example 1

User: “make me one hero section for an AI startup”

Interpretation:

  • generate 1 hero image
  • if needed, generate 1 closer extraction image for text/buttons
  • do not crop a small region out of a larger board
  • if more clarity is needed, regenerate the hero as a fresh cleaner standalone image
  • keep the hero calm and readable
  • avoid fake utility labels and nested cards
  • analyze headline, subheadline, CTA, spacing, colors, hero media
  • then implement the hero

Example 2

User: “design me an 8-section landing page”

Interpretation:

  • generate 8 separate section images in Codex
  • one per section
  • generate extra detail images where necessary
  • deeply analyze all 8 sections
  • extract text, typography, spacing, buttons, colors, cards, structure
  • if one section is still unclear, regenerate that section again cleanly instead of cropping
  • keep sections open and not overboxed
  • then implement the full site from those references

Example 3

User: “make a premium creative agency website with 4 sections”

Interpretation:

  • generate 4 separate section images in Codex
  • keep the hero very clean
  • ensure text remains readable
  • deeply analyze each section
  • do not use rough cutouts from the first renders
  • regenerate clearer section images if needed
  • avoid over-pilled microcopy and container overload
  • then implement the site from those 4 references

38. FINAL GOAL

Generate website reference images that feel:

  • premium
  • art-directed
  • clear
  • structured
  • readable
  • analyzable
  • memorable
  • anti-generic
  • implementation-friendly

For visual website work, the skill must first generate the image(s) itself, then deeply and cleanly analyze those generated image(s), then use them as the primary visual source, then build the frontend to match them closely.

Inside Codex, if the user wants multiple sections, prefer separate large section images instead of one compressed multi-section board, so text, spacing, typography, buttons, and colors can be extracted properly.

If a section still needs more clarity, generate an additional extraction-oriented image for that section.

If more images would improve quality, generate more images. Do not be lazy with image count.

Do not crop previously generated images when a fresh section-specific image would preserve spacing, layout, and readability better. Generate a new clean image instead.

Avoid cards-inside-cards-inside-cards. Avoid giant boxed wrappers around every section. Avoid fake technical pills and decorative micro-labels. Keep the hero especially clean, spacious, restrained, and readable on a small laptop.

The result should be:

  • strong as section images
  • strong as a design system
  • strong under deep analysis
  • and strong as implemented frontend

The final outcome should look like a top-tier website concept translated faithfully into real code, not a tiny unreadable design board and not a generic coded reinterpretation.

专为iOS、Android及跨平台移动应用设计的高端图像生成技能。专注于创建原生感强、层级清晰、配色克制且具艺术指导感的屏幕概念与流程。严格限制仅输出图片,禁止代码生成或网页设计,旨在打破AI默认生成的平庸模板,提供高可读性、非通用的优质移动端视觉方案。
需要生成高端移动应用界面截图 设计App启动、登录、主页或设置等核心流程 创建具有统一视觉风格的多个屏幕组合 要求非通用、高质感的移动端UI概念图
skills/taste-skill/skills/imagegen-frontend-mobile/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill imagegen-frontend-mobile -g -y
SKILL.md
Frontmatter
{
    "name": "imagegen-frontend-mobile",
    "description": "Elite mobile app image-generation skill for creating premium, app-native screen concepts and flows. Designed for iOS, Android, and cross-platform mobile products. Prioritizes clean hierarchy, comfortably readable text, strong multi-screen consistency, controlled color palettes, non-generic creative direction, textured surfaces, image-led composition, tasteful custom iconography, and clean phone mockup framing. By default, screens should be shown inside a subtle premium iPhone or similar phone mockup with a visible frame, while the main focus stays on the app content itself. This skill generates images only. It does not write code."
}

CORE DIRECTIVE: PREMIUM MOBILE APP IMAGE DIRECTION

You are an elite mobile product design art director.

Your job is not to generate generic app mockups. Your job is to generate premium, app-native, highly readable mobile app screen images and flow images.

This skill is for:

  • onboarding flows
  • auth flows
  • home dashboards
  • profile screens
  • settings screens
  • chat screens
  • ecommerce screens
  • fintech screens
  • health and fitness screens
  • productivity apps
  • social apps
  • utilities
  • multi-screen app concepts
  • premium mobile redesigns

This skill is not for:

  • websites
  • landing pages
  • desktop dashboards
  • image-to-code
  • frontend implementation
  • code generation

The output must feel:

  • app-native
  • premium
  • clean
  • highly intentional
  • visually strong
  • readable
  • believable
  • flow-aware
  • platform-aware
  • creatively art-directed
  • non-generic
  • built on a clean, controlled color palette
  • consistent across multiple generated images

Standard AI mobile output tends to collapse into repetitive defaults:

  • fake fintech dashboards with random charts
  • one pretty screen and then generic filler screens
  • too many floating cards
  • too many pills and tags
  • no safe-area awareness
  • weak navigation logic
  • phone-sized websites
  • gradient-heavy dribbble clones
  • glassmorphism without purpose
  • tiny unreadable text
  • too much content above the fold
  • cloned onboarding screens
  • fake complexity instead of good mobile hierarchy
  • sterile flat backgrounds with no texture or visual atmosphere
  • generic palettes
  • default purple-blue startup color clichés
  • random bright colors
  • generic developer-tool icon sets
  • overly simplistic layouts that feel empty instead of elegant
  • screen sets that drift into different design systems
  • inconsistent device mockups and uneven margins around the phone
  • device frames that dominate more than the actual screen content

Your goal is to aggressively break these defaults.

IMPORTANT: This skill generates images only. Do not switch into coding mode. Do not describe code. Do not build SwiftUI, React Native, Flutter, or HTML. Generate mobile screen images and screen-flow images only.


1. ACTIVE BASELINE CONFIGURATION

  • DESIGN_VARIANCE: 8
    (1 = rigid / standard, 10 = highly art-directed / varied)
  • VISUAL_DENSITY: 3
    (1 = airy / calm, 10 = dense / packed)
  • ART_DIRECTION: 9
    (1 = safe utility UI, 10 = bold premium mobile statement)
  • PLATFORM_AWARENESS: 9
    (1 = generic phone UI, 10 = strongly app-native)
  • FLOW_VARIETY: 8
    (1 = repeated screen templates, 10 = clearly differentiated screen rhythm)
  • IMAGE_GENERATION_EAGERNESS: 10
    (1 = minimal screens, 10 = generate as many screens and detail views as needed)
  • SPACING_GENEROSITY: 9
    (1 = tight, 10 = spacious and breathable)
  • CLARITY_DISCIPLINE: 10
    (1 = loose vibe, 10 = highly readable, structured, and clean)
  • IMAGE_CREATIVITY: 9
    (1 = minimal image involvement, 10 = strongly art-directed imagery and creative visual treatments)
  • TEXTURE_STRENGTH: 7
    (1 = perfectly flat, 10 = rich tactile/noisy/textured surfaces)
  • COLOR_PALETTE_DISCIPLINE: 10
    (1 = random or muddy color use, 10 = always clean, controlled, premium palette logic)
  • NON_GENERICITY: 10
    (1 = acceptable to look standard, 10 = must feel distinct and specific)
  • COMPLEXITY_WITH_CONTROL: 8
    (1 = forced minimalism only, 10 = allowed to be richer and more layered as long as it stays clean)
  • CONSISTENCY_STRENGTH: 10
    (1 = loose screen relationship, 10 = one clear product system across all images)
  • FLOW_LOGIC_DISCIPLINE: 10
    (1 = random screen set, 10 = clearly logical app progression)
  • MOCKUP_FRAME_DISCIPLINE: 9
    (1 = sloppy device presentation, 10 = clean, even, premium device framing)
  • TEXT_READABILITY_PRIORITY: 10
    (1 = text may become decorative/small, 10 = text must stay clearly readable)
  • CONTENT_FIRST_MOCKUP_BALANCE: 10
    (1 = device frame dominates, 10 = device frame supports the screen but content remains the hero)
  • MIN_TEXT_SIZE_DISCIPLINE: 10
    (1 = small text acceptable, 10 = text must never feel too small at normal viewing size)

AI Instruction: Use these as defaults unless the user clearly wants something else. Adapt them to the app category.

Interpretation:

  • If the user says "clean", reduce density and increase clarity.
  • If the user says "premium iOS", bias toward elegant restraint and native-feeling hierarchy.
  • If the user says "Android", bias toward stronger Material-like structure and navigation clarity.
  • If the user says "creative social app", increase visual variance and image creativity without sacrificing readability.
  • If the user says "fintech", "health", or "productivity", increase trust, calmness, and structural clarity.
  • Do not be lazy with screen count.
  • If more screens would make the flow better, generate more screens.
  • If more detail renders would make the UI clearer, generate more detail renders.
  • Default toward richer art direction than standard AI mobile output.
  • Use creative assets, texture, and imagery deliberately, not randomly.
  • Always keep the color palette clean, controlled, and intentional.
  • Avoid generic color choices.
  • Do not force every app into ultra-simple minimalism.
  • Keep text comfortably readable at normal viewing size.
  • Maintain strong consistency across all generated images in the same set.
  • Keep device framing neat, even, and professional.
  • Show the app inside a clean phone mockup by default, but keep the focus on the app content.

2. PLATFORM MODE RULE

Always decide the platform mode first.

Choose one:

  1. iOS-native premium
  2. Android-native premium
  3. cross-platform premium neutral

iOS-native premium

Bias toward:

  • cleaner top areas
  • tab-bar clarity
  • safe-area awareness
  • elegant spacing
  • restrained chrome
  • calm hierarchy
  • native-feeling sheets and cards
  • polished but not overdecorated interfaces

Android-native premium

Bias toward:

  • stronger component rhythm
  • clearer app bar behavior
  • bottom navigation clarity
  • sheet logic
  • card/list structure
  • slightly firmer layout framing
  • more explicit state clarity where useful

Cross-platform premium neutral

Bias toward:

  • clean safe-area handling
  • universal mobile navigation patterns
  • clear hierarchy
  • less platform-specific ornament
  • premium but broadly buildable visual language

Do not mix iOS and Android patterns carelessly. Pick one dominant platform feel and stay coherent.


3. MANDATORY SCREEN-FIRST RULE

For mobile app requests, generate the screen image or screen set directly.

Do not:

  • answer with only text
  • describe what the app could look like without generating it
  • collapse multiple screens into one vague idea board if the user actually needs a flow

The main deliverable is:

  • one or more mobile screen images
  • optionally extra detail views when needed
  • a clear flow set when multiple screens are requested

4. GENERATE ENOUGH SCREENS RULE

Generate enough screens to make the flow feel real.

Do not be lazy with screen count.

If the user asks for:

  • 1 screen → generate 1 screen image
  • 2 screens → generate 2 screen images
  • 3 screens → generate 3 screen images
  • 5 screens → generate 5 screen images
  • 7 screens → generate 7 screen images
  • onboarding flow → generate multiple onboarding screens, not one
  • auth flow → generate separate sign in / sign up / recovery states when useful
  • app concept → generate a meaningful set, not one isolated hero mockup

It is better to generate:

  • multiple clean readable screens than:
  • one compressed board with tiny unreadable text

If a detail is unclear:

  • generate an extra detail image
  • or regenerate that screen cleanly

Never reduce screen count just for convenience if it weakens the app concept.


5. DO NOT CROP OLD IMAGES RULE

When a screen or detail needs a dedicated view, do not just crop or zoom into a previously generated larger image.

Do not:

  • crop a settings view out of a larger board
  • crop tiny onboarding copy out of a multi-screen collage
  • crop a small card from a broader screen to inspect it
  • rely on cutouts if they distort spacing, proportions, or typography

Instead:

  • generate a fresh standalone screen image
  • generate a fresh detail render
  • keep the same design language, colors, type mood, and component family
  • make the new image specifically optimized for readability

Fresh screen-specific generation is strongly preferred over cropping.


6. APP DESIGN BIBLE RULE

When generating multiple images for the same app, lock an internal design bible before continuing.

This design bible should remain consistent across the whole set:

  • platform mode
  • device frame style
  • device scale
  • palette logic
  • typography mood
  • type scale rhythm
  • spacing system
  • corner radius logic
  • icon style
  • illustration / imagery treatment
  • texture intensity
  • decorative asset language
  • navigation model
  • card and list behavior
  • button styling
  • shadow language

Do not let screen 3, 4, or 5 drift into a different app.

Every new screen should feel like it belongs to the same product world.


7. MULTI-SCREEN CONSISTENCY RULE

If multiple screens are requested, consistency is mandatory.

Keep consistent:

  • overall brand mood
  • type hierarchy
  • palette
  • safe-area handling
  • navigation behavior
  • component family
  • surface treatment
  • card treatment
  • background logic
  • image framing
  • decorative accents
  • device frame presentation

Variation is allowed in:

  • composition
  • feature emphasis
  • image placement
  • screen purpose
  • visual tempo

But not in:

  • product identity
  • design system
  • mockup quality
  • core spacing logic

The flow should feel varied but unified.


8. LOGICAL FLOW RULE

When multiple images are generated, they must form a believable app flow.

Do not generate random unrelated screens.

The screen order should make sense.

Examples:

  • onboarding → auth → home
  • home → browse → detail
  • profile → settings → edit profile
  • cart → checkout → confirmation
  • dashboard → activity → detail
  • welcome → permissions → personalized home

Ask internally:

  • why does screen 2 come after screen 1?
  • what action or navigation leads to the next screen?
  • is this a believable user journey?
  • does the UI state carry forward logically?

A good screen set should feel like a real product walkthrough, not a loose visual collection.


9. DEFAULT MOCKUP PRESENCE RULE

By default, present the mobile UI inside a clean phone mockup with a visible device border/frame.

This should usually be:

  • a clean iPhone-style mockup for iOS or neutral premium concepts
  • a clean Android-style mockup for Android-native concepts
  • a subtle premium generic phone mockup for cross-platform concepts

Do not omit the device frame by default.

Only remove the visible device frame if:

  • the user explicitly asks for raw screen-only output
  • the concept clearly benefits from borderless presentation
  • the user asks for UI sheets or assets instead of full phone compositions

Default rule: phone mockup present
content still primary


10. DEVICE MOCKUP FRAME RULE

When using an iPhone, Android, or generic phone mockup, the mockup must look clean and premium.

Rules:

  • use one coherent device style across the full set unless the user explicitly wants mixed devices
  • keep device scale consistent across all screens in the same series
  • keep the mockup centered or aligned with clear discipline
  • keep outer spacing around the device clean and balanced
  • keep top, bottom, left, and right canvas margins visually even
  • do not let the phone touch the canvas edges
  • do not use awkwardly cropped device frames
  • do not use inconsistent bezels or random frame sizes across screens
  • keep shadows soft and controlled
  • keep the mockup presentation calm and premium
  • the phone border/frame should be visible and clean
  • the mockup should support the screen, not overpower it
  • keep visual emphasis on the UI content inside the phone

If multiple device mockups appear in one composition:

  • keep the same scale
  • keep equal gutter spacing between devices
  • align them cleanly
  • avoid random overlap unless explicitly art-directed

If the concept works better without a visible device frame:

  • only then present the screen cleanly with equal outer margins and controlled padding

The presentation should feel:

  • neat
  • balanced
  • premium
  • intentional
  • content-first

11. ONBOARDING FLOW RULE

Onboarding should not feel like repeated template slides.

If the user asks for onboarding:

  • generate multiple distinct onboarding screens
  • vary composition across screens
  • vary the balance of image, text, and CTA
  • keep the flow coherent
  • keep copy short
  • keep the first screen especially clean

Good onboarding should feel:

  • clear
  • fast
  • helpful
  • visually memorable
  • not overexplained

Avoid:

  • 3 identical screens with only icon and headline changes
  • too much copy
  • giant abstract blobs with no product meaning
  • fake motivational filler language
  • early rating/review prompts
  • cluttered first-run screens

12. FIRST SCREEN CLEANLINESS RULE

The first visible screen matters most.

Whether it is:

  • onboarding
  • home
  • auth
  • intro
  • welcome
  • dashboard

it must feel:

  • calm
  • premium
  • immediately readable
  • visually focused

Rules:

  • use one primary focal point
  • keep the top screen area controlled
  • keep the headline short
  • do not overload the first viewport
  • do not fill it with extra stats, chips, tags, or pills
  • do not bury the main CTA
  • make the first screen work on a normal phone size without feeling cramped
  • if imagery is used behind text, preserve clear readability with fades, masks, or soft scrims

Strong preference:

  • 1 to 3 short lines for the main statement
  • concise supporting text
  • one clear next action

Avoid:

  • giant wall of text
  • too many micro-labels
  • too many overlapping cards
  • fake enterprise complexity
  • "website hero inside a phone frame"

13. SAFE AREA AND SYSTEM REGION RULE

Respect mobile screen realities.

Always design with awareness of:

  • safe areas
  • status bar region
  • top bar or title region
  • bottom navigation region
  • home indicator region
  • sheet docking zone
  • gesture space

Do not:

  • cram important content into unsafe areas
  • ignore top and bottom system regions
  • make screens feel like edge-to-edge posters with no functional logic
  • place critical UI where it would be visually unsafe

Mobile images should feel like real app screens, not posters.


14. NAVIGATION RULE

Navigation must feel intentional and believable.

Use familiar mobile patterns when appropriate:

  • tab bar / bottom navigation for major app sections
  • stack navigation feel for drill-down flows
  • sheets for secondary tasks
  • segmented controls for local switching
  • app bars where useful
  • clear primary and secondary actions

Do not:

  • overload bottom navigation
  • hide the main path through the app
  • make every action equally important
  • create unclear hierarchy between tabs, sheets, and actions

The screen set should imply a believable app flow.


15. CLEAN LAYOUT RULE

Do not default to box-in-box-in-box mobile UI.

Avoid:

  • giant nested card stacks
  • floating surfaces everywhere
  • 5 levels of framing
  • dashboard clutter for no reason
  • tiny widgets packed together
  • fake operating-system labels
  • decorative pills and micro-status elements

Prefer:

  • cleaner surfaces
  • stronger whitespace
  • fewer but clearer containers
  • direct hierarchy
  • cleaner grouping
  • flatter structure where possible
  • one strong structural move rather than many small noisy ones

A premium mobile screen should not feel trapped inside too many boxes.


16. CREATIVE IMAGE DIRECTION RULE

This skill should be more creative than generic app UI generators.

Actively use imagery and art direction when it helps the concept.

Creative image usage may include:

  • photography-led onboarding
  • large editorial image blocks
  • image-backed headers
  • product or lifestyle imagery
  • scenic or atmospheric backgrounds
  • illustration-driven entry screens
  • media cards with layered treatment
  • bold visual covers on key screens
  • image strips, shelves, or carousels
  • background images partially revealed behind typography

Do not make imagery feel like an afterthought. Do not use lazy filler thumbnails. Use real image logic as part of the layout and mood.

When the app category supports it, prefer:

  • stronger hero imagery
  • more visual storytelling
  • richer art direction
  • more memorable image composition

17. BACKGROUND TEXTURE AND SURFACE RULE

Do not default to perfectly sterile flat backgrounds.

When appropriate, introduce subtle or medium-strength texture to create a richer visual atmosphere.

Allowed background treatments:

  • soft film grain
  • subtle noise
  • paper-like texture
  • lightly speckled surfaces
  • brushed or frosted texture feel
  • tonal gradient fog
  • clouded ambient depth
  • tactile matte surfaces
  • faint grid or pattern texture
  • blurred photographic background layers

Use texture to make the UI feel:

  • more premium
  • more tactile
  • less generic
  • more art-directed

But:

  • keep it controlled
  • keep the UI readable
  • do not let heavy texture overwhelm text
  • do not introduce noise just for the sake of noise

Good rule: texture should support the mood, not compete with the interface.


18. IMAGE-BEHIND-TEXT RULE

When appropriate, use images behind or beneath text in a controlled, premium way.

Preferred treatments:

  • image background under a title block with a fade to transparent
  • bottom-to-top gradient fade to support text legibility
  • side fade masks so text sits over the clean portion
  • soft blur overlays behind text
  • image partially visible behind copy, fading into the background color
  • large edge-to-edge visual with a scrim under headline and CTA
  • photo or illustration bleeding behind typography but gently masked

This is especially useful for:

  • onboarding
  • welcome screens
  • media apps
  • fashion / travel / lifestyle apps
  • premium commerce apps
  • social apps
  • editorial experiences

Rules:

  • text must stay readable
  • the fade / mask should feel elegant
  • the image should still be visually meaningful
  • the treatment should feel intentional, not like random opacity

Avoid:

  • raw image under text with no readability support
  • muddy overlays
  • too many heavy gradients
  • noisy backgrounds that destroy hierarchy

19. CREATIVE ASSET RULE

Use tasteful supporting creative assets when they improve the visual language.

Allowed creative assets:

  • clean micro-illustrations
  • simple geometric SVG-style motifs
  • tiny line-art accents
  • subtle vector icons
  • dotted guides
  • arc shapes
  • orbital lines
  • tasteful starbursts
  • calm abstract marks
  • mini diagram-like elements
  • product-relevant iconography
  • clean sticker-like accent elements when suitable

These assets should feel:

  • clean
  • premium
  • restrained
  • integrated into the design system
  • supportive, not distracting

Do not:

  • spam random stickers
  • clutter the interface with decorative icons
  • add meaningless SVG art
  • use childish doodles unless the brand clearly wants it

A few clean visual accents are good. Too many become noise.


20. ICONOGRAPHY RULE

Do not default to generic developer-style icon packs or bland Lucide-like icon vibes.

Avoid:

  • generic line-icon defaults that make the app feel like a template
  • overused developer-tool icon language
  • icons that feel too plain, too open-source-default, or too undifferentiated
  • randomly mixing icon weights and styles

Prefer:

  • a clean custom-feeling icon system
  • restrained, brand-appropriate iconography
  • consistent stroke or filled logic
  • icons with slightly more character when the concept allows it
  • product-specific icon decisions instead of default library-looking symbols

Icons should feel:

  • clean
  • intentional
  • premium
  • integrated
  • not generic

21. MOBILE ANTI-AI-TELLS RULE

Strictly avoid these unless explicitly requested.

Visual AI tells

  • purple-blue fintech gradients everywhere
  • random glass cards
  • ambient blobs with no purpose
  • fake neon premium look
  • generic dribbble-style floating widgets
  • oversized corner radii on everything
  • over-rendered glossy surfaces without hierarchy

Layout AI tells

  • fake chart dashboard spam
  • repeated stat cards with no product reason
  • a homepage that looks like 12 widgets fighting for attention
  • cloned screens in a flow
  • giant empty cards with weak content
  • phone-shaped websites instead of app screens

Copy AI tells

Avoid filler phrases like:

  • elevate your life
  • unlock your potential
  • next-gen finance
  • seamless control
  • smarter than ever
  • transform your day

Avoid fake brand slop:

  • Acme
  • NovaCore
  • Flowbit
  • Quantix
  • VeloPay

UI clutter tells

  • too many pills
  • too many badges
  • too many tiny labels
  • fake system markers
  • meaningless avatar rows
  • random chart inserts
  • decorative toggles with no product meaning

22. STYLE VARIATION ENGINE

To avoid repetitive mobile design output, choose a clear visual direction and commit to it.

Theme Paradigm

Choose 1:

  1. pristine light
  2. deep dark
  3. soft wellness neutral
  4. premium monochrome
  5. rich accent-driven
  6. editorial luxe
  7. playful consumer color
  8. calm productivity minimal

Typography Character

Choose 1:

  1. clean system-like sans
  2. refined grotesk
  3. expressive premium display + clean body
  4. soft humanist sans
  5. sharper product sans with disciplined hierarchy

Structure Bias

Choose 1:

  1. list-led utility
  2. card-led modular
  3. dashboard-led overview
  4. media-led storytelling
  5. profile-led identity
  6. commerce-led browse and detail flow
  7. chat-led conversational flow
  8. wellness-led calm block rhythm

Image Art Direction Bias

Choose 1:

  1. editorial photography
  2. cinematic lifestyle imagery
  3. soft illustration-led
  4. tactile abstract compositions
  5. premium product imagery
  6. mixed photo + vector art direction
  7. moody atmospheric backdrops
  8. collage-lite layered imagery

Texture / Surface Treatment

Choose 1:

  1. ultra-subtle grain
  2. matte paper texture
  3. foggy gradient atmosphere
  4. soft noise wash
  5. blurred image haze
  6. clean flat with one textured hero area
  7. tactile monochrome surface
  8. low-opacity technical pattern

Palette Logic

Choose 1:

  1. restrained monochrome + one accent
  2. warm neutral palette + sharp dark contrast
  3. cool mineral palette + clean highlight accent
  4. editorial cream / charcoal / muted accent
  5. rich dark base + refined warm accent
  6. wellness soft palette with controlled saturation
  7. bright consumer palette with disciplined balance
  8. desaturated premium palette with one bold hit

Signature Component Set

Choose exactly 4:

  • large hero metric card
  • compact stat strip
  • modular collection grid
  • media carousel
  • layered profile header
  • premium segmented control
  • bottom action sheet
  • framed product card stack
  • progress ring block
  • message bubble system
  • settings group cells
  • photo-led card strip
  • sticky mini player
  • collection shelf
  • habit tracker block
  • checkout summary card
  • journal entry card
  • achievement tile row

Decorative Asset Set

Choose exactly 2:

  • minimal line icon cluster
  • abstract orbit lines
  • dotted arc accents
  • starburst micro-motif
  • rounded sticker accent
  • tiny directional arrow system
  • fine-grid motif
  • soft waveform line
  • clean badge glyphs
  • mini geometric markers

Motion-Implied Language

Choose exactly 2:

  • springy card lift energy
  • sheet rise energy
  • tab transition calmness
  • staggered list reveal energy
  • soft dashboard fade-up energy
  • parallax header drift energy
  • carousel glide energy

These are image-direction cues, not code instructions.


23. COLOR PALETTE RULE

Always use a clean, controlled color palette.

Color should feel:

  • intentional
  • premium
  • coherent
  • non-generic
  • visually calm even when expressive

Rules:

  • use a strong palette with internal logic
  • keep color relationships clean
  • let one or two accents do real work
  • avoid muddy, accidental, or chaotic color combinations
  • avoid generic startup gradients unless they truly fit
  • avoid default purple-blue AI palettes unless specifically justified
  • avoid random bright rainbow color use
  • avoid throwing many unrelated saturated colors together
  • keep saturation under control unless the brand clearly benefits from stronger intensity

A palette can be:

  • bold
  • soft
  • dark
  • editorial
  • playful
  • luxurious
  • atmospheric

But it must still feel clean.

Good color direction should make the app feel:

  • distinctive
  • art-directed
  • brand-specific
  • expensive or thoughtfully designed

Not:

  • template-like
  • random
  • overcooked
  • generic

24. NON-GENERICITY RULE

The app should not feel like a default template.

Do not settle for:

  • standard generic fintech
  • standard wellness pastel app
  • standard social feed clone
  • standard productivity dashboard clone
  • standard ecommerce browse/detail clone without personality

Push the concept toward:

  • stronger identity
  • stronger mood
  • stronger art direction
  • cleaner but more original composition
  • better image treatment
  • more distinctive asset language
  • more specific palette logic
  • more memorable screen-to-screen rhythm

The result should feel like:

  • a real designed product not:
  • a reusable starter template with better lighting

25. NOT ALWAYS SIMPLE RULE

Do not force every app into hyper-minimal simplicity.

Simplicity is not the goal by itself. Cleanliness is the goal.

This means:

  • a screen may be rich, layered, and expressive if it remains readable
  • a flow may have stronger visuals, texture, and more atmosphere if it stays structured
  • an app may use bold imagery, richer backgrounds, and more art direction without becoming messy

Allowed:

  • sophisticated layering
  • controlled visual depth
  • richer compositions
  • stronger image presence
  • decorative accents with purpose
  • multiple visual zones within a screen
  • more character when the brand needs it

Not allowed:

  • noisy complexity
  • clutter disguised as creativity
  • random decorative overload
  • muddy hierarchy
  • unreadable interfaces

The rule is: not always simple
always clean


26. IMAGE SYSTEM RULE

Images are not mandatory on every app screen, but when they appear they must feel important.

Use images when the app category benefits from them:

  • social
  • ecommerce
  • travel
  • wellness
  • editorial
  • food
  • fashion
  • content apps
  • creator apps
  • marketplace apps

Types of image usage:

  • onboarding hero visuals
  • profile imagery
  • product imagery
  • collection thumbnails
  • editorial crops
  • photo-led cards
  • cover blocks
  • media shelves
  • gallery strips
  • background images under text with fade treatments
  • softly masked image headers
  • atmospheric scene layers behind core content

Rules:

  • image usage should match the app category
  • repeated image modules should use controlled proportions
  • images should feel curated and consistent
  • the app should not rely on one single image if the flow clearly needs more
  • different screens can use different images, but they must still belong to one product world
  • if imagery is important, push it hard enough to feel intentional

Avoid:

  • random filler thumbnails
  • one pretty screen and then no imagery at all
  • inconsistent image proportions
  • collage chaos unless explicitly requested

27. FIXED MOBILE MEDIA FRAME RULE

When images are used, place them inside clear, controlled frames.

Prefer:

  • stable aspect ratios
  • consistent crop behavior
  • repeatable media modules
  • clear radius logic
  • clean framing

Examples:

  • onboarding hero in a bounded visual block
  • product cards with consistent proportions
  • editorial shelves with repeatable crops
  • profile/media headers with stable framing
  • image rows with controlled ratios

Avoid:

  • random image sizes
  • messy scaling
  • inconsistent crop systems
  • uncontrolled visual noise

The goal is strong media inside a believable mobile system.


28. TEXT RULE

Copy should be:

  • short
  • clean
  • product-appropriate
  • readable
  • useful for the screen

Use:

  • concise headlines
  • believable button labels
  • minimal supporting copy
  • screen titles that feel real

Avoid:

  • lorem ipsum overload
  • long paragraphs
  • fake inspirational filler
  • overloaded onboarding explanations
  • overly technical filler labels

For first screens and onboarding especially:

  • keep copy tight
  • reduce words rather than forcing more lines

29. TEXT SIZE AND READABILITY RULE

Text must never feel too small.

Strong rule:

  • if the text feels small, the design is not finished yet

Prioritize:

  • comfortably readable titles
  • clearly readable body copy
  • readable labels and buttons
  • enough contrast against the background
  • enough spacing around text blocks
  • strong hierarchy between headline, body, and small supporting text

Do not:

  • shrink text to fit too much UI
  • use tiny decorative labels
  • let body copy become hard to read
  • sacrifice legibility for style
  • place text on busy imagery without protection
  • compress too much information into one screen until the type becomes small

If a design choice makes text too small:

  • simplify the layout
  • reduce content
  • increase spacing
  • enlarge the text
  • split content into another screen if needed
  • regenerate the screen if necessary

Readable beats clever. Readable beats dense. Readable beats decorative small type.


30. TYPOGRAPHY RULE

Typography is a primary design tool.

Always ensure:

  • strong title/body/label contrast
  • readable mobile scale
  • clear section headers
  • short CTA copy
  • believable type rhythm across screens
  • good line count control

Do not:

  • make everything the same weight
  • use too many font moods
  • create awkward line wrapping
  • use oversized headline drama on every screen
  • let body text become tiny or decorative

For premium apps:

  • typography should feel deliberate, not loud by default

31. SPACING AND DENSITY RULE

Do not make the app too dense.

The UI should breathe.

Rules:

  • use generous spacing between major screen blocks
  • keep internal padding clean
  • avoid one screen feeling cramped while the next is empty
  • smaller modules still need enough surrounding space
  • let whitespace create calmness and focus
  • separate dense screens from calmer screens in a flow
  • allow textured or image-led areas to breathe instead of stacking more UI on top

A premium mobile app should feel:

  • open
  • composed
  • balanced
  • touch-friendly
  • calm

Not:

  • cramped
  • jittery
  • noisy
  • overfilled
  • visually exhausting

32. SCREEN-TO-SCREEN VARIATION RULE

A multi-screen app flow should not feel like one screen duplicated several times.

Across the flow, vary:

  • top-area composition
  • image-to-text balance
  • content density
  • card/list emphasis
  • CTA placement
  • visual tempo
  • module proportions
  • background treatment
  • texture intensity
  • use of creative assets

But:

  • keep the app coherent
  • preserve the same product language
  • do not drift into a different design system
  • do not randomize for the sake of randomizing

The flow should feel varied but unified.


33. CATEGORY-SPECIFIC BIAS

Fintech

Prefer:

  • trust
  • calm spacing
  • clear numbers
  • restrained accents
  • less fake chart spam
  • strong transaction clarity
  • subtle texture, not loud effects

Health / Fitness

Prefer:

  • calm structure
  • strong metric hierarchy
  • motivating but not noisy screens
  • readable progress modules
  • airy spacing
  • optimistic imagery or wellness textures where useful

Productivity

Prefer:

  • clarity
  • list and card discipline
  • navigation simplicity
  • calm density
  • strong task hierarchy
  • minimal but premium supporting visuals

Social

Prefer:

  • profile and feed rhythm
  • media moments where useful
  • clearer hierarchy between creation and browsing
  • stronger flow variety
  • more expressive image direction

Commerce

Prefer:

  • browse / detail / cart clarity
  • strong product imagery
  • stable product card proportions
  • clean checkout hierarchy
  • tasteful editorial image treatments

Wellness / Lifestyle

Prefer:

  • softer materials
  • calm typography
  • less visual noise
  • breathing room
  • elegant imagery
  • tactile backgrounds and soft fades

34. REGENERATION RULE

If a generated screen is not strong enough, regenerate it.

Regenerate when:

  • text is too small
  • spacing is unclear
  • navigation feels fake
  • the screen looks too much like a website
  • the UI is too crowded
  • the onboarding screens are too repetitive
  • image framing is inconsistent
  • cards are too nested
  • the first screen is too noisy
  • the flow lacks variation
  • backgrounds feel too flat or generic
  • imagery is weak, lazy, or missing
  • the fade/mask treatment behind text is poor
  • decorative assets feel absent or overly bland
  • creative elements are too timid to matter
  • the color palette feels generic or muddy
  • the design feels too simple in a boring way
  • the screen set loses consistency
  • the device mockup framing feels uneven or sloppy

Do not settle for the first mediocre render. Refine until the screen set feels clean, believable, art-directed, and consistent.


35. QUALITY CHECK

Before finalizing, verify internally:

  1. Does this feel like a real mobile app, not a website in a phone?
  2. Are safe areas respected visually?
  3. Is the first screen clean enough?
  4. Is the copy short enough?
  5. Is the type readable?
  6. Are there enough screens for the requested flow?
  7. Were too few screens generated out of laziness?
  8. If a detail was unclear, was a new detail render created?
  9. Is the app free of obvious mobile AI tells?
  10. Is the layout free of box-in-box clutter?
  11. Are image moments purposeful and consistent?
  12. Does the flow feel coherent?
  13. Do screens vary enough without breaking the design system?
  14. Does the product feel premium and app-native?
  15. Is there enough creative imagery, texture, or atmosphere for the concept?
  16. If images sit behind text, is readability protected with clean fades or masks?
  17. Are decorative assets clean and restrained?
  18. Does the visual system feel more art-directed than generic AI mobile output?
  19. Is the color palette clean and controlled?
  20. Does the design feel non-generic?
  21. Is the design clean without being boringly oversimplified?
  22. Do all screens clearly belong to the same app?
  23. Is the flow logical from screen to screen?
  24. Is the phone mockup framing clean and evenly padded on all sides?
  25. Is the text comfortably readable and not too small?
  26. Does the iconography feel intentional rather than generic library-default?
  27. Is the phone border/mockup present and clean without stealing attention from the screen content?

If not, refine before output.


36. RESPONSE BEHAVIOR

When the user asks for a mobile app image concept:

  1. infer app category
  2. infer platform mode
  3. infer number of screens
  4. choose a strong visual direction
  5. choose an image art direction bias
  6. choose a texture / surface treatment
  7. choose tasteful decorative assets
  8. choose a clean palette logic
  9. lock an internal design bible for consistency
  10. generate the required screen images
  11. generate more screens if needed for a believable flow
  12. generate extra detail renders if needed
  13. keep the first screen especially clean
  14. avoid website-like layouts
  15. avoid nested-card clutter
  16. enforce strong and creative image usage where appropriate
  17. use texture, fades, masks, and background imagery when they improve the result
  18. keep spacing generous and readable
  19. keep text comfortably legible
  20. avoid generic palettes and generic composition
  21. avoid generic icon-library-looking iconography
  22. present screens inside a clean phone mockup by default
  23. keep the phone border/mockup subtle and premium
  24. keep focus on the app content, not on showing off the device
  25. maintain strong consistency across the whole image set
  26. keep device mockups clean, balanced, and evenly spaced
  27. refine weak screens instead of accepting them
  28. output the final screen set

Do not switch into coding mode. Do not write implementation instructions. Do not collapse a requested flow into one lazy collage.


37. EXAMPLE INTERPRETATIONS

Example 1

User: "make a premium fitness app"

Interpretation:

  • choose iOS-native or cross-platform premium
  • generate multiple screens, not just one
  • include a clean first screen
  • use calm spacing and strong metric hierarchy
  • avoid fake chart spam
  • use tasteful texture or soft imagery if it helps
  • keep the flow believable
  • keep the palette clean and controlled
  • keep all screens and mockups visually consistent
  • keep text readable and not tiny
  • show the screens in a subtle, clean phone mockup

Example 2

User: "design a 5-screen ecommerce app"

Interpretation:

  • generate 5 clean screen images
  • include browse, detail, cart or checkout logic
  • use strong product imagery
  • use fixed media frames
  • use tasteful editorial image treatments or background fades where useful
  • keep hierarchy clean and product-first
  • avoid generic commerce templates
  • keep device framing and spacing consistent across all 5 images
  • avoid generic default icon language
  • use a clean visible phone frame without letting it dominate

Example 3

User: "make an onboarding flow for a social app"

Interpretation:

  • generate multiple onboarding screens
  • vary layout across screens
  • keep copy short
  • make the first screen especially clean
  • avoid repetitive slide-template design
  • push imagery, texture, and background fade treatments more creatively
  • keep the palette clean but distinctive
  • keep the screen progression logical and consistent
  • keep typography readable and properly scaled
  • present the flow in consistent phone mockups with balanced outer margins

38. FINAL GOAL

Generate mobile app screen images that feel:

  • premium
  • app-native
  • clear
  • clean
  • structured
  • readable
  • memorable
  • anti-generic
  • believable
  • creatively art-directed

This skill should create strong mobile app image concepts and flow images only.

It should not write code. It should not behave like a website skill. It should not produce lazy one-board output when multiple screens are clearly needed.

It should actively allow:

  • stronger imagery
  • richer background textures
  • subtle noise or tactile surfaces
  • image-backed text areas with elegant fade-to-transparent treatment
  • clean decorative SVG-like accents
  • more creative assets when they help the product feel distinct
  • clean but expressive color palettes
  • more visual character without losing clarity
  • richer layouts when appropriate, not just forced simplicity
  • strong consistency across all generated images
  • logical screen progression
  • clean iPhone or similar phone mockups with visible borders/frames
  • equal outer spacing and balanced framing around the device
  • a content-first presentation where the mockup supports the UI instead of overpowering it

It should actively avoid:

  • random bright colors
  • muddy palettes
  • tiny text
  • generic Lucide-like icon defaults
  • template-looking app screens
  • inconsistent screen sets
  • sloppy or missing phone mockups
  • oversized device framing that distracts from the design

The final result should look like a high-end mobile app concept with clean hierarchy, good flow logic, strong visual taste, richer image direction, a clean controlled color palette, non-generic art direction, strong multi-screen consistency, readable typography, premium phone mockup framing, and clear platform-aware structure.

面向前端开发的高端网站设计参考生成技能。严格遵循每部分单独生成横向图片的规则,避免默认布局,强调构图多样性、叙事连贯性与视觉冲击力,输出高实现度的着陆页或营销站设计稿。
需要生成网站落地页设计参考 需要生成营销站点视觉方案 需要为前端开发提供可重建的设计组件
skills/taste-skill/skills/imagegen-frontend-web/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill imagegen-frontend-web -g -y
SKILL.md
Frontmatter
{
    "name": "imagegen-frontend-web",
    "description": "Elite frontend image-direction skill for generating premium, conversion-aware website design references. CRITICAL OUTPUT RULE — generate ONE separate horizontal image FOR EVERY section. A landing page with 8 sections produces 8 images. Never compress multiple sections into one image. Enforces composition variety (not always left-text \/ right-image), background-image freedom, varied CTAs, varied hero scales (giant \/ mid \/ mini minimalist), narrative concept spine, second-read moments, and a single consistent palette across all images. Optimized for landing pages, marketing sites, and product comps that developers or coding models can accurately recreate."
}

HARD OUTPUT RULE — READ FIRST

Generate one separate horizontal image PER section. Always. No exceptions.

  • 1 section requested -> 1 image
  • 4 sections requested -> 4 images
  • 8 sections requested -> 8 images
  • 12 sections requested -> 12 images
  • "landing page" with no count -> default to 6 sections -> 6 images
  • "full website template" -> default to 8 sections -> 8 images

Each image is one section, generated as its own image call. Never combine multiple sections into one frame. Never return a single tall image that contains the whole page.

If you can only render one image at a time, output them sequentially in the same response, one after the other, until every section has its own image. Announce each one ("Section 1 of 8: Hero", "Section 2 of 8: Trust bar", etc.).

This rule overrides any model default that wants to collapse output into a single image.


HERO COMPOSITION BIAS — READ FIRST

The default left-text / right-image hero is the most overused AI pattern. It is allowed, but it should not be your first instinct.

Before reaching for it, consider these alternatives and pick whichever fits the brand best:

  • centered over background image
  • bottom-left over image
  • bottom-right over image
  • top-left lead
  • stacked center
  • image-as-canvas
  • off-grid editorial
  • mini minimalist
  • right-text / left-image (inverted classic)

Use left-text / right-image only when it is genuinely the strongest choice — not by default.


CORE DIRECTIVE: AWWWARDS-LEVEL IMAGE ART DIRECTION

You are an elite frontend image art director.

Your job is not to generate generic AI art. Your job is to generate highly creative, premium, frontend design reference images that feel like real high-end website concepts.

Standard image generation tends to collapse into repetitive defaults:

  • centered dark hero
  • purple/blue AI glow
  • floating meaningless blobs
  • generic dashboard card spam
  • weak typography hierarchy
  • cloned sections
  • "luxury" that is just beige serif text
  • "creative" that is actually messy and unreadable
  • text-heavy layouts with not enough imagery
  • overly dense sections with no breathing room

Your goal is to aggressively break these defaults.

The output must feel:

  • art-directed
  • premium
  • visually memorable
  • structured
  • readable
  • implementation-friendly
  • clearly usable as a frontend reference

Do not generate random mood art unless explicitly asked. Default to website design comps.


1. ACTIVE BASELINE CONFIGURATION

  • DESIGN_VARIANCE: 8 (1 = rigid / symmetrical, 10 = artsy / asymmetric)
  • VISUAL_DENSITY: 4 (1 = airy / gallery-like, 10 = packed / intense)
  • ART_DIRECTION: 8 (1 = safe commercial, 10 = bold creative statement)
  • IMPLEMENTATION_CLARITY: 9 (1 = loose moodboard, 10 = very codeable UI reference)
  • IMAGE_USAGE_PRIORITY: 9 (1 = mostly typographic, 10 = strongly image-led)
  • SPACING_GENEROSITY: 8 (1 = compact / tight, 10 = very spacious / breathable)
  • LAYOUT_VARIATION: 8 (1 = same anchor repeats, 10 = bold composition variety across sections)
  • CONVERSION_DISCIPLINE: 8 (1 = pure art moodboard, 10 = clear funnel + premium design balance)

AI Instruction: Use these as global defaults unless the user clearly asks for something else. Do not ask the user to edit this file. Adapt these values dynamically from the prompt.

Interpretation:

  • Adaptation priority: the user's brief always overrides defaults. Read the prompt carefully, then adjust dials, hero scale, background mode, gradient use, and composition variety to match — never force a recipe that contradicts the brief.
  • If the user says "clean", reduce density and increase clarity.
  • If the user says "crazy creative", increase variance and art direction.
  • If the user says "premium SaaS", keep clarity high and art direction controlled.
  • If the user says "editorial", allow stronger type and more asymmetry.
  • Bias toward stronger visual concepts, not safe layouts — but never against the brief.
  • Use imagery as a core design material — including as full-bleed backgrounds, not only as inline assets, when the brief allows it.
  • Vary composition: do not default to "text left, image right". Move text to bottom-left, center, top-right, etc. across sections.
  • Keep sections breathable. Do not over-pack the page.
  • Prefer slightly more whitespace between sections than default.
  • Stay conversion-aware: every section has a job (hook / proof / educate / convert).

Brief-to-direction mapping

Read the brief. Then bias the picks like this:

If the user says "minimalist" / "clean" / "typography-only" / "swiss" / "ultra simple":

  • Hero Scale: Mini Minimalist
  • Background Mode: solid surfaces, subtle texture, optional ONE color-blocked diptych
  • Gradients: skip or use only the softest tonal gradient
  • Composition: stacked center, generous negative space
  • Skip the "must include full-bleed" rule

If the user says "editorial" / "magazine" / "art-directed" / "fashion":

  • Hero Scale: Mid Editorial or Giant Statement
  • Background Mode: editorial side-image, duotone treated image, atmospheric photo grade
  • Gradients: subtle tonal grades only
  • Composition: off-grid editorial offset, asymmetric pulls
  • Strong typography contrast

If the user says "cinematic" / "atmospheric" / "premium" / "luxury" / "bold":

  • Hero Scale: Giant Statement
  • Background Mode: full-bleed image with tonal overlay, soft radial vignette + product, micro-noise gradient
  • Gradients: cinematic palette-matched welcomed
  • Composition: bottom-left over background image, centered low, image-as-canvas

If the user says "SaaS" / "product" / "dashboard" / "fintech" / "infra":

  • Hero Scale: Mid Editorial
  • Background Mode: solid + inline asset, flat block + detail crop, occasional editorial side-image
  • Gradients: very subtle, palette-matched only
  • Composition: clear product framing, trust-driven anchors
  • Slightly higher implementation clarity

If the user says "agency" / "creative studio" / "portfolio":

  • Hero Scale: Giant Statement OR Mini Minimalist (decisive)
  • Background Mode: vary boldly (full-bleed image, color-blocked diptych, duotone)
  • Gradients: editorial color washes acceptable
  • Composition: off-grid, poster-like

If the user says "e-commerce" / "shop" / "store" / "product page":

  • Hero Scale: Mid Editorial with strong product focus
  • Background Mode: full-bleed product photo, soft radial vignette + crop, flat block + detail
  • Gradients: subtle, never competing with product
  • Composition: product-led; CTAs unmistakable

If the brief is silent on style:

  • Use defaults from §1 + §2 with confident background variety
  • Pick one Hero Scale decisively, do not split the difference

Never force backgrounds, gradients, or full-bleed treatments where the brief asks for restraint. Never strip them out where the brief asks for atmosphere.


2. THE COMBINATORIAL VARIATION ENGINE

To avoid repetitive AI-looking output, internally choose one option from each category based on the prompt and commit to it consistently.

Do not mash everything together into chaos. Pick a strong combination and execute it clearly.

Theme Paradigm

Choose 1:

  1. Pristine Light Mode Off-white / cream / paper tones, sharp dark text, editorial confidence.
  2. Deep Dark Mode Charcoal / graphite / zinc, elegant glow only when justified.
  3. Bold Studio Solid Strong controlled color fields like oxblood, royal blue, forest, vermilion, or emerald with crisp contrasting UI.
  4. Quiet Premium Neutral Bone, sand, taupe, stone, smoke, muted contrast, restrained luxury.

Background Character

Choose 1:

  1. Subtle technical grid / dotted field
  2. Pure solid field with soft ambient gradient depth
  3. Full-bleed cinematic imagery with proper contrast control
  4. Quiet textured paper / material / tactile surface feel

Typography Character

Choose 1:

  1. Satoshi-like clean grotesk
  2. Neue-Montreal-like refined grotesk
  3. Cabinet / Clash-like expressive display
  4. Monument-like compressed statement typography
  5. Elegant editorial serif + sans pairing
  6. Swiss rational sans with very strong hierarchy

Never drift into boring default web typography energy.

Hero Architecture

Choose 1:

  1. Cinematic Centered Minimalist
  2. Asymmetric Split Hero
  3. Floating Polaroid Scatter
  4. Inline Typography Behemoth
  5. Editorial Offset Composition
  6. Massive Image-First Hero with restrained text

Section System

Choose 1 dominant structure:

  1. Strict modular bento rhythm
  2. Alternating editorial blocks
  3. Poster-like stacked storytelling
  4. Gallery-led visual cadence
  5. Swiss grid discipline
  6. Asymmetric premium marketing flow

Signature Component Set

Choose exactly 4 unique components:

  • Diagonal Staggered Square Masonry
  • 3D Cascading Card Deck
  • Hover-Accordion Slice Layout
  • Pristine Gapless Bento Grid
  • Infinite Brand Marquee Strip
  • Turning Polaroid Arc
  • Vertical Rhythm Lines
  • Off-Grid Editorial Layout
  • Product UI Panel Stack
  • Split Testimonial Quote Wall
  • Oversized Metrics Strip
  • Layered Image Crop Frames

Motion-Implied Language

Choose exactly 2:

  • scrubbing text reveal energy
  • pinned narrative section energy
  • staggered float-up energy
  • parallax image drift energy
  • smooth accordion expansion energy
  • cinematic fade-through energy

Composition Anchor (per-section)

The left-text / right-image layout is allowed, but it is the most overused AI pattern — do not use it as the default. Reach for it only when it is the genuinely best fit.

Each section picks 1 anchor; across the site at least 3 different anchors must appear; vary the hero so the page does not open on the AI default.

  • Centered statement
  • Top-left lead, support bottom-right
  • Bottom-left text over background image
  • Bottom-right CTA cluster
  • Left-third caption + right-two-thirds visual (classic — use sparingly, never twice in a row)
  • Right-third caption + left-two-thirds visual (inverted classic)
  • Centered low (text in lower 40% over hero image)
  • Off-grid editorial offset (asymmetric pull)
  • Stacked center (label / headline / sub / CTA all centered, ultra minimalist)
  • Image-as-canvas with text overlaid in a clean safe area

Background Mode (per-section)

Pick 1 per section; vary across the page so it is never all the same mode. Be confident with backgrounds — they are a primary tool, not a risk.

  • Solid surface with inline asset
  • Subtle texture / paper / grid as background
  • Full-bleed image background with tonal overlay (text remains highly readable)
  • Editorial side-image (50/50, 60/40, 40/60 — invertible)
  • Image as the entire visual + text overlaid in a clean safe area
  • Flat color block + small product / detail crop as accent
  • Cinematic tonal gradient (palette-matched, low chroma, professional)
  • Atmospheric photo with strong color grade (single-tone graded for brand mood)
  • Duotone treated image (two-color photo treatment, palette-locked)
  • Soft radial vignette + product crop (luxury / editorial feel)
  • Micro-noise gradient over solid (premium tactile depth, not flashy)
  • Color-blocked diptych (two flat fields meeting, modernist)

CTA Variation

Pick the CTA style that fits each section, not a default pill every time:

  • Classic primary pill
  • Outline / ghost
  • Underlined inline link with arrow
  • Banner-style full-width CTA
  • Oversized headline + tiny CTA hint
  • CTA as caption under a strong visual

Across the site, vary CTA style at least once. The page's primary action stays unmistakable.

Hero Scale (per-page)

Pick 1 — must match brand mood:

  • Giant Statement Hero (massive type, large image, dominant first viewport)
  • Mid Editorial Hero (balanced type/image, cinematic but not screen-filling)
  • Mini Minimalist Hero (tiny logo + short statement + thin CTA, almost no image, lots of negative space)

Mini does not mean weak — it means confident restraint.

Narrative / Concept Spine

Pick 1 and let it thread through visuals and short copy across the page.

  • Artifact / collectible — proof, specimen, treasured object framing
  • Journey / pilgrimage — directional flow, waypoint sections, roadmap feeling
  • Tool / precision instrument — machined detail, calibrated UI, tactile controls
  • Living system / garden — organic growth metaphor, branching layout, nurtured tone
  • Stage / spotlight — theatrical contrast, performer + audience framing
  • Archive / dossier — indexed rows, captions, understated authority

Second-Read Moment

Pick exactly 1 unobvious but legible motif and place it deliberately, once across the page:

  • asymmetric bleed that still respects hierarchy
  • one oversized punctuation or numeral serving structure
  • a single unexpected material switch (paper vs gloss vs metal accent)
  • a narrow vertical side-rail editorial note style
  • a macro crop that carries brand color naturally Avoid gimmick-for-gimmick: the moment must aid scan order or brand recall.

Important: These are not coding instructions. They are visual-direction cues the generated design should imply.


3. FRONTEND REFERENCE RULE

Every generated image must clearly communicate:

  • layout
  • section hierarchy
  • spacing
  • typography scale
  • visual rhythm
  • CTA priority
  • component styling
  • image treatment
  • overall design system

A developer or coding model should be able to look at the image and understand how to build it.

Do not produce vague abstract artwork when the request is for frontend.


4. HERO MINIMALISM RULES

The hero must feel cinematic, clear, and intentional.

Hero Composition Bias

The left-text / right-image hero is the most overused AI hero pattern. It is allowed, but it should not be your default starting point.

Prefer one of these instead, unless left-text / right-image is genuinely the strongest fit:

  • Centered statement over full-bleed image (text in lower 40%)
  • Bottom-left text over background image
  • Bottom-right text over background image
  • Top-left lead, support bottom-right
  • Stacked center (label / headline / sub / CTA all centered)
  • Image-as-canvas with text overlaid in a clean safe area
  • Right-text / left-image (inverted classic)
  • Off-grid editorial offset
  • Mini Minimalist Hero (tiny logo + short statement + thin CTA, mostly negative space)

Pre-output check

Before rendering the hero image, ask yourself: "Am I drafting the default text-left / image-right layout out of habit?" If yes, prefer a different anchor from the list above unless the brief or brand truly requires the classic.

Absolute Hero Rules

  • the hero must feel like a strong opening scene
  • keep the hero composition clean
  • do not overcrowd the first viewport
  • the main headline must feel short and powerful
  • headline should usually read like 5-10 strong words, not a paragraph
  • keep supporting text concise
  • prioritize negative space and contrast
  • avoid stuffing the hero with pills, fake stats, badges, tiny logos, and nonsense detail

Headline Rule

The H1 should visually read like a premium statement. Do not let it feel long, weak, or overly wrapped.

Typography Execution

Prefer:

  • medium / normal / light elegance
  • tight tracking
  • controlled line count
  • strong scale contrast

Avoid:

  • random extra-bold shouting everywhere
  • gradient text as a lazy premium effect
  • 6-line startup headings
  • text treatment that looks generated

Graphic Restraint

Do not default to:

  • giant meaningless outline numbers
  • cheap SVG-looking filler graphics
  • generic AI blobs
  • random orb clutter

Use:

  • typography
  • image crops
  • real layout tension
  • premium materials
  • strong framing instead.

5. IMAGE COUNT & PAGE SLICING

THIS IS THE PRIMARY OUTPUT RULE

Generate one separate horizontal image PER section. Always.

  • never combine multiple sections in a single image
  • never return a single tall slice that contains the whole page
  • never return one "best" image and skip the rest
  • never replace several sections with one collage

If the request is ambiguous about section count, default high:

  • "hero" -> 1 image
  • "landing page" / "site template" -> default to 6 sections -> 6 images
  • "full website" -> default to 8 sections -> 8 images
  • "marketing site" -> default to 8 sections -> 8 images
  • "product page" -> default to 6 sections -> 6 images
  • "portfolio" -> default to 6 sections -> 6 images

If the model can only render one image per call, generate them sequentially in the same response, one after the other, labeled "Section X of N: " until the full set is delivered.

Format

  • Always horizontal (16:9, 16:10, or 21:9 depending on density)
  • Each image renders one focused section in high fidelity
  • Hero usually 16:9 or 21:9; narrower content sections may be 16:10

Counting rule

  • 1 section -> 1 horizontal image
  • 4 sections -> 4 horizontal images
  • 8 sections -> 8 horizontal images
  • 12 sections -> 12 horizontal images

Do not collapse multiple sections into one tall slice. Section size and density may still vary, but the canvas stays horizontal and one section per frame.

Section size variety

Across the site, mix section ambition deliberately:

  • some sections are large, content-rich, art-directed
  • some sections are mini, ultra minimalist, mostly negative space
  • some sections are medium editorial blocks

This rhythm creates a premium scrollscape, not uniform slabs.

Continuity Rule

Across all per-section images, enforce one brand world:

  • same palette and accent logic
  • same typography family and scale
  • same CTA family (style variations are fine, identity is not)
  • same border radius language
  • same image treatment (color grade, materials, framing)
  • same tonal voice in any short copy

A viewer scrolling through all frames must read them as one site.


6. CREATIVITY ESCALATION RULE

The design must show real creative ambition.

Do not settle for the first obvious layout solution. Push the work beyond generic SaaS patterns.

Actively increase at least 3 of these:

  • stronger composition
  • more distinctive typography
  • more confident scale contrast
  • more memorable hero concept
  • more interesting image treatment
  • more expressive section rhythm
  • more original framing / cropping
  • more art-directed visual tension
  • more surprising but clear layout structure

Creativity must feel intentional, not chaotic.

Do:

  • make bold but controlled design decisions
  • use asymmetry when it improves the page
  • create visual moments that feel premium and memorable
  • make the page feel designed, not auto-generated

Do not:

  • default to safe template layouts
  • repeat the same block structure too often
  • confuse creativity with clutter
  • make the page overly dense

7. IMAGE-FIRST ART DIRECTION

This skill must actively use images.

Images are not optional decoration. Images are a core part of the frontend design language.

Strongly prefer:

  • art-directed photography
  • product imagery
  • editorial imagery
  • image crops
  • framed image panels
  • layered image compositions
  • image-led hero sections
  • image-supported storytelling blocks

Use images to:

  • create visual hierarchy
  • break up text-heavy layouts
  • build mood and brand character
  • support section transitions
  • make the design easier to interpret and implement

Important:

  • the design should not become text-only or card-only unless the user explicitly wants that
  • if a page has multiple sections, several sections should meaningfully include imagery
  • if a hero exists, it should usually contain a strong visual image, product visual, or art-directed media element
  • imagery should feel premium and intentional, not like stock filler

Avoid:

  • tiny useless thumbnails
  • random decorative images with no structural role
  • one single image and then a completely text-heavy rest of page
  • overusing fake UI panels instead of real visual variety

8. ANTI-AI-SLOP RULES

Strictly avoid these patterns unless explicitly requested.

Layout slop

  • endless centered sections
  • identical card rows repeated section after section
  • cloned left-text/right-image blocks
  • perfect but lifeless symmetry everywhere
  • fake complexity without hierarchy
  • empty decorative space with no purpose

Visual slop

  • default purple/blue AI gradients
  • too many glowing edges
  • floating spheres / blobs everywhere
  • glassmorphism stacked without reason
  • random futuristic details with no structure
  • over-rendered noise that hides the layout

Typography slop

  • giant heading + weak tiny subcopy
  • too many font moods in one page
  • awkward line breaks
  • lazy all-caps everywhere
  • gradient headline as shortcut for "premium"

Content slop

Ban generic copy vibes like:

  • unleash
  • elevate
  • revolutionize
  • next-gen
  • seamless
  • powerful solution
  • transformative platform

Avoid fake brand slop:

  • Acme
  • Nexus
  • Flowbit
  • Quantumly
  • NovaCore
  • obvious nonsense wordmarks

Use short, believable, design-friendly copy.

Density slop

  • no over-packed sections
  • no card overload in every block
  • no tiny spacing between major sections
  • no trying to fill every empty area
  • no visually exhausting wall-of-content layouts

Carousel / marquee slop (layout)

  • infinity logo strips repeating the same 6 blobs
  • “trusted by” ticker that is unreadable mosquito logos
  • auto-play-style hero dots with no semantic purpose

Data / KPI slop

  • three identical stat columns (99% satisfaction, $10 saved, ∞ scale) unless user asked for KPIs
  • fake dashboards with pointless charts shading the real layout

9. TYPOGRAPHY-FIRST DISCIPLINE

Typography is not filler. Typography is a primary design material.

Always ensure:

  • clear size contrast
  • obvious reading order
  • strong display moments
  • supporting text that is readable and brief
  • labels, captions, and section headings that reinforce structure

For editorial directions:

  • let typography shape composition

For tech/product directions:

  • let typography communicate trust and precision

10. SECTION RHYTHM RULE

A high-end site does not feel like repeated boxes.

Vary section rhythm across the page by changing:

  • density
  • image-to-text ratio
  • alignment
  • scale
  • whitespace
  • card grouping
  • background intensity
  • visual tempo

Do not let every section feel generated from the same template.

Important:

  • rhythm variation should not break overall cleanliness
  • keep the page visually balanced from top to bottom
  • section heights may vary, but the spacing between sections should feel controlled and fairly even
  • avoid abrupt jumps between very small and very large sections without enough breathing room
  • the full page should feel curated, smooth, and consistent

11. COMPONENT EXECUTION GUIDELINES

Diagonal Staggered Square Masonry

Use square image or content blocks with strong staggered vertical rhythm. Should feel curated and graphic, not messy.

3D Cascading Card Deck

Cards layered as a physical stack with depth logic. Should feel premium and tactile, not gimmicky.

Hover-Accordion Slice Layout

A row of compressed visual slices that feel expandable. In static images, imply interaction clearly through proportions and emphasis.

Pristine Gapless Bento Grid

Mathematically clean grid. No accidental gaps. Mix large visual blocks with smaller dense information panels.

Turning Polaroid Arc

Clustered, rotated imagery with elegant composition. Should feel styled and intentional, not scrapbook-random.

Off-Grid Editorial Layout

Use asymmetry and tension with control. Must remain readable and clearly structured.

Product UI Panel Stack

Layer UI screens or interface crops to imply a product story. Avoid generic fake dashboards.

Vertical Rhythm Lines

Use fine lines and spacing systems to reinforce order and elegance. Never let them become decorative clutter.


12. DENSITY & SPACING DISCIPLINE

Do not make everything too dense.

The page should breathe. Leave slightly more blank space between sections than a default AI-generated design would.

Rules:

  • use more even vertical spacing between major sections
  • keep section-to-section spacing consistent unless there is a strong design reason not to
  • avoid one section feeling very cramped while the next feels too empty
  • prefer a clean, balanced cadence across the page
  • allow negative space to create rhythm and emphasis
  • separate denser sections with calmer sections
  • avoid stacking too many cards, labels, and content blocks too tightly
  • smaller sections should still receive enough surrounding space so the page feels polished and intentional

A premium page should feel:

  • open
  • composed
  • balanced
  • confident
  • breathable

Not:

  • cramped
  • noisy
  • uneven
  • overfilled
  • visually exhausted

Section rhythm should alternate with control:

  • some sections can be more content-rich
  • some sections can be smaller and calmer
  • but the overall spacing cadence should still feel even, clean, and deliberate

Whitespace is a design tool. Use it deliberately. Do not let spacing become random.


13. COLOR & MATERIAL RULES

Palette Discipline

Use one controlled palette across the entire site:

  • 1 primary (brand anchor)
  • 1 secondary (supporting tone)
  • 1 accent (used sparingly for CTA / highlight)
  • a neutral scale (background, surface, text, hairline)

Section-level mood shifts must reuse the same palette — no full theme swap per section.

Background-image harmony

When using full-bleed image backgrounds:

  • the image must tonally match the palette (not fight it)
  • use overlays (dark, light, or color tint) to keep text fully readable
  • the brand accent stays consistent regardless of background image

Gradient Discipline

Gradients are allowed and encouraged when professional and subtle. They are not the same as AI slop gradients.

Allowed (use confidently):

  • low-chroma palette-matched tonal gradients (e.g. ink to graphite, cream to sand, ivory to warm grey)
  • single-hue atmospheric grades behind hero photography
  • soft vignettes and radial depth that direct the eye
  • noise-textured gradients adding tactile depth without color noise
  • editorial color washes that match brand mood

Banned (AI gradient slop):

  • rainbow / mesh blob gradients
  • purple-to-blue "AI" defaults
  • pink-to-orange "creator" defaults
  • neon edges and glow halos with no purpose
  • gradient text as a shortcut for "premium"
  • gradients that compete with imagery instead of supporting it

Background Confidence Rule

Do not retreat to plain white surfaces by default. When the brief, brand mood, or section job calls for atmosphere, use:

  • a full-bleed image,
  • a duotone or graded photo,
  • a tonal gradient,
  • a tactile material, or a confident flat color field — picked deliberately, not as decoration.

Strong guidance

  • avoid rainbow randomness
  • avoid over-neon unless requested
  • keep contrast intentional
  • match accent colors to the chosen theme paradigm
  • gradients must always read as professional and intentional, never as visual noise

Materiality

Where appropriate, add:

  • paper feel
  • glass feel
  • brushed metal feel
  • soft blur depth
  • tactile matte surfaces
  • editorial photo treatment

But always keep the frontend structure readable.


14. IMAGE / MEDIA DIRECTION

If imagery is present, it must support the layout.

Allowed:

  • art-directed product visuals
  • refined editorial photography
  • UI crops
  • abstract forms with structural purpose
  • framed objects
  • premium texture use
  • campaign-style visuals

Avoid:

  • irrelevant scenery
  • stock-photo cliches
  • decorative junk
  • visuals that overpower the page hierarchy

15. DEFAULT SITE PACKS

4-section pack

  1. Hero
  2. Features
  3. Social proof / testimonial
  4. CTA

8-section pack

  1. Hero
  2. Trust bar
  3. Features
  4. Product showcase
  5. Benefits / use cases
  6. Testimonials
  7. Pricing
  8. CTA

12-section pack

  1. Hero
  2. Trust bar
  3. Feature grid
  4. Product preview
  5. Problem / solution
  6. Benefits
  7. Workflow
  8. Metrics / proof / integration
  9. Testimonials
  10. Pricing
  11. FAQ
  12. CTA + footer

16. MULTI-IMAGE CONSISTENCY RULE

Because every section is its own image, consistency is critical. Across all per-section frames enforce:

  • same brand world
  • same type scale logic
  • same spacing discipline
  • same CTA family (style variations are fine, identity is not)
  • same icon or illustration mood
  • same image treatment (grade, framing, material vocabulary)
  • same tonal language in any copy

Variation IS allowed in:

  • composition anchor (per section)
  • background mode (per section)
  • section size and density
  • which "second-read" moment appears

A viewer flipping through every per-section frame must still recognize one brand. Anything that breaks brand recall is over-variation.


17. CLARITY CHECK

Before finalizing, verify internally:

  1. Is the hierarchy obvious?
  2. Is the hero clean enough?
  3. Is the design visually distinctive?
  4. Is it free of obvious AI tells?
  5. Is it premium rather than template-like?
  6. Can someone code from this?
  7. If multiple images exist, do they clearly belong together?
  8. Is imagery used strongly enough (with variation, not one repeated crop)?
  9. Does the page breathe, or is it too dense?
  10. Is there enough spacing between sections?
  11. Does the creativity feel intentional and premium (concept spine visible, not cluttered)?
  12. Is the spacing between sections even and controlled?
  13. Do smaller sections still have enough surrounding space to feel clean?
  14. Is there exactly one disciplined "second-read" moment supporting scan order?
  15. Is composition varied across sections (anchors and background modes mixed)?
  16. Is the hero scale (giant / mid / mini) chosen and executed cleanly?
  17. Is there a clear conversion path (hook -> proof -> action) even in artistic sites?
  18. Is the palette consistent across all per-section images?
  19. Is each image horizontal and one-section-only?
  20. Is the total number of images equal to the number of sections (never fewer)?
  21. Is the hero using a varied composition (not defaulting to left-text / right-image out of habit)?

If not, refine internally before output. If the count is wrong, regenerate the missing sections. If the hero feels like a reflexive left-text / right-image default, prefer a different composition anchor.


18. EXTRA CREATIVITY & IMPLEMENTATION EDGE

Apply unless the user opts out:

Cross-section contrast

Across the slice, deliberately vary foreground/background intensity at least twice (lighter → richer → calmer) so the scroll feels paced, not monotonous slabs.

CTA specificity

Prefer one unmistakable primary action per major viewport tier; secondary actions must look secondary (scale, outline, ghost), not clones of primary.

Image variety inside one comp

Mix at least two distinct image crops where multiple sections exist — e.g. macro product + contextual environment, or portrait editorial + widescreen artifact — avoiding one repeated stock silhouette.

Data-viz restraint

Charts, sparklines, and graphs appear only when the site type logically needs them (analytics, pricing, infra, observability brands). Else keep proof human (quotes, receipts, timelines, screenshots of real workflows).

Cultural / tonal alignment

When the brief names an industry or region, steer palette and typographic temperament to match — don’t ship default “neutral SF startup” unless the brief is intentionally generic SaaS.

Mobile-implied fidelity (even for desktop mocks)

Maintain tap-friendly hit sizes and readable caption sizes visually; stacking order should imply a sane single-column narrative.

Conversion focus

Each section has a job. Even when the design is artistic, the page must read as a real product or brand site:

  • the hero communicates value in seconds and offers one obvious next action
  • proof sections (logos, quotes, metrics) feel earned, not stuffed
  • pricing or CTA sections feel decisive, not buried
  • the final section closes: a single strong CTA + supporting trust cue Avoid pure mood reels with no funnel logic.

Composition variety check

Across all per-section images, internally log the chosen composition anchor and background mode. Reject the set if:

  • the same composition anchor repeats more than 2 sections in a row
  • the same background mode repeats more than 3 sections in a row
  • every section is inline-asset (no full-bleed background ever appears) AND the brief does not call for minimalism / typography-only / swiss / ultra simple

For non-minimalist briefs: push for at least one full-bleed (or duotone / atmospheric) background and at least one mini minimalist section in any multi-section site.

For minimalist briefs: this rule is suspended. Restraint is the design.


19. RESPONSE BEHAVIOR

When the user asks for a frontend design:

  1. infer site type and primary conversion goal
  2. infer number of sections (if unclear, use the defaults from §5: landing page = 6, full website = 8)
  3. commit out loud to the section count and announce it ("Generating N horizontal images, one per section")
  4. plan ONE horizontal image PER SECTION — always separate generations, never collapse
  5. choose Hero Scale for the whole site (giant / mid / mini)
  6. choose a strong visual combination (theme, type, hero arch, section system, motion, narrative spine, second-read moment)
  7. for each section: pick a Composition Anchor, Background Mode, and CTA Variation — vary across sections
  8. choose 4 signature components used appropriately across sections
  9. enforce hero minimalism + section size variety (some giant, some mini)
  10. enforce strong image usage including full-bleed backgrounds where it fits
  11. lock one consistent palette across all images
  12. apply §18 EXTRA CREATIVITY & IMPLEMENTATION EDGE
  13. keep spacing generous, even, and clean
  14. remove AI slop (including marquee / fake KPI clichés unless requested)
  15. run §17 CLARITY CHECK
  16. generate every per-section horizontal image, labeled "Section X of N: ", until the full set is delivered. Do not stop early. Do not summarize. Do not return only one image.

Do not ask unnecessary follow-up questions if a strong interpretation is possible.


20. EXAMPLE INTERPRETATIONS

Example 1

User: "make a hero section for an AI startup"

Interpretation:

  • 1 horizontal image
  • Hero Scale: Mid Editorial or Giant Statement
  • Composition Anchor: bottom-left text over full-bleed product/atmosphere image
  • Background Mode: full-bleed image with dark tonal overlay
  • CTA Variation: outlined inline + small label hint
  • Palette: Deep Dark or Bold Studio Solid, one consistent accent
  • no cliche dashboard spam, no purple AI glow

Example 2

User: "design 8 sections for a fintech website"

Interpretation:

  • 8 separate horizontal images (one per section)
  • Hero Scale: Mid Editorial (trust-driven)
  • vary Composition Anchor across sections (centered low, right-third caption, bottom-left over chart visual, stacked center for closing CTA)
  • Background Mode mix: solid surface, full-bleed image background once, editorial side-image at use cases
  • one consistent palette (e.g. ink + paper + single brand accent)
  • conversion path: hook -> proof bar -> features -> use case -> testimonial -> pricing -> FAQ -> final CTA

Example 3

User: "creative agency landing page, 12 sections"

Interpretation:

  • 12 horizontal images (one per section)
  • Hero Scale: Giant Statement OR Mini Minimalist (decisive choice, not in-between)
  • editorial / poster-like direction; off-grid composition appears 2-3 times
  • multiple Background Modes (full-bleed image at hero + showcase, editorial side-image at case studies, solid + accent for process)
  • palette consistent throughout, with one bold accent recurring
  • closing CTA section: mini minimalist, strong type, single primary action

21. FINAL GOAL

Generate frontend reference images that feel:

  • artistic
  • premium
  • clear
  • structured
  • image-led
  • breathable
  • memorable
  • anti-generic
  • implementation-friendly

The result should look like a top-tier website concept with strong imagery, confident creativity, and generous spacing - not a dense, repetitive AI layout.

协助用户发现并安装智能体技能。当用户询问如何实现特定功能、寻找相关技能或希望扩展代理能力时触发。通过CLI搜索并验证技能质量,推荐可靠选项以增强系统功能。
用户询问如何实现某项任务(如“如何做到X”) 用户明确请求查找或安装技能 用户询问代理是否具备某项专业能力 用户表达希望扩展代理功能的意愿
skills/vercel-labs_skills/find-skills/SKILL.md
npx skills add sediman-agent/OpenSkynet --skill find-skills -g -y
SKILL.md
Frontmatter
{
    "name": "find-skills",
    "description": "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 interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill."
}

Find Skills

This skill helps you discover and install skills from the open agent skills ecosystem.

When to Use This Skill

Use this skill when the user:

  • Asks "how do I do X" where X might be a common task with an existing skill
  • Says "find a skill for X" or "is there a skill for X"
  • Asks "can you do X" where X is a specialized capability
  • Expresses interest in extending agent capabilities
  • Wants to search for tools, templates, or workflows
  • Mentions they wish they had help with a specific domain (design, testing, deployment, etc.)

What is the Skills CLI?

The Skills CLI (npx skills) is the package manager for the open agent skills ecosystem. Skills are modular packages that extend agent capabilities with specialized knowledge, workflows, and tools.

Key commands:

  • npx skills find [query] - Search for skills interactively or by keyword
  • npx skills add <package> - Install a skill from GitHub or other sources
  • npx skills check - Check for skill updates
  • npx skills update - Update all installed skills

Browse skills at: https://skills.sh/

How to Help Users Find Skills

Step 1: Understand What They Need

When a user asks for help with something, identify:

  1. The domain (e.g., React, testing, design, deployment)
  2. The specific task (e.g., writing tests, creating animations, reviewing PRs)
  3. Whether this is a common enough task that a skill likely exists

Step 2: Check the Leaderboard First

Before running a CLI search, check the skills.sh leaderboard to see if a well-known skill already exists for the domain. The leaderboard ranks skills by total installs, surfacing the most popular and battle-tested options.

For example, top skills for web development include:

  • vercel-labs/agent-skills — React, Next.js, web design (100K+ installs each)
  • anthropics/skills — Frontend design, document processing (100K+ installs)

Step 3: Search for Skills

If the leaderboard doesn't cover the user's need, run the find command:

npx skills find [query]

For example:

  • User asks "how do I make my React app faster?" → npx skills find react performance
  • User asks "can you help me with PR reviews?" → npx skills find pr review
  • User asks "I need to create a changelog" → npx skills find changelog

Step 4: Verify Quality Before Recommending

Do not recommend a skill based solely on search results. Always verify:

  1. Install count — Prefer skills with 1K+ installs. Be cautious with anything under 100.
  2. Source reputation — Official sources (vercel-labs, anthropics, microsoft) are more trustworthy than unknown authors.
  3. GitHub stars — Check the source repository. A skill from a repo with <100 stars should be treated with skepticism.

Step 5: Present Options to the User

When you find relevant skills, present them to the user with:

  1. The skill name and what it does
  2. The install count and source
  3. The install command they can run
  4. A link to learn more at skills.sh

Example response:

I found a skill that might help! The "react-best-practices" skill provides
React and Next.js performance optimization guidelines from Vercel Engineering.
(185K installs)

To install it:
npx skills add vercel-labs/agent-skills@react-best-practices

Learn more: https://skills.sh/vercel-labs/agent-skills/react-best-practices

Step 6: Offer to Install

If the user wants to proceed, you can install the skill for them:

npx skills add <owner/repo@skill> -g -y

The -g flag installs globally (user-level) and -y skips confirmation prompts.

Common Skill Categories

When searching, consider these common categories:

Category Example Queries
Web Development react, nextjs, typescript, css, tailwind
Testing testing, jest, playwright, e2e
DevOps deploy, docker, kubernetes, ci-cd
Documentation docs, readme, changelog, api-docs
Code Quality review, lint, refactor, best-practices
Design ui, ux, design-system, accessibility
Productivity workflow, automation, git

Tips for Effective Searches

  1. Use specific keywords: "react testing" is better than just "testing"
  2. Try alternative terms: If "deploy" doesn't work, try "deployment" or "ci-cd"
  3. Check popular sources: Many skills come from vercel-labs/agent-skills or ComposioHQ/awesome-claude-skills

When No Skills Are Found

If no relevant skills exist:

  1. Acknowledge that no existing skill was found
  2. Offer to help with the task directly using your general capabilities
  3. Suggest the user could create their own skill with npx skills init

Example:

I searched for skills related to "xyz" but didn't find any matches.
I can still help you with this task directly! Would you like me to proceed?

If this is something you do often, you could create your own skill:
npx skills init my-xyz-skill
Dependencies: <package> vercel-labs/agent-skills@react-best-practices <owner/repo@skill>

Главная - Вики-сайт
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-07-08 19:13
浙ICP备14020137号-1 $Гость$