AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A local workbench and AI agent for your infrastructure: SSH, VPNs (WireGuard, Tailscale, OpenVPN…), Docker, Kubernetes, Ansible and an encrypted vault, with an agent that asks before it changes anything. Windows, macOS, Linux.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗opsdeck is an AI agent harness for infrastructure. It works like Claude Code or opencode,
but its world is servers, networks and VPNs, containers, clusters and logs instead of a
code repository. It is also a complete local workbench that is just as useful without
AI. Everything runs on your computer: a desktop app for Windows, macOS and Linux, or
opsdeck serve with the UI in your browser.
Download the latest release for your system from Releases:
| System | File |
|---|---|
| Windows 10/11 (x64) | opsdeck-<version>-windows-x64-setup.exe (or the portable .exe) |
| macOS 12+ (Apple silicon and Intel) | opsdeck-<version>-macos-universal.dmg |
| Debian, Ubuntu (x86_64) | opsdeck_<version>_amd64.deb |
| Fedora, RHEL, openSUSE (x86_64) | opsdeck-<version>-1.x86_64.rpm |
| CLI only (any of the above, plus Linux arm64) | opsdeck-cli-<version>-<os>-<arch> |
Or let a script pick the right file, check its checksum and install it:
# Linux and macOS
curl -fsSL https://vahidid.github.io/opsdeck/install.sh | sh
# only the CLI, into ~/.local/bin
curl -fsSL https://vahidid.github.io/opsdeck/install.sh | sh -s -- --cli
# Windows (PowerShell)
irm https://vahidid.github.io/opsdeck/install.ps1 | iex
The builds are not code-signed yet. The first time you open opsdeck on macOS, right-click the app and choose Open. On Windows, SmartScreen asks once: choose More info → Run anyway.
Updates: opsdeck checks GitHub for new releases and shows an Update available box
in the sidebar. One click downloads the update and checks it against the release's
SHA256SUMS.txt and that file's signature by the opsdeck release key
(how to check it yourself), then installs it the way you
installed opsdeck and restarts:
.deb or .rpm package on Linux, after your passwordYou can turn the check off, or check now, under App settings → Updates.
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: SSH through its VPNs and jump hosts, Docker, Kubernetes, databases, logs, metrics, DNS, certificates and deployments. opsdeck keeps the credentials and checks, redacts and logs every call. A change waits until you approve it in opsdeck.
In opsdeck: App settings › Agent access › Connect an agent. Pick the workspace and a mode (Read-only, Ask or Auto). opsdeck shows an access key and the exact setup for your agent.
Add the server to your agent, e.g. for Claude Code:
claude mcp add --scope user --transport http opsdeck-acme http://127.0.0.1:7788/mcp/ext \
--header "Authorization: Bearer odk_…"
Over stdio instead: OPSDECK_TOKEN=odk_… opsdeck mcp.
Install the skill, which teaches the agent how to work through opsdeck (look first, expect approvals, leave a report):
# Claude Code: the plugin brings the skill and the MCP server, and asks for the key
/plugin marketplace add vahidid/opsdeck
/plugin install opsdeck@opsdeck
# or for any agent
opsdeck skill install claude-code # or codex, gemini, cursor, dir --dir PATH
The agent's calls show up in a session of their own on the Agent page, where you approve them. The setup for Codex, Cursor, Gemini CLI and VS Code, the modes and the security model are in docs/agents.md.
gh/glab login,
browser sign-in or a token from a pre-filled page), then add the repositories that hold
your deployment files to a workspace by picking them from a list — also behind a VPN. Working copies live in the workspace; a
Repositories page with files, editor, changes, history, branches, pull/push and merge
requests (create, comment, merge, CI status). The agent works the same way: branch →
edit → commit → push → merge request, with approvals on push and merge. Repositories can
be documentation for the agent — see docs/git.md.dns tool reads zones and records and changes them with the record before and
after on its approval card — see .When you first open opsdeck, it asks you to create the vault (master password; there is no recovery). Then:
acme.via
if they sit behind a bastion or VPN. Add a WireGuard network by storing the
.conf as a VPN config vault item.Without any model configured everything except the Agent page works.
Requirements: Go 1.24+ (the toolchain auto-downloads 1.27) and Node 20+. For VPNs, these are optional: openvpn, openconnect (+ ocproxy), openfortivpn, wireguard-tools.
make build # builds the web UI and bin/opsdeck
bin/opsdeck # starts on http://127.0.0.1:7788 and opens the browser
make desktop # the desktop app (needs the Wails CLI), see docs/desktop.md
make demo
bin/opsdeck-demo -pubkey "<public key from a vault ssh-key>"
starts two local SSH servers (a bastion and an app host reachable only through it) and a scripted model endpoint (OpenAI-compatible), and prints their addresses.
opsdeck [serve] [--port 7788] [--no-open] start the server and UI
opsdeck run -p "prompt" --ws <workspace> run the agent headless (needs a running opsdeck)
opsdeck mcp MCP server for other agents over stdio (OPSDECK_TOKEN=odk_…)
opsdeck skill install <agent> install the opsdeck skill for claude-code, codex, gemini, cursor
opsdeck url print the login link
opsdeck paths show where data is stored
The server only listens on 127.0.0.1. The login link carries a token (stored in the
state directory); the browser keeps it as an HttpOnly cookie. Requests with a foreign
Host or Origin are refused.
| What | Where (Linux; macOS/Windows use their app-data folders) |
|---|---|
| Vault | ~/.local/share/opsdeck/vault.db |
| Workspaces — inventory, docs, runbooks, agent reports, memory, sessions | ~/.local/share/opsdeck/workspaces/<name>/ (or any imported folder); see docs/workspace.md |
| Audit journal | ~/.local/state/opsdeck/audit/ |
| Settings | ~/.config/opsdeck/config.yaml |
OPSDECK_HOME=/some/dir puts everything under one directory.
make test # Go tests + TypeScript typecheck
cd web && npm run dev # UI dev server on :5173
bin/opsdeck --dev-origin http://localhost:5173 # backend for the dev server
The Go test suite runs real SSH servers (exec, PTY, SFTP, jump hosts), userspace
WireGuard peers, a stdio MCP server and scripted models — no external infrastructure
needed. The Docker and Kubernetes integration tests also run against a local dockerd and
k3s cluster when one is present (OPSDECK_TEST_KUBECONFIG), the Databases tests against
PostgreSQL, MySQL/MariaDB, MongoDB and Redis servers (OPSDECK_TEST_POSTGRES,
OPSDECK_TEST_MYSQL, OPSDECK_TEST_MONGO, OPSDECK_TEST_REDIS =
user:password@host:port/db, as CI does), and the Ansible tests against an installed
ansible-core; they are skipped otherwise.
The browser tests in e2e/ drive the built UI with Playwright against a real
opsdeck (tools/e2e: a fresh data folder, local SSH hosts, a scripted model): unlocking,
adding a resource, search, customizing, an agent change that waits for approval, and
connecting an outside agent.
cd web && npm run build && cd ../e2e
npm ci && npx playwright install chromium
npx playwright test
The README screenshots come from the demo workspace of tools/e2e -demo (see
e2e/screenshots.config.ts): npx playwright test -c screenshots.config.ts there
rewrites docs/assets/screenshot-*.png.
ocproxy for OpenConnect userspace mode); Tailscale, NetBird and
WireGuard are built in. OpenVPN and openfortivpn only run in system mode.git installed (and ssh for SSH URLs). Repository hooks don't
run in opsdeck's working copies.docker CLI on the host over SSH (with sudo -n when the
SSH user is not in the docker group); Compose needs the docker compose plugin (v2)..ppk keys must be converted to OpenSSH format first.exec auth plugins run those plugins on this machine.ansible-core (and ssh) on this computer; Windows needs WSL. Hosts of the
generated workspace inventory must log in with an SSH key (password logins would need
sshpass).Bug reports, ideas and pull requests are welcome; see CONTRIBUTING.md. Please report security problems privately as described in SECURITY.md.
opsdeck is released under the MIT License. The built-in skills from
wshobson/agents keep their own MIT license
(internal/skills/library/LICENSE-wshobson-agents).
deploy
tool does the same, with the target's state and the diff on its approval card — see
docs/deployments.md.certificate tool does the same without ever seeing the
key — see docs/certificates.md.topology.yaml,
exported as Markdown for any AI; the agent reads it, and proposes and makes changes with
your approval — see docs/topology.md.scripts/ for the
team. Write or upload them yourself, or let the agent draft them for your review. The
agent runs them with run_script as one unit (e.g. on a server you just added): typed
parameters, secrets injected from the vault over stdin, a check that skips hosts where
the script was already applied, versions and run history — see docs/scripts.md.docker exec terminal, processes),
Compose projects (up/pull/restart/down, edit compose files and .env with validation),
Swarm services, stacks and nodes (scale, redeploy, image updates, rollbacks), volumes
with a file browser (upload, download, edit), images, networks, live engine events and
clean-up. Logs stream live with ANSI colours, timestamps, per-service colours, stderr,
level and regex filters, and resume after a dropped connection — see
docs/docker.md.kubectl exec terminals, port-forwarding, rollout history with rollback, scale /
restart / set image / cordon / drain, YAML editing and Apply with a server-side
dry-run diff, live events, Secrets revealed only on request, and Helm releases — see
docs/kubernetes.md.database tool works the same
way, with changes on its approval card — see docs/databases.md.ansible, ansible_run and ansible_vault tools do the same, and ask
for a vault password right on the approval card — see docs/ansible.md.via: network/office-vpn or via: host/bastion; opsdeck brings up
the VPN on demand and chains SSH jump hosts
automatically, for the UI, the terminal and the agent alike.exec (single host or groups, canary rollouts, background
tasks), read_file/edit_file with diffs and backups, docker, kubernetes, net_check,
Git (repo, repo_files, repo_write, merge_request, git_sync), database, dns, certificate, deploy (Portainer, Argo CD, Komodo), Ansible
(ansible, ansible_run, ansible_vault), panel APIs (http_request), Prometheus, Loki and
Elasticsearch (metrics_query, logs_query), the web (web_search, web_fetch,
end-of-life and CVE lookups), docs, skills, memory, and any MCP server you attach to the
workspace.! shell, a live checklist, questions with options, forked
and exported sessions, and headless runs (opsdeck run) for cron and CI — see
docs/harness.md.read / change / destructive; shell
commands are parsed); Plan / Ask / Auto / Full modes (changes on servers ask in every mode
by default); protected environments; per-workspace
permission rules; approvals with previews; secrets redacted from everything the model
sees; a hash-chained audit journal of every action.