3.6 KiB
Remote Cloud Environment Instructions
Setup notes and caveats for developing Kandev in ephemeral cloud VMs (Cursor Cloud, Codex, GitHub Codespaces, or similar sandboxed environments).
Runtime requirements
- Go 1.26 — install to
/usr/local/goand ensurePATHincludes/usr/local/go/bin. - Node.js 24 — use
nvm install 24 && nvm use 24. - pnpm 9.15.9 — matches
packageManagerinapps/package.json. Install withnpm install -g pnpm@9.15.9. - golangci-lint v2 — required for
make lint-backend. Install withgo install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest. - gcc — required for CGO (SQLite FTS5). Pre-installed on most Ubuntu-based cloud VMs.
- Azure Repos PR creation (optional) — only needed when testing
worktree.create_pragainst Azure remotes outside the published Docker image:- Azure CLI (
az) onPATH - DevOps extension:
az extension add --name azure-devops - Auth:
az loginorexport AZURE_DEVOPS_EXT_PAT=<pat> - The
ghcr.io/kdlbs/kandevimage shipsgh,az, and theazure-devopsextension preinstalled (see rootDockerfile). - Host routing table:
apps/backend/internal/agentctl/AGENTS.md.
- Azure CLI (
Generated files before typecheck
Before running make typecheck, you must generate two files that are gitignored:
node apps/web/scripts/generate-release-notes.mjs
node apps/web/scripts/generate-changelog.mjs
Without these, tsc fails with missing module errors for @/generated/release-notes.json and @/generated/changelog.json.
Running dev mode
make dev from the repo root builds the backend and starts both the Go backend (port 38429) and Next.js frontend (port 37429). The CLI launcher sets KANDEV_DEBUG_DEV_MODE=true which activates the dev profile from profiles.yaml, enabling mock agent and other dev conveniences. No external services (database, message queue, Docker) are needed — SQLite is embedded and the event bus runs in-memory.
Key commands
All documented in the root Makefile:
make dev— build + start backend + web (dev mode)make test— backend (Go) + web (vitest) + CLI testsmake lint— golangci-lint + ESLintmake typecheck— TypeScript type-checking across all appsmake fmt— format all code (run before lint to avoid false positives)make test-e2e— Playwright E2E tests (requiresmake build-backend && make build-webfirst). Usese2e/playwright.config.ts. 1000+ specs.
Firecracker / cloud-VM caveats
These apply to Cursor Cloud, Codex, and similar Firecracker-backed sandboxes:
- golangci-lint PATH:
go installplaces the binary in~/go/bin/. EnsurePATHincludes it (the update script appends to~/.bashrc, but in-session shells may needexport PATH="$PATH:$HOME/go/bin"). - First page load:
make devcompiles pages on first visit via Turbopack — expect ~25 s for the initial load. - CLI test flake:
src/ports.test.ts > isPortInUse > returns false within the timeout when the host black-holes packetsfails because192.0.2.1behaves differently inside Firecracker. This is a known environment-specific flake, not a code issue. - Playwright browser installation:
playwright install chromiumhangs during zip extraction (Node.js io_uring incompatibility with the Firecracker kernel). Workaround:scripts/install-playwright-browsers.shruns the install with a timeout, then falls back to extracting the already-downloaded zips withunzip. The update script calls this automatically. System deps can be installed viaplaywright install-deps chromium.