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#
| Path | Best for | Runs as |
|---|---|---|
| npm CLI | A laptop / workstation install you drive from the terminal | A native Node process |
| docker-local | A local install where OpenClaw runs in Docker | Backend native, OpenClaw in Docker |
| docker-vps | A shared server reachable by your team | Containers behind Caddy (auto-TLS) |
| Tauri desktop | A native macOS / Linux desktop app with a tray | Bundled 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 … pnpmerror.
# Enable pnpm (bundled with Node 22 via corepack)
corepack enable
# Install the CLI
pnpm add -g @damn-dev/cli
# Start your workspace
damn-dev startThen open the printed URL (the workspace serves on port 3001 in production).
Install (one-command scripts)#
# 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 | bashFirst-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
localhostor 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.
- 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.
- Create an agent. Sidebar → Agents → New agent. Name it, describe its job, pick a model. It gets you as its accountable owner by default.
- Chat with it. Open its channel and ask it to do something within its job. It keeps its own memory and identity across turns.
- 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.
- 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#
- Learn the vocabulary in Core concepts.
- For the full per-path matrix and architecture, see Install & deploy.