Capacity Planning logo

Capacity Planning

Community
ricmmartins
capacity-planning

Assess Azure resource capacity, quota utilization, and growth trends to prevent outages from resource exhaustion. Use when asked about capacity, quotas, scaling readiness, load testing prep, Black Friday readiness, or growth projections.

Overview

Publisherricmmartins
Repositoryazure-sre-agent-skills
Skill namecapacity-planning
Stars
70
Forks
14
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by ricmmartins on GitHub. Read the source before you install it.

Installation

Install the Capacity Planning AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/ricmmartins/azure-sre-agent-skills/tree/main/skills/03-capacity-planning
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/ricmmartins/azure-sre-agent-skills.git /tmp/azure-sre-agent-skills
mkdir -p .claude/skills
cp -r /tmp/azure-sre-agent-skills/skills/03-capacity-planning .claude/skills/capacity-planning
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Capacity Planning in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Capacity Planning on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Capacity Planning is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Capacity Planning

Purpose

Analyze current resource utilization, quota consumption, and growth trends to predict capacity risks and recommend scaling actions before limits are hit.

When to use this skill

  • User asks "will our infrastructure handle the traffic spike?"
  • User asks about quotas, limits, or capacity
  • Pre-event planning (Black Friday, product launch, marketing campaign)
  • Quarterly capacity review
  • After hitting a quota or throttling limit

Pre-check

Confirm with the user:

  • Scope: which subscriptions and regions
  • Time horizon: when is the expected load increase? (default: 30 days)
  • Expected growth factor (e.g., 2x, 5x, 10x current load)
  • Critical workloads to prioritize

Assessment procedure

Step 1: Quota utilization

Check current quota usage across all critical resource providers.

bash
az vm list-usage --location <region> -o table
az network list-usages --location <region> -o table
az storage account list --query "length(@)"

Check for:

  • vCPU quotas: Total and per-family (Dv5, Ev5, etc.) — flag if > 70% utilized
  • Public IPs: Usage vs. limit
  • Load balancers: Usage vs. limit
  • Network interfaces: Usage vs. limit
  • Storage accounts per subscription: Usage vs. 250 limit
  • App Service plans per region
  • AKS clusters per subscription

Build a quota utilization table. Use Unicode emoji characters directly (🟢🟡🔴) — never use emoji shortcodes like :green_circle: or :red_circle:.

ResourceRegionUsedLimitUtilizationRisk
Total vCPUsEast US8510085%🔴
Dv5 vCPUsEast US325064%🟡
Public IPsEast US82040%🟢

Step 2: Compute capacity

Analyze current compute utilization and headroom.

  1. VM utilization (last 14 days):

    • Average and P95 CPU across all VMs
    • Average and P95 memory (if available via Log Analytics)
    • Flag VMs consistently > 80% CPU or memory
  2. App Service plan utilization:

    bash
    az appservice plan list --query "[].{name:name, sku:sku.name, workers:numberOfWorkers, maxWorkers:maximumElasticWorkerCount}" -o table
    • Current instance count vs. max
    • CPU/memory % of the plan
    • Autoscale rules and current headroom
  3. AKS cluster capacity:

    bash
    az aks list --query "[].{name:name, nodeCount:agentPoolProfiles[0].count, maxCount:agentPoolProfiles[0].maxCount, vmSize:agentPoolProfiles[0].vmSize}" -o table
    • Node count vs. max count
    • Pod density per node
    • Cluster autoscaler configuration
  4. Container Apps:

    • Current replicas vs. max replicas
    • Autoscale rules (HTTP concurrency, CPU, custom)

Step 3: Data layer capacity

  1. SQL Database:

    • DTU/vCore utilization (avg and P95)
    • Storage usage vs. max size
    • Connection count vs. limit
  2. Cosmos DB:

    • RU consumption vs. provisioned (or autoscale max)
    • Storage per container
    • 429 (throttling) rate from metrics
  3. Redis Cache:

    • Memory usage %
    • Connection count vs. max
    • Server load %
  4. Storage accounts:

    • Ingress/egress patterns
    • Transaction rates vs. limits
    • Blob count growth rate

Step 4: Networking capacity

  1. ExpressRoute / VPN Gateway: Bandwidth utilization %
  2. Application Gateway / Front Door: Connection count, throughput
  3. NAT Gateway: SNAT port utilization
  4. DNS zones: Query volume trends

Step 5: Growth projection

Based on the data collected:

  1. Plot utilization trends for the last 90 days
  2. Apply linear projection to estimate when each resource hits 80% and 100%
  3. If the user specified a growth factor, multiply current usage and check against limits

Build a risk timeline:

ResourceCurrentAt 2x LoadAt 5x LoadHits LimitAction Needed
vCPUs East US85/100170 ❌425 ❌NowQuota increase
SQL DTU60%120% ❌300% ❌At 1.7xScale up tier
AKS nodes5/1010/10 ⚠️25 ❌At 2xIncrease max
Redis memory45%90% ⚠️225% ❌At 2.2xUpgrade SKU

Step 6: Quota increase requests

