From arbiter-skills
Sends templated email and SMS via Arbiter.Communication with pluggable delivery providers (Azure, Graph, SendGrid, Twilio, SMTP).
How this skill is triggered — by the user, by Claude, or both
Slash command
/arbiter-skills:arbiter-communicationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Templated email + SMS abstraction with pluggable delivery providers. Templates resolve from embedded resources (or any custom `ITemplateResolver`), then are rendered with model substitution and handed off to the configured delivery service.
Templated email + SMS abstraction with pluggable delivery providers. Templates resolve from embedded resources (or any custom ITemplateResolver), then are rendered with model substitution and handed off to the configured delivery service.
dotnet add package Arbiter.Communication # core (templates + abstractions)
Then one or more providers:
dotnet add package Arbiter.Communication.Azure # Azure Communication Services (email + SMS)
dotnet add package Arbiter.Communication.Graph # Microsoft Graph (email)
dotnet add package Arbiter.Communication.Twilio # SendGrid (email) + Twilio (SMS)
SMTP delivery is built into the core package.
using Arbiter.Communication;
using Arbiter.Communication.Azure;
using Arbiter.Communication.Twilio;
using Arbiter.Communication.Graph;
services.AddTemplateServices();
services.AddTemplateResourceResolver<MyAssemblyMarker>(
resourceNameFormat: "MyApp.Templates.{0}.html");
services.AddEmailServices(options =>
{
options.FromAddress = "[email protected]";
options.FromName = "Example App";
});
// Pick ONE delivery provider:
services.AddSmtpEmailDeliver(); // built-in SMTP
services.AddAzureEmailDeliver("AzureCommunicationConnectionString"); // Azure Communication
services.AddGraphEmailDeliver(); // Microsoft Graph
services.AddSendGridEmailDeliver("SendGrid:ApiKey"); // SendGrid
services.AddSmsServices(options =>
{
options.FromNumber = "+15555550100";
});
// Pick ONE provider:
services.AddAzureSmsDeliver("AzureCommunicationConnectionString");
services.AddTwilioSmsDeliver(accountSID: "AC…", authenticationToken: "…");
public class WelcomeEmailSender
{
private readonly IEmailTemplateService _email;
public WelcomeEmailSender(IEmailTemplateService email) => _email = email;
public Task SendAsync(User user, CancellationToken ct) =>
_email.SendAsync(
templateName: "Welcome",
model: new { user.FirstName, user.Email },
to: user.Email,
cancellationToken: ct);
}
public class OtpSender
{
private readonly ISmsTemplateService _sms;
public OtpSender(ISmsTemplateService sms) => _sms = sms;
public Task SendAsync(string phone, string code, CancellationToken ct) =>
_sms.SendAsync(templateName: "Otp", model: new { Code = code }, to: phone, cancellationToken: ct);
}
Templates are arbitrary strings (HTML for email, text for SMS) located by an ITemplateResolver. The built-in EmbeddedResourceTemplateResolver is wired via:
services.AddTemplateResourceResolver<MyAssemblyMarker>("MyApp.Templates.{0}.html");
// {0} is the template name; mark the file as <EmbeddedResource> in the .csproj
Multiple resolvers can be registered; lower priority wins. Implement ITemplateResolver for filesystem, DB, or remote sources.
AddXxxDeliver overloads accept an Action<EmailConfiguration> / Action<SmsConfiguration> to override the from address/number per provider.services.AddEmailDelivery<NullEmailDeliveryService>() (or your own fake).npx claudepluginhub loresoft/arbiter --plugin arbiter-skillsDelivers email via AWS SES in .NET APIs with HTML templates, placeholder replacement, and Result pattern error handling.
Integrates email services into backends using SMTP, third-party providers like SendGrid and AWS SES, and templates. Useful for transactional emails, password resets, and notification workflows.
Builds responsive email templates using MJML. Compiles to cross-client HTML for Outlook, Gmail, and Apple Mail. Includes template renderer, layout patterns, and variable substitution for .NET projects.