- Only
python3is guaranteed. Do not assumepythonexists. - Prefer package scripts and repo-provided entrypoints over raw commands. When a
repo uses Python, prefer
uv run; when it uses Bun, preferbun run. - Treat install, dev, and test commands as executable code. Inspect manifests, package scripts, lockfiles, Docker files, and setup scripts before running them in unfamiliar repos.
- Bun: keep
bunfig.tomlwithminimumReleaseAge = 604800. - uv: add optional
exclude-newer = "P7D"only after confirming the localuvversion supports relativeexclude-newerdurations. - pnpm: keep
minimumReleaseAge: 10080inpnpm-workspace.yaml. - Bundler: use
source "https://rubygems.org", cooldown: 7only with Bundler4.0.13or newer, then pin that Bundler version inGemfile.lock. - CI should use locked installs:
bun install --frozen-lockfileuv sync --lockedwhen a Python workspace is presentpnpm install --frozen-lockfilewhen pnpm is used.bundle installwith deployment/frozen settings when Ruby is used.
- Commit lockfiles.
stacks/typescript: framework-neutral Bun/TypeScript conventions.scripts: stable project entrypoints.docs: contributor-facing documentation.stacks/python: optional Python API/shared-package workspace.stacks/ruby: optional Ruby/Rails/Rack workspace conventions..context: gitignored workspace-local scratch for Conductor and agents.
- Run infrastructure with Docker Compose.
- Run app services on the host for reload speed and debuggability.
- Use
./scripts/worktree-ports.sh envto inspect local ports. - Use
./scripts/docker-compose.shinstead of rawdocker composefor local worktree-safe infra. - Use
./scripts/dev.shfor host-run app services. - Treat
apps/*as disposable wiring examples, not framework code to cargo-cult into every project. - Do not assume a frontend framework from this devkit. Choose Next.js, Vite, TanStack Start, Astro, Expo, or no frontend based on the target project.
- Keep
.worktreeincludeas a short allowlist of ignored local config to copy into sibling worktrees, such as.env,.env.local, and.sops.yaml. - Keep
.dockerignorein sync with the repo shape so Docker build contexts exclude secrets, local dependencies, caches,.context/, and generated outputs.
- Read target files, callers, exports, tests, and obvious shared utilities before editing.
- Keep edits surgical.
- Do not reformat unrelated files.
- Add or update tests when behavior changes.
- Update
.env.examplewhen adding configuration. - Update docs when changing developer workflows.
- When selecting the Python stack, the included examples use Pydantic for settings/boundary schemas and Alembic for database migrations. Keep them when they fit; replace them when the target repo has better existing choices.
- Before adding uv cooldown config, run
uv --no-config --version. Relativeexclude-newervalues such asP7Drequire uv0.9.17or newer. If the target machine is older, ask before upgrading uv; do not writeP7Dor7 daysintopyproject.tomloruv.tomlbecause older uv clients fail during settings discovery. - Before adding Bundler cooldown config, run
bundle --version. Thecooldown:source option requires Bundler4.0.13or newer. If Bundler is older, ask before upgrading it; do not add cooldown syntax that the target repo's Bundler cannot parse. - The TypeScript stack includes Drizzle examples for database access. Keep Drizzle when it fits; replace it when the target repo already uses another data-access layer.
- Keep secrets in environment variables or SOPS-managed files, never in code.
Use .context/ for workspace-local agent scratch only. Do not commit it.
Durable project knowledge belongs in tracked docs:
- Architecture and layout:
README.md,docs/template-proposal.md,docs/pattern-report.md. - Tooling decisions:
docs/tooling.md,docs/supply-chain.md. - Local development runbooks:
docs/development.md. - Repeated failure patterns: concise tracked docs, not raw logs or transcripts.
Before calling work complete, run the narrowest relevant checks:
./scripts/lint.sh
./scripts/typecheck.sh
./scripts/test.shFor broader changes, run:
./scripts/check-all.sh