Documentation

Get started with Ark8.

How to install Ark8, sign in and reach your first host. Then a reference for each part of the app: what it does, what it needs, and what it doesn't do.

Getting started

From download to your first host.

Step 01

Install

Download the signed .dmg from the Download page, open it, and drag Ark8 into Applications. The app is notarized by Apple, so macOS opens it. The first time, macOS asks you to confirm opening an app downloaded from the internet.

Step 02

Sign in

Ark8 opens to its sign-in screen with two buttons: Continue with Google and Continue with Microsoft. You sign in before the workspace opens. Both use Apple’s system authentication browser; the app never sees your provider password. Sign-in is required, and Ark8 checks it each time it starts. Your first sign-in needs the internet; after that, if Ark8 can’t reach its server, it opens with your stored sign-in and checks again once it can.

Step 03

Your account

Ark8’s identity service exchanges the OAuth code for a session, which stays in this Mac’s Keychain. First sign-in creates your Ark8 profile, and you land straight in your personal workspace. Organization membership is not required: every account starts as an individual account. To join an organization later, open the invitation link you receive when one of its admins invites you, sign in on this website with the invited, verified email and press Accept. To start one for your team, sign in on this website and choose Create an organization under Account; you become its Owner.

Step 04

Your first host

Add an SSH host from the sidebar with New Session, or open Kubernetes if you have a kubeconfig. Ark8 uses your existing ~/.ssh and ~/.kube material; no passwords or keys are uploaded. You can also import a CSV, your ~/.ssh/config or a screenshot of another tool’s host list, and use Test Connection to check the address and the host key, and the sign-in when it uses keys or a Vault password, before you save.

Tip: New Session uses the standard port: 22 for SSH, 3389 for Remote Desktop. A host on another port keeps its port when you import it from your ~/.ssh/config or a CSV.

What you’ll need

Ark8 itself needs only the first row. Everything else applies to the feature it names.

Ark8 itself
macOS 14 or later, on Apple Silicon or Intel. A Google or Microsoft account. Internet access when Ark8 starts.
Secrets, and Vault passwords for sessions
Your own HashiCorp Vault with a KV v2 mount and its OIDC sign-in method, with a role for Ark8 that your Vault admin sets up (see Secrets below).
Shraga
Your own Anthropic API key.
Kubernetes clusters on GKE, EKS or AKS
The provider’s sign-in plugin (gke-gcloud-auth-plugin, aws or kubelogin) on your Mac.
Kubernetes port-forwards, create from template, the metrics-server install and the Shell buttons
kubectl on your Mac.
Helm
helm on your Mac.
Containers
The docker CLI on your Mac for local and TCP engines. For SSH engines, docker on the host, with your SSH user in the docker group.
Runbooks
terraform where Terraform runs; ansible-playbook on the Ansible host; an OpenSSH server on Windows hosts; git for Source Control; the gh CLI, signed in, for Run on GitHub Runner.
Files
A POSIX shell on the server.
Google or Microsoft calendars in Runbooks
Your organization’s own OAuth client ID.
Teams
An organization, which you create on this website with a verified Google or Microsoft account.
  • Your first sign-in needs the internet. After that, if Ark8 can't reach its server when it starts, it opens with your stored sign-in for local work and confirms it once it can; organization features wait until then.
  • Settings (⌘,) has four tabs: Security, Terminal, Shraga and Issues.

Sessions

Your hosts live in one Sessions sidebar, grouped LOCAL, DEV, STAGING and PROD. SSH runs macOS’s own OpenSSH, so your ~/.ssh/config, keys and ssh-agent work as they do in Terminal.

Add a session

  • New Session offers SSH, Windows (RDP), Web, Kubernetes (kubeconfig import) and Container (Docker engine). ⌘K focuses the list.
  • Address-based sessions go through Host, Authentication, Advanced and Review steps. You can add tags and notes.
  • When you pick a connection type, New Session plays a short silent preview of what that session looks like in Ark8. With Reduce Motion or Low Power Mode on, it shows a still.
  • Each environment can hold one level of subgroups. Star favorites, and use the Filter sessions… box to match name, address, user, environment and tag.

Signing in

  • Each SSH session signs in with your keys or agent, a key file you choose, a password you type at ssh’s own prompt, or a password fetched from your HashiCorp Vault when you connect. Ark8 never saves an SSH login password. One you type into Ark8’s own prompt, for Files or a tunnel, is kept in memory until Ark8 quits.
  • Settings ▸ Security can force key-only sign-in for every connection Ark8 makes, and controls SSH agent forwarding, which is off by default.
  • A saved sudo password is typed for you after Touch ID or your Mac password. Saved ones are listed, and removable, in Settings ▸ Security.

Test Connection (new in 1.7)

  • Test Connection sits at the bottom of New Session and Edit Session, on every step, for SSH, Windows and Web entries.
  • SSH: it uses Connect’s own ssh command and reports Address, Host key and Sign-in in plain words. It first makes a handshake that offers no key or password, so an unknown or changed host key stops the test before any credential is offered. Sign-in is checked with keys, the agent or a Vault password; a password you type at connect can’t be checked, and the test says so. It never opens a shell or writes known_hosts, and PROD asks for Touch ID before signing in.
  • Windows (RDP): it sends one Remote Desktop negotiation, without a password, and reports whether the host speaks RDP and requires NLA.
  • Web: it sends one request without cookies or credentials, doesn’t follow redirects, and macOS judges the certificate.
  • Local, Kubernetes and Container entries have no Test Connection; a Docker engine has its own in its form.

Host keys and jump hosts

  • For PROD hosts, and for STAGING by default, you see the fingerprint and accept it before the first connection. DEV hosts are trusted on first contact without a prompt (ssh’s accept-new), and a key that later changes is still refused.
  • When a key changes, a bar under the terminal offers Remove old key, which runs the exact “ssh-keygen -R” command, and Remove & reconnect. When a server comes back with a new key, Ark8 explains it from its own records, for example a Terraform destroy at that address.
  • A session can reach its host through another saved session, in chains of up to 8 hops. Each bastion is dialled as its own ssh and signs in as itself, with its own key (in Files also its own Vault secret or a password you type for it), and only forwards traffic, so it never sees the target’s credentials. Terminals, Files, tunnels, host metrics and runbooks use the route.

Import and terminals

  • Import a CSV of SSH or RDP hosts (with column mapping and duplicate handling), your ~/.ssh/config (read, never executed), or a screenshot of another tool’s host list, read on your Mac. An import can raise a host’s protection but never lower it.
  • Terminals open as tabs, side by side in a two-pane split view, or full screen (⌃⌘F). ⌘F searches the scrollback. My Mac opens a local terminal.

Limits

  • The terminal starts bash on the remote host. Your zsh or fish login shell runs only if bash fails.
  • Bastions sign in with a key or the agent only, except in Files, which can also use a bastion’s own Vault secret or a password you type for it.
  • The sidebar’s status dot is a TCP port test, so it doesn’t prove that sign-in works. It uses the address and port your ssh config gives a host. For a host behind a jump host, set in Ark8 or in your ssh config, it tests only the first jump host and shows a grey ring instead of green; for a ProxyCommand it tests nothing, so a ProxyCommand set for every host (Host *) turns every dot into a grey ring.
  • To read a host’s route, the status dot runs “ssh -G” for each SSH host in the sidebar, and again every 5 minutes. That runs any “Match exec” command in your ssh config, as connecting does.
  • Test Connection doesn’t test RDP credentials, and SSH tests count toward a server’s failed-attempt limit.
  • No session recording, broadcast typing, mosh, serial console, X11 or VNC.

Production safeguards

Before Ark8 opens a terminal, the Files browser, an RDP session, a tunnel, a Docker action over SSH or a runbook step on a PROD host, macOS asks for Touch ID or your login password. One approval lasts five minutes for that session, and a runbook step also goes ahead on a PROD host whose terminal is already open.

  • With no way to authenticate, access is refused. Every approval and denial is recorded in the Activity Log while the log and its security events are on (the default).
  • On STAGING and PROD you type the environment’s name to delete or move a session (or delete a group that contains one), to delete files, and to upload with the Upload button. Files dragged in from Finder or from another server get a confirmation sheet instead, which flags a PROD destination.
  • A PROD host never connects with an unverified host key, and STAGING is blocked by default (Block unverified trust for protected environments, in Settings ▸ Security).
  • A Vault password is never sent to a PROD host whose key hasn’t been verified, and a secret linked to a PROD host asks for Touch ID before Show, Copy or Edit.
  • Hosts shared from your organization open with the environment they were shared with, so a host shared as PROD gets these safeguards too.

Limits

  • Only PROD asks for Touch ID. STAGING gets typed confirmations and strict host-key checks instead.
  • Not covered today: RDP connections, Kubernetes actions and port-forwards, web tabs, and tunnels to a host typed into the tunnel form (treated as DEV).
  • The five-minute window is fixed. The check is on by default and Settings has no switch to turn it off, but it is stored per Mac: it can be changed outside Settings (Ark8 records the setting in the Activity Log at each launch), and an organization can’t enforce it.

Files

Open Files on any reachable SSH host, or on a host behind a jump host: right-click it in the sidebar, or choose Open Files for This Host on a terminal tab.

  • List, sort, filter (⌘F), search a folder tree by name, see folder sizes, and create, rename or delete files and folders. It works over SSH with shell commands plus scp or tar, and joins an open terminal’s connection so you don’t sign in twice.
  • Double-click a file to edit it in a built-in text editor. Open as sudo edits root-owned files; a sudo save keeps the file’s owner and permissions, and is refused if a swapped-in link could redirect it.
  • Upload from Finder (a confirmation comes first), download, or drag out to Finder. Downloads are quarantined, so macOS checks them before they open.
  • In split view, drag between two servers’ panes. The confirmation flags it when the destination is PROD.
  • Through a jump host, each machine signs in as itself: with its own key or the agent, its session’s Vault secret, or a password you type for it. When a jump host refuses, Files names it and, if it takes a password, asks for that jump host’s own. The host’s password only ever goes to the host. A PROD jump host’s Vault secret is used only after it turns down your key and you approve it with Touch ID, and with Force key-only authentication on, jump hosts sign in with keys only.
  • Attach Files opens a host you ssh’d into from an Ark8 terminal, through that connection.
  • My Finder browses your Mac under /Users, and local text files open in a code-editor tab with syntax highlighting.

