---
title: "Cosmo, the assistant that knows your cluster | Coswarm"
description: "Cosmo is the assistant inside Coswarm. It reads your apps, logs and history to explain what went wrong, and proposes changes that run only after you approve them. Bring your own model: OpenAI, Anthropic, OpenRouter, Ollama or any OpenAI-compatible server."
canonical_url: "https://coswarm.dev/cosmo"
meta:
  "og:description": "Cosmo is the assistant inside Coswarm. It reads your apps, logs and history to explain what went wrong, and proposes changes that run only after you approve them. Bring your own model: OpenAI, Anthropic, OpenRouter, Ollama or any OpenAI-compatible server."
  "og:image": "https://coswarm.dev/og.png"
  "og:image:height": "630"
  "og:image:width": "1200"
  "og:title": "Cosmo, the assistant that knows your cluster · Coswarm"
  "twitter:image": "https://coswarm.dev/og.png"
---

> Index of every page on this site: [llms.txt](https://coswarm.dev/llms.txt)

Cosmo

# An assistant that knows your cluster, and asks first.

Cosmo lives in the panel. It reads your apps, their logs and their history to tell you what went wrong, and proposes the fix as a change you approve. It runs on the model you choose, with your key or on your own hardware.

[Install Coswarm](https://coswarm.dev/#install) How it stays safe

Off until an administrator turns it on. The panel works fully without it.

panel.acme.dev/cosmo

checkout went down after the deploy. Why?

4 reads · 3 s

- Read checkout: 0 of 2 replicas runningget\_app
- Read its tasks: 6 failed, “non-zero exit (1)”get\_app\_tasks
- Read the last 100 log linesget\_app\_logs
- Compared 2.2.4 with 2.3.0diff\_app\_versions

The new image reads its database address from `DATABASE_URL`, and checkout never had it: 2.2.4 built it from `DB_HOST`, `DB_USER` and `DB_PASSWORD`. Every replica exits at start with DATABASE\_URL is not set.

I can put the same address together from the values it already has:

**Set an environment variable on checkout**

set\_app\_env

**Medium risk**

| env DATABASE\_URL | postgres://checkout:•••@postgres:5432/shop |
| --- | --- |

checkout restarts with a rolling update; 2 replicas, one at a time.

Expires in 4:52Reject**Approve**

Approve or reject the proposed change, or write something else.

A conversation: asked why checkout went down, Cosmo reads the app, its tasks and logs, compares two versions, explains the missing DATABASE\_URL and proposes setting it, waiting for approval.

Where you meet it

## Not a chat box in a corner.

Cosmo is wired into the places where questions come up.

### **On the dashboard**

Each finding the server spots opens its own conversation. Cosmo’s answer becomes the “why”, its proposal the “fix”, approved on the spot.

### **Where something went wrong**

A rollout that stalled, a container killed for memory, an error line, an incident: each has an Explain that opens Cosmo with the context filled in.

### **Wherever you are**

A side panel on every page with ⌘J, its own page for long work, and “Ask Cosmo” in the command menu when a search finds nothing.

### **While you are away**

Watches check on something every 15 minutes to weekly, or when an app goes down, and tell you in the panel or in Slack, Discord or Mattermost.

What it can do

## 51 tools, and a short list of things it won’t.

Reads run on their own. Every write shows an approval card with its risk; low-risk ones can go ahead without asking, per conversation, if an administrator allows it.

**Reads **31 · no approval

Apps

list\_appsget\_appget\_app\_tasksget\_app\_logsget\_app\_statssample\_app\_statslist\_incidentsapp\_timelinediff\_app\_versions

Cluster

get\_swarm\_overviewlist\_containersget\_containerget\_container\_logsget\_disk\_usage

Images

list\_local\_imagessearch\_imageslist\_image\_tagsread\_image\_docscheck\_image\_updates

Platform

list\_projectslist\_volumeslist\_networkslist\_registrieslist\_secretslist\_domainsget\_trafficlist\_backupslist\_backup\_fileslist\_app\_configslist\_approvalsopen\_in\_panel

**Changes **20 · each one approved

Low risk

restart\_appprobe\_from\_apptake\_backup

Medium risk

scale\_appupdate\_app\_resourcesupdate\_app\_portsattach\_app\_networkattach\_app\_volumeset\_app\_envrollback\_appcreate\_appinstall\_composeadd\_app\_domainupdate\_app\_domainremove\_app\_domainprune\_imagesdelete\_backup\_file

High risk

deploy\_imagedelete\_appdelete\_volume

On purpose, never

No shell No SQL No writing files No users or roles No arbitrary HTTP

Safety

## Built so that a wrong answer can’t become a wrong change.

A model can be mistaken, or misled by what it reads. Cosmo is built around that.

### **Secrets stay on the server**

Private keys, tokens, cloud and API keys, JWTs and password variables are masked before anything reaches the model. A value you paste becomes a placeholder the server fills in when the change runs.

### **What it reads is data, not orders**

Logs and tool output are marked as untrusted, so a line in a log that says “ignore your instructions” stays a line in a log.

### **Your permissions, twice**

Cosmo can do only what your role can. Permissions are checked when the plan is made and again just before it runs. It can never approve anything itself.

### **A yes that expires**

An approval is a single-use token for you alone, bound to a hash of the plan, valid for ten minutes, five for high risk. If the app changed in between, nothing runs.

### **Four eyes stay human**

In areas held for a second person, Cosmo does not make the change. It takes you to the page in the panel where the request goes through review.

### **Limits you set**

Messages per minute per user, daily token budgets per user and in total, a read-only mode, and how long conversations and the change record are kept: 30 and 180 days by default.

Bring your own model

## Your key, or your own hardware.

Add a provider in Settings; it is checked to make sure the model can call tools before anyone uses it. Keys are stored encrypted and never come back to the browser. A helper model can write titles and summaries, and a second provider can step in when the first is down.

**OpenAI**

Responses API, nothing stored

**Anthropic**

Extended and adaptive thinking

**OpenRouter**

Any model it carries

**Ollama**

On your hardware, no key

**OpenAI-compatible**

vLLM, LM Studio, LiteLLM…

The conversation

## A chat that keeps up with the work.

- Edit a message or write a reply again, and move between versions
- Slash commands and @ mentions of apps
- Files and pictures attached to a message
- Charts and live app cards in the answer
- A plan it keeps for work in several steps
- Subtasks in conversations of their own
- Memory per user, and the administrator’s instructions
- Replies run on the server and survive a reload
- Pin, export as Markdown, share to read
- Model and effort chosen per conversation

## Let Cosmo meet your servers.

Install Coswarm, add a model in Settings, and ask it what is going on.

$`curl -fsSL https://coswarm.dev/install.sh | bash`

[See the panel](https://coswarm.dev/features) [ Meet Cosmo](https://coswarm.dev/cosmo)

```json
{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://coswarm.dev/cosmo#webpage","url":"https://coswarm.dev/cosmo","name":"Cosmo, the assistant that knows your cluster","description":"Cosmo is the assistant inside Coswarm. It reads your apps, logs and history to explain what went wrong, and proposes changes that run only after you approve them. Bring your own model: OpenAI, Anthropic, OpenRouter, Ollama or any OpenAI-compatible server.","isPartOf":{"@id":"https://coswarm.dev/#website"}},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://coswarm.dev/"},{"@type":"ListItem","position":2,"name":"Cosmo","item":"https://coswarm.dev/cosmo"}]}]}
```

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://coswarm.dev/#website","@type":"WebSite","description":"Coswarm turns your Linux servers into a Docker Swarm platform: deploys, domains with automatic HTTPS, databases and logs in one panel, free to self-host. Cosmo, its assistant, reads the cluster and proposes changes you approve.","name":"Coswarm","url":"https://coswarm.dev/"},{"@id":"https://coswarm.dev/cosmo#webpage","@type":"WebPage","description":"Cosmo is the assistant inside Coswarm. It reads your apps, logs and history to explain what went wrong, and proposes changes that run only after you approve them. Bring your own model: OpenAI, Anthropic, OpenRouter, Ollama or any OpenAI-compatible server.","name":"Cosmo, the assistant that knows your cluster","url":"https://coswarm.dev/cosmo","isPartOf":{"@id":"https://coswarm.dev/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://coswarm.dev/cosmo"]}]}]}
```

## Sitemap

See the full [sitemap](https://coswarm.dev/sitemap.md) for all pages.
