agentsclimarketplace

Wolverine skill

Skill zetroot/wolverine-skill

AI-agent skill for building applications with WolverineFX framework

Install
npx -y skills add zetroot/wolverine-skill

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Comprehensive guidance for building .NET applications with the Wolverine framework (v6.x). Covers sagas, message transports (RabbitMQ, Kafka, AWS, Azure, GCP, NATS, MQTT, Redis, Pulsar, SignalR, TCP, gRPC), HTTP endpoints, durable messaging with inbox/outbox, health checks, Marten event sourcing, error handling, validation, testing, code generation/AOT, rate limiting, message batching, node agents, observability, and migration from MediatR/MassTransit. Use when building, configuring, or troubleshooting Wolverine applications, setting up messaging infrastructure, implementing long-running workflows, or creating HTTP APIs. Part of the "critter stack" with Marten.

SKILL.md

10.7 KB, as published. Nobody here has run it

Wolverine Development

Next-generation .NET mediator and message bus for event-driven architectures. In-process command bus, async messaging with 15+ transports, durable inbox/outbox, sagas, HTTP endpoints, gRPC, and event sourcing with Marten.

Docs: https://wolverinefx.net | Source: https://github.com/JasperFx/wolverine

NuGet Packages (v6.x)

PackagePurpose
WolverineFxCore — handlers, middleware, local queues, MediatR/MassTransit shims
WolverineFx.HttpHTTP endpoints (requires AddWolverineHttp())
WolverineFx.RabbitMQRabbitMQ transport
WolverineFx.KafkaKafka transport
WolverineFx.AmazonSqsAWS SQS/SNS transport
WolverineFx.AzureServiceBusAzure Service Bus transport
WolverineFx.PubsubGCP Pub/Sub transport
WolverineFx.NatsNATS transport
WolverineFx.MQTTMQTT transport (IoT)
WolverineFx.PulsarApache Pulsar transport
WolverineFx.RedisRedis transport
WolverineFx.SignalRSignalR transport
WolverineFx.GrpcgRPC integration
WolverineFx.HealthChecksASP.NET Core health checks (AddWolverine(), AddWolverineListeners())
WolverineFx.MartenMarten integration — sagas, event sourcing, aggregates
WolverineFx.SqlServerSQL Server persistence
WolverineFx.PostgresqlPostgreSQL persistence
WolverineFx.SqliteSQLite persistence
WolverineFx.MySqlMySQL persistence
WolverineFx.OracleOracle persistence
WolverineFx.EntityFrameworkCoreEF Core integration
WolverineFx.CosmosDbAzure CosmosDB persistence
WolverineFx.RavenDbRavenDB persistence
WolverineFx.FluentValidationFluentValidation middleware
WolverineFx.DataAnnotationsValidationDataAnnotations validation
WolverineFx.MemoryPackMemoryPack serialization
WolverineFx.MessagePackMessagePack serialization
WolverineFx.ProtobufProtocol Buffers serialization
WolverineFx.NewtonsoftNewtonsoft.Json serialization
WolverineFx.RuntimeCompilationRoslyn runtime compiler (Dynamic/Auto modes only)

When to Use

  • Building event-driven architectures with durable messaging
  • Implementing sagas / long-running workflows with persisted state
  • Setting up messaging transports (15+ supported)
  • Creating HTTP APIs with Wolverine.Http endpoint model
  • Building event-sourced systems with Marten aggregates
  • Migrating from MediatR or MassTransit
  • Configuring transactional inbox/outbox for reliable message delivery
  • Cross-service communication via gRPC

When Not to Use

  • Pure CRUD apps without messaging needs
  • Projects requiring only a mediator without persistence (consider MediatR)
  • Non-.NET projects

Reference Sections

SectionFileContents
Quickstartquickstart.mdMinimal setup, handler conventions, message bus, CLI commands
Sagassagas.mdStateful workflows, Saga base class, TimeoutMessage, persistence, lifecycle
Durable Messagingdurability.mdInbox/outbox, stale recovery, message identity, storage management
RabbitMQtransports-rabbitmq.mdSetup, listening, publishing, clusters, sharded queues, DLQ
Kafkatransports-kafka.mdProcessing modes, offset commit, scaling, rebalancing, idempotency
HTTP Endpointshttp-endpoints.mdVerbs, parameters, responses, cascading, hybrid handlers, ProblemDetails
Error Handlingerror-handling.mdCircuit breaker, failure rules, exception matching, Fault<T>, DLQ
Validationvalidation.mdFluentValidation, DataAnnotations, gRPC validation, AOT
Testingtesting.mdTrackedSession, assertions, stubs, Alba integration
Code Gen / AOTcodegen.mdTypeLoadMode, pre-generation, Native AOT, runtime compilation
Marten / ESmarten.mdAggregates, event sourcing, subscriptions, transactional outbox
gRPCgrpc.mdCode-first, proto-first, streaming, rich errors, transport
Health Checkshealth-checks.mdBroker probes, ASP.NET integration, CLI checks, node leadership
+ Transportsadditional-transports.mdAWS, Azure, GCP, NATS, MQTT, Pulsar, Redis, SignalR, TCP, SQL
Serializationserialization.mdJSON, Newtonsoft, MessagePack, MemoryPack, Protobuf, AES encryption
Rate Limitingbatching-rate-limiting.mdPer-type/endpoint limits, token bucket, message batching
HTTP Advancedhttp-advanced.mdAPI versioning, antiforgery, OpenAPI, file handling, caching, auth
Node Agentsnode-agents.mdLeader election, agent families, heartbeat, cluster management
Interop/Shimsinterop-shims.mdMediatR shim, MassTransit shim, CloudEvents
Observabilityobservability.mdOpenTelemetry, metrics, CritterWatch, causation tracking

