Skip to main content
Learn by example with these real-world SDK usage patterns for the Control Plane Client.

Getting Started

Basic Client Setup

from kubiya import ControlPlaneClient

# Initialize with explicit API key
client = ControlPlaneClient(api_key="your-api-key")

# Or use environment variable (recommended)
import os
os.environ["KUBIYA_API_KEY"] = "your-api-key"
client = ControlPlaneClient(api_key=os.environ["KUBIYA_API_KEY"])

Health Check

Verify connectivity and service status:
from kubiya import ControlPlaneClient

client = ControlPlaneClient(api_key="your-api-key")

# Check health
status = client.health.check()
print(status)
Output:
{
  "status": "healthy",
  "service": "agent-control-plane",
  "timestamp": "2026-02-05T03:18:20.915580",
  "services": {
    "kubiya_api": "healthy",
    "context_graph": "healthy",
    "cognitive_memory": "healthy"
  }
}

Agent Management

List Agents

from kubiya import ControlPlaneClient

client = ControlPlaneClient(api_key="your-api-key")

# List all agents
agents = client.agents.list(limit=10)
print(f"Found {len(agents)} agents")

for agent in agents:
    print(f"  - {agent['name']} (ID: {agent['id']})")
    print(f"    Model: {agent['model_id']}")
    print(f"    Status: {agent['status']}")
Output:
Found 4 agents
  - DevOps Assistant (ID: 039f75ea-b90b-46b5-97c8-ed5475468f3c)
    Model: claude-sonnet-4
    Status: running
  - HauKI (ID: ...)
    Model: claude-sonnet-4
    Status: running

Get Agent Details

# Get specific agent
agent = client.agents.get("039f75ea-b90b-46b5-97c8-ed5475468f3c")

print(f"Agent: {agent['name']}")
print(f"Description: {agent['description']}")
print(f"Model: {agent['model_id']}")
print(f"Runtime: {agent['runtime']}")
print(f"Skills: {[s['name'] for s in agent.get('skills', [])]}")
Output:
Agent: DevOps Assistant
Description: Development and operation of software products
Model: claude-sonnet-4
Runtime: default
Skills: ['Shell - Full Access']

Create an Agent

# Create a new agent
agent_data = {
    "name": "Infrastructure Bot",
    "description": "Manages cloud infrastructure",
    "model_id": "claude-sonnet-4",
    "system_prompt": "You are an infrastructure management assistant."
}

new_agent = client.agents.create(agent_data)
print(f"Created agent: {new_agent['name']} (ID: {new_agent['id']})")

Update an Agent

# Update agent configuration
update_data = {
    "description": "Updated description",
    "skill_ids": ["780af43c-fa4f-43da-9aff-74dc8244b967"]
}

updated = client.agents.update(agent_id, update_data)
print(f"Updated agent: {updated['name']}")

Execute an Agent

# Execute an agent task
execution_data = {
    "worker_queue_id": "default",
    "prompt": "List all running pods in the production namespace"
}

result = client.agents.execute(agent_id, execution_data)
print(f"Execution started: {result}")

Models and Runtimes

List Available Models

# Get all available LLM models
models = client.models.list()
print(f"Found {len(models)} models")

for model in models[:10]:
    print(f"  - {model['label']} ({model['id']})")
    print(f"    Provider: {model['provider']}")
    print(f"    Enabled: {model['enabled']}")
Output:
Found 56 models
  - GPT 4 (gpt-4)
    Provider: OpenAI
    Enabled: True
  - Claude Sonnet 4 (claude-sonnet-4)
    Provider: Anthropic
    Enabled: True
  ...

List Runtimes

# Get available runtimes
runtimes = client.runtimes.list()
print(f"Found {len(runtimes)} runtimes")

for runtime in runtimes:
    print(f"  - {runtime['name']}")
Output:
Found 2 runtimes
  - Agno Runtime
  - Claude Code SDK

