User-invocable: true
npx claudepluginhub hay-kot/scaffoldThis skill inherits all available tools. When active, it can use any tool Claude has access to.
scaffold-yaml-schema.mdtemplate-engine.mdUser-invocable: true Auto-triggerable: true
Triggers when: User wants to create a new scaffold template, edit scaffold.yaml, write template files, or test/validate a scaffold.
Creates a new directory named after the project. The user is prompted for a project name.
my-scaffold/
├── scaffold.yaml
└── {{ .ProjectKebab }}/ # or any project name pattern
├── README.md
└── src/
└── main.go
Valid root directory names: {{ .Project }}, {{ .ProjectSlug }}, {{ .ProjectSnake }}, {{ .ProjectKebab }}, {{ .ProjectCamel }}, {{ .ProjectPascal }}
Generates files into the current directory. No project name prompt. The templates/ prefix is stripped from output paths. Use rewrites and inject to place files precisely.
my-scaffold/
├── scaffold.yaml
└── templates/
├── component.tsx
└── component.test.tsx
scaffold init # creates .scaffold/ with example template scaffold
Or create manually:
.scaffold/my-project/
├── scaffold.yaml
└── {{ .ProjectKebab }}/
└── main.go
scaffold.yaml:
questions:
- name: description
prompt:
message: "Project description"
validate:
required: true
- name: license
prompt:
message: "License"
default: "MIT"
options: ["MIT", "Apache-2.0", "GPL-3.0"]
presets:
default:
description: "My project"
license: "MIT"
{{ .ProjectKebab }}/main.go:
// {{ .Scaffold.description }}
package main
func main() {}
.scaffold/add-component/
├── scaffold.yaml
└── templates/
└── component.tsx
scaffold.yaml:
questions:
- name: component_name
prompt:
message: "Component name"
validate:
required: true
rewrites:
- from: templates/component.tsx
to: "src/components/{{ .Scaffold.component_name }}.tsx"
presets:
default:
component_name: "Button"
scaffold initCreates .scaffold/ with a hello-world template scaffold example.
scaffold init --stealthSame as above, but adds .scaffold to .git/info/exclude so it's hidden from git without touching .gitignore. Useful for personal scaffolds in shared repos.
See scaffold-yaml-schema.md for the complete field reference. Key sections:
See template-engine.md for the complete template reference. Key points:
.Project, .ProjectKebab, .Scaffold.*, .Computed.*, .Each.*wraptmpl, toPlural, toSingular, isPlural, isSingular, partialpartials/ directory at the scaffold rootscaffold lint .scaffold/my-scaffold/scaffold.yaml
Validates question names, prompt types, computed names, skip globs, rewrite paths, injection modes, and delimiter configs.
scaffold inspect .scaffold/my-scaffold
Outputs JSON showing questions (with resolved types), presets, computed values, features, and messages. Use this to verify the scaffold looks correct.
scaffold new --dry-run --no-prompt --preset default .scaffold/my-scaffold
Renders fully but writes nothing. Outputs JSON listing all files that would be created. Catches template errors without side effects.
scaffold new \
--output-dir :memory: \
--no-prompt \
--preset default \
--snapshot stdout \
.scaffold/my-scaffold
Renders in-memory and outputs a full AST with file contents. Ideal for:
scaffold \
--log-level error \
new \
--output-dir :memory: \
--no-prompt \
--preset default \
--snapshot stdout \
.scaffold/my-scaffold
Template errors show:
Common causes:
.Scaffold.typo)Always define at least one preset (typically default) so scaffolds can be tested non-interactively. The preset should provide valid values for all required questions.
presets:
default:
description: "Test project"
license: "MIT"
use_database: true
db_type: "postgres"
minimal:
description: "Minimal"
license: "MIT"
use_database: false
Test each preset:
for preset in default minimal; do
scaffold new --output-dir :memory: --no-prompt --preset "$preset" --snapshot stdout .scaffold/my-scaffold
done
Expert guidance for Next.js Cache Components and Partial Prerendering (PPR). **PROACTIVE ACTIVATION**: Use this skill automatically when working in Next.js projects that have `cacheComponents: true` in their next.config.ts/next.config.js. When this config is detected, proactively apply Cache Components patterns and best practices to all React Server Component implementations. **DETECTION**: At the start of a session in a Next.js project, check for `cacheComponents: true` in next.config. If enabled, this skill's patterns should guide all component authoring, data fetching, and caching decisions. **USE CASES**: Implementing 'use cache' directive, configuring cache lifetimes with cacheLife(), tagging cached data with cacheTag(), invalidating caches with updateTag()/revalidateTag(), optimizing static vs dynamic content boundaries, debugging cache issues, and reviewing Cache Component implementations.
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.