## Summary Local development and cookbook work need the same dependencies as demos. Both Unix setup scripts now install local editable `agnoctl[dev]` and `agno[demo]`, while keeping `.venv` for daily development and `.venvs/demo` for dedicated demos. - Remove `scripts/cookbook_setup.sh`; use `scripts/dev_setup.sh` for cookbook development. - Enable strict shell error handling, explicitly target the environment's Python, and make clipboard failures non-fatal. - Keep short activation commands relative to the repository root and update contributor and agent instructions. ## Type of change - [x] Bug fix - [ ] New feature - [x] Breaking change - [x] Improvement - [ ] Model update - [ ] Other: --- ## Checklist - [x] Code complies with style guidelines - [x] Ran format/validation scripts (`./scripts/format.sh` and `./scripts/validate.sh`) - [x] Self-review completed - [x] Documentation updated (comments, docstrings) - [ ] Examples and guides: Relevant cookbook examples have been included or updated (if applicable) - [ ] Tested in clean environment - [ ] Tests added/updated (if applicable) ### Duplicate and AI-Generated PR Check - [x] I have searched existing [open pull requests](https://github.com/agno-agi/agno/pulls) and confirmed that no other PR already addresses this issue - [x] If a similar PR exists, I have explained below why this PR is a better approach - [x] Check if this PR was entirely AI-generated (by Copilot, Claude Code, Cursor, etc.) --- ## Additional Notes ### Validation - `bash -n scripts/dev_setup.sh scripts/demo_setup.sh` and `git diff --check`: passed. - Isolated shell smoke checks for both retained setup scripts: passed for successful setup, active-environment rejection, missing `uv`, and installation failure. Successful runs also exercised paths with spaces, failing clipboard commands, and preservation of the other environment. - `uv pip install --dry-run --python .venv/bin/python -e 'libs/agnoctl[dev]' -e 'libs/agno[demo]'`: resolved 235 packages successfully. This was a dependency-resolution check, not a fresh install or a live demo run. - `./scripts/format.sh`: passed. Its unrelated formatting edits were reverted to keep this PR focused. - `./scripts/validate.sh`: failed. The latest run reports 32 mypy errors in 10 unchanged framework files in the current local environment, including SQL adapters, public limits, Google model compatibility, Anthropic, and AWS. The earlier run reported six errors. Other checks passed during the latest run after formatting. Draft pending the repository validation gate. No existing development or demo environment was rebuilt. Windows setup scripts are outside this change. Removing the cookbook script requires callers to switch to `./scripts/dev_setup.sh`; any existing `agnoenv` directory is left untouched. Dev setup now installs the larger demo bundle, including for CI jobs that call it. Related PR #8020 only quotes variables in an older version of `dev_setup.sh`. The current base already quotes those installation and removal paths; this PR addresses dependency parity, separate environment roles, script removal, and setup error handling.
7.4 KiB
Agno - Agent Instructions
Instructions for AI coding agents (Claude Code, Codex, Cursor, etc.) working on this codebase.
Repository Structure
.
├── libs/agno/agno/ # Core framework code
├── cookbook/ # Examples, patterns and test cases (organized by topic)
├── scripts/ # Development and build scripts
├── specs/ # Design documents (symlinked, private)
├── docs/ # Documentation (symlinked, private)
└── .cursorrules # Coding patterns and conventions
Conductor Notes
When working in Conductor, you can use the .context/ directory for scratch notes or agent-to-agent handoff artifacts. This directory is gitignored.
Setting Up Symlinks
The specs/ and docs/ directories are symlinked from external locations. For a fresh clone or new workspace, create these symlinks:
ln -s ~/code/specs specs
ln -s ~/code/docs docs
These contain private design documents and documentation that are not checked into the repository.
Virtual Environments
This project uses two virtual environments:
| Environment | Purpose | Setup |
|---|---|---|
.venv/ |
Development and cookbooks: demo dependencies, tests, formatting, validation | ./scripts/dev_setup.sh |
.venvs/demo/ |
Dedicated demos: same dependencies, separate environment | ./scripts/demo_setup.sh |
Use .venv for development tasks (pytest, ./scripts/format.sh, ./scripts/validate.sh) and day-to-day cookbook work.
Use .venvs/demo for running demos in a separate environment. The cookbook commands below use this environment and also work with .venv/bin/python.
Testing Cookbooks
Apart from implementing features, your most important task will be to test and maintain the cookbooks in cookbook/ directory.
See
cookbook/08_learning/for the golden standard.
Quick Reference
Test Environment:
# Virtual environment with all dependencies
.venvs/demo/bin/python
# Setup (if needed)
./scripts/demo_setup.sh
# Database (if needed)
./cookbook/scripts/run_pgvector.sh
Run a cookbook:
.venvs/demo/bin/python cookbook/<folder>/<file>.py
Expected Cookbook Structure
Each cookbook folder should have the following files:
README.md— The README for the cookbook.TEST_LOG.md— Test results log.
Testing Workflow
1. Before Testing
- Ensure the virtual environment exists (run
./scripts/demo_setup.shif needed) - Start any required services (e.g.,
./cookbook/scripts/run_pgvector.sh)
2. Running Tests
# Run individual cookbook
.venvs/demo/bin/python cookbook/<folder>/<file>.py
# Tail output for long tests
.venvs/demo/bin/python cookbook/<folder>/<file>.py 2>&1 | tail -100
3. Updating TEST_LOG.md
After each test, update the cookbook's TEST_LOG.md with:
- Test name and path
- Status: PASS or FAIL
- Brief description of what was tested
- Any notable observations or issues
Format:
### filename.py
**Status:** PASS/FAIL
**Description:** What the test does and what was observed.
**Result:** Summary of success/failure.
---
Code Locations
| What | Where |
|---|---|
| Core agent code | libs/agno/agno/agent/ |
| Teams | libs/agno/agno/team/ |
| Workflows | libs/agno/agno/workflow/ |
| Tools | libs/agno/agno/tools/ |
| Models | libs/agno/agno/models/ |
| Knowledge/RAG | libs/agno/agno/knowledge/ |
| Memory | libs/agno/agno/memory/ |
| Learning | libs/agno/agno/learn/ |
| Database adapters | libs/agno/agno/db/ |
| Vector databases | libs/agno/agno/vectordb/ |
| Tests | libs/agno/tests/ |
Coding Patterns
See .cursorrules for detailed patterns. Key rules:
- Never create agents in loops — reuse them for performance
- Use output_schema for structured responses
- PostgreSQL in production, SQLite for dev only
- Start with single agent, scale up only when needed
- Both sync and async — all public methods need both variants
Running Code
Running cookbooks:
.venvs/demo/bin/python cookbook/<folder>/<file>.py
Running tests:
source .venv/bin/activate
pytest libs/agno/tests/
# Run a specific test file
pytest libs/agno/tests/unit/test_agent.py
When Implementing Features
- Check for design doc in
specs/— if it exists, follow it - Look at existing patterns — find similar code and follow conventions
- Create a cookbook — every pattern should have an example
- Update implementation.md — mark what's done
Before Submitting Code
Always run these scripts before pushing code or creating a PR:
# Activate the virtual environment first
source .venv/bin/activate
# Format all code (ruff format)
./scripts/format.sh
# Validate all code (ruff check, mypy)
./scripts/validate.sh
Both scripts must pass with no errors before code review.
PR Title Format:
PR titles must follow one of these formats:
type: description— e.g.,feat: add workflow serialization[type] description— e.g.,[feat] add workflow serializationtype-kebab-case— e.g.,feat-workflow-serialization
Valid types: feat, fix, cookbook, test, refactor, chore, style, revert, release
PR Description:
Always follow the PR template in .github/pull_request_template.md. Include:
- Summary of changes
- Type of change (bug fix, new feature, etc.)
- Completed checklist items
- Any additional context
GitHub Operations
Updating PR descriptions:
The gh pr edit command may fail with GraphQL errors related to classic projects. Use the API directly instead:
# Update PR body
gh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body="<PR_BODY>"
# Or with a file
gh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body="$(cat /path/to/body.md)"
Don't
- Don't implement features without checking for a design doc first
- Don't reference
specs/paths, spec section numbers, or ADR numbers in code comments, docstrings, or user-facing strings — specs are private; every comment must state its constraint standalone - Don't use f-strings for print lines where there are no variables
- Don't use emojis in examples and print lines
- Don't skip async variants of public methods
- Don't push code without running
./scripts/format.shand./scripts/validate.sh - Don't submit a PR without a detailed PR description. Always follow the PR template provided in
.github/pull_request_template.md. - Don't use
OpenAIChatin cookbooks or examples — useOpenAIResponsesinstead - Don't use
gpt-4oorgpt-4o-miniin cookbooks or examples — usegpt-5.6-lunainstead
CI: Automated Code Review
Every non-draft PR automatically receives a review from Opus using both code-review and pr-review-toolkit official plugins (10 specialized agents total). No manual trigger needed — the review posts as a sticky comment on the PR.
When running in GitHub Actions (CI), always end your response with a plain-text summary of findings. Never let the final action be a tool call. If there are no issues, say "No high-confidence findings."
Agno-specific checks to always verify:
- Both sync and async variants exist for all new public methods
- No agent creation inside loops (agents should be reused)
- Coding patterns in this file are followed
- No f-strings for print lines where there are no variables