Required Tools

# agents/devops-agent.yaml
name: devops-agent
model: gpt-4o
temperature: 0.1
tools:
  - shell           # execute allowed shell commands
  - docker_api      # Docker Engine API (read + restart only)
  - k8s_api         # Kubernetes API (describe, scale, rollout)
  - github_api      # trigger workflows, read run status
system: |
  You are a DevOps automation agent.
  SAFETY RULES:
  - Always dry-run destructive operations first.
  - Never delete namespaces, PVCs, or databases.
  - Require explicit confirmation keyword "CONFIRM_DEPLOY" before any prod rollout.
  - Log every action taken to the audit trail.
  tools:
    shell:
      allowed_commands:
        - kubectl
        - docker
        - helm
        - git
      blocked_patterns:
        - "rm -rf"
        - "--force"
        - "kubectl delete namespace"

CI/CD Trigger Agent

from openclaw import Agent

agent = Agent.from_config("agents/devops-agent.yaml")

def trigger_pipeline(repo: str, branch: str, workflow: str = "deploy.yml") -> str:
    return agent.run(
        f"Trigger the GitHub Actions workflow '{workflow}' "
        f"on branch '{branch}' of repo '{repo}'. "
        "Then check the run status every 30 seconds until it completes. "
        "Report the final status and any failed steps."
    )

Docker Container Management

def manage_containers(service: str, action: str) -> str:
    """
    action: 'status' | 'restart' | 'logs' | 'scale'
    """
    if action not in ("status", "restart", "logs", "scale"):
        raise ValueError(f"Unsupported action: {action}")
    
    return agent.run(
        f"Docker service '{service}': perform '{action}'. "
        "Show current resource usage (CPU/RAM) and container health checks."
    )

Kubernetes Pod Operations

def k8s_status_report(namespace: str = "default") -> str:
    return agent.run(
        f"In Kubernetes namespace '{namespace}': "
        "1. List all pods and their status. "
        "2. Highlight any CrashLoopBackOff or OOMKilled pods. "
        "3. Show recent events with warnings. "
        "4. Suggest remediation steps for any unhealthy pods."
    )

def rolling_restart(deployment: str, namespace: str = "default") -> str:
    return agent.run(
        f"Perform a rolling restart of deployment '{deployment}' "
        f"in namespace '{namespace}'. "
        "Monitor rollout progress and report when all pods are ready."
    )

Incident Response

def handle_alert(alert: dict) -> str:
    """Diagnose and remediate an infrastructure alert."""
    return agent.run(
        f"ALERT: {alert['name']} on {alert['host']}\n"
        f"Severity: {alert['severity']}\n"
        f"Details: {alert['details']}\n\n"
        "1. Diagnose root cause (check logs, metrics, recent deployments). "
        "2. Suggest remediation steps. "
        "3. For severity=critical: execute safe auto-remediation if available. "
        "4. Create an incident summary report."
    )
Human-in-the-loop for production: Set require_confirmation: true in your agent config for any actions affecting production systems. The agent will pause and wait for a human CONFIRM_DEPLOY signal.

Safety Guardrails

DESTRUCTIVE_KEYWORDS = [
    "kubectl delete namespace",
    "kubectl delete pvc",
    "helm uninstall",
    "docker system prune",
    "terraform destroy",
]

def safe_shell_exec(command: str) -> str:
    """Block dangerous shell commands before execution."""
    for kw in DESTRUCTIVE_KEYWORDS:
        if kw in command:
            raise PermissionError(
                f"Blocked destructive command containing '{kw}'. "
                "Requires manual execution with explicit approval."
            )
    return agent.run(f"Execute: {command}")

Frequently Asked Questions

How do I prevent a DevOps agent from running destructive commands?

Implement a command whitelist or destructive keyword blocker: reject any command containing rm -rf, DROP TABLE, terraform destroy, kubectl delete, etc. For high-risk actions, require human-in-the-loop approval: the agent proposes the command, waits for confirmation via Slack/PagerDuty, and only executes after explicit approval. Always run commands in a sandbox or test environment first, and log all executions with full audit trails (timestamp, command, user,outcome).

Can the agent manage Kubernetes clusters?

Yes. Provide the agent with kubectl access: either embed the kubeconfig securely (env var or secret manager) or use a service account with limited RBAC permissions. For safety, grant only get/list/watch permissions by default; require approval for create/update/delete. The agent can read pod statuses, check logs with kubectl logs, and propose fixes (e.g., "Restart the crashed pod"), which you approve before execution.

Which CI/CD systems integrate well with OpenClaw DevOps agents?

GitHub Actions (workflow dispatch API), GitLab CI (pipeline triggers), Jenkins (REST API + crumb auth), CircleCI (trigger pipeline endpoint), Argo Workflows (Kubernetes-native). All provide REST APIs to trigger builds, query job status, and retrieve logs. GitHub Actions is the easiest to start with; Jenkins requires CSRF token handling but offers the most flexibility.

How do I handle secrets securely in DevOps automation agents?

Never hardcode secrets in prompts or code. Use a secrets manager: AWS Secrets Manager, HashiCorp Vault, Azure Key Vault, or Doppler. The agent calls get_secret("DB_PASSWORD") which fetches the value at runtime. Rotate secrets regularly, and audit all access. For commands that require secrets (e.g., docker login), inject them as env vars rather than command-line args (which appear in process lists and logs).