Repository navigation
Releases: vahidid/opsdeck
Release list
opsdeck 0.5.0
Desktop app
- Graceful quit with a shutdown screen. Quitting (the tray, ⌘Q, closing the window
without a tray, an update, or the session ending) shows Shutting down opsdeck with each
step while agent sessions end, port forwards and MCP servers close, VPN clients log out
of their gateways and remove their routes, and the vault locks. - Tray icon on Linux and Windows. Open opsdeck / Quit opsdeck; closing the window
hides it there, so VPNs, forwards and the MCP server keep running. On macOS the app
stays in the Dock when its window is closed. - Your shell's
PATHon Linux. Started from the desktop's menu, the app now reads
PATHfrom your login shell (as on macOS) and adds~/.local/bin, so agent CLIs such
asclaudeare found. - Claude Desktop in Agent access, and every stdio setup uses the full path of the
running opsdeck (/usr/bin/opsdeck-desktopon Linux), which agents started from a
desktop menu can find without yourPATH.
VPN
- Touch ID for system-mode VPNs on macOS, with nothing to set up. The first time sudo
needs your password, opsdeck asks for it once, checks it and keeps it in the vault
(macOS sudo password); from then on it asks for your fingerprint and gives sudo the
password itself. Without Touch ID, or when you cancel, sudo asks in the password dialog.
The Touch ID for sudo button in App settings is gone: macOS 27 keeps apps out of
/etc/pam.d, so it could not work without Full Disk Access.
Fixed
-
OpenConnect and WireGuard system tunnels on macOS. opsdeck named the tunnel device
oc-<profile>/od-<profile>, which macOS refuses ("must match 'utun%d'"); macOS now
picks theutunNdevice and opsdeck finds it by its address. -
System-mode VPNs ask for your sudo password. opsdeck ran VPN clients with
sudo -n,
so without passwordless sudo a system (TUN) VPN failed with "sudo: a password is
required". sudo now asks in the system's password dialog (macOS, or zenity, kdialog or
an ssh-askpass on Linux desktops), and a cancelled dialog or a wrong password is the
connection's error.
Install
| System | Download |
|---|---|
| Windows 10/11 (x64) | opsdeck-0.5.0-windows-x64-setup.exe (or the portable .exe) |
| macOS 12+ (Apple silicon and Intel) | opsdeck-0.5.0-macos-universal.dmg |
| Debian / Ubuntu (x86_64) | opsdeck_0.5.0_amd64.deb |
| Fedora / RHEL / openSUSE (x86_64) | opsdeck-0.5.0-1.x86_64.rpm |
CLI only (opsdeck serve, opens in the browser) |
opsdeck-cli-0.5.0-<os>-<arch> |
Or run the install script — see Install.
Already installed? opsdeck shows the update in its sidebar and installs it for you.
SHA256SUMS.txt is signed with the opsdeck release key. To check a download yourself:
minisign -Vm SHA256SUMS.txt -P RWRns3uLxhaLFYGyA2gOUMh1YqtebJGtbVhNL1qWwsaoi2g6Mk6g4+XN
sha256sum --check --ignore-missing SHA256SUMS.txt
opsdeck 0.4.0
A new interface — a menu that stays short as opsdeck grows, a violet that marks the agent,
resources picked by product, and appearance you can customize. Claude Code, Codex, Cursor
or any MCP client can now work through opsdeck, with the same approvals and audit as
opsdeck's own agent; releases are signed, and the file formats are versioned.
Other agents use opsdeck
- opsdeck is an MCP server for the agent you already use. Claude Code, Codex, Cursor,
Gemini CLI, VS Code or any MCP client gets a workspace's tools at
http://127.0.0.1:7788/mcp/ext(or over stdio withopsdeck mcp, which finds the
running app). App settings › Agent access makes a key per agent and workspace
(read-only, ask or auto) and shows the setup for that agent. Every call goes through
the same risk checks, permission rules, approvals, redaction and audit as the built-in
agent's, in a session of its own on the Agent page; a change waits there for your
approval. Keys are stored hashed and can be revoked at once. See
docs/agents.md. - The opsdeck skill teaches such an agent to work through opsdeck: look first, prefer
the specific tools, expect approvals, leave a report. For Claude Code it comes as a
plugin (/plugin marketplace add vahidid/opsdeck,/plugin install opsdeck@opsdeck)
that also connects the MCP server;opsdeck skill install claude-code|codex|gemini|cursor
writes it for other agents.
Stability and security
- Stable file formats. Workspace folders now say
apiVersion: opsdeck/v1; an opsdeck
refuses a folder or vault from a newer version instead of misreading it, and upgrades
older ones on save. docs/schema.md documents every resource kind,
docs/compatibility.md what stays compatible and how anything is
deprecated. - Signed releases.
SHA256SUMS.txtis signed with the opsdeck release key
(minisign). The updater installs nothing that is not signed by that key for that
version;install.shchecks the signature too whenminisignis installed. With
certificates configured, the macOS app is notarized and the Windows.exefiles are
Authenticode-signed. See docs/releasing.md. - A wrong master password now says so instead of sending you to the "open the link from
your terminal" screen. - Dialogs and drawers are announced as dialogs to screen readers.
Testing
- Browser tests (Playwright,
e2e/) drive the real UI against a real opsdeck with
SSH hosts and a scripted model, in CI: unlocking, adding a resource, search,
customizing, the phone layout, an agent change that waits for approval, connecting an
outside agent. The README screenshots are made the same way (e2e/screenshots).
Interface
- New layout — a rail of icons for the five groups (Workspace, Infrastructure, Deploy,
Library, Security) opens their sections in a panel beside it, so the menu shows a handful
of entries instead of every section at once; sections can be pinned to the top. The top
bar holds the tabs, search (Ctrl/⌘+K, now with actions such as Add resource) and the
agent (Ctrl/⌘+J). Each pane scrolls on its own and the window never does. - The agent has its own colour — violet marks everything that hands work to the agent:
the rail and top-bar buttons, Ask the agent on the overview (with a draft box), the
composer and Ask the agent / Explain errors on Docker, Logs, VPN, Kubernetes,
Databases, Domains, Certificates, Deployments, Ansible and the resource editor. - Add resource by product — the picker lists the products you know (Cisco AnyConnect,
GlobalProtect, FortiGate, PostgreSQL, Redis, Grafana, GitLab, Argo CD…) with their logos
and colours, searchable and by category, and opens the form already set up for that
product (an OpenConnect resource withprotocol: gpfor GlobalProtect). The editor is a
wider dialog with a live YAML preview; resources show their product's logo in the list. - Customize — theme (dark, light, system), accent (the workspace colour or a fixed one),
density, interface size and corners, the menu layout (icons + panel or icons only), the
pinned sections and which sections the menu shows; saved in the browser. - A modern Overview (health, the non-empty resource kinds, topology, networks, activity),
Inter and JetBrains Mono bundled, and narrower windows stack list/detail pages.
Workbench
- Deployments — a workspace's Portainer, Argo CD and Komodo become resources
of the workspace (DeployPlatform: URL, a token in the workspace's vault, reached through
its VPN or jump host like any resource;targetslimits a shared platform to the
workspace's own stacks or applications). A Deployments page lists what each deploys —
Portainer stacks, Argo CD applications, Komodo stacks and deployments — with health, sync
status, services, history, logs and what a deploy would change (Argo CD's live vs Git,
Komodo's deployed vs latest files), and runs deploy / sync, stack file updates, rollback,
refresh, restart, start, stop and pull, each confirmed (the name typed on a protected
environment or with prune) and recorded in the activity journal.
Agent
deploytool — reads the workspace's deployment platforms (platforms, targets, status,
logs, diff, file) and deploys, rolls back, restarts or updates a stack file after approval,
with the target's state and what changes on the card; a sync with prune is destructive.
Install
| System | Download |
|---|---|
| Windows 10/11 (x64) | opsdeck-0.4.0-windows-x64-setup.exe (or the portable .exe) |
| macOS 12+ (Apple silicon and Intel) | opsdeck-0.4.0-macos-universal.dmg |
| Debian / Ubuntu (x86_64) | opsdeck_0.4.0_amd64.deb |
| Fedora / RHEL / openSUSE (x86_64) | opsdeck-0.4.0-1.x86_64.rpm |
CLI only (opsdeck serve, opens in the browser) |
opsdeck-cli-0.4.0-<os>-<arch> |
Or run the install script — see Install.
Already installed? opsdeck shows the update in its sidebar and installs it for you.
SHA256SUMS.txt is signed with the opsdeck release key. To check a download yourself:
minisign -Vm SHA256SUMS.txt -P RWRns3uLxhaLFYGyA2gOUMh1YqtebJGtbVhNL1qWwsaoi2g6Mk6g4+XN
sha256sum --check --ignore-missing SHA256SUMS.txt
opsdeck 0.3.0
The agent works like a coding harness — web access, subagents, hooks, background tasks,
canary rollouts and headless runs — and the workbench manages domains and DNS at
Cloudflare and ArvanCloud and TLS certificates from Let's Encrypt; FortiGate and AnyConnect
VPNs that ask for one-time codes or a group now connect.
Agent
- Web access —
web_search(DuckDuckGo without a key, or SearXNG, Brave, Tavily),
web_fetch(pages as Markdown, in parts; GitHub files as raw) andsoftware_lookup
(end-of-life dates from endoflife.date, known vulnerabilities from OSV.dev, GitHub releases).
Only public addresses are reached — every redirect and resolved IP is checked, so a page
cannot point the agent at opsdeck, this computer, the local network or cloud metadata.
Sites outside the allowed list (documentation sites built in, plus your own) ask once;
pages are marked untrusted and the next change after web content asks, in every mode; a
query that names a workspace address asks first. App settings → Web access sets the
default, the search backend and a proxy; a workspace can lower it or route the web through
one of its VPNs, and a workspace that allows only local models has it off. - Workspace APIs, metrics and logs —
http_requestcalls the API of a panel (Grafana,
Alertmanager, Harbor, Proxmox, an admin API…) through its VPN or jump host with its vault
login or token; writes ask like other changes. New resource kinds Prometheus, Loki
and Elasticsearch/OpenSearch withmetrics_query(PromQL, ranges drawn as a chart,
alerts, targets) andlogs_query(LogQL or a query string, lines coloured by level). dnstool — the agent reads and changes the DNS records of the workspace's domains
through the connected Cloudflare or ArvanCloud account (it never sees the token):zones,
records,set(create or change one record; the approval card shows the zone-file line
before and after, values left out are kept) anddelete(destructive; needs an unambiguous
record). Offered only when the workspace has aDomain; results come with a records table.certificatetool — the agent lists the workspace's certificates (issued, expiry,
due), shows one, issues or renews it (the ACME flow with its log as the result) and deploys
chain and key to a host from the vault without seeing the key, then reloads withexec.- Subagents —
delegatehands work to aninvestigator(read-only; several run in
parallel), adeployer(changes with the usual approvals) or the workspace's own
agents/*.md, each with its own context and optionally a cheaper model. Their steps,
calls and approvals show inside the call. - Hooks — commands before and after tool calls and at the end of a turn, with the event
as JSON on stdin: block a call (exit 2), make it ask, keep an audit log, post to a chat.
In App settings and per workspace; workspace hooks run only after you trust them here. - Background tasks —
execandlocal_execcan run a command in the background; the
session is told when it ends or prints a matching line, and an idle session picks it up by
itself.taskslists, reads, waits for and stops them; so does the session header. - Canary rollouts — a change over several hosts can run on one host first; a second card
then asks to continue on the rest or stop. - Waiting, asking, planning —
wait_for(port, URL, command output, Kubernetes rollout)
instead of sleep loops;ask_userasks a multiple-choice question in the chat;todokeeps
a live checklist above the message box. - Sessions — fork a session (or from one of your messages, to edit and resend it), export
it as a report, runbook or skill,!command(or!@host command) to run something
yourself, and slash commands: the built-in ones and the workspace's own prompt templates in
commands/*.md. - Headless runs —
opsdeck run -p "…" --ws acmefor cron and CI, with text, JSON or
streamed JSON output; anything that would ask is denied. - Model policy — a workspace can limit its sessions to some models (e.g.
ollama/*). - Faster, leaner loop — the reads of one step run in parallel; a long output is kept in
full and read in parts withread_outputinstead of being cut; tools are offered only
when the workspace has what they work on. - The chat — tool results come with views: charts, log lines, search results, the page
read, HTTP status, end-of-life tables and vulnerabilities, with the text the agent got one
click away.
Workbench
- Domains and DNS — Connectors → DNS & CDN connects a Cloudflare or ArvanCloud
account with an API token (checked against the provider, stored in the vault; an API URL
and a proxy under Advanced for networks where the provider is not reachable directly).
A new Domains page per workspace: add a zone by picking it from the account (aDomain
resource that holds only the zone and, optionally, the connector), see its status, plan,
name servers (and whether the registrar still points elsewhere), and its records in one
shape whatever the provider — type, name relative to the zone, content, TTL, priority,
proxied through the CDN, comment — with filters, an editor with hints per type, and
deletion that asks (the full name must be typed on a protected environment). ArvanCloud's
balanced A records and lowercase types, Cloudflare's SRV/CAA data and automatic TTL are
handled. Every record change is in the activity journal — see docs/dns.md. - TLS certificates — a new Certificates page and
Certificateresource: domains
(wildcards included), the CA (Let's Encrypt, its staging, Buypass, or any ACME directory),
contact email, key type, when to renew. Issue runs the dns-01 challenge through the DNS
connectors (TXT records created, checked on the zone's name servers, removed afterwards)
with a live log, and stores the chain and key in the vault (vault://<ws>/cert-<name>,
with readable expiry and fingerprint fields). The page shows what is valid, due or expired
and why; Deploy writes the files to a host over SFTP (key 0600; nginx, Apache and HAProxy
layouts) and can reload the service; Renew automatically renews due certificates while
opsdeck runs unlocked. All audited — see docs/certificates.md. - One-time VPN codes by SMS or email — FortiGate VPNs (OpenConnect or openfortivpn)
that send a code for every login now connect: opsdeck logs in itself and, when the gateway
asks for the code, shows a prompt on any page (and on the VPN page) with the gateway's
message; Persian digits are fine. A TOTP secret on the login answers it by itself, and so
can your phone: forward the gateway's SMS to an ntfy topic (App settings → One-time VPN
codes, with a test) or let a local command print the code. A tunnel that drops connects
again with the same session, without a new code, while the gateway keeps it. The agent
asks you for the code instead of failing. Untrusted FortiGate certificates now show the
pin to set before anything else runs. - AnyConnect groups and second factors — Cisco ASA/FTD gateways (and the other
openconnect gateways) that ask for a GROUP or a code after the password now connect,
also those with the old/+webvpn+/login: opsdeck answers openconnect's questions itself.
The group comes from the profile, or you pick it from the gateway's list in the same prompt
as codes; a second password or challenge (Answer:, Response:) gets the login's TOTP
code, or the code you enter or forward from your phone, and is asked for again when wrong.
The TOTP secret is no longer on openconnect's command line (nor in the VPN log).
Install
| System | Download |
|---|---|
| Windows 10/11 (x64) | opsdeck-0.3.0-windows-x64-setup.exe (or the portable .exe) |
| macOS 12+ (Apple silicon and Intel) | opsdeck-0.3.0-macos-universal.dmg |
| Debian / Ubuntu (x86_64) | opsdeck_0.3.0_amd64.deb |
| Fedora / RHEL / openSUSE (x86_64) | opsdeck-0.3.0-1.x86_64.rpm |
CLI only (opsdeck serve, opens in the browser) |
opsdeck-cli-0.3.0-<os>-<arch> |
Or run the install script — see Install.
Already installed? opsdeck shows the update in its sidebar and installs it for you.
opsdeck 0.2.0
Databases in the workbench and for the agent, workspaces you can move to another machine
as one encrypted file, and far fewer approval prompts for read-only commands.
Workbench
- Databases — a new page for the PostgreSQL, MySQL, MariaDB, MongoDB and Redis databases
of a workspace, reached through its VPNs and jump hosts or an SSH tunnel to the database's
host, with the login from the vault: the databases on the server, tables and views,
collections or keys with estimated sizes, their structure (columns and indexes, fields
inferred from sampled documents, a key's type, TTL and memory), and an editor for SQL,
mongosh-style queries or redis-cli commands (highlighting, completion, Ctrl/⌘-Enter,
history). Reads cannot change data (a read-only transaction for SQL; only read operations
and commands for MongoDB and Redis); a script that is not a read is shown with its risk for
confirmation (destructive ones on a protected environment ask for the database's name),
runs as one transaction where the engine has one, and is recorded in the activity journal. - Results grid — virtualized rows, resizable and sortable columns, a row filter, wrapped
or single-line cells and a JSON view. Double-click a cell (or press Enter) for the whole
value — up to 64K characters, JSON indented, with search — or open the whole row; copy as
tab-separated, CSV or JSON, or download a CSV or JSON file. - Export and import a workspace — workspace settings export the workspace (hosts and
resources, docs, skills, scripts, Ansible projects) and the items of its vault scope as one
file encrypted with a password you choose; New / import workspace → Import export file
opens it on another machine and stores the secrets in that vault under its own master
password. Agent sessions, reports, artifacts and Git working copies stay behind.
Agent
databasetool — the agent queries workspace databases with the vault login instead
of running psql, mysql, mongosh or redis-cli with passwords on a host: databases, tables
(collections, keys), describe, query. Reads need no approval; changes go to the approval
card with their script.- Fewer approvals for reads on servers. The command classifier knows many more read-only
commands and forms (shell builtins such asset -eandread,awkconditions,curl -o /dev/null,dpkg -l, storage, firewall and certificate status tools, cloud CLIs'listand
describe), classifiesdocker exec,docker compose exec,kubectl execandfind -exec
by the command they run, and evaluates loop variables with their literal values. Unknown
values are tried with hostile ones, so a read stays a read only if it is one whatever they
are. In a set of 80 everyday read commands, 47 used to ask for approval; none do now. - Permission rules match each command of a script. An
allowrule forexeccovers a
script only when every command in it that is not a read matches, sosystemctl status*no
longer allowssystemctl status x; rm -rf /.askanddenyrules apply when any command
matches. - Model lists from the CLI — Settings asks each local agent which models your login can
use (Claude Code, Codex, Gemini CLI, opencode and other ACP agents) and shows them with
their names and descriptions to tick; API providers list their models from the API
(Anthropic, OpenAI, OpenRouter, Ollama, LM Studio…). The model picker shows these names,
grouped by provider. - ACP agents (opencode, Qwen Code, Copilot CLI…) now run with the chosen model; before,
only Gemini CLI honoured it.
Install
| System | Download |
|---|---|
| Windows 10/11 (x64) | opsdeck-0.2.0-windows-x64-setup.exe (or the portable .exe) |
| macOS 12+ (Apple silicon and Intel) | opsdeck-0.2.0-macos-universal.dmg |
| Debian / Ubuntu (x86_64) | opsdeck_0.2.0_amd64.deb |
| Fedora / RHEL / openSUSE (x86_64) | opsdeck-0.2.0-1.x86_64.rpm |
CLI only (opsdeck serve, opens in the browser) |
opsdeck-cli-0.2.0-<os>-<arch> |
Or run the install script — see Install.
Already installed? opsdeck shows the update in its sidebar and installs it for you.
opsdeck 0.1.0
The first release: a local workbench and AI agent harness for infrastructure, as a
desktop app for Windows, macOS and Linux and as a CLI that serves the same UI to your
browser.
Workbench
- Workspaces per project — hosts, groups, VPN profiles, jump hosts, web panels, Git
repositories, databases, Kubernetes clusters, docs and runbooks as plain YAML and
Markdown, with no secrets in them. - Vault — local and encrypted (Argon2id → XChaCha20-Poly1305): SSH keys, logins with
TOTP, API tokens, kubeconfigs, VPN configs, certificates. - VPNs — WireGuard, Tailscale/Headscale, NetBird, OpenVPN, AnyConnect/ocserv,
FortiGate, GlobalProtect and more, in userspace or system mode, with single sign-on. - SSH terminals, remote files, host stats, live logs and port forwards — through VPNs
and jump hosts automatically. - Docker (containers, Compose, Swarm, volumes), Kubernetes (every resource type,
logs, exec, apply with diff, rollouts, Helm) and Ansible (editor with visual views,
Ansible Vault, runs with live logs). - Git repositories with GitHub/GitLab connectors and merge requests, a topology
map, a script library and 20 built-in skills.
Agent
- Works with Anthropic, OpenAI-compatible APIs, OpenRouter, Ollama and LM Studio, or a
local agent CLI you are signed in to (Claude Code, Codex, Gemini CLI, ACP agents). - Every tool call classified and approved by mode (Plan / Ask / Auto / Full), secrets
redacted from everything the model sees, a hash-chained audit journal.
App
- Desktop app with installers for each system; the sidebar groups sections and opens
each in its own tab. - Updates from inside the app: it checks GitHub releases, verifies the download against
the release checksums, installs it and restarts.
Install
| System | Download |
|---|---|
| Windows 10/11 (x64) | opsdeck-0.1.0-windows-x64-setup.exe (or the portable .exe) |
| macOS 12+ (Apple silicon and Intel) | opsdeck-0.1.0-macos-universal.dmg |
| Debian / Ubuntu (x86_64) | opsdeck_0.1.0_amd64.deb |
| Fedora / RHEL / openSUSE (x86_64) | opsdeck-0.1.0-1.x86_64.rpm |
CLI only (opsdeck serve, opens in the browser) |
opsdeck-cli-0.1.0-<os>-<arch> |
Or run the install script — see Install.
Already installed? opsdeck shows the update in its sidebar and installs it for you.