opskat

command module
v1.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 16, 2026 License: GPL-3.0 Imports: 51 Imported by: 0

README

English | 中文


OpsKat

Your one-stop server operations workbench
SSH and RDP, databases, object storage, Redis, Kafka, Kubernetes… everything ops has to touch, unified in a single cross-platform desktop app. And you can let AI execute supported operations in natural language, with the applicable policy, approval, and audit controls for each path.

Website · Docs · Download

Go   React   Wails   Platform

Telegram   QQ Group

OpsKat Screenshot

🧭 About

Managing servers usually means juggling a pile of tools — SSH clients, database GUIs, Redis managers, Kafka consoles — and constantly switching between them. OpsKat brings all of those everyday asset operations into a single interface, so one app is enough. On its own, that's already a full ops workbench.

On top of it sits a layer of AI: just say what you need in natural language, and the AI agent can use its registered tools to pull logs, run SQL, check cluster status, and more. Applicable operations use their policy and approval paths, while tool calls carry an audit trail and decision context where available.

If you find it useful, please give us a Star ⭐ — it means a lot!

⬇️ Install

Download

Grab the latest build for your platform — macOS, Windows, or Linux — from the Releases page. No Go/Node toolchain required: download and run. Step-by-step notes are in the installation docs.

First run

  1. Add an asset — an SSH/RDP host, database, object-storage account, Redis, and so on — or import from your SSH config / Tabby / WindTerm.
  2. Connect — open a terminal or remote desktop, run a query, or browse keys, collections, buckets, and objects.
  3. (Optional) Configure an AI provider, then just tell the agent what you need.

📦 Supported Assets

Category Assets
Servers & terminals SSH VNC RDP Local Terminal Serial
Databases MySQL PostgreSQL SQL Server SQLite Redis MongoDB etcd
Middleware Kafka Kubernetes
Object storage S3-compatible Object Storage Cloud Providers Self-hosted Object Storage

More asset types are on the way via the plugin system.

🖥️ A Complete Ops Workbench

Even before you turn on the AI, OpsKat is a full-featured terminal and asset manager:

  • Tree-structured grouping for every supported asset type
  • Split-pane terminal with customizable themes
  • Built-in RDP remote desktop with fit/actual-size views, fullscreen, special-key shortcuts, and text/file clipboard sync
  • SFTP file browser
  • VNC remote desktop tabs backed by noVNC with session bytes carried over Wails IPC
  • Jump host chain connections
  • SQL query editor and data browser for MySQL, PostgreSQL, SQL Server, and SQLite
  • Redis command execution with key browser
  • MongoDB collection browsing and query execution
  • Kafka cluster, topic, message, consumer group, ACL, Schema Registry, and Kafka Connect management
  • Object-storage browser for buckets, folders, objects, uploads/downloads, copy/move/delete, previews, and presigned URLs
  • Port forwarding and SOCKS proxy
  • Encrypted credential storage
  • Import from SSH config / Tabby / WindTerm

Proxy Chains

SSH and remote data assets can use an ordered proxy chain when direct access is not enough. A chain may combine:

  • SSH tunnel layers that reuse an existing SSH asset as the next hop
  • SOCKS5 proxy layers with optional username/password authentication
  • HTTP script tunnel layers compatible with DBX-style tunnel scripts (URL + token + timeout)

The same chain model is shared by SSH, SQL databases, Redis, MongoDB, Kafka, etcd, Kubernetes, VNC, RDP, and S3-compatible object-storage connections. A Kafka asset applies its chain to brokers, Schema Registry, and every Kafka Connect cluster. Local SQLite stays local; remote SQLite VFS reaches its file through the selected SSH asset, which can have its own proxy chain. Existing single SSH tunnel (sshTunnelId / ssh_asset_id) and SOCKS5 proxy settings are still read and are mapped to a one-layer chain when an asset is edited; once a new chain is saved, proxy_chain takes precedence.

Remote Desktop

VNC and RDP assets use built-in remote desktop capabilities without a separate bridge service. VNC is rendered through noVNC with session bytes carried over Wails IPC. RDP uses OpsKat's embedded RDP client and is rendered directly in an application tab.

  • VNC supports target credentials, proxy chains, text clipboard synchronization, and an optional SSH/SFTP file channel.
  • RDP supports resolution, domain, text clipboard synchronization, and direct file clipboard transfer through the embedded RDP implementation.

🤖 Let AI Operate for You

