# Developer Setup This page is the short path for contributors who already have the repository checked out and want a working local SF development environment. ## Prerequisites - Node.js 26.1 or newer - npm - Git - Rust toolchain for native engine work - GitHub CLI for label, issue, and PR workflows - Docker or a compatible container runtime for devcontainer verification ## First-Time Setup ```bash npm install npm run secret-scan:install-hook node scripts/tech-debt-scan.mjs ``` Optional but recommended: ```bash devcontainer build --workspace-folder . ``` ## Daily Checks Use the narrowest command that proves the change: ```bash npm run lint npm run typecheck:extensions npm run test:unit ``` Before shipping changes that affect the CLI runtime: ```bash npm run build:core npm run test:smoke ``` For coverage-sensitive changes: ```bash npm run test:coverage ``` The global floor is intentionally modest, but autonomous paths have stricter coverage thresholds in `vitest.config.ts`. ## Environment Variables SF-specific environment variables are parsed through `src/env.ts` for typed callers. Add new `SF_*` variables there before introducing new production reads. Document user-facing variables in `docs/user-docs/configuration.md`. Common local overrides: | Variable | Purpose | |----------|---------| | `SF_HOME` | Redirect global SF runtime state away from `~/.sf`. | | `SF_AGENT_DIR` | Override the managed agent directory used by headless/runtime loaders. | | `SF_PROJECT_ID` | Override the project state key; must be alphanumeric, hyphen, or underscore. | | `SF_BIN_PATH` | Point child processes at a specific SF loader. | ## Contribution Contract Every behavioral change starts with a failing behavior test or executable evidence. Keep commits focused, avoid drive-by formatting, and do not commit transient `.sf/` runtime state.