ConnectOnionConnectOnion
DocsPlugin System

Plugins

Plugins are reusable event handlers. Package capabilities and reuse them across agents.

Quick Start

main.py
1from connectonion import Agent 2from connectonion.useful_plugins import re_act 3 4agent = Agent("assistant", tools=[search], plugins=[re_act]) 5agent.input("Search for Python") 6# 💭 Planning: Will search for Python info first. 7# ... tool executes ... 8# 🤔 Reflecting: Found Python basics, task complete.

What is a Plugin?

A plugin is a list of event handlers:

main.py
1from connectonion import after_user_input, after_tools 2 3# Define handlers 4def plan(agent): 5 print("Planning...") 6 7def reflect(agent): 8 print("Reflecting...") 9 10# Plugin = list of event handlers 11re_act = [after_user_input(plan), after_tools(reflect)] 12 13# Use it 14agent = Agent("assistant", tools=[search], plugins=[re_act])

Plugin vs on_events

main.py
1# on_events: one list (custom for this agent) 2agent = Agent("a", on_events=[after_llm(handler)]) 3 4# plugins: list of lists (reusable across agents) 5agent = Agent("a", plugins=[re_act, logger])

Built-in Plugins

PluginPurposeDocs
re_actPlanning + reflection (ReAct pattern)docs
evalTask evaluation for debuggingdocs
image_result_formatterFormat images for vision modelsdocs
shell_approvalApprove shell commands before executiondocs
main.py
1from connectonion.useful_plugins import re_act, eval, image_result_formatter, shell_approval 2 3# Combine plugins 4agent = Agent("assistant", plugins=[re_act, image_result_formatter])

Writing Custom Plugins

Simple example - log each tool execution:

main.py
1from connectonion import Agent, after_each_tool 2 3def log_tool(agent): 4 trace = agent.current_session['trace'][-1] 5 print(f"✓ {trace['tool_name']} completed") 6 7# Plugin = list of handlers 8logger = [after_each_tool(log_tool)] 9 10# Use it 11agent = Agent("assistant", tools=[search], plugins=[logger])

For more complex plugins, see Events for available event hooks.

Reusing Plugins

main.py
1# Define once 2logger = [after_each_tool(log_tool)] 3 4# Use across agents 5researcher = Agent("researcher", tools=[search], plugins=[logger]) 6writer = Agent("writer", tools=[generate], plugins=[logger])

Next Steps