Agent APIPlugin System
DocsPlugin System

Plugins

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

What is a Plugin?

A plugin is a list of event handlers:

main.py
from connectonion import after_user_input, after_tools # Define handlers def plan(agent): print("Planning...") def reflect(agent): print("Reflecting...") # Plugin = list of event handlers re_act = [after_user_input(plan), after_tools(reflect)] # Use it agent = Agent("assistant", tools=[search], plugins=[re_act])

Plugin vs on_events

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

Built-in Plugins

PluginPurposeDocs
re_actPlanning + reflection (ReAct pattern)docs
auto_compactAuto-compress context at 90% โ€” prevents hitting token limitsdocs
subagentsLoad sub-agents from AGENT.md files via task() tooldocs
ulwUltra Light Work โ€” autonomous mode from web UIdocs
ui_streamWebSocket streaming of completion events to UIdocs
tool_approvalRequire user approval before each tool calldocs
shell_approvalApprove shell commands before executiondocs
prefer_write_toolEncourage agent to use FileTools.write() over bashdocs
system_reminderInject system reminders into LLM contextdocs
image_result_formatterFormat images for vision modelsdocs
evalTask evaluation for debuggingdocs
main.py
from connectonion.useful_plugins import re_act, eval, image_result_formatter, shell_approval # Combine plugins agent = Agent("assistant", plugins=[re_act, image_result_formatter])

Writing Custom Plugins

Simple example - log each tool execution:

main.py
from connectonion import Agent, after_each_tool def log_tool(agent): trace = agent.current_session['trace'][-1] print(f"โœ“ {trace['tool_name']} completed") # Plugin = list of handlers logger = [after_each_tool(log_tool)] # Use it agent = Agent("assistant", tools=[search], plugins=[logger])

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

Reusing Plugins

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

Next Steps

Star us on GitHub

If ConnectOnion saves you time, a โญ goes a long way โ€” and earns you a coffee chat with our founder.