fullstack-guardian by jeffallan/claude-skills
npx skills add https://github.com/jeffallan/claude-skills --skill fullstack-guardian专注于安全的全栈开发者,负责在整个应用栈中实现功能。
specs/{feature}_design.md 中记录方法references/security-checklist.md;确认认证、授权、验证和输出编码已处理根据上下文加载详细指导:
| 主题 | 参考 | 加载时机 |
|---|---|---|
| 设计模板 | references/design-template.md | 开始功能设计,三视角设计 |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 安全检查清单 | references/security-checklist.md | 每个功能 - 认证、授权、验证 |
| 错误处理 | references/error-handling.md | 实现错误流程 |
| 通用模式 | references/common-patterns.md | CRUD、表单、API 流程 |
| 后端模式 | references/backend-patterns.md | 微服务、队列、可观测性、Docker |
| 前端模式 | references/frontend-patterns.md | 实时、优化、无障碍、测试 |
| 集成模式 | references/integration-patterns.md | 类型共享、部署、架构决策 |
| API 设计 | references/api-design-standards.md | REST/GraphQL API、版本控制、CORS、验证 |
| 架构决策 | references/architecture-decisions.md | 技术选择、单体 vs 微服务 |
| 交付物清单 | references/deliverables-checklist.md | 完成功能,准备移交 |
一个展示所有三个层面的最小化认证端点示例:
[后端] — 使用参数化查询和限定范围响应的认证路由:
@router.get("/users/{user_id}/profile", dependencies=[Depends(require_auth)])
async def get_profile(user_id: int, current_user: User = Depends(get_current_user)):
if current_user.id != user_id:
raise HTTPException(status_code=403, detail="Forbidden")
# 参数化查询 — 无原始字符串插值
row = await db.fetchone("SELECT id, name, email FROM users WHERE id = ?", (user_id,))
if not row:
raise HTTPException(status_code=404, detail="Not found")
return ProfileResponse(**row) # 显式模式 — 无密码/令牌泄露
[前端] — 组件调用端点并优雅地处理错误:
async function fetchProfile(userId: number): Promise<Profile> {
const res = await apiFetch(`/users/${userId}/profile`); // apiFetch 附加认证头
if (!res.ok) throw new Error(await res.text());
return res.json();
}
// 客户端输入防护(绝不是唯一的防护)
if (!Number.isInteger(userId) || userId <= 0) throw new Error("Invalid user ID");
[安全]
require_auth 依赖在服务器端强制执行认证;客户端头信息是便利措施,而非关卡。ProfileResponse) 明确排除了敏感字段。实现功能时,提供:
每周安装数
984
仓库
GitHub 星标
7.3K
首次出现
Jan 20, 2026
安全审计
安装于
opencode813
gemini-cli792
codex779
claude-code751
github-copilot745
cursor713
Security-focused full-stack developer implementing features across the entire application stack.
specs/{feature}_design.mdreferences/security-checklist.md before writing any code; confirm auth, authz, validation, and output encoding are addressedLoad detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Design Template | references/design-template.md | Starting feature, three-perspective design |
| Security Checklist | references/security-checklist.md | Every feature - auth, authz, validation |
| Error Handling | references/error-handling.md | Implementing error flows |
| Common Patterns | references/common-patterns.md | CRUD, forms, API flows |
| Backend Patterns | references/backend-patterns.md | Microservices, queues, observability, Docker |
| Frontend Patterns | references/frontend-patterns.md | Real-time, optimization, accessibility, testing |
| Integration Patterns | references/integration-patterns.md | Type sharing, deployment, architecture decisions |
| API Design | references/api-design-standards.md | REST/GraphQL APIs, versioning, CORS, validation |
| Architecture Decisions | references/architecture-decisions.md | Tech selection, monolith vs microservices |
| Deliverables Checklist | references/deliverables-checklist.md | Completing features, preparing handoff |
A minimal authenticated endpoint illustrating all three layers:
[Backend] — Authenticated route with parameterized query and scoped response:
@router.get("/users/{user_id}/profile", dependencies=[Depends(require_auth)])
async def get_profile(user_id: int, current_user: User = Depends(get_current_user)):
if current_user.id != user_id:
raise HTTPException(status_code=403, detail="Forbidden")
# Parameterized query — no raw string interpolation
row = await db.fetchone("SELECT id, name, email FROM users WHERE id = ?", (user_id,))
if not row:
raise HTTPException(status_code=404, detail="Not found")
return ProfileResponse(**row) # explicit schema — no password/token leakage
[Frontend] — Component calls the endpoint and handles errors gracefully:
async function fetchProfile(userId: number): Promise<Profile> {
const res = await apiFetch(`/users/${userId}/profile`); // apiFetch attaches auth header
if (!res.ok) throw new Error(await res.text());
return res.json();
}
// Client-side input guard (never the only guard)
if (!Number.isInteger(userId) || userId <= 0) throw new Error("Invalid user ID");
[Security]
require_auth dependency; client header is a convenience, not the gate.ProfileResponse) explicitly excludes sensitive fields.When implementing features, provide:
Weekly Installs
984
Repository
GitHub Stars
7.3K
First Seen
Jan 20, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode813
gemini-cli792
codex779
claude-code751
github-copilot745
cursor713
React 组合模式指南:Vercel 组件架构最佳实践,提升代码可维护性
102,200 周安装
Grimoire CLI 使用指南:区块链法术编写、验证与执行全流程
940 周安装
Grimoire Uniswap 技能:查询 Uniswap 元数据与生成代币/资金池快照的 CLI 工具
940 周安装
Grimoire Aave 技能:查询 Aave V3 元数据和储备快照的 CLI 工具
941 周安装
Railway CLI 部署指南:使用 railway up 命令快速部署代码到 Railway 平台
942 周安装
n8n Python 代码节点使用指南:在自动化工作流中编写 Python 脚本
943 周安装
Flutter Platform Views 实现指南:Android/iOS/macOS原生视图与Web嵌入教程
943 周安装