-
Notifications
You must be signed in to change notification settings - Fork 5
Add Agno Research Agent converted to Agentuity #45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Convert https://docs.agno.com/examples/agents/research-agent to Agentuity - Preserve original Agno framework code in research_agent.py - Add Agentuity wrapper following established patterns - Include comprehensive configuration and documentation - Support for DuckDuckGo search and Newspaper4k content analysis - Professional NYT-style investigative reporting capabilities Co-Authored-By: Dhilan Fye <dfye@agentuity.com>
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
WalkthroughAdds a new Agno-based Research Agent project adapted for Agentuity: agent implementation and preconfigured agent, server entrypoint, packaging and dependency files, Agentuity config and metadata, docs, and repository housekeeping (editor and gitignore). Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant Client
participant Server
participant Handler as ResearchAgent.run
participant Agno as research_agent
participant DDG as DuckDuckGoTools
participant N4K as Newspaper4kTools
User->>Client: submit topic
Client->>Server: HTTP request (topic)
Server->>Handler: invoke run(request, response, context)
Handler->>Handler: parse input, log
Handler->>Agno: run(prompt) [async executor]
par sourcing
Agno->>DDG: search(query)
DDG-->>Agno: search results
Agno->>N4K: fetch/extract(urls)
N4K-->>Agno: article content
end
Agno-->>Handler: generated markdown report
Handler->>Handler: normalize & validate output
alt valid output
Handler-->>Server: response.text(report)
Server-->>Client: 200 OK (markdown)
else empty/error
Handler-->>Server: error/warning message
Server-->>Client: 200/500 with message
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Suggested reviewers
Pre-merge checks (3 passed)✅ Passed checks (3 passed)
Poem
Tip 👮 Agentic pre-merge checks are now available in preview!Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.
Please see the documentation for more information. Example: reviews:
pre_merge_checks:
custom_checks:
- name: "Undocumented Breaking Changes"
mode: "warning"
instructions: |
Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).Please share your feedback with us on this Discord post. ✨ Finishing Touches
🧪 Generate unit tests
Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (12)
frameworks/agno/research-agent/requirements.txt (1)
1-4: Optional: pin or lock for reproducibility.Unpinned deps (duckduckgo-search/newspaper4k) change behavior over time. Commit a uv.lock or pin major/minor versions to avoid drift.
frameworks/agno/research-agent/.gitignore (1)
131-132: Consider committing uv.lock.You’re ignoring uv.lock; examples benefit from deterministic installs. If acceptable, stop ignoring it.
-# UV -uv.lock +# UV +# uv.lock # consider committing for reproducible examplesframeworks/agno/research-agent/pyproject.toml (1)
1-5: Optional: add basic project metadata.Add license and readme fields to improve packaging clarity for the example.
[project] name = "agno-research-agent" version = "0.1.0" description = "Agno Research Agent wrapped for Agentuity platform" +readme = "README.md" +license = { text = "MIT" } requires-python = ">=3.10, <3.13"frameworks/agno/research-agent/agents/ResearchAgent/research_agent.py (3)
1-1: Make model configurable via env; keep gpt-4o as default.Eases testing and future upgrades without code changes.
-from textwrap import dedent +import os +from textwrap import dedent @@ - model=OpenAIChat(id="gpt-4o"), + model=OpenAIChat(id=os.getenv("AGENT_MODEL", "gpt-4o")),Also applies to: 10-10
11-12: Optional: tune tool limits/timeouts.If DuckDuckGoTools/Newspaper4kTools expose params (e.g., max_results, request timeout), set sane defaults to bound latency/cost.
52-90: Template clarity: remove braces to avoid literal rendering confusion.If the framework doesn’t substitute placeholders, some users may think {Compelling Headline} is auto-filled. Consider clarifying or converting to bullet hints.
-# {Compelling Headline} 📰 +# Compelling Headline 📰 @@ -## Executive Summary -{Concise overview of key findings and significance} +## Executive Summary +- Concise overview of key findings and significanceframeworks/agno/research-agent/server.py (1)
1-1: Shebang without execute bit (EXE001).Either make the file executable in git or drop the shebang to silence linters. Keeping it is fine if you intend
./server.py.Apply if you prefer removing it:
-#!/usr/bin/env python3frameworks/agno/research-agent/README.md (2)
5-8: Add alt text to the deploy button image (MD045).Minor accessibility fix.
- <a target="_blank" href="https://app.agentuity.com/deploy" alt="Agentuity"> - <img src="https://app.agentuity.com/img/deploy.svg" /> + <a target="_blank" href="https://app.agentuity.com/deploy" alt="Agentuity"> + <img src="https://app.agentuity.com/img/deploy.svg" alt="Deploy to Agentuity" /> </a>
19-19: Avoid bare URL (MD034).Use a markdown link to satisfy the linter and improve readability.
-**Original Agno Agent**: https://docs.agno.com/examples/agents/research-agent +**Original Agno Agent**: [Agno Research Agent](https://docs.agno.com/examples/agents/research-agent)frameworks/agno/research-agent/agents/ResearchAgent/agent.py (3)
20-22: Trim and validate empty prompts early.Prevents pointless calls and clearer UX on blank requests.
- prompt = await request.data.text() - context.logger.info(f"[ResearchAgent] Received research topic: {prompt!r}") + prompt = (await request.data.text()).strip() + if not prompt: + return response.text("⚠️ Please provide a research topic (a sentence or two works best).") + context.logger.info(f"[ResearchAgent] Received research topic: {prompt!r}")
23-25: Avoid lambda in run_in_executor and add a bounded timeout.Passing the function directly avoids an extra closure; a timeout prevents indefinite blocking if tools hang.
- loop = asyncio.get_running_loop() - raw_result = await loop.run_in_executor(None, lambda: research_agent.run(prompt)) + loop = asyncio.get_running_loop() + raw_result = await asyncio.wait_for( + loop.run_in_executor(None, research_agent.run, prompt), + timeout=180, + )
26-33: Slightly simplify normalization with fallbacks.Functionally identical, a bit tighter and avoids double attribute lookups.
- if isinstance(raw_result, str): - output = raw_result - elif hasattr(raw_result, "content"): - output = raw_result.content - elif hasattr(raw_result, "reply"): - output = raw_result.reply - else: - output = str(raw_result) + output = ( + raw_result + if isinstance(raw_result, str) + else getattr(raw_result, "content", None) + or getattr(raw_result, "reply", None) + or str(raw_result) + )
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (9)
frameworks/agno/research-agent/.editorconfig(1 hunks)frameworks/agno/research-agent/.gitignore(1 hunks)frameworks/agno/research-agent/README.md(1 hunks)frameworks/agno/research-agent/agents/ResearchAgent/agent.py(1 hunks)frameworks/agno/research-agent/agents/ResearchAgent/research_agent.py(1 hunks)frameworks/agno/research-agent/agentuity.yaml(1 hunks)frameworks/agno/research-agent/pyproject.toml(1 hunks)frameworks/agno/research-agent/requirements.txt(1 hunks)frameworks/agno/research-agent/server.py(1 hunks)
🧰 Additional context used
🧠 Learnings (34)
📓 Common learnings
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:43.688Z
Learning: Agent files should import types such as AgentRequest, AgentResponse, and AgentContext from the `agentuity` package to ensure compatibility and leverage provided helper methods.
Learnt from: jhaynie
PR: agentuity/examples#12
File: frameworks/agno/from-agno/pyproject.toml:1-9
Timestamp: 2025-05-28T21:02:10.403Z
Learning: The `agentuity` package is a Python SDK developed by Agentuity Inc., available on PyPI at https://pypi.org/project/agentuity/ with the GitHub repository at https://github.com/agentuity/sdk-py. This is a different package from `agentUniverse` and should not be confused with other agent-related packages.
Learnt from: jhaynie
PR: agentuity/examples#12
File: frameworks/agno/from-agno/pyproject.toml:1-9
Timestamp: 2025-05-28T21:02:10.403Z
Learning: The `agentuity` package is a Python SDK developed by Agentuity Inc., available on PyPI at https://pypi.org/project/agentuity/ with the GitHub repository at https://github.com/agentuity/sdk-py. This is a different package from `agentUniverse` and should not be confused with other agent-related packages.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:13.875Z
Learning: In Agentuity AI Agent Python files (agents/**/*.py), the main entry point should be an async function named `run` that accepts parameters of types AgentRequest, AgentResponse, and AgentContext.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/agno/from_agno/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-07-17T13:41:16.151Z
Learning: Applies to frameworks/agno/from_agno/agents/**/*.py : Import types from `agentuity`
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:16.519Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:15.333Z
Learning: When writing Python AI Agent files for Agentuity in the 'agents/' directory, always define an async function named 'run' as the entry point.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/llamaindex/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:53.981Z
Learning: When writing Python AI Agent files for the Agentuity platform (in files matching agents/**/*.py), always define an async function named `run` as the entry point.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:15.333Z
Learning: Agentuity Agent files should import types such as AgentRequest, AgentResponse, and AgentContext from the 'agentuity' package to ensure compatibility and access to helper methods.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:43.688Z
Learning: When writing Agentuity AI Agents in Python, always define an async function named `run` that serves as the entry point for the agent.
📚 Learning: 2025-07-17T13:41:01.314Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/agno/from_agno/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-07-17T13:41:01.314Z
Learning: Applies to frameworks/agno/from_agno/**/agentuity.yaml : Do not suggest edits to the Agentuity AI Configuration file (agentuity.yaml)
Applied to files:
frameworks/agno/research-agent/.editorconfigframeworks/agno/research-agent/.gitignoreframeworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-07-17T13:39:58.483Z
Learnt from: CR
PR: agentuity/examples#0
File: agents/deep-research-js/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-07-17T13:39:58.483Z
Learning: Applies to agents/deep-research-js/**/agentuity.yaml : Do not suggest edits to the agentuity.yaml configuration file
Applied to files:
frameworks/agno/research-agent/.editorconfigframeworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:16:16.519Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:16.519Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Applied to files:
frameworks/agno/research-agent/.editorconfigframeworks/agno/research-agent/agentuity.yamlframeworks/agno/research-agent/README.md
📚 Learning: 2025-05-28T21:02:10.403Z
Learnt from: jhaynie
PR: agentuity/examples#12
File: frameworks/agno/from-agno/pyproject.toml:1-9
Timestamp: 2025-05-28T21:02:10.403Z
Learning: The `agentuity` Python SDK has versions 0.0.87 and higher available on PyPI, and dependency specifications like `agentuity>=0.0.87` in pyproject.toml files are valid and correct for projects using this SDK.
Applied to files:
frameworks/agno/research-agent/pyproject.toml
📚 Learning: 2025-06-23T17:16:33.550Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:33.550Z
Learning: The agentuity.yaml file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits during code review.
Applied to files:
frameworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:13:52.368Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/socialagent/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:52.368Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Applied to files:
frameworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:14:18.092Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:14:18.092Z
Learning: The file 'agentuity.yaml' is used to configure the Agentuity AI Agent project and should not be edited or suggested for edits.
Applied to files:
frameworks/agno/research-agent/agentuity.yamlframeworks/agno/research-agent/README.md
📚 Learning: 2025-06-23T17:15:46.735Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:15:46.735Z
Learning: The Agentuity configuration file (agentuity.yaml) is used to configure the AI Agent project and should not be edited or suggested for edits.
Applied to files:
frameworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:15:30.804Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/grokLiveSearch/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:15:30.804Z
Learning: In the context of Agentuity AI projects, the 'agentuity.yaml' file is a configuration file that should not be edited or suggested for edits during code review.
Applied to files:
frameworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:16:02.063Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai-typescript/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:02.063Z
Learning: The Agentuity AI Configuration file (agentuity.yaml) is used to configure the AI Agent project and should not be edited or suggested for edits.
Applied to files:
frameworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:17:12.992Z
Learnt from: CR
PR: agentuity/examples#0
File: patterns/llmAsJury/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:17:12.992Z
Learning: In the context of Agentuity AI projects, the agentuity.yaml file is a configuration file that should not be edited or suggested for edits during code review.
Applied to files:
frameworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-07-17T13:39:39.665Z
Learnt from: CR
PR: agentuity/examples#0
File: agents/composio/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-07-17T13:39:39.665Z
Learning: Applies to agents/composio/**/agentuity.yaml : Do NOT suggest edits to the Agentuity AI Configuration file (agentuity.yaml)
Applied to files:
frameworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:16:13.875Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:13.875Z
Learning: In Agentuity AI Agent Python files (agents/**/*.py), the main entry point should be an async function named `run` that accepts parameters of types AgentRequest, AgentResponse, and AgentContext.
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-06-23T17:14:53.981Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/llamaindex/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:53.981Z
Learning: When writing Python AI Agent files for the Agentuity platform (in files matching agents/**/*.py), always define an async function named `run` as the entry point.
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-07-17T13:40:30.298Z
Learnt from: CR
PR: agentuity/examples#0
File: agents/tavily_agent/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-07-17T13:40:30.298Z
Learning: Applies to agents/tavily_agent/agents/**/*.py : The main handler function for an agent should be defined as an async function named 'run' with parameters (request: AgentRequest, response: AgentResponse, context: AgentContext)
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-06-23T17:15:43.688Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:43.688Z
Learning: When writing Agentuity AI Agents in Python, always define an async function named `run` that serves as the entry point for the agent.
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-06-23T17:14:15.333Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:15.333Z
Learning: When writing Python AI Agent files for Agentuity in the 'agents/' directory, always define an async function named 'run' as the entry point.
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-06-23T17:16:30.899Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:30.899Z
Learning: In Python agent files under 'agents/**/*.py', always define an async function named 'run' as the entry point for the agent.
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-06-23T17:15:53.658Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:15:53.658Z
Learning: In the Agentuity Python SDK, the main entry point for an agent is an async function named 'run' that takes three arguments: request (AgentRequest), response (AgentResponse), and context (AgentContext).
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-07-17T13:40:58.033Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/agno/from_agno/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-07-17T13:40:58.033Z
Learning: Applies to frameworks/agno/from_agno/agents/**/*.py : The file should define an async function named `run`
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-07-17T13:41:39.323Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/socialagent/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-07-17T13:41:39.323Z
Learning: Applies to frameworks/crewai/socialagent/agents/**/*.py : The file should define an async function named `run`
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-06-23T17:14:03.437Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/socialagent/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:14:03.437Z
Learning: In the Agentuity Python SDK, the main agent handler should be an async function named 'run' that accepts 'request: AgentRequest', 'response: AgentResponse', and 'context: AgentContext' as arguments.
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-06-23T17:16:43.214Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:16:43.214Z
Learning: In the Agentuity Python SDK, the main handler for an agent is an async function named 'run' that takes 'request', 'response', and 'context' as parameters.
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-06-23T17:15:39.390Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/grokLiveSearch/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:15:39.390Z
Learning: In the Agentuity Python SDK, the main agent handler should be an async function named 'run' that accepts 'request: AgentRequest', 'response: AgentResponse', and 'context: AgentContext' as parameters.
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-06-23T17:16:25.368Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:16:25.368Z
Learning: In the Agentuity Python SDK, the main handler function for an agent should be defined as an async function named 'run' with the signature: async def run(request: AgentRequest, response: AgentResponse, context: AgentContext) -> Any.
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-06-23T17:15:05.904Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/llamaindex/basic/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-06-23T17:15:05.904Z
Learning: In the Agentuity Python SDK, the main agent handler function should be defined as an async function named 'run' that accepts 'request' (AgentRequest), 'response' (AgentResponse), and 'context' (AgentContext) as parameters.
Applied to files:
frameworks/agno/research-agent/agents/ResearchAgent/agent.py
📚 Learning: 2025-05-28T21:02:10.403Z
Learnt from: jhaynie
PR: agentuity/examples#12
File: frameworks/agno/from-agno/pyproject.toml:1-9
Timestamp: 2025-05-28T21:02:10.403Z
Learning: The `agentuity` package is a Python SDK developed by Agentuity Inc., available on PyPI at https://pypi.org/project/agentuity/ with the GitHub repository at https://github.com/agentuity/sdk-py. This is a different package from `agentUniverse` and should not be confused with other agent-related packages.
Applied to files:
frameworks/agno/research-agent/README.md
📚 Learning: 2025-06-23T17:15:27.163Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/grokLiveSearch/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:27.163Z
Learning: When developing Agentuity AI Agents in Python, prefer importing types such as AgentRequest, AgentResponse, and AgentContext from the `agentuity` package to ensure compatibility and leverage built-in helper methods.
Applied to files:
frameworks/agno/research-agent/README.md
📚 Learning: 2025-07-17T13:41:16.151Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/agno/from_agno/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-07-17T13:41:16.151Z
Learning: Applies to frameworks/agno/from_agno/agents/**/*.py : Import types from `agentuity`
Applied to files:
frameworks/agno/research-agent/README.md
📚 Learning: 2025-06-23T17:16:30.899Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:30.899Z
Learning: When writing agent code in 'agents/**/*.py', prefer importing types such as AgentRequest, AgentResponse, and AgentContext from the 'agentuity' package to ensure compatibility and consistency.
Applied to files:
frameworks/agno/research-agent/README.md
📚 Learning: 2025-06-23T17:15:43.688Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:43.688Z
Learning: Agent files should import types such as AgentRequest, AgentResponse, and AgentContext from the `agentuity` package to ensure compatibility and leverage provided helper methods.
Applied to files:
frameworks/agno/research-agent/README.md
📚 Learning: 2025-06-23T17:16:13.875Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:16:13.875Z
Learning: When writing Agentuity AI Agents in Python, always use type hints and adhere to Python best practices for code quality and maintainability.
Applied to files:
frameworks/agno/research-agent/README.md
📚 Learning: 2025-07-17T13:41:34.015Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/basic/.cursor/rules/sdk.mdc:0-0
Timestamp: 2025-07-17T13:41:34.015Z
Learning: Applies to frameworks/crewai/basic/agents/**/*.py : Import types from `agentuity`
Applied to files:
frameworks/agno/research-agent/README.md
🪛 Ruff (0.12.2)
frameworks/agno/research-agent/server.py
1-1: Shebang is present but file is not executable
(EXE001)
9-9: Possible binding to all interfaces
(S104)
🪛 LanguageTool
frameworks/agno/research-agent/README.md
[grammar] ~23-~23: There might be a mistake here.
Context: ...kDuckGo for comprehensive topic research - Content Analysis: Leverages Newspaper4...
(QB_NEW_EN)
[grammar] ~24-~24: There might be a mistake here.
Context: ...er4k for article extraction and analysis - Professional Reporting: Generates NYT-...
(QB_NEW_EN)
[grammar] ~25-~25: There might be a mistake here.
Context: ...nerates NYT-style investigative articles - Multi-source Verification: Cross-refer...
(QB_NEW_EN)
[grammar] ~26-~26: There might be a mistake here.
Context: ...references facts across multiple sources - Structured Output: Delivers well-forma...
(QB_NEW_EN)
[grammar] ~48-~48: There might be a mistake here.
Context: ...*: Core framework for the research agent - DuckDuckGo Search: Web search capabili...
(QB_NEW_EN)
[grammar] ~49-~49: There might be a mistake here.
Context: ...DuckGo Search**: Web search capabilities - Newspaper4k: Content extraction and an...
(QB_NEW_EN)
[grammar] ~50-~50: There might be a mistake here.
Context: ...per4k**: Content extraction and analysis - Agentuity SDK: Platform integration #...
(QB_NEW_EN)
[grammar] ~53-~53: There might be a mistake here.
Context: ...latform integration ## 📋 Prerequisites Before you begin, ensure you have the fo...
(QB_NEW_EN)
[grammar] ~57-~57: There might be a mistake here.
Context: ...d: - Python: Version 3.10 or higher - UV: Version 0.5.25 or higher ([Documen...
(QB_NEW_EN)
[grammar] ~60-~60: There might be a mistake here.
Context: ...s.astral.sh/uv/)) ## 🚀 Getting Started 1. Install dependencies: ```bash uv s...
(QB_NEW_EN)
[grammar] ~82-~82: There might be a mistake here.
Context: ...tuity deploy ``` ## 📖 Documentation For comprehensive documentation on the A...
(QB_NEW_EN)
[grammar] ~84-~84: There might be a mistake here.
Context: ...tion on the Agentuity Python SDK, visit: [https://agentuity.dev/SDKs/python](http...
(QB_NEW_EN)
[grammar] ~87-~87: There might be a mistake here.
Context: ....dev/SDKs/python) ## 🆘 Troubleshooting If you encounter any issues: 1. Check t...
(QB_NEW_EN)
[grammar] ~95-~95: There might be a mistake here.
Context: ...he Agentuity support team ## 📝 License This project is licensed under the terms...
(QB_NEW_EN)
🪛 markdownlint-cli2 (0.17.2)
frameworks/agno/research-agent/README.md
6-6: Images should have alternate text (alt text)
(MD045, no-alt-text)
19-19: Bare URL used
(MD034, no-bare-urls)
🔇 Additional comments (7)
frameworks/agno/research-agent/pyproject.toml (1)
6-12: Dependencies and Python version constraint are correct. Theagentuity>=0.0.90floor matches the agno example in frameworks/agno/from_agno/pyproject.toml, andrequires-python = ">=3.10, <3.13"explicitly includes 3.12, so all listed dependencies should install successfully on Python 3.12.frameworks/agno/research-agent/.editorconfig (1)
1-19: LGTM — consistent, sensible defaults.frameworks/agno/research-agent/agents/ResearchAgent/research_agent.py (1)
8-12: Use a factory to instantiateAgentper request instead of a globalGlobal
research_agentcan retain internal state (e.g. memory) and isn’t thread-safe under concurrent executor calls. Replace the top-level instantiation with a per-request factory and retain a module-level instance only for back-compat:from textwrap import dedent -from agno.agent import Agent +from agno.agent import Agent -# Initialize the research agent with advanced journalistic capabilities -research_agent = Agent( +def build_research_agent() -> Agent: + return Agent( model=OpenAIChat(id="gpt-4o"), tools=[DuckDuckGoTools(), Newspaper4kTools()], description=dedent("""\ …journalistic instructions… """), show_tool_calls=True, add_datetime_to_instructions=True, ) + +# Back-compat default instance +research_agent = build_research_agent()Update any wrappers to call
build_research_agent()per request rather than importing the module-levelresearch_agent.frameworks/agno/research-agent/server.py (2)
6-6: ASGI app bootstrap looks correct.
app = create_server()aligns with Agentuity’s server factory and should auto-discover agents per config.
8-9: Binding to 0.0.0.0 (S104).Acceptable for dev/containers. If you run this directly on a developer laptop, consider
host="127.0.0.1". No change required if this is containerized.frameworks/agno/research-agent/agentuity.yaml (1)
17-41: Config aligns with code paths and dev port.Dev port 3500 matches
uvicorn.run(..., port=3500)and bundler points atagents/. Not suggesting edits per repo rules.Also applies to: 60-62
frameworks/agno/research-agent/agents/ResearchAgent/agent.py (1)
21-21: Consider prompt logging policy.You log user-supplied content verbatim. If PII or sensitive topics are possible, switch to
debugor redact.
| agno | ||
| duckduckgo-search | ||
| newspaper4k | ||
| lxml-html-clean |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add agentuity to prevent pip -r footgun; keep manifests in sync.
If someone installs via requirements.txt, the server won’t have agentuity. Either remove this file and rely on pyproject/uv only, or add agentuity here.
Apply:
agno
duckduckgo-search
newspaper4k
lxml-html-clean
+agentuity>=0.0.90📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| agno | |
| duckduckgo-search | |
| newspaper4k | |
| lxml-html-clean | |
| # frameworks/agno/research-agent/requirements.txt | |
| agno | |
| duckduckgo-search | |
| newspaper4k | |
| lxml-html-clean | |
| agentuity>=0.0.90 |
🤖 Prompt for AI Agents
In frameworks/agno/research-agent/requirements.txt around lines 1 to 4, the
requirements file is missing the agentuity dependency which causes installs from
requirements.txt to omit agentuity; either add a line "agentuity" to this file
(keeping it version-free or matching the version in pyproject/uv) so manifests
stay in sync, or remove the requirements.txt entirely and ensure installation is
performed via pyproject/uv only.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (1)
frameworks/agno/research-agent/server.py (1)
6-36: Unify entrypoints and make host/port configurableTwo separate
__main__blocks are surprising; fold preflight + autostart into a helper and run uvicorn once. Also read host/port from env to satisfy S104 and allow PORT overrides.@@ -if __name__ == "__main__": - # Check if AGENTUITY_API_KEY is set - if not os.environ.get("AGENTUITY_API_KEY") and not os.environ.get( - "AGENTUITY_SDK_KEY" - ): - print( - "\033[31m[ERROR] AGENTUITY_API_KEY or AGENTUITY_SDK_KEY is not set. This should have been set automatically by the Agentuity CLI or picked up from the .env file.\033[0m" - ) - if os.environ.get("_", "").endswith("uv") and os.path.exists(".env"): - print( - "\033[31m[ERROR] Re-run the command with `uv run --env-file .env server.py`\033[0m" - ) - sys.exit(1) - - # Check if AGENTUITY_URL is set - if not os.environ.get("AGENTUITY_URL"): - print( - "\033[31m[WARN] You are running this agent outside of the Agentuity environment. Any automatic Agentuity features will be disabled.\033[0m" - ) - print( - "\033[31m[WARN] Recommend running `agentuity dev` to run your project locally instead of `python script`.\033[0m" - ) - - # Setup logging after environment checks - logging.basicConfig( - stream=sys.stdout, - level=logging.INFO, - format="[%(levelname)-5.5s] %(message)s", - ) - - autostart() +def _preflight_and_autostart(): + # Check if AGENTUITY_API_KEY is set + if not os.environ.get("AGENTUITY_API_KEY") and not os.environ.get("AGENTUITY_SDK_KEY"): + print("\033[31m[ERROR] AGENTUITY_API_KEY or AGENTUITY_SDK_KEY is not set. This should have been set automatically by the Agentuity CLI or picked up from the .env file.\033[0m") + if os.environ.get("_", "").endswith("uv") and os.path.exists(".env"): + print("\033[31m[ERROR] Re-run the command with `uv run --env-file .env server.py`\033[0m") + sys.exit(1) + # Check if AGENTUITY_URL is set + if not os.environ.get("AGENTUITY_URL"): + print("\033[31m[WARN] You are running this agent outside of the Agentuity environment. Any automatic Agentuity features will be disabled.\033[0m") + print("\033[31m[WARN] Recommend running `agentuity dev` to run your project locally instead of `python script`.\033[0m") + # Setup logging after environment checks + logging.basicConfig(stream=sys.stdout, level=logging.INFO, format="[%(levelname)-5.5s] %(message)s") + autostart() @@ -if __name__ == "__main__": - uvicorn.run(app, host="0.0.0.0", port=3500) +if __name__ == "__main__": + _preflight_and_autostart() + host = os.environ.get("HOST", "0.0.0.0") + port = int(os.environ.get("PORT", "3500")) + uvicorn.run(app, host=host, port=port)Note: The heuristic
os.environ.get("_", "").endswith("uv")is brittle; verify it behaves as expected underuv runandagentuity dev.Also applies to: 45-46
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
frameworks/agno/research-agent/.agentuity-crash-1756999580.json(1 hunks)frameworks/agno/research-agent/.agentuity/config.json(1 hunks)frameworks/agno/research-agent/.env.development(1 hunks)frameworks/agno/research-agent/agentuity.yaml(1 hunks)frameworks/agno/research-agent/server.py(1 hunks)
✅ Files skipped from review due to trivial changes (2)
- frameworks/agno/research-agent/.env.development
- frameworks/agno/research-agent/.agentuity-crash-1756999580.json
🧰 Additional context used
🧠 Learnings (12)
📓 Common learnings
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:16.519Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:14:18.092Z
Learning: The file 'agentuity.yaml' is used to configure the Agentuity AI Agent project and should not be edited or suggested for edits.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:14:15.333Z
Learning: Agentuity Agent files should import types such as AgentRequest, AgentResponse, and AgentContext from the 'agentuity' package to ensure compatibility and access to helper methods.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agent.mdc:0-0
Timestamp: 2025-06-23T17:15:43.688Z
Learning: Agent files should import types such as AgentRequest, AgentResponse, and AgentContext from the `agentuity` package to ensure compatibility and leverage provided helper methods.
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:15:46.735Z
Learning: The Agentuity configuration file (agentuity.yaml) is used to configure the AI Agent project and should not be edited or suggested for edits.
Learnt from: jhaynie
PR: agentuity/examples#12
File: frameworks/agno/from-agno/pyproject.toml:1-9
Timestamp: 2025-05-28T21:02:10.403Z
Learning: The `agentuity` package is a Python SDK developed by Agentuity Inc., available on PyPI at https://pypi.org/project/agentuity/ with the GitHub repository at https://github.com/agentuity/sdk-py. This is a different package from `agentUniverse` and should not be confused with other agent-related packages.
Learnt from: jhaynie
PR: agentuity/examples#12
File: frameworks/agno/from-agno/pyproject.toml:1-9
Timestamp: 2025-05-28T21:02:10.403Z
Learning: The `agentuity` package is a Python SDK developed by Agentuity Inc., available on PyPI at https://pypi.org/project/agentuity/ with the GitHub repository at https://github.com/agentuity/sdk-py. This is a different package from `agentUniverse` and should not be confused with other agent-related packages.
📚 Learning: 2025-06-23T17:16:16.519Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:16.519Z
Learning: The Agentuity configuration file (agentuity.yaml) is reserved for configuring the AI Agent project and should not be edited or suggested for edits during code review.
Applied to files:
frameworks/agno/research-agent/.agentuity/config.jsonframeworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-07-17T13:39:58.483Z
Learnt from: CR
PR: agentuity/examples#0
File: agents/deep-research-js/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-07-17T13:39:58.483Z
Learning: Applies to agents/deep-research-js/**/agentuity.yaml : Do not suggest edits to the agentuity.yaml configuration file
Applied to files:
frameworks/agno/research-agent/.agentuity/config.jsonframeworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-07-17T13:41:01.314Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/agno/from_agno/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-07-17T13:41:01.314Z
Learning: Applies to frameworks/agno/from_agno/**/agentuity.yaml : Do not suggest edits to the Agentuity AI Configuration file (agentuity.yaml)
Applied to files:
frameworks/agno/research-agent/.agentuity/config.jsonframeworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:15:46.735Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/mem0/mem0demo/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:15:46.735Z
Learning: The Agentuity configuration file (agentuity.yaml) is used to configure the AI Agent project and should not be edited or suggested for edits.
Applied to files:
frameworks/agno/research-agent/.agentuity/config.jsonframeworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:16:33.550Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/pydantic/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:33.550Z
Learning: The agentuity.yaml file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits during code review.
Applied to files:
frameworks/agno/research-agent/.agentuity/config.jsonframeworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:16:02.063Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/openai/from-oai-typescript/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:16:02.063Z
Learning: The Agentuity AI Configuration file (agentuity.yaml) is used to configure the AI Agent project and should not be edited or suggested for edits.
Applied to files:
frameworks/agno/research-agent/.agentuity/config.jsonframeworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:14:18.092Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/langchain/basic/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:14:18.092Z
Learning: The file 'agentuity.yaml' is used to configure the Agentuity AI Agent project and should not be edited or suggested for edits.
Applied to files:
frameworks/agno/research-agent/.agentuity/config.jsonframeworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:13:52.368Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/crewai/socialagent/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:13:52.368Z
Learning: The 'agentuity.yaml' file is a configuration file used by Agentuity to configure the AI Agent project and should not be edited or suggested for edits.
Applied to files:
frameworks/agno/research-agent/.agentuity/config.jsonframeworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:15:30.804Z
Learnt from: CR
PR: agentuity/examples#0
File: frameworks/miscellaneous/grokLiveSearch/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:15:30.804Z
Learning: In the context of Agentuity AI projects, the 'agentuity.yaml' file is a configuration file that should not be edited or suggested for edits during code review.
Applied to files:
frameworks/agno/research-agent/.agentuity/config.jsonframeworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-06-23T17:17:12.992Z
Learnt from: CR
PR: agentuity/examples#0
File: patterns/llmAsJury/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-06-23T17:17:12.992Z
Learning: In the context of Agentuity AI projects, the agentuity.yaml file is a configuration file that should not be edited or suggested for edits during code review.
Applied to files:
frameworks/agno/research-agent/agentuity.yaml
📚 Learning: 2025-07-17T13:39:39.665Z
Learnt from: CR
PR: agentuity/examples#0
File: agents/composio/.cursor/rules/agentuity.mdc:0-0
Timestamp: 2025-07-17T13:39:39.665Z
Learning: Applies to agents/composio/**/agentuity.yaml : Do NOT suggest edits to the Agentuity AI Configuration file (agentuity.yaml)
Applied to files:
frameworks/agno/research-agent/agentuity.yaml
🪛 Ruff (0.12.2)
frameworks/agno/research-agent/server.py
38-38: Shebang is present but file is not executable
(EXE001)
38-38: Shebang should be at the beginning of the file
(EXE005)
46-46: Possible binding to all interfaces
(S104)
🔇 Additional comments (7)
frameworks/agno/research-agent/.agentuity/config.json (2)
1-1: LGTM: agent registration/path alignment looks correct
agents/ResearchAgent/agent.pymatches the bundler config and agent ID used elsewhere. No code issues spotted.
1-1: Confirm CLI/tooling versionsEnsure the local/CI Agentuity CLI is ≥ the recorded
cli_version: "0.0.166"to avoid mismatches; also confirm the path exists after packaging.frameworks/agno/research-agent/server.py (2)
8-10: Credential preflight guard is goodEarly exit if neither key is present is appropriate for DX.
43-43: ASGI app exposure is correctExporting
app = create_server()enablesuvicorn module:appusage and health checks.frameworks/agno/research-agent/agentuity.yaml (3)
18-20: Config aligns with server and agentPort 3500,
uv run server.py, and agent ID/name are consistent with code and .agentuity/config.json. No changes requested.Also applies to: 37-41, 60-64
9-15: Runtime/packaging verificationPlease confirm at run time:
- The recorded CLI version range satisfies your local/CI CLI.
- The
python-uvbundler is available for that CLI version.- Resource requests are sufficient for newspaper4k/lxml workloads.
Also applies to: 41-48, 50-58
11-11: Project ID usage checkPer PR notes, if this project_id was a placeholder, verify it resolves correctly when running
agentuity dev(no action requested here).
|
|
||
| autostart() | ||
|
|
||
| #!/usr/bin/env python3 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove mid-file shebang
Shebang must be first line or omitted. Here it triggers lint errors (EXE001/EXE005) and isn’t needed.
-#!/usr/bin/env python3📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| #!/usr/bin/env python3 |
🧰 Tools
🪛 Ruff (0.12.2)
38-38: Shebang is present but file is not executable
(EXE001)
38-38: Shebang should be at the beginning of the file
(EXE005)
🤖 Prompt for AI Agents
In frameworks/agno/research-agent/server.py around line 38, there is a mid-file
shebang ("#!/usr/bin/env python3") which must either be the very first line of
the file or removed; delete this line (or move it to the top of the file if a
shebang is actually required) so the file no longer triggers EXE001/EXE005 lint
errors and re-run the linter to confirm the issue is resolved.
Add Agno Research Agent converted to Agentuity
Summary
This PR adds a new framework example that converts the Agno Research Agent to work with the Agentuity platform while preserving all original framework functionality.
The implementation follows the established Agentuity wrapper pattern:
research_agent.py): Preserves the complete original implementation with OpenAIChat model, DuckDuckGo search, and Newspaper4k content analysisagent.py): Provides the Agentuity interface using asyncio executor to call the original agentThe research agent performs comprehensive investigative journalism, combining web search with content analysis to produce professional NYT-style reports on any topic.
Review & Testing Checklist for Human
research_agent.pyagainst the original Agno documentation to ensure exact fidelityagentuity devin the new directory and test with a research topic to verify the agent produces coherent research reportsuv syncsuccessfully installs all dependencies (agno, duckduckgo-search, newspaper4k, lxml-html-clean) without conflictsagent.pycorrectly handles response parsing and error casesTest Plan
frameworks/agno/research-agent/uv syncto install dependenciesOPENAI_API_KEYenvironment variableagentuity devand test with prompts like "Research the latest developments in quantum computing"Notes
agentuity.yamlcontains a placeholder project_id that may need updatingLink to Devin run: https://app.devin.ai/sessions/328fc0a013524c4e8862dcae87d858f5
Requested by: Dhilan Fye (dfye@agentuity.com)
Summary by CodeRabbit
New Features
Documentation
Chores