argo9s: TUI-монитор Argo CD в стиле K9s

Терминальный интерфейс (TUI) в стиле K9s для мониторинга приложений Argo CD в реальном времени.

Скриншоты

Офлайн-демо (без кластера): argo9s --demo

Список приложений
Граф ресурсов

Перегенерация ассетов (требуется VHS):

make build
PATH="$(go env GOPATH)/bin:$PATH" vhs docs/screenshots/demo.tape

Возможности

  • Два бэкенда: Kubernetes (kubeconfig / in-cluster) или HTTP API Argo CD (URL + токен)

  • Именованные подключения в ~/.argo9s/config.yaml с выбором при запуске (kubernetes, argocd-test, argocd-prod, …)

  • Отслеживание в реальном времени приложений (CRD watch или API stream/poll)

  • Объединённый и типизированные виды: Applications, ApplicationSets, AppProjects

  • UX в стиле K9s: j/k, фильтр /, команды :, справка ?

  • Фильтры по проекту, имени и статусу синхронизации

  • Граф ресурсов (g): дерево в стиле Argo UI (resource-tree API или живые RS/поды)

  • Действия (в неread-only-режиме): sync, refresh, suspend/resume, delete

  • По умолчанию — только чтение

  • --demo: офлайн-набор приложений для скриншотов / записей VHS

  • --no-color: монохромный TUI (также NO_COLOR=1 или noColor: true в конфиге)

Установка

Homebrew

brew install vvrnv/tap/argo9s

Go

go install github.com/vvrnv/argo9s/cmd/argo9s@latest

Готовый бинарник

Скачайте со страницы релизов.

Сборка из исходников

git clone https://github.com/vvrnv/argo9s.git
cd argo9s
make build
./bin/argo9s

Релизы публикуются автоматически по тегам v* через GoReleaser (GitHub Release + Homebrew-формула в vvrnv/homebrew-tap).

Подключения

1) CLI (одноразовое подключение через Argo CD API)

argo9s --server https://argocd.example.com --auth-token "$TOKEN"
argo9s --server https://argocd.example.com --auth-token "$TOKEN" --insecure
# токен также берётся из ARGOCD_AUTH_TOKEN

2) Профили в конфиге и выбор при запуске

argo9s config init          # создаёт пример ~/.argo9s/config.yaml
# отредактируйте подключения, токены укажите в переменных окружения
export ARGOCD_TEST_TOKEN=...
export ARGOCD_PROD_TOKEN=...
argo9s                      # выбор: kubernetes / argocd-test / argocd-prod
argo9s --connection argocd-prod
argo9s --pick               # принудительно показать список выбора

Пример ~/.argo9s/config.yaml:

defaultConnection: kubernetes
connections:
  - name: kubernetes
    type: kubernetes
  - name: argocd-test
    type: argocd
    server: https://argocd.test.example.com
    tokenEnv: ARGOCD_TEST_TOKEN
    readOnly: false
  - name: argocd-prod
    type: argocd
    server: https://argocd.prod.example.com
    tokenEnv: ARGOCD_PROD_TOKEN
    readOnly: true

readOnly на уровне подключения переопределяет глобальный параметр readOnly. Флаг --readonly в командной строке имеет наивысший приоритет, если передан явно.

3) Kubernetes / in-cluster (исходный режим)

argo9s --connection kubernetes
argo9s --context my-cluster -n argocd

Навигация

Клавиша Действие

j / k

Перемещение

g

Граф ресурсов (для Application)

l

Логи пода (на узле Pod); горизонтальная прокрутка в режиме логов/YAML

y

Live-YAML выбранного узла графа

e

Редактировать YAML в $EDITOR (не read-only)

p

Логи предыдущего контейнера (в режиме логов)

enter / d

Describe

/

Фильтр по имени

:

Команда

R

Синхронизировать приложение

f / F

Refresh / hard refresh

s / r

Suspend (manual) / resume (auto-sync)

CLI (autosync / sync)

# требуется подключение с readOnly: false или флаг --readonly=false
argo9s --connection argocd-test --readonly=false app autosync on  guestbook
argo9s --connection argocd-test --readonly=false app autosync off guestbook
argo9s --connection argocd-test --readonly=false app resume  guestbook
argo9s --connection argocd-test --readonly=false app suspend guestbook
argo9s --connection argocd-test --readonly=false app sync    guestbook
argo9s --connection argocd-test --readonly=false app refresh guestbook --hard
Клавиша Действие

ctrl+d

Удалить (с подтверждением)

?

Справка

Q / :q

Выход

Фильтры

:name guestbook       # фильтр по подстроке имени
:n mpi                # краткая форма
:name clear

:project default      # приложения в AppProject "default"
:p staging
:project clear

:sync outofsync       # только OutOfSync (жёлтый)
:sync synced
:outofsync
:sync clear

/текст — живой фильтр по подстроке в имени, пространстве имён, проекте и статусе.

Цвета: Synced+Healthy = зелёный · OutOfSync = жёлтый · Progressing = синий · Degraded = красный · Unknown = серый
Отключить: --no-color, NO_COLOR=1 или argo9s config set noColor true.

Граф ресурсов

  1. Выберите Application

  2. Нажмите g (или :graph)

  3. Перемещайтесь по узлам клавишами j/k, для возврата — esc

Компоновка соответствует Argo CD UI (слева → направо):

app ── cm
    ├─ svc
    └─ deploy ── rs ── pod

Управляемые ресурсы берутся из status.resources; ReplicaSets и поды загружаются в реальном времени из кластера через ownerReferences.

Команды

Команда Описание

:app / :appset / :appproject / :all

Переключить вид ресурсов

:project <name>

Фильтровать приложения по проекту Argo CD

:ns <namespace|all>

Фильтровать список по пространству имён

:graph

Открыть граф для выбранного Application

:readonly

Переключить режим только чтения

:nocolor

Переключить монохромный режим TUI

:ctx

Список контекстов Kubernetes

:q

Выход

Конфигурация

Хранится в ~/.argo9s/config.yaml:

argo9s config view
argo9s config set readOnly false
argo9s config set noColor true
argo9s config set namespace argocd
argo9s config set allNamespaces true

Как это работает

Два бэкенда, один TUI:

  • Kubernetes — динамический клиент отслеживает CRD Argo CD (applications / applicationsets / appprojects). Изменяющие действия патчат Application CR (аннотация refresh, .operation.sync, syncPolicy).

  • HTTP API Argo CD — список и отслеживание через серверный API (токен-аутентификация); sync/refresh/suspend выполняются через тот же API. Предпочтителен для полных деревьев ресурсов в кластерах назначения.

Благодарности

  • K9s — источник вдохновения для UX

  • Argo CD — движок GitOps

  • Bubble Tea — фреймворк для TUI

Лицензия

MIT

© 2026 meganuke