Dograh: set up, develop & troubleshoot
Help the user stand up, develop on, or debug a self-hosted Dograh deployment — on
macOS, Linux, or Windows. Dograh is a small set of backing services plus an API and a
UI, run together most simply with Docker (though the services can also be external or
native).
Core principle: orient, then read the source — don't memorize it here. The exact
scripts, commands, env vars, ports, and flows live in Dograh's own repo and docs, and
they change over time. This skill carries how to reason and where to read — it
deliberately does not restate those specifics, because a copy here would drift and
bloat your context. So: detect the situation, confirm what the user wants, then read the
authoritative source for the chosen path and do what it says.
Step 0 — Orient (always first)
1. Where am I, and what's available? Detect the OS and shell — don't assume bash;
it may be Windows PowerShell or WSL2/Git-Bash. Check which tools actually exist before
relying on them (docker, docker compose, curl, git; plus python/node for
dev). Establish where Dograh runs — this machine, or a remote server you'll SSH into
and run everything on.
2. What does the user want? Ask when it isn't clear:
Deploy Dograh (run it) or Develop it (work on its code)?
Deploy → Local machine or remote server?
Develop → Containerized or native?
Backing services (database / cache / object storage):
spin up fresh — or reuse ones the user already runs?
3. Docker is optional — ask, don't assume. Docker Compose is the convenient default:
it brings up fresh backing services and the app in one step. But it is not required.
If the user already runs the database, cache, or object storage — or a managed
equivalent (Supabase, a managed Redis, S3) — Dograh can point at those via env vars, and
the app can run natively. The hard requirements are the services, not Docker. Read the
environment-variables doc (see Sources) for the exact wiring, and ask fresh-vs-reuse
rather than silently installing fresh infra or forcing Docker. (One buried gotcha: the
database must support the vector extension Dograh's migrations enable — a plain Postgres
without it will fail to migrate.)
4. Consent checkpoints — do not infer. Before installing packages, starting
services, creating files, or running setup scripts, stop and summarize the intended path
in one sentence. Ask for explicit confirmation if any of these are true:
- Docker is not installed and would need to be installed.
- The deployment will create fresh backing services instead of reusing existing ones.
- The setup will write into the user's home directory, create
.env, certificates,
Docker volumes, or start long-running services.
- The user has not explicitly chosen local Docker, remote Docker, devcontainer, or
host-managed native setup.
A tool approval prompt is not a substitute for setup-choice confirmation. It authorizes
a command only; it does not mean the user agreed with the inferred architecture.
If Docker is missing, do not install it automatically. First ask whether the user wants
Docker Compose with fresh bundled services or a native/external-service setup. Install
Docker only after the user explicitly chooses the Docker path.
Act — read the source for the chosen path, then drive it
Don't follow step lists from memory — read Dograh's current source and do what it says.
references/paths.md maps each branch to which source to read. In short:
- The authoritative steps for any path live in Dograh's docs (start at the index
https://docs.dograh.com/llms.txt, open the one relevant deployment or contributor
page, and fetch just that page — never the whole corpus) and in the repo's
scripts/AGENTS.md, which catalogues the setup scripts. Read those to learn which
script/command to run.
- Before running any setup script, read it. They're short shell scripts (you've just
downloaded one, or can fetch it from the repo). Reading it shows its prompts, the env
vars that bypass them, and whether it starts the stack — all of which you need.
- Env vars, ports, and services are defined in the environment-variables doc and the
docker-compose file — read those instead of assuming values.
- Adapt to the detected OS (Dograh ships PowerShell variants of the user-facing scripts;
bash-only ones run under WSL2).
Running scripts as an agent (non-interactive)
The setup scripts prompt for input, and some end by running docker compose up in the
foreground — either would stall a non-interactive shell. They're non-interactive-safe
(no TTY → they fall back to defaults instead of hanging), but to get the config the user
actually wants:
- Read the script first to learn its prompts and the env vars that preset them, then
run it with those env vars set from the user's Step-0 answers — no prompts needed.
- Start the stack yourself, detached (background it / use the detached form) so a
foreground
up can't block you. Then verify with doctor.sh instead of tailing logs.
Diagnose
Read references/debug.md — a method, not a lookup table. It tells you what to inspect
(read-only), in what order, and how to reason; the logs and the compose file are the
source of truth for what's actually wrong. On a POSIX shell, scripts/doctor.sh runs
the read-only pass for you; on Windows PowerShell, follow the method by hand.
Guardrails
- Never run a destructive command — anything that deletes volumes/data (e.g. a
down -v) — without explicit confirmation; it erases the database and recordings.
- Some values are write-once (e.g. the DB password is baked into the data volume on
first init); the compose file flags these — changing them later breaks things.
- Don't fabricate config or invent flags — regenerate secrets the way the scripts do,
or re-run the script. One change at a time, then re-check.
After every run — offer feedback (consent required)
When a run wraps up (setup finished, or a debug session resolved or ended), offer to
send a short note back so the skill improves:
- Ask — "Want to share quick feedback on how that went? (optional)". If they
decline, send nothing and stop.
- Compose a one-line comment = light context + their words, e.g.
[deploy-remote | success | macOS] doctor.sh caught the missing OSS_JWT_SECRET fast — smooth.
Context is: the path taken (deploy-local / deploy-remote / dev-devcontainer /
dev-host-managed), the outcome (success / partial / failed), and the OS — then the
user's verbatim words.
- Show the user the exact text and confirm. Sending appends it to a Google Sheet
and emails the Dograh team, so consent must be explicit.
- On an explicit yes, send it:
Run the bundled
scripts/send_feedback.sh from this skill directory with the comment as its only argument.
On Windows PowerShell, POST the same JSON instead:
Invoke-RestMethod -Method Post -ContentType 'application/json' -Body '{"comments":"<text>"}' -Uri <webhook>.
- Never include secrets, tokens, full
.env values, IPs, or credentials — only the
path, outcome, OS, and the user's words.
Sources of truth (read these; don't restate them)
- Repo —
https://github.com/dograh-hq/dograh, especially scripts/AGENTS.md (the
setup-script catalogue) and the docker-compose files (services, ports, profiles).
- Docs —
https://docs.dograh.com; use …/llms.txt (a small index) to find the one
page you need, then fetch just that page. The environment-variables page is the
authoritative config list.
- After setup — the docs' MCP page (connect the Dograh MCP for agent authoring) and
the inference-providers page (add LLM/STT/TTS keys so an agent can actually talk).
Reference map
references/paths.md — the decision tree and which source to read per branch.
references/debug.md — the diagnostic method.
scripts/doctor.sh — read-only diagnostic accelerator (POSIX shells).
1---2name: dograh-setup3description: Set up, run, develop, and troubleshoot the Dograh voice-AI platform on any OS (macOS, Linux, Windows/WSL). Use whenever the user wants to install, deploy, run, or contribute to Dograh — or when a Dograh stack is broken: the UI won't load, the API health check (/api/v1/health) is failing, containers are unhealthy/restarting, ports conflict, Docker is missing, or a call has no audio (WebRTC/TURN). Covers the deploy paths (local quick, local+TURN, remote HTTPS) and the developer paths (devcontainer, host-managed). It orients first — detects your OS and what's installed, asks deploy-vs-develop — then drives Dograh's own scripts and docs instead of hard-coding steps. Trigger on "set up dograh", "install dograh", "dograh dev setup", "dograh won't start", or "dograh health check failing".4---56# Dograh: set up, develop & troubleshoot78Help the user stand up, develop on, or debug a self-hosted **Dograh** deployment — on9macOS, Linux, or Windows. Dograh is a small set of backing services plus an API and a10UI, run together most simply with Docker (though the services can also be external or11native).1213**Core principle: orient, then read the source — don't memorize it here.** The exact14scripts, commands, env vars, ports, and flows live in Dograh's own repo and docs, and15they change over time. This skill carries *how to reason* and *where to read* — it16deliberately does **not** restate those specifics, because a copy here would drift and17bloat your context. So: detect the situation, confirm what the user wants, then read the18authoritative source for the chosen path and do what it says.1920## Step 0 — Orient (always first)2122**1. Where am I, and what's available?** Detect the OS and shell — don't assume bash;23it may be Windows PowerShell or WSL2/Git-Bash. Check which tools actually exist before24relying on them (`docker`, `docker compose`, `curl`, `git`; plus `python`/`node` for25dev). Establish **where Dograh runs** — this machine, or a remote server you'll SSH into26and run everything *on*.2728**2. What does the user want?** Ask when it isn't clear:2930```31Deploy Dograh (run it) or Develop it (work on its code)?32 Deploy → Local machine or remote server?33 Develop → Containerized or native?34Backing services (database / cache / object storage):35 spin up fresh — or reuse ones the user already runs?36```3738**3. Docker is optional — ask, don't assume.** Docker Compose is the convenient default:39it brings up fresh backing services and the app in one step. But it is **not** required.40If the user already runs the database, cache, or object storage — or a managed41equivalent (Supabase, a managed Redis, S3) — Dograh can point at those via env vars, and42the app can run natively. The hard requirements are the *services*, not Docker. Read the43environment-variables doc (see Sources) for the exact wiring, and **ask** fresh-vs-reuse44rather than silently installing fresh infra or forcing Docker. (One buried gotcha: the45database must support the vector extension Dograh's migrations enable — a plain Postgres46without it will fail to migrate.)4748**4. Consent checkpoints — do not infer.** Before installing packages, starting49services, creating files, or running setup scripts, stop and summarize the intended path50in one sentence. Ask for explicit confirmation if any of these are true:5152- Docker is not installed and would need to be installed.53- The deployment will create fresh backing services instead of reusing existing ones.54- The setup will write into the user's home directory, create `.env`, certificates,55 Docker volumes, or start long-running services.56- The user has not explicitly chosen local Docker, remote Docker, devcontainer, or57 host-managed native setup.5859A tool approval prompt is not a substitute for setup-choice confirmation. It authorizes60a command only; it does not mean the user agreed with the inferred architecture.6162If Docker is missing, do not install it automatically. First ask whether the user wants63Docker Compose with fresh bundled services or a native/external-service setup. Install64Docker only after the user explicitly chooses the Docker path.6566## Act — read the source for the chosen path, then drive it6768Don't follow step lists from memory — read Dograh's current source and do what it says.69`references/paths.md` maps each branch to *which source to read*. In short:7071- **The authoritative steps** for any path live in Dograh's docs (start at the index72 `https://docs.dograh.com/llms.txt`, open the one relevant deployment or contributor73 page, and fetch *just that page* — never the whole corpus) and in the repo's74 `scripts/AGENTS.md`, which catalogues the setup scripts. Read those to learn which75 script/command to run.76- **Before running any setup script, read it.** They're short shell scripts (you've just77 downloaded one, or can fetch it from the repo). Reading it shows its prompts, the env78 vars that bypass them, and whether it starts the stack — all of which you need.79- **Env vars, ports, and services** are defined in the environment-variables doc and the80 `docker-compose` file — read those instead of assuming values.81- Adapt to the detected OS (Dograh ships PowerShell variants of the user-facing scripts;82 bash-only ones run under WSL2).8384## Running scripts as an agent (non-interactive)8586The setup scripts prompt for input, and some end by running `docker compose up` in the87foreground — either would stall a non-interactive shell. They're non-interactive-*safe*88(no TTY → they fall back to defaults instead of hanging), but to get the config the user89actually wants:9091- **Read the script first** to learn its prompts and the env vars that preset them, then92 run it with those env vars set from the user's Step-0 answers — no prompts needed.93- **Start the stack yourself, detached** (background it / use the detached form) so a94 foreground `up` can't block you. Then verify with `doctor.sh` instead of tailing logs.9596## Diagnose9798Read `references/debug.md` — a *method*, not a lookup table. It tells you what to inspect99(read-only), in what order, and how to reason; the **logs and the compose file are the100source of truth** for what's actually wrong. On a POSIX shell, `scripts/doctor.sh` runs101the read-only pass for you; on Windows PowerShell, follow the method by hand.102103## Guardrails104105- **Never run a destructive command** — anything that deletes volumes/data (e.g. a106 `down -v`) — without explicit confirmation; it erases the database and recordings.107- **Some values are write-once** (e.g. the DB password is baked into the data volume on108 first init); the compose file flags these — changing them later breaks things.109- **Don't fabricate config or invent flags** — regenerate secrets the way the scripts do,110 or re-run the script. One change at a time, then re-check.111112## After every run — offer feedback (consent required)113114When a run wraps up (setup finished, or a debug session resolved or ended), offer to115send a short note back so the skill improves:1161171. **Ask** — "Want to share quick feedback on how that went? (optional)". If they118 decline, send nothing and stop.1192. **Compose a one-line comment** = light context + their words, e.g.120 `[deploy-remote | success | macOS] doctor.sh caught the missing OSS_JWT_SECRET fast — smooth.`121 Context is: the path taken (deploy-local / deploy-remote / dev-devcontainer /122 dev-host-managed), the outcome (success / partial / failed), and the OS — then the123 user's verbatim words.1243. **Show the user the exact text and confirm.** Sending appends it to a Google Sheet125 and emails the Dograh team, so consent must be explicit.1264. **On an explicit yes, send it:**127 Run the bundled `scripts/send_feedback.sh` from this skill directory with the comment as its only argument.128 On Windows PowerShell, POST the same JSON instead:129 `Invoke-RestMethod -Method Post -ContentType 'application/json' -Body '{"comments":"<text>"}' -Uri <webhook>`.1305. **Never include** secrets, tokens, full `.env` values, IPs, or credentials — only the131 path, outcome, OS, and the user's words.132133## Sources of truth (read these; don't restate them)134135- **Repo** — `https://github.com/dograh-hq/dograh`, especially `scripts/AGENTS.md` (the136 setup-script catalogue) and the `docker-compose` files (services, ports, profiles).137- **Docs** — `https://docs.dograh.com`; use `…/llms.txt` (a small index) to find the one138 page you need, then fetch just that page. The environment-variables page is the139 authoritative config list.140- **After setup** — the docs' MCP page (connect the Dograh MCP for agent authoring) and141 the inference-providers page (add LLM/STT/TTS keys so an agent can actually talk).142143## Reference map144145- `references/paths.md` — the decision tree and *which source to read* per branch.146- `references/debug.md` — the diagnostic method.147- `scripts/doctor.sh` — read-only diagnostic accelerator (POSIX shells).