Quickstart

Pick an install path and get a workspace running. Most people start with the one-command npm or Docker install on their own machine.

damn.dev is self-hosted, so "getting started" means standing up your own instance. There are four supported install paths — pick the one that matches where you want it to run.

Note — All install paths share one data directory at ~/.damn-dev/ and one agent directory at ~/.openclaw/. You can move between paths (for example, install the CLI first, then add the desktop app) and they compose cleanly.

Pick your path#

PathBest forRuns as
npm CLIA laptop / workstation install you drive from the terminalA native Node process
docker-localA local install where OpenClaw runs in DockerBackend native, OpenClaw in Docker
docker-vpsA shared server reachable by your teamContainers behind Caddy (auto-TLS)
Tauri desktopA native macOS / Linux desktop app with a trayBundled Node sidecar

Install (CLI)#

The CLI is published as @damn-dev/cli.

Warning — The CLI must be installed with pnpm, not npm. A native dependency hard-fails any npm-based global install. Using npm will abort partway through with an only-allow … pnpm error.

bash
# Enable pnpm (bundled with Node 22 via corepack)
corepack enable

# Install the CLI
pnpm add -g @damn-dev/cli

# Start your workspace
damn-dev start

Then open the printed URL (the workspace serves on port 3001 in production).

Install (one-command scripts)#

bash
# Local Docker install
curl -fsSL install.damn.dev/docker | bash

# npm install
curl -fsSL install.damn.dev/npm | bash

# docker-vps install (a server you'll reach over the network)
curl -fsSL install.damn.dev/vps | bash

First-run notes & ceilings#

Ceiling — A few things to expect on first run:

  • The browser skill is a one-time ~363 MB download. The first time an agent uses the built-in browser, it fetches a stealth Firefox build (~298 MB) plus GeoIP data (~65 MB). Docker images pre-bake it; npm and Tauri download it on first use. Budget for the delay and ~150 MB RAM per active browsing agent.
  • docker-vps needs DNS + TLS. A server install terminates TLS at Caddy and expects a hostname; local and desktop installs are fine on localhost or a private network.
  • Provider API keys go in the right place. Set model provider keys (Anthropic, OpenRouter, etc.) in Settings → AI & Models → Model Providers, not the generic Secrets tab — the Secrets tab stores the key but doesn't route it into the runtime. See Models, providers & secrets.

Your first 15 minutes#

Once the workspace is up, the fastest way to understand it is to run the core loop once: chat → the agent proposes an action → you approve → it happens, and it's logged.

  1. Set your security posture. As the first user you're the operator, so onboarding asks you to pick a governance baseline — Regulated (secure default), Standard, or Open. Choose one (you can change it anytime in Oversight → Policy). Nothing is enforced until you do.
  2. Create an agent. Sidebar → Agents → New agent. Name it, describe its job, pick a model. It gets you as its accountable owner by default.
  3. Chat with it. Open its channel and ask it to do something within its job. It keeps its own memory and identity across turns.
  4. Watch it request an action. Ask it to do something that touches reality — run a shell command, or hand work to another agent. Instead of doing it silently, it emits an approval card inline: what it wants to do, a plain-English summary of why and the risk, and Approve / Deny.
  5. Approve it. The action runs, the result posts back into the channel, and the decision is written to the Trace audit log. Deny, and nothing happens.

Ceiling — The "Always allow" affordance on a card is operator-only — creating a standing auto-approve rule is an operator action. A small set of action types (editing an agent's prompt, installing a skill, merging code) can never auto-approve, no matter what. See Core concepts.

Next#