Prompt file imported from Valynt/ValueOS (
.windsurf/workflows/init.md). Copyright stays with the author.
Initialize ValueOS
ValueOS uses a devcontainer-first model. The environment is initialized automatically via Ona automations — no manual multi-terminal setup required.
Standard path (Ona automations)
On environment start, automations run in this order:
-
installDeps(postDevcontainerStart) — runsbootstrap.sh:- Validates toolchain versions against
.devcontainer/versions.json - Provisions
.envfrom.env.exampleif missing - Runs
pnpm install --frozen-lockfile - Smoke-tests that
turboandtsxresolve
- Validates toolchain versions against
-
backendservice (postEnvironmentStart) — waits fornode_modules/.modules.yaml, opens port 3001, starts Express -
frontendservice (postEnvironmentStart) — waits fornode_modules/.modules.yaml, opens port 5173, starts Vite
Check status:
gitpod automations task list
gitpod automations service list
Manual initialization (if automations did not run)
# Install dependencies — always use --frozen-lockfile
bash .devcontainer/scripts/bootstrap.sh
# Start services
gitpod automations service start backend
gitpod automations service start frontend
Required credentials
Before services will start successfully, set in ops/env/.env.backend.local:
SUPABASE_URL=https://your-project-ref.supabase.co
SUPABASE_ANON_KEY=your-anon-key
SUPABASE_KEY=your-anon-key # same value as SUPABASE_ANON_KEY
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
DATABASE_URL=postgresql://...
TCT_SECRET=<generate: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))">
WEB_SCRAPER_ENCRYPTION_KEY=<generate: same command>
Verify
curl http://localhost:3001/health
# Expected: {"status":"healthy",...}
Rules
- Never use
--no-frozen-lockfile— if the lockfile is out of sync, fix it and commit - Never add
postCreateCommandorpostStartCommandtodevcontainer.json— all setup runs through automations - Never install
turboortsxglobally — they are workspace devDependencies