# OpenCode Monorepo Agent Guide This file is for coding agents working in `/Users/ryanvogel/dev/opencode`. ## Scope And Precedence - Start with this file for repo-wide defaults. - Then check package-local `AGENTS.md` files for stricter rules. - Existing local guides include `packages/opencode/AGENTS.md` and `packages/app/AGENTS.md`. - Package-specific guides override this file when they conflict. ## Repo Facts - Package manager: `bun` (`bun@1.3.11`). - Monorepo tool: `turbo`. - Default branch: `dev`. - Root test script intentionally fails; do not run tests from root. ## Cursor / Copilot Rules - No `.cursor/rules/` directory found. - No `.cursorrules` file found. - No `.github/copilot-instructions.md` file found. - If these files are added later, treat them as mandatory project policy. ## High-Value Commands Run commands from the correct package directory unless noted. ### Root - Install deps: `bun install` - Run all typechecks via turbo: `bun run typecheck` - OpenCode dev CLI entry: `bun run dev` - OpenCode serve (common): `bun run dev serve --hostname 0.0.0.0 --port 4096` ### `packages/opencode` - Dev CLI: `bun run dev` - Typecheck: `bun run typecheck` - Tests (all): `bun test --timeout 30000` - Tests (single file): `bun test test/path/to/file.test.ts --timeout 30000` - Tests (single test name): `bun test test/path/to/file.test.ts -t "name fragment" --timeout 30000` - Build: `bun run build` - Drizzle helper: `bun run db` ### `packages/app` - Dev server: `bun dev` - Build: `bun run build` - Typecheck: `bun run typecheck` - Unit tests (all): `bun run test:unit` - Unit tests (single file): `bun test --preload ./happydom.ts ./src/path/to/file.test.ts` - Unit tests (single test name): `bun test --preload ./happydom.ts ./src/path/to/file.test.ts -t "name fragment"` - E2E tests: `bun run test:e2e` ### `packages/mobile-voice` - Start Expo: `bun run start` - Start Expo dev client: `bunx expo start --dev-client --clear --host lan` - iOS native run: `bun run ios` - Android native run: `bun run android` - Lint: `bun run lint` - Expo doctor: `bunx expo-doctor` - Dependency compatibility check: `bunx expo install --check` ### `packages/apn-relay` - Start relay: `bun run dev` - Typecheck: `bun run typecheck` - DB connectivity check: `bun run db:check` ## Build / Lint / Test Expectations - Always run the narrowest checks that prove your change. - For backend changes: run package typecheck + relevant tests. - For mobile changes: run `expo lint` and at least one `expo` compile-style command if possible. - Never claim tests passed unless you ran them in this workspace. ## Single-Test Guidance - Prefer running one file first, then broaden scope. - For Bun tests, pass the file path directly. - For name filtering, use `-t "..."`. - Keep original timeouts when scripts define them. ## Code Style Guidelines These conventions are already used heavily in this repo and should be preserved. ### Formatting - Use Prettier defaults configured in root: `semi: false`, `printWidth: 120`. - Keep imports grouped and stable; avoid noisy reorder-only edits. - Avoid unrelated formatting churn in touched files. ### Imports - Prefer explicit imports over dynamic imports unless runtime gating is required. - Prefer existing alias patterns (for example `@/...`) where already configured. - Do not introduce new dependency layers when a local util already exists. ### Types - Avoid `any`. - Prefer inference for local variables. - Add explicit annotations for exported APIs and complex boundaries. - Prefer `zod` schemas for request/response validation and parsing. ### Naming - Follow existing repo preference for short, clear names. - Use single-word names when readable; use multi-word only for clarity. - Keep naming consistent with nearby code. ### Control Flow - Prefer early returns over nested `else` blocks. - Keep functions focused; split only when it improves reuse or readability. ### Error Handling - Fail with actionable messages. - Avoid swallowing errors silently. - Log enough context to debug production issues (IDs, env, status), but never secrets. - In UI code, degrade gracefully for missing capabilities. ### Data / DB - For Drizzle schema, use snake_case fields and columns. - Keep migration and schema changes minimal and explicit. - Follow package-specific DB guidance in `packages/opencode/AGENTS.md`. ### Testing Philosophy - Prefer testing real behavior over mocks. - Add regression tests for bug fixes where practical. - Keep fixtures small and focused. ## Agent Workflow Tips - Read existing code paths before introducing new abstractions. - Match local patterns first; do not impose a new style per file. - If a package has its own `AGENTS.md`, review it before editing. - For OpenCode Effect services, follow `packages/opencode/AGENTS.md` strictly. ## Known Operational Notes - `packages/app/AGENTS.md` says: never restart app/server processes during that package's debugging workflow. - `packages/app/AGENTS.md` also documents local backend+web split for UI work. - `packages/opencode/AGENTS.md` contains mandatory Effect and database conventions. ## Regeneration / Special Scripts - Regenerate JS SDK with: `./packages/sdk/js/script/build.ts` ## Quick Checklist Before Finishing - Ran relevant package checks. - Updated docs/config when behavior changed. - Avoided committing unrelated files. - Kept edits minimal and aligned with local conventions.