For any quota that needs increasing, generate the correct request command:

bash
# Request a quota increase via the Azure portal Support + Troubleshooting flow,
# or use the REST API directly:
az rest --method patch \
  --url "https://management.azure.com/subscriptions/<sub-id>/providers/Microsoft.Capacity/resourceProviders/Microsoft.Compute/locations/<region>/serviceLimits/StandardDv5Family?api-version=2020-10-25" \
  --body '{"properties":{"limit":{"limitObjectType":"LimitValue","value":<new-limit>}}}'

Note: The az quota CLI extension is in preview and syntax may change. The REST API approach above is stable. Alternatively, guide users to submit quota requests via the Azure portal: Help + support > New support request > Service and subscription limits (quotas).

Step 7: Recommendations

For each risk identified:

  1. Immediate: Quota increase requests, SKU upgrades
  2. Short-term (1-2 weeks): Autoscale configuration, caching layers
  3. Long-term: Architecture changes (sharding, async patterns, CDN)

Accepted exceptions (optional)

If the user provides a list of accepted exceptions, do not flag those items. Instead, note them in the report as Accepted Exception with the reason provided.

Example format the user may provide:

CheckReason
1.1 vCPU quota utilizationQuota increase already submitted, awaiting approval
2.3 AKS cluster capacityCluster is scheduled for decommission next month
4.2 Application Gateway throughputTraffic is seasonal, current capacity is intentional

When exceptions are provided:

  • Skip the flagged checks in scoring
  • List them in a separate "Accepted Exceptions" section at the end of the report
  • Recalculate the overall score excluding excepted checks

Expected output

Report header (mandatory — use this exact format)

Capacity Planning Report

FieldValue
Subscription(name + ID)
Assessment DateYYYY-MM-DD
Region(s) Assessed(list)

Capacity summary

MetricValue
🏗️ Resources scannedX
⚠️ Resources at risk (>70% capacity)Y
🔴 Resources critical (>90% capacity)Z
📈 Projected limit breach within 30 daysW resources

Risk matrix

Table with all resources, current utilization, projected utilization at specified growth factor, and recommended action.

Scaling runbook

Step-by-step actions to prepare for the expected load increase, ordered by priority and dependency.

Remediation guidance

For each capacity risk identified, include in the output:

  1. The specific az CLI command to remediate (quota increase, scale-up, autoscale config)
  2. Use GetAzCliHelp to validate the command syntax before suggesting
  3. The official Microsoft Learn documentation link

References

Sample output

The following is a redacted example of what the report looks like when run against a subscription.

Capacity Planning Report

FieldValue
Subscriptioncontoso-prod-001 (a1b2c3d4-e5f6-7890-abcd-ef1234567890)
Assessment Date2026-07-15
Region(s) AssessedEast US, West Europe

Capacity summary

MetricValue
🏗️ Resources scanned47
⚠️ Resources at risk (>70% capacity)5
🔴 Resources critical (>90% capacity)2
📈 Projected limit breach within 30 days1 resource

Risk matrix (sample)

ResourceRegionCurrentAt 2x LoadHits LimitAction Needed
Total vCPUsEast US85/100 (85%)170 ❌NowQuota increase
Dv5 vCPUsEast US32/50 (64%)64 ⚠️At 1.6xQuota increase
SQL DTU sql-contoso-prodEast US78% avg156% ❌At 1.3xScale up tier
AKS nodes aks-app-prodWest Europe7/1014 ❌At 1.4xIncrease max count
Public IPsEast US8/20 (40%)16 🟢At 2.5xMonitor

Scaling runbook (sample)

PriorityActionResourceEstimated Time
1Request vCPU quota increase to 200East US subscription1–3 business days
2Scale SQL DB from S3 to S4sql-contoso-prod15 min (online)
3Increase AKS max node count to 20aks-app-prod5 min

Remediation guidance (sample)

bash
# Request vCPU quota increase via REST API
az rest --method patch \
  --url "https://management.azure.com/subscriptions/a1b2c3d4-.../providers/Microsoft.Capacity/resourceProviders/Microsoft.Compute/locations/eastus/serviceLimits/StandardDv5Family?api-version=2020-10-25" \
  --body '{"properties":{"limit":{"limitObjectType":"LimitValue","value":200}}}'

# Scale up SQL Database
az sql db update --resource-group rg-data-prod --server sql-contoso-prod --name appdb --service-objective S4

Frequently asked questions

What does the Capacity Planning AI skill do?

Assess Azure resource capacity, quota utilization, and growth trends to prevent outages from resource exhaustion. Use when asked about capacity, quotas, scaling readiness, load testing prep, Black Friday readiness, or growth projections.

Why use Capacity Planning on TypingMind?

Because you install it once and use it with any model. Capacity Planning is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Capacity Planning in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/ricmmartins/azure-sre-agent-skills/tree/main/skills/03-capacity-planning. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Capacity Planning?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Capacity Planning?

As many as you like. As long as a model supports skills, you can use Capacity Planning with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Capacity Planning AI skill free?

Yes. It is published on GitHub by ricmmartins under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