**Version**: 1.0.0 | **Purpose**: Automatic detection of infrastructure tooling (Helm, Kubernetes, Kustomize, ArgoCD)
/plugin marketplace add FortiumPartners/ensemble/plugin install ensemble-infrastructure@ensembleThis skill inherits all available tools. When active, it can use any tool Claude has access to.
detect-tooling.jsperformance-benchmark.jstooling-patterns.jsonVersion: 1.0.0 | Purpose: Automatic detection of infrastructure tooling (Helm, Kubernetes, Kustomize, ArgoCD)
The tooling detection system automatically identifies infrastructure and DevOps tooling usage in projects using multi-signal analysis. It detects Helm charts, Kubernetes manifests, Kustomize configurations, and GitOps tools with 95%+ accuracy.
Supported Tools:
Use Cases:
node skills/tooling-detector/detect-tooling.js /path/to/project
Output:
{
"detected": true,
"tools": [
{
"tool": "helm",
"name": "Helm",
"confidence": 0.9,
"signals": {
"chart_yaml": true,
"values_yaml": true,
"templates_dir": true
},
"signal_count": 3
},
{
"tool": "kubernetes",
"name": "Kubernetes",
"confidence": 0.85,
"signals": {
"api_version": true,
"kind_field": true,
"manifests_dir": true
},
"signal_count": 3
}
]
}
# Detect Helm
node skills/tooling-detector/detect-tooling.js /path/to/project --tool helm
# Detect Kubernetes
node skills/tooling-detector/detect-tooling.js /path/to/project --tool kubernetes
node skills/tooling-detector/detect-tooling.js /path/to/project --min-confidence 0.8
Primary Signals (High Confidence):
Chart.yaml file (weight: 0.6) - Helm chart metadatavalues.yaml file (weight: 0.3) - Default valuestemplates/ directory (weight: 0.2) - Template manifestsSecondary Signals (Medium Confidence):
helm install, helm upgrade, helm rollbackhelm template, helm lint, helm package.helmignore, requirements.yaml, Chart.lockConfidence Threshold: ≥70% for automatic detection
Example Detection:
Chart.yaml: ✅ (0.6)
values.yaml: ✅ (0.3)
templates/: ✅ (0.2)
helm CLI: ✅ (0.2)
→ Confidence: 1.0 + 0.1 boost = 100%
Primary Signals (High Confidence):
apiVersion: v1|apps/v1|batch/v1 in YAML files (weight: 0.5)kind: Deployment|Service|Pod|... in YAML files (weight: 0.4)kustomization.yaml file (weight: 0.3)Secondary Signals (Medium Confidence):
kubectl apply, kubectl get, kubectl describe.kube/config, kubeconfigk8s/, kubernetes/, manifests/Confidence Threshold: ≥70% for automatic detection
Example Detection:
apiVersion fields: ✅ (0.5)
kind fields: ✅ (0.4)
kubectl CLI: ✅ (0.2)
manifests/ dir: ✅ (0.1)
→ Confidence: 1.0 + 0.1 boost = 100%
Auto-detect and load skills:
#!/bin/bash
# Detect tooling
TOOLING=$(node skills/tooling-detector/detect-tooling.js .)
# Parse results
HELM_DETECTED=$(echo $TOOLING | jq -r '.tools[] | select(.tool=="helm") | .tool')
K8S_DETECTED=$(echo $TOOLING | jq -r '.tools[] | select(.tool=="kubernetes") | .tool')
# Load Helm skill if detected
if [ "$HELM_DETECTED" = "helm" ]; then
echo "📦 Helm detected - loading Helm skill..."
cat skills/helm/SKILL.md
fi
# Load Kubernetes skill if detected
if [ "$K8S_DETECTED" = "kubernetes" ]; then
echo "☸️ Kubernetes detected - loading Kubernetes skill..."
cat skills/kubernetes/SKILL.md
fi
const { detectTooling, detectTool } = require('./skills/tooling-detector/detect-tooling.js');
// Detect all tools
async function analyzeProject(projectPath) {
const result = await detectTooling(projectPath);
if (result.detected) {
console.log(`Detected ${result.tools.length} tools:`);
for (const tool of result.tools) {
console.log(` - ${tool.name}: ${(tool.confidence * 100).toFixed(0)}%`);
}
}
}
// Detect specific tool
async function checkHelm(projectPath) {
const result = await detectTool(projectPath, 'helm');
if (result.detected) {
console.log(`Helm detected with ${(result.confidence * 100).toFixed(0)}% confidence`);
console.log('Signals:', result.signals);
}
}
File Existence: Check for tool-specific files
Chart.yaml, values.yamlkustomization.yamlDirectory Existence: Check for tool-specific directories
templates/k8s/, kubernetes/, manifests/Pattern Matching: Search file contents for patterns
apiVersion and kind fields in YAML filesConfidence Calculation:
confidence = (weighted_signal_sum / total_weight)
if (signal_count >= 3) {
confidence += multi_signal_boost // +10-20%
}
confidence = min(1.0, confidence)
Threshold Check: Return detected if confidence ≥70%
Modify tooling-patterns.json to customize detection:
{
"tools": {
"helm": {
"detection_signals": {
"chart_yaml": {
"weight": 0.6,
"files": ["Chart.yaml"]
}
}
}
},
"detection_rules": {
"minimum_confidence": 0.7,
"multi_signal_boost": 0.1,
"minimum_signals_for_boost": 3
}
}
Skip detection and manually specify tools:
# Force Helm detection
--tools helm
# Force multiple tools
--tools helm,kubernetes
# Adjust confidence threshold
--min-confidence 0.8
# Detect all tools
node detect-tooling.js [project-path]
# Detect specific tool
node detect-tooling.js [project-path] --tool <tool-name>
# Filter tools
node detect-tooling.js [project-path] --tools helm,kubernetes
# Custom confidence threshold
node detect-tooling.js [project-path] --min-confidence 0.8
0: Tools detected successfully1: No tools detected2: Error during detection# Run with all results
node detect-tooling.js . | jq '.all_results'
# Check confidence scores
node detect-tooling.js . --min-confidence 0.5
# Verify file patterns
ls Chart.yaml values.yaml templates/
Adjust confidence threshold:
node detect-tooling.js . --min-confidence 0.8
Check project size:
# Exclude large directories
echo "node_modules/" >> .gitignore
echo "vendor/" >> .gitignore
Project Structure:
my-chart/
├── Chart.yaml # ✅ Detected
├── values.yaml # ✅ Detected
├── templates/ # ✅ Detected
│ ├── deployment.yaml
│ └── service.yaml
└── .helmignore # ✅ Detected
Detection Result:
{
"detected": true,
"tools": [
{
"tool": "helm",
"confidence": 1.0,
"signals": {
"chart_yaml": true,
"values_yaml": true,
"templates_dir": true,
"config": true
},
"signal_count": 4
}
]
}
Project Structure:
k8s/
├── deployment.yaml # ✅ apiVersion, kind detected
├── service.yaml # ✅ apiVersion, kind detected
├── ingress.yaml # ✅ apiVersion, kind detected
└── kustomization.yaml # ✅ Detected
Detection Result:
{
"detected": true,
"tools": [
{
"tool": "kubernetes",
"confidence": 0.95,
"signals": {
"api_version": true,
"kind_field": true,
"kustomization": true,
"manifests_dir": true
},
"signal_count": 4
}
]
}
Project Structure:
my-app/
├── Chart.yaml # Helm
├── values.yaml # Helm
├── templates/ # Helm
│ └── *.yaml # Kubernetes manifests
└── kustomize/ # Kubernetes + Kustomize
└── kustomization.yaml
Detection Result:
{
"detected": true,
"tools": [
{
"tool": "helm",
"confidence": 1.0
},
{
"tool": "kubernetes",
"confidence": 0.9
},
{
"tool": "kustomize",
"confidence": 0.8
}
]
}
detectTooling(projectPath, options)Detect all infrastructure tooling in project.
Parameters:
projectPath (string): Root project directoryoptions (object):
tools (string[]): Specific tools to detectminimumConfidence (number): Minimum confidence threshold (default: 0.7)Returns: Promise<Object>
{
detected: boolean,
tools: Array<{
tool: string,
name: string,
confidence: number,
signals: Object,
signal_count: number
}>,
all_results: Array,
detection_summary: {
total_analyzed: number,
detected_count: number,
minimum_confidence: number
}
}
detectTool(projectPath, toolName, options)Detect specific tool (Helm or Kubernetes).
Parameters:
projectPath (string): Root project directorytoolName (string): Tool name (helm|kubernetes|kustomize|argocd)options (object): Same as detectTooling()Returns: Promise<Object>
{
detected: boolean,
tool: string,
name: string,
confidence: number,
signals: Object,
signal_count: number
}
1.0.0 (2025-10-23):
Last Updated: 2025-10-23 | Version: 1.0.0
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.