git-ape / templates
Copilot instructions274 starsChanged 28 days agoMITView on GitHub
⚠️ CRITICAL: Always use the azure-naming-research skill to lookup CAF abbreviations and Azure naming constraints before suggesting or validating resource names. Use consistent CAF-compliant naming patterns across all Azure resources: Standard Format: Resource Groups: - CAF abbreviation: rg - Format: rg-{project}-{environment}-{region} - Example: rg-webapp-prod-eastus - Constraints: 1-90 chars, alphanumeric + hyphens + underscores + periods Function Apps: - CAF abbreviation: func - Format: func-{project}-{environment}-{region} - Example: func-api-dev-westus2 - Constraints: 2-60 chars, alphanumeric + hyphens, globally unique Storage Accounts: - CAF…
Where files are headingNew Copilot instructions files have more rules about branches and pull requests, and fewer about code style.
Of the Copilot instructions files we read, the 2,349 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 repository53 other files it gives its agents.
- website/docs/authoring/agents.mdAGENTS.md
- .github/copilot-instructions.mdCopilot instructions
- aws-api-gatewaySkill
- aws-bedrockSkill
- aws-cloudformationSkill
- aws-cloudwatchSkill
- aws-cognitoSkill
- aws-cost-estimatorSkill
- aws-dynamodbSkill
- aws-ec2Skill
- aws-ecsSkill
- aws-eksSkill
- aws-eventbridgeSkill
- aws-iamSkill
- aws-lambdaSkill
- aws-naming-researchSkill
- aws-rdsSkill
- aws-s3Skill
- aws-secrets-managerSkill
- aws-security-analyzerSkill
- aws-snsSkill
- aws-sqsSkill
- aws-step-functionsSkill
- csd-assessment-reportSkill
- deployment-blueprintsSkill
- fulfillment-and-meteringSkill
- isv-landing-zone-foundationSkill
- marketplace-offer-typesSkill
- marketplace-onboardingSkill
- multi-tenant-saasSkill
- onboard-to-marketplaceSkill
- saas-accelerator-bootstrapSkill
- saas-assessment-reportSkill
- scale-and-sreSkill
- security-and-complianceSkill
- tenant-isolation-modelsSkill
- tenant-lifecycle-automationSkill
- azure-cost-estimatorSkill
- azure-deployment-preflightSkill
- azure-drift-detectorSkill
- azure-integration-testerSkill
- azure-naming-researchSkill
- azure-policy-advisorSkill
- azure-resource-availabilitySkill
- azure-resource-visualizerSkill
- azure-rest-api-referenceSkill
- azure-role-selectorSkill
- azure-security-analyzerSkill
- azure-stack-deploySkill
- azure-stack-destroySkill
- git-ape-onboardingSkill
- git-ape-skillsSkill
- prereq-checkSkill
The file
Show its rules and text
We split this copilot-instructions.md into the rules it gives an agent
35 rules. About 2 are common, 23 are distinctive, and 10 are very specific to this project.
≈2
Common · estimate
Many files like this have a rule of this kind.
≈23
Distinctive · estimate
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 7
Use consistent CAF-compliant naming patterns across all Azure resources:
- Distinctive: line 113
Start/end character requirements
- Very specific: line 116
Add random suffix if needed: {name}-${random}
- Distinctive: line 125
Prefer these regions for deployments unless specified otherwise:
- Distinctive: line 132
Always include these tags on all resources:
- Very specific: line 145
Use outputs section to return resource IDs and endpoints
- Distinctive: line 158
Template Validation: Always validate ARM templates before deployment
- Distinctive: line 162
Integration Testing: Run health checks on deployed resources
- Very specific: line 229
If the stack is already gone, the workflow records already-destroyed and succeeds cleanly.
- Distinctive: line 230
No RG-delete fallback path, no subscription-scope resource sweep — Stacks handle multi-scope destruction natively.
- Distinctive: line 241
When the Copilot Coding Agent processes a deployment request:
- Distinctive: line 291
Create two GitHub environments for protection rules:
- Distinctive: line 311
When a deployment fails, never weaken security controls to fix it.
- Common: line 312
Do NOT re-enable shared key access, disable firewalls, open NSGs, remove authentication, or downgrade TLS to work around errors
- Distinctive: line 313
Do NOT replace identity-based access with connection strings or shared keys
- Distinctive: line 314
Instead: verify RBAC roles are complete, check for Azure Policy conflicts, check resource dependencies and ordering, and ensure managed …
- Distinctive: line 315
If the secure path genuinely cannot work, stop and ask the user — do not silently regress
- Very specific: line 321
Use AAD-only authentication for SQL databases (azureADOnlyAuthentication: true)
- Very specific: line 322
Use Key Vault references for secrets in app settings (@Microsoft.KeyVault(...))
- Distinctive: line 346
Always assess and recommend policies for: identity, networking, storage, compute, monitoring, tagging.
- Very specific: line 350
Use /azure-policy-advisor skill to assess ARM templates against compliance frameworks
- Common: line 358
Cite evidence: Every "✅ Applied" finding must reference the exact ARM property path and value from the template.
- Distinctive: line 360
Honest framing: If a resource has a public IP, it IS internet-facing.
- Distinctive: line 361
Verify before presenting: Always re-read the ARM template and cross-check every security finding before showing it to the user.
- Distinctive: line 362
When uncertain, say so: Use "❓ Unknown" if a status cannot be verified.
- Distinctive: line 371
When blocked, the user must either:
- Distinctive: line 396
Create an Azure AD App Registration (or User-Assigned Managed Identity)
- Distinctive: line 397
Add a federated credential for the GitHub repo:
- Distinctive: line 442
Create the federated credential on the existing App Registration
- Very specific: line 443
Update the workflow to use azure/login@v2 with client-id instead of creds
- Very specific: line 444
Add permissions.id-token: write to the workflow
- Very specific: line 445
Remove AZURE_CREDENTIALS secret from the repo
- Distinctive: line 446
Verify with a test deployment on a dev branch
- Very specific: line 450
When Git-Ape runs inside the Copilot Coding Agent:
- Distinctive: line 453
All deployment plans should be committed as files in the PR for review
≈ “Common” is an estimate: at least 1 in 5 of the 3,779 Copilot instructions 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
Azure Deployment Standards
Naming Conventions
⚠️ CRITICAL: Always use the azure-naming-research skill to lookup CAF abbreviations and Azure naming constraints before suggesting or validating resource names.
Use consistent CAF-compliant naming patterns across all Azure resources:
Standard Format:
{resource-type-abbreviation}-{project}-{environment}-{region}[-{instance}]Resource Groups:
- CAF abbreviation:
rg - Format:
rg-{project}-{environment}-{region} - Example:
rg-webapp-prod-eastus - Constraints: 1-90 chars, alphanumeric + hyphens + underscores + periods
Function Apps:
- CAF abbreviation:
func - Format:
func-{project}-{environment}-{region} - Example:
func-api-dev-westus2 - Constraints: 2-60 chars, alphanumeric + hyphens, globally unique
Storage Accounts:
- CAF abbreviation:
st - Format:
st{project}{env}{random}(lowercase, no hyphens, max 24 chars) - Example:
stwebappdev8k3m - Constraints: 3-24 chars, lowercase alphanumeric only, globally unique
- Special: Use
uniqueString(resourceGroup().id)for uniqueness
App Service Plans:
- CAF abbreviation:
asp - Format:
asp-{project}-{environment}-{region} - Example:
asp-webapp-prod-eastus
Web Apps:
- CAF abbreviation:
app - Format:
app-{project}-{environment}-{region} - Example:
app-webapp-prod-eastus - Constraints: 2-60 chars, alphanumeric + hyphens, globally unique
SQL Servers:
- CAF abbreviation:
sql - Format:
sql-{project}-{environment}-{region} - Example:
sql-webapp-prod-eastus - Constraints: 1-63 chars, lowercase alphanumeric + hyphens, globally unique
SQL Databases:
- CAF abbreviation:
sqldb - Format:
sqldb-{project}-{environment} - Example:
sqldb-webapp-prod
Cosmos DB:
- CAF abbreviation:
cosmos - Format:
cosmos-{project}-{environment}-{region} - Example:
cosmos-webapp-prod-eastus - Constraints: 3-44 chars, lowercase alphanumeric + hyphens, globally unique
Application Insights:
- CAF abbreviation:
appi - Format:
appi-{project}-{environment}-{region} - Example:
appi-webapp-prod-eastus
Key Vaults:
- CAF abbreviation:
kv - Format:
kv-{project}-{env}-{region} - Example:
kv-webapp-prod-eus(shortened region for length) - Constraints: 3-24 chars, alphanumeric + hyphens, globally unique
Log Analytics Workspaces:
- CAF abbreviation:
log - Format:
log-{project}-{environment}-{region} - Example:
log-webapp-prod-eastus - Constraints: 4-63 chars, alphanumeric + hyphens, must start/end with alphanumeric
Container Apps Environments:
- CAF abbreviation:
cae - Format:
cae-{project}-{environment}-{region} - Example:
cae-api-prod-eastus - Constraints: 1-60 chars, alphanumeric + hyphens
- Note: Requires a Log Analytics workspace for app logs
Container Apps:
- CAF abbreviation:
ca - Format:
ca-{project}-{environment}-{region} - Example:
ca-api-prod-eastus - Constraints: 2-32 chars, lowercase alphanumeric + hyphens, must start with letter
Naming Workflow:
- Before naming ANY resource:
# Use the azure-naming-research skill /azure-naming-research {resource-type} # Example: /azure-naming-research "Azure Functions" # Returns: CAF abbreviation, length constraints, valid characters, scope - Construct name using pattern:
{caf-abbrev}-{project}-{env}-{region} - Validate against constraints:
- Length (min-max)
- Character set (alphanumeric, hyphens, etc.)
- Uniqueness scope (global, resource group, subscription)
- Start/end character requirements
- For globally unique resources (Storage, Functions, SQL, Cosmos, Key Vault):
- Add random suffix if needed:
{name}-${random} - Or use ARM's
uniqueString()function in templates
- Add random suffix if needed:
Reference:
- CAF Abbreviations: https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations
- Naming Rules: https://learn.microsoft.com/azure/azure-resource-manager/management/resource-name-rules
Default Regions
Prefer these regions for deployments unless specified otherwise:
- Primary: East US
- Secondary: West US 2
- Europe: West Europe
Environment Tags
Always include these tags on all resources:
{
"Environment": "dev|staging|prod",
"Project": "project-name",
"ManagedBy": "git-ape-agent",
"CreatedDate": "YYYY-MM-DD"
}ARM Template Standards
- Include
parameterssection for configurable values - Use
outputssection to return resource IDs and endpoints - Apply Azure best practices via
bestpracticesservice validation - Include resource health monitoring configurations
- Always use
/azure-rest-api-referenceto look up resource properties and API versions before writing or modifying ARM template resources — never rely on memorized property names or schemas - Subscription-level templates (
subscriptionDeploymentTemplate.json) must use nested deployments with"expressionEvaluationOptions": { "scope": "inner" }— without this,reference()andresourceId()resolve at subscription scope, causingResourceNotFounderrors at deploy time - All
reference()calls inside nested templates must include explicit API versions (e.g.,reference(resourceId(...), '2024-03-01')) - Pass all parent-scope values (parameters, variables) as explicit parameters to nested templates — never reference parent variables directly from inner-scope templates
Deployment Workflow
Interactive Mode (VS Code / local CLI)
- Requirements Gathering: Collect all necessary parameters before generating templates
- Template Validation: Always validate ARM templates before deployment
- User Confirmation: Echo deployment intent and wait for explicit approval
- Deployment Execution: Invoke the
azure-stack-deployskill, which deploys as a subscription-scoped Azure Deployment Stack (az stack sub create --action-on-unmanage deleteAll). This is the same primitive used by the CI workflows so local and pipeline deployments produce identical state. The skill captures the stack ID, managed resources, soft-deletable resources, and resource groups intostate.json(schemaVersion 1.0). It falls back toaz deployment sub createonly if Deployment Stacks are unavailable in the target subscription/region. Both bash (scripts/deploy-stack.sh) and PowerShell (scripts/deploy-stack.ps1) implementations are provided. - State Persistence: The deploy skill writes
state.jsonand updatesmetadata.jsonwithdeployMethod(stackorsubscription) andresourceGroups[]. Schema reference: website/docs/deployment/state.md. - Integration Testing: Run health checks on deployed resources
- Destroy: Invoke the
azure-stack-destroyskill (or@git-ape destroy deployment {deployment-id}). The skill mirrors the CI workflow exactly:az stack sub delete --action-on-unmanage deleteAll --bypass-stack-out-of-sync-error true(single command, idempotent across resource groups and subscription scope), purges any soft-deletable resources that are not purge-protected (Key Vault, Cognitive Services, etc.), then cleans the subscription deployment history entry to stay under the 800/scope limit. Both bash (scripts/destroy-stack.sh) and PowerShell (scripts/destroy-stack.ps1) implementations are provided.
Pipeline Mode (GitHub Actions)
Git-Ape provides three GitHub Actions workflows under .github/workflows/:
git-ape-plan.yml — Validate & Preview
Triggers: PR opened or updated with changes to .azure/deployments/**/template.json
What it does:
- Detects which deployment directories changed in the PR
- Logs into Azure via OIDC
- Validates each ARM template (
az stack sub validate) - Runs what-if analysis (
az deployment sub what-if) - Reads the architecture diagram from the deployment directory
- Posts a detailed plan as a PR comment (validation result + what-if + architecture)
- Updates the comment on subsequent pushes (idempotent via HTML marker)
PR comment includes:
- Validation status (pass/fail with errors)
- Architecture diagram (from
architecture.md) - What-if analysis (resources to create/modify/delete)
- Next steps (approve + merge to deploy)
git-ape-deploy.yml — Execute Deployment
Triggers:
- Push to
mainwith deployment file changes (PR merge)
What it does:
- Detects deployment directories to execute
- Logs into Azure via OIDC
- Validates the template one more time (
az stack sub validate) - Deploys as an Azure Deployment Stack (
az stack sub create --action-on-unmanage deleteAll; falls back toaz deployment sub createif stacks are unavailable) - Captures the stack ID, managed resources, soft-deletable resources, and resource groups into
state.json - Runs integration tests (lists deployed resources, tests HTTP endpoints)
- Commits
state.json(extended schema, includingstackIdandmanagedResources[]) andmetadata.json(deployMethod,resourceGroups[]) back to the repo - Posts deployment result as a PR comment
Why Deployment Stacks:
- The stack is the single unit of lifecycle — create, update, and destroy operate on it, not on the underlying RGs.
deleteAllon unmanage guarantees destruction cleans up every managed resource across every scope (subscription, multiple RGs, role/policy assignments at sub scope) in one call. No orphans, idempotent re-runs.- See Azure/git-ape#30 for the rationale.
Requires: GitHub environment azure-deploy (for environment protection rules)
Safety:
- Deployment only runs after merge to
main, which requires PR approval via branch protection - Deployments run sequentially (
max-parallel: 1) to prevent conflicts - In-progress deployments are never cancelled (
cancel-in-progress: false)
git-ape-destroy.yml — Tear Down Resources
Triggers:
- Push to
mainwith changes tometadata.jsonwhere status isdestroy-requested(PR merge) - Manual workflow dispatch with deployment ID + "destroy" confirmation (emergency fallback)
What it does:
- Detects deployments where
metadata.jsonstatus changed todestroy-requested - Reads
state.jsonto find the deployment stack name (deploymentId) andstackId - Calls
az stack sub showto inventory the stack's managed resources - Calls
az stack sub delete --action-on-unmanage deleteAll— removes every resource the stack manages, across all scopes, in one synchronous call - Updates
state.jsonandmetadata.jsonwithdestroyedstatus and commits to repo
Idempotency:
- If the stack is already gone, the workflow records
already-destroyedand succeeds cleanly. - No RG-delete fallback path, no subscription-scope resource sweep — Stacks handle multi-scope destruction natively.
Destroy flow:
- Agent or user creates a PR that sets
metadata.jsonstatus todestroy-requested - PR is reviewed and approved (human gate for destructive action)
- On merge to
main, the workflow detects the status change and executes deletion
Requires: GitHub environment azure-destroy (for environment protection rules)
Copilot Coding Agent Flow
When the Copilot Coding Agent processes a deployment request:
Issue: "Deploy a Container App in Southeast Asia, project myapp"
│
▼
┌───────────────────────────────┐
│ Coding Agent (on branch) │
│ 1. Parse requirements │
│ 2. Generate ARM template │
│ 3. Generate architecture.md │
│ 4. Commit to branch │
│ 5. Open PR │
└───────────────┬───────────────┘
│ PR opened
▼
┌───────────────────────────────┐
│ git-ape-plan.yml │
│ 1. Validate template │
│ 2. Run what-if │
│ 3. Post plan as PR comment │
└───────────────┬───────────────┘
│ User reviews plan
▼
┌───────────────────────────────┐
│ User approves & merges PR │
│ → deploy on merge to main │
└───────────────┬───────────────┘
│
▼
┌───────────────────────────────┐
│ git-ape-deploy.yml │
│ 1. OIDC login │
│ 2. Deploy ARM template │
│ 3. Integration tests │
│ 4. Commit state.json │
│ 5. Post result as comment │
└───────────────┬───────────────┘
│
▼
┌───────────────────────────────┐
│ Teardown (when needed) │
│ PR: set metadata.json │
│ status → destroy-requested │
│ Merge → git-ape-destroy │
└───────────────────────────────┘GitHub Environment Setup
Create two GitHub environments for protection rules:
azure-deploy:
- Required reviewers (optional — for prod deployments)
- Deployment branches:
mainonly (for merge trigger)
azure-destroy:
- Required reviewers (recommended — destructive action)
- Deployment branches:
mainonly (triggered on PR merge)
Security Baseline
- Enable HTTPS-only for all web-facing resources
- Always use managed identities — never use connection strings, storage keys, or shared access keys
- For Function Apps, use
AzureWebJobsStorage__accountName(identity-based) instead ofAzureWebJobsStorage(key-based) - Set
allowSharedKeyAccess: falseon storage accounts when all consumers use managed identity - Include RBAC role assignments in ARM templates when resources access each other
Deployment Error Recovery Rule
When a deployment fails, never weaken security controls to fix it. Specifically:
- Do NOT re-enable shared key access, disable firewalls, open NSGs, remove authentication, or downgrade TLS to work around errors
- Do NOT replace identity-based access with connection strings or shared keys
- Instead: verify RBAC roles are complete, check for Azure Policy conflicts, check resource dependencies and ordering, and ensure managed identities exist before dependent resources try to use them
- If the secure path genuinely cannot work, stop and ask the user — do not silently regress
Security Gate Re-Run Rule
Any modification to a template after the initial security analysis MUST trigger a full security gate re-run before deployment. A template that passed the gate at version N is not pre-approved at version N+1.
- Use AAD-only authentication for SQL databases (
azureADOnlyAuthentication: true) - Use Key Vault references for secrets in app settings (
@Microsoft.KeyVault(...)) - Enable diagnostic logging and monitoring
- Apply least-privilege RBAC roles (use
/azure-role-selectorskill) - Disable FTP on all App Services and Function Apps (
ftpsState: Disabled) - Set minimum TLS version to 1.2 on all resources
Security Analysis Integrity
All security reports and assessments produced by Git-Ape agents and skills MUST be factually accurate and verifiable against the actual ARM template or Azure resource configuration.
Compliance & Azure Policy
Compliance Frameworks
- Primary: General Azure best practices
- Optionally adopt: CIS Azure Foundations v3.0, NIST SP 800-53 Rev 5, or other regulatory initiatives
Policy Enforcement Mode
- Default: Audit (use
Audit/AuditIfNotExistseffects for initial rollout) - Production hardening: Deny (use
Denyeffects for Critical-severity policies once audit baselines are clean)
Policy Categories
Always assess and recommend policies for: identity, networking, storage, compute, monitoring, tagging.
Policy Advisor Integration
- Use
/azure-policy-advisorskill to assess ARM templates against compliance frameworks - Query Microsoft Learn for current built-in policy definitions — do not hardcode policy IDs
- Output
policy-assessment.mdandpolicy-recommendations.jsonto deployment directory - Policy gate is advisory (not blocking) — surfaces findings without halting deployment
- During onboarding, ask the user about compliance framework and enforcement mode preferences and update this section accordingly
Rules
- Cite evidence: Every "✅ Applied" finding must reference the exact ARM property path and value from the template. No exceptions.
- Platform defaults ≠ explicit config: Azure automatic controls (e.g., SSE at rest on managed disks) must be labeled "🔄 Platform Default", not "✅ Applied."
- Honest framing: If a resource has a public IP, it IS internet-facing. If a port is open with IP restriction, the port IS open. Never soften or misrepresent exposure.
- Verify before presenting: Always re-read the ARM template and cross-check every security finding before showing it to the user. Remove or correct anything that doesn't match.
- When uncertain, say so: Use "❓ Unknown" if a status cannot be verified. Never fabricate findings.
Security Gate (Blocking)
Security analysis is a blocking deployment gate. Deployment CANNOT proceed until all Critical and High severity checks pass.
🟢 SECURITY GATE: PASSED— All Critical and High checks are ✅ Applied or 🔄 Platform Default. Deployment may proceed.🔴 SECURITY GATE: BLOCKED— One or more Critical or High checks are ⚠️ Not applied or ❌ Misconfigured. Deployment is blocked until resolved.
When blocked, the user must either:
- Accept proposed auto-fixes and re-run the full security analysis, or
- Provide alternative security settings and re-run the full security analysis, or
- Explicitly override by typing "I accept the security risk" (logged as
OVERRIDDENwith justification)
The gate loops until PASSED or overridden — no shortcutting allowed.
Azure Authentication
Git-Ape supports multiple execution contexts. Always use the most secure auth method available.
Auth Method Priority
| Priority | Method | Context | How |
| 1 | OIDC Federated Identity | GitHub Actions / Copilot Coding Agent | azure/login@v2 with id-token: write permission |
| 2 | Managed Identity | Azure-hosted runners / VMs | Automatic — no config needed |
| 3 | Azure CLI session | Local VS Code / interactive | az login |
| 4 | Service Principal + secret | Legacy CI only | Discouraged — migrate to OIDC |
OIDC Setup for GitHub Actions
OIDC eliminates stored secrets by exchanging a short-lived GitHub token for an Azure access token at deploy time.
One-time Azure setup:
- Create an Azure AD App Registration (or User-Assigned Managed Identity)
- Add a federated credential for the GitHub repo:
- Issuer:
https://token.actions.githubusercontent.com - Subject:
repo:{org}/{repo}:ref:refs/heads/main(orenvironment:productionfor env-scoped) - Audience:
api://AzureADTokenExchange
- Issuer:
- Grant the app the required RBAC roles on the target subscription (e.g., Contributor + User Access Administrator)
Required GitHub secrets (NOT actual credentials — just identifiers):
AZURE_CLIENT_ID— App Registration's Application (client) IDAZURE_TENANT_ID— Azure AD tenant ID
Required GitHub variable:
AZURE_SUBSCRIPTION_ID— Target subscription ID (a repository/environment variable, read viavars.)
Workflow snippet:
permissions:
id-token: write # Required for OIDC token request
contents: write # Required for committing deployment state
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- name: Deploy
run: |
az stack sub create \
--name ${{ env.DEPLOYMENT_ID }} \
--location ${{ env.LOCATION }} \
--template-file .azure/deployments/${{ env.DEPLOYMENT_ID }}/template.json \
--parameters @.azure/deployments/${{ env.DEPLOYMENT_ID }}/parameters.json \
--action-on-unmanage deleteAll \
--deny-settings-mode none \
--description "Git-Ape deployment ${{ env.DEPLOYMENT_ID }}" \
--tags "managedBy=git-ape" "deploymentId=${{ env.DEPLOYMENT_ID }}" \
--yes \
--verboseTransitioning from Service Principal secrets to OIDC:
- Create the federated credential on the existing App Registration
- Update the workflow to use
azure/login@v2withclient-idinstead ofcreds - Add
permissions.id-token: writeto the workflow - Remove
AZURE_CREDENTIALSsecret from the repo - Verify with a test deployment on a dev branch
Copilot Coding Agent Considerations
When Git-Ape runs inside the Copilot Coding Agent:
- The agent operates on a branch and creates a PR — it cannot interactively confirm with the user
- Authentication must be pre-configured via OIDC in the Actions workflow
- All deployment plans should be committed as files in the PR for review
- Actual deployment should happen on merge to
main(via a separate workflow) - The agent should generate the template + what-if analysis but NOT execute deployment unless the workflow is explicitly configured to do so
Does 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.

