en un clic
kelos
// Author, debug, and operate Kelos resources (Task, Workspace, AgentConfig, TaskSpawner) on Kubernetes. Use when working with Kelos CRDs or the kelos CLI.
// Author, debug, and operate Kelos resources (Task, Workspace, AgentConfig, TaskSpawner) on Kubernetes. Use when working with Kelos CRDs or the kelos CLI.
| name | kelos |
| description | Author, debug, and operate Kelos resources (Task, Workspace, AgentConfig, TaskSpawner) on Kubernetes. Use when working with Kelos CRDs or the kelos CLI. |
| compatibility | Requires kubectl and access to a Kubernetes cluster |
Use this skill when you need to author, debug, or operate Kelos resources (Task, Workspace, AgentConfig, TaskSpawner) on a Kubernetes cluster.
Install the controller and CRDs into a Kubernetes cluster:
kelos install
Uninstall:
kelos uninstall
Initialize a local config file at ~/.kelos/config.yaml:
kelos init
Kelos defines four custom resources:
| Resource | Purpose |
|---|---|
| Task | A single agent run — prompt, credentials, optional workspace and config |
| Workspace | A git repository to clone for the agent |
| AgentConfig | Reusable instructions, skills, agents, MCP servers |
| TaskSpawner | Automatically creates Tasks from GitHub issues, Jira tickets, or cron |
A Task runs an AI agent with a prompt. Key fields:
spec.type (required): claude-code, codex, gemini, opencode, or cursorspec.prompt (required): The task promptspec.credentials (required): type (api-key or oauth) and secretRef.namespec.workspaceRef.name: Reference to a Workspacespec.agentConfigRef.name: Reference to an AgentConfigspec.branch: Git branch mutex — only one Task with the same branch runs at a timespec.dependsOn: Task names that must succeed firstspec.ttlSecondsAfterFinished: Auto-delete after completion (seconds)spec.model: Model overridespec.podOverrides: Resource limits, timeout, env vars, node selectorTask status phases: Pending -> Running -> Succeeded or Failed.
Tasks with unmet dependencies enter Waiting.
A Workspace defines a git repository for the agent:
spec.repo (required): Git URL (HTTPS, git://, or SSH)spec.ref: Branch, tag, or commit to checkoutspec.secretRef.name: Secret with GITHUB_TOKEN (PAT) or GitHub App credentials (appID, installationID, privateKey)spec.remotes: Additional git remotes (name must not be origin)spec.files: Files to inject into the repo before the agent starts (e.g., CLAUDE.md, skills)An AgentConfig injects reusable instructions and tools into Tasks:
spec.agentsMD: Instructions written to the agent's config (e.g., ~/.claude/CLAUDE.md). Additive — does not overwrite repo filesspec.plugins: Plugin bundles with skills and sub-agents
plugins[].name: Plugin name (directory namespace)plugins[].skills[].name / .content: Skill definitions (become SKILL.md)plugins[].agents[].name / .content: Agent definitions (become <name>.md)spec.skills: skills.sh ecosystem packages
skills[].source: Package in owner/repo formatskills[].skill: Optional specific skill namespec.mcpServers: MCP server configurations
stdio, http, and sse transport typesheadersFrom / envFrom with a secretRef for sensitive valuesA TaskSpawner auto-creates Tasks from external sources:
spec.when.githubIssues: Discover from GitHub issues (labels, state, assignee, author, commentPolicy, priority labels)spec.when.githubPullRequests: Discover from GitHub PRs (labels, state, reviewState, author, draft, commentPolicy, priority labels)spec.when.cron: Trigger on a cron schedulespec.when.jira: Discover from Jira (project, JQL filter, secret with JIRA_TOKEN)spec.when.githubIssues.commentPolicy / spec.when.githubPullRequests.commentPolicy: Comment-based workflow control with authorization
triggerComment: Command that must appear for the item to be included (e.g., "/kelos pick-up")excludeComments: Commands that exclude items; when combined with triggerComment, the most recent authorized command winsallowedUsers: Restrict comment control to specific GitHub usernamesallowedTeams: Restrict to GitHub teams in org/team-slug formatminimumPermission: Require at least this repo permission (read, triage, write, maintain, admin)spec.taskTemplate: Template for spawned Tasks (same fields as Task spec)
promptTemplate and branch support Go text/template variables: {{.ID}}, {{.Number}}, {{.Title}}, {{.Body}}, {{.URL}}, {{.Labels}}, {{.Comments}}, {{.Kind}}, {{.Time}}, {{.Schedule}}spec.pollInterval: Polling frequency (default 5m)spec.maxConcurrency: Limit concurrent running Tasksspec.maxTotalTasks: Lifetime task creation limitspec.suspend: Pause/resume without deleting# Simple task
kelos run -p "Fix the login bug" --type claude-code
# With workspace and agent config
kelos run -p "Add tests" --workspace my-ws --agent-config my-ac
# With model override and branch
kelos run -p "Refactor auth" --model opus --branch feature/auth
# Watch task progress
kelos run -p "Fix bug" -w
# Create a workspace
kelos create workspace my-ws \
--repo https://github.com/org/repo.git \
--ref main \
--secret github-token
# Create an agent config with inline skill
kelos create agentconfig my-ac \
--skill review="Review the PR for correctness and security" \
--agents-md @instructions.md
# Create an agent config with skills.sh package
kelos create agentconfig my-ac \
--skills-sh anthropics/skills:skill-creator
# Create an agent config with MCP server
kelos create agentconfig my-ac \
--mcp github='{"type":"http","url":"https://api.githubcopilot.com/mcp/"}'
# Dry-run to preview YAML
kelos create agentconfig my-ac --skill review=@review.md --dry-run
# List resources
kelos get tasks
kelos get taskspawners
kelos get workspaces
# View details
kelos get task my-task -d
kelos get task my-task -o yaml
# Stream logs
kelos logs my-task -f
# Suspend / resume a spawner
kelos suspend taskspawner my-spawner
kelos resume taskspawner my-spawner
# Delete
kelos delete task my-task
Config file at ~/.kelos/config.yaml:
oauthToken: <token> # or apiKey: <key>
model: sonnet # or a versioned ID like 'claude-sonnet-4-6' — value is passed to the agent as KELOS_MODEL
namespace: default
workspace:
repo: https://github.com/org/repo.git
ref: main
token: <github-token>
CLI flags always override config file values.
Tasks can depend on other Tasks using dependsOn. Dependent tasks access
upstream results via Go template syntax in the prompt:
dependsOn: [scaffold]
prompt: |
Code is on branch {{index .Deps "scaffold" "Results" "branch"}}.
PR: {{index .Deps "scaffold" "Results" "pr"}}
Available result keys: branch, commit, base-branch, pr, input-tokens, output-tokens, cost-usd.
kubectl get secret <name>kubectl logs deployment/kelos-controller-manager -n kelos-systemdependsOn has not yet succeededspec.branch)kelos logs <task-name> or kubectl logs -l job-name=<job-name>kubectl get taskspawner <name> -o yamlkubectl get workspacemaxConcurrency is reached (active tasks at limit)maxTotalTasks limit is reachedsuspend: true is setspec.agentConfigRef.name must match<plugin>/skills/<skill>/SKILL.mdowner/repo formatGITHUB_TOKENrepo (and workflow if needed) permissionsappID, installationID, and privateKey are correct| Type | CLI | Credential Env Var |
|---|---|---|
claude-code | claude | ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN |
codex | codex | CODEX_API_KEY or CODEX_AUTH_JSON |
gemini | gemini | GEMINI_API_KEY |
opencode | opencode | OPENCODE_API_KEY |
cursor | agent (Cursor) | CURSOR_API_KEY |
See the references/ directory next to this file for complete YAML examples:
task.yaml — Task patternsworkspace.yaml — Workspace patternsagentconfig.yaml — AgentConfig patternstaskspawner.yaml — TaskSpawner patterns