一键导入
global
Padrões globais, naming conventions, arquitetura hexagonal, tratamento de erros e estrutura de projeto — válido para todos os repositórios e agentes.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Padrões globais, naming conventions, arquitetura hexagonal, tratamento de erros e estrutura de projeto — válido para todos os repositórios e agentes.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Realiza revisão de código técnica, usar está habilidade quando precisar fazer revisão de código, verificar conformidade com padrões arquiteturais (Hexagonal), qualidade de código, performance e corretude lógica.
Use esta habilidade para gerar ou evoluir o design system do CappyCloud - tokens, paletas, tipografia, espacamentos e padroes de componentes.
Use esta habilidade quando precisar implementar interfaces e componentes no frontend do CappyCloud. O padrao legado e React 19 + Mantine 9, mas features com Spec Kit aprovado podem adotar outro design system, como shadcn/ui + Tailwind.
Perform a non-destructive cross-artifact consistency and quality analysis across spec.md, plan.md, and tasks.md after task generation.
Generate a custom checklist for the current feature based on user requirements.
Execute the implementation plan by processing and executing all tasks defined in tasks.md
| name | global |
| description | Padrões globais, naming conventions, arquitetura hexagonal, tratamento de erros e estrutura de projeto — válido para todos os repositórios e agentes. |
Referência compartilhada de padrões e convenções aplicáveis a todos os projetos e agentes. Use quando precisar aplicar consistência em código, estrutura de projeto, naming conventions, ou validar conformidade com arquitetura hexagonal.
| Conceito | Padrão | Exemplo |
|---|---|---|
| Arquivo de domínio | snake_case | user_repository.py |
| Classe | PascalCase | UserRepository, CreateUserUseCase |
| Função/método | snake_case | fetch_user(), is_valid() |
| Constante | SCREAMING_SNAKE_CASE | MAX_RETRIES, DEFAULT_TIMEOUT |
| Enum | PascalCase (classe), SCREAMING_SNAKE_CASE (valor) | class Status(str, Enum): ACTIVE = "active" |
| Porta (ABC) | <Entity>Repository ou <Entity>Service | UserRepository, EmailService |
| Use Case | <Verb><Entity>UseCase | CreateUserUseCase, FetchUserByIdUseCase |
| Conceito | Padrão | Exemplo |
|---|---|---|
| Arquivo | kebab-case (componente) ou snake_case (utils) | user-card.tsx, api_client.ts |
| Componente React | PascalCase | UserCard, ChatContainer |
| Função/hook | camelCase ou use* | fetchUser(), useUserData() |
| Constante | SCREAMING_SNAKE_CASE | MAX_MESSAGE_LENGTH |
| Type/Interface | PascalCase | User, ChatMessage |
| Conceito | Padrão | Exemplo |
|---|---|---|
| Tabela | snake_case (plural) | users, chat_sessions |
| Coluna | snake_case | first_name, created_at |
| Índice | idx_<table>_<column> | idx_users_email |
| Constraint | fk_<table>_<referenced_table> | fk_messages_user_id |
| Enum | SCREAMING_SNAKE_CASE | ROLE_ADMIN, STATUS_ACTIVE |
✅ VÁLIDO:
app/
domain/
entities.py # Dataclasses puras, sem dependências
value_objects.py # Validação de negócio
ports/
repositories.py # ABC para persistência
services.py # ABC para integração externa
application/
use_cases/
create_user.py # Lógica de negócio (injeta Ports)
adapters/
primary/
http/
deps.py # Wiring do DI (FastAPI Depends)
routes.py # Endpoints thin (validação já está no domain)
secondary/
postgres/
user_repository.py # Implementa Port de repositório
❌ INVÁLIDO:
- Lógica de negócio em rotas (fat controllers)
- Dependências SQL diretas em use cases
- Port sem implementação em adapter
- Imports circulares (domain ← application ← adapters)
# 1. Standard library
import asyncio
from typing import Optional
# 2. Third-party
from fastapi import FastAPI
import sqlalchemy
# 3. Local domain (no Relative)
from app.domain.entities import User
from app.ports.repositories import UserRepository
# 4. Local adapters
from app.adapters.secondary.postgres import PostgresUserRepository
# Padrão: <Entity><Error>
class UserNotFound(Exception):
"""Levantada quando user_id não existe em DB"""
class PermissionDenied(Exception):
"""Levantada quando usuário não tem acesso ao recurso"""
class ConversationLimitReached(Exception):
"""Levantada quando atingiu cota de conversas"""
| Exceção | Status HTTP | Code de Erro |
|---|---|---|
UserNotFound | 404 | user_not_found |
PermissionDenied | 403 | permission_denied |
ConversationLimitReached | 422 | conversation_limit_reached |
ValidationError (Pydantic) | 400 | validation_error |
| Qualquer outra | 500 | internal_server_error |
from pydantic import BaseModel
class ErrorDetail(BaseModel):
code: str # machine-readable
message: str # human-readable
field: str | None # para validation errors
class ErrorResponse(BaseModel):
error: ErrorDetail
# Retorno:
# {"error": {"code": "user_not_found", "message": "Usuário não encontrado", "field": null}}
| Prefixo | Domínio | Exemplos |
|---|---|---|
auth_* | Autenticação/Autorização | auth_token_expired, auth_permission_denied |
user_* | Entidade User | user_not_found, user_already_exists |
conversation_* | Entidade Conversation | conversation_not_found, conversation_archived |
environment_* | Repo Environments (global) | environment_not_found, environment_in_use |
skill_* | Skills/Agents | skill_not_found, skill_timeout |
validation_* | Validação de Input | validation_field_required, validation_invalid_email |
agent_* | Agent Runtime | agent_unavailable, agent_timeout |
services/
api/
tests/
unit/
domain/ # Testes de entities, value objects
application/ # Testes de use cases (com mocks de ports)
adapters/ # Testes de repositories, HTTP routes
integration/ # Testes com DB real (fixtures)
conftest.py # Fixtures compartilhadas
def test_<function>_<scenario>_<expected_outcome>():
"""
test_fetch_user_by_id_not_found_raises_error
test_create_conversation_valid_input_persists_to_db
test_validate_email_invalid_format_returns_false
"""
✅ Adicione:
❌ Não adicione:
# incrementar x antes de x += 1)def fetch_user_by_id(user_id: str) -> User:
"""Busca um usuário por ID na base de dados.
Args:
user_id: UUID do usuário
Returns:
User object
Raises:
UserNotFound: Se user_id não existir
Note:
Esta chamada é N+1 com outras queries de perfil.
Usar fetch_user_with_profile() em contextos de lista.
"""
# Padrão: <SERVICE>_<COMPONENT>_<SETTING>
SERVICE_COMPONENT_SETTING=value
# Exemplos (CappyCloud):
CAPPYCLOUD_API_DEBUG=false
CAPPYCLOUD_AGENT_GRPC_PORT=50051
CAPPYCLOUD_AGENT_TIMEOUT_SEC=30
CAPPYCLOUD_DATABASE_URL=postgresql://...
# Não fazer:
# DEBUG=true (muito genérico)
# api_debug=false (use screaming snake case)
# Em schemas, portas, use cases — sempre explícito
DEFAULT_PAGE_SIZE = 20
DEFAULT_TIMEOUT_SEC = 30
MAX_MESSAGE_LENGTH = 2000
| Tipo | Máximo |
|---|---|
| Classe de domínio | 100 |
| Use case | 300 |
| Adapter secundário | 400 |
| Route/Handler | 200 |
| Função utilitária | 50 |
Arquivos maiores devem ser refatorados em módulos menores.
Disponível em: sandbox/skills/global/
Escopo: Global — todos os repositórios e agentes
Última atualização: maio 2026