Quick Reference

Minimal Setup

var builder = WebApplication.CreateBuilder(args);
builder.Host.UseWolverine(opts => opts.ApplicationAssembly = typeof(Program).Assembly);
var app = builder.Build();
return await app.RunJasperFxCommands(args);

Handler

public void Handle(MyCommand cmd) { ... }
public async Task HandleAsync(MyCommand cmd) { ... }
public static (Response, OutEvent) Handle(MyCommand cmd, IService svc) { ... }

Bus

await bus.SendAsync(msg); var resp = await bus.InvokeAsync<T>(req);
await bus.ScheduleAsync(msg, 5.Minutes());

HTTP

builder.Services.AddWolverineHttp(); app.MapWolverineEndpoints();
[WolverinePost("/api/x")] public static T Post(Cmd c, IDocumentSession s) { ... }

Saga

public class Order : Saga
{
    public string? Id { get; set; }
    public static Order Start(StartOrder m) => new() { Id = m.OrderId };
    public void Handle(CompleteOrder m) => MarkCompleted();
}

RabbitMQ

opts.UseRabbitMqUsingNamedConnection("rabbitmq").AutoProvision();
opts.ListenToRabbitQueue("q").UseDurableInbox();

Kafka

opts.UseKafka("localhost:9092");
opts.ListenToKafkaTopic("orders").UseDurableInbox();

Outbox

opts.PersistMessagesWithPostgresql(connStr);
opts.Policies.UseDurableOutboxOnAllSendingEndpoints();

Marten

builder.Services.AddMarten(opts=>...).IntegrateWithWolverine();
[AggregateHandler] public static OrderCreated Handle(CreateOrder cmd) => new(...);

gRPC

builder.Services.AddWolverineGrpc(); app.MapWolverineGrpcServices();

Testing

var bus = host.MessageBus();
var session = await host.TrackActivity().ExecuteAndWaitAsync(async () => { ... });
session.Sent.ShouldHaveMessageOfType<OrderCreated>();

Error Handling

opts.OnException<TimeoutException>().RetryTimes(3);
opts.OnException<DbException>().RetryTimes(2)
    .Then.ScheduleRetry(1.Seconds(), 5.Seconds(), 20.Seconds());

Health Checks

builder.Services.AddHealthChecks().AddWolverine().AddWolverineListeners();

Validation

opts.UseFluentValidation();
opts.UseDataAnnotationsValidation();

AOT

opts.CodeGeneration.TypeLoadMode = TypeLoadMode.Static;

CLI

dotnet run -- resources setup   dotnet run -- storage rebuild
dotnet run -- db-apply          dotnet run -- check-env
dotnet run -- codegen write

Common Pitfalls

PitfallSolution
InvokeAsync() inside saga handler on same sagaUse cascading messages (tuple returns)
Missing AddWolverineHttp()Call before app.Build() — throws at startup
Concurrent HTTP requests at startupWarmUpRoutes = RouteWarmup.Eager
Root-scoped IMessageBus in testshost.MessageBus() extension method
Kafka ConfigureConsumer() replaces parent configNot combinatorial — per-topic only
Kafka + Requeue policyUse inline Retry — Requeue not supported
InboxStaleTime too lowMust exceed max processing time + retries
Hardcoded connection strings in testsUse Servers class
Production without TypeLoadMode.StaticPre-generate code: dotnet run -- codegen write

Source References

ConceptLocation
Saga base classsrc/Wolverine/Saga.cs:8
WolverineOptionssrc/Wolverine/WolverineOptions.cs:97
MessageBussrc/Wolverine/Runtime/MessageBus.cs
NodeAgentControllersrc/Wolverine/Runtime/Agents/NodeAgentController.cs
HTTP endpointssrc/Http/Wolverine.Http/
gRPCsrc/Wolverine.Grpc/
Marten integrationsrc/Persistence/Wolverine.Marten/
RabbitMQ transportsrc/Transports/RabbitMQ/Wolverine.RabbitMQ/
Kafka transportsrc/Transports/Kafka/Wolverine.Kafka/
Persistence (RDBMS)src/Persistence/Wolverine.RDBMS/
Serializationsrc/Extensions/
MediatR/MassTransit shimssrc/Wolverine/Shims/

Architecture Notes

  • Runtime code generation via JasperFx — handlers compiled to delegates at startup
  • Partial classes organize WolverineOptions: Serialization, Encryption, Endpoints, Policies, Batching, RateLimiting, Faults, Forwarders, MessageTransformations
  • ImHashMap for hot-path dictionary lookups — lock-free, allocation-free
  • Member naming: public/internal = PascalCase, private/protected = camelCase with _ prefix
  • Test conventions: host.MessageBus() (scoped), Servers.PostgresConnectionString (never hardcode)
  • CI builds wolverine.slnx (full solution) — slim build insufficient for cross-project validation

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.