Terminal first
Every capability in the panel exists as a command with the same flags, so scripts and shell history stay useful. Output switches between a table, JSON and a quiet single value for piping.
poim gives a growing fleet one control surface. A small agent enrols each
VPS once, and from then on every host answers to the same commands:
poim vps list, poim tail, poim deploy.
No SSH tunnels, no per-host credential files, no dashboard clicking.
curl -sSL https://poim-5vk.pages.dev/install | bash
$ poim vps list --group production
NAME GROUP PLAN CPU MEM UPTIME STATUS
web-01 production 2c/4g 8% 31% 41d 03h online
web-02 production 2c/4g 6% 28% 41d 03h online
api-01 production 4c/8g 22% 57% 12d 18h online
db-01 production 8c/32g 74% 82% 2d 07h degraded
mail-01 production 1c/1g 3% 18% 96d 21h online
$ poim tail db-01 --since 10m --grep slow
10:42:11 [warn] checkpoint 18422 took 41.2s
10:42:53 [warn] checkpoint 18423 took 39.8s
10:43:30 [warn] checkpoint 18424 took 44.1s
$ poim rollout status --watch
[OK] 5 of 5 hosts on build 2026.09.3
The pieces that usually break first: onboarding a new box, knowing what it is doing, finding the one host that is not answering, and proving who changed what.
Every capability in the panel exists as a command with the same flags, so scripts and shell history stay useful. Output switches between a table, JSON and a quiet single value for piping.
Hosts, groups, tags, plan sizes and enrolment state in one table. Filter by anything you have tagged, then act on the result rather than on a host list you keep by hand.
Agents dial out through a single authenticated relay over WebSocket. Hosts sit behind NAT and private networks without opening a single inbound port.
The panel stores no VPS credentials. Each agent enrols with a single-use code, pins the relay certificate, and receives only the scope you grant it.
Argon2id password hashing with a per-user cost policy, TOTP with encrypted secrets, hashed refresh tokens, and API tokens that are shown exactly once and stored only as a SHA-256 digest.
CPU, memory, disk and load samples stream from every agent. Thresholds become alert rules, alert rules become notifications, and the whole history is queryable from the CLI.
The same backend powers a browser dashboard for the times you are not in a terminal: fleet health, alert rules, notification channels and the audit log.
Tagged releases, published checksums for every artefact, and Go modules you
can pin with go install if you would rather build the CLI
yourself.
No telemetry, no usage reporting, no crash upload. The agent and the CLI talk to your relay and to the API, and to nothing else.
Everything a command needs travels the same path: your prompt, the CLI, the relay, and the agent that actually touches the machine.
Nothing here needs a dashboard account or a support ticket.
One static binary, no runtime to install. The installer picks the right archive for your architecture and puts it on your path.
curl -sSL https://poim-5vk.pages.dev/install | bash
The device flow prints a short code and opens your browser. It works over SSH on a headless box, which is where you usually need it.
poim login --relay https://relay.poim-5vk.pages.dev
Create a one-time enrolment code, paste it on the host, and the agent registers itself. The code is consumed on first use.
poim enrol create --group production
poim enrol run --code poim_enrol_... --name web-01
From now on the host is addressable. Target a group, a tag, or one named machine, and the same commands keep working.
poim vps list
poim exec web-01 -- systemctl restart nginx
poim rollout status --watch
The short answers. Longer versions live in the documentation.
No. The agent opens an outbound WebSocket to the relay and holds it. Your servers do not need a public IP, a forwarded port, or an inbound firewall rule for poim.
Nowhere. The panel stores opaque enrolment codes and the agent public key used for TLS pinning. Your agent holds nothing that could be replayed against the panel, and we never see a root password or an SSH key.
It samples CPU, memory, disk and load on a schedule, holds the relay connection open, and applies whatever alert and maintenance policy you configured. It does not execute anything on its own initiative.
Yes, and you should in CI. Tokens carry explicit scopes, are shown once at creation, and are stored only as a SHA-256 digest. Each distinct source IP seen for a token is recorded so a leak is visible in the audit log.
export POIM_TOKEN=poim_pat_...
poim vps list --format json | jq '.[].name'
Linux, macOS or Windows on the workstation, and a 64-bit Linux host with systemd for the agent. Roughly 18 MB of disk and under 12 MB of resident memory. Full details are on the download page.
The relay is a Cloudflare Worker with Durable Objects for connection fan-out, and the panel API is a Worker against D1. Both are deployable from the source in this repository if you would rather run them inside your own account.
Detach the host from the panel, then run the uninstall script on the VPS. It stops and removes the agent unit and leaves the rest of the system alone.
curl -sSL https://poim-5vk.pages.dev/uninstall | bash
No. There is no telemetry, no usage ping and no crash upload. The CLI and the agent talk to your relay and the API, and to nothing else. The panel is static assets, so the marketing site itself is just files.
One command, one static binary, no runtime to manage. Read the docs first if you like, or skip straight to the download page.
No matches