Configure an AI provider and you can describe what you need in plain language — the agent connects and does it for you:

  • "Show me the recent nginx error logs on web-01" → AI automatically SSHs in, runs the command, and returns the results
  • "Count users by status in the db-prod users table" → AI connects to the database via SSH tunnel and executes the SQL query
  • "List lagging Kafka consumer groups in kafka-prod" → AI checks Kafka metadata and group lag under policy control
  • "Check the health of the k3s cluster" → AI runs kubectl commands and summarizes node and pod status

How the AI works

  • Bring your own key — configure any OpenAI- or Anthropic-compatible provider; your API key is encrypted and stored locally.
  • Use almost any model — OpenAI, Anthropic (Claude), DeepSeek, Gemini, Qwen, GLM, Kimi, MiniMax… or a self-hosted/local endpoint (e.g. an OpenAI-compatible Ollama).
  • Direct connection — OpsKat talks to the model you configure directly; nothing is relayed through our servers, and you are not locked into any vendor.
  • You stay in control — the AI only proposes actions; every command runs from your machine against your servers, under the policy and audit controls below.

🛡️ Security & Audit

Giving AI permission to operate on your servers — how do you keep it safe?

  • Operation policies — SSH/serial commands, SQL statements, Redis, MongoDB, Kafka, Kubernetes, and etcd operations all support allow/deny lists. SQL is analyzed by a parser that automatically blocks dangerous operations like DELETE/UPDATE without WHERE clauses
  • Policy groups — Built-in templates (Linux read-only, dangerous command deny, etc.) plus custom user-defined groups
  • Pre-approved permissions — AI or opsctl can request a batch of command patterns upfront. Once approved, matching commands execute automatically without per-command confirmation
  • Audit logs — Every operation is automatically recorded: who, when, which server, what command, and the full decision trail

🎥 Demo

https://github.com/user-attachments/assets/2af6e52e-637c-4398-9c8b-8b39b4238b12

https://github.com/user-attachments/assets/035fc0df-230c-456b-87bd-8a4a125feaec

⌨️ opsctl — CLI & AI Coding Tool Integration

For CLI users and AI coding assistants. If you only use the desktop app, you can skip this.

OpsKat ships a standalone CLI tool (opsctl), primarily designed for AI coding assistants like Claude Code, Codex, and Gemini CLI. One-click skill installation from the desktop app teaches these AI assistants to use opsctl — so they can directly manage servers, check logs, query databases, and troubleshoot production issues.

When the desktop app is running, opsctl reuses its connection pool and approval workflow, with all operations subject to the same policy enforcement and audit logging.

You can also use it manually:

opsctl exec web-01 -- tail -n 100 /var/log/nginx/error.log
opsctl sql db-prod "SELECT status, COUNT(*) FROM users GROUP BY status"
opsctl ssh web-01

🛠️ Tech Stack

Desktop Wails v2 (Go + Web)
Frontend React 19 + TypeScript + Tailwind CSS
Backend Go 1.26, SQLite

🔧 Build from Source

For contributors. If you just want to use OpsKat, see Install above.

Prerequisites: Go 1.26+, Node.js 22+ with pnpm, Wails v2 CLI

make install        # Install frontend dependencies
make dev            # Development mode (hot reload)
make build          # Production build
make build-embed    # Production build with embedded opsctl
make build-cli      # Build opsctl CLI only

❓ FAQ

Is it free? Yes — OpsKat is open source under GPLv3.

Which AI models does it support, and do I need an API key? You bring your own key for any OpenAI- or Anthropic-compatible provider (OpenAI, Claude, DeepSeek, Gemini, Qwen, GLM, Kimi, and more). See How the AI works.

Does my data pass through your servers? No. OpsKat connects directly to the model endpoint you configure and to your own servers — nothing is relayed through us, and credentials are encrypted locally.

Can I use it without the AI? Absolutely. It is a complete terminal and asset manager on its own.

Does it work on an intranet or offline? Asset connections are direct, so they work on private networks. For AI features, point it at an internal or self-hosted model endpoint.


🤝 Contributing

We welcome all forms of contribution! Read the Contributing Guide for development setup, commit conventions, and the PR process, then check out the issues or submit a pull request.


📄 License

