example-framework-skill by bobmatnyc/claude-mpm-skills
npx skills add https://github.com/bobmatnyc/claude-mpm-skills --skill example-framework-skill一个完整的示例,展示了 Claude Code 技能的正确自包含模式。
使用场景:使用示例框架构建应用程序 - 包含设置、模式、测试和部署。
本技能展示了正确方法进行自包含技能开发:
✅ 自包含:所有必要内容内联 - 可独立运行 ✅ 无依赖:不依赖其他技能的相对路径 ✅ 完整示例:可运行的代码,而非片段 ✅ 优雅降级:注明可选增强功能但不强制要求 ✅ 扁平部署就绪:适用于任何目录结构
# 安装框架
pip install example-framework
# 创建新项目
example-framework init my-project
cd my-project
# 安装依赖
pip install -r requirements.txt
# 运行开发服务器
example-framework dev
"""
最小示例框架应用程序。
自包含 - 无外部技能依赖。
"""
from example_framework import App, route
app = App()
@route("/")
def home():
"""主页路由。"""
return {"message": "Hello, World!"}
@route("/users/{user_id}")
def get_user(user_id: int):
"""通过 ID 获取用户。"""
return {
"id": user_id,
"username": f"user_{user_id}"
}
if __name__ == "__main__":
# 开发服务器
app.run(host="0.0.0.0", port=8000, debug=True)
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
运行它:
python app.py
# 访问:http://localhost:8000
完整的设置模式 - 无外部依赖:
from example_framework import App, Config
from example_framework.middleware import CORSMiddleware, LoggingMiddleware
# 配置
config = Config(
DEBUG=True,
SECRET_KEY="your-secret-key-here",
DATABASE_URL="sqlite:///./app.db"
)
# 应用程序实例
app = App(config=config)
# 中间件
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"]
)
app.add_middleware(LoggingMiddleware)
# 健康检查端点
@app.route("/health")
def health_check():
"""健康检查端点。"""
return {"status": "healthy"}
必要的数据库模式 - 内联以实现自包含:
from example_framework import Database
from contextlib import contextmanager
# 数据库配置
db = Database("sqlite:///./app.db")
@contextmanager
def get_db_session():
"""
数据库会话上下文管理器。
用法:
with get_db_session() as session:
users = session.query(User).all()
"""
session = db.create_session()
try:
yield session
session.commit()
except Exception:
session.rollback()
raise
finally:
session.close()
# 模型示例
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def to_dict(self):
"""转换为字典。"""
return {
"id": self.id,
"username": self.username,
"email": self.email
}
# CRUD 操作
@app.route("/users", methods=["POST"])
def create_user(data):
"""创建新用户。"""
with get_db_session() as session:
user = User(
username=data["username"],
email=data["email"]
)
session.add(user)
return user.to_dict(), 201
@app.route("/users/{user_id}")
def get_user(user_id: int):
"""通过 ID 获取用户。"""
with get_db_session() as session:
user = session.query(User).filter_by(id=user_id).first()
if not user:
return {"error": "User not found"}, 404
return user.to_dict()
必要的测试模式 - 从测试最佳实践中内联:
"""
示例框架应用程序的测试套件。
自包含测试模式 - 无外部技能依赖。
"""
import pytest
from example_framework.testing import TestClient
# 测试客户端夹具
@pytest.fixture
def client():
"""创建测试客户端。"""
return TestClient(app)
# 数据库夹具
@pytest.fixture
def db_session():
"""创建测试数据库会话。"""
db.create_all()
session = db.create_session()
yield session
session.close()
db.drop_all()
# 测试示例
def test_home_route(client):
"""测试主页返回正确响应。"""
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"message": "Hello, World!"}
def test_create_user(client, db_session):
"""测试用户创建。"""
response = client.post("/users", json={
"username": "testuser",
"email": "test@example.com"
})
assert response.status_code == 201
data = response.json()
assert data["username"] == "testuser"
assert data["email"] == "test@example.com"
def test_get_user(client, db_session):
"""测试通过 ID 获取用户。"""
# 创建用户
user = User(username="testuser", email="test@example.com")
db_session.add(user)
db_session.commit()
# 获取用户
response = client.get(f"/users/{user.id}")
assert response.status_code == 200
assert response.json()["username"] == "testuser"
def test_user_not_found(client):
"""测试不存在用户的 404 错误。"""
response = client.get("/users/999")
assert response.status_code == 404
运行测试:
pytest tests/
from example_framework import HTTPException
@app.error_handler(404)
def not_found_handler(error):
"""处理 404 错误。"""
return {
"error": "Not Found",
"message": str(error)
}, 404
@app.error_handler(500)
def server_error_handler(error):
"""处理 500 错误。"""
return {
"error": "Internal Server Error",
"message": "An unexpected error occurred"
}, 500
@app.error_handler(HTTPException)
def http_exception_handler(error):
"""处理 HTTP 异常。"""
return {
"error": error.name,
"message": error.description
}, error.status_code
# 自定义验证错误
class ValidationError(Exception):
"""验证错误。"""
pass
@app.error_handler(ValidationError)
def validation_error_handler(error):
"""处理验证错误。"""
return {
"error": "Validation Error",
"message": str(error)
}, 400
# 基于环境的配置
import os
from example_framework import Config
class DevelopmentConfig(Config):
DEBUG = True
DATABASE_URL = "sqlite:///./dev.db"
class ProductionConfig(Config):
DEBUG = False
DATABASE_URL = os.getenv("DATABASE_URL")
SECRET_KEY = os.getenv("SECRET_KEY")
# 根据环境加载配置
env = os.getenv("ENV", "development")
config = DevelopmentConfig() if env == "development" else ProductionConfig()
app = App(config=config)
# 依赖注入模式
from example_framework import Depends
def get_current_user(token: str = Depends("Authorization")):
"""从令牌获取当前用户。"""
# 令牌验证逻辑
user_id = validate_token(token)
return User.query.get(user_id)
@app.route("/profile")
def get_profile(user: User = Depends(get_current_user)):
"""获取当前用户资料。"""
return user.to_dict()
from example_framework import validate_request
# 请求模式
user_schema = {
"username": {"type": "string", "minLength": 3, "maxLength": 80},
"email": {"type": "string", "format": "email"},
"age": {"type": "integer", "minimum": 0}
}
@app.route("/users", methods=["POST"])
@validate_request(user_schema)
def create_user(data):
"""使用已验证数据创建用户。"""
# 数据已通过验证
user = User(**data)
db.session.add(user)
db.session.commit()
return user.to_dict(), 201
"""
生产部署配置。
自包含 - 包含所有必要模式。
"""
# 1. 使用生产服务器(例如 gunicorn)
# requirements.txt:
# gunicorn>=20.1.0
# 2. 生产配置
import os
class ProductionConfig:
DEBUG = False
TESTING = False
SECRET_KEY = os.getenv("SECRET_KEY")
DATABASE_URL = os.getenv("DATABASE_URL")
ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS", "").split(",")
app = App(config=ProductionConfig())
# 3. 使用 gunicorn 运行
# gunicorn -w 4 -b 0.0.0.0:8000 app:app
# 4. 环境变量(.env)
# SECRET_KEY=your-production-secret-key
# DATABASE_URL=postgresql://user:pass@localhost/dbname
# ALLOWED_HOSTS=example.com,www.example.com
使用此技能时,请考虑以下相关技能(如果已部署):
pytest-patterns:高级测试模式和夹具
database-orm-patterns:高级 ORM 模式和优化
api-security:身份验证、授权、安全最佳实践
deployment-patterns:Docker、CI/CD、监控、扩展
注意:所有补充技能均可独立部署。本技能无需它们即可完全正常运行。
# 不要这样做
from ..other_skill.patterns import setup
# 直接包含模式
def setup():
"""设置模式(自包含)。"""
# 实现代码在此
pass
# 不要这样做
# 这需要 pytest-patterns 技能
from skills.pytest_patterns import fixture_factory
# 包含必要模式
def fixture_factory(name, default=None):
"""夹具工厂模式(内联)。"""
@pytest.fixture
def _fixture():
return default
_fixture.__name__ = name
return _fixture
有关更高级的主题,请参阅 references/ 目录:
注意:主 SKILL.md 是自给自足的。参考资料提供可选的深入探讨。
官方文档:
相关技术:
本技能展示了自包含技能开发:
✅ 完整:所有必要模式均已内联包含 ✅ 独立:无需其他技能即可运行 ✅ 经过测试:在隔离环境中验证 ✅ 可部署:适用于扁平目录结构 ✅ 优雅:注明可选增强功能但不强制要求
将此作为模板用于创建新技能。
版本:1.0.0 最后更新:2025-11-30 自包含性:✅ 完全合规
每周安装次数
61
仓库
GitHub 星标数
18
首次出现
2026年1月23日
安全审计
已安装于
claude-code48
opencode45
codex45
gemini-cli44
cursor42
github-copilot42
A complete example demonstrating proper self-containment patterns for Claude Code skills.
When to Use : Building applications with Example Framework - includes setup, patterns, testing, and deployment.
This skill demonstrates the correct approach to self-contained skill development:
✅ Self-Contained : All essential content inlined - works standalone ✅ No Dependencies : No relative paths to other skills ✅ Complete Examples : Working code, not fragments ✅ Graceful Degradation : Notes optional enhancements without requiring them ✅ Flat Deployment Ready : Works in any directory structure
# Install framework
pip install example-framework
# Create new project
example-framework init my-project
cd my-project
# Install dependencies
pip install -r requirements.txt
# Run development server
example-framework dev
"""
Minimal Example Framework application.
Self-contained - no external skill dependencies.
"""
from example_framework import App, route
app = App()
@route("/")
def home():
"""Homepage route."""
return {"message": "Hello, World!"}
@route("/users/{user_id}")
def get_user(user_id: int):
"""Get user by ID."""
return {
"id": user_id,
"username": f"user_{user_id}"
}
if __name__ == "__main__":
# Development server
app.run(host="0.0.0.0", port=8000, debug=True)
Run it:
python app.py
# Visit: http://localhost:8000
Complete setup pattern - no external dependencies:
from example_framework import App, Config
from example_framework.middleware import CORSMiddleware, LoggingMiddleware
# Configuration
config = Config(
DEBUG=True,
SECRET_KEY="your-secret-key-here",
DATABASE_URL="sqlite:///./app.db"
)
# Application instance
app = App(config=config)
# Middleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"]
)
app.add_middleware(LoggingMiddleware)
# Health check endpoint
@app.route("/health")
def health_check():
"""Health check endpoint."""
return {"status": "healthy"}
Essential database pattern - inlined for self-containment:
from example_framework import Database
from contextlib import contextmanager
# Database configuration
db = Database("sqlite:///./app.db")
@contextmanager
def get_db_session():
"""
Database session context manager.
Usage:
with get_db_session() as session:
users = session.query(User).all()
"""
session = db.create_session()
try:
yield session
session.commit()
except Exception:
session.rollback()
raise
finally:
session.close()
# Model example
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def to_dict(self):
"""Convert to dictionary."""
return {
"id": self.id,
"username": self.username,
"email": self.email
}
# CRUD operations
@app.route("/users", methods=["POST"])
def create_user(data):
"""Create new user."""
with get_db_session() as session:
user = User(
username=data["username"],
email=data["email"]
)
session.add(user)
return user.to_dict(), 201
@app.route("/users/{user_id}")
def get_user(user_id: int):
"""Get user by ID."""
with get_db_session() as session:
user = session.query(User).filter_by(id=user_id).first()
if not user:
return {"error": "User not found"}, 404
return user.to_dict()
Essential testing patterns - inlined from testing best practices:
"""
Test suite for Example Framework application.
Self-contained testing patterns - no external skill dependencies.
"""
import pytest
from example_framework.testing import TestClient
# Test client fixture
@pytest.fixture
def client():
"""Create test client."""
return TestClient(app)
# Database fixture
@pytest.fixture
def db_session():
"""Create test database session."""
db.create_all()
session = db.create_session()
yield session
session.close()
db.drop_all()
# Test examples
def test_home_route(client):
"""Test homepage returns correct response."""
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"message": "Hello, World!"}
def test_create_user(client, db_session):
"""Test user creation."""
response = client.post("/users", json={
"username": "testuser",
"email": "test@example.com"
})
assert response.status_code == 201
data = response.json()
assert data["username"] == "testuser"
assert data["email"] == "test@example.com"
def test_get_user(client, db_session):
"""Test get user by ID."""
# Create user
user = User(username="testuser", email="test@example.com")
db_session.add(user)
db_session.commit()
# Get user
response = client.get(f"/users/{user.id}")
assert response.status_code == 200
assert response.json()["username"] == "testuser"
def test_user_not_found(client):
"""Test 404 for nonexistent user."""
response = client.get("/users/999")
assert response.status_code == 404
Run tests:
pytest tests/
from example_framework import HTTPException
@app.error_handler(404)
def not_found_handler(error):
"""Handle 404 errors."""
return {
"error": "Not Found",
"message": str(error)
}, 404
@app.error_handler(500)
def server_error_handler(error):
"""Handle 500 errors."""
return {
"error": "Internal Server Error",
"message": "An unexpected error occurred"
}, 500
@app.error_handler(HTTPException)
def http_exception_handler(error):
"""Handle HTTP exceptions."""
return {
"error": error.name,
"message": error.description
}, error.status_code
# Custom validation error
class ValidationError(Exception):
"""Validation error."""
pass
@app.error_handler(ValidationError)
def validation_error_handler(error):
"""Handle validation errors."""
return {
"error": "Validation Error",
"message": str(error)
}, 400
# environment-based configuration
import os
from example_framework import Config
class DevelopmentConfig(Config):
DEBUG = True
DATABASE_URL = "sqlite:///./dev.db"
class ProductionConfig(Config):
DEBUG = False
DATABASE_URL = os.getenv("DATABASE_URL")
SECRET_KEY = os.getenv("SECRET_KEY")
# Load config based on environment
env = os.getenv("ENV", "development")
config = DevelopmentConfig() if env == "development" else ProductionConfig()
app = App(config=config)
# Dependency injection pattern
from example_framework import Depends
def get_current_user(token: str = Depends("Authorization")):
"""Get current user from token."""
# Token validation logic
user_id = validate_token(token)
return User.query.get(user_id)
@app.route("/profile")
def get_profile(user: User = Depends(get_current_user)):
"""Get current user profile."""
return user.to_dict()
from example_framework import validate_request
# Request schema
user_schema = {
"username": {"type": "string", "minLength": 3, "maxLength": 80},
"email": {"type": "string", "format": "email"},
"age": {"type": "integer", "minimum": 0}
}
@app.route("/users", methods=["POST"])
@validate_request(user_schema)
def create_user(data):
"""Create user with validated data."""
# Data is already validated
user = User(**data)
db.session.add(user)
db.session.commit()
return user.to_dict(), 201
"""
Production deployment configuration.
Self-contained - all necessary patterns included.
"""
# 1. Use production server (e.g., gunicorn)
# requirements.txt:
# gunicorn>=20.1.0
# 2. Production configuration
import os
class ProductionConfig:
DEBUG = False
TESTING = False
SECRET_KEY = os.getenv("SECRET_KEY")
DATABASE_URL = os.getenv("DATABASE_URL")
ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS", "").split(",")
app = App(config=ProductionConfig())
# 3. Run with gunicorn
# gunicorn -w 4 -b 0.0.0.0:8000 app:app
# 4. Environment variables (.env)
# SECRET_KEY=your-production-secret-key
# DATABASE_URL=postgresql://user:pass@localhost/dbname
# ALLOWED_HOSTS=example.com,www.example.com
When using this skill, consider these related skills (if deployed):
pytest-patterns : Advanced testing patterns and fixtures
database-orm-patterns : Advanced ORM patterns and optimization
api-security : Authentication, authorization, security best practices
deployment-patterns : Docker, CI/CD, monitoring, scaling
Note : All complementary skills are independently deployable. This skill is fully functional without them.
# DON'T DO THIS
from ..other_skill.patterns import setup
# Include pattern directly
def setup():
"""Setup pattern (self-contained)."""
# Implementation here
pass
# DON'T DO THIS
# This requires pytest-patterns skill
from skills.pytest_patterns import fixture_factory
# Include essential pattern
def fixture_factory(name, default=None):
"""Fixture factory pattern (inlined)."""
@pytest.fixture
def _fixture():
return default
_fixture.__name__ = name
return _fixture
For more advanced topics, see the references/ directory:
Note : Main SKILL.md is self-sufficient. References provide optional deep dives.
Official Documentation :
Related Technologies :
This skill demonstrates self-contained skill development :
✅ Complete : All essential patterns included inline ✅ Independent : Works without other skills ✅ Tested : Verified in isolation ✅ Deployable : Works in flat directory structure ✅ Graceful : Notes optional enhancements without requiring them
Use this as a template for creating new skills.
Version : 1.0.0 Last Updated : 2025-11-30 Self-Containment : ✅ Fully Compliant
Weekly Installs
61
Repository
GitHub Stars
18
First Seen
Jan 23, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
claude-code48
opencode45
codex45
gemini-cli44
cursor42
github-copilot42
agent-browser 浏览器自动化工具 - Vercel Labs 命令行网页操作与测试
166,500 周安装
TorchTitan:PyTorch原生分布式大语言模型预训练平台,支持4D并行与H100 GPU加速
69 周安装
screenshot 截图技能:跨平台桌面截图工具,支持macOS/Linux权限管理与多模式捕获
69 周安装
tmux进程管理最佳实践:交互式Shell初始化、会话命名与生命周期管理
69 周安装
Git Rebase Sync:安全同步分支的Git变基工具,解决冲突与备份
69 周安装
LinkedIn自动化工具 - Claude Code专属,自然对话拓展人脉,避免垃圾信息
69 周安装
实验流水线框架:4阶段科研实验执行与消融研究方法论 | EvoScientist
69 周安装