github-azure-agentic-journeys
AGENTS.md37 starsChanged 4 months agoMITView on GitHub
This repository contains agentic journeys that build and deploy applications to Azure using GitHub Copilot agents, skills, and Azure Developer CLI (azd). Journeys are self-contained — learners can start with any of them. The root README.md → Agentic journeys table lists them all with cost estimates. Plugin (canonical — use everywhere): Do not use alternate marketplace names. Install the Azure Skills plugin for access to Azure-specific MCP and skills tools (Bicep schemas, deployment planning, architecture diagrams, log analysis): Once inside…
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,542 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository8 other files it gives its agents.
- container-apps-deploymentSkill
- data-access-abstractionSkill
- grafana-azureSkill
- journey-runnerSkill
- journey-templateSkill
- journey-test-harnessSkill
- n8n-azureSkill
- superset-azureSkill
The file
We split this AGENTS.md into the rules it gives an agent
7 rules. About 0 are common, 2 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
Do not use alternate marketplace names.
- Very specific: line 73
OSS deployments: Use @oss-to-azure-deployer to guide the entire journey
- Distinctive: line 74
Full-stack journeys (e.g., AIMarket): Follow the journey's PLAN.md and use skills as needed
- Very specific: line 185
Use newGuid() only as parameter defaults (Bicep limitation): param encryptionKey string = newGuid()
- Very specific: line 194
Startup probe: Use a 5-minute window. With the AVM Container App module, use failureThreshold: 10 and periodSeconds: 30 because AVM caps …
- Very specific: line 195
Probe path: Use the app's dedicated health endpoint when available, for n8n use /healthz instead of /.
- Very specific: line 208
Always use the FQDN from postgresServer.properties.fullyQualifiedDomainName.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Agents and Skills
This repository contains agentic journeys that build and deploy applications to Azure using GitHub Copilot agents, skills, and Azure Developer CLI (azd).
Journeys
Journeys are self-contained — learners can start with any of them. The root README.md → Agentic journeys table lists them all with cost estimates.
Plugin (canonical — use everywhere):
/plugin marketplace add microsoft/azure-skills
/plugin install azure@azure-skillsDo not use alternate marketplace names.
Prerequisites
Install the Azure Skills plugin for access to Azure-specific MCP and skills tools (Bicep schemas, deployment planning, architecture diagrams, log analysis):
copilotOnce inside the interactive session, add the marketplace (first time only):
> /plugin marketplace add microsoft/azure-skillsThen install the plugin:
> /plugin install azure@azure-skillsAgent & Skill System
This repo uses GitHub Copilot's agents and skills for organized AI assistance:
- Agents = WHO - Personas with specific jobs (~100 lines, workflow-focused)
- Skills = HOW - Reusable patterns and implementation details
Available Agents
| Agent | Purpose | When to Use |
@oss-to-azure-deployer | Deploy OSS apps to Azure | Full deployment journey: requirements -> IaC -> deploy -> verify |
Available Skills
Skills are loaded automatically based on context:
App-specific skills:
| Skill | Purpose |
n8n-azure | n8n workflow automation (Container Apps + PostgreSQL) |
grafana-azure | Grafana visualization (Container Apps + SQLite/PostgreSQL) |
superset-azure | Apache Superset BI platform (AKS + PostgreSQL) |
Development patterns:
| Skill | Purpose |
data-access-abstraction | Repository pattern for swappable data layers (SQLite, Cosmos DB, PostgreSQL) |
container-apps-deployment | Container Apps + ACR deployment patterns (ACR auth, zone redundancy, SPA deploy, azure.yaml) |
journey-runner | Run a journey end-to-end: extract prompts, build, deploy, verify |
journey-template | Create a new agentic journey from an app idea (full-stack or OSS deployment) |
journey-test-harness | Run all journeys as a test suite: build, deploy, screenshot, teardown, report |
Workflow
- OSS deployments: Use
@oss-to-azure-deployerto guide the entire journey - Full-stack journeys (e.g., AIMarket): Follow the journey's PLAN.md and use skills as needed
- Skills load automatically based on the app being deployed
- Azure MCP tools provide real-time schema lookups, deployment planning, and troubleshooting
- Troubleshooting: Reference app-specific troubleshooting.md files and use
azure_deploy_app_logs
Azure MCP Server Tools
The Azure MCP plugin provides these tools for use throughout the deployment lifecycle:
| Tool | Purpose | When to Use |
azure_bicep_schema | Get latest API versions + property definitions | When generating or updating Bicep resource definitions |
azure_deploy_iac_guidance | Bicep/Terraform best practices with azd | When choosing IaC approach or setting up project structure |
azure_deploy_plan | Generate deployment plans | Before azd up -- validates configuration and dependencies |
azure_deploy_architecture | Generate Mermaid architecture diagrams | When documenting or visualizing deployment architecture |
azure_deploy_app_logs | Fetch Log Analytics logs | Post-deployment troubleshooting (CrashLoopBackOff, connection errors) |
azure_deploy_pipeline | CI/CD pipeline guidance | When setting up GitHub Actions for automated deployments |
azure_terraform_best_practices | Terraform-specific Azure guidance | When using Terraform instead of Bicep |
Commands
These commands must work from PowerShell, Windows Terminal, Mac, and Linux. Don't use shell command substitution for stateful operations.
# Read the subscription ID, then pass the returned value to azd
az account show --query id -o tsv
azd env set AZURE_SUBSCRIPTION_ID <subscription-id>
azd config set auth.useAzCliAuth true
azd up
# Tear down all resources (prefer purge for AI soft-delete)
azd down --force --purge
# View deployment outputs
azd env get-value <OUTPUT_NAME>
# Read these two values, then pass them to Azure CLI
azd env get-value CONTAINER_APP_NAME
azd env get-value RESOURCE_GROUP_NAME
az containerapp logs show --name <container-app-name> --resource-group <resource-group-name> --followPre-deployment requirement (run once per subscription):
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.DBforPostgreSQL
az provider register --namespace Microsoft.OperationalInsights
az provider register --namespace Microsoft.ContainerService # AKS only
az provider register --namespace Microsoft.Web # Functions and Static Web AppsCross-platform verification helpers
The repository smoke checks are Node.js scripts and require Node.js LTS or later. Select the correct azd environment before running one:
node .github/scripts/verify-grafana.mjs
node .github/scripts/verify-n8n.mjs
node .github/scripts/verify-superset.mjs
node .github/scripts/verify-aimarket.mjs
node .github/scripts/verify-smart-todo.mjs
node .github/scripts/verify-weather-view.mjsConfigure the journey E2E repository variables and secrets interactively with node .github/scripts/setup-journey-tests.mjs. The script asks before creating or rotating a service-principal credential. Never print or commit secret values.
Architecture
- Infrastructure as Code: Bicep with modular structure per journey
- Deployment Tool: Azure Developer CLI (azd) configured via
azure.yaml - Hosting: Azure Static Web Apps (WeatherView), Azure Container Apps (n8n, Grafana, AIMarket), Azure Functions (SmartTodo), or AKS (Superset)
- Database: Azure Database for PostgreSQL Flexible Server, Cosmos DB, or SQLite (local dev)
- Post-provisioning: Hooks configure app-specific settings after deployment (e.g., WEBHOOK_URL)
Infrastructure Pattern
Each journey contains its own infrastructure. For OSS deployments, infrastructure is generated fresh by the azure-prepare plugin skill. For full-stack journeys, infrastructure lives alongside the application code:
journeys/<app>/
├── README.md
├── PLAN.md # Full-stack journeys only
├── azure.yaml
├── infra/
│ ├── main.bicep
│ ├── main.parameters.json
│ ├── abbreviations.json
│ ├── modules/
│ └── hooks/
└── src/ # Full-stack journeys onlyKey Conventions
Bicep Patterns
- Prefer AVM modules, but do not get stuck on them in CI journey runs. Start with Azure Verified Modules (
br/public:avm/...) for consistency and best-practice defaults. If an AVM module blocks the run because of parameter drift, unsupported passthrough, or schema mismatch, switch that resource to rawMicrosoft.*Bicep/ARM in the generated working directory and document why in the report. A passing, teardown-safe journey beats an elegant module that can't deploy. - Scope split -- if the journey creates its own resource group, keep
main.bicepat subscription scope and place resources in a resource-group-scoped module such asresources.bicep. Do not mix resource-group resources directly into a subscription-scope file. - AI resources -- use
br/public:avm/ptn/ai-ml/ai-foundryfor Microsoft Foundry (AIServices + Project + model deployments) when the module supports the needed parameters - Monitoring -- use
br/public:avm/ptn/azd/monitoringfor Log Analytics + Application Insights when the module supports the needed parameters - Container Apps -- start with
br/public:avm/res/app/container-appandbr/public:avm/res/app/managed-environment; fall back to rawMicrosoft.App/containerAppsorMicrosoft.App/managedEnvironmentsif AVM parameter drift blocks deployment - Container Registry -- use
br/public:avm/res/container-registry/registry - Search -- use
br/public:avm/res/search/search-service - Use
newGuid()only as parameter defaults (Bicep limitation):param encryptionKey string = newGuid() - Generate unique resource names with:
uniqueString(subscription().id, environmentName, location) - Store abbreviations in
infra/abbreviations.jsonfor consistent naming - Output names use SCREAMING_SNAKE_CASE to match azd conventions
Health Probes (Critical for Container Apps)
Slow-starting apps require extended startup time:
- Liveness probe:
initialDelaySeconds: 60 - Startup probe: Use a 5-minute window. With the AVM Container App module, use
failureThreshold: 10andperiodSeconds: 30because AVM capsfailureThresholdat 10. - Probe path: Use the app's dedicated health endpoint when available, for n8n use
/healthzinstead of/.
Without this, containers enter CrashLoopBackOff before initialization completes.
PostgreSQL Connectivity
Azure PostgreSQL requires specific environment variables:
DB_POSTGRESDB_SSL_ENABLED=true
DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false
DB_POSTGRESDB_CONNECTION_TIMEOUT=60000Always use the FQDN from postgresServer.properties.fullyQualifiedDomainName.
Adding New Journeys
OSS Deployment Journeys
To add a new OSS app deployment (e.g., Gitea, Plausible):
Step 1: Create app-specific skill in .github/skills/<app>-azure/:
<app>-azure/
├── SKILL.md # Overview, quick start, architecture, verification
├── config/
│ ├── environment-variables.md
│ └── health-probes.md
└── troubleshooting.mdSKILL.md must include YAML frontmatter:
---
name: <app>-azure
description: Deploy <App> to Azure. Use when deploying <App> for <purpose>.
---Step 2: Create journey directory in journeys/<app>/ with a README.md.
Step 3: Document app quirks -- required env vars, health probe timing, database requirements, post-deployment configuration.
Full-Stack Journeys
To add a new full-stack journey (e.g., AIMarket):
Step 1: Create journey directory in journeys/<app>/ with README.md and PLAN.md.
Step 2: Create any needed skills in .github/skills/ for reusable patterns.
Step 3: Infrastructure goes in journeys/<app>/infra/ with Bicep modules.
Project Structure
journeys/
├── grafana/ # Grafana OSS deployment journey
│ └── README.md
├── n8n/ # n8n OSS deployment journey
│ └── README.md
├── superset/ # Apache Superset OSS deployment journey
│ └── README.md
├── aimarket/ # Full-stack journey (API + frontend + AI)
│ ├── README.md
│ └── PLAN.md
├── smart-todo/ # Full-stack journey (iOS + Functions + AI)
│ ├── README.md
│ └── PLAN.md
└── weather-view/ # Static web journey (vanilla JS + Static Web Apps)
├── README.md
└── PLAN.md
.github/
├── agents/
│ └── oss-to-azure-deployer.agent.md
└── skills/
├── n8n-azure/ # n8n-specific config
│ ├── SKILL.md
│ ├── config/
│ └── troubleshooting.md
├── grafana-azure/ # Grafana-specific config
│ ├── SKILL.md
│ ├── config/
│ └── troubleshooting.md
├── superset-azure/ # Superset-specific config
│ ├── SKILL.md
│ ├── config/
│ └── troubleshooting.md
└── data-access-abstraction/ # Repository pattern for swappable data layers
└── SKILL.md
└── container-apps-deployment/ # ACR auth, zone redundancy, SPA deploy patterns
└── SKILL.md
└── journey-template/ # Template for creating new agentic journeys
└── SKILL.md
└── journey-runner/ # Run journeys end-to-end: prompts → build → deploy → verify
└── SKILL.md
└── journey-test-harness/ # Test suite: run all journeys, deploy, screenshot, teardown
└── SKILL.md
AGENTS.md # This file
README.mdDoes it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