Skills Management

List Skills

# Get all available skills
skills = client.skills.list()
print(f"Found {len(skills)} skills")

for skill in skills:
    print(f"  - {skill['name']} ({skill['type']})")
    print(f"    Description: {skill['description']}")
    print(f"    Enabled: {skill['enabled']}")
Output:
Found 1 skills
  - Shell - Full Access (shell)
    Description: Complete ability to use the terminal
    Enabled: True

Integrations

List Integrations

# Get all active integrations
integrations = client.integrations.list()
print(f"Found {len(integrations)} integrations")

for integration in integrations:
    print(f"  - {integration.get('name', integration.get('vendor', 'N/A'))}")
Output:
Found 1 integrations
  - aws

Get Integration Credentials

# Get credentials for an integration
try:
    creds = client.integrations.get_integration_credentials(
        vendor="aws",
        id="aws"
    )
    print(f"Got AWS credentials")
except Exception as e:
    print(f"Error: {e}")

Workers

List Workers

# Get all workers
workers = client.workers.list()
print(f"Found {len(workers)} workers")

for worker in workers:
    print(f"  - Queue: {worker.get('queue_id', 'N/A')}")
    print(f"    Status: {worker.get('status', 'N/A')}")

Context Graph

Query the Context Graph

# List nodes in the context graph
try:
    nodes = client.graph.list_nodes(limit=10)
    print(f"Total nodes: {nodes.get('count', 0)}")

    for node in nodes.get('nodes', []):
        name = node.get('properties', {}).get('name', 'N/A')
        labels = node.get('labels', [])
        print(f"  - {name} (labels: {labels})")
except Exception as e:
    print(f"Error: {e}")

Get Graph Statistics

# Get context graph statistics
try:
    stats = client.graph.get_stats()
    print(f"Graph Statistics: {stats}")
except Exception as e:
    print(f"Error: {e}")

Search Nodes

# Search nodes by text
try:
    results = client.graph.search_nodes_by_text({
        "property_name": "name",
        "search_text": "production"
    })
    print(f"Found {len(results.get('nodes', []))} matching nodes")
except Exception as e:
    print(f"Error: {e}")

Task Planning

Generate a Task Plan

# Use AI to plan a task
plan = client.task_planning.plan(
    task_description="Deploy a new microservice to production",
    context={"environment": "production", "service": "user-api"}
)
print(f"Generated plan: {plan}")

Stream Task Planning

# Stream task planning updates
for update in client.task_planning.plan_stream(
    task_description="Set up monitoring for the payment service"
):
    print(update)

Complete Workflow Example

DevOps Automation Script

from kubiya import ControlPlaneClient
import json

def devops_automation():
    """Complete DevOps automation example using Control Plane SDK"""

    client = ControlPlaneClient(api_key="your-api-key")

    # 1. Verify service health
    print("=== Checking Service Health ===")
    health = client.health.check()
    if health['status'] != 'healthy':
        print("Warning: Service not healthy!")
        return
    print(f"Status: {health['status']}")

    # 2. List available agents
    print("\n=== Available Agents ===")
    agents = client.agents.list()
    for agent in agents:
        print(f"  - {agent['name']} ({agent['status']})")

    # 3. Find a DevOps agent
    devops_agent = next(
        (a for a in agents if 'devops' in a['name'].lower()),
        None
    )

    if not devops_agent:
        print("No DevOps agent found, creating one...")
        devops_agent = client.agents.create({
            "name": "DevOps Bot",
            "description": "Automated DevOps operations",
            "model_id": "claude-sonnet-4"
        })

    print(f"\n=== Using Agent: {devops_agent['name']} ===")

    # 4. Check available models
    print("\n=== Available Models ===")
    models = client.models.list()
    claude_models = [m for m in models if 'claude' in m.get('id', '').lower()]
    for model in claude_models[:3]:
        print(f"  - {model['label']}")

    # 5. Check runtimes
    print("\n=== Available Runtimes ===")
    runtimes = client.runtimes.list()
    for runtime in runtimes:
        print(f"  - {runtime['name']}")

    # 6. List integrations
    print("\n=== Active Integrations ===")
    integrations = client.integrations.list()
    for integration in integrations:
        print(f"  - {integration.get('vendor', 'Unknown')}")

    print("\n=== DevOps Automation Complete ===")

