Personal Cloud Automation

Automate anything,
from anywhere

Turn any machine into an always-on automation backend. Schedule cron jobs, store encrypted credentials, call external APIs, and let AI manage it all — through a single binary.

Get Started See Capabilities

Morning briefing in 60 seconds

From zero to AI-powered email triage in three commands.

Store credentials

Encrypt your API key on the remote host. ChaCha20-Poly1305 at rest, accessible from CLI, JS runtime, and MCP.

hop myserver secrets set ANTHROPIC_API_KEY sk-ant-...

Enable the capability

One command registers the cron schedule, wires up the script, and starts the automation.

hop cap enable email-monitor

Wake up to a briefing

Every morning: AI triages your inbox, sends a summary, and marks routine messages as read.

email-monitor capability (condensed)
// Runs daily at 7 AM via hop cron var key = hop.secrets.get("ANTHROPIC_API_KEY"); var gmail = hop.secrets.get("GMAIL_TOKEN"); // Fetch unread messages var msgs = hop.http.get("https://gmail.googleapis.com/gmail/v1/users/me/messages", { bearer: gmail, params: { q: "is:unread" } }); // Claude classifies each as URGENT / ACTION / FYI var triage = hop.http.post("https://api.anthropic.com/v1/messages", { headers: { "x-api-key": key, "anthropic-version": "2023-06-01" }, json: { model: "claude-sonnet-4-20250514", messages: [ { role: "user", content: "Classify as URGENT/ACTION/FYI: " + JSON.stringify(msgs) } ]} }); // Send briefing email to your inbox hop.http.post("https://gmail.googleapis.com/.../messages/send", { bearer: gmail, json: { raw: base64url(summary) } }); // Mark FYI messages as read (urgent + action stay unread) hop.http.post("https://gmail.googleapis.com/.../messages/batchModify", { bearer: gmail, json: { ids: fyiIds, removeLabelIds: ["UNREAD"] } }); // Archive briefing for later retrieval hop.kv.set("briefings", today, { summary: summary, urgent: urgent.length });

Built-in capabilities

Self-contained automation units. Enable with one command, disable with another.

Health Monitor

CPU, memory, disk, and uptime. Stores metrics in the local datastore and alerts on thresholds.

Every 5 min

Log Search

Search logs across your fleet. Grep through syslog, journald, and application logs from one command.

On-demand

Security Baseline

Audit SUID binaries, open ports, auth logs, and SSH key hygiene. Flags drift from a known-good baseline.

Daily 3 AM

Email Monitor

Gmail triage powered by Claude. Summarizes unread mail, marks routine as read, and stores a daily briefing.

Daily 7 AM
Terminal — Managing capabilities
# List all available capabilities $ hop cap list health-monitor CPU, memory, disk, uptime every 5m log-search Search logs across fleet on-demand security-baseline SUID, ports, auth, SSH keys daily 3 AM email-monitor Gmail triage + AI briefing daily 7 AM # Enable a capability $ hop cap enable health Enabled: health-monitor (every 5m) # Check status $ hop cap status health-monitor enabled last run: 2m ago OK email-monitor enabled last run: 7:00 AM OK # Run a capability manually $ hop cap run email-monitor Briefing sent. 23 emails: 2 urgent, 5 action, 16 marked as read.

Encrypted secrets and native HTTP

Store credentials safely. Call any API directly from automation scripts.

Secrets that stay secret

API keys, OAuth tokens, and credentials are encrypted at rest with ChaCha20-Poly1305, keyed from your Ed25519 identity. Access them from the CLI, JS runtime, or MCP — never exposed in plaintext on disk.

Native HTTP client

Call any REST API directly from JS scripts. Bearer token auth, JSON request/response, and full header control — no curl, no external dependencies.

  • ChaCha20-Poly1305 encryption at rest
  • CLI + JS + MCP access to secrets
  • fetch-like API for HTTP requests
  • Bearer tokens injected from secrets store
  • JSON request and response handling
Terminal — Secrets + HTTP
$ hop secrets set API_KEY sk-ant-... OK // In a cron job: var key = hop.secrets.get("API_KEY"); var resp = hop.http.post("https://api.example.com", { bearer: key, json: { query: "hello" } }); hop.log(resp.status); // 200

Manage from anywhere

Every command works on remote hosts. The host name always comes first.

Terminal — Remote management from your laptop
# From your laptop to your cloud server $ hop myserver secrets set API_KEY value OK $ hop myserver cap enable email-monitor Enabled: email-monitor (daily 7 AM) $ hop myserver cap status health-monitor enabled last run: 2m ago OK email-monitor enabled last run: 7:00 AM OK $ hop myserver kv get briefings 2026-03-30 3 urgent, 12 routine, 5 archived Urgent: AWS bill spike, deploy approval, security alert... $ hop myserver cron list health-monitor */5 * * * * enabled security-baseline 0 3 * * * enabled email-monitor 0 7 * * * enabled

Get started

Four steps from bare metal to automated cloud.

Install hop on your server

One command installs hop as a persistent daemon that starts at boot.

curl -fsSL https://hop.keik.ai/install.sh | bash

Connect from your laptop

Redeem the invite token to save the server as a known host.

hop connect <invite-token>

Store credentials

Encrypt your API keys on the remote host. They never leave the machine in plaintext.

hop myserver secrets set ANTHROPIC_API_KEY sk-ant-...

Enable automation

Turn on a capability and it runs on schedule, unattended.

hop myserver cap enable email-monitor

Ready to automate?

Automation features are built into hop. Install the daemon, store your credentials, and enable a capability.

Install hop