Categories
Agent Tooling (71)
- .agents/skills/agent-browser/references/authentication.md
- .agents/skills/agent-browser/references/commands.md
- .agents/skills/agent-browser/references/profiling.md
- .agents/skills/agent-browser/references/proxy-support.md
- .agents/skills/agent-browser/references/session-management.md
- .agents/skills/agent-browser/references/snapshot-refs.md
- .agents/skills/agent-browser/references/video-recording.md
- .agents/skills/agent-browser/SKILL.md
- .agents/skills/aspire-deployment/references/aws.md
- .agents/skills/aspire-deployment/references/azure.md
- .agents/skills/aspire-deployment/references/cicd.md
- .agents/skills/aspire-deployment/references/docker-compose.md
- .agents/skills/aspire-deployment/references/javascript.md
- .agents/skills/aspire-deployment/references/kubernetes.md
- .agents/skills/aspire-deployment/references/preflight.md
- .agents/skills/aspire-deployment/SKILL.md
- .agents/skills/aspire-monitoring/references/diagnostics-bridge.md
- .agents/skills/aspire-monitoring/references/monitoring.md
- .agents/skills/aspire-monitoring/references/playwright-handoff.md
- .agents/skills/aspire-monitoring/SKILL.md
- .agents/skills/aspire-orchestration/references/agent-workflows.md
- .agents/skills/aspire-orchestration/references/app-commands.md
- .agents/skills/aspire-orchestration/references/detection.md
- .agents/skills/aspire-orchestration/references/resource-management.md
- .agents/skills/aspire-orchestration/references/safety-guardrails.md
- .agents/skills/aspire-orchestration/SKILL.md
- .agents/skills/aspire/references/aspire-13-3-breaking-changes.md
- .agents/skills/aspire/SKILL.md
- .agents/skills/aspireify/references/apphost-wiring.md
- .agents/skills/aspireify/references/csharp-authoring.md
- .agents/skills/aspireify/references/docker-compose.md
- .agents/skills/aspireify/references/full-solution-apphosts.md
- .agents/skills/aspireify/references/javascript-apps.md
- .agents/skills/aspireify/references/opentelemetry.md
- .agents/skills/aspireify/references/scan-and-propose.md
- .agents/skills/aspireify/references/service-defaults.md
- .agents/skills/aspireify/references/typescript-authoring.md
- .agents/skills/aspireify/references/validation.md
- .agents/skills/aspireify/SKILL.md
- .agents/skills/caveman-compress/README.md
- .agents/skills/caveman-compress/SECURITY.md
- .agents/skills/caveman-compress/SKILL.md
- .agents/skills/caveman-help/README.md
- .agents/skills/caveman-help/SKILL.md
- .agents/skills/caveman-stats/README.md
- .agents/skills/caveman-stats/SKILL.md
- .agents/skills/caveman/README.md
- .agents/skills/caveman/SKILL.md
- .agents/skills/csharp-developer/SKILL.md
- .agents/skills/dotnet-inspect/SKILL.md
- .agents/skills/efcore-data-layer/SKILL.md
- .agents/skills/git/SKILL.md
- .agents/skills/microsoft-code-reference/SKILL.md
- .agents/skills/microsoft-docs/SKILL.md
- .agents/skills/microsoft-skill-creator/references/skill-templates.md
- .agents/skills/microsoft-skill-creator/SKILL.md
- .agents/skills/skill-creator/references/output-patterns.md
- .agents/skills/skill-creator/references/workflows.md
- .agents/skills/skill-creator/SKILL.md
- .agents/skills/tunit-testing/references/aspire-integration.md
- .agents/skills/tunit-testing/references/aspnetcore-integration.md
- .agents/skills/tunit-testing/references/assertions.md
- .agents/skills/tunit-testing/references/data-driven.md
- .agents/skills/tunit-testing/references/infrastructure-and-troubleshooting.md
- .agents/skills/tunit-testing/references/lifecycle-hooks.md
- .agents/skills/tunit-testing/SKILL.md
- AGENTS.md
- backend/AGENTS.md
- backend/tests/AGENTS.md
- Front/AGENT.md
- opencode.jsonc
ServiceDefaults Wiring
After resources are declared in the AppHost, every service project should opt into Aspire's defaults: OpenTelemetry, health checks, **service discovery, and HTTP resilience**. This is what Aspire.ServiceDefaults does.
Add the Project
aspire init may already have generated a MyApp.ServiceDefaults project. If not, create one:
dotnet new aspire-servicedefaults -n MyApp.ServiceDefaultsThen reference it from each service:
dotnet add ./src/Api/Api.csproj reference ./MyApp.ServiceDefaults/MyApp.ServiceDefaults.csprojWire It in Program.cs
Each service's Program.cs should call AddServiceDefaults() and MapDefaultEndpoints():
var builder = WebApplication.CreateBuilder(args);
builder.AddServiceDefaults(); // OTel, health checks, service discovery, HTTP resilience
// ... your services ...
var app = builder.Build();
app.MapDefaultEndpoints(); // /health and /alive endpoints
// ... your endpoints ...
app.Run();What AddServiceDefaults() Wires
| Concern | What |
|---|---|
| OpenTelemetry tracing | ASP.NET Core, HttpClient, gRPC — exported via OTLP to dashboard |
| OpenTelemetry metrics | Runtime, ASP.NET Core, HttpClient — exported via OTLP |
| OpenTelemetry logging | Structured logs exported via OTLP |
| Health checks | IHealthChecksBuilder configured; /health and /alive endpoints |
| Service discovery | Microsoft.Extensions.ServiceDiscovery registered for HttpClient |
| HTTP resilience | Standard resilience handler on outbound HttpClient |
Wire Health Checks for WaitFor
AppHost's .WaitFor(resource) requires a health endpoint. MapDefaultEndpoints() provides /alive (liveness) and /health (readiness).
In the AppHost:
var api = builder.AddProject<Projects.Api>("api")
.WithHttpHealthCheck("/health");
builder.AddProject<Projects.Worker>("worker")
.WithReference(api)
.WaitFor(api); // Blocks worker start until api /health is 200 OKFrontend Projects (Node / Next.js / Vite)
Service discovery for JS frontends comes via env vars injected by WithReference(api):
services__api__http__0=http://localhost:NNNN
services__api__https__0=https://localhost:NNNNIn the frontend, read these (or use endpoint.url in TS AppHost expressions to pre-resolve at AppHost build time).
For browser-side telemetry, add WithBrowserLogs() on the frontend resource — it captures console logs, network requests, and screenshots into the dashboard without any client-side wiring.
Custom OTel Configuration
AddServiceDefaults() is a starting point. Extend it in your own ServiceDefaults project:
public static IHostApplicationBuilder AddServiceDefaults(this IHostApplicationBuilder builder)
{
builder.ConfigureOpenTelemetry();
builder.AddDefaultHealthChecks();
builder.Services.AddServiceDiscovery();
builder.Services.ConfigureHttpClientDefaults(http =>
{
http.AddStandardResilienceHandler();
http.AddServiceDiscovery();
});
return builder;
}Checklist
- [ ]
Aspire.ServiceDefaultsproject exists - [ ] Each service
.csprojhas<ProjectReference>to it - [ ] Each service
Program.cscallsbuilder.AddServiceDefaults() - [ ] Each service
Program.cscallsapp.MapDefaultEndpoints() - [ ] AppHost uses
.WithHttpHealthCheck("/health")for resources that consumersWaitFor - [ ] Frontend resources use
.WithBrowserLogs()if browser telemetry is desired