error-handling-patterns — скилл для Claude Code
Скилл помогает выбирать и внедрять паттерны обработки ошибок: исключения, Result-типы, повторные попытки и graceful degradation. Подойдёт для API и отладки сбоев.
/plugin marketplace add wshobson/agents
/plugin install developer-essentials@claude-code-workflowsЧто делает error-handling-patterns
Скилл разбирает обработку исключений, Result-, Error Code- и Option/Maybe-типов. Он помогает разделять восстанавливаемые ошибки, например таймауты и неверный ввод, и неисправимые сбои вроде переполнения памяти или ошибок в коде. Отдельно рассматриваются передача контекста, понятные сообщения, логирование и очистка ресурсов.
Внутри есть базовые правила, пример обработки заказа на Python и ссылка на подробные паттерны в references/details.md. Также рассматриваются retry, circuit breaker, ошибки async/concurrent-кода и распределённых систем. Скилл доступен для Claude Code, Codex и Cursor.
Ставьте его, если агенту нужно проектировать границы ошибок или разбирать сбои в приложении. Для простой одноразовой проверки одного try-блока он избыточен.
Какие задачи решает
- спроектировать обработку ошибок в новом модуле
- разделить ожидаемые и неисправимые сбои
- добавить контекст к ошибкам внешнего сервиса
- проверить retry и circuit breaker
- улучшить сообщения для пользователя и разработчика
Примеры запросов агенту
- Спроектируй обработку ошибок для нового API: выбери между исключениями и Result-типами.
- Проверь обработку ошибок в `process_order` и найди места, где сбои теряются.
- Предложи схему retry и circuit breaker для сетевых ошибок.
Как установить error-handling-patterns
1Через маркетплейс плагинов
/plugin marketplace add wshobson/agents/plugin install developer-essentials@claude-code-workflows2Через Skills CLI (Vercel)
npx skills add wshobson/agents --skill error-handling-patterns -a claude-code3Вручную: положить файлы
~/.claude/skills/error-handling-patterns/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/error-handling-patterns/
1Через Skills CLI (Vercel)
npx skills add wshobson/agents --skill error-handling-patterns -a codex2Вручную: положить файлы
.agents/skills/error-handling-patterns/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add wshobson/agents --skill error-handling-patterns -a cursor2Вручную: положить файлы
.cursor/skills/error-handling-patterns/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install wshobson/agents error-handling-patterns2Вручную: положить файлы
.github/skills/error-handling-patterns/SKILL.mdКомандой платформы
gemini skills install https://github.com/wshobson/agents --path plugins/developer-essentials/skills/error-handling-patternsВручную: положить файлы
.devin/skills/error-handling-patterns/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Claude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Похожие
Вопросы о error-handling-patterns
Как установить error-handling-patterns в Claude Code?
Выполните npx skills add wshobson/agents --skill error-handling-patterns -a claude-code. Файл скилла появится в ~/.claude/skills/error-handling-patterns/SKILL.md.
Что делает error-handling-patterns?
Скилл помогает выбирать паттерны обработки ошибок и применять их в коде, API и асинхронных сценариях. Он также подсказывает, как сохранять контекст, логировать сбои и освобождать ресурсы.
Какие платформы поддерживает скилл?
Он доступен для Claude Code, Codex и Cursor. Для каждой платформы во входе есть отдельная команда установки.
Исходный текст
SKILL.md · MIT
---
name: error-handling-patterns
description: Master error handling patterns across languages including exceptions, Result types, error propagation, and graceful degradation to build resilient applications. Use when implementing error handling, designing APIs, or improving application reliability.
---
# Error Handling Patterns
Build resilient applications with robust error handling strategies that gracefully handle failures and provide excellent debugging experiences.
## When to Use This Skill
- Implementing error handling in new features
- Designing error-resilient APIs
- Debugging production issues
- Improving application reliability
- Creating better error messages for users and developers
- Implementing retry and circuit breaker patterns
- Handling async/concurrent errors
- Building fault-tolerant distributed systems
## Core Concepts
### 1. Error Handling Philosophies
**Exceptions vs Result Types:**
- **Exceptions**: Traditional try-catch, disrupts control flow
- **Result Types**: Explicit success/failure, functional approach
- **Error Codes**: C-style, requires discipline
- **Option/Maybe Types**: For nullable values
**When to Use Each:**
- Exceptions: Unexpected errors, exceptional conditions
- Result Types: Expected errors, validation failures
- Panics/Crashes: Unrecoverable errors, programming bugs
### 2. Error Categories
**Recoverable Errors:**
- Network timeouts
- Missing files
- Invalid user input
- API rate limits
**Unrecoverable Errors:**
- Out of memory
- Stack overflow
- Programming bugs (null pointer, etc.)
## Detailed patterns and worked examples
Detailed pattern documentation lives in `references/details.md`. Read that file when the navigation tier above is insufficient.
## Best Practices
1. **Fail Fast**: Validate input early, fail quickly
2. **Preserve Context**: Include stack traces, metadata, timestamps
3. **Meaningful Messages**: Explain what happened and how to fix it
4. **Log Appropriately**: Error = log, expected failure = don't spam logs
5. **Handle at Right Level**: Catch where you can meaningfully handle
6. **Clean Up Resources**: Use try-finally, context managers, defer
7. **Don't Swallow Errors**: Log or re-throw, don't silently ignore
8. **Type-Safe Errors**: Use typed errors when possible
```python
# Good error handling example
def process_order(order_id: str) -> Order:
"""Process order with comprehensive error handling."""
try:
# Validate input
if not order_id:
raise ValidationError("Order ID is required")
# Fetch order
order = db.get_order(order_id)
if not order:
raise NotFoundError("Order", order_id)
# Process payment
try:
payment_result = payment_service.charge(order.total)
except PaymentServiceError as e:
# Log and wrap external service error
logger.error(f"Payment failed for order {order_id}: {e}")
raise ExternalServiceError(
f"Payment processing failed",
service="payment_service",
details={"order_id": order_id, "amount": order.total}
) from e
# Update order
order.status = "completed"
order.payment_id = payment_result.id
db.save(order)
return order
except ApplicationError:
# Re-raise known application errors
raise
except Exception as e:
# Log unexpected errors
logger.exception(f"Unexpected error processing order {order_id}")
raise ApplicationError(
"Order processing failed",
code="INTERNAL_ERROR"
) from e
```
## Common Pitfalls
- **Catching Too Broadly**: `except Exception` hides bugs
- **Empty Catch Blocks**: Silently swallowing errors
- **Logging and Re-throwing**: Creates duplicate log entries
- **Not Cleaning Up**: Forgetting to close files, connections
- **Poor Error Messages**: "Error occurred" is not helpful
- **Returning Error Codes**: Use exceptions or Result types
- **Ignoring Async Errors**: Unhandled promise rejections
© Seth Hobson · MIT · wshobson/agents