Thanks for your interest in contributing! This guide covers the basics.
git clone https://github.com/agno-agi/dash.git && cd dash
cp example.env .env
# Edit .env and add your OPENAI_API_KEY
./scripts/venv_setup.sh && source .venv/bin/activate
docker compose up -d --build
python scripts/generate_data.py
python scripts/load_knowledge.py- Fork the repo and create a branch from
main. - Make your changes.
- Run the checks:
./scripts/format.sh # ruff format + import sorting ./scripts/validate.sh # ruff lint + mypy type checking
- Run evals if your change touches agent behavior:
python -m evals --verbose
- Open a pull request against
main.
- Formatter/linter: ruff (line length 120)
- Type checking: mypy with
check_untyped_defsandno_implicit_optional - Keep imports sorted (handled by
./scripts/format.sh). - CI runs format check, lint, and type check on every push and PR.
Before diving in, review the CLAUDE.md file for a detailed overview of the project structure, dual-schema design, and key patterns.
A few things to keep in mind:
- The
publicschema is read-only — never modified by agents. - The
dashschema is owned by the Engineer agent. - Tool functions use a closure/factory pattern (
create_*_tool()indash/tools/). - Instructions are composed dynamically in
dash/instructions.py.
- Create a case file in
evals/cases/. - Register it in
evals/__init__.py. - Run
python -m evals --category <name>to verify.
- Keep PRs focused — one concern per PR.
- Include a short description of what changed and why.
- If your change affects agent behavior, include sample queries and expected output.
- Make sure CI is green before requesting review.
Use GitHub Issues. Include:
- Steps to reproduce
- Expected vs. actual behavior
- Environment details (OS, Python version, Docker version)
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.