generated from amazon-archives/__template_Apache-2.0
-
Notifications
You must be signed in to change notification settings - Fork 650
Open
Description
Overview
Add a new plugins parameter to the Agent class that accepts a list of Plugin instances for extending agent functionality.
Parent Issue: #1636
Problem Statement
Currently, high-level features are added via the hooks parameter using HookProvider. A dedicated plugins parameter provides clearer semantics for composable agent extensions.
Proposed Solution
Add plugins: list[Plugin] | None = None parameter to Agent.__init__ that initializes plugins after the agent is constructed.
Implementation Requirements
Agent.init Changes
def __init__(
self,
# ... existing parameters ...
plugins: list[Plugin] | None = None,
hooks: list[HookProvider] | None = None, # Keep for backwards compatibility
):
# ... existing initialization ...
# Initialize plugins after agent is fully constructed
if plugins:
for plugin in plugins:
if inspect.iscoroutinefunction(plugin.init_plugin):
# Handle async init_plugin
run_async(lambda p=plugin: p.init_plugin(self))
else:
plugin.init_plugin(self)
# Fire AgentInitializedEvent after plugins are initialized
self.hooks.invoke_callbacks(AgentInitializedEvent(agent=self))Plugin Initialization Order
- Built-in components initialized (model, tools, hooks registry)
- HookProviders registered (from
hooksparameter - deprecated) - Plugins initialized (from
pluginsparameter) AgentInitializedEventfired
Files to Modify
src/strands/agent/agent.py- Add plugins parameter and initialization logictests/strands/agent/test_agent.py- Add tests for plugins parameter
Example Usage
from strands import Agent
from strands.hooks import Plugin
class LoggingPlugin:
name = "logging"
def init_plugin(self, agent):
agent.add_hook(BeforeModelCallEvent, lambda e: print("Model call starting"))
agent = Agent(
plugins=[
LoggingPlugin(),
SkillsPlugin(),
]
)Acceptance Criteria
-
pluginsparameter added to Agent.init - Plugins are initialized with the agent instance after construction
- Both sync and async
init_pluginmethods are handled correctly - Plugin initialization happens before
AgentInitializedEventis fired - Unit tests cover plugin initialization with various scenarios
- Docstrings updated for Agent class
Dependencies
- Depends on: Plugin Protocol Definition (sub-issue 1636.1)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels