{"owner":"agno-agi","repo":"agno","hasSkills":true,"totalSkillsCount":39,"totalTokensCount":15545,"categories":["cursor-rule","anthropic-skill","claude-rule","plugin-manifest","subagent-persona","root-instruction"],"hasMcp":true,"mcpConfig":{"mcpServers":{"agno":{"command":"npx","args":["-y","@modelcontextprotocol/server-agno"]}}},"found":[".cursorrules","cookbook/02_agents/16_skills/sample_skills/code-review/SKILL.md","cookbook/02_agents/16_skills/sample_skills/git-workflow/SKILL.md","cookbook/05_agent_os/23_skills/sample_skills/system-info/SKILL.md","cookbook/frameworks/antigravity/example_agent/skills/haiku/SKILL.md","CLAUDE.md","cookbook/91_tools/README.md","cookbook/05_agent_os/25_agentos_tools/README.md","cookbook/02_agents/04_tools/README.md","cookbook/03_teams/03_tools/README.md","cookbook/10_reasoning/agents/README.md","AGENTS.md","cookbook/10_reasoning/agents/TEST_LOG.md","cookbook/10_reasoning/tools/README.md","cookbook/10_reasoning/tools/TEST_LOG.md","cookbook/91_tools/advisor_tools/README.md","cookbook/91_tools/coding_tools/README.md","cookbook/91_tools/docling_tools/README.md","cookbook/91_tools/exceptions/README.md","cookbook/91_tools/google/README.md","cookbook/91_tools/mcp/README.md","cookbook/91_tools/models/README.md","cookbook/91_tools/other/README.md","cookbook/91_tools/parallel/README.md","cookbook/91_tools/tool_decorator/README.md","cookbook/91_tools/tool_hooks/README.md","cookbook/91_tools/workspace_tools/README.md","cookbook/environments/_26_multi_step_tools/README.md","cookbook/04_workflows/06_advanced_concepts/tools/README.md","cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md","cookbook/90_models/anthropic/skills/README.md","cookbook/90_models/anthropic/skills/TEST_LOG.md","cookbook/91_tools/mcp/dynamic_headers/README.md","cookbook/91_tools/mcp/local_server/README.md","cookbook/91_tools/mcp/mcp_toolbox_demo/README.md","cookbook/91_tools/mcp/sse_transport/README.md","cookbook/91_tools/mcp/streamable_http_transport/README.md","cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md","cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md"],"skills":{".cursorrules":"You are an expert in Python, Agno framework, and AI agent development.\n\nCore Rules\n- NEVER create agents in loops - reuse them for performance\n- Always use output_schema for structured responses\n- PostgreSQL in production, SQLite for dev only\n- Start with single agent, scale up only when needed\n\nDocumentation:\n- Don't use f-strings for print lines where there are no variables to format.\n- Don't use emojis in examples and print lines\n\nBasic Agent (start here):\n```python\nfrom agno.agent import Agent\nfrom agno.models.openai import OpenAIResponses\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    instructions=\"You are a helpful assistant\",\n    markdown=True,\n)\nagent.print_response(\"Your query\", stream=True)\n```\n\nAgent with Tools:\n```python\nfrom agno.tools.websearch import WebSearchTools\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    tools=[WebSearchTools()],\n    instructions=\"Search the web for information\",\n)\n```\n\nCRITICAL: Agent Reuse Performance\n```python\n# WRONG - Recreates agent every time (significant overhead)\nfor query in queries:\n    agent = Agent(...)  # DON'T DO THIS\n    \n# CORRECT - Create once, reuse\nagent = Agent(...)\nfor query in queries:\n    agent.run(query)\n```\n\nWhen to Use Each Pattern\n\nSingle Agent (90% of use cases):\n- One clear task or domain\n- Can be solved with tools + instructions\n- Example: Search, analyze, generate content\n\nTeam (autonomous coordination):\n- Multiple specialized agents with different expertise\n- Agents decide who does what via LLM\n- Complex tasks requiring multiple perspectives\n- Example: Research + Analysis + Writing\n\nWorkflow (programmatic control):\n- Sequential steps with clear flow\n- Need conditional logic or branching\n- Full control over execution order\n- Example: Extract → Transform → Load pipelines\n\nTeam Pattern:\n```python\nfrom agno.team.team import Team\n\nweb_agent = Agent(\n    name=\"Researcher\",\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    tools=[WebSearchTools()],\n)\n\nwriter_agent = Agent(\n    name=\"Writer\",\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n)\n\nteam = Team(\n    members=[web_agent, writer_agent],\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    instructions=\"Research and write articles\",\n)\n```\n\nWorkflow Pattern:\n```python\nfrom agno.workflow.workflow import Workflow\nfrom agno.db.sqlite import SqliteDb\n\n# Define agents first (researcher, writer)\nasync def blog_workflow(session_state, topic: str):\n    # Step 1: Research\n    research = await researcher.arun(topic)\n    \n    # Step 2: Write\n    article = await writer.arun(research.content)\n    \n    return article\n\nworkflow = Workflow(\n    name=\"Blog Generator\",\n    steps=blog_workflow,\n    db=SqliteDb(db_file=\"tmp/workflow.db\"),\n)\n```\n\nKnowledge/RAG:\n```python\nfrom agno.knowledge.knowledge import Knowledge\nfrom agno.vectordb.lancedb import LanceDb, SearchType\nfrom agno.knowledge.embedder.openai import OpenAIEmbedder\n\nknowledge = Knowledge(\n    vector_db=LanceDb(\n        uri=\"tmp/lancedb\",\n        table_name=\"knowledge_base\",\n        search_type=SearchType.hybrid,\n        embedder=OpenAIEmbedder(id=\"text-embedding-3-small\"),\n    ),\n)\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    knowledge=knowledge,\n    search_knowledge=True,  # Critical: enables agentic RAG\n    instructions=\"Use knowledge base, cite sources\"\n)\n```\n\nChat History:\n```python\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    db=SqliteDb(db_file=\"tmp/agents.db\"),\n    user_id=\"user-123\",\n    add_history_to_context=True,  # Adds previous messages\n    num_history_runs=3,\n)\n```\n\nStructured Output:\n```python\nfrom pydantic import BaseModel\n\nclass Result(BaseModel):\n    summary: str\n    findings: list[str]\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    output_schema=Result,\n)\nresult: Result = agent.run(query).content\n```\n\nAgentOS Production:\n```python\nfrom agno.os import AgentOS\nfrom agno.db.postgres import PostgresDb\n\nagent_os = AgentOS(\n    agents=[agent],\n    db=PostgresDb(db_url=os.getenv(\"DATABASE_URL\")),\n)\napp = agent_os.get_app()\n```\n\nCommon Mistakes\n- Creating agents in loops (massive performance hit)\n- Using Team when single agent would work\n- Forgetting search_knowledge=True with knowledge\n- Using SQLite in production\n- Not adding history when context matters\n- Missing output_schema validation\n\nProduction\n- Use PostgresDb not SqliteDb\n- Set show_tool_calls=False, debug_mode=False\n- Wrap agent.run() in try-except\n\nDocs: https://docs.agno.com\n","cookbook/02_agents/16_skills/sample_skills/code-review/SKILL.md":"---\nname: code-review\ndescription: Code review assistance with linting, style checking, and best practices\nlicense: Apache-2.0\nmetadata:\n  version: \"1.0.0\"\n  author: agno-team\n  tags: [\"quality\", \"review\", \"linting\"]\n---\n# Code Review Skill\n\nYou are a code review assistant. When reviewing code, follow these steps:\n\n## Review Process\n1. **Check Style**: Reference the style guide using `get_skill_reference(\"code-review\", \"style-guide.md\")`\n2. **Run Style Check**: Use `get_skill_script(\"code-review\", \"check_style.py\")` for automated style checking\n3. **Look for Issues**: Identify potential bugs, security issues, and performance problems\n4. **Provide Feedback**: Give structured feedback with severity levels\n\n## Feedback Format\n- **Critical**: Must fix before merge (security vulnerabilities, bugs that cause crashes)\n- **Important**: Should fix, but not blocking (performance issues, code smells)\n- **Suggestion**: Nice to have improvements (naming, documentation, minor refactoring)\n\n## Review Checklist\n- [ ] Code follows naming conventions\n- [ ] No hardcoded secrets or credentials\n- [ ] Error handling is appropriate\n- [ ] Functions are not too long (< 50 lines)\n- [ ] No obvious security vulnerabilities\n- [ ] Tests are included for new functionality\n","cookbook/02_agents/16_skills/sample_skills/git-workflow/SKILL.md":"---\nname: git-workflow\ndescription: Git workflow guidance for commits, branches, and pull requests\nlicense: Apache-2.0\nmetadata:\n  version: \"1.0.0\"\n  author: agno-team\n  tags: [\"git\", \"version-control\", \"workflow\"]\n---\n# Git Workflow Skill\n\nYou are a Git workflow assistant. Help users with commits, branches, and pull requests following best practices.\n\n## Commit Message Guidelines\n\nFor commit message generation and validation, use `get_skill_script(\"git-workflow\", \"commit_message.py\")`.\n\n### Format\n```\n<type>(<scope>): <subject>\n\n<body>\n\n<footer>\n```\n\n### Types\n- **feat**: New feature\n- **fix**: Bug fix\n- **docs**: Documentation only\n- **style**: Formatting, no code change\n- **refactor**: Code change that neither fixes a bug nor adds a feature\n- **perf**: Performance improvement\n- **test**: Adding or updating tests\n- **chore**: Maintenance tasks\n\n### Examples\n```\nfeat(auth): add OAuth2 login support\n\nImplemented OAuth2 authentication flow with Google and GitHub providers.\nAdded token refresh mechanism and session management.\n\nCloses #123\n```\n\n```\nfix(api): handle null response from external service\n\nAdded null check before processing response data to prevent\nNullPointerException when external service returns empty response.\n\nFixes #456\n```\n\n## Branch Naming\n\n### Format\n```\n<type>/<ticket-id>-<short-description>\n```\n\n### Examples\n- `feature/AUTH-123-oauth-login`\n- `fix/BUG-456-null-pointer`\n- `chore/TECH-789-update-deps`\n\n## Pull Request Guidelines\n\n### Title\nFollow commit message format for the title.\n\n### Description Template\n```markdown\n## Summary\nBrief description of what this PR does.\n\n## Changes\n- Change 1\n- Change 2\n\n## Testing\nHow was this tested?\n\n## Checklist\n- [ ] Tests added/updated\n- [ ] Documentation updated\n- [ ] No breaking changes\n```\n\n## Common Commands\n\n### Starting Work\n```bash\ngit checkout main\ngit pull origin main\ngit checkout -b feature/TICKET-123-description\n```\n\n### Committing\n```bash\ngit add -p  # Interactive staging\ngit commit -m \"type(scope): description\"\n```\n\n### Updating Branch\n```bash\ngit fetch origin\ngit rebase origin/main\n```\n\n### Creating PR\n```bash\ngit push -u origin feature/TICKET-123-description\n# Then create PR on GitHub/GitLab\n```\n","cookbook/05_agent_os/23_skills/sample_skills/system-info/SKILL.md":"---\nname: system-info\ndescription: Inspect the host operating system, Python runtime, and local files\nlicense: MIT\nmetadata:\n  version: \"1.0.0\"\n  author: agno\n---\n# System Info Skill\n\nUse this skill when the user asks about the host running the AgentOS process or\nneeds a directory inventory from that host.\n\n## Available scripts\n\n- `get_system_info.py` returns the hostname, operating system, architecture,\n  Python version and executable, processor, and current UTC time.\n- `list_directory.py` lists the direct children of a directory. It accepts one\n  optional path argument and defaults to the skill directory.\n\n## Execution\n\nLoad these instructions before choosing a script. Execute a script through the\nskill tool and inspect its structured result:\n\n```python\nget_skill_script(\n    skill_name=\"system-info\",\n    script_path=\"get_system_info.py\",\n    execute=True,\n)\n```\n\nTo list a directory:\n\n```python\nget_skill_script(\n    skill_name=\"system-info\",\n    script_path=\"list_directory.py\",\n    execute=True,\n    args=[\".\"],\n)\n```\n\nOnly use data parsed from `stdout` when `returncode` is `0`. If execution\nreturns a nonzero code, report `stderr` or the JSON error instead of inferring\nthe result.\n","cookbook/frameworks/antigravity/example_agent/skills/haiku/SKILL.md":"# Haiku house style\n\nWhen writing a haiku for this bot, follow these conventions:\n\n- 5-7-5 syllable structure, strict.\n- Prefer concrete imagery over abstraction.\n- Include at least one season-word (kigo) when natural.\n- No emojis, no preamble, no closing remarks — output ONLY the haiku itself.\n","CLAUDE.md":"# Agno - Agent Instructions\n\nInstructions for AI coding agents (Claude Code, Codex, Cursor, etc.) working on this codebase.\n\n---\n\n## Repository Structure\n\n```\n.\n├── libs/agno/agno/          # Core framework code\n├── cookbook/                # Examples, patterns and test cases (organized by topic)\n├── scripts/                 # Development and build scripts\n├── specs/                   # Design documents (symlinked, private)\n├── docs/                    # Documentation (symlinked, private)\n└── .cursorrules             # Coding patterns and conventions\n```\n\n---\n\n## Conductor Notes\n\nWhen working in Conductor, you can use the `.context/` directory for scratch notes or agent-to-agent handoff artifacts. This directory is gitignored.\n\n---\n\n## Setting Up Symlinks\n\nThe `specs/` and `docs/` directories are symlinked from external locations. For a fresh clone or new workspace, create these symlinks:\n\n```bash\nln -s ~/code/specs specs\nln -s ~/code/docs docs\n```\n\nThese contain private design documents and documentation that are not checked into the repository.\n\n---\n\n## Virtual Environments\n\nThis project uses two virtual environments:\n\n| Environment | Purpose | Setup |\n|-------------|---------|-------|\n| `.venv/` | Development and cookbooks: demo dependencies, tests, formatting, validation | `./scripts/dev_setup.sh` |\n| `.venvs/demo/` | Dedicated demos: same dependencies, separate environment | `./scripts/demo_setup.sh` |\n\n**Use `.venv`** for development tasks (`pytest`, `./scripts/format.sh`, `./scripts/validate.sh`) and day-to-day cookbook work.\n\n**Use `.venvs/demo`** for running demos in a separate environment. The cookbook commands below use this environment and also work with `.venv/bin/python`.\n\n---\n\n## Testing Cookbooks\n\nApart from implementing features, your most important task will be to test and maintain the cookbooks in `cookbook/` directory.\n\n> See `cookbook/08_learning/` for the golden standard.\n\n### Quick Reference\n\n**Test Environment:**\n\n```bash\n# Virtual environment with all dependencies\n.venvs/demo/bin/python\n\n# Setup (if needed)\n./scripts/demo_setup.sh\n\n# Database (if needed)\n./cookbook/scripts/run_pgvector.sh\n```\n\n**Run a cookbook:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n### Expected Cookbook Structure\n\nEach cookbook folder should have the following files:\n- `README.md` — The README for the cookbook.\n- `TEST_LOG.md` — Test results log.\n\n### Testing Workflow\n\n**1. Before Testing**\n- Ensure the virtual environment exists (run `./scripts/demo_setup.sh` if needed)\n- Start any required services (e.g., `./cookbook/scripts/run_pgvector.sh`)\n\n**2. Running Tests**\n```bash\n# Run individual cookbook\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n\n# Tail output for long tests\n.venvs/demo/bin/python cookbook/<folder>/<file>.py 2>&1 | tail -100\n```\n\n**3. Updating TEST_LOG.md**\n\nAfter each test, update the cookbook's `TEST_LOG.md` with:\n- Test name and path\n- Status: PASS or FAIL\n- Brief description of what was tested\n- Any notable observations or issues\n\nFormat:\n```markdown\n### filename.py\n\n**Status:** PASS/FAIL\n\n**Description:** What the test does and what was observed.\n\n**Result:** Summary of success/failure.\n\n---\n```\n\n---\n\n## Code Locations\n\n| What | Where |\n|------|-------|\n| Core agent code | `libs/agno/agno/agent/` |\n| Teams | `libs/agno/agno/team/` |\n| Workflows | `libs/agno/agno/workflow/` |\n| Tools | `libs/agno/agno/tools/` |\n| Models | `libs/agno/agno/models/` |\n| Knowledge/RAG | `libs/agno/agno/knowledge/` |\n| Memory | `libs/agno/agno/memory/` |\n| Learning | `libs/agno/agno/learn/` |\n| Database adapters | `libs/agno/agno/db/` |\n| Vector databases | `libs/agno/agno/vectordb/` |\n| Tests | `libs/agno/tests/` |\n\n---\n\n## Coding Patterns\n\nSee `.cursorrules` for detailed patterns. Key rules:\n\n- **Never create agents in loops** — reuse them for performance\n- **Use output_schema** for structured responses\n- **PostgreSQL in production**, SQLite for dev only\n- **Start with single agent**, scale up only when needed\n- **Both sync and async** — all public methods need both variants\n\n---\n\n## Running Code\n\n**Running cookbooks:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n**Running tests:**\n```bash\nsource .venv/bin/activate\npytest libs/agno/tests/\n\n# Run a specific test file\npytest libs/agno/tests/unit/test_agent.py\n```\n\n---\n\n## When Implementing Features\n\n1. **Check for design doc** in `specs/` — if it exists, follow it\n2. **Look at existing patterns** — find similar code and follow conventions\n3. **Create a cookbook** — every pattern should have an example\n4. **Update implementation.md** — mark what's done\n\n---\n\n## Before Submitting Code\n\n**Always run these scripts before pushing code or creating a PR:**\n\n```bash\n# Activate the virtual environment first\nsource .venv/bin/activate\n\n# Format all code (ruff format)\n./scripts/format.sh\n\n# Validate all code (ruff check, mypy)\n./scripts/validate.sh\n```\n\nBoth scripts must pass with no errors before code review.\n\n**PR Title Format:**\n\nPR titles must follow one of these formats:\n- `type: description` — e.g., `feat: add workflow serialization`\n- `[type] description` — e.g., `[feat] add workflow serialization`\n- `type-kebab-case` — e.g., `feat-workflow-serialization`\n\nValid types: `feat`, `fix`, `cookbook`, `test`, `refactor`, `chore`, `style`, `revert`, `release`\n\n**PR Description:**\n\nAlways follow the PR template in `.github/pull_request_template.md`. Include:\n- Summary of changes\n- Type of change (bug fix, new feature, etc.)\n- Completed checklist items\n- Any additional context\n\n---\n\n## GitHub Operations\n\n**Updating PR descriptions:**\n\nThe `gh pr edit` command may fail with GraphQL errors related to classic projects. Use the API directly instead:\n\n```bash\n# Update PR body\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"<PR_BODY>\"\n\n# Or with a file\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"$(cat /path/to/body.md)\"\n```\n\n---\n\n## Don't\n\n- Don't implement features without checking for a design doc first\n- 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\n- Don't use f-strings for print lines where there are no variables\n- Don't use emojis in examples and print lines\n- Don't skip async variants of public methods\n- Don't push code without running `./scripts/format.sh` and `./scripts/validate.sh`\n- Don't submit a PR without a detailed PR description. Always follow the PR template provided in `.github/pull_request_template.md`.\n- Don't use `OpenAIChat` in cookbooks or examples — use `OpenAIResponses` instead\n- Don't use `gpt-4o` or `gpt-4o-mini` in cookbooks or examples — use `gpt-5.6-luna` instead\n\n---\n\n## CI: Automated Code Review\n\nEvery 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.\n\nWhen 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.\"\n\nAgno-specific checks to always verify:\n- Both sync and async variants exist for all new public methods\n- No agent creation inside loops (agents should be reused)\n- Coding patterns in this file are followed\n- No f-strings for print lines where there are no variables\n","cookbook/91_tools/README.md":"# Tools\n\nExamples for using and creating tools in Agno.\n\n## Tool Types\n\n| Type | Description |\n|:-----|:------------|\n| **Built-in Tools** | Pre-built toolkits (YFinance, DuckDuckGo, etc.) |\n| **Custom Tools** | Your own tools with @tool decorator |\n| **MCP Tools** | Model Context Protocol servers |\n| **Async Tools** | Async tool execution |\n\n## Custom Tools\n\n```python\nfrom agno.tools import tool\n\n@tool\ndef get_weather(city: str) -> str:\n    \"\"\"Get weather for a city.\"\"\"\n    return f\"Weather in {city}: Sunny, 72F\"\n\nagent = Agent(tools=[get_weather])\n```\n\n## MCP Tools\n\nModel Context Protocol allows connecting to external tool servers:\n\n```python\nfrom agno.tools.mcp import MCPTools\n\ntools = MCPTools(servers=[\"npx\", \"-y\", \"@anthropic/mcp-server-filesystem\"])\nagent = Agent(tools=[tools])\n```\n\n## Workspace speech\n\n`sixtydb_tools.py` uses 60db workspace voices. Set `SIXTYDB_API_KEY` and the\ncredentials for the agent's model. `SIXTYDB_VOICE_ID` is optional: without it,\nthe example calls `get_voices()` and selects the first voice in the quality\ncatalog. Set the voice ID explicitly to use another voice, including one from\n`get_voices(model=\"fast\")`. Voice IDs are specific to your workspace.\n\nRun `python cookbook/91_tools/sixtydb_tools.py` from the repository root. The\nexample writes WAV audio to `tmp/greeting.wav`, prints the output path, and\nreports when no audio is returned. Discovery and synthesis failures log\ndiagnostics without API keys or response bodies.\n\nThe toolkit requests mono LINEAR16 at 24 kHz and reads `audio_base64` from a\nJSON object, either at the top level or under `backendResponse`. It decodes\nthe base64 once and removes a WAV header when present before producing an\nAgno WAV audio artifact. Incompatible audio formats fail explicitly.\n\n## Folders\n\n- `finance/` - FinanceTools: one finance toolkit, swappable data providers (yfinance, financialdatasets.ai)\n- `mcp/` - MCP server examples\n- `tool_decorator/` - Custom tool patterns\n- `tool_hooks/` - Pre/post processing\n- `async/` - Async execution\n","cookbook/05_agent_os/25_agentos_tools/README.md":"# AgentOS Tools\n\nAgentOSTools gives an agent a read-only ops view of the AgentOS it runs on:\nusage, latency, failures, tool statistics, schedules, eval history, pending\napprovals and runtime-built components. The toolkit takes the database, never\nthe AgentOS instance — agents are constructed before the OS, so every tool\nreads only from `db`.\n\n## Files\n\n| File | What it teaches |\n|---|---|\n| `platform_ops_agent.py` | Generate traced activity with a worker agent, then answer platform questions with an ops agent using AgentOSTools. |\n\n## Prerequisites\n\n```bash\n./scripts/demo_setup.sh\nexport OPENAI_API_KEY=...\n```\n\n## Run platform_ops_agent.py\n\n```bash\n.venvs/demo/bin/python cookbook/05_agent_os/25_agentos_tools/platform_ops_agent.py\n```\n\nThe demo runs the worker agent twice, verifies the activity is visible through\nthe toolkit (run counts, tool statistics, session metrics), then asks the ops\nagent for a platform summary.\n\n## Notes\n\n- No tool mutates platform state; schedule, approval and component management\n  are deliberately not exposed. The one write is the metrics rollup refresh\n  inside `get_platform_metrics` (derived data, no user content). The tools read\n  the database directly, so AgentOS endpoint scopes do not apply — expose the\n  ops agent to operators, and trim surfaces with the enable flags for wider\n  audiences.\n- Sensitive payloads are never returned: span attributes, approval tool\n  arguments and schedule run input/output can hold conversation content and are\n  excluded from every tool result.\n- Per-surface flags (`metrics`, `traces`, `schedules`, `evals`, `components`,\n  `approvals`) control which tools a deployment exposes.\n- On SQLite, `p95_duration_ms` is reported as null (no SQL percentile support);\n  PostgreSQL reports real percentiles. The payload says so when it applies.\n","cookbook/02_agents/04_tools/README.md":"# 04_tools\n\nExamples for callable tool factories, tool choice, and tool call limits.\n\n## Files\n- `01_callable_tools.py` - Vary the toolset per user role using callable factories.\n- `02_session_state_tools.py` - Use session_state directly as a parameter with caching disabled.\n- `03_team_callable_members.py` - Assemble team members dynamically.\n- `04_tools_with_literal_type_param.py` - Use typing.Literal for tool parameters with predefined values.\n- `tool_call_limit.py` - Limit the number of tool calls per run.\n- `tool_choice.py` - Control which tool the agent selects.\n\n## Prerequisites\n- Load environment variables with `direnv allow` (including `OPENAI_API_KEY`).\n- Create the demo environment with `./scripts/demo_setup.sh`, then run cookbooks with `.venvs/demo/bin/python`.\n- Some examples require optional local services (for example pgvector) or provider-specific API keys.\n\n## Run\n- `.venvs/demo/bin/python cookbook/02_agents/04_tools/<file>.py`\n","cookbook/03_teams/03_tools/README.md":"# tools\n\nExamples for team workflows in tools.\n\n## Prerequisites\n\n- Load environment variables (for example, OPENAI_API_KEY) via direnv allow.\n- Use .venvs/demo/bin/python to run cookbook examples.\n- Some examples require additional services (for example PostgreSQL, LanceDB, or Infinity server) as noted in file docstrings.\n\n## Files\n\n- async_toolkit_context.py - Demonstrates async toolkit tools appearing in team system message context.\n- async_tools.py - Demonstrates async tools.\n- custom_tools.py - Demonstrates custom tools.\n- tool_call_limit.py - Demonstrates limiting total tool calls per Team run.\n- tool_choice.py - Demonstrates forcing specific tool usage via tool_choice.\n- member_tool_hooks.py - Demonstrates member tool hooks.\n- tool_hooks.py - Demonstrates tool hooks.\n","cookbook/10_reasoning/agents/README.md":"# Agents\n\nReasoning agent examples, including built-in COT and DeepSeek reasoning-model comparisons.\n\n## Examples\n\n- `analyse_treaty_of_versailles.py`\n- `capture_reasoning_content_default_COT.py`\n- `cerebras_llama_default_COT.py`\n- `default_chain_of_thought.py`\n- `fibonacci.py`\n- `finance_agent.py`\n- `ibm_watsonx_default_COT.py`\n- `is_9_11_bigger_than_9_9.py`\n- `life_in_500000_years.py`\n- `logical_puzzle.py`\n- `mathematical_proof.py`\n- `mistral_reasoning_cot.py`\n- `python_101_curriculum.py`\n- `scientific_research.py`\n- `ship_of_theseus.py`\n- `strawberry.py`\n- `trolley_problem.py`\n","AGENTS.md":"# Agno - Agent Instructions\n\nInstructions for AI coding agents (Claude Code, Codex, Cursor, etc.) working on this codebase.\n\n---\n\n## Repository Structure\n\n```\n.\n├── libs/agno/agno/          # Core framework code\n├── cookbook/                # Examples, patterns and test cases (organized by topic)\n├── scripts/                 # Development and build scripts\n├── specs/                   # Design documents (symlinked, private)\n├── docs/                    # Documentation (symlinked, private)\n└── .cursorrules             # Coding patterns and conventions\n```\n\n---\n\n## Conductor Notes\n\nWhen working in Conductor, you can use the `.context/` directory for scratch notes or agent-to-agent handoff artifacts. This directory is gitignored.\n\n---\n\n## Setting Up Symlinks\n\nThe `specs/` and `docs/` directories are symlinked from external locations. For a fresh clone or new workspace, create these symlinks:\n\n```bash\nln -s ~/code/specs specs\nln -s ~/code/docs docs\n```\n\nThese contain private design documents and documentation that are not checked into the repository.\n\n---\n\n## Virtual Environments\n\nThis project uses two virtual environments:\n\n| Environment | Purpose | Setup |\n|-------------|---------|-------|\n| `.venv/` | Development and cookbooks: demo dependencies, tests, formatting, validation | `./scripts/dev_setup.sh` |\n| `.venvs/demo/` | Dedicated demos: same dependencies, separate environment | `./scripts/demo_setup.sh` |\n\n**Use `.venv`** for development tasks (`pytest`, `./scripts/format.sh`, `./scripts/validate.sh`) and day-to-day cookbook work.\n\n**Use `.venvs/demo`** for running demos in a separate environment. The cookbook commands below use this environment and also work with `.venv/bin/python`.\n\n---\n\n## Testing Cookbooks\n\nApart from implementing features, your most important task will be to test and maintain the cookbooks in `cookbook/` directory.\n\n> See `cookbook/08_learning/` for the golden standard.\n\n### Quick Reference\n\n**Test Environment:**\n\n```bash\n# Virtual environment with all dependencies\n.venvs/demo/bin/python\n\n# Setup (if needed)\n./scripts/demo_setup.sh\n\n# Database (if needed)\n./cookbook/scripts/run_pgvector.sh\n```\n\n**Run a cookbook:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n### Expected Cookbook Structure\n\nEach cookbook folder should have the following files:\n- `README.md` — The README for the cookbook.\n- `TEST_LOG.md` — Test results log.\n\n### Testing Workflow\n\n**1. Before Testing**\n- Ensure the virtual environment exists (run `./scripts/demo_setup.sh` if needed)\n- Start any required services (e.g., `./cookbook/scripts/run_pgvector.sh`)\n\n**2. Running Tests**\n```bash\n# Run individual cookbook\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n\n# Tail output for long tests\n.venvs/demo/bin/python cookbook/<folder>/<file>.py 2>&1 | tail -100\n```\n\n**3. Updating TEST_LOG.md**\n\nAfter each test, update the cookbook's `TEST_LOG.md` with:\n- Test name and path\n- Status: PASS or FAIL\n- Brief description of what was tested\n- Any notable observations or issues\n\nFormat:\n```markdown\n### filename.py\n\n**Status:** PASS/FAIL\n\n**Description:** What the test does and what was observed.\n\n**Result:** Summary of success/failure.\n\n---\n```\n\n---\n\n## Code Locations\n\n| What | Where |\n|------|-------|\n| Core agent code | `libs/agno/agno/agent/` |\n| Teams | `libs/agno/agno/team/` |\n| Workflows | `libs/agno/agno/workflow/` |\n| Tools | `libs/agno/agno/tools/` |\n| Models | `libs/agno/agno/models/` |\n| Knowledge/RAG | `libs/agno/agno/knowledge/` |\n| Memory | `libs/agno/agno/memory/` |\n| Learning | `libs/agno/agno/learn/` |\n| Database adapters | `libs/agno/agno/db/` |\n| Vector databases | `libs/agno/agno/vectordb/` |\n| Tests | `libs/agno/tests/` |\n\n---\n\n## Coding Patterns\n\nSee `.cursorrules` for detailed patterns. Key rules:\n\n- **Never create agents in loops** — reuse them for performance\n- **Use output_schema** for structured responses\n- **PostgreSQL in production**, SQLite for dev only\n- **Start with single agent**, scale up only when needed\n- **Both sync and async** — all public methods need both variants\n\n---\n\n## Running Code\n\n**Running cookbooks:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n**Running tests:**\n```bash\nsource .venv/bin/activate\npytest libs/agno/tests/\n\n# Run a specific test file\npytest libs/agno/tests/unit/test_agent.py\n```\n\n---\n\n## When Implementing Features\n\n1. **Check for design doc** in `specs/` — if it exists, follow it\n2. **Look at existing patterns** — find similar code and follow conventions\n3. **Create a cookbook** — every pattern should have an example\n4. **Update implementation.md** — mark what's done\n\n---\n\n## Before Submitting Code\n\n**Always run these scripts before pushing code or creating a PR:**\n\n```bash\n# Activate the virtual environment first\nsource .venv/bin/activate\n\n# Format all code (ruff format)\n./scripts/format.sh\n\n# Validate all code (ruff check, mypy)\n./scripts/validate.sh\n```\n\nBoth scripts must pass with no errors before code review.\n\n**PR Title Format:**\n\nPR titles must follow one of these formats:\n- `type: description` — e.g., `feat: add workflow serialization`\n- `[type] description` — e.g., `[feat] add workflow serialization`\n- `type-kebab-case` — e.g., `feat-workflow-serialization`\n\nValid types: `feat`, `fix`, `cookbook`, `test`, `refactor`, `chore`, `style`, `revert`, `release`\n\n**PR Description:**\n\nAlways follow the PR template in `.github/pull_request_template.md`. Include:\n- Summary of changes\n- Type of change (bug fix, new feature, etc.)\n- Completed checklist items\n- Any additional context\n\n---\n\n## GitHub Operations\n\n**Updating PR descriptions:**\n\nThe `gh pr edit` command may fail with GraphQL errors related to classic projects. Use the API directly instead:\n\n```bash\n# Update PR body\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"<PR_BODY>\"\n\n# Or with a file\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"$(cat /path/to/body.md)\"\n```\n\n---\n\n## Don't\n\n- Don't implement features without checking for a design doc first\n- 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\n- Don't use f-strings for print lines where there are no variables\n- Don't use emojis in examples and print lines\n- Don't skip async variants of public methods\n- Don't push code without running `./scripts/format.sh` and `./scripts/validate.sh`\n- Don't submit a PR without a detailed PR description. Always follow the PR template provided in `.github/pull_request_template.md`.\n- Don't use `OpenAIChat` in cookbooks or examples — use `OpenAIResponses` instead\n- Don't use `gpt-4o` or `gpt-4o-mini` in cookbooks or examples — use `gpt-5.6-luna` instead\n\n---\n\n## CI: Automated Code Review\n\nEvery 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.\n\nWhen 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.\"\n\nAgno-specific checks to always verify:\n- Both sync and async variants exist for all new public methods\n- No agent creation inside loops (agents should be reused)\n- Coding patterns in this file are followed\n- No f-strings for print lines where there are no variables\n","cookbook/10_reasoning/agents/TEST_LOG.md":"# Subagent: test_log\n\nPath: `cookbook/10_reasoning/agents/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/agents/TEST_LOG.md)","cookbook/10_reasoning/tools/README.md":"# tools Documentation\n\nPath: `cookbook/10_reasoning/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/tools/README.md)","cookbook/10_reasoning/tools/TEST_LOG.md":"# Tools Skill\n\nPath: `cookbook/10_reasoning/tools/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/tools/TEST_LOG.md)","cookbook/91_tools/advisor_tools/README.md":"# advisor_tools Documentation\n\nPath: `cookbook/91_tools/advisor_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/advisor_tools/README.md)","cookbook/91_tools/coding_tools/README.md":"# coding_tools Documentation\n\nPath: `cookbook/91_tools/coding_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/coding_tools/README.md)","cookbook/91_tools/docling_tools/README.md":"# docling_tools Documentation\n\nPath: `cookbook/91_tools/docling_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/docling_tools/README.md)","cookbook/91_tools/exceptions/README.md":"# exceptions Documentation\n\nPath: `cookbook/91_tools/exceptions/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/exceptions/README.md)","cookbook/91_tools/google/README.md":"# google Documentation\n\nPath: `cookbook/91_tools/google/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/google/README.md)","cookbook/91_tools/mcp/README.md":"# mcp Documentation\n\nPath: `cookbook/91_tools/mcp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/README.md)","cookbook/91_tools/models/README.md":"# models Documentation\n\nPath: `cookbook/91_tools/models/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/models/README.md)","cookbook/91_tools/other/README.md":"# other Documentation\n\nPath: `cookbook/91_tools/other/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/other/README.md)","cookbook/91_tools/parallel/README.md":"# parallel Documentation\n\nPath: `cookbook/91_tools/parallel/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/parallel/README.md)","cookbook/91_tools/tool_decorator/README.md":"# tool_decorator Documentation\n\nPath: `cookbook/91_tools/tool_decorator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/tool_decorator/README.md)","cookbook/91_tools/tool_hooks/README.md":"# tool_hooks Documentation\n\nPath: `cookbook/91_tools/tool_hooks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/tool_hooks/README.md)","cookbook/91_tools/workspace_tools/README.md":"# workspace_tools Documentation\n\nPath: `cookbook/91_tools/workspace_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/workspace_tools/README.md)","cookbook/environments/_26_multi_step_tools/README.md":"# _26_multi_step_tools Documentation\n\nPath: `cookbook/environments/_26_multi_step_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/environments/_26_multi_step_tools/README.md)","cookbook/04_workflows/06_advanced_concepts/tools/README.md":"# tools Documentation\n\nPath: `cookbook/04_workflows/06_advanced_concepts/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/04_workflows/06_advanced_concepts/tools/README.md)","cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md":"# Tools Skill\n\nPath: `cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md)","cookbook/90_models/anthropic/skills/README.md":"# Skills Skill\n\nPath: `cookbook/90_models/anthropic/skills/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/90_models/anthropic/skills/README.md)","cookbook/90_models/anthropic/skills/TEST_LOG.md":"# Skills Skill\n\nPath: `cookbook/90_models/anthropic/skills/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/90_models/anthropic/skills/TEST_LOG.md)","cookbook/91_tools/mcp/dynamic_headers/README.md":"# dynamic_headers Documentation\n\nPath: `cookbook/91_tools/mcp/dynamic_headers/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/dynamic_headers/README.md)","cookbook/91_tools/mcp/local_server/README.md":"# local_server Documentation\n\nPath: `cookbook/91_tools/mcp/local_server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/local_server/README.md)","cookbook/91_tools/mcp/mcp_toolbox_demo/README.md":"# mcp_toolbox_demo Documentation\n\nPath: `cookbook/91_tools/mcp/mcp_toolbox_demo/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/mcp_toolbox_demo/README.md)","cookbook/91_tools/mcp/sse_transport/README.md":"# sse_transport Documentation\n\nPath: `cookbook/91_tools/mcp/sse_transport/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/sse_transport/README.md)","cookbook/91_tools/mcp/streamable_http_transport/README.md":"# streamable_http_transport Documentation\n\nPath: `cookbook/91_tools/mcp/streamable_http_transport/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/streamable_http_transport/README.md)","cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md":"# References Skill\n\nPath: `cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md)","cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md":"# References Skill\n\nPath: `cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md)"},"files":{".cursorrules":"You are an expert in Python, Agno framework, and AI agent development.\n\nCore Rules\n- NEVER create agents in loops - reuse them for performance\n- Always use output_schema for structured responses\n- PostgreSQL in production, SQLite for dev only\n- Start with single agent, scale up only when needed\n\nDocumentation:\n- Don't use f-strings for print lines where there are no variables to format.\n- Don't use emojis in examples and print lines\n\nBasic Agent (start here):\n```python\nfrom agno.agent import Agent\nfrom agno.models.openai import OpenAIResponses\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    instructions=\"You are a helpful assistant\",\n    markdown=True,\n)\nagent.print_response(\"Your query\", stream=True)\n```\n\nAgent with Tools:\n```python\nfrom agno.tools.websearch import WebSearchTools\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    tools=[WebSearchTools()],\n    instructions=\"Search the web for information\",\n)\n```\n\nCRITICAL: Agent Reuse Performance\n```python\n# WRONG - Recreates agent every time (significant overhead)\nfor query in queries:\n    agent = Agent(...)  # DON'T DO THIS\n    \n# CORRECT - Create once, reuse\nagent = Agent(...)\nfor query in queries:\n    agent.run(query)\n```\n\nWhen to Use Each Pattern\n\nSingle Agent (90% of use cases):\n- One clear task or domain\n- Can be solved with tools + instructions\n- Example: Search, analyze, generate content\n\nTeam (autonomous coordination):\n- Multiple specialized agents with different expertise\n- Agents decide who does what via LLM\n- Complex tasks requiring multiple perspectives\n- Example: Research + Analysis + Writing\n\nWorkflow (programmatic control):\n- Sequential steps with clear flow\n- Need conditional logic or branching\n- Full control over execution order\n- Example: Extract → Transform → Load pipelines\n\nTeam Pattern:\n```python\nfrom agno.team.team import Team\n\nweb_agent = Agent(\n    name=\"Researcher\",\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    tools=[WebSearchTools()],\n)\n\nwriter_agent = Agent(\n    name=\"Writer\",\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n)\n\nteam = Team(\n    members=[web_agent, writer_agent],\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    instructions=\"Research and write articles\",\n)\n```\n\nWorkflow Pattern:\n```python\nfrom agno.workflow.workflow import Workflow\nfrom agno.db.sqlite import SqliteDb\n\n# Define agents first (researcher, writer)\nasync def blog_workflow(session_state, topic: str):\n    # Step 1: Research\n    research = await researcher.arun(topic)\n    \n    # Step 2: Write\n    article = await writer.arun(research.content)\n    \n    return article\n\nworkflow = Workflow(\n    name=\"Blog Generator\",\n    steps=blog_workflow,\n    db=SqliteDb(db_file=\"tmp/workflow.db\"),\n)\n```\n\nKnowledge/RAG:\n```python\nfrom agno.knowledge.knowledge import Knowledge\nfrom agno.vectordb.lancedb import LanceDb, SearchType\nfrom agno.knowledge.embedder.openai import OpenAIEmbedder\n\nknowledge = Knowledge(\n    vector_db=LanceDb(\n        uri=\"tmp/lancedb\",\n        table_name=\"knowledge_base\",\n        search_type=SearchType.hybrid,\n        embedder=OpenAIEmbedder(id=\"text-embedding-3-small\"),\n    ),\n)\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    knowledge=knowledge,\n    search_knowledge=True,  # Critical: enables agentic RAG\n    instructions=\"Use knowledge base, cite sources\"\n)\n```\n\nChat History:\n```python\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    db=SqliteDb(db_file=\"tmp/agents.db\"),\n    user_id=\"user-123\",\n    add_history_to_context=True,  # Adds previous messages\n    num_history_runs=3,\n)\n```\n\nStructured Output:\n```python\nfrom pydantic import BaseModel\n\nclass Result(BaseModel):\n    summary: str\n    findings: list[str]\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    output_schema=Result,\n)\nresult: Result = agent.run(query).content\n```\n\nAgentOS Production:\n```python\nfrom agno.os import AgentOS\nfrom agno.db.postgres import PostgresDb\n\nagent_os = AgentOS(\n    agents=[agent],\n    db=PostgresDb(db_url=os.getenv(\"DATABASE_URL\")),\n)\napp = agent_os.get_app()\n```\n\nCommon Mistakes\n- Creating agents in loops (massive performance hit)\n- Using Team when single agent would work\n- Forgetting search_knowledge=True with knowledge\n- Using SQLite in production\n- Not adding history when context matters\n- Missing output_schema validation\n\nProduction\n- Use PostgresDb not SqliteDb\n- Set show_tool_calls=False, debug_mode=False\n- Wrap agent.run() in try-except\n\nDocs: https://docs.agno.com\n","cookbook/02_agents/16_skills/sample_skills/code-review/SKILL.md":"---\nname: code-review\ndescription: Code review assistance with linting, style checking, and best practices\nlicense: Apache-2.0\nmetadata:\n  version: \"1.0.0\"\n  author: agno-team\n  tags: [\"quality\", \"review\", \"linting\"]\n---\n# Code Review Skill\n\nYou are a code review assistant. When reviewing code, follow these steps:\n\n## Review Process\n1. **Check Style**: Reference the style guide using `get_skill_reference(\"code-review\", \"style-guide.md\")`\n2. **Run Style Check**: Use `get_skill_script(\"code-review\", \"check_style.py\")` for automated style checking\n3. **Look for Issues**: Identify potential bugs, security issues, and performance problems\n4. **Provide Feedback**: Give structured feedback with severity levels\n\n## Feedback Format\n- **Critical**: Must fix before merge (security vulnerabilities, bugs that cause crashes)\n- **Important**: Should fix, but not blocking (performance issues, code smells)\n- **Suggestion**: Nice to have improvements (naming, documentation, minor refactoring)\n\n## Review Checklist\n- [ ] Code follows naming conventions\n- [ ] No hardcoded secrets or credentials\n- [ ] Error handling is appropriate\n- [ ] Functions are not too long (< 50 lines)\n- [ ] No obvious security vulnerabilities\n- [ ] Tests are included for new functionality\n","cookbook/02_agents/16_skills/sample_skills/git-workflow/SKILL.md":"---\nname: git-workflow\ndescription: Git workflow guidance for commits, branches, and pull requests\nlicense: Apache-2.0\nmetadata:\n  version: \"1.0.0\"\n  author: agno-team\n  tags: [\"git\", \"version-control\", \"workflow\"]\n---\n# Git Workflow Skill\n\nYou are a Git workflow assistant. Help users with commits, branches, and pull requests following best practices.\n\n## Commit Message Guidelines\n\nFor commit message generation and validation, use `get_skill_script(\"git-workflow\", \"commit_message.py\")`.\n\n### Format\n```\n<type>(<scope>): <subject>\n\n<body>\n\n<footer>\n```\n\n### Types\n- **feat**: New feature\n- **fix**: Bug fix\n- **docs**: Documentation only\n- **style**: Formatting, no code change\n- **refactor**: Code change that neither fixes a bug nor adds a feature\n- **perf**: Performance improvement\n- **test**: Adding or updating tests\n- **chore**: Maintenance tasks\n\n### Examples\n```\nfeat(auth): add OAuth2 login support\n\nImplemented OAuth2 authentication flow with Google and GitHub providers.\nAdded token refresh mechanism and session management.\n\nCloses #123\n```\n\n```\nfix(api): handle null response from external service\n\nAdded null check before processing response data to prevent\nNullPointerException when external service returns empty response.\n\nFixes #456\n```\n\n## Branch Naming\n\n### Format\n```\n<type>/<ticket-id>-<short-description>\n```\n\n### Examples\n- `feature/AUTH-123-oauth-login`\n- `fix/BUG-456-null-pointer`\n- `chore/TECH-789-update-deps`\n\n## Pull Request Guidelines\n\n### Title\nFollow commit message format for the title.\n\n### Description Template\n```markdown\n## Summary\nBrief description of what this PR does.\n\n## Changes\n- Change 1\n- Change 2\n\n## Testing\nHow was this tested?\n\n## Checklist\n- [ ] Tests added/updated\n- [ ] Documentation updated\n- [ ] No breaking changes\n```\n\n## Common Commands\n\n### Starting Work\n```bash\ngit checkout main\ngit pull origin main\ngit checkout -b feature/TICKET-123-description\n```\n\n### Committing\n```bash\ngit add -p  # Interactive staging\ngit commit -m \"type(scope): description\"\n```\n\n### Updating Branch\n```bash\ngit fetch origin\ngit rebase origin/main\n```\n\n### Creating PR\n```bash\ngit push -u origin feature/TICKET-123-description\n# Then create PR on GitHub/GitLab\n```\n","cookbook/05_agent_os/23_skills/sample_skills/system-info/SKILL.md":"---\nname: system-info\ndescription: Inspect the host operating system, Python runtime, and local files\nlicense: MIT\nmetadata:\n  version: \"1.0.0\"\n  author: agno\n---\n# System Info Skill\n\nUse this skill when the user asks about the host running the AgentOS process or\nneeds a directory inventory from that host.\n\n## Available scripts\n\n- `get_system_info.py` returns the hostname, operating system, architecture,\n  Python version and executable, processor, and current UTC time.\n- `list_directory.py` lists the direct children of a directory. It accepts one\n  optional path argument and defaults to the skill directory.\n\n## Execution\n\nLoad these instructions before choosing a script. Execute a script through the\nskill tool and inspect its structured result:\n\n```python\nget_skill_script(\n    skill_name=\"system-info\",\n    script_path=\"get_system_info.py\",\n    execute=True,\n)\n```\n\nTo list a directory:\n\n```python\nget_skill_script(\n    skill_name=\"system-info\",\n    script_path=\"list_directory.py\",\n    execute=True,\n    args=[\".\"],\n)\n```\n\nOnly use data parsed from `stdout` when `returncode` is `0`. If execution\nreturns a nonzero code, report `stderr` or the JSON error instead of inferring\nthe result.\n","cookbook/frameworks/antigravity/example_agent/skills/haiku/SKILL.md":"# Haiku house style\n\nWhen writing a haiku for this bot, follow these conventions:\n\n- 5-7-5 syllable structure, strict.\n- Prefer concrete imagery over abstraction.\n- Include at least one season-word (kigo) when natural.\n- No emojis, no preamble, no closing remarks — output ONLY the haiku itself.\n","CLAUDE.md":"# Agno - Agent Instructions\n\nInstructions for AI coding agents (Claude Code, Codex, Cursor, etc.) working on this codebase.\n\n---\n\n## Repository Structure\n\n```\n.\n├── libs/agno/agno/          # Core framework code\n├── cookbook/                # Examples, patterns and test cases (organized by topic)\n├── scripts/                 # Development and build scripts\n├── specs/                   # Design documents (symlinked, private)\n├── docs/                    # Documentation (symlinked, private)\n└── .cursorrules             # Coding patterns and conventions\n```\n\n---\n\n## Conductor Notes\n\nWhen working in Conductor, you can use the `.context/` directory for scratch notes or agent-to-agent handoff artifacts. This directory is gitignored.\n\n---\n\n## Setting Up Symlinks\n\nThe `specs/` and `docs/` directories are symlinked from external locations. For a fresh clone or new workspace, create these symlinks:\n\n```bash\nln -s ~/code/specs specs\nln -s ~/code/docs docs\n```\n\nThese contain private design documents and documentation that are not checked into the repository.\n\n---\n\n## Virtual Environments\n\nThis project uses two virtual environments:\n\n| Environment | Purpose | Setup |\n|-------------|---------|-------|\n| `.venv/` | Development and cookbooks: demo dependencies, tests, formatting, validation | `./scripts/dev_setup.sh` |\n| `.venvs/demo/` | Dedicated demos: same dependencies, separate environment | `./scripts/demo_setup.sh` |\n\n**Use `.venv`** for development tasks (`pytest`, `./scripts/format.sh`, `./scripts/validate.sh`) and day-to-day cookbook work.\n\n**Use `.venvs/demo`** for running demos in a separate environment. The cookbook commands below use this environment and also work with `.venv/bin/python`.\n\n---\n\n## Testing Cookbooks\n\nApart from implementing features, your most important task will be to test and maintain the cookbooks in `cookbook/` directory.\n\n> See `cookbook/08_learning/` for the golden standard.\n\n### Quick Reference\n\n**Test Environment:**\n\n```bash\n# Virtual environment with all dependencies\n.venvs/demo/bin/python\n\n# Setup (if needed)\n./scripts/demo_setup.sh\n\n# Database (if needed)\n./cookbook/scripts/run_pgvector.sh\n```\n\n**Run a cookbook:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n### Expected Cookbook Structure\n\nEach cookbook folder should have the following files:\n- `README.md` — The README for the cookbook.\n- `TEST_LOG.md` — Test results log.\n\n### Testing Workflow\n\n**1. Before Testing**\n- Ensure the virtual environment exists (run `./scripts/demo_setup.sh` if needed)\n- Start any required services (e.g., `./cookbook/scripts/run_pgvector.sh`)\n\n**2. Running Tests**\n```bash\n# Run individual cookbook\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n\n# Tail output for long tests\n.venvs/demo/bin/python cookbook/<folder>/<file>.py 2>&1 | tail -100\n```\n\n**3. Updating TEST_LOG.md**\n\nAfter each test, update the cookbook's `TEST_LOG.md` with:\n- Test name and path\n- Status: PASS or FAIL\n- Brief description of what was tested\n- Any notable observations or issues\n\nFormat:\n```markdown\n### filename.py\n\n**Status:** PASS/FAIL\n\n**Description:** What the test does and what was observed.\n\n**Result:** Summary of success/failure.\n\n---\n```\n\n---\n\n## Code Locations\n\n| What | Where |\n|------|-------|\n| Core agent code | `libs/agno/agno/agent/` |\n| Teams | `libs/agno/agno/team/` |\n| Workflows | `libs/agno/agno/workflow/` |\n| Tools | `libs/agno/agno/tools/` |\n| Models | `libs/agno/agno/models/` |\n| Knowledge/RAG | `libs/agno/agno/knowledge/` |\n| Memory | `libs/agno/agno/memory/` |\n| Learning | `libs/agno/agno/learn/` |\n| Database adapters | `libs/agno/agno/db/` |\n| Vector databases | `libs/agno/agno/vectordb/` |\n| Tests | `libs/agno/tests/` |\n\n---\n\n## Coding Patterns\n\nSee `.cursorrules` for detailed patterns. Key rules:\n\n- **Never create agents in loops** — reuse them for performance\n- **Use output_schema** for structured responses\n- **PostgreSQL in production**, SQLite for dev only\n- **Start with single agent**, scale up only when needed\n- **Both sync and async** — all public methods need both variants\n\n---\n\n## Running Code\n\n**Running cookbooks:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n**Running tests:**\n```bash\nsource .venv/bin/activate\npytest libs/agno/tests/\n\n# Run a specific test file\npytest libs/agno/tests/unit/test_agent.py\n```\n\n---\n\n## When Implementing Features\n\n1. **Check for design doc** in `specs/` — if it exists, follow it\n2. **Look at existing patterns** — find similar code and follow conventions\n3. **Create a cookbook** — every pattern should have an example\n4. **Update implementation.md** — mark what's done\n\n---\n\n## Before Submitting Code\n\n**Always run these scripts before pushing code or creating a PR:**\n\n```bash\n# Activate the virtual environment first\nsource .venv/bin/activate\n\n# Format all code (ruff format)\n./scripts/format.sh\n\n# Validate all code (ruff check, mypy)\n./scripts/validate.sh\n```\n\nBoth scripts must pass with no errors before code review.\n\n**PR Title Format:**\n\nPR titles must follow one of these formats:\n- `type: description` — e.g., `feat: add workflow serialization`\n- `[type] description` — e.g., `[feat] add workflow serialization`\n- `type-kebab-case` — e.g., `feat-workflow-serialization`\n\nValid types: `feat`, `fix`, `cookbook`, `test`, `refactor`, `chore`, `style`, `revert`, `release`\n\n**PR Description:**\n\nAlways follow the PR template in `.github/pull_request_template.md`. Include:\n- Summary of changes\n- Type of change (bug fix, new feature, etc.)\n- Completed checklist items\n- Any additional context\n\n---\n\n## GitHub Operations\n\n**Updating PR descriptions:**\n\nThe `gh pr edit` command may fail with GraphQL errors related to classic projects. Use the API directly instead:\n\n```bash\n# Update PR body\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"<PR_BODY>\"\n\n# Or with a file\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"$(cat /path/to/body.md)\"\n```\n\n---\n\n## Don't\n\n- Don't implement features without checking for a design doc first\n- 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\n- Don't use f-strings for print lines where there are no variables\n- Don't use emojis in examples and print lines\n- Don't skip async variants of public methods\n- Don't push code without running `./scripts/format.sh` and `./scripts/validate.sh`\n- Don't submit a PR without a detailed PR description. Always follow the PR template provided in `.github/pull_request_template.md`.\n- Don't use `OpenAIChat` in cookbooks or examples — use `OpenAIResponses` instead\n- Don't use `gpt-4o` or `gpt-4o-mini` in cookbooks or examples — use `gpt-5.6-luna` instead\n\n---\n\n## CI: Automated Code Review\n\nEvery 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.\n\nWhen 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.\"\n\nAgno-specific checks to always verify:\n- Both sync and async variants exist for all new public methods\n- No agent creation inside loops (agents should be reused)\n- Coding patterns in this file are followed\n- No f-strings for print lines where there are no variables\n","cookbook/91_tools/README.md":"# Tools\n\nExamples for using and creating tools in Agno.\n\n## Tool Types\n\n| Type | Description |\n|:-----|:------------|\n| **Built-in Tools** | Pre-built toolkits (YFinance, DuckDuckGo, etc.) |\n| **Custom Tools** | Your own tools with @tool decorator |\n| **MCP Tools** | Model Context Protocol servers |\n| **Async Tools** | Async tool execution |\n\n## Custom Tools\n\n```python\nfrom agno.tools import tool\n\n@tool\ndef get_weather(city: str) -> str:\n    \"\"\"Get weather for a city.\"\"\"\n    return f\"Weather in {city}: Sunny, 72F\"\n\nagent = Agent(tools=[get_weather])\n```\n\n## MCP Tools\n\nModel Context Protocol allows connecting to external tool servers:\n\n```python\nfrom agno.tools.mcp import MCPTools\n\ntools = MCPTools(servers=[\"npx\", \"-y\", \"@anthropic/mcp-server-filesystem\"])\nagent = Agent(tools=[tools])\n```\n\n## Workspace speech\n\n`sixtydb_tools.py` uses 60db workspace voices. Set `SIXTYDB_API_KEY` and the\ncredentials for the agent's model. `SIXTYDB_VOICE_ID` is optional: without it,\nthe example calls `get_voices()` and selects the first voice in the quality\ncatalog. Set the voice ID explicitly to use another voice, including one from\n`get_voices(model=\"fast\")`. Voice IDs are specific to your workspace.\n\nRun `python cookbook/91_tools/sixtydb_tools.py` from the repository root. The\nexample writes WAV audio to `tmp/greeting.wav`, prints the output path, and\nreports when no audio is returned. Discovery and synthesis failures log\ndiagnostics without API keys or response bodies.\n\nThe toolkit requests mono LINEAR16 at 24 kHz and reads `audio_base64` from a\nJSON object, either at the top level or under `backendResponse`. It decodes\nthe base64 once and removes a WAV header when present before producing an\nAgno WAV audio artifact. Incompatible audio formats fail explicitly.\n\n## Folders\n\n- `finance/` - FinanceTools: one finance toolkit, swappable data providers (yfinance, financialdatasets.ai)\n- `mcp/` - MCP server examples\n- `tool_decorator/` - Custom tool patterns\n- `tool_hooks/` - Pre/post processing\n- `async/` - Async execution\n","cookbook/05_agent_os/25_agentos_tools/README.md":"# AgentOS Tools\n\nAgentOSTools gives an agent a read-only ops view of the AgentOS it runs on:\nusage, latency, failures, tool statistics, schedules, eval history, pending\napprovals and runtime-built components. The toolkit takes the database, never\nthe AgentOS instance — agents are constructed before the OS, so every tool\nreads only from `db`.\n\n## Files\n\n| File | What it teaches |\n|---|---|\n| `platform_ops_agent.py` | Generate traced activity with a worker agent, then answer platform questions with an ops agent using AgentOSTools. |\n\n## Prerequisites\n\n```bash\n./scripts/demo_setup.sh\nexport OPENAI_API_KEY=...\n```\n\n## Run platform_ops_agent.py\n\n```bash\n.venvs/demo/bin/python cookbook/05_agent_os/25_agentos_tools/platform_ops_agent.py\n```\n\nThe demo runs the worker agent twice, verifies the activity is visible through\nthe toolkit (run counts, tool statistics, session metrics), then asks the ops\nagent for a platform summary.\n\n## Notes\n\n- No tool mutates platform state; schedule, approval and component management\n  are deliberately not exposed. The one write is the metrics rollup refresh\n  inside `get_platform_metrics` (derived data, no user content). The tools read\n  the database directly, so AgentOS endpoint scopes do not apply — expose the\n  ops agent to operators, and trim surfaces with the enable flags for wider\n  audiences.\n- Sensitive payloads are never returned: span attributes, approval tool\n  arguments and schedule run input/output can hold conversation content and are\n  excluded from every tool result.\n- Per-surface flags (`metrics`, `traces`, `schedules`, `evals`, `components`,\n  `approvals`) control which tools a deployment exposes.\n- On SQLite, `p95_duration_ms` is reported as null (no SQL percentile support);\n  PostgreSQL reports real percentiles. The payload says so when it applies.\n","cookbook/02_agents/04_tools/README.md":"# 04_tools\n\nExamples for callable tool factories, tool choice, and tool call limits.\n\n## Files\n- `01_callable_tools.py` - Vary the toolset per user role using callable factories.\n- `02_session_state_tools.py` - Use session_state directly as a parameter with caching disabled.\n- `03_team_callable_members.py` - Assemble team members dynamically.\n- `04_tools_with_literal_type_param.py` - Use typing.Literal for tool parameters with predefined values.\n- `tool_call_limit.py` - Limit the number of tool calls per run.\n- `tool_choice.py` - Control which tool the agent selects.\n\n## Prerequisites\n- Load environment variables with `direnv allow` (including `OPENAI_API_KEY`).\n- Create the demo environment with `./scripts/demo_setup.sh`, then run cookbooks with `.venvs/demo/bin/python`.\n- Some examples require optional local services (for example pgvector) or provider-specific API keys.\n\n## Run\n- `.venvs/demo/bin/python cookbook/02_agents/04_tools/<file>.py`\n","cookbook/03_teams/03_tools/README.md":"# tools\n\nExamples for team workflows in tools.\n\n## Prerequisites\n\n- Load environment variables (for example, OPENAI_API_KEY) via direnv allow.\n- Use .venvs/demo/bin/python to run cookbook examples.\n- Some examples require additional services (for example PostgreSQL, LanceDB, or Infinity server) as noted in file docstrings.\n\n## Files\n\n- async_toolkit_context.py - Demonstrates async toolkit tools appearing in team system message context.\n- async_tools.py - Demonstrates async tools.\n- custom_tools.py - Demonstrates custom tools.\n- tool_call_limit.py - Demonstrates limiting total tool calls per Team run.\n- tool_choice.py - Demonstrates forcing specific tool usage via tool_choice.\n- member_tool_hooks.py - Demonstrates member tool hooks.\n- tool_hooks.py - Demonstrates tool hooks.\n","cookbook/10_reasoning/agents/README.md":"# Agents\n\nReasoning agent examples, including built-in COT and DeepSeek reasoning-model comparisons.\n\n## Examples\n\n- `analyse_treaty_of_versailles.py`\n- `capture_reasoning_content_default_COT.py`\n- `cerebras_llama_default_COT.py`\n- `default_chain_of_thought.py`\n- `fibonacci.py`\n- `finance_agent.py`\n- `ibm_watsonx_default_COT.py`\n- `is_9_11_bigger_than_9_9.py`\n- `life_in_500000_years.py`\n- `logical_puzzle.py`\n- `mathematical_proof.py`\n- `mistral_reasoning_cot.py`\n- `python_101_curriculum.py`\n- `scientific_research.py`\n- `ship_of_theseus.py`\n- `strawberry.py`\n- `trolley_problem.py`\n","AGENTS.md":"# Agno - Agent Instructions\n\nInstructions for AI coding agents (Claude Code, Codex, Cursor, etc.) working on this codebase.\n\n---\n\n## Repository Structure\n\n```\n.\n├── libs/agno/agno/          # Core framework code\n├── cookbook/                # Examples, patterns and test cases (organized by topic)\n├── scripts/                 # Development and build scripts\n├── specs/                   # Design documents (symlinked, private)\n├── docs/                    # Documentation (symlinked, private)\n└── .cursorrules             # Coding patterns and conventions\n```\n\n---\n\n## Conductor Notes\n\nWhen working in Conductor, you can use the `.context/` directory for scratch notes or agent-to-agent handoff artifacts. This directory is gitignored.\n\n---\n\n## Setting Up Symlinks\n\nThe `specs/` and `docs/` directories are symlinked from external locations. For a fresh clone or new workspace, create these symlinks:\n\n```bash\nln -s ~/code/specs specs\nln -s ~/code/docs docs\n```\n\nThese contain private design documents and documentation that are not checked into the repository.\n\n---\n\n## Virtual Environments\n\nThis project uses two virtual environments:\n\n| Environment | Purpose | Setup |\n|-------------|---------|-------|\n| `.venv/` | Development and cookbooks: demo dependencies, tests, formatting, validation | `./scripts/dev_setup.sh` |\n| `.venvs/demo/` | Dedicated demos: same dependencies, separate environment | `./scripts/demo_setup.sh` |\n\n**Use `.venv`** for development tasks (`pytest`, `./scripts/format.sh`, `./scripts/validate.sh`) and day-to-day cookbook work.\n\n**Use `.venvs/demo`** for running demos in a separate environment. The cookbook commands below use this environment and also work with `.venv/bin/python`.\n\n---\n\n## Testing Cookbooks\n\nApart from implementing features, your most important task will be to test and maintain the cookbooks in `cookbook/` directory.\n\n> See `cookbook/08_learning/` for the golden standard.\n\n### Quick Reference\n\n**Test Environment:**\n\n```bash\n# Virtual environment with all dependencies\n.venvs/demo/bin/python\n\n# Setup (if needed)\n./scripts/demo_setup.sh\n\n# Database (if needed)\n./cookbook/scripts/run_pgvector.sh\n```\n\n**Run a cookbook:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n### Expected Cookbook Structure\n\nEach cookbook folder should have the following files:\n- `README.md` — The README for the cookbook.\n- `TEST_LOG.md` — Test results log.\n\n### Testing Workflow\n\n**1. Before Testing**\n- Ensure the virtual environment exists (run `./scripts/demo_setup.sh` if needed)\n- Start any required services (e.g., `./cookbook/scripts/run_pgvector.sh`)\n\n**2. Running Tests**\n```bash\n# Run individual cookbook\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n\n# Tail output for long tests\n.venvs/demo/bin/python cookbook/<folder>/<file>.py 2>&1 | tail -100\n```\n\n**3. Updating TEST_LOG.md**\n\nAfter each test, update the cookbook's `TEST_LOG.md` with:\n- Test name and path\n- Status: PASS or FAIL\n- Brief description of what was tested\n- Any notable observations or issues\n\nFormat:\n```markdown\n### filename.py\n\n**Status:** PASS/FAIL\n\n**Description:** What the test does and what was observed.\n\n**Result:** Summary of success/failure.\n\n---\n```\n\n---\n\n## Code Locations\n\n| What | Where |\n|------|-------|\n| Core agent code | `libs/agno/agno/agent/` |\n| Teams | `libs/agno/agno/team/` |\n| Workflows | `libs/agno/agno/workflow/` |\n| Tools | `libs/agno/agno/tools/` |\n| Models | `libs/agno/agno/models/` |\n| Knowledge/RAG | `libs/agno/agno/knowledge/` |\n| Memory | `libs/agno/agno/memory/` |\n| Learning | `libs/agno/agno/learn/` |\n| Database adapters | `libs/agno/agno/db/` |\n| Vector databases | `libs/agno/agno/vectordb/` |\n| Tests | `libs/agno/tests/` |\n\n---\n\n## Coding Patterns\n\nSee `.cursorrules` for detailed patterns. Key rules:\n\n- **Never create agents in loops** — reuse them for performance\n- **Use output_schema** for structured responses\n- **PostgreSQL in production**, SQLite for dev only\n- **Start with single agent**, scale up only when needed\n- **Both sync and async** — all public methods need both variants\n\n---\n\n## Running Code\n\n**Running cookbooks:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n**Running tests:**\n```bash\nsource .venv/bin/activate\npytest libs/agno/tests/\n\n# Run a specific test file\npytest libs/agno/tests/unit/test_agent.py\n```\n\n---\n\n## When Implementing Features\n\n1. **Check for design doc** in `specs/` — if it exists, follow it\n2. **Look at existing patterns** — find similar code and follow conventions\n3. **Create a cookbook** — every pattern should have an example\n4. **Update implementation.md** — mark what's done\n\n---\n\n## Before Submitting Code\n\n**Always run these scripts before pushing code or creating a PR:**\n\n```bash\n# Activate the virtual environment first\nsource .venv/bin/activate\n\n# Format all code (ruff format)\n./scripts/format.sh\n\n# Validate all code (ruff check, mypy)\n./scripts/validate.sh\n```\n\nBoth scripts must pass with no errors before code review.\n\n**PR Title Format:**\n\nPR titles must follow one of these formats:\n- `type: description` — e.g., `feat: add workflow serialization`\n- `[type] description` — e.g., `[feat] add workflow serialization`\n- `type-kebab-case` — e.g., `feat-workflow-serialization`\n\nValid types: `feat`, `fix`, `cookbook`, `test`, `refactor`, `chore`, `style`, `revert`, `release`\n\n**PR Description:**\n\nAlways follow the PR template in `.github/pull_request_template.md`. Include:\n- Summary of changes\n- Type of change (bug fix, new feature, etc.)\n- Completed checklist items\n- Any additional context\n\n---\n\n## GitHub Operations\n\n**Updating PR descriptions:**\n\nThe `gh pr edit` command may fail with GraphQL errors related to classic projects. Use the API directly instead:\n\n```bash\n# Update PR body\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"<PR_BODY>\"\n\n# Or with a file\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"$(cat /path/to/body.md)\"\n```\n\n---\n\n## Don't\n\n- Don't implement features without checking for a design doc first\n- 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\n- Don't use f-strings for print lines where there are no variables\n- Don't use emojis in examples and print lines\n- Don't skip async variants of public methods\n- Don't push code without running `./scripts/format.sh` and `./scripts/validate.sh`\n- Don't submit a PR without a detailed PR description. Always follow the PR template provided in `.github/pull_request_template.md`.\n- Don't use `OpenAIChat` in cookbooks or examples — use `OpenAIResponses` instead\n- Don't use `gpt-4o` or `gpt-4o-mini` in cookbooks or examples — use `gpt-5.6-luna` instead\n\n---\n\n## CI: Automated Code Review\n\nEvery 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.\n\nWhen 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.\"\n\nAgno-specific checks to always verify:\n- Both sync and async variants exist for all new public methods\n- No agent creation inside loops (agents should be reused)\n- Coding patterns in this file are followed\n- No f-strings for print lines where there are no variables\n","cookbook/10_reasoning/agents/TEST_LOG.md":"# Subagent: test_log\n\nPath: `cookbook/10_reasoning/agents/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/agents/TEST_LOG.md)","cookbook/10_reasoning/tools/README.md":"# tools Documentation\n\nPath: `cookbook/10_reasoning/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/tools/README.md)","cookbook/10_reasoning/tools/TEST_LOG.md":"# Tools Skill\n\nPath: `cookbook/10_reasoning/tools/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/tools/TEST_LOG.md)","cookbook/91_tools/advisor_tools/README.md":"# advisor_tools Documentation\n\nPath: `cookbook/91_tools/advisor_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/advisor_tools/README.md)","cookbook/91_tools/coding_tools/README.md":"# coding_tools Documentation\n\nPath: `cookbook/91_tools/coding_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/coding_tools/README.md)","cookbook/91_tools/docling_tools/README.md":"# docling_tools Documentation\n\nPath: `cookbook/91_tools/docling_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/docling_tools/README.md)","cookbook/91_tools/exceptions/README.md":"# exceptions Documentation\n\nPath: `cookbook/91_tools/exceptions/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/exceptions/README.md)","cookbook/91_tools/google/README.md":"# google Documentation\n\nPath: `cookbook/91_tools/google/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/google/README.md)","cookbook/91_tools/mcp/README.md":"# mcp Documentation\n\nPath: `cookbook/91_tools/mcp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/README.md)","cookbook/91_tools/models/README.md":"# models Documentation\n\nPath: `cookbook/91_tools/models/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/models/README.md)","cookbook/91_tools/other/README.md":"# other Documentation\n\nPath: `cookbook/91_tools/other/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/other/README.md)","cookbook/91_tools/parallel/README.md":"# parallel Documentation\n\nPath: `cookbook/91_tools/parallel/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/parallel/README.md)","cookbook/91_tools/tool_decorator/README.md":"# tool_decorator Documentation\n\nPath: `cookbook/91_tools/tool_decorator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/tool_decorator/README.md)","cookbook/91_tools/tool_hooks/README.md":"# tool_hooks Documentation\n\nPath: `cookbook/91_tools/tool_hooks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/tool_hooks/README.md)","cookbook/91_tools/workspace_tools/README.md":"# workspace_tools Documentation\n\nPath: `cookbook/91_tools/workspace_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/workspace_tools/README.md)","cookbook/environments/_26_multi_step_tools/README.md":"# _26_multi_step_tools Documentation\n\nPath: `cookbook/environments/_26_multi_step_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/environments/_26_multi_step_tools/README.md)","cookbook/04_workflows/06_advanced_concepts/tools/README.md":"# tools Documentation\n\nPath: `cookbook/04_workflows/06_advanced_concepts/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/04_workflows/06_advanced_concepts/tools/README.md)","cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md":"# Tools Skill\n\nPath: `cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md)","cookbook/90_models/anthropic/skills/README.md":"# Skills Skill\n\nPath: `cookbook/90_models/anthropic/skills/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/90_models/anthropic/skills/README.md)","cookbook/90_models/anthropic/skills/TEST_LOG.md":"# Skills Skill\n\nPath: `cookbook/90_models/anthropic/skills/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/90_models/anthropic/skills/TEST_LOG.md)","cookbook/91_tools/mcp/dynamic_headers/README.md":"# dynamic_headers Documentation\n\nPath: `cookbook/91_tools/mcp/dynamic_headers/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/dynamic_headers/README.md)","cookbook/91_tools/mcp/local_server/README.md":"# local_server Documentation\n\nPath: `cookbook/91_tools/mcp/local_server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/local_server/README.md)","cookbook/91_tools/mcp/mcp_toolbox_demo/README.md":"# mcp_toolbox_demo Documentation\n\nPath: `cookbook/91_tools/mcp/mcp_toolbox_demo/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/mcp_toolbox_demo/README.md)","cookbook/91_tools/mcp/sse_transport/README.md":"# sse_transport Documentation\n\nPath: `cookbook/91_tools/mcp/sse_transport/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/sse_transport/README.md)","cookbook/91_tools/mcp/streamable_http_transport/README.md":"# streamable_http_transport Documentation\n\nPath: `cookbook/91_tools/mcp/streamable_http_transport/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/streamable_http_transport/README.md)","cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md":"# References Skill\n\nPath: `cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md)","cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md":"# References Skill\n\nPath: `cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md)"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# Agno - Agent Instructions\n\nInstructions for AI coding agents (Claude Code, Codex, Cursor, etc.) working on this codebase.\n\n---\n\n## Repository Structure\n\n```\n.\n├── libs/agno/agno/          # Core framework code\n├── cookbook/                # Examples, patterns and test cases (organized by topic)\n├── scripts/                 # Development and build scripts\n├── specs/                   # Design documents (symlinked, private)\n├── docs/                    # Documentation (symlinked, private)\n└── .cursorrules             # Coding patterns and conventions\n```\n\n---\n\n## Conductor Notes\n\nWhen working in Conductor, you can use the `.context/` directory for scratch notes or agent-to-agent handoff artifacts. This directory is gitignored.\n\n---\n\n## Setting Up Symlinks\n\nThe `specs/` and `docs/` directories are symlinked from external locations. For a fresh clone or new workspace, create these symlinks:\n\n```bash\nln -s ~/code/specs specs\nln -s ~/code/docs docs\n```\n\nThese contain private design documents and documentation that are not checked into the repository.\n\n---\n\n## Virtual Environments\n\nThis project uses two virtual environments:\n\n| Environment | Purpose | Setup |\n|-------------|---------|-------|\n| `.venv/` | Development and cookbooks: demo dependencies, tests, formatting, validation | `./scripts/dev_setup.sh` |\n| `.venvs/demo/` | Dedicated demos: same dependencies, separate environment | `./scripts/demo_setup.sh` |\n\n**Use `.venv`** for development tasks (`pytest`, `./scripts/format.sh`, `./scripts/validate.sh`) and day-to-day cookbook work.\n\n**Use `.venvs/demo`** for running demos in a separate environment. The cookbook commands below use this environment and also work with `.venv/bin/python`.\n\n---\n\n## Testing Cookbooks\n\nApart from implementing features, your most important task will be to test and maintain the cookbooks in `cookbook/` directory.\n\n> See `cookbook/08_learning/` for the golden standard.\n\n### Quick Reference\n\n**Test Environment:**\n\n```bash\n# Virtual environment with all dependencies\n.venvs/demo/bin/python\n\n# Setup (if needed)\n./scripts/demo_setup.sh\n\n# Database (if needed)\n./cookbook/scripts/run_pgvector.sh\n```\n\n**Run a cookbook:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n### Expected Cookbook Structure\n\nEach cookbook folder should have the following files:\n- `README.md` — The README for the cookbook.\n- `TEST_LOG.md` — Test results log.\n\n### Testing Workflow\n\n**1. Before Testing**\n- Ensure the virtual environment exists (run `./scripts/demo_setup.sh` if needed)\n- Start any required services (e.g., `./cookbook/scripts/run_pgvector.sh`)\n\n**2. Running Tests**\n```bash\n# Run individual cookbook\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n\n# Tail output for long tests\n.venvs/demo/bin/python cookbook/<folder>/<file>.py 2>&1 | tail -100\n```\n\n**3. Updating TEST_LOG.md**\n\nAfter each test, update the cookbook's `TEST_LOG.md` with:\n- Test name and path\n- Status: PASS or FAIL\n- Brief description of what was tested\n- Any notable observations or issues\n\nFormat:\n```markdown\n### filename.py\n\n**Status:** PASS/FAIL\n\n**Description:** What the test does and what was observed.\n\n**Result:** Summary of success/failure.\n\n---\n```\n\n---\n\n## Code Locations\n\n| What | Where |\n|------|-------|\n| Core agent code | `libs/agno/agno/agent/` |\n| Teams | `libs/agno/agno/team/` |\n| Workflows | `libs/agno/agno/workflow/` |\n| Tools | `libs/agno/agno/tools/` |\n| Models | `libs/agno/agno/models/` |\n| Knowledge/RAG | `libs/agno/agno/knowledge/` |\n| Memory | `libs/agno/agno/memory/` |\n| Learning | `libs/agno/agno/learn/` |\n| Database adapters | `libs/agno/agno/db/` |\n| Vector databases | `libs/agno/agno/vectordb/` |\n| Tests | `libs/agno/tests/` |\n\n---\n\n## Coding Patterns\n\nSee `.cursorrules` for detailed patterns. Key rules:\n\n- **Never create agents in loops** — reuse them for performance\n- **Use output_schema** for structured responses\n- **PostgreSQL in production**, SQLite for dev only\n- **Start with single agent**, scale up only when needed\n- **Both sync and async** — all public methods need both variants\n\n---\n\n## Running Code\n\n**Running cookbooks:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n**Running tests:**\n```bash\nsource .venv/bin/activate\npytest libs/agno/tests/\n\n# Run a specific test file\npytest libs/agno/tests/unit/test_agent.py\n```\n\n---\n\n## When Implementing Features\n\n1. **Check for design doc** in `specs/` — if it exists, follow it\n2. **Look at existing patterns** — find similar code and follow conventions\n3. **Create a cookbook** — every pattern should have an example\n4. **Update implementation.md** — mark what's done\n\n---\n\n## Before Submitting Code\n\n**Always run these scripts before pushing code or creating a PR:**\n\n```bash\n# Activate the virtual environment first\nsource .venv/bin/activate\n\n# Format all code (ruff format)\n./scripts/format.sh\n\n# Validate all code (ruff check, mypy)\n./scripts/validate.sh\n```\n\nBoth scripts must pass with no errors before code review.\n\n**PR Title Format:**\n\nPR titles must follow one of these formats:\n- `type: description` — e.g., `feat: add workflow serialization`\n- `[type] description` — e.g., `[feat] add workflow serialization`\n- `type-kebab-case` — e.g., `feat-workflow-serialization`\n\nValid types: `feat`, `fix`, `cookbook`, `test`, `refactor`, `chore`, `style`, `revert`, `release`\n\n**PR Description:**\n\nAlways follow the PR template in `.github/pull_request_template.md`. Include:\n- Summary of changes\n- Type of change (bug fix, new feature, etc.)\n- Completed checklist items\n- Any additional context\n\n---\n\n## GitHub Operations\n\n**Updating PR descriptions:**\n\nThe `gh pr edit` command may fail with GraphQL errors related to classic projects. Use the API directly instead:\n\n```bash\n# Update PR body\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"<PR_BODY>\"\n\n# Or with a file\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"$(cat /path/to/body.md)\"\n```\n\n---\n\n## Don't\n\n- Don't implement features without checking for a design doc first\n- 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\n- Don't use f-strings for print lines where there are no variables\n- Don't use emojis in examples and print lines\n- Don't skip async variants of public methods\n- Don't push code without running `./scripts/format.sh` and `./scripts/validate.sh`\n- Don't submit a PR without a detailed PR description. Always follow the PR template provided in `.github/pull_request_template.md`.\n- Don't use `OpenAIChat` in cookbooks or examples — use `OpenAIResponses` instead\n- Don't use `gpt-4o` or `gpt-4o-mini` in cookbooks or examples — use `gpt-5.6-luna` instead\n\n---\n\n## CI: Automated Code Review\n\nEvery 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.\n\nWhen 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.\"\n\nAgno-specific checks to always verify:\n- Both sync and async variants exist for all new public methods\n- No agent creation inside loops (agents should be reused)\n- Coding patterns in this file are followed\n- No f-strings for print lines where there are no variables\n","isInternal":false,"tokens":1850,"sizeBytes":7577},{"name":"style-guide.md","path":"cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md)","tokens":300,"sizeBytes":273},{"name":"SKILL.md","path":"cookbook/02_agents/16_skills/sample_skills/code-review/SKILL.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/code-review/SKILL.md","title":"code-review","category":"anthropic-skill","format":"markdown","content":"---\nname: code-review\ndescription: Code review assistance with linting, style checking, and best practices\nlicense: Apache-2.0\nmetadata:\n  version: \"1.0.0\"\n  author: agno-team\n  tags: [\"quality\", \"review\", \"linting\"]\n---\n# Code Review Skill\n\nYou are a code review assistant. When reviewing code, follow these steps:\n\n## Review Process\n1. **Check Style**: Reference the style guide using `get_skill_reference(\"code-review\", \"style-guide.md\")`\n2. **Run Style Check**: Use `get_skill_script(\"code-review\", \"check_style.py\")` for automated style checking\n3. **Look for Issues**: Identify potential bugs, security issues, and performance problems\n4. **Provide Feedback**: Give structured feedback with severity levels\n\n## Feedback Format\n- **Critical**: Must fix before merge (security vulnerabilities, bugs that cause crashes)\n- **Important**: Should fix, but not blocking (performance issues, code smells)\n- **Suggestion**: Nice to have improvements (naming, documentation, minor refactoring)\n\n## Review Checklist\n- [ ] Code follows naming conventions\n- [ ] No hardcoded secrets or credentials\n- [ ] Error handling is appropriate\n- [ ] Functions are not too long (< 50 lines)\n- [ ] No obvious security vulnerabilities\n- [ ] Tests are included for new functionality\n","frontmatter":{"name":"code-review","description":"Code review assistance with linting, style checking, and best practices","license":"Apache-2.0","metadata":{"version":"1.0.0","author":"agno-team","tags":["quality","review","linting"]}},"isInternal":false,"tokens":287,"sizeBytes":1262},{"name":"commit-types.md","path":"cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md)","tokens":300,"sizeBytes":277},{"name":"SKILL.md","path":"cookbook/02_agents/16_skills/sample_skills/git-workflow/SKILL.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/git-workflow/SKILL.md","title":"git-workflow","category":"anthropic-skill","format":"markdown","content":"---\nname: git-workflow\ndescription: Git workflow guidance for commits, branches, and pull requests\nlicense: Apache-2.0\nmetadata:\n  version: \"1.0.0\"\n  author: agno-team\n  tags: [\"git\", \"version-control\", \"workflow\"]\n---\n# Git Workflow Skill\n\nYou are a Git workflow assistant. Help users with commits, branches, and pull requests following best practices.\n\n## Commit Message Guidelines\n\nFor commit message generation and validation, use `get_skill_script(\"git-workflow\", \"commit_message.py\")`.\n\n### Format\n```\n<type>(<scope>): <subject>\n\n<body>\n\n<footer>\n```\n\n### Types\n- **feat**: New feature\n- **fix**: Bug fix\n- **docs**: Documentation only\n- **style**: Formatting, no code change\n- **refactor**: Code change that neither fixes a bug nor adds a feature\n- **perf**: Performance improvement\n- **test**: Adding or updating tests\n- **chore**: Maintenance tasks\n\n### Examples\n```\nfeat(auth): add OAuth2 login support\n\nImplemented OAuth2 authentication flow with Google and GitHub providers.\nAdded token refresh mechanism and session management.\n\nCloses #123\n```\n\n```\nfix(api): handle null response from external service\n\nAdded null check before processing response data to prevent\nNullPointerException when external service returns empty response.\n\nFixes #456\n```\n\n## Branch Naming\n\n### Format\n```\n<type>/<ticket-id>-<short-description>\n```\n\n### Examples\n- `feature/AUTH-123-oauth-login`\n- `fix/BUG-456-null-pointer`\n- `chore/TECH-789-update-deps`\n\n## Pull Request Guidelines\n\n### Title\nFollow commit message format for the title.\n\n### Description Template\n```markdown\n## Summary\nBrief description of what this PR does.\n\n## Changes\n- Change 1\n- Change 2\n\n## Testing\nHow was this tested?\n\n## Checklist\n- [ ] Tests added/updated\n- [ ] Documentation updated\n- [ ] No breaking changes\n```\n\n## Common Commands\n\n### Starting Work\n```bash\ngit checkout main\ngit pull origin main\ngit checkout -b feature/TICKET-123-description\n```\n\n### Committing\n```bash\ngit add -p  # Interactive staging\ngit commit -m \"type(scope): description\"\n```\n\n### Updating Branch\n```bash\ngit fetch origin\ngit rebase origin/main\n```\n\n### Creating PR\n```bash\ngit push -u origin feature/TICKET-123-description\n# Then create PR on GitHub/GitLab\n```\n","frontmatter":{"name":"git-workflow","description":"Git workflow guidance for commits, branches, and pull requests","license":"Apache-2.0","metadata":{"version":"1.0.0","author":"agno-team","tags":["git","version-control","workflow"]}},"isInternal":false,"tokens":540,"sizeBytes":2207},{"name":"TEST_LOG.md","path":"cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md)","tokens":300,"sizeBytes":228},{"name":"SKILL.md","path":"cookbook/05_agent_os/23_skills/sample_skills/system-info/SKILL.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/05_agent_os/23_skills/sample_skills/system-info/SKILL.md","title":"system-info","category":"anthropic-skill","format":"markdown","content":"---\nname: system-info\ndescription: Inspect the host operating system, Python runtime, and local files\nlicense: MIT\nmetadata:\n  version: \"1.0.0\"\n  author: agno\n---\n# System Info Skill\n\nUse this skill when the user asks about the host running the AgentOS process or\nneeds a directory inventory from that host.\n\n## Available scripts\n\n- `get_system_info.py` returns the hostname, operating system, architecture,\n  Python version and executable, processor, and current UTC time.\n- `list_directory.py` lists the direct children of a directory. It accepts one\n  optional path argument and defaults to the skill directory.\n\n## Execution\n\nLoad these instructions before choosing a script. Execute a script through the\nskill tool and inspect its structured result:\n\n```python\nget_skill_script(\n    skill_name=\"system-info\",\n    script_path=\"get_system_info.py\",\n    execute=True,\n)\n```\n\nTo list a directory:\n\n```python\nget_skill_script(\n    skill_name=\"system-info\",\n    script_path=\"list_directory.py\",\n    execute=True,\n    args=[\".\"],\n)\n```\n\nOnly use data parsed from `stdout` when `returncode` is `0`. If execution\nreturns a nonzero code, report `stderr` or the JSON error instead of inferring\nthe result.\n","frontmatter":{"name":"system-info","description":"Inspect the host operating system, Python runtime, and local files","license":"MIT","metadata":{"version":"1.0.0","author":"agno"}},"isInternal":false,"tokens":272,"sizeBytes":1200},{"name":"TEST_LOG.md","path":"cookbook/10_reasoning/tools/TEST_LOG.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/tools/TEST_LOG.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"# Tools Skill\n\nPath: `cookbook/10_reasoning/tools/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/tools/TEST_LOG.md)","tokens":300,"sizeBytes":186},{"name":"README.md","path":"cookbook/90_models/anthropic/skills/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/90_models/anthropic/skills/README.md","title":"Skills Skill","category":"anthropic-skill","format":"markdown","content":"# Skills Skill\n\nPath: `cookbook/90_models/anthropic/skills/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/90_models/anthropic/skills/README.md)","tokens":300,"sizeBytes":199},{"name":"TEST_LOG.md","path":"cookbook/90_models/anthropic/skills/TEST_LOG.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/90_models/anthropic/skills/TEST_LOG.md","title":"Skills Skill","category":"anthropic-skill","format":"markdown","content":"# Skills Skill\n\nPath: `cookbook/90_models/anthropic/skills/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/90_models/anthropic/skills/TEST_LOG.md)","tokens":300,"sizeBytes":203},{"name":"SKILL.md","path":"cookbook/frameworks/antigravity/example_agent/skills/haiku/SKILL.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/frameworks/antigravity/example_agent/skills/haiku/SKILL.md","title":"haiku","category":"anthropic-skill","format":"markdown","content":"# Haiku house style\n\nWhen writing a haiku for this bot, follow these conventions:\n\n- 5-7-5 syllable structure, strict.\n- Prefer concrete imagery over abstraction.\n- Include at least one season-word (kigo) when natural.\n- No emojis, no preamble, no closing remarks — output ONLY the haiku itself.\n","isInternal":false,"tokens":71,"sizeBytes":298},{"name":".cursorrules","path":".cursorrules","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/.cursorrules","title":"Cursor IDE Native Rules","category":"cursor-rule","format":"markdown","content":"You are an expert in Python, Agno framework, and AI agent development.\n\nCore Rules\n- NEVER create agents in loops - reuse them for performance\n- Always use output_schema for structured responses\n- PostgreSQL in production, SQLite for dev only\n- Start with single agent, scale up only when needed\n\nDocumentation:\n- Don't use f-strings for print lines where there are no variables to format.\n- Don't use emojis in examples and print lines\n\nBasic Agent (start here):\n```python\nfrom agno.agent import Agent\nfrom agno.models.openai import OpenAIResponses\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    instructions=\"You are a helpful assistant\",\n    markdown=True,\n)\nagent.print_response(\"Your query\", stream=True)\n```\n\nAgent with Tools:\n```python\nfrom agno.tools.websearch import WebSearchTools\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    tools=[WebSearchTools()],\n    instructions=\"Search the web for information\",\n)\n```\n\nCRITICAL: Agent Reuse Performance\n```python\n# WRONG - Recreates agent every time (significant overhead)\nfor query in queries:\n    agent = Agent(...)  # DON'T DO THIS\n    \n# CORRECT - Create once, reuse\nagent = Agent(...)\nfor query in queries:\n    agent.run(query)\n```\n\nWhen to Use Each Pattern\n\nSingle Agent (90% of use cases):\n- One clear task or domain\n- Can be solved with tools + instructions\n- Example: Search, analyze, generate content\n\nTeam (autonomous coordination):\n- Multiple specialized agents with different expertise\n- Agents decide who does what via LLM\n- Complex tasks requiring multiple perspectives\n- Example: Research + Analysis + Writing\n\nWorkflow (programmatic control):\n- Sequential steps with clear flow\n- Need conditional logic or branching\n- Full control over execution order\n- Example: Extract → Transform → Load pipelines\n\nTeam Pattern:\n```python\nfrom agno.team.team import Team\n\nweb_agent = Agent(\n    name=\"Researcher\",\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    tools=[WebSearchTools()],\n)\n\nwriter_agent = Agent(\n    name=\"Writer\",\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n)\n\nteam = Team(\n    members=[web_agent, writer_agent],\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    instructions=\"Research and write articles\",\n)\n```\n\nWorkflow Pattern:\n```python\nfrom agno.workflow.workflow import Workflow\nfrom agno.db.sqlite import SqliteDb\n\n# Define agents first (researcher, writer)\nasync def blog_workflow(session_state, topic: str):\n    # Step 1: Research\n    research = await researcher.arun(topic)\n    \n    # Step 2: Write\n    article = await writer.arun(research.content)\n    \n    return article\n\nworkflow = Workflow(\n    name=\"Blog Generator\",\n    steps=blog_workflow,\n    db=SqliteDb(db_file=\"tmp/workflow.db\"),\n)\n```\n\nKnowledge/RAG:\n```python\nfrom agno.knowledge.knowledge import Knowledge\nfrom agno.vectordb.lancedb import LanceDb, SearchType\nfrom agno.knowledge.embedder.openai import OpenAIEmbedder\n\nknowledge = Knowledge(\n    vector_db=LanceDb(\n        uri=\"tmp/lancedb\",\n        table_name=\"knowledge_base\",\n        search_type=SearchType.hybrid,\n        embedder=OpenAIEmbedder(id=\"text-embedding-3-small\"),\n    ),\n)\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    knowledge=knowledge,\n    search_knowledge=True,  # Critical: enables agentic RAG\n    instructions=\"Use knowledge base, cite sources\"\n)\n```\n\nChat History:\n```python\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    db=SqliteDb(db_file=\"tmp/agents.db\"),\n    user_id=\"user-123\",\n    add_history_to_context=True,  # Adds previous messages\n    num_history_runs=3,\n)\n```\n\nStructured Output:\n```python\nfrom pydantic import BaseModel\n\nclass Result(BaseModel):\n    summary: str\n    findings: list[str]\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    output_schema=Result,\n)\nresult: Result = agent.run(query).content\n```\n\nAgentOS Production:\n```python\nfrom agno.os import AgentOS\nfrom agno.db.postgres import PostgresDb\n\nagent_os = AgentOS(\n    agents=[agent],\n    db=PostgresDb(db_url=os.getenv(\"DATABASE_URL\")),\n)\napp = agent_os.get_app()\n```\n\nCommon Mistakes\n- Creating agents in loops (massive performance hit)\n- Using Team when single agent would work\n- Forgetting search_knowledge=True with knowledge\n- Using SQLite in production\n- Not adding history when context matters\n- Missing output_schema validation\n\nProduction\n- Use PostgresDb not SqliteDb\n- Set show_tool_calls=False, debug_mode=False\n- Wrap agent.run() in try-except\n\nDocs: https://docs.agno.com\n","isInternal":false,"tokens":1089,"sizeBytes":4446},{"name":"CLAUDE.md","path":"CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/CLAUDE.md","title":"Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"# Agno - Agent Instructions\n\nInstructions for AI coding agents (Claude Code, Codex, Cursor, etc.) working on this codebase.\n\n---\n\n## Repository Structure\n\n```\n.\n├── libs/agno/agno/          # Core framework code\n├── cookbook/                # Examples, patterns and test cases (organized by topic)\n├── scripts/                 # Development and build scripts\n├── specs/                   # Design documents (symlinked, private)\n├── docs/                    # Documentation (symlinked, private)\n└── .cursorrules             # Coding patterns and conventions\n```\n\n---\n\n## Conductor Notes\n\nWhen working in Conductor, you can use the `.context/` directory for scratch notes or agent-to-agent handoff artifacts. This directory is gitignored.\n\n---\n\n## Setting Up Symlinks\n\nThe `specs/` and `docs/` directories are symlinked from external locations. For a fresh clone or new workspace, create these symlinks:\n\n```bash\nln -s ~/code/specs specs\nln -s ~/code/docs docs\n```\n\nThese contain private design documents and documentation that are not checked into the repository.\n\n---\n\n## Virtual Environments\n\nThis project uses two virtual environments:\n\n| Environment | Purpose | Setup |\n|-------------|---------|-------|\n| `.venv/` | Development and cookbooks: demo dependencies, tests, formatting, validation | `./scripts/dev_setup.sh` |\n| `.venvs/demo/` | Dedicated demos: same dependencies, separate environment | `./scripts/demo_setup.sh` |\n\n**Use `.venv`** for development tasks (`pytest`, `./scripts/format.sh`, `./scripts/validate.sh`) and day-to-day cookbook work.\n\n**Use `.venvs/demo`** for running demos in a separate environment. The cookbook commands below use this environment and also work with `.venv/bin/python`.\n\n---\n\n## Testing Cookbooks\n\nApart from implementing features, your most important task will be to test and maintain the cookbooks in `cookbook/` directory.\n\n> See `cookbook/08_learning/` for the golden standard.\n\n### Quick Reference\n\n**Test Environment:**\n\n```bash\n# Virtual environment with all dependencies\n.venvs/demo/bin/python\n\n# Setup (if needed)\n./scripts/demo_setup.sh\n\n# Database (if needed)\n./cookbook/scripts/run_pgvector.sh\n```\n\n**Run a cookbook:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n### Expected Cookbook Structure\n\nEach cookbook folder should have the following files:\n- `README.md` — The README for the cookbook.\n- `TEST_LOG.md` — Test results log.\n\n### Testing Workflow\n\n**1. Before Testing**\n- Ensure the virtual environment exists (run `./scripts/demo_setup.sh` if needed)\n- Start any required services (e.g., `./cookbook/scripts/run_pgvector.sh`)\n\n**2. Running Tests**\n```bash\n# Run individual cookbook\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n\n# Tail output for long tests\n.venvs/demo/bin/python cookbook/<folder>/<file>.py 2>&1 | tail -100\n```\n\n**3. Updating TEST_LOG.md**\n\nAfter each test, update the cookbook's `TEST_LOG.md` with:\n- Test name and path\n- Status: PASS or FAIL\n- Brief description of what was tested\n- Any notable observations or issues\n\nFormat:\n```markdown\n### filename.py\n\n**Status:** PASS/FAIL\n\n**Description:** What the test does and what was observed.\n\n**Result:** Summary of success/failure.\n\n---\n```\n\n---\n\n## Code Locations\n\n| What | Where |\n|------|-------|\n| Core agent code | `libs/agno/agno/agent/` |\n| Teams | `libs/agno/agno/team/` |\n| Workflows | `libs/agno/agno/workflow/` |\n| Tools | `libs/agno/agno/tools/` |\n| Models | `libs/agno/agno/models/` |\n| Knowledge/RAG | `libs/agno/agno/knowledge/` |\n| Memory | `libs/agno/agno/memory/` |\n| Learning | `libs/agno/agno/learn/` |\n| Database adapters | `libs/agno/agno/db/` |\n| Vector databases | `libs/agno/agno/vectordb/` |\n| Tests | `libs/agno/tests/` |\n\n---\n\n## Coding Patterns\n\nSee `.cursorrules` for detailed patterns. Key rules:\n\n- **Never create agents in loops** — reuse them for performance\n- **Use output_schema** for structured responses\n- **PostgreSQL in production**, SQLite for dev only\n- **Start with single agent**, scale up only when needed\n- **Both sync and async** — all public methods need both variants\n\n---\n\n## Running Code\n\n**Running cookbooks:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n**Running tests:**\n```bash\nsource .venv/bin/activate\npytest libs/agno/tests/\n\n# Run a specific test file\npytest libs/agno/tests/unit/test_agent.py\n```\n\n---\n\n## When Implementing Features\n\n1. **Check for design doc** in `specs/` — if it exists, follow it\n2. **Look at existing patterns** — find similar code and follow conventions\n3. **Create a cookbook** — every pattern should have an example\n4. **Update implementation.md** — mark what's done\n\n---\n\n## Before Submitting Code\n\n**Always run these scripts before pushing code or creating a PR:**\n\n```bash\n# Activate the virtual environment first\nsource .venv/bin/activate\n\n# Format all code (ruff format)\n./scripts/format.sh\n\n# Validate all code (ruff check, mypy)\n./scripts/validate.sh\n```\n\nBoth scripts must pass with no errors before code review.\n\n**PR Title Format:**\n\nPR titles must follow one of these formats:\n- `type: description` — e.g., `feat: add workflow serialization`\n- `[type] description` — e.g., `[feat] add workflow serialization`\n- `type-kebab-case` — e.g., `feat-workflow-serialization`\n\nValid types: `feat`, `fix`, `cookbook`, `test`, `refactor`, `chore`, `style`, `revert`, `release`\n\n**PR Description:**\n\nAlways follow the PR template in `.github/pull_request_template.md`. Include:\n- Summary of changes\n- Type of change (bug fix, new feature, etc.)\n- Completed checklist items\n- Any additional context\n\n---\n\n## GitHub Operations\n\n**Updating PR descriptions:**\n\nThe `gh pr edit` command may fail with GraphQL errors related to classic projects. Use the API directly instead:\n\n```bash\n# Update PR body\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"<PR_BODY>\"\n\n# Or with a file\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"$(cat /path/to/body.md)\"\n```\n\n---\n\n## Don't\n\n- Don't implement features without checking for a design doc first\n- 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\n- Don't use f-strings for print lines where there are no variables\n- Don't use emojis in examples and print lines\n- Don't skip async variants of public methods\n- Don't push code without running `./scripts/format.sh` and `./scripts/validate.sh`\n- Don't submit a PR without a detailed PR description. Always follow the PR template provided in `.github/pull_request_template.md`.\n- Don't use `OpenAIChat` in cookbooks or examples — use `OpenAIResponses` instead\n- Don't use `gpt-4o` or `gpt-4o-mini` in cookbooks or examples — use `gpt-5.6-luna` instead\n\n---\n\n## CI: Automated Code Review\n\nEvery 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.\n\nWhen 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.\"\n\nAgno-specific checks to always verify:\n- Both sync and async variants exist for all new public methods\n- No agent creation inside loops (agents should be reused)\n- Coding patterns in this file are followed\n- No f-strings for print lines where there are no variables\n","isInternal":false,"tokens":1850,"sizeBytes":7577},{"name":"README.md","path":"cookbook/02_agents/04_tools/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/04_tools/README.md","title":"04_tools Documentation","category":"plugin-manifest","format":"markdown","content":"# 04_tools\n\nExamples for callable tool factories, tool choice, and tool call limits.\n\n## Files\n- `01_callable_tools.py` - Vary the toolset per user role using callable factories.\n- `02_session_state_tools.py` - Use session_state directly as a parameter with caching disabled.\n- `03_team_callable_members.py` - Assemble team members dynamically.\n- `04_tools_with_literal_type_param.py` - Use typing.Literal for tool parameters with predefined values.\n- `tool_call_limit.py` - Limit the number of tool calls per run.\n- `tool_choice.py` - Control which tool the agent selects.\n\n## Prerequisites\n- Load environment variables with `direnv allow` (including `OPENAI_API_KEY`).\n- Create the demo environment with `./scripts/demo_setup.sh`, then run cookbooks with `.venvs/demo/bin/python`.\n- Some examples require optional local services (for example pgvector) or provider-specific API keys.\n\n## Run\n- `.venvs/demo/bin/python cookbook/02_agents/04_tools/<file>.py`\n","isInternal":false,"tokens":219,"sizeBytes":958},{"name":"README.md","path":"cookbook/03_teams/03_tools/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/03_teams/03_tools/README.md","title":"03_tools Documentation","category":"plugin-manifest","format":"markdown","content":"# tools\n\nExamples for team workflows in tools.\n\n## Prerequisites\n\n- Load environment variables (for example, OPENAI_API_KEY) via direnv allow.\n- Use .venvs/demo/bin/python to run cookbook examples.\n- Some examples require additional services (for example PostgreSQL, LanceDB, or Infinity server) as noted in file docstrings.\n\n## Files\n\n- async_toolkit_context.py - Demonstrates async toolkit tools appearing in team system message context.\n- async_tools.py - Demonstrates async tools.\n- custom_tools.py - Demonstrates custom tools.\n- tool_call_limit.py - Demonstrates limiting total tool calls per Team run.\n- tool_choice.py - Demonstrates forcing specific tool usage via tool_choice.\n- member_tool_hooks.py - Demonstrates member tool hooks.\n- tool_hooks.py - Demonstrates tool hooks.\n","isInternal":false,"tokens":165,"sizeBytes":785},{"name":"README.md","path":"cookbook/04_workflows/06_advanced_concepts/tools/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/04_workflows/06_advanced_concepts/tools/README.md","title":"tools Documentation","category":"plugin-manifest","format":"markdown","content":"# tools Documentation\n\nPath: `cookbook/04_workflows/06_advanced_concepts/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/04_workflows/06_advanced_concepts/tools/README.md)","tokens":300,"sizeBytes":232},{"name":"README.md","path":"cookbook/05_agent_os/25_agentos_tools/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/05_agent_os/25_agentos_tools/README.md","title":"25_agentos_tools Documentation","category":"plugin-manifest","format":"markdown","content":"# AgentOS Tools\n\nAgentOSTools gives an agent a read-only ops view of the AgentOS it runs on:\nusage, latency, failures, tool statistics, schedules, eval history, pending\napprovals and runtime-built components. The toolkit takes the database, never\nthe AgentOS instance — agents are constructed before the OS, so every tool\nreads only from `db`.\n\n## Files\n\n| File | What it teaches |\n|---|---|\n| `platform_ops_agent.py` | Generate traced activity with a worker agent, then answer platform questions with an ops agent using AgentOSTools. |\n\n## Prerequisites\n\n```bash\n./scripts/demo_setup.sh\nexport OPENAI_API_KEY=...\n```\n\n## Run platform_ops_agent.py\n\n```bash\n.venvs/demo/bin/python cookbook/05_agent_os/25_agentos_tools/platform_ops_agent.py\n```\n\nThe demo runs the worker agent twice, verifies the activity is visible through\nthe toolkit (run counts, tool statistics, session metrics), then asks the ops\nagent for a platform summary.\n\n## Notes\n\n- No tool mutates platform state; schedule, approval and component management\n  are deliberately not exposed. The one write is the metrics rollup refresh\n  inside `get_platform_metrics` (derived data, no user content). The tools read\n  the database directly, so AgentOS endpoint scopes do not apply — expose the\n  ops agent to operators, and trim surfaces with the enable flags for wider\n  audiences.\n- Sensitive payloads are never returned: span attributes, approval tool\n  arguments and schedule run input/output can hold conversation content and are\n  excluded from every tool result.\n- Per-surface flags (`metrics`, `traces`, `schedules`, `evals`, `components`,\n  `approvals`) control which tools a deployment exposes.\n- On SQLite, `p95_duration_ms` is reported as null (no SQL percentile support);\n  PostgreSQL reports real percentiles. The payload says so when it applies.\n","isInternal":false,"tokens":409,"sizeBytes":1826},{"name":"README.md","path":"cookbook/10_reasoning/tools/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/tools/README.md","title":"tools Documentation","category":"plugin-manifest","format":"markdown","content":"# tools Documentation\n\nPath: `cookbook/10_reasoning/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/tools/README.md)","tokens":300,"sizeBytes":190},{"name":"README.md","path":"cookbook/91_tools/advisor_tools/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/advisor_tools/README.md","title":"advisor_tools Documentation","category":"plugin-manifest","format":"markdown","content":"# advisor_tools Documentation\n\nPath: `cookbook/91_tools/advisor_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/advisor_tools/README.md)","tokens":300,"sizeBytes":206},{"name":"README.md","path":"cookbook/91_tools/coding_tools/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/coding_tools/README.md","title":"coding_tools Documentation","category":"plugin-manifest","format":"markdown","content":"# coding_tools Documentation\n\nPath: `cookbook/91_tools/coding_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/coding_tools/README.md)","tokens":300,"sizeBytes":203},{"name":"README.md","path":"cookbook/91_tools/docling_tools/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/docling_tools/README.md","title":"docling_tools Documentation","category":"plugin-manifest","format":"markdown","content":"# docling_tools Documentation\n\nPath: `cookbook/91_tools/docling_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/docling_tools/README.md)","tokens":300,"sizeBytes":206},{"name":"README.md","path":"cookbook/91_tools/exceptions/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/exceptions/README.md","title":"exceptions Documentation","category":"plugin-manifest","format":"markdown","content":"# exceptions Documentation\n\nPath: `cookbook/91_tools/exceptions/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/exceptions/README.md)","tokens":300,"sizeBytes":197},{"name":"README.md","path":"cookbook/91_tools/google/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/google/README.md","title":"google Documentation","category":"plugin-manifest","format":"markdown","content":"# google Documentation\n\nPath: `cookbook/91_tools/google/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/google/README.md)","tokens":300,"sizeBytes":185},{"name":"README.md","path":"cookbook/91_tools/mcp/dynamic_headers/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/dynamic_headers/README.md","title":"dynamic_headers Documentation","category":"plugin-manifest","format":"markdown","content":"# dynamic_headers Documentation\n\nPath: `cookbook/91_tools/mcp/dynamic_headers/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/dynamic_headers/README.md)","tokens":300,"sizeBytes":220},{"name":"README.md","path":"cookbook/91_tools/mcp/local_server/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/local_server/README.md","title":"local_server Documentation","category":"plugin-manifest","format":"markdown","content":"# local_server Documentation\n\nPath: `cookbook/91_tools/mcp/local_server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/local_server/README.md)","tokens":300,"sizeBytes":211},{"name":"README.md","path":"cookbook/91_tools/mcp/mcp_toolbox_demo/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/mcp_toolbox_demo/README.md","title":"mcp_toolbox_demo Documentation","category":"plugin-manifest","format":"markdown","content":"# mcp_toolbox_demo Documentation\n\nPath: `cookbook/91_tools/mcp/mcp_toolbox_demo/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/mcp_toolbox_demo/README.md)","tokens":300,"sizeBytes":223},{"name":"README.md","path":"cookbook/91_tools/mcp/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/README.md","title":"mcp Documentation","category":"plugin-manifest","format":"markdown","content":"# mcp Documentation\n\nPath: `cookbook/91_tools/mcp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/README.md)","tokens":300,"sizeBytes":176},{"name":"README.md","path":"cookbook/91_tools/mcp/sse_transport/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/sse_transport/README.md","title":"sse_transport Documentation","category":"plugin-manifest","format":"markdown","content":"# sse_transport Documentation\n\nPath: `cookbook/91_tools/mcp/sse_transport/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/sse_transport/README.md)","tokens":300,"sizeBytes":214},{"name":"README.md","path":"cookbook/91_tools/mcp/streamable_http_transport/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/streamable_http_transport/README.md","title":"streamable_http_transport Documentation","category":"plugin-manifest","format":"markdown","content":"# streamable_http_transport Documentation\n\nPath: `cookbook/91_tools/mcp/streamable_http_transport/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/streamable_http_transport/README.md)","tokens":300,"sizeBytes":250},{"name":"README.md","path":"cookbook/91_tools/models/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/models/README.md","title":"models Documentation","category":"plugin-manifest","format":"markdown","content":"# models Documentation\n\nPath: `cookbook/91_tools/models/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/models/README.md)","tokens":300,"sizeBytes":185},{"name":"README.md","path":"cookbook/91_tools/other/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/other/README.md","title":"other Documentation","category":"plugin-manifest","format":"markdown","content":"# other Documentation\n\nPath: `cookbook/91_tools/other/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/other/README.md)","tokens":300,"sizeBytes":182},{"name":"README.md","path":"cookbook/91_tools/parallel/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/parallel/README.md","title":"parallel Documentation","category":"plugin-manifest","format":"markdown","content":"# parallel Documentation\n\nPath: `cookbook/91_tools/parallel/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/parallel/README.md)","tokens":300,"sizeBytes":191},{"name":"README.md","path":"cookbook/91_tools/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/README.md","title":"91_tools Documentation","category":"plugin-manifest","format":"markdown","content":"# Tools\n\nExamples for using and creating tools in Agno.\n\n## Tool Types\n\n| Type | Description |\n|:-----|:------------|\n| **Built-in Tools** | Pre-built toolkits (YFinance, DuckDuckGo, etc.) |\n| **Custom Tools** | Your own tools with @tool decorator |\n| **MCP Tools** | Model Context Protocol servers |\n| **Async Tools** | Async tool execution |\n\n## Custom Tools\n\n```python\nfrom agno.tools import tool\n\n@tool\ndef get_weather(city: str) -> str:\n    \"\"\"Get weather for a city.\"\"\"\n    return f\"Weather in {city}: Sunny, 72F\"\n\nagent = Agent(tools=[get_weather])\n```\n\n## MCP Tools\n\nModel Context Protocol allows connecting to external tool servers:\n\n```python\nfrom agno.tools.mcp import MCPTools\n\ntools = MCPTools(servers=[\"npx\", \"-y\", \"@anthropic/mcp-server-filesystem\"])\nagent = Agent(tools=[tools])\n```\n\n## Workspace speech\n\n`sixtydb_tools.py` uses 60db workspace voices. Set `SIXTYDB_API_KEY` and the\ncredentials for the agent's model. `SIXTYDB_VOICE_ID` is optional: without it,\nthe example calls `get_voices()` and selects the first voice in the quality\ncatalog. Set the voice ID explicitly to use another voice, including one from\n`get_voices(model=\"fast\")`. Voice IDs are specific to your workspace.\n\nRun `python cookbook/91_tools/sixtydb_tools.py` from the repository root. The\nexample writes WAV audio to `tmp/greeting.wav`, prints the output path, and\nreports when no audio is returned. Discovery and synthesis failures log\ndiagnostics without API keys or response bodies.\n\nThe toolkit requests mono LINEAR16 at 24 kHz and reads `audio_base64` from a\nJSON object, either at the top level or under `backendResponse`. It decodes\nthe base64 once and removes a WAV header when present before producing an\nAgno WAV audio artifact. Incompatible audio formats fail explicitly.\n\n## Folders\n\n- `finance/` - FinanceTools: one finance toolkit, swappable data providers (yfinance, financialdatasets.ai)\n- `mcp/` - MCP server examples\n- `tool_decorator/` - Custom tool patterns\n- `tool_hooks/` - Pre/post processing\n- `async/` - Async execution\n","isInternal":false,"tokens":510,"sizeBytes":2036},{"name":"README.md","path":"cookbook/91_tools/tool_decorator/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/tool_decorator/README.md","title":"tool_decorator Documentation","category":"plugin-manifest","format":"markdown","content":"# tool_decorator Documentation\n\nPath: `cookbook/91_tools/tool_decorator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/tool_decorator/README.md)","tokens":300,"sizeBytes":209},{"name":"README.md","path":"cookbook/91_tools/tool_hooks/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/tool_hooks/README.md","title":"tool_hooks Documentation","category":"plugin-manifest","format":"markdown","content":"# tool_hooks Documentation\n\nPath: `cookbook/91_tools/tool_hooks/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/tool_hooks/README.md)","tokens":300,"sizeBytes":197},{"name":"README.md","path":"cookbook/91_tools/workspace_tools/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/workspace_tools/README.md","title":"workspace_tools Documentation","category":"plugin-manifest","format":"markdown","content":"# workspace_tools Documentation\n\nPath: `cookbook/91_tools/workspace_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/workspace_tools/README.md)","tokens":300,"sizeBytes":212},{"name":"README.md","path":"cookbook/environments/_26_multi_step_tools/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/environments/_26_multi_step_tools/README.md","title":"_26_multi_step_tools Documentation","category":"plugin-manifest","format":"markdown","content":"# _26_multi_step_tools Documentation\n\nPath: `cookbook/environments/_26_multi_step_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/environments/_26_multi_step_tools/README.md)","tokens":300,"sizeBytes":235},{"name":"README.md","path":"cookbook/10_reasoning/agents/README.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/agents/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Agents\n\nReasoning agent examples, including built-in COT and DeepSeek reasoning-model comparisons.\n\n## Examples\n\n- `analyse_treaty_of_versailles.py`\n- `capture_reasoning_content_default_COT.py`\n- `cerebras_llama_default_COT.py`\n- `default_chain_of_thought.py`\n- `fibonacci.py`\n- `finance_agent.py`\n- `ibm_watsonx_default_COT.py`\n- `is_9_11_bigger_than_9_9.py`\n- `life_in_500000_years.py`\n- `logical_puzzle.py`\n- `mathematical_proof.py`\n- `mistral_reasoning_cot.py`\n- `python_101_curriculum.py`\n- `scientific_research.py`\n- `ship_of_theseus.py`\n- `strawberry.py`\n- `trolley_problem.py`\n","isInternal":false,"tokens":183,"sizeBytes":587},{"name":"TEST_LOG.md","path":"cookbook/10_reasoning/agents/TEST_LOG.md","rawUrl":"https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/agents/TEST_LOG.md","title":"Subagent: test_log","category":"subagent-persona","format":"markdown","content":"# Subagent: test_log\n\nPath: `cookbook/10_reasoning/agents/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/agents/TEST_LOG.md)","tokens":300,"sizeBytes":195}],"systemPromptSnippet":"<yakaai_skills repo=\"agno-agi/agno\">\n<!-- File: AGENTS.md (Tokens: ~1850 | Category: root-instruction) -->\n# Agno - Agent Instructions\n\nInstructions for AI coding agents (Claude Code, Codex, Cursor, etc.) working on this codebase.\n\n---\n\n## Repository Structure\n\n```\n.\n├── libs/agno/agno/          # Core framework code\n├── cookbook/                # Examples, patterns and test cases (organized by topic)\n├── scripts/                 # Development and build scripts\n├── specs/                   # Design documents (symlinked, private)\n├── docs/                    # Documentation (symlinked, private)\n└── .cursorrules             # Coding patterns and conventions\n```\n\n---\n\n## Conductor Notes\n\nWhen working in Conductor, you can use the `.context/` directory for scratch notes or agent-to-agent handoff artifacts. This directory is gitignored.\n\n---\n\n## Setting Up Symlinks\n\nThe `specs/` and `docs/` directories are symlinked from external locations. For a fresh clone or new workspace, create these symlinks:\n\n```bash\nln -s ~/code/specs specs\nln -s ~/code/docs docs\n```\n\nThese contain private design documents and documentation that are not checked into the repository.\n\n---\n\n## Virtual Environments\n\nThis project uses two virtual environments:\n\n| Environment | Purpose | Setup |\n|-------------|---------|-------|\n| `.venv/` | Development and cookbooks: demo dependencies, tests, formatting, validation | `./scripts/dev_setup.sh` |\n| `.venvs/demo/` | Dedicated demos: same dependencies, separate environment | `./scripts/demo_setup.sh` |\n\n**Use `.venv`** for development tasks (`pytest`, `./scripts/format.sh`, `./scripts/validate.sh`) and day-to-day cookbook work.\n\n**Use `.venvs/demo`** for running demos in a separate environment. The cookbook commands below use this environment and also work with `.venv/bin/python`.\n\n---\n\n## Testing Cookbooks\n\nApart from implementing features, your most important task will be to test and maintain the cookbooks in `cookbook/` directory.\n\n> See `cookbook/08_learning/` for the golden standard.\n\n### Quick Reference\n\n**Test Environment:**\n\n```bash\n# Virtual environment with all dependencies\n.venvs/demo/bin/python\n\n# Setup (if needed)\n./scripts/demo_setup.sh\n\n# Database (if needed)\n./cookbook/scripts/run_pgvector.sh\n```\n\n**Run a cookbook:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n### Expected Cookbook Structure\n\nEach cookbook folder should have the following files:\n- `README.md` — The README for the cookbook.\n- `TEST_LOG.md` — Test results log.\n\n### Testing Workflow\n\n**1. Before Testing**\n- Ensure the virtual environment exists (run `./scripts/demo_setup.sh` if needed)\n- Start any required services (e.g., `./cookbook/scripts/run_pgvector.sh`)\n\n**2. Running Tests**\n```bash\n# Run individual cookbook\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n\n# Tail output for long tests\n.venvs/demo/bin/python cookbook/<folder>/<file>.py 2>&1 | tail -100\n```\n\n**3. Updating TEST_LOG.md**\n\nAfter each test, update the cookbook's `TEST_LOG.md` with:\n- Test name and path\n- Status: PASS or FAIL\n- Brief description of what was tested\n- Any notable observations or issues\n\nFormat:\n```markdown\n### filename.py\n\n**Status:** PASS/FAIL\n\n**Description:** What the test does and what was observed.\n\n**Result:** Summary of success/failure.\n\n---\n```\n\n---\n\n## Code Locations\n\n| What | Where |\n|------|-------|\n| Core agent code | `libs/agno/agno/agent/` |\n| Teams | `libs/agno/agno/team/` |\n| Workflows | `libs/agno/agno/workflow/` |\n| Tools | `libs/agno/agno/tools/` |\n| Models | `libs/agno/agno/models/` |\n| Knowledge/RAG | `libs/agno/agno/knowledge/` |\n| Memory | `libs/agno/agno/memory/` |\n| Learning | `libs/agno/agno/learn/` |\n| Database adapters | `libs/agno/agno/db/` |\n| Vector databases | `libs/agno/agno/vectordb/` |\n| Tests | `libs/agno/tests/` |\n\n---\n\n## Coding Patterns\n\nSee `.cursorrules` for detailed patterns. Key rules:\n\n- **Never create agents in loops** — reuse them for performance\n- **Use output_schema** for structured responses\n- **PostgreSQL in production**, SQLite for dev only\n- **Start with single agent**, scale up only when needed\n- **Both sync and async** — all public methods need both variants\n\n---\n\n## Running Code\n\n**Running cookbooks:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n**Running tests:**\n```bash\nsource .venv/bin/activate\npytest libs/agno/tests/\n\n# Run a specific test file\npytest libs/agno/tests/unit/test_agent.py\n```\n\n---\n\n## When Implementing Features\n\n1. **Check for design doc** in `specs/` — if it exists, follow it\n2. **Look at existing patterns** — find similar code and follow conventions\n3. **Create a cookbook** — every pattern should have an example\n4. **Update implementation.md** — mark what's done\n\n---\n\n## Before Submitting Code\n\n**Always run these scripts before pushing code or creating a PR:**\n\n```bash\n# Activate the virtual environment first\nsource .venv/bin/activate\n\n# Format all code (ruff format)\n./scripts/format.sh\n\n# Validate all code (ruff check, mypy)\n./scripts/validate.sh\n```\n\nBoth scripts must pass with no errors before code review.\n\n**PR Title Format:**\n\nPR titles must follow one of these formats:\n- `type: description` — e.g., `feat: add workflow serialization`\n- `[type] description` — e.g., `[feat] add workflow serialization`\n- `type-kebab-case` — e.g., `feat-workflow-serialization`\n\nValid types: `feat`, `fix`, `cookbook`, `test`, `refactor`, `chore`, `style`, `revert`, `release`\n\n**PR Description:**\n\nAlways follow the PR template in `.github/pull_request_template.md`. Include:\n- Summary of changes\n- Type of change (bug fix, new feature, etc.)\n- Completed checklist items\n- Any additional context\n\n---\n\n## GitHub Operations\n\n**Updating PR descriptions:**\n\nThe `gh pr edit` command may fail with GraphQL errors related to classic projects. Use the API directly instead:\n\n```bash\n# Update PR body\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"<PR_BODY>\"\n\n# Or with a file\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"$(cat /path/to/body.md)\"\n```\n\n---\n\n## Don't\n\n- Don't implement features without checking for a design doc first\n- 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\n- Don't use f-strings for print lines where there are no variables\n- Don't use emojis in examples and print lines\n- Don't skip async variants of public methods\n- Don't push code without running `./scripts/format.sh` and `./scripts/validate.sh`\n- Don't submit a PR without a detailed PR description. Always follow the PR template provided in `.github/pull_request_template.md`.\n- Don't use `OpenAIChat` in cookbooks or examples — use `OpenAIResponses` instead\n- Don't use `gpt-4o` or `gpt-4o-mini` in cookbooks or examples — use `gpt-5.6-luna` instead\n\n---\n\n## CI: Automated Code Review\n\nEvery 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.\n\nWhen 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.\"\n\nAgno-specific checks to always verify:\n- Both sync and async variants exist for all new public methods\n- No agent creation inside loops (agents should be reused)\n- Coding patterns in this file are followed\n- No f-strings for print lines where there are no variables\n\n<!-- File: cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/code-review/references/style-guide.md)\n\n<!-- File: cookbook/02_agents/16_skills/sample_skills/code-review/SKILL.md (Tokens: ~287 | Category: anthropic-skill) -->\n---\nname: code-review\ndescription: Code review assistance with linting, style checking, and best practices\nlicense: Apache-2.0\nmetadata:\n  version: \"1.0.0\"\n  author: agno-team\n  tags: [\"quality\", \"review\", \"linting\"]\n---\n# Code Review Skill\n\nYou are a code review assistant. When reviewing code, follow these steps:\n\n## Review Process\n1. **Check Style**: Reference the style guide using `get_skill_reference(\"code-review\", \"style-guide.md\")`\n2. **Run Style Check**: Use `get_skill_script(\"code-review\", \"check_style.py\")` for automated style checking\n3. **Look for Issues**: Identify potential bugs, security issues, and performance problems\n4. **Provide Feedback**: Give structured feedback with severity levels\n\n## Feedback Format\n- **Critical**: Must fix before merge (security vulnerabilities, bugs that cause crashes)\n- **Important**: Should fix, but not blocking (performance issues, code smells)\n- **Suggestion**: Nice to have improvements (naming, documentation, minor refactoring)\n\n## Review Checklist\n- [ ] Code follows naming conventions\n- [ ] No hardcoded secrets or credentials\n- [ ] Error handling is appropriate\n- [ ] Functions are not too long (< 50 lines)\n- [ ] No obvious security vulnerabilities\n- [ ] Tests are included for new functionality\n\n<!-- File: cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/02_agents/16_skills/sample_skills/git-workflow/references/commit-types.md)\n\n<!-- File: cookbook/02_agents/16_skills/sample_skills/git-workflow/SKILL.md (Tokens: ~540 | Category: anthropic-skill) -->\n---\nname: git-workflow\ndescription: Git workflow guidance for commits, branches, and pull requests\nlicense: Apache-2.0\nmetadata:\n  version: \"1.0.0\"\n  author: agno-team\n  tags: [\"git\", \"version-control\", \"workflow\"]\n---\n# Git Workflow Skill\n\nYou are a Git workflow assistant. Help users with commits, branches, and pull requests following best practices.\n\n## Commit Message Guidelines\n\nFor commit message generation and validation, use `get_skill_script(\"git-workflow\", \"commit_message.py\")`.\n\n### Format\n```\n<type>(<scope>): <subject>\n\n<body>\n\n<footer>\n```\n\n### Types\n- **feat**: New feature\n- **fix**: Bug fix\n- **docs**: Documentation only\n- **style**: Formatting, no code change\n- **refactor**: Code change that neither fixes a bug nor adds a feature\n- **perf**: Performance improvement\n- **test**: Adding or updating tests\n- **chore**: Maintenance tasks\n\n### Examples\n```\nfeat(auth): add OAuth2 login support\n\nImplemented OAuth2 authentication flow with Google and GitHub providers.\nAdded token refresh mechanism and session management.\n\nCloses #123\n```\n\n```\nfix(api): handle null response from external service\n\nAdded null check before processing response data to prevent\nNullPointerException when external service returns empty response.\n\nFixes #456\n```\n\n## Branch Naming\n\n### Format\n```\n<type>/<ticket-id>-<short-description>\n```\n\n### Examples\n- `feature/AUTH-123-oauth-login`\n- `fix/BUG-456-null-pointer`\n- `chore/TECH-789-update-deps`\n\n## Pull Request Guidelines\n\n### Title\nFollow commit message format for the title.\n\n### Description Template\n```markdown\n## Summary\nBrief description of what this PR does.\n\n## Changes\n- Change 1\n- Change 2\n\n## Testing\nHow was this tested?\n\n## Checklist\n- [ ] Tests added/updated\n- [ ] Documentation updated\n- [ ] No breaking changes\n```\n\n## Common Commands\n\n### Starting Work\n```bash\ngit checkout main\ngit pull origin main\ngit checkout -b feature/TICKET-123-description\n```\n\n### Committing\n```bash\ngit add -p  # Interactive staging\ngit commit -m \"type(scope): description\"\n```\n\n### Updating Branch\n```bash\ngit fetch origin\ngit rebase origin/main\n```\n\n### Creating PR\n```bash\ngit push -u origin feature/TICKET-123-description\n# Then create PR on GitHub/GitLab\n```\n\n<!-- File: cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/04_workflows/06_advanced_concepts/tools/TEST_LOG.md)\n\n<!-- File: cookbook/05_agent_os/23_skills/sample_skills/system-info/SKILL.md (Tokens: ~272 | Category: anthropic-skill) -->\n---\nname: system-info\ndescription: Inspect the host operating system, Python runtime, and local files\nlicense: MIT\nmetadata:\n  version: \"1.0.0\"\n  author: agno\n---\n# System Info Skill\n\nUse this skill when the user asks about the host running the AgentOS process or\nneeds a directory inventory from that host.\n\n## Available scripts\n\n- `get_system_info.py` returns the hostname, operating system, architecture,\n  Python version and executable, processor, and current UTC time.\n- `list_directory.py` lists the direct children of a directory. It accepts one\n  optional path argument and defaults to the skill directory.\n\n## Execution\n\nLoad these instructions before choosing a script. Execute a script through the\nskill tool and inspect its structured result:\n\n```python\nget_skill_script(\n    skill_name=\"system-info\",\n    script_path=\"get_system_info.py\",\n    execute=True,\n)\n```\n\nTo list a directory:\n\n```python\nget_skill_script(\n    skill_name=\"system-info\",\n    script_path=\"list_directory.py\",\n    execute=True,\n    args=[\".\"],\n)\n```\n\nOnly use data parsed from `stdout` when `returncode` is `0`. If execution\nreturns a nonzero code, report `stderr` or the JSON error instead of inferring\nthe result.\n\n<!-- File: cookbook/10_reasoning/tools/TEST_LOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `cookbook/10_reasoning/tools/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/tools/TEST_LOG.md)\n\n<!-- File: cookbook/90_models/anthropic/skills/README.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Skills Skill\n\nPath: `cookbook/90_models/anthropic/skills/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/90_models/anthropic/skills/README.md)\n\n<!-- File: cookbook/90_models/anthropic/skills/TEST_LOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Skills Skill\n\nPath: `cookbook/90_models/anthropic/skills/TEST_LOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/90_models/anthropic/skills/TEST_LOG.md)\n\n<!-- File: cookbook/frameworks/antigravity/example_agent/skills/haiku/SKILL.md (Tokens: ~71 | Category: anthropic-skill) -->\n# Haiku house style\n\nWhen writing a haiku for this bot, follow these conventions:\n\n- 5-7-5 syllable structure, strict.\n- Prefer concrete imagery over abstraction.\n- Include at least one season-word (kigo) when natural.\n- No emojis, no preamble, no closing remarks — output ONLY the haiku itself.\n\n<!-- File: .cursorrules (Tokens: ~1089 | Category: cursor-rule) -->\nYou are an expert in Python, Agno framework, and AI agent development.\n\nCore Rules\n- NEVER create agents in loops - reuse them for performance\n- Always use output_schema for structured responses\n- PostgreSQL in production, SQLite for dev only\n- Start with single agent, scale up only when needed\n\nDocumentation:\n- Don't use f-strings for print lines where there are no variables to format.\n- Don't use emojis in examples and print lines\n\nBasic Agent (start here):\n```python\nfrom agno.agent import Agent\nfrom agno.models.openai import OpenAIResponses\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    instructions=\"You are a helpful assistant\",\n    markdown=True,\n)\nagent.print_response(\"Your query\", stream=True)\n```\n\nAgent with Tools:\n```python\nfrom agno.tools.websearch import WebSearchTools\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    tools=[WebSearchTools()],\n    instructions=\"Search the web for information\",\n)\n```\n\nCRITICAL: Agent Reuse Performance\n```python\n# WRONG - Recreates agent every time (significant overhead)\nfor query in queries:\n    agent = Agent(...)  # DON'T DO THIS\n    \n# CORRECT - Create once, reuse\nagent = Agent(...)\nfor query in queries:\n    agent.run(query)\n```\n\nWhen to Use Each Pattern\n\nSingle Agent (90% of use cases):\n- One clear task or domain\n- Can be solved with tools + instructions\n- Example: Search, analyze, generate content\n\nTeam (autonomous coordination):\n- Multiple specialized agents with different expertise\n- Agents decide who does what via LLM\n- Complex tasks requiring multiple perspectives\n- Example: Research + Analysis + Writing\n\nWorkflow (programmatic control):\n- Sequential steps with clear flow\n- Need conditional logic or branching\n- Full control over execution order\n- Example: Extract → Transform → Load pipelines\n\nTeam Pattern:\n```python\nfrom agno.team.team import Team\n\nweb_agent = Agent(\n    name=\"Researcher\",\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    tools=[WebSearchTools()],\n)\n\nwriter_agent = Agent(\n    name=\"Writer\",\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n)\n\nteam = Team(\n    members=[web_agent, writer_agent],\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    instructions=\"Research and write articles\",\n)\n```\n\nWorkflow Pattern:\n```python\nfrom agno.workflow.workflow import Workflow\nfrom agno.db.sqlite import SqliteDb\n\n# Define agents first (researcher, writer)\nasync def blog_workflow(session_state, topic: str):\n    # Step 1: Research\n    research = await researcher.arun(topic)\n    \n    # Step 2: Write\n    article = await writer.arun(research.content)\n    \n    return article\n\nworkflow = Workflow(\n    name=\"Blog Generator\",\n    steps=blog_workflow,\n    db=SqliteDb(db_file=\"tmp/workflow.db\"),\n)\n```\n\nKnowledge/RAG:\n```python\nfrom agno.knowledge.knowledge import Knowledge\nfrom agno.vectordb.lancedb import LanceDb, SearchType\nfrom agno.knowledge.embedder.openai import OpenAIEmbedder\n\nknowledge = Knowledge(\n    vector_db=LanceDb(\n        uri=\"tmp/lancedb\",\n        table_name=\"knowledge_base\",\n        search_type=SearchType.hybrid,\n        embedder=OpenAIEmbedder(id=\"text-embedding-3-small\"),\n    ),\n)\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    knowledge=knowledge,\n    search_knowledge=True,  # Critical: enables agentic RAG\n    instructions=\"Use knowledge base, cite sources\"\n)\n```\n\nChat History:\n```python\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    db=SqliteDb(db_file=\"tmp/agents.db\"),\n    user_id=\"user-123\",\n    add_history_to_context=True,  # Adds previous messages\n    num_history_runs=3,\n)\n```\n\nStructured Output:\n```python\nfrom pydantic import BaseModel\n\nclass Result(BaseModel):\n    summary: str\n    findings: list[str]\n\nagent = Agent(\n    model=OpenAIResponses(id=\"gpt-5.5\"),\n    output_schema=Result,\n)\nresult: Result = agent.run(query).content\n```\n\nAgentOS Production:\n```python\nfrom agno.os import AgentOS\nfrom agno.db.postgres import PostgresDb\n\nagent_os = AgentOS(\n    agents=[agent],\n    db=PostgresDb(db_url=os.getenv(\"DATABASE_URL\")),\n)\napp = agent_os.get_app()\n```\n\nCommon Mistakes\n- Creating agents in loops (massive performance hit)\n- Using Team when single agent would work\n- Forgetting search_knowledge=True with knowledge\n- Using SQLite in production\n- Not adding history when context matters\n- Missing output_schema validation\n\nProduction\n- Use PostgresDb not SqliteDb\n- Set show_tool_calls=False, debug_mode=False\n- Wrap agent.run() in try-except\n\nDocs: https://docs.agno.com\n\n<!-- File: CLAUDE.md (Tokens: ~1850 | Category: claude-rule) -->\n# Agno - Agent Instructions\n\nInstructions for AI coding agents (Claude Code, Codex, Cursor, etc.) working on this codebase.\n\n---\n\n## Repository Structure\n\n```\n.\n├── libs/agno/agno/          # Core framework code\n├── cookbook/                # Examples, patterns and test cases (organized by topic)\n├── scripts/                 # Development and build scripts\n├── specs/                   # Design documents (symlinked, private)\n├── docs/                    # Documentation (symlinked, private)\n└── .cursorrules             # Coding patterns and conventions\n```\n\n---\n\n## Conductor Notes\n\nWhen working in Conductor, you can use the `.context/` directory for scratch notes or agent-to-agent handoff artifacts. This directory is gitignored.\n\n---\n\n## Setting Up Symlinks\n\nThe `specs/` and `docs/` directories are symlinked from external locations. For a fresh clone or new workspace, create these symlinks:\n\n```bash\nln -s ~/code/specs specs\nln -s ~/code/docs docs\n```\n\nThese contain private design documents and documentation that are not checked into the repository.\n\n---\n\n## Virtual Environments\n\nThis project uses two virtual environments:\n\n| Environment | Purpose | Setup |\n|-------------|---------|-------|\n| `.venv/` | Development and cookbooks: demo dependencies, tests, formatting, validation | `./scripts/dev_setup.sh` |\n| `.venvs/demo/` | Dedicated demos: same dependencies, separate environment | `./scripts/demo_setup.sh` |\n\n**Use `.venv`** for development tasks (`pytest`, `./scripts/format.sh`, `./scripts/validate.sh`) and day-to-day cookbook work.\n\n**Use `.venvs/demo`** for running demos in a separate environment. The cookbook commands below use this environment and also work with `.venv/bin/python`.\n\n---\n\n## Testing Cookbooks\n\nApart from implementing features, your most important task will be to test and maintain the cookbooks in `cookbook/` directory.\n\n> See `cookbook/08_learning/` for the golden standard.\n\n### Quick Reference\n\n**Test Environment:**\n\n```bash\n# Virtual environment with all dependencies\n.venvs/demo/bin/python\n\n# Setup (if needed)\n./scripts/demo_setup.sh\n\n# Database (if needed)\n./cookbook/scripts/run_pgvector.sh\n```\n\n**Run a cookbook:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n### Expected Cookbook Structure\n\nEach cookbook folder should have the following files:\n- `README.md` — The README for the cookbook.\n- `TEST_LOG.md` — Test results log.\n\n### Testing Workflow\n\n**1. Before Testing**\n- Ensure the virtual environment exists (run `./scripts/demo_setup.sh` if needed)\n- Start any required services (e.g., `./cookbook/scripts/run_pgvector.sh`)\n\n**2. Running Tests**\n```bash\n# Run individual cookbook\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n\n# Tail output for long tests\n.venvs/demo/bin/python cookbook/<folder>/<file>.py 2>&1 | tail -100\n```\n\n**3. Updating TEST_LOG.md**\n\nAfter each test, update the cookbook's `TEST_LOG.md` with:\n- Test name and path\n- Status: PASS or FAIL\n- Brief description of what was tested\n- Any notable observations or issues\n\nFormat:\n```markdown\n### filename.py\n\n**Status:** PASS/FAIL\n\n**Description:** What the test does and what was observed.\n\n**Result:** Summary of success/failure.\n\n---\n```\n\n---\n\n## Code Locations\n\n| What | Where |\n|------|-------|\n| Core agent code | `libs/agno/agno/agent/` |\n| Teams | `libs/agno/agno/team/` |\n| Workflows | `libs/agno/agno/workflow/` |\n| Tools | `libs/agno/agno/tools/` |\n| Models | `libs/agno/agno/models/` |\n| Knowledge/RAG | `libs/agno/agno/knowledge/` |\n| Memory | `libs/agno/agno/memory/` |\n| Learning | `libs/agno/agno/learn/` |\n| Database adapters | `libs/agno/agno/db/` |\n| Vector databases | `libs/agno/agno/vectordb/` |\n| Tests | `libs/agno/tests/` |\n\n---\n\n## Coding Patterns\n\nSee `.cursorrules` for detailed patterns. Key rules:\n\n- **Never create agents in loops** — reuse them for performance\n- **Use output_schema** for structured responses\n- **PostgreSQL in production**, SQLite for dev only\n- **Start with single agent**, scale up only when needed\n- **Both sync and async** — all public methods need both variants\n\n---\n\n## Running Code\n\n**Running cookbooks:**\n```bash\n.venvs/demo/bin/python cookbook/<folder>/<file>.py\n```\n\n**Running tests:**\n```bash\nsource .venv/bin/activate\npytest libs/agno/tests/\n\n# Run a specific test file\npytest libs/agno/tests/unit/test_agent.py\n```\n\n---\n\n## When Implementing Features\n\n1. **Check for design doc** in `specs/` — if it exists, follow it\n2. **Look at existing patterns** — find similar code and follow conventions\n3. **Create a cookbook** — every pattern should have an example\n4. **Update implementation.md** — mark what's done\n\n---\n\n## Before Submitting Code\n\n**Always run these scripts before pushing code or creating a PR:**\n\n```bash\n# Activate the virtual environment first\nsource .venv/bin/activate\n\n# Format all code (ruff format)\n./scripts/format.sh\n\n# Validate all code (ruff check, mypy)\n./scripts/validate.sh\n```\n\nBoth scripts must pass with no errors before code review.\n\n**PR Title Format:**\n\nPR titles must follow one of these formats:\n- `type: description` — e.g., `feat: add workflow serialization`\n- `[type] description` — e.g., `[feat] add workflow serialization`\n- `type-kebab-case` — e.g., `feat-workflow-serialization`\n\nValid types: `feat`, `fix`, `cookbook`, `test`, `refactor`, `chore`, `style`, `revert`, `release`\n\n**PR Description:**\n\nAlways follow the PR template in `.github/pull_request_template.md`. Include:\n- Summary of changes\n- Type of change (bug fix, new feature, etc.)\n- Completed checklist items\n- Any additional context\n\n---\n\n## GitHub Operations\n\n**Updating PR descriptions:**\n\nThe `gh pr edit` command may fail with GraphQL errors related to classic projects. Use the API directly instead:\n\n```bash\n# Update PR body\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"<PR_BODY>\"\n\n# Or with a file\ngh api repos/agno-agi/agno/pulls/<PR_NUMBER> -X PATCH -f body=\"$(cat /path/to/body.md)\"\n```\n\n---\n\n## Don't\n\n- Don't implement features without checking for a design doc first\n- 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\n- Don't use f-strings for print lines where there are no variables\n- Don't use emojis in examples and print lines\n- Don't skip async variants of public methods\n- Don't push code without running `./scripts/format.sh` and `./scripts/validate.sh`\n- Don't submit a PR without a detailed PR description. Always follow the PR template provided in `.github/pull_request_template.md`.\n- Don't use `OpenAIChat` in cookbooks or examples — use `OpenAIResponses` instead\n- Don't use `gpt-4o` or `gpt-4o-mini` in cookbooks or examples — use `gpt-5.6-luna` instead\n\n---\n\n## CI: Automated Code Review\n\nEvery 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.\n\nWhen 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.\"\n\nAgno-specific checks to always verify:\n- Both sync and async variants exist for all new public methods\n- No agent creation inside loops (agents should be reused)\n- Coding patterns in this file are followed\n- No f-strings for print lines where there are no variables\n\n<!-- File: cookbook/02_agents/04_tools/README.md (Tokens: ~219 | Category: plugin-manifest) -->\n# 04_tools\n\nExamples for callable tool factories, tool choice, and tool call limits.\n\n## Files\n- `01_callable_tools.py` - Vary the toolset per user role using callable factories.\n- `02_session_state_tools.py` - Use session_state directly as a parameter with caching disabled.\n- `03_team_callable_members.py` - Assemble team members dynamically.\n- `04_tools_with_literal_type_param.py` - Use typing.Literal for tool parameters with predefined values.\n- `tool_call_limit.py` - Limit the number of tool calls per run.\n- `tool_choice.py` - Control which tool the agent selects.\n\n## Prerequisites\n- Load environment variables with `direnv allow` (including `OPENAI_API_KEY`).\n- Create the demo environment with `./scripts/demo_setup.sh`, then run cookbooks with `.venvs/demo/bin/python`.\n- Some examples require optional local services (for example pgvector) or provider-specific API keys.\n\n## Run\n- `.venvs/demo/bin/python cookbook/02_agents/04_tools/<file>.py`\n\n<!-- File: cookbook/03_teams/03_tools/README.md (Tokens: ~165 | Category: plugin-manifest) -->\n# tools\n\nExamples for team workflows in tools.\n\n## Prerequisites\n\n- Load environment variables (for example, OPENAI_API_KEY) via direnv allow.\n- Use .venvs/demo/bin/python to run cookbook examples.\n- Some examples require additional services (for example PostgreSQL, LanceDB, or Infinity server) as noted in file docstrings.\n\n## Files\n\n- async_toolkit_context.py - Demonstrates async toolkit tools appearing in team system message context.\n- async_tools.py - Demonstrates async tools.\n- custom_tools.py - Demonstrates custom tools.\n- tool_call_limit.py - Demonstrates limiting total tool calls per Team run.\n- tool_choice.py - Demonstrates forcing specific tool usage via tool_choice.\n- member_tool_hooks.py - Demonstrates member tool hooks.\n- tool_hooks.py - Demonstrates tool hooks.\n\n<!-- File: cookbook/04_workflows/06_advanced_concepts/tools/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# tools Documentation\n\nPath: `cookbook/04_workflows/06_advanced_concepts/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/04_workflows/06_advanced_concepts/tools/README.md)\n\n<!-- File: cookbook/05_agent_os/25_agentos_tools/README.md (Tokens: ~409 | Category: plugin-manifest) -->\n# AgentOS Tools\n\nAgentOSTools gives an agent a read-only ops view of the AgentOS it runs on:\nusage, latency, failures, tool statistics, schedules, eval history, pending\napprovals and runtime-built components. The toolkit takes the database, never\nthe AgentOS instance — agents are constructed before the OS, so every tool\nreads only from `db`.\n\n## Files\n\n| File | What it teaches |\n|---|---|\n| `platform_ops_agent.py` | Generate traced activity with a worker agent, then answer platform questions with an ops agent using AgentOSTools. |\n\n## Prerequisites\n\n```bash\n./scripts/demo_setup.sh\nexport OPENAI_API_KEY=...\n```\n\n## Run platform_ops_agent.py\n\n```bash\n.venvs/demo/bin/python cookbook/05_agent_os/25_agentos_tools/platform_ops_agent.py\n```\n\nThe demo runs the worker agent twice, verifies the activity is visible through\nthe toolkit (run counts, tool statistics, session metrics), then asks the ops\nagent for a platform summary.\n\n## Notes\n\n- No tool mutates platform state; schedule, approval and component management\n  are deliberately not exposed. The one write is the metrics rollup refresh\n  inside `get_platform_metrics` (derived data, no user content). The tools read\n  the database directly, so AgentOS endpoint scopes do not apply — expose the\n  ops agent to operators, and trim surfaces with the enable flags for wider\n  audiences.\n- Sensitive payloads are never returned: span attributes, approval tool\n  arguments and schedule run input/output can hold conversation content and are\n  excluded from every tool result.\n- Per-surface flags (`metrics`, `traces`, `schedules`, `evals`, `components`,\n  `approvals`) control which tools a deployment exposes.\n- On SQLite, `p95_duration_ms` is reported as null (no SQL percentile support);\n  PostgreSQL reports real percentiles. The payload says so when it applies.\n\n<!-- File: cookbook/10_reasoning/tools/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# tools Documentation\n\nPath: `cookbook/10_reasoning/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/10_reasoning/tools/README.md)\n\n<!-- File: cookbook/91_tools/advisor_tools/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# advisor_tools Documentation\n\nPath: `cookbook/91_tools/advisor_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/advisor_tools/README.md)\n\n<!-- File: cookbook/91_tools/coding_tools/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# coding_tools Documentation\n\nPath: `cookbook/91_tools/coding_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/coding_tools/README.md)\n\n<!-- File: cookbook/91_tools/docling_tools/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# docling_tools Documentation\n\nPath: `cookbook/91_tools/docling_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/docling_tools/README.md)\n\n<!-- File: cookbook/91_tools/exceptions/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# exceptions Documentation\n\nPath: `cookbook/91_tools/exceptions/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/exceptions/README.md)\n\n<!-- File: cookbook/91_tools/google/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# google Documentation\n\nPath: `cookbook/91_tools/google/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/google/README.md)\n\n<!-- File: cookbook/91_tools/mcp/dynamic_headers/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# dynamic_headers Documentation\n\nPath: `cookbook/91_tools/mcp/dynamic_headers/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/dynamic_headers/README.md)\n\n<!-- File: cookbook/91_tools/mcp/local_server/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# local_server Documentation\n\nPath: `cookbook/91_tools/mcp/local_server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/local_server/README.md)\n\n<!-- File: cookbook/91_tools/mcp/mcp_toolbox_demo/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# mcp_toolbox_demo Documentation\n\nPath: `cookbook/91_tools/mcp/mcp_toolbox_demo/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/mcp_toolbox_demo/README.md)\n\n<!-- File: cookbook/91_tools/mcp/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# mcp Documentation\n\nPath: `cookbook/91_tools/mcp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/README.md)\n\n<!-- File: cookbook/91_tools/mcp/sse_transport/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# sse_transport Documentation\n\nPath: `cookbook/91_tools/mcp/sse_transport/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/sse_transport/README.md)\n\n<!-- File: cookbook/91_tools/mcp/streamable_http_transport/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# streamable_http_transport Documentation\n\nPath: `cookbook/91_tools/mcp/streamable_http_transport/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/mcp/streamable_http_transport/README.md)\n\n<!-- File: cookbook/91_tools/models/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# models Documentation\n\nPath: `cookbook/91_tools/models/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/agno-agi/agno/HEAD/cookbook/91_tools/models/README.md)\n\n<!-- ... +9 more modular skills available via /api/skills/agno-agi/agno?path={path} -->\n</yakaai_skills>"}