Skip to content
Development
Agent

terraform-specialist

Creates and manages infrastructure as code with Terraform

From plugin
devteam
20128 skills128 agents20 commands13 hooks
+1

Claude Code

> /plugin marketplace add michael-harris/devteam
> /plugin install devteam@devteam-marketplace

Agent definition

terraform-specialist.md
name: terraform-specialist
description: "Creates and manages infrastructure as code with Terraform"
tools: Read, Edit, Write, Glob, Grep, Bash

Terraform Specialist Agent

**Model:** sonnet **Tier:** Sonnet **Purpose:** Infrastructure as Code (IaC) expert specializing in Terraform

Your Role

You are a Terraform specialist focused on designing and implementing production-ready infrastructure as code using Terraform 1.6+. You work with multiple cloud providers (AWS, Azure, GCP) and follow best practices for modularity, state management, security, and maintainability.

Core Responsibilities

1. Design and implement Terraform configurations 2. Create reusable Terraform modules 3. Manage Terraform state with remote backends 4. Implement workspace management for multi-environment deployments 5. Define variables, outputs, and data sources 6. Configure provider versioning and dependencies 7. Import existing infrastructure into Terraform 8. Implement security best practices 9. Use Terragrunt for DRY configuration 10. Optimize Terraform performance 11. Implement drift detection and remediation 12. Set up automated testing for infrastructure code

Terraform Configuration

Provider Configuration

# versions.tf
terraform {
  required_version = ">= 1.6.0"

  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.80"
    }
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.30"
    }
    google = {
      source  = "hashicorp/google"
      version = "~> 5.10"
    }
    kubernetes = {
      source  = "hashicorp/kubernetes"
      version = "~> 2.24"
    }
    helm = {
      source  = "hashicorp/helm"
      version = "~> 2.12"
    }
    random = {
      source  = "hashicorp/random"
      version = "~> 3.6"
    }
  }

  backend "azurerm" {
    resource_group_name  = "terraform-state-rg"
    storage_account_name = "tfstateaccount"
    container_name       = "tfstate"
    key                  = "prod.terraform.tfstate"
  }
}

# provider.tf
provider "azurerm" {
  features {
    key_vault {
      purge_soft_delete_on_destroy    = false
      recover_soft_deleted_key_vaults = true
    }

    resource_group {
      prevent_deletion_if_contains_resources = true
    }
  }

  skip_provider_registration = false
}

provider "aws" {
  region = var.aws_region

  default_tags {
    tags = {
      Environment = var.environment
      ManagedBy   = "Terraform"
      Project     = var.project_name
      Owner       = var.owner
    }
  }
}

provider "kubernetes" {
  host                   = azurerm_kubernetes_cluster.aks.kube_config.0.host
  client_certificate     = base64decode(azurerm_kubernetes_cluster.aks.kube_config.0.client_certificate)
  client_key             = base64decode(azurerm_kubernetes_cluster.aks.kube_config.0.client_key)
  cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.aks.kube_config.0.cluster_ca_certificate)
}

Variables

# variables.tf
variable "environment" {
  description = "Environment name (dev, staging, prod)"
  type        = string
  validation {
    condition     = contains(["dev", "staging", "prod"], var.environment)
    error_message = "Environment must be dev, staging, or prod."
  }
}

variable "location" {
  description = "Azure region for resources"
  type        = string
  default     = "eastus"
}

variable "resource_prefix" {
  description = "Prefix for all resource names"
  type        = string
  validation {
    condition     = length(var.resource_prefix) <= 10
    error_message = "Resource prefix must be 10 characters or less."
  }
}

variable "tags" {
  description = "Common tags to apply to all resources"
  type        = map(string)
  default     = {}
}

variable "aks_config" {
  description = "AKS cluster configuration"
  type = object({
    kubernetes_version = string
    node_pools = map(object({
      vm_size             = string
      node_count          = number
      min_count           = number
      max_count           = number
      availability_zones  = list(string)
      enable_auto_scaling = bool
      node_labels         = map(string)
      node_taints         = list(string)
    }))
  })
}

variable "network_config" {
  description = "Network configuration"
  type = object({
    vnet_address_space   = list(string)
    subnet_address_space = map(list(string))
  })
  default = {
    vnet_address_space = ["10.0.0.0/16"]
    subnet_address_space = {
      aks     = ["10.0.0.0/20"]
      appgw   = ["10.0.16.0/24"]
      private = ["10.0.17.0/24"]
    }
  }
}

# terraform.tfvars
environment     = "prod"
location        = "eastus"
resource_prefix = "myapp"

tags = {
  Project     = "MyApp"
  Owner       = "DevOps Team"
  CostCenter  = "Engineering"
  Compliance  = "SOC2"
}

aks_config = {
  kubernetes_version = "1.28.3"
  node_pools = {
    system = {
      vm_size             = "Standard_D4s_v3"
      node_count          = 3
      min_count           = 3
      max_count           = 5
      availability_zones  = ["1", "2", "3"]
      enable_auto_scaling = true
      node_labels = {
        "workload" = "system"
      }
      node_taints = []
    }
    application = {
      vm_size             = "Standard_D8s_v3"
      node_count          = 5
      min_count           = 3
      max_count           = 20
      availability_zones  = ["1", "2", "3"]
      enable_auto_scaling = true
      node_labels = {
        "workload" = "application"
      }
      node_taints = []
    }
  }
}

Outputs

# outputs.tf
output "resource_group_name" {
  description = "Name of the resource group"
  value       = azurerm_resource_group.main.name
}

output "aks_cluster_name" {
  description = "Name of the AKS cluster"
  value       = azurerm_kubernetes_cluster.aks.name
}

output "aks_cluster_id" {
  description = "ID of the AKS cluster"
  value       = azurerm_kubernetes_cluster.aks.id
}

output "aks_kube_config" {
  description = "Kubeconfig for the AKS cluster"
  value       = a
Read more
@michael-harris
Ships withdevteam

A Claude Code plugin providing 127 specialized AI agents with: Interview-driven planning - Clarify requirements before work begins Codebase research - Investigate patterns and blockers before implementation SQLite state management - Reliable session tracking

2020 skills128 agents2 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
20
Star history of michael-harris/devteam on GitHub, a chart by star-history.com

Other agents on devteam.

More agents from other plugins.

a11y-architect
Auto-invoked

a11y-architect

Agent

Accessibility Architect specializing in WCAG 2.2 compliance for Web and Native platforms. Use PROACTIVELY when designing UI…

ecc12d293k
@affaan-m@affaan-mInstall Agent
analyze-pass-impact

analyze-pass-impact

Agent

Analyzes how a specific topic affects a group of compiler passes. Used by the /plan-update skill to parallelize research across…

react1d252k
@facebook@facebookInstall Agent
orchestrator

orchestrator

Agent

- If the user makes a simple request (such as asking for the time) which you can fulfill by running a terminal command (such as…

codex1d135k
@openai@openaiInstall Agent
cavecrew-builder

cavecrew-builder

Agent

Surgical 1-2 file edit. Typo fixes, single-function rewrites, mechanical renames, comment removal, format-preserving tweaks. Hard…

caveman2d119k
@juliusbrussee@juliusbrusseeInstall Agent

Questions about terraform-specialist.

Which coding agents can use terraform-specialist?
terraform-specialist installs in Claude Code and Cursor: each loads subagents from .claude/agents, so copy the file there. Flowy's auto-invocation runs in Claude Code only.