This project is open-sourced under the GPLv3 license.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd
devserver command
cmd/devserver/host.go
cmd/devserver/host.go
opsctl command
e2e
fixtures/ssh-mock command
Minimal SSH server mock for the e2e harness — just enough for the app's SSH "Test Connection" (a TCP dial + SSH handshake, no command) to pass against a hermetic in-harness server.
Minimal SSH server mock for the e2e harness — just enough for the app's SSH "Test Connection" (a TCP dial + SSH handshake, no command) to pass against a hermetic in-harness server.
internal
ai/aictx
Package aictx 提供 internal/ai 各子包共享的 context 键、决策原语与 slot 协议。
Package aictx 提供 internal/ai 各子包共享的 context 键、决策原语与 slot 协议。
ai/audit
Package audit 提供 AI/opsctl 工具调用的审计写入接口与默认实现。
Package audit 提供 AI/opsctl 工具调用的审计写入接口与默认实现。
app/ai
Package ai 实现 ai binder:会话管理、消息收发、provider 配置、AI 工具审批。
Package ai 实现 ai binder:会话管理、消息收发、provider 配置、AI 工具审批。
app/etcd
Package etcd 实现 etcd binder:KV 浏览、查询面板、连接测试。
Package etcd 实现 etcd binder:KV 浏览、查询面板、连接测试。
app/extension
Package extension 实现 extension binder:扩展安装/启停、tool 调用、snippet 管理。
Package extension 实现 extension binder:扩展安装/启停、tool 调用、snippet 管理。
app/external_edit
Package external_edit 实现远程文件外部编辑 binder: 仅做依赖装配和 IPC 转发,状态机/编码/审计等业务逻辑都下沉到 external_edit_svc。
Package external_edit 实现远程文件外部编辑 binder: 仅做依赖装配和 IPC 转发,状态机/编码/审计等业务逻辑都下沉到 external_edit_svc。
app/i18n
Package i18n 提供 binder 共用的语言上下文工具。
Package i18n 提供 binder 共用的语言上下文工具。
app/k8s
Package k8s 实现 k8s binder:集群/命名空间资源、Pod 详情与日志流。
Package k8s 实现 k8s binder:集群/命名空间资源、Pod 详情与日志流。
app/kafka
Package kafka 实现 kafka binder:Topic/Consumer Group/Schema/Connect/ACL 管理。
Package kafka 实现 kafka binder:Topic/Consumer Group/Schema/Connect/ACL 管理。
app/local
Package local 实现 local binder:本地终端连接、读写、尺寸调整。
Package local 实现 local binder:本地终端连接、读写、尺寸调整。
app/opsctl
Package opsctl 实现 opsctl binder:对 opsctl CLI 暴露的 Unix socket 桥(审批 + 资产 + SSH 池代理)。
Package opsctl 实现 opsctl binder:对 opsctl CLI 暴露的 Unix socket 桥(审批 + 资产 + SSH 池代理)。
app/oss
Package oss 实现 OSS(对象存储)binder:Bucket/对象浏览、连接测试。
Package oss 实现 OSS(对象存储)binder:Bucket/对象浏览、连接测试。
app/query
Package query 实现 query binder:SQL/Mongo/Redis 执行 + 三种面板连接缓存 + 表导出。
Package query 实现 query binder:SQL/Mongo/Redis 执行 + 三种面板连接缓存 + 表导出。
app/rdp
Package rdp implements the RDP binder.
Package rdp implements the RDP binder.
app/redis
Package redis 实现 redis binder:Redis 浏览/编辑(key 扫描、读写、TTL、慢日志等)。
Package redis 实现 redis binder:Redis 浏览/编辑(key 扫描、读写、TTL、慢日志等)。
app/serial
Package serial 实现 serial binder:串口连接、读写、重置。
Package serial 实现 serial binder:串口连接、读写、重置。
app/ssh
Package ssh 实现 ssh binder:SSH 终端、SFTP、端口转发。
Package ssh 实现 ssh binder:SSH 终端、SFTP、端口转发。
app/sshadapt
Package sshadapt 收纳 binder 之间共用的 SSH 适配器类型,避免循环依赖。
Package sshadapt 收纳 binder 之间共用的 SSH 适配器类型,避免循环依赖。
app/system
Package system 实现 system binder:设置、凭证、资产 CRUD、状态、字体、重启等控制面方法。
Package system 实现 system binder:设置、凭证、资产 CRUD、状态、字体、重启等控制面方法。
assettype
internal/assettype/registry.go
internal/assettype/registry.go
pkg/portable
Package portable 判定应用是否运行在便携模式。
Package portable 判定应用是否运行在便携模式。
pkg/socksdial
Package socksdial 提供基于 SOCKS5 代理的 TCP 拨号,供 SSH 与数据库连接共用。
Package socksdial 提供基于 SOCKS5 代理的 TCP 拨号,供 SSH 与数据库连接共用。
pkg/socksdial/socksdialtest
Package socksdialtest 提供测试用的极简 SOCKS5 服务器与 echo 服务,供 socksdial 与 connpool 测试共用。
Package socksdialtest 提供测试用的极简 SOCKS5 服务器与 echo 服务,供 socksdial 与 connpool 测试共用。
pkg/sshkeepalive
Package sshkeepalive runs an OpenSSH-style keepalive heartbeat over an ssh.Client (or any compatible Pinger), so long-lived SSH sessions don't get reaped by NAT/firewall idle timeouts.
Package sshkeepalive runs an OpenSSH-style keepalive heartbeat over an ssh.Client (or any compatible Pinger), so long-lived SSH sessions don't get reaped by NAT/firewall idle timeouts.
pkg/sshtuning
Package sshtuning holds the process-wide SSH/TCP connection tuning that is applied to every outbound SSH connection — both interactive terminal sessions (internal/service/ssh_svc) and pooled connections (internal/sshpool).
Package sshtuning holds the process-wide SSH/TCP connection tuning that is applied to every outbound SSH connection — both interactive terminal sessions (internal/service/ssh_svc) and pooled connections (internal/sshpool).
pkg/transfer
Package transfer 提供文件传输的通用进度原语:进度事件结构、唯一传输 ID 生成、 以及"节流 + 测速"的进度上报器。
Package transfer 提供文件传输的通用进度原语:进度事件结构、唯一传输 ID 生成、 以及"节流 + 测速"的进度上报器。
repository/asset_repo/mock_asset_repo
Package mock_asset_repo is a generated GoMock package.
Package mock_asset_repo is a generated GoMock package.
repository/conversation_repo/mock_conversation_repo
Package mock_conversation_repo is a generated GoMock package.
Package mock_conversation_repo is a generated GoMock package.
repository/extension_data_repo/mock_extension_data_repo
Package mock_extension_data_repo is a generated GoMock package.
Package mock_extension_data_repo is a generated GoMock package.
repository/extension_state_repo/mock_extension_state_repo
Package mock_extension_state_repo is a generated GoMock package.
Package mock_extension_state_repo is a generated GoMock package.
repository/group_repo/mock_group_repo
Package mock_group_repo is a generated GoMock package.
Package mock_group_repo is a generated GoMock package.
repository/policy_group_repo/mock_policy_group_repo
Package mock_policy_group_repo is a generated GoMock package.
Package mock_policy_group_repo is a generated GoMock package.
repository/snippet_repo/mock_snippet_repo
Package mock_snippet_repo is a generated GoMock package.
Package mock_snippet_repo is a generated GoMock package.
service/conntest
Package conntest 维护资产「表单连接测试」的 runtime 分发注册表。
Package conntest 维护资产「表单连接测试」的 runtime 分发注册表。
service/etcd_svc/mock_kv
Package mock_kv is a generated GoMock package.
Package mock_kv is a generated GoMock package.
service/localterm_svc
Package localterm_svc 管理本地 shell(PTY)终端会话。
Package localterm_svc 管理本地 shell(PTY)终端会话。
service/oss_svc/mock_ossclient
Package mock_ossclient is a generated GoMock package.
Package mock_ossclient is a generated GoMock package.
service/sessionid
Package sessionid mints terminal session IDs with a random instance segment.
Package sessionid mints terminal session IDs with a random instance segment.
service/testreg
Package testreg 维护资产「测试连接」操作的可取消上下文注册表。
Package testreg 维护资产「测试连接」操作的可取消上下文注册表。
service/zmodem_svc
Package zmodem_svc 提供 ZMODEM(lrzsz) 传输的本地文件 I/O 桥。
Package zmodem_svc 提供 ZMODEM(lrzsz) 传输的本地文件 I/O 桥。
pkg
client
Package client is the public Go API for embedding opskat capabilities into other binaries (mobile clients via gomobile, future SDK consumers, etc.).
Package client is the public Go API for embedding opskat capabilities into other binaries (mobile clients via gomobile, future SDK consumers, etc.).
extension
Package extension provides the core extension framework for OpsKat.
Package extension provides the core extension framework for OpsKat.
Package skillplugin provides embedded skill/plugin content for opsctl.
Package skillplugin provides embedded skill/plugin content for opsctl.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL