Skip to content
Back to skills

Kelos

ASecurity

Author, debug, and operate Kelos resources (Task, Workspace, AgentConfig, TaskSpawner) on Kubernetes. Use when working with Kelos CRDs or the kelos CLI.

  • 336 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 26, 2026
developmentgobashnodekubernetesgitapisecurity

Works with

  • cursor
  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add kelos-dev/kelos --skill kelos --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Kelos?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Kelos
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kelos-dev-kelos/badge)](https://www.skillsdirectory.com/skills/kelos-dev-kelos)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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
---

# Kelos Skill

Use this skill when you need to author, debug, or operate Kelos resources
(Task, Workspace, AgentConfig, TaskSpawner) on a Kubernetes cluster.

## Installing Kelos

Install the controller and CRDs into a Kubernetes cluster:

```bash
kelos install
```

Uninstall:

```bash
kelos uninstall
```

Initialize a local config file at `~/.kelos/config.yaml`:

```bash
kelos init
```

## Core Resources

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 |

### Task

A Task runs an AI agent with a prompt. Key fields:

- `spec.type` (required): `claude-code`, `codex`, `gemini`, `opencode`, or `cursor`
- `spec.prompt` (required): The task prompt
- `spec.credentials` (required): `type` (`api-key` or `oauth`) and `secretRef.name`
- `spec.workspaceRef.name`: Reference to a Workspace
- `spec.agentConfigRef.name`: Reference to an AgentConfig
- `spec.branch`: Git branch mutex — only one Task with the same branch runs at a time
- `spec.dependsOn`: Task names that must succeed first
- `spec.ttlSecondsAfterFinished`: Auto-delete after completion (seconds)
- `spec.model`: Model override
- `spec.podOverrides`: Resource limits, timeout, env vars, node selector

Task status phases: `Pending` -> `Running` -> `Succeeded` or `Failed`.
Tasks with unmet dependencies enter `Waiting`.

### Workspace

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 checkout
- `spec.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)

### AgentConfig

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 files
- `spec.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` format
  - `skills[].skill`: Optional specific skill name
- `spec.mcpServers`: MCP server configurations
  - Supports `stdio`, `http`, and `sse` transport types
  - Use `headersFrom` / `envFrom` with a `secretRef` for sensitive values

### TaskSpawner

A 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 schedule
- `spec.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 wins
  - `allowedUsers`: Restrict comment control to specific GitHub usernames
  - `allowedTeams`: Restrict to GitHub teams in `org/team-slug` format
  - `minimumPermission`: 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 Tasks
- `spec.maxTotalTasks`: Lifetime task creation limit
- `spec.suspend`: Pause/resume without deleting

## CLI Quick Reference

### Running Tasks

```bash
# 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
```

### Creating Resources

```bash
# 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
```

### Managing Resources

```bash
# 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
```

### Configuration

Config file at `~/.kelos/config.yaml`:

```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.

## Dependency Chains

Tasks can depend on other Tasks using `dependsOn`. Dependent tasks access
upstream results via Go template syntax in the prompt:

```yaml
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`.

## Troubleshooting

### Task stuck in Pending
- Check if the credentials secret exists: `kubectl get secret <name>`
- Check controller logs: `kubectl logs deployment/kelos-controller-manager -n kelos-system`

### Task stuck in Waiting
- Check if a dependency in `dependsOn` has not yet succeeded
- Check if another Task holds the branch lock (same `spec.branch`)

### Task fails immediately
- Verify agent credentials are valid
- Check the workspace repository is accessible
- Review pod logs: `kelos logs <task-name>` or `kubectl logs -l job-name=<job-name>`

### TaskSpawner not creating Tasks
- Check spawner status: `kubectl get taskspawner <name> -o yaml`
- Verify the Workspace exists: `kubectl get workspace`
- Check if `maxConcurrency` is reached (active tasks at limit)
- Check if `maxTotalTasks` limit is reached
- Check if `suspend: true` is set

### AgentConfig not taking effect
- Verify the Task references it: `spec.agentConfigRef.name` must match
- Check plugin structure: skills become `<plugin>/skills/<skill>/SKILL.md`
- For skills.sh: ensure the package source is valid `owner/repo` format

### Agent cannot push or create PRs
- Ensure the workspace secret has a valid `GITHUB_TOKEN`
- Verify the token has `repo` (and `workflow` if needed) permissions
- For GitHub Apps, check that `appID`, `installationID`, and `privateKey` are correct

## Supported Agent Types

| 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` |

## References

See the `references/` directory next to this file for complete YAML examples:

- `task.yaml` — Task patterns
- `workspace.yaml` — Workspace patterns
- `agentconfig.yaml` — AgentConfig patterns
- `taskspawner.yaml` — TaskSpawner patterns

Files in this skill

  • SKILL.md8.8 KB
  • references/agentconfig.yaml2.4 KB
  • references/task.yaml2.5 KB
  • references/taskspawner.yaml3.3 KB
  • references/workspace.yaml1.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.