Resources
3Install
npx skillscat add fortiumpartners/ai-mesh/skills-cloud-provider-detector Install via the SkillsCat registry.
Detects whether a project uses AWS, GCP, or Azure through weighted analysis of Terraform files, package manifests, configuration files, CLI scripts, and Docker base images. It solves the problem of identifying cloud provider dependencies in codebases by combining multiple signals with a confidence score. Developers should use it when auditing or onboarding projects to determine existing cloud infrastructure usage.
Cloud Provider Detection Skill
Auto-detect AWS, GCP, or Azure usage with 95%+ accuracy using multi-signal analysis.
Quick Start
const { detectCloudProvider } = require('./detect-cloud-provider.js');
// Auto-detect cloud provider
const result = await detectCloudProvider('/path/to/project');
if (result.detected) {
console.log(`Detected: ${result.name}`);
console.log(`Confidence: ${(result.confidence * 100).toFixed(1)}%`);
console.log(`Signals: ${result.signal_count}`);
}
// Manual override
const awsResult = await detectCloudProvider('/path/to/project', {
provider: 'aws'
});Detection Signals
Signal Types (Weighted)
Terraform (weight: 0.5) - Highest priority
- Provider declarations:
provider "aws",provider "google",provider "azurerm" - Resource types:
aws_vpc,google_compute_instance,azurerm_storage_account
- Provider declarations:
Package Manifests (weight: 0.3)
- NPM:
@aws-sdk/,@google-cloud/,@azure/ - Python:
boto3,google-cloud-*,azure-*
- NPM:
Config Files (weight: 0.3)
.aws/config,.gcloud/,.azure/cloudformation.yml,cloudbuild.yaml,azuredeploy.json
CLI Scripts (weight: 0.2)
aws configure,gcloud compute,az vm- Command patterns in
.shfiles
Docker (weight: 0.2)
- Base images:
FROM public.ecr.aws,FROM gcr.io,FROM mcr.microsoft.com
- Base images:
Confidence Scoring
Base Score = Σ(detected_signals × signal_weight) / Σ(all_signal_weights)
Multi-Signal Boost:
if (signal_count >= 3) {
confidence += 0.2 // Up to maximum of 1.0
}
Detection Threshold: ≥0.7 (70%)CLI Usage
# Detect in current directory
node detect-cloud-provider.js
# Detect in specific project
node detect-cloud-provider.js /path/to/project
# Manual override
node detect-cloud-provider.js /path/to/project --provider aws
# Custom confidence threshold
node detect-cloud-provider.js /path/to/project --min-confidence 0.8
# Exit codes:
# 0 = Provider detected
# 1 = No provider detected
# 2 = Error occurredResponse Format
{
"detected": true,
"provider": "aws",
"name": "Amazon Web Services (AWS)",
"confidence": 0.95,
"signals": {
"terraform": true,
"npm": true,
"python": false,
"cli": true,
"docker": true,
"config": true
},
"signal_count": 5,
"all_results": [
{
"provider": "aws",
"name": "Amazon Web Services (AWS)",
"confidence": 0.95,
"signals": {...},
"signal_count": 5
},
{
"provider": "gcp",
"name": "Google Cloud Platform (GCP)",
"confidence": 0.12,
"signals": {...},
"signal_count": 1
}
]
}Integration Examples
infrastructure-specialist Agent
# In agent YAML behavior section:
**Cloud Provider Detection**:
- **Auto-detect**: Run `node skills/cloud-provider-detector/detect-cloud-provider.js`
at task start to identify AWS/GCP/Azure usage
- **Load Skills**: If AWS detected (≥70% confidence), load AWS cloud skill
- **Multi-cloud**: If multiple providers detected, load all relevant skills
- **Manual Override**: Accept `--cloud-provider` flag to bypass detectionExample Workflow
// 1. Detect cloud provider
const detection = await detectCloudProvider(projectPath);
// 2. Load appropriate skill
if (detection.detected) {
if (detection.provider === 'aws') {
await loadSkill('skills/aws-cloud/SKILL.md');
} else if (detection.provider === 'gcp') {
await loadSkill('skills/gcp-cloud/SKILL.md');
} else if (detection.provider === 'azure') {
await loadSkill('skills/azure-cloud/SKILL.md');
}
}
// 3. Execute infrastructure tasks with cloud-specific knowledgeDetection Patterns
AWS Indicators
- Terraform:
aws_vpc,aws_s3_bucket,aws_lambda_function - NPM:
@aws-sdk/client-s3,aws-cdk-lib - Python:
boto3,botocore - CLI:
aws configure,aws s3 sync - Docker:
FROM public.ecr.aws/lambda/nodejs
GCP Indicators
- Terraform:
google_compute_instance,google_storage_bucket - NPM:
@google-cloud/storage,googleapis - Python:
google-cloud-storage,google-api-python-client - CLI:
gcloud compute,gsutil cp - Docker:
FROM gcr.io/google-appengine/nodejs
Azure Indicators
- Terraform:
azurerm_virtual_machine,azurerm_storage_account - NPM:
@azure/storage-blob,azure-functions-core-tools - Python:
azure-storage-blob,msrestazure - CLI:
az vm create,az storage account - Docker:
FROM mcr.microsoft.com/azure-functions/node
Performance
- Detection Time: <100ms for typical projects
- Accuracy: ≥95% on projects with clear cloud provider usage
- File Scanning: Optimized with glob patterns and ignore lists
- Memory: Low memory footprint with streaming file reads
Error Handling
try {
const result = await detectCloudProvider(projectPath);
} catch (error) {
if (error.code === 'ENOENT') {
console.error('Project directory not found');
} else if (error.message.includes('patterns.json')) {
console.error('Detection patterns file missing or invalid');
} else {
console.error('Detection failed:', error.message);
}
}Common Issues
Low Confidence Scores (<0.7):
- Project may use multiple cloud providers (check all_results)
- Limited cloud-specific patterns (consider manual override)
- Infrastructure as code not in Terraform (update detection patterns)
False Positives:
- Reduce minimum confidence threshold
- Check which signals were detected
- Review pattern matches in source files
No Detection:
- Ensure project path is correct
- Check that cloud provider files are not in ignored directories
- Verify patterns.json includes expected indicators
Customization
Adding New Providers
Edit cloud-provider-patterns.json:
{
"providers": {
"digitalocean": {
"name": "DigitalOcean",
"confidence_boost": 0.3,
"detection_signals": {
"terraform": {
"weight": 0.5,
"patterns": ["provider \"digitalocean\"", "digitalocean_droplet"]
}
}
}
}
}Adjusting Detection Rules
{
"detection_rules": {
"minimum_confidence": 0.6, // Lower = more permissive
"multi_signal_boost": 0.3, // Higher = favor multi-signal
"minimum_signals_for_boost": 2 // Lower = boost earlier
}
}Best Practices
- Run Early: Detect cloud provider at task start for optimal skill loading
- Check Confidence: Log confidence scores to monitor detection accuracy
- Manual Override: Provide
--providerflag for edge cases - Multi-Cloud: Handle projects using multiple cloud providers gracefully
- Cache Results: Cache detection results per session to avoid re-scanning
Dependencies
- Node.js: ≥18.0.0 required for glob and fs.promises
- NPM Package:
globfor file pattern matching
Install with:
npm install globFile Size
- SKILL.md: ~8KB (quick reference)
- detect-cloud-provider.js: ~12KB (implementation)
- cloud-provider-patterns.json: ~6KB (detection rules)
- Total: ~26KB for complete cloud provider detection system
Version
- Version: 1.0.0
- Last Updated: October 2025
- Maintainer: Fortium Infrastructure Team