When a transfer fails (new in 1.7)

  • A window lists what failed, between which hosts and why, with what to do next.
  • If a server’s host key changed, it shows the new fingerprint and the known_hosts file and line ssh named, and says whether Ark8’s records show a rebuild. Remove old key runs exactly “ssh-keygen -R” for that host on that file, on the hop that refused for nested transfers. STAGING and PROD ask first.
  • The retry goes through normal host-key trust, so the new key is never accepted silently, and every removal is in the Activity Log while its security events are on (the default).

Limits

  • The server needs a POSIX shell, so SFTP-only and chrooted accounts don’t work.
  • Behind a jump host or a ProxyCommand, Open Files is offered whatever the status dot shows, because the dot can’t check the host itself. If the host can’t be reached, the Files tab says so.
  • Behind a jump host or a ProxyCommand, set in Ark8 or in your ssh config, Files can’t check the host’s key from this Mac. It opens a PROD host, or a STAGING host by default, only once that key has been accepted in the host’s terminal, and trusts a DEV host’s key on first contact, as its terminal does.
  • You can’t upload a folder from your Mac.
  • Drag transfers between servers sign in with keys or the agent only.
  • The remote editor is plain text, without syntax highlighting.

Remote desktop

New Session ▸ Windows adds an RDP session. Native RDP, built on FreeRDP 3.32.1, opens in a tab, in split view or full screen, and the desktop resizes with your window on servers that support it.

  • You type the password for each connection, or Ark8 fetches it from Vault. It is never saved. A failed connection says why in plain words.
  • Clipboard per session (New Session ▸ Advanced Options): text and files, text only, or off. PROD sessions default to text only, and your Mac clipboard goes only to the session you’re working in.
  • Copying files from Windows: a small copy you make yourself in the active session goes straight through (up to 64 MB and 100 files). Anything larger, or offered by another session, asks first. More than 1,000 files, or more than the Mac has room for, is refused. Files that arrive are quarantined and removed when the session ends.
  • Sharing a Mac folder with Windows is off by default. You turn it on per session, each session gets its own private folder, and STAGING and PROD show an extra warning first.
  • A new certificate is shown with its SHA-256 fingerprint and pinned once you trust it; a changed certificate is flagged. Ark8 negotiates only NLA or TLS, never the legacy RDP security layer.
  • The toolbar sends Ctrl+Alt+Del, the Windows key and Alt+Tab. Ark8 reconnects automatically after a drop, and a session can connect through a saved SSH tunnel that you start first.

Limits

  • No audio, printers, smartcards, USB, multiple monitors, RemoteApp or RD Gateway.
  • Hosts that accept only legacy Standard RDP Security can’t connect.
  • Test Connection doesn’t test RDP credentials.

Web tabs

Internal web UIs open in Ark8 tabs, from a Web session, a tunnel, a Kubernetes port-forward, a website secret or a Git remote. Tabs have back, forward and reload, work in split view, and identify themselves as Safari.

  • Each backend gets its own cookies and storage, including services you reach through tunnels and port-forwards.
  • A self-signed or internal-CA console opens only after you choose Trust for This Session. The trust is pinned to that certificate, forgotten when Ark8 quits, and logged.
  • A legacy appliance that only speaks TLS 1.0 or 1.1 opens only after you allow it for that host.

Limits

  • Web tabs are not a full browser: Ark8’s code has no handling for file downloads, upload pickers or JavaScript dialogs.
  • You decide trust again after every restart, and there’s no CA import for web tabs.

Kubernetes

New Session ▸ Kubernetes imports a context from a kubeconfig: pasted, from a file, or from ~/.kube/config. Each import adds one context. Clusters sit in the Sessions sidebar under their environment, and clusters that run on your Mac file themselves under LOCAL.

  • Browse 36 built-in kinds, plus Helm releases and custom resources, live from the API server. Inspectors cover most kinds, events are watched live, and an Applications view groups related workloads.
  • Pod logs show the last 500 lines, then follow. Exec opens a console into a container. YAML can be viewed, edited and applied, and each apply is in the Activity Log with a diff.
  • Scale Deployments and StatefulSets; restart rollouts, and pause or resume them; restart, evict or delete pods; cordon, uncordon or drain nodes.
  • The Overview shows measured CPU and memory from metrics-server or from a Prometheus in the cluster. Where neither exists, it offers a guarded metrics-server install, which is refused on PROD.
  • Ark8 flags CrashLoopBackOff and OOMKilled containers, pending pods, failed Jobs, NotReady nodes, unbound PVCs and image-pull errors.
  • Cloud sign-in plugins (gke-gcloud-auth-plugin, aws, kubelogin) are detected. A kubeconfig that runs a program on your Mac waits until you’ve seen the exact command and allowed it; a cluster imported before 1.6.1 keeps the command it already ran, and any change to it asks. A cluster token can come from Vault, and the kubeconfig’s CA is the only CA trusted for that cluster.
  • Helm releases show values, notes, history, rollback and uninstall, and a catalog covers nine public chart repositories, with install. ⌘F finds pods, deployments, services and nodes in connected clusters.