if __name__ == "__main__":
    devops_automation()

Infrastructure Management Script

from kubiya import ControlPlaneClient

def manage_infrastructure():
    """Infrastructure management with Control Plane SDK"""

    client = ControlPlaneClient(api_key="your-api-key")

    # List all agents with their skills
    print("=== Agents and Their Capabilities ===")
    agents = client.agents.list()

    for agent in agents:
        print(f"\nAgent: {agent['name']}")
        print(f"  Model: {agent['model_id']}")
        print(f"  Runtime: {agent.get('runtime', 'default')}")

        skills = agent.get('skills', [])
        if skills:
            print("  Skills:")
            for skill in skills:
                print(f"    - {skill['name']} ({skill['type']})")

    # Find agents with specific skills
    print("\n=== Agents with Shell Access ===")
    shell_agents = [
        a for a in agents
        if any(s['type'] == 'shell' for s in a.get('skills', []))
    ]

    for agent in shell_agents:
        print(f"  - {agent['name']}")

if __name__ == "__main__":
    manage_infrastructure()

Error Handling

Robust Error Handling Example

from kubiya import ControlPlaneClient
from kubiya.resources.exceptions import (
    ControlPlaneError,
    AgentError,
    GraphError
)

def safe_operations():
    """Example with proper error handling"""

    client = ControlPlaneClient(api_key="your-api-key")

    # Safe agent listing
    try:
        agents = client.agents.list()
        print(f"Found {len(agents)} agents")
    except AgentError as e:
        print(f"Agent operation failed: {e}")
    except ControlPlaneError as e:
        print(f"Control plane error: {e}")

    # Safe graph query
    try:
        nodes = client.graph.list_nodes(limit=10)
        print(f"Found {nodes.get('count', 0)} nodes")
    except GraphError as e:
        print(f"Graph query failed: {e}")
    except ControlPlaneError as e:
        print(f"Control plane error: {e}")

    # General exception handling
    try:
        # Any operation
        result = client.health.check()
    except Exception as e:
        print(f"Unexpected error: {e}")

if __name__ == "__main__":
    safe_operations()

Best Practices

Environment Configuration

import os
from kubiya import ControlPlaneClient

# Best practice: Use environment variables
API_KEY = os.environ.get("KUBIYA_API_KEY")
if not API_KEY:
    raise ValueError("KUBIYA_API_KEY environment variable not set")

client = ControlPlaneClient(api_key=API_KEY)

Pagination

# Handle large result sets with pagination
def get_all_agents(client, page_size=100):
    """Get all agents using pagination"""
    all_agents = []
    skip = 0

    while True:
        agents = client.agents.list(skip=skip, limit=page_size)
        if not agents:
            break
        all_agents.extend(agents)
        skip += page_size

    return all_agents

agents = get_all_agents(client)
print(f"Total agents: {len(agents)}")

Caching Results

from functools import lru_cache
import time

class CachedClient:
    def __init__(self, api_key):
        self.client = ControlPlaneClient(api_key=api_key)
        self._models_cache = None
        self._models_cache_time = 0
        self._cache_ttl = 300  # 5 minutes

    def get_models(self):
        """Get models with caching"""
        now = time.time()
        if self._models_cache is None or (now - self._models_cache_time) > self._cache_ttl:
            self._models_cache = self.client.models.list()
            self._models_cache_time = now
        return self._models_cache

cached = CachedClient(api_key="your-api-key")
models = cached.get_models()  # Cached after first call

Next Steps