skills/go-messaging/SKILL.md
Cloud-agnostic asynchronous messaging with abstract interfaces and implementations for NATS, RabbitMQ, and Google Pub/Sub. Trigger: When implementing event-driven communication, publishing domain events, or creating event subscribers.
npx skillsauth add 333-333-333/agents go-messagingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Pattern | Rule |
|---------|------|
| Interface in domain | EventPublisher is a domain port |
| Implementation swappable | NATS, RabbitMQ, or Pub/Sub behind same interface |
| Events are immutable facts | Past tense: BookingCreated, PaymentCompleted |
| Events carry data | Include enough data so consumers don't need to call back |
| Idempotent consumers | Subscribers MUST handle duplicate messages |
| Cloud agnostic | Application layer never imports messaging SDK |
Reference: assets/event.go
Reference: assets/port.go
Reference: assets/nats_publisher.go
Reference: assets/nats_subscriber.go
{service}.{domain}.{event}
Examples:
booking.booking.created
booking.booking.cancelled
payment.transaction.completed
caregiver.profile.verified
notification.email.requested
Reference: assets/publish_usage.go
Reference: assets/memory_publisher.go
# NATS
brew install nats-server
nats-server # Start locally
# Dependencies
go get github.com/nats-io/nats.go
# RabbitMQ alternative
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
go get github.com/rabbitmq/amqp091-go
| ❌ Don't | ✅ Do |
|----------|-------|
| Import NATS/RabbitMQ in domain | Define EventPublisher interface in domain |
| Events named as commands (CreateBooking) | Events are past tense facts (BookingCreated) |
| Consumer calls back to producer service | Include enough data in the event payload |
| Assume exactly-once delivery | Design idempotent consumers |
| Synchronous event publishing blocking the request | Use goroutines or accept best-effort for non-critical events |
testing
Review Flutter components and screens for UX/UI compliance. Trigger: When user invokes /ux-review command or requests UX audit.
development
TypeScript strict patterns and best practices. Trigger: When implementing or refactoring TypeScript in .ts/.tsx (types, interfaces, generics, const maps, type guards, removing any, tightening unknown).
testing
Testing philosophy and strategy for every feature: test pyramid, mandatory levels per change type, completion checklist, and skill delegation. Trigger: When planning tests for a feature, reviewing test coverage, defining acceptance criteria, or asking what tests a change needs.
development
Terraform security practices: sensitive variables, secret management, state protection, .gitignore patterns, and CI/CD credential handling. Trigger: When handling secrets in Terraform, configuring state backends, reviewing .gitignore for Terraform, or setting up CI/CD pipelines for infrastructure.