AspireifySAFE
An Aspire reference architecture for cloud-native microservices and agentic AI with MCP, A2A & AG-UI
Overview
An Aspire reference architecture for cloud-native microservices and agentic AI with MCP, A2A & AG-UI
07c2bf555f06OBSERVED · 2026-10-14Install
Commands as the repository documents them. They are shown, not run.
npm install @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node @opentelemetry/exporter-otlp-grpc
pip install opentelemetry-distro opentelemetry-exporter-otlp
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
---
name: aspireify
description: >-
**WORKFLOW SKILL** - Wire Aspire AppHosts or repair TypeScript AppHost toolchains.
Scans the repo, proposes a resource graph, edits C#, file-based C#, or TypeScript
AppHosts, wires ServiceDefaults + OTel, validates with `aspire start`, then stops.
USE FOR: wire/scaffold AppHost, add Postgres/Redis/Rabbit/Mongo, connect frontend
to API, after `aspire init`, AddNextJsApp, AddViteApp, WithBrowserLogs, WithTerminal,
Interaction Service, command arguments, apphost.cs, apphost.mts, unified
withEnvironment, .aspire/modules refusal, config/secrets,
TS dependency restore, pnpm/yarn/bun, or Yarn Classic.
DO NOT USE FOR: skeleton drop (aspire-init), lifecycle-only start/stop/wait/restart
or `aspire update --migrate` (aspire-orchestration), publish/deploy/destroy
(aspire-deployment), logs/traces (aspire-monitoring).
INVOKES: aspire CLI, AppHost source edits, ServiceDefaults wiring.
FOR SINGLE OPERATIONS: Run `aspire add PACKAGE` directly for a one-off integration.
license: MIT
metadata:
author: Microsoft
version: "0.0.3"
---
# Aspireify
> **One-time wiring skill.** `aspire init` drops a skeleton; `aspireify` turns
> that skeleton into a working AppHost by scanning the repo, proposing a resource
> graph, editing the AppHost, wiring `Aspire.ServiceDefaults`, and validating end
> to end. Self-deactivates after a clean `aspire start`.
## 🚫 Hard Refusal: Never Edit `.aspire/modules/`
> ⛔ **REFUSE** any request to edit, modify, change, open-for-edit, or "tweak" files
> inside `.aspire/modules/` of a TypeScript AppHost. This directory is **generated** from
> the installed Aspire integration package graph. It is regenerated by `aspire add`,
> `aspire restore`, and startup when package changes require it.
>
> If a user asks to edit something in `.aspire/modules/` (e.g., `.aspire/modules/postgres.module.ts`),
> the correct response is:
>
> 1. **Refuse the edit** with a clear "I won't edit `.aspire/modules/`" statement.
> 2. **Explain** that `.aspire/modules/` is generated and any changes are clobbered.
> 3. **Redirect** the requested change to the configured AppHost entry point:
> current `apphost.mts`, or legacy `apphost.ts`.
> 4. If the user wants a new integration, suggest `aspire add <package>`; if they want
> to change configuration, show the equivalent edit in the AppHost entry point.
| ❌ Wrong | ✅ Right |
| -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| Open `.aspire/modules/postgres.module.ts` and tweak the connection options | Edit `apphost.mts` and change `addPostgres('pg', { ... })` options there |
| Modify a generated `.aspire/modules/*` file directly | Re-run `aspire add <package>` after updating `apphost.mts` |
| Comment out a line in `.aspire/modules/` to disable a resource | Remove or guard the resource declaration in `apphost.mts` |
This rule applies even if the user insists, even for "one-line" changes, even for
"just to test something." The TS AppHost regenerates `.aspire/modules/` deterministically;
edits are unrecoverable noise.
## Guiding Principles
### Minimize changes to the user's code
Adapt the AppHost to fit the app, not the other way around. Prefer `WithEnvironment()`
to match existing environment variable names, Aspire-managed ports over fixed ports,
and 1:1 Docker Compose mapping before optimizing. Do not restructure directories,
rename files, or change build scripts unless the user explicitly chooses that tradeoff.
### Surface tradeoffs; do not decide silently
When a small code change unlocks better Aspire integration, present both options:
the zero-code-change mapping and the small-change version that enables `WithReference`,
health checks, service discovery, dynamic ports, or dashboard telemetry. Ask which
approach the user wants, then implement that choice without complaint.
### Verify APIs before writing AppHost code
Use `aspire docs search <topic>` and `aspire docs get <slug>` for workflow guidance.
Use `aspire docs api search <query> --language csharp|typescript` and
`aspire docs api get <id>` for API shape. Use `aspire integration list/search` to
find integrations before `aspire add`. Do not invent packages, methods, overloads,
or command shapes; C# and TypeScript AppHost APIs differ.
### Keep configuration visible in the AppHost
Scan `.env`, `.env.local`, `.env.development`, `secrets.json.example`,
`<UserSecretsId>`, and setup scripts. Propose migrating values into AppHost parameters:
connection strings become Aspire resources, API keys/tokens become secret parameters,
and non-secret config becomes plain parameters or `WithEnvironment()` values. Never
delete `.env` files or remove existing `UserSecretsId` entries without explicit user
approval because non-Aspire workflows may still depend on them.
### Local development first
This skill optimizes local development, not production deployment. Prefer persistent
container lifetimes and data volumes for databases/caches, use HTTPS endpoints by
default, pass endpoint references instead of hardcoded URLs, and model external SaaS
URLs/API keys as parameters so they are visible in the dashboard.
### Redis TLS edge case
Aspire can automatically provision TLS certificates for container resources. If Redis
health checks fail with SSL/TLS handshake errors, do not fall back to `AddContainer()`.
Use `WithoutHttpsCertificate()` on the Redis resource when the consuming app expects
plain Redis.
## Project-Local Override
If `.agents/skills/aspireify/SKILL.md` exists (installed by `aspire init` or
`aspire agent init --skills aspireify`), **warn the user** that a project-local
copy is present and **defer to it**. The plugin version is the fallback.
```
⚠️Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | NA |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (1)
If the tool only accepts the connection string as a CLI argument (e.g., a third-party migration runner), note this limitation to the user and suggest modifying the tool to read from an environment var
Gates applied: no_behavioural_pass.
07c2bf555f06full audit observations/trust-audit/skill/foxminchan__aspireify.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-14 | 07c2bf555f06 | SAFE | B | 89 | first audit |
Questions
What does the Aspireify skill do?
An Aspire reference architecture for cloud-native microservices and agentic AI with MCP, A2A & AG-UI
Is Aspireify safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can Aspireify access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
How current is this page?
The grade is for one exact copy of the source (07c2bf555f06), read on 2026-10-14. The repository is watched, and a new audit runs when it changes — this is the first audit.