error-handling
Ajuda seu agente a lidar com erros de forma robusta em diferentes linguagens. Ele define como os erros são tratados, se recupera de falhas e informa o usuário.
O que ela faz
Esta habilidade ensina como lidar com erros em programas de computador. Ela ajuda a garantir que os programas não parem de funcionar inesperadamente e que os usuários recebam mensagens claras quando algo der errado.
Quando usar
- ✓Ao criar um novo programa ou parte dele.
- ✓Quando um programa precisa se conectar a outros serviços.
- ✓Ao pensar em como mostrar mensagens de erro para os usuários.
Exemplo do que pedir para a IA
“Como posso garantir que meu programa informe o usuário de forma amigável se ele não conseguir encontrar um item?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ela sugere usar 'tipos' de erro para entender o que aconteceu e criar mensagens diferentes para o usuário e para o programador. Também ensina a não ignorar erros e a tratar falhas de forma consistente.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill error-handlingOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/error-handling/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões de Tratamento de Erros
Padrões consistentes e robustos de tratamento de erros para aplicações em produção.
Quando Ativar
- Projetando tipos de erro ou hierarquias de exceção para um novo módulo ou serviço
- Adicionando lógica de retentativa ou disjuntores para dependências externas não confiáveis
- Revisando endpoints de API em busca de tratamento de erros ausente
- Implementando mensagens e feedback de erro voltados para o usuário
- Depurando falhas em cascata ou "engolimento" silencioso de erros
Princípios Fundamentais
- Falhar rápido e de forma explícita — exponha erros na fronteira onde ocorrem; não os enterre
- Erros tipados em vez de mensagens de texto — erros são valores de primeira classe com estrutura
- Mensagens para o usuário ≠ mensagens para o desenvolvedor — mostre texto amigável aos usuários, registre o contexto completo no lado do servidor
- Nunca engula erros silenciosamente — cada bloco
catchdeve tratar, relançar ou registrar - Erros fazem parte do seu contrato de API — documente cada código de erro que um cliente pode receber
TypeScript / JavaScript
Classes de Erro Tipadas
// Define an error hierarchy for your domain
export class AppError extends Error {
constructor(
message: string,
public readonly code: string,
public readonly statusCode: number = 500,
public readonly details?: unknown,
) {
super(message)
this.name = this.constructor.name
// Maintain correct prototype chain in transpiled ES5 JavaScript.
// Required for `instanceof` checks (e.g., `error instanceof NotFoundError`)
// to work correctly when extending the built-in Error class.
Object.setPrototypeOf(this, new.target.prototype)
}
}
export class NotFoundError extends AppError {
constructor(resource: string, id: string) {
super(`${resource} not found: ${id}`, 'NOT_FOUND', 404)
}
}
export class ValidationError extends AppError {
constructor(message: string, details: { field: string; message: string }[]) {
super(message, 'VALIDATION_ERROR', 422, details)
}
}
export class UnauthorizedError extends AppError {
constructor(reason = 'Authentication required') {
super(reason, 'UNAUTHORIZED', 401)
}
}
export class RateLimitError extends AppError {
constructor(public readonly retryAfterMs: number) {
super('Rate limit exceeded', 'RATE_LIMITED', 429)
}
}
Padrão Result (estilo sem exceção)
Para operações onde a falha é esperada e comum (parsing, chamadas externas):
type Result<T, E = AppError> =
| { ok: true; value: T }
| { ok: false; error: E }
function ok<T>(value: T): Result<T> {
return { ok: true, value }
}
function err<E>(error: E): Result<never, E> {
return { ok: false, error }
}
// Usage
async function fetchUser(id: string): Promise<Result<User>> {
try {
const user = await db.users.findUnique({ where: { id } })
if (!user) return err(new NotFoundError('User', id))
return ok(user)
} catch (e) {
return err(new AppError('Database error', 'DB_ERROR'))
}
}
const result = await fetchUser('abc-123')
if (!result.ok) {
// TypeScript knows result.error here
logger.error('Failed to fetch user', { error: result.error })
return
}
// TypeScript knows result.value here
console.log(result.value.email)
Manipulador de Erro de API (Next.js / Express)
import { NextRequest, NextResponse } from 'next/server'
function handleApiError(error: unknown): NextResponse {
// Known application error
if (error instanceof AppError) {
return NextResponse.json(
{
error: {
code: error.code,
message: error.message,
...(error.details ? { details: error.details } : {}),
},
},
{ status: error.statusCode },
)
}
// Zod validation error
if (error instanceof z.ZodError) {
return NextResponse.json(
{
error: {
code: 'VALIDATION_ERROR',
message: 'Request validation failed',
details: error.issues.map(i => ({
field: i.path.join('.'),
message: i.message,
})),
},
},
{ status: 422 },
)
}
// Unexpected error — log details, return generic message
console.error('Unexpected error:', error)
return NextResponse.json(
{ error: { code: 'INTERNAL_ERROR', message: 'An unexpected error occurred' } },
{ status: 500 },
)
}
export async function POST(req: NextRequest) {
try {
// ... handler logic
} catch (error) {
return handleApiError(error)
}
}
Limite de Erro do React
…
Perguntas frequentes
Por que é importante lidar com erros?
Lidar com erros evita que o programa trave, ajuda a identificar problemas rapidamente e garante uma melhor experiência para o usuário, que recebe feedback claro em vez de mensagens confusas.
O que são 'erros tipados'?
São erros que possuem informações estruturadas (como um código e uma mensagem específica), em vez de serem apenas um texto. Isso ajuda o programa a entender melhor o tipo de problema.
Devo mostrar a mesma mensagem de erro para o usuário e para o programador?
Não. Para o usuário, use mensagens simples e amigáveis. Para o programador (em logs, por exemplo), inclua detalhes técnicos para facilitar a depuração.
Detalhes
Descrição original do autor
Patterns for robust error handling across TypeScript, Python, and Go. Covers typed errors, error boundaries, retries, circuit breakers, and user-facing error messages. Use when designing error types, retries, circuit breakers, or user-facing failure messages in TypeScript, Python, or Go.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #53
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
karpathy-guidelines
Ajuda seu agente a escrever código melhor, evitando erros comuns. É útil para garantir que o código seja simples, claro e fácil de verificar.
multica-ai/andrej-karpathy-skills
skill-creator
Permite ao agente criar, modificar e otimizar habilidades. Útil para testar o desempenho de habilidades e melhorar sua precisão.
anthropics/skills
ponytail-debt
Lista todos os atalhos de código ('shortcut:') deixados para depois. Ajuda a ver o que ainda precisa ser corrigido no projeto.
DietrichGebert/ponytail