| name | creating-daiv-yml-config |
| description | Creates or updates .daiv.yml configuration file with sandbox settings (base_image and format_code commands) based on repository content. Use when users request DAIV configuration setup or sandbox configuration. |
| scope | issue |
Creating .daiv.yml configuration files
Authoring workflow
Use this checklist to guide your work:
.daiv.yml Progress
- [ ] Step 1: Fetch latest configuration documentation from the URL above
- [ ] Step 2: Check if .daiv.yml already exists and read its contents
- [ ] Step 3: Check CI/CD configs for Docker images (GitHub Actions, GitLab CI, etc.)
- [ ] Step 4: If no CI/CD config, detect repository language/stack and version
- [ ] Step 5: Determine appropriate base_image (from CI/CD or detected language)
- [ ] Step 6: Identify formatters/linters from config files, scripts, README.md, AGENTS.md, or CLAUDE.md
- [ ] Step 7: Construct format_code commands matching repository conventions
- [ ] Step 8: Create or update .daiv.yml with sandbox section only
- [ ] Step 9: Validate YAML syntax and structure
Documentation reference
Always fetch the latest configuration schema before creating or updating .daiv.yml: https://srtab.github.io/daiv/latest/configuration/yaml-config/
This ensures you use the most current schema and options available.
Base image selection
Determine the base image using the following priority order:
Check CI/CD configuration files first:
- Look for Docker images declared in CI/CD configs (GitHub Actions workflows, GitLab CI, CircleCI, etc.). These typically specify the exact images used in the project's build pipeline and are the most reliable source.
If no CI/CD config found, detect language and version:
- Identify the primary programming language from package managers and config files (pyproject.toml, package.json, Cargo.toml, go.mod, etc.)
- Determine the language version from version files (.python-version, .nvmrc, rust-toolchain.toml, go.mod, etc.)
- Select an appropriate base image matching the detected language and version
- Prefer Alpine-based images for smaller size when available
Format code command detection
Identify formatting and linting tools from repository configuration files and scripts. Preserve existing conventions rather than imposing new ones.
Detection approach:
- Check package manager config files for formatter/linter tool declarations
- Look for tool-specific configuration files (e.g.,
.prettierrc,ruff.toml,.eslintrc, etc.) - Review Makefile or package.json scripts for
format,lint,checktargets - Check README.md, AGENTS.md, or CLAUDE.md for documented formatting/linting commands
- Prefer existing scripts/commands over constructing new ones
- Avoid using
.pre-commit-config.yamlas reference—pre-commit hooks often include additional checks not suitable forformat_code
Command construction principles:
- Use the exact commands found in scripts or CI/CD configs when available
- If tools need installation, add dependency installation commands first
- Run linter fixes before formatters (order: lint fixes, then formatting)
- Use safe execution flags (--fix, write modes) to avoid errors
- When multiple formatters are detected, include all relevant commands in appropriate order
When no formatters/linters are detected:
- Limit investigation to checking common config files and scripts only
- Do not spend excessive tool calls searching for formatters that may not exist
- If no formatting/linting tools are found after reasonable checks, omit
format_codefrom the configuration (set tonullor exclude the key) - Never invent or impose formatters that don't exist in the repository
Format code command construction
Build commands that match repository conventions:
Dependency installation: If tools aren't in base image, add install step using the appropriate package manager for the detected language
Command order: Run linters with --fix before formatters
Working directory: Use
.for repository root, or specific paths if tools are scopedPreserve existing patterns: If Makefile or package.json scripts exist, prefer those over direct tool invocations
Error handling: Commands should be safe to run (--fix flags, write modes)
Output template
Create or update .daiv.yml with only the sandbox section:
sandbox:
base_image: "python:3.12-alpine"
format_code:
- "pip install ruff"
- "ruff check --fix"
- "ruff format"
If .daiv.yml exists with other sections, preserve them and only add/update the sandbox section.
Quality guardrails
- Only configure
sandboxsection (base_imageandformat_code) - Never remove or modify other
.daiv.ymlsections if they exist - Use specific image versions (not
latest) for reproducibility - Include dependency installation in
format_codeif tools aren't in base image - Match repository's existing formatting conventions
- Validate YAML syntax before completing
- Keep
format_codecommands concise and executable - Prefer Alpine-based images for smaller container size
- Use official Docker images from Docker Hub or verified registries
- If no formatters/linters are detected after checking common config files and scripts, omit
format_coderather than inventing commands - Limit investigation time—do not exhaustively search for formatters that may not exist
Examples
Example 1: Python project with ruff
Detected: pyproject.toml with [tool.ruff], Python 3.12
Output:
sandbox:
base_image: "python:3.12-alpine"
format_code:
- "pip install ruff"
- "ruff check --fix"
- "ruff format"
Example 2: Node.js project with prettier and eslint
Detected: package.json with prettier and eslint configs, Node 20
Output:
sandbox:
base_image: "node:20-alpine"
format_code:
- "npm install"
- "npx eslint --fix ."
- "npx prettier --write ."
Example 3: Rust project
Detected: Cargo.toml, rust-toolchain.toml with 1.75.0
Output:
sandbox:
base_image: "rust:1.75-alpine"
format_code:
- "cargo fmt"
Example 4: Go project
Detected: go.mod with Go 1.21
Output:
sandbox:
base_image: "golang:1.21-alpine"
format_code:
- "gofmt -w ."
Example 5: Python project using uv
Detected: pyproject.toml with uv, Python 3.14
Output:
sandbox:
base_image: "ghcr.io/astral-sh/uv:python3.14-bookworm-slim"
format_code:
- "uv sync --only-group=dev"
- "uv run --only-group=dev ruff check . --fix"
- "uv run --only-group=dev ruff format ."
Example 6: Project with no formatters detected
Detected: Base image from CI/CD, but no formatting/linting tools found
Output:
sandbox:
base_image: "python:3.12-alpine"