소스 정보
- 저장소
- diegosouzapw/awesome-omni-skill
- 최근 소스 활동
- 2026년 2월 28일 04:03
- 감지된 SKILL.md 언어
- 영어
- 스타
- 50
- 포크
- 19
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/diegosouzapw/awesome-omni-skill --skill boilerplate명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Token-efficient tracking for AI orchestration. CLI-first for status updates (~50 tokens), agent fallback for complex ops (~1KB). Use when: updating task status, querying blockers, creating progress files, validating phases.
AshAi extension guidelines for integrating AI capabilities with Ash Framework. Use when implementing vectorization/embeddings, exposing Ash actions as LLM tools, creating prompt-backed actions, or setting up MCP servers. Covers semantic search, LangChain integration, and structured outputs.
This skill should be used when solving hard questions, complex architectural problems, or debugging issues that benefit from GPT-5 Pro or GPT-5.1 thinking models with large file context. Use when standard Claude analysis needs deeper reasoning or extended context windows.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | boilerplate |
| description | Generate framework-specific boilerplate code |
| disable-model-invocation | true |
I'll generate framework-specific boilerplate code following best practices and conventions for React, Vue, Next.js, Express, FastAPI, Django, and more.
Arguments: $ARGUMENTS - component/route/model name and type
Supported Frameworks:
This skill uses multiple optimization strategies to minimize token usage while maintaining comprehensive boilerplate generation:
Pattern: Cache framework detection results to avoid repeated file system checks
# Cache file: .boilerplate-framework.cache
# Format: framework_name
# TTL: 24 hours (framework rarely changes)
if [ -f ".boilerplate-framework.cache" ] && [ $(($(date +%s) - $(stat -c %Y .boilerplate-framework.cache))) -lt 86400 ]; then
FRAMEWORK=$(cat .boilerplate-framework.cache)
# 20 tokens vs 420 tokens for full detection
else
FRAMEWORK=$(detect_framework) # Full detection (420 tokens)
echo "$FRAMEWORK" > .boilerplate-framework.cache
fi
Savings:
Pattern: Use comprehensive pre-defined templates instead of LLM-generated code
# Instead of: LLM-generated boilerplate (3,000+ tokens)
# Use: Template library (500 tokens)
# Template files stored in skill
TEMPLATE_DIR="templates/$FRAMEWORK"
generate_component() {
local component_name="$1"
local template_file="$TEMPLATE_DIR/component.template.tsx"
# Simple variable substitution (100 tokens)
sed "s/\${COMPONENT_NAME}/$component_name/g" "$template_file"
}
Savings:
Pattern: Use Grep to detect project configuration instead of reading files
# Instead of: Read package.json/requirements.txt fully (500 tokens)
# Use: Grep for specific patterns (200 tokens)
# Detect React
HAS_REACT=$(grep -q "\"react\":" package.json && echo "true" || echo "false")
# Detect TypeScript
HAS_TS=$(grep -q "\"typescript\":" package.json && echo "true" || echo "false")
# Detect testing framework
HAS_JEST=$(grep -q "\"jest\":" package.json && echo "true" || echo "false")
Savings:
Pattern: Generate only requested component type, not entire feature
# Instead of: Full feature scaffolding (4,000+ tokens)
# - Component + styles + tests + stories + types
# Generate: Only component (800 tokens)
case $COMPONENT_TYPE in
component)
generate_component "$COMPONENT_NAME" # 800 tokens
;;
route)
generate_route "$COMPONENT_NAME" # 900 tokens
;;
full)
generate_component "$COMPONENT_NAME"
generate_styles "$COMPONENT_NAME"
generate_tests "$COMPONENT_NAME"
generate_types "$COMPONENT_NAME" # 4,000 tokens
;;
esac
Savings:
Pattern: Check if component already exists before generating
# Quick check: Does component exist?
case $FRAMEWORK in
react)
component_path="src/components/${COMPONENT_NAME}/${COMPONENT_NAME}.tsx"
;;
nextjs)
component_path="app/${COMPONENT_NAME}/page.tsx"
;;
esac
if [ -f "$component_path" ]; then
echo "⚠️ Component $COMPONENT_NAME already exists at $component_path"
read -p "Overwrite? (y/n): " confirm
if [ "$confirm" != "y" ]; then
echo "✓ Keeping existing component"
exit 0 # 200 tokens total
fi
fi
# Otherwise: Full generation (3,500+ tokens)
Savings:
Pattern: Cache loaded templates per framework
# Cache file: .boilerplate-templates-${FRAMEWORK}.cache
# Contains pre-loaded templates for the framework
# TTL: 24 hours
load_templates() {
local cache_file=".boilerplate-templates-${FRAMEWORK}.cache"
if [ -f "$cache_file" ]; then
source "$cache_file" # 150 tokens
return
fi
# Load all templates for framework (950 tokens)
case $FRAMEWORK in
react)
TEMPLATE_COMPONENT=$(cat templates/react/component.tsx)
TEMPLATE_TEST=$(cat templates/react/test.tsx)
TEMPLATE_STYLES=$(cat templates/react/styles.css)
;;
nextjs)
TEMPLATE_PAGE=$(cat templates/nextjs/page.tsx)
TEMPLATE_API=$(cat templates/nextjs/api-route.ts)
;;
esac
declare -p TEMPLATE_* > "$cache_file"
}
Savings:
Pattern: Track generated components to avoid duplicates
# Cache file: .boilerplate-generated.cache
# Format: framework:component_type:component_name:file_path
# TTL: Session-based (cleared manually)
is_component_generated() {
local component_name="$1"
local component_type="$2"
grep -q "^$FRAMEWORK:$component_type:$component_name:" .boilerplate-generated.cache 2>/dev/null
}
# Track generated components
if ! is_component_generated "$COMPONENT_NAME" "$COMPONENT_TYPE"; then
generate_boilerplate
echo "$FRAMEWORK:$COMPONENT_TYPE:$COMPONENT_NAME:$component_path" >> .boilerplate-generated.cache
else
echo " ✓ $COMPONENT_NAME already generated"
fi
Savings:
Pattern: Generate minimal test boilerplate with placeholders
# Instead of: Comprehensive test suite (1,200 tokens)
# Use: Minimal test template with TODOs (600 tokens)
generate_minimal_test() {
local component_name="$1"
cat <<EOF
import { render, screen } from '@testing-library/react';
import { ${component_name} } from './${component_name}';
describe('${component_name}', () => {
it('renders without crashing', () => {
render(<${component_name} />);
});
// TODO: Add more tests
});
EOF
}
Savings:
Typical Scenarios:
First Run - Single Component (2,000-3,000 tokens)
Subsequent Run - Same Framework (800-1,500 tokens)
Component Exists (150-250 tokens)
Full Feature Scaffold (4,000-6,000 tokens)
API Route Only (600-1,000 tokens)
Expected Token Savings:
| Strategy | Savings | When Applied |
|---|---|---|
| Framework detection caching | 400 tokens (95%) | Subsequent runs |
| Template library approach | 2,500 tokens (83%) | Always |
| Grep-based config detection | 300 tokens (60%) | Always |
| Incremental scaffolding | 1,200 tokens (75%) | Component-only generation |
| Early exit for existing | 3,300 tokens (94%) | Component exists |
| Template caching | 800 tokens (84%) | Subsequent runs |
| Component inventory | 400 tokens (89%) | Duplicate prevention |
| Minimal test generation | 600 tokens (75%) | Test files |
Key Insight: The template library approach combined with framework caching provides 50-60% token reduction while maintaining production-ready boilerplate quality. Early exit patterns provide 94% savings when components already exist.
#!/bin/bash
# Detect project framework
echo "=== Detecting Framework ==="
echo ""
detect_framework() {
if [ -f "package.json" ]; then
if grep -q "\"react\"" package.json; then
if grep -q "\"next\"" package.json; then
echo "nextjs"
else
echo "react"
fi
elif grep -q "\"vue\"" package.json; then
echo "vue"
elif grep -q "\"@angular/core\"" package.json; then
echo "angular"
elif grep -q "\"svelte\"" package.json; then
echo "svelte"
elif grep -q "\"express\"" package.json; then
echo "express"
elif grep -q "\"fastify\"" package.json; then
echo "fastify"
elif grep -q "\"@nestjs/core\"" package.json;
[ -f ];
grep -q requirements.txt;
grep -q requirements.txt;
grep -q requirements.txt;
}
FRAMEWORK=$(detect_framework)
[ -z ];
1
COMPONENT_NAME=
COMPONENT_TYPE=
// React component with TypeScript
import React, { useState, useEffect } from 'react';
import styles from './${COMPONENT_NAME}.module.css';
/**
* Props for ${COMPONENT_NAME} component
*/
interface ${COMPONENT_NAME}Props {
/**
* Component title
*/
title?: string;
/**
* Additional CSS classes
*/
className?: string;
/**
* Event handler when component is clicked
*/
onClick?: () => void;
}
/**
* ${COMPONENT_NAME} component
*
* @example
* ```tsx
* <${COMPONENT_NAME} title="Hello" onClick={() => console.log('clicked')} />
* ```
*/
export const ${COMPONENT_NAME}: React.FC<${COMPONENT_NAME}Props> = ({
title = 'Default Title',
className,
onClick,
}) => {
const [count, setCount] = useState(0);
useEffect(() => {
// Component mounted
console.log('${COMPONENT_NAME} mounted');
return () => {
// Component unmounted
.();
};
}, []);
= () => {
( prev + );
onClick?.();
};
(
);
};
${};
/* ${COMPONENT_NAME}.module.css */
.container {
padding: 1rem;
border: 1px solid #ddd;
border-radius: 8px;
}
.container h2 {
margin: 0 0 1rem 0;
font-size: 1.5rem;
}
.container button {
padding: 0.5rem 1rem;
background-color: #0070f3;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
.container button:hover {
background-color: #0051cc;
}
// ${COMPONENT_NAME}.test.tsx
import { render, screen, fireEvent } from '@testing-library/react';
import { ${COMPONENT_NAME} } from './${COMPONENT_NAME}';
describe('${COMPONENT_NAME}', () => {
it('renders with default props', () => {
render(<${COMPONENT_NAME} />);
expect(screen.getByText('Default Title')).toBeInTheDocument();
});
it('renders with custom title', () => {
render(<${COMPONENT_NAME} title="Custom Title" />);
expect(screen.getByText('Custom Title')).toBeInTheDocument();
});
it('increments count on button click', () => {
render(<${COMPONENT_NAME} />);
const button = screen.getByRole('button', { name: /increment/i });
expect(screen.getByText('Count: 0')).toBeInTheDocument();
fireEvent.click(button);
expect(screen.()).();
});
(, {
handleClick = jest.();
(<${} onClick={handleClick} />);
button = screen.(, { : });
fireEvent.(button);
(handleClick).();
});
});
// Next.js App Router page
import { Metadata } from 'next';
import { ${COMPONENT_NAME} } from '@/components/${COMPONENT_NAME}';
/**
* Page metadata
*/
export const metadata: Metadata = {
title: '${COMPONENT_NAME}',
description: '${COMPONENT_NAME} page description',
};
/**
* ${COMPONENT_NAME} page component
*/
export default async function ${COMPONENT_NAME}Page() {
// Server-side data fetching
const data = await fetchData();
return (
<div>
<h1>${COMPONENT_NAME}</h1>
<${COMPONENT_NAME} data={data} />
</div>
);
}
/**
* Fetch data on the server
*/
async function fetchData() {
// Fetch data from API or database
const res = await fetch('https://api.example.com/data', {
next: { revalidate: 3600 }, // Revalidate every hour
});
(!res.) {
();
}
res.();
}
// Next.js API Route
import { NextRequest, NextResponse } from 'next/server';
/**
* GET /api/${COMPONENT_NAME}
*/
export async function GET(request: NextRequest) {
try {
// Get query parameters
const searchParams = request.nextUrl.searchParams;
const id = searchParams.get('id');
// Fetch data
const data = await fetchData(id);
return NextResponse.json({
success: true,
data,
});
} catch (error) {
console.error('${COMPONENT_NAME} GET error:', error);
return NextResponse.json(
{ success: false, error: 'Internal server error' },
{ status: 500 }
);
}
}
/**
* POST /api/${COMPONENT_NAME}
*/
export async function POST(: ) {
{
body = request.();
(!body.) {
.(
{ : , : },
{ : }
);
}
result = (body);
.({
: ,
: result,
}, { : });
} (error) {
.(, error);
.(
{ : , : },
{ : }
);
}
}
// Express route handler
import { Router, Request, Response, NextFunction } from 'express';
import { body, param, validationResult } from 'express-validator';
const router = Router();
/**
* ${COMPONENT_NAME} interface
*/
interface ${COMPONENT_NAME} {
id: string;
name: string;
createdAt: Date;
}
/**
* GET /api/${COMPONENT_NAME}
* List all ${COMPONENT_NAME}s
*/
router.get(
'/',
async (req: Request, res: Response, next: NextFunction) => {
try {
const { page = 1, limit = 10, search } = req.query;
// Fetch data from database
const items = await db.${COMPONENT_NAME}.findMany({
where: search ? { name: { contains: search as string } } : {},
skip: (Number(page) - ) * (limit),
: (limit),
});
total = db.{}.();
res.({
: items,
: {
: (page),
: (limit),
total,
: .(total / (limit)),
},
});
} (error) {
(error);
}
}
);
router.(
,
().(),
(: , : , : ) => {
{
errors = (req);
(!errors.()) {
res.().({ : errors.() });
}
item = db.{}.({
: { : req.. },
});
(!item) {
res.().({ : });
}
res.({ : item });
} (error) {
(error);
}
}
);
router.(
,
().().().({ : , : }),
(: , : , : ) => {
{
errors = (req);
(!errors.()) {
res.().({ : errors.() });
}
item = db.{}.({
: {
: req..,
},
});
res.().({ : item });
} (error) {
(error);
}
}
);
router.(
,
().(),
().().().({ : , : }),
(: , : , : ) => {
{
errors = (req);
(!errors.()) {
res.().({ : errors.() });
}
item = db.{}.({
: { : req.. },
: { : req.. },
});
res.({ : item });
} (error) {
(error);
}
}
);
router.(
,
().(),
(: , : , : ) => {
{
errors = (req);
(!errors.()) {
res.().({ : errors.() });
}
db.{}.({
: { : req.. },
});
res.().();
} (error) {
(error);
}
}
);
router;
# FastAPI route handler
from fastapi import APIRouter, HTTPException, Query, Path
from pydantic import BaseModel, Field
from typing import List, Optional
from datetime import datetime
import uuid
router = APIRouter(
prefix="/api/${COMPONENT_NAME}",
tags=["${COMPONENT_NAME}"],
)
class ${COMPONENT_NAME}Base(BaseModel):
"""Base ${COMPONENT_NAME} schema"""
name: str = Field(..., min_length=1, max_length=255)
class ${COMPONENT_NAME}Create(${COMPONENT_NAME}Base):
"""Schema for creating ${COMPONENT_NAME}"""
pass
class ${COMPONENT_NAME}Update(${COMPONENT_NAME}Base):
"""Schema for updating ${COMPONENT_NAME}"""
name: Optional[str] = Field(None, min_length=1, max_length=255)
class ${COMPONENT_NAME}InDB(${COMPONENT_NAME}Base):
"""Schema for ${COMPONENT_NAME} in database"""
id: str
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class PaginatedResponse(BaseModel):
"""Paginated response schema"""
data: List[${COMPONENT_NAME}InDB]
total: int
page: int
page_size:
total_pages:
${COMPONENT_NAME}s(
page: = Query(, ge=),
page_size: = Query(, ge=, le=),
search: [] = ,
):
:
skip = (page - ) * page_size
query = db.query(${COMPONENT_NAME})
search:
query = query.(${COMPONENT_NAME}.name.contains(search))
total = query.count()
items = query.offset(skip).limit(page_size).()
PaginatedResponse(
data=items,
total=total,
page=page,
page_size=page_size,
total_pages=(total + page_size - ) // page_size,
)
Exception e:
HTTPException(status_code=, detail=(e))
${COMPONENT_NAME}(
: = Path(..., description=),
):
item = db.query(${COMPONENT_NAME}).(${COMPONENT_NAME}. == ).first()
item:
HTTPException(status_code=, detail=)
item
${COMPONENT_NAME}(
data: ${COMPONENT_NAME}Create,
):
:
item = ${COMPONENT_NAME}(
=(uuid.uuid4()),
name=data.name,
created_at=datetime.utcnow(),
updated_at=datetime.utcnow(),
)
db.add(item)
db.commit()
db.refresh(item)
item
Exception e:
db.rollback()
HTTPException(status_code=, detail=(e))
${COMPONENT_NAME}(
: = Path(..., description=),
data: ${COMPONENT_NAME}Update = ,
):
item = db.query(${COMPONENT_NAME}).(${COMPONENT_NAME}. == ).first()
item:
HTTPException(status_code=, detail=)
update_data = data.(exclude_unset=)
key, value update_data.items():
(item, key, value)
item.updated_at = datetime.utcnow()
db.commit()
db.refresh(item)
item
${COMPONENT_NAME}(
: = Path(..., description=),
):
item = db.query(${COMPONENT_NAME}).(${COMPONENT_NAME}. == ).first()
item:
HTTPException(status_code=, detail=)
db.delete(item)
db.commit()
echo ""
echo "=== ✓ Boilerplate Generation Complete ==="
echo ""
echo "📁 Generated files for $FRAMEWORK:"
case $FRAMEWORK in
react)
echo " - src/components/${COMPONENT_NAME}/${COMPONENT_NAME}.tsx"
echo " - src/components/${COMPONENT_NAME}/${COMPONENT_NAME}.module.css"
echo " - src/components/${COMPONENT_NAME}/${COMPONENT_NAME}.test.tsx"
;;
nextjs)
echo " - app/${COMPONENT_NAME}/page.tsx"
echo " - app/api/${COMPONENT_NAME}/route.ts"
;;
express)
echo " - src/routes/${COMPONENT_NAME}.routes.ts"
echo " - src/controllers/${COMPONENT_NAME}.controller.ts"
;;
fastapi)
echo " - app/routes/${COMPONENT_NAME}.py"
echo " - app/schemas/${COMPONENT_NAME}.py"
;;
esac
echo ""
echo "✓ Includes:"
echo " - TypeScript/type definitions"
Code Quality:
Integration Points:
/test - Generate tests for boilerplate/scaffold - Complete feature scaffolding/inline-docs - Add documentationImportant: I will NEVER add AI attribution.
Credits: Boilerplate patterns based on Create React App, Next.js, Express.js, FastAPI, and framework documentation best practices.