Needs: the provider’s sign-in plugin on your Mac for GKE, EKS or AKS clusters, browsing included; kubectl on your Mac for port-forwards, creating resources from templates, the metrics-server install and the Shell buttons; helm on your Mac for every Helm action. Browsing, logs, exec, YAML apply and the actions above need neither kubectl nor helm.

Limits

  • Deletes, pod restart, evict, cordon, drain, scaling, YAML edits and applies, creating a resource, and Helm install, uninstall and rollback ask first (you type the name for volumes, namespaces, StatefulSets, drains and anything on STAGING or PROD) and need Touch ID on PROD. Rollout restart, pause and resume, the Shell buttons and the exec console don’t ask first but need Touch ID on PROD; a shell or console asks once, as it opens.
  • The exec console sends one line at a time and doesn’t render full-screen programs.
  • No Deployment rollback, and you can’t add your own Helm repositories.
  • A Helm release’s values are read-only: Ark8 can’t upgrade a release or change its values yet. Use the helm CLI for those.

Tunnels

The Tunnels section creates SSH local (-L), remote (-R) and dynamic SOCKS (-D) tunnels, through a saved session or a host you type in.

  • Local and SOCKS listeners bind to localhost unless you enter another bind address, even if your ssh config sets GatewayPorts, and a port that can’t be bound fails the tunnel instead of looking alive.
  • Tunnels use Ark8’s host-key check, your keys or agent, the session’s jump hosts and its Vault secret. A tunnel for a PROD session asks for Touch ID first. Starts, stops and failures are in the Activity Log.
  • SSH tunnels and Kubernetes port-forwards share one list, with Start All and Stop All, and each has a details page. SSH tunnels have a health check, and a failure is explained in plain words with a suggested fix.
  • Kubernetes port-forwards come from the cluster workspace (a Service, Pod or Deployment). If the local port is taken, Ark8 picks a free one. A forwarded web port opens in an Ark8 web tab.
  • Start tunnel immediately after saving also starts that tunnel at every launch. Save presets, and Issues flags two endpoints on one local port.

Needs: kubectl on your Mac for Kubernetes port-forwards.

Limits

  • Tunnels and port-forwards don’t reconnect on their own, and port-forwards don’t start at launch.
  • Port-forwards bind to localhost only.
  • A tunnel to a host typed into the form is treated as DEV, so it gets no PROD prompt.

Containers

New Session ▸ Container adds a Docker engine: a Docker context on this Mac, a Linux host over one of your SSH sessions, or a remote daemon over TCP, with TLS client certificates (plain TCP is allowed only for DEV engines). The engine form has its own Test Connection.

  • List containers with their compose project, ports and health, plus an inspector. Start, stop or restart them, open a shell inside one, or follow its logs.
  • An engine over SSH runs through Ark8’s own SSH connection, so the host key you pinned is checked, and a PROD engine over SSH asks for Touch ID.
  • Container actions are recorded in the Activity Log.

Needs: the docker CLI on your Mac for local and TCP engines; docker on the host, with your SSH user in the docker group, for SSH engines.

Limits

  • Containers only: no images, volumes, networks, compose up or down, removal or stats.
  • The PROD Touch ID check covers only engines reached over SSH, and stop or restart asks first only off DEV.

Runbooks

Runbooks is a library of runbooks kept in folders. Each opens in an editor with an Explorer, step tabs, a Targets panel, and Output, Audit and Timeline panes.

Steps

  • Bash runs on SSH hosts inside the same terminal you use in Sessions (sudo prompts included), or on this Mac.
  • PowerShell runs on Windows over OpenSSH, on Linux and macOS with pwsh, or on this Mac.
  • Terraform runs on this Mac or over SSH on the host that holds the state: Init, Validate, Plan, Apply, Destroy and Output. On this Mac, Apply uses the saved plan and refuses one that has gone stale. Destroy asks you to type the directory’s name, and secrets are passed in a private file that is deleted afterwards.
  • Ansible runs, over SSH only, a playbook that already sits on the host, against the inventory beside it. Check does a --check dry run, and Ark8 copies no playbook, inventory or secret to that host.
  • A step can call another runbook.

Before a run

  • Change Review shows what will run, where and in what order before a whole-runbook run and before Terraform Apply or Destroy. Ansible’s Check and Run playbook buttons, Terraform Init, Plan, Validate and Output, and Run on GitHub Runner skip it. Dry run shows the exact commands without running anything.
  • A runbook can be set to ask for approval when it touches environments you choose (PROD is pre-selected). Approval is given in Ark8 on the same Mac. It is recorded with the run and in the Activity Log under the Mac user’s name, and flagged as a self-approval. A PROD step asks for Touch ID.

Schedules, triggers and history

  • Schedules run once, daily, weekly, on chosen weekdays, monthly, every N minutes or by cron, in any time zone. A schedule on PROD targets is refused when you create it and again when it fires, and an occurrence that needs approval is skipped. A missed occurrence is recorded, never replayed.
  • Calendars hold maintenance windows and change freezes from weekly windows, date ranges and one external calendar: your Mac’s, or Google or Microsoft 365, read-only, with your organization’s own OAuth client ID. A blocked schedule is skipped, a webhook or nested runbook is refused, and a manual run waits for Run anyway, which is logged. The three ways that skip Change Review don’t check calendars either.
  • Signed webhook triggers are rate-limited, and a GitHub-signed delivery replayed within a few minutes doesn’t run twice. A webhook can start a PROD run only when the runbook requires approval for PROD, and the run waits for it. Notifications go to this Mac, Slack or your own webhook, and an overlap policy decides what happens when a runbook is started twice.
  • Parameters are typed. Secret parameters come from Vault and are masked in output.
  • Turn On Source Control makes the library a Git repository: side-by-side diffs, commit, commit and push, branches, fetch, pull (fast-forward only) and push, with the system git and your own credentials. Templates and Runbook History, with a per-run inspector, are built in.
  • Deploy to GitHub Runner writes .github/workflows/<name>.yml for a self-hosted runner (manual dispatch) from the runbook’s Bash, Python and PowerShell steps; Terraform, Ansible, script-file and confirmation steps and Kubernetes targets are refused. Run on GitHub Runner starts it through GitHub’s API with the gh CLI’s token, on github.com, on main, with no inputs. Its result isn’t in Runbook History.

Needs: terraform where Terraform runs; ansible-playbook on the Ansible host; an OpenSSH server on Windows hosts; git for Source Control; the gh CLI, signed in, for Run on GitHub Runner; your organization’s own OAuth client ID for Google or Microsoft calendars.

Limits

  • Python steps run only in the GitHub Actions workflow a runbook exports. Go, kubectl, Helm and “Local (Mac)” are listed in the step picker as coming later and can’t be chosen yet. Use a Bash step that calls the tool.
  • No step runs against a Kubernetes cluster.
  • Schedules and webhooks fire only while Ark8 is open and the Mac is awake. A scheduled or webhook run that needs a Vault secret while nobody is signed in to Vault fails instead of opening a browser.
  • A remote Terraform Apply plans and applies in one pass.
  • Approval is given on the same Mac; there’s no second-person or remote approval, and a schedule never waits for one. The webhook listener is plain HTTP on this Mac.
  • Runbooks are stored on this Mac; Git is how you share them.

Secrets

Secrets manages the secrets in your own HashiCorp Vault, on one KV v2 mount. Values stay in Vault until you click Show or Copy, and a copied value clears from the clipboard after 30 seconds.

Browse and manage

  • List, search, sort and filter by folder, template, tag, favorites, recent, not linked to a host, and deleted. Templates cover Linux, Windows, Windows domain, network device, database, website and API key.
  • Browsing never reads a value. Show, Copy and Edit each read it once. A shown value hides after 30 seconds. A copied value stays off Universal Clipboard, is marked so that clipboard managers that honour the convention skip it, and clears after 30 seconds unless you’ve copied something else since.
  • A secret linked to a PROD host asks for Touch ID or your Mac password before Show, Copy or Edit. Every reveal, copy, edit, create, delete, restore, link and unlink is recorded in the Activity Log by path and field, never by value, while its security events are on (the default).
  • Create a secret from a template, with a 24-character password generator and a strength checklist. Saving uses Vault’s check-and-set, so a newer change made elsewhere isn’t overwritten.
  • Link SSH or RDP sessions to a secret and launch them from it, or pick the secret in New Session. Terminals, Files, tunnels and RDP fetch the password when they connect.
  • Delete is a soft delete, with Restore. Change password on a secret’s card changes the value in Vault and reminds you to change it on the host too.

Sign in to Vault with your identity (new in 1.7)

  • Ark8 no longer stores a Vault token. In Settings ▸ Security, the HashiCorp Vault card holds the server URL, the KV v2 mount, the sign-in method path (oidc unless your admin chose another), the role, and a namespace for Vault Enterprise or HCP Vault Dedicated. Then click Sign in with your identity.
  • You sign in through Vault’s OIDC method in your system browser, the same flow as “vault login -method=oidc”, with the redirect URI http://localhost:8250/oidc/callback.
  • The token is held in memory only. Ark8 ends the sign-in after at most 4 hours, sooner if Vault’s lease is shorter, and asks Vault to revoke it when you sign out of Vault, when you quit and when it expires (a batch token can’t be revoked; it simply runs out). Signing out of your Ark8 account doesn’t sign you out of Vault. Changing the address, namespace or CA signs you out.
  • When something needs a secret and you’re signed out, Ark8 asks you to sign in. Scheduled runs, webhook runs and tunnels that start by themselves fail at once instead of opening a browser. On PROD, the Touch ID check still comes first.
  • A Vault token saved by an earlier version is deleted from the Keychain at first launch, and Ark8 tells you to have your Vault admin revoke it.

Setting this up in Vault

A Vault admin enables the OIDC auth method and creates a role for Ark8. Under Setting this up in Vault, the HashiCorp Vault card lists what the role needs: the redirect URI above, 4-hour service tokens (token_ttl, token_max_ttl and token_explicit_max_ttl of 4h), and the default policy kept, which Ark8 uses to check and end its own sign-in. Copy setup commands copies the commands below with your mount, role and namespace filled in; these are the defaults.

# Vault Enterprise / HCP Vault Dedicated only — HCP's top namespace is "admin".
# export VAULT_NAMESPACE=admin

# 1. OIDC sign-in, pointed at your identity provider (Okta, Entra ID, Google, Keycloak, …).
#    Skip if `vault login -method=oidc` already works for your team.
vault auth enable -path=oidc oidc
vault write auth/oidc/config \
    oidc_discovery_url="https://sso.example.com/" \
    oidc_client_id="$OIDC_CLIENT_ID" \
    oidc_client_secret="$OIDC_CLIENT_SECRET" \
    default_role="ark8"

# 2. What ARK8 users may do in the KV v2 mount "secret". Narrow the paths to your layout;
#    drop create/update/delete for a read-only team.
vault policy write ark8-secrets - <<'EOF'
# Browse: names, versions and ARK8's labels — never values
path "secret/metadata/*" { capabilities = ["list", "read", "create", "update"] }
path "secret/subkeys/*"  { capabilities = ["read"] }
# Values: connect, runbooks, reveal, copy; create, edit and (soft) delete
path "secret/data/*"     { capabilities = ["read", "create", "update", "delete"] }
# Restore a deleted secret
path "secret/undelete/*" { capabilities = ["update"] }
EOF

# 3. The role ARK8 signs in with: 4-hour tokens, service type, ARK8's redirect URI.
vault write auth/oidc/role/ark8 - <<'EOF'
{
  "role_type": "oidc",
  "user_claim": "email",
  "groups_claim": "groups",
  "oidc_scopes": ["profile", "email"],
  "bound_claims": { "groups": ["vault-ark8-users"] },
  "allowed_redirect_uris": ["http://localhost:8250/oidc/callback"],
  "token_policies": ["ark8-secrets"],
  "token_ttl": "4h",
  "token_max_ttl": "4h",
  "token_explicit_max_ttl": "4h",
  "token_type": "service",
  "token_num_uses": 0,
  "token_no_default_policy": false
}
EOF

# 4. At the identity provider: add the same redirect URI to Vault's OIDC app
#    (most teams already have it for the Vault CLI):
#      http://localhost:8250/oidc/callback

# 5. Check it from a terminal before using ARK8 (uses the same port, so not while ARK8 is signing in):
vault login -method=oidc -path=oidc role=ark8
vault token lookup      # ttl ≤ 4h, policies include ark8-secrets
vault token revoke -self

Fill in your identity provider's discovery URL, client ID and secret, and the group in bound_claims, and narrow the policy paths to your layout.

Needs: your own reachable HashiCorp Vault with a KV v2 mount and its OIDC sign-in method, set up as above. Ark8 talks to Vault over https, or plain http only to this Mac. You can import a private CA, which is then the only trusted root for Vault.

Limits

  • Vault’s OIDC sign-in method only: no AppRole, LDAP, userpass or token sign-in. KV v2 only, one mount at a time.
  • Vault login MFA (a second factor after sign-in) isn’t supported; enforce MFA at your identity provider instead. A sign-in that would carry Vault’s root policy is ended.
  • Touch ID is asked only for secrets linked to a PROD host.
  • No password rotation, and Ark8 doesn’t change the password on the host.
  • While an RDP session is open, a copied secret also reaches the Windows clipboard.
  • The list stops at 1,000 secrets. Destroying a version is left to the Vault CLI.

Issues and the host panel

The panel beside an SSH session (⌥→) shows the host’s OS facts and live CPU, memory, root disk and NVIDIA GPU, load, uptime and top processes, refreshed every 30 seconds while it’s open.

  • Issues lists problems Ark8 finds in data it already has: hosts over disk or memory thresholds, broken or conflicting tunnels, sign-in problems, web tab and RDP failures, and Kubernetes problems.
  • Acknowledge an issue, fix it with a button where one exists, or open a runbook meant for that kind of issue.
  • Health Check writes a short report on a host from what Ark8 has already collected.
  • Warning and critical thresholds are set in Settings ▸ Issues.

Limits

  • No agent on your hosts, no background polling, no alerting and no fleet dashboard.
  • Full metrics are collected only on Linux, and GPU means NVIDIA only.

Activity Log and SIEM export

Ark8 keeps an Activity Log on this Mac of what Ark8 opened, changed and ran, where, and by which Ark8 account. It is on by default. Open it from History in the rail, export its newest 1,000 events as JSON or CSV, or stream every event to your SIEM as RFC 5424 syslog over TLS.

What’s recorded

  • SSH sessions opening and closing; PROD decisions; file opens, saves and deletes; RDP events; tunnels and port-forwards; Kubernetes exec and shells, logs, YAML applies, scaling, rollout restarts, pauses and resumes, Helm installs and pod deletes; Docker actions; runbook runs and approvals; Vault secret actions; settings changes; and Shraga lookups.
  • Values written after a label Ark8 knows (password=, token:, an Authorization header and the like) are redacted before an event is written or sent. A secret with no such label in front of it is not caught.
  • Search and filter the log. Retention is 30, 90, 180 or 365 days.
  • Settings ▸ Security can turn the log off, or turn off security events, file operations, tunnel lifecycle or runbook step detail. While one is off, those events aren’t written.
  • Changes to audit settings, clearing the log, changing the SIEM destination, and events lost on the way to the SIEM are always recorded.

Who did it (new in 1.7)

  • Each new event records the signed-in Ark8 account beside the macOS user: the email, how it signed in (Google or Microsoft), the organization and the role. When nobody is signed in, the event says Not signed in. Runbook-run events filled in afterwards show Not recorded.
  • History and JSON exports show the whole record, role included. CSV exports carry it as the ark8SignedIn, ark8Account, ark8Method, ark8Org and ark8OrgName columns.
  • Once you set your Enterprise number in the SIEM settings, SIEM events carry ark8SignedIn, ark8Account, ark8Method and ark8Org as structured-data parameters. Without one, events go as plain text with no structured fields. The role stays out of CSV and SIEM.

SIEM export

  • SIEM export is off by default. Turn it on in Settings ▸ Security: RFC 5424 syslog over TLS or plain TCP, octet-counted, on port 6514 by default.
  • Import your collector’s CA, which is then the only one trusted, and a .p12 client certificate for mutual TLS. Test Connection checks the setup.

Limits

  • Ark8 never records keystrokes, the commands you type in a terminal, or terminal output.
  • History, and its export, cover the newest 1,000 events.
  • The file on your Mac is not tamper-evident. You can clear it, and clearing is logged.
  • SIEM delivery is at most once, from a 1,000-event queue: syslog over TCP or TLS only, with no UDP, HTTP collectors, CEF or LEEF.
  • Uploads, downloads, renames and the use of a saved sudo password are not in the log.
  • The Activity Log stays on your Mac. Ark8 doesn’t collect it.

Teams

An organization adds roles, invitations, SSH hosts shared with your teammates, and a web admin console. Anyone signed in on this website with a verified Google account, or a Microsoft work account whose organization confirms it owns the address, can create one under Account and becomes its Owner. One account can own up to 3. While the Owner is its only member, they can close it from its Organization page.

Roles

  • Owner: organization policy, granting Admin, and transferring ownership.
  • Admin: people, invitations, groups, hosts shared with admins only, and the organization audit log. An Admin can’t make anyone an Admin, or remove, suspend or demote one.
  • Member: uses the organization and shares SSH hosts into it; opens shared PROD hosts only if the Owner allows it.
  • Viewer: read-only. A Viewer can see what’s shared with everyone but can’t share, and Ark8 won’t open an organization-shared host for them.
  • The database enforces roles for your organization’s data. Ark8 for macOS applies them to shared hosts and re-checks your role at launch, when the app comes to the foreground, every 5 minutes, and before an organization action if the last check is over a minute old. When your role or membership no longer allows a shared host, the tabs you opened from it close.
  • Groups give a role to many people at once. A group can’t make anyone Owner.

Invitations

  • In the web admin console, an Admin invites someone by email, with a role and an expiry from 1 to 30 days. Ark8 emails them a link that works only for that address. If the email can’t be sent, the console shows the link for you to send instead.
  • To join, that person opens the link, signs in on this website with the invited, verified email and presses Accept, or Decline. Signing in alone, on the website or in the Mac app, never joins an organization. Admins can resend an invitation, which emails a new link (the old one stops working), or revoke it.
  • Admins invite Members and Viewers. Only the Owner can invite an Admin or make someone an Admin.

Sharing SSH hosts

  • Right-click an SSH session to share it with everyone in your organization or with its admins only. Only its name, address, port, user name, environment, notes and tags are sent, never a password, key or kubeconfig. Teammates connect with their own credentials. A shared PROD host opens only for Admins and the Owner, unless the Owner lets Members open shared PROD hosts too.
  • A shared host opens with the environment it was shared with, so a host shared as PROD gets PROD safeguards, and one shared without an environment opens as PROD. When the owner changes the host on their Mac, the shared copy follows. Only the person who shared a host can change its name, address and other details; they can stop sharing it, and the Owner and Admins can relabel its environment or withdraw it. A share disappears from the organization when its owner leaves or is suspended.
  • The Owner and Admins relabel a shared host's environment (DEV, STAGING or PROD) under Shared items in the web admin console. Teammates' Macs pick up the new environment at their next check and close tabs opened from the host when it is stricter, so they reconnect with its safeguards. A stricter environment also raises the sharer's own copy; a lower one leaves their copy as it is. If the person who shared it later changes its environment or shares it again from their Mac, their label replaces the relabel, and a Mac of theirs that hasn't synced the host since it was shared may put back a stricter environment on its own. The audit log records each change.

The web admin console

  • Sign in on this website with the same Google or Microsoft account. Owners and Admins get the Admin console: members and invitations, groups, shared items, organization details, the organization audit log, and metrics (members, signed in within the last 30 days, pending and expired invitations, suspended, never signed in, and most recent sign-in).
  • The organization audit log is append-only and records member, invitation, role, group, ownership and sharing changes. Secret-named fields are redacted when each entry is written.

Limits

  • Only SSH hosts can be shared. Ark8’s organization sharing never carries credentials, keys, Vault secrets or runbooks; runbooks travel through your own Git remote.
  • Sign-in uses Google or Microsoft accounts only. There’s no SCIM or directory sync, and Ark8 doesn’t enforce MFA.
  • On the Mac, roles are Ark8’s policy, not a lock on the host, because the SSH credentials are each person’s own.
  • Sign-ins are not recorded in the organization audit log.

Shraga, the AI assistant

Shraga, Ark8’s AI assistant, answers questions about your infrastructure from what Ark8 already knows. It uses your own Anthropic API key, sends nothing until you agree to what it may share, replaces names with labels by default, leaves PROD out unless you include it, and runs nothing.

  • Open Shraga from the sparkles icon in the rail. Its answers come from sessions, host metrics and inventory, tunnels, clusters and workloads, Activity Log entries and runbooks.
  • Set it up in Settings ▸ Shraga: paste your Anthropic API key, kept in your Mac’s Keychain, and accept the disclosure that lists what can and can’t be sent. Requests go straight from your Mac to Anthropic and are billed to your Anthropic account. You can revoke consent at any time.
  • Strict mode, the default, replaces the host names, IP addresses, usernames and session, cluster and namespace names Ark8 knows with labels such as host-A before anything is sent. Standard mode sends real names. In both modes a filter removes values written next to a label it knows, such as password= or an Authorization header; a secret with no label in front of it can get through. The chat header shows every substitution.
  • PROD is left out by default, and you can include it in Settings ▸ Shraga.
  • Shraga reads and proposes; it runs nothing. A proposed runbook step is added only when you press Insert, and in the runbook editor ⌘I writes a script that you Keep or Discard.
  • Every lookup it makes, every script it is asked to write and every failed request is in the Activity Log, while the log is on (the default).

Needs: your own Anthropic API key.

Limits

  • There’s no hosted AI and no other provider, and the model can’t be changed in the app.
  • Shraga never reads terminal output, file contents, the Keychain or Vault.
  • Strict mode can miss a name that appears only inside a script or note, and a host with no environment label counts as DEV.

Account and updates

Ark8 runs on macOS 14 or later, on Apple Silicon and Intel. It is signed with a Developer ID and notarized by Apple.

  • Ark8 checks for updates once a day, and Check for Updates… is in the app menu. You can turn the daily check off in Settings ▸ Security. An update installs only after you approve it, and updates are signed and verified.
  • Sign-in with Google or Microsoft is required, and Ark8 checks it at every launch. Your avatar at the bottom left shows your account, organization and role, and Sign Out also ends your local terminals and SSH shells. Your Vault sign-in is separate: sign out of Vault in Settings ▸ Security.
  • Settings (⌘,) opens inside the main window, with tabs for Security, Terminal, Shraga and Issues, and each group of settings on its own card.
  • There is no analytics, telemetry or third-party crash-reporting SDK. Ark8’s own servers receive your sign-in and the update check; SSH host descriptors without credentials, only when you share them; and redacted crash and hang reports, only if you turn on Send crash reports to Ark8 in Settings ▸ Security, which is off until you do. Help ▸ Report a Problem… shows the reports kept on your Mac. Everything else goes only to services you configure or choose to use: your Vault, SIEM, Slack or webhooks, GitHub, calendars, Anthropic for Shraga, and, when you open the Helm catalog or install metrics-server, the public chart repositories, Artifact Hub and GitHub.
  • The app has no license key, trial or paywall.

Limits

  • Your first sign-in needs the internet. Later, if Ark8 can’t reach its server at launch, organization features wait until it can confirm your sign-in; hosts, terminals and files work as usual.
  • English only. Not on the Mac App Store, and not sandboxed.
  • One stable update channel.
  • No in-app What’s New screen: release notes appear in the update window and on the Download page.

Known limits

Behaviour to know about before you rely on it. Most of these are also noted in the sections above.

Sessions and safeguards

  • There’s no Touch ID check before web tabs.
  • Pasting into a PROD terminal isn’t checked.
  • For a host behind a jump host, the sidebar’s status dot checks only the first jump host, not the host itself.
  • Health Check’s “Files Tab Open” row shows only whether a Files tab is open. It doesn’t test file access.

Activity Log

  • Uploads, downloads, renames and the use of a saved sudo password aren’t recorded.

Kubernetes

  • Open Web UI on an Ingress opens the ingress’s own host on the standard port: 443 when it has TLS, 80 when it doesn’t. For an ingress controller on a NodePort, use its port-forward fallback.
  • Ark8 can’t upgrade a Helm release or change its values yet. Use the helm CLI for those.
  • Port-forwards and SSH tunnels don’t reconnect after a drop.

Runbooks, containers and web tabs

  • Python steps run only in a runbook’s exported GitHub Actions workflow. Go, kubectl, Helm and “Local (Mac)” steps can’t be chosen yet.
  • The PROD Touch ID check for Docker covers only engines reached over SSH.
  • Web tabs have no handling for file downloads, upload pickers or JavaScript dialogs.

Read more

Each link below goes to the part of the Features, Security or Enterprise page that describes it.

Docs — Ark8