cao-provider
Create a new CLI agent provider for CAO (CLI Agent Orchestrator). Use this skill whenever the user wants to add support for a newโฆ
Create a new CAO (CLI Agent Orchestrator) plugin. Use this skill whenever the user wants to add a plugin that reacts to CAO lifecycle or messaging events, scaffold a plugin package, understand plugin requirements, or integrate an external system (Discord, Slack, dashboards,
Claude Code
$ npx -y skills add awslabs/cli-agent-orchestrator --skill cao-plugin --agent claude-code
Codex
$ npx skills add awslabs/cli-agent-orchestrator --skill cao-plugin -a codex -y
Cursor
$ npx skills add awslabs/cli-agent-orchestrator --skill cao-plugin -a cursor -y
Gemini CLI
$ npx skills add awslabs/cli-agent-orchestrator --skill cao-plugin -a gemini-cli -y
GitHub Copilot
$ npx skills add awslabs/cli-agent-orchestrator --skill cao-plugin -a github-copilot -y
OpenCode
$ npx skills add awslabs/cli-agent-orchestrator --skill cao-plugin -a opencode -y
Windsurf
$ npx skills add awslabs/cli-agent-orchestrator --skill cao-plugin -a windsurf -y
name: cao-plugin description: Create a new CAO (CLI Agent Orchestrator) plugin. Use this skill whenever the user wants to add a plugin that reacts to CAO lifecycle or messaging events, scaffold a plugin package, understand plugin requirements, or integrate an external system (Discord, Slack, dashboards, logging, metrics) with CAO. Also use when the user asks what plugin events are available, how plugin discovery works, or how to install a plugin into a CAO environment.
Guide for creating a new CAO plugin. A "plugin" is a Python package installed alongside CAO that subscribes to CAO lifecycle and messaging events via typed async hooks.
A CAO plugin is a standalone Python package that:
1. **Subclasses `CaoPlugin`** from `cli_agent_orchestrator.plugins` 2. **Registers async hook methods** with `@hook("<event_type>")` decorators 3. **Is discovered via the `cao.plugins` Python entry-point group** at `cao-server` startup 4. **Runs fire-and-forget** โ plugin exceptions are caught and logged as warnings, never propagated back into CAO
Typical uses: forwarding inter-agent messages to chat apps, logging/observability, external dashboards, metrics export, alerting on session or terminal lifecycle.
Gather this information:
These are the non-negotiable contracts a plugin must satisfy to be loaded and dispatched to. Verify each one before calling your plugin complete.
Minimum viable layout:
my-cao-plugin/ โโโ pyproject.toml # Build config + entry-point declaration โโโ my_cao_plugin/ โ โโโ __init__.py # Can be empty โ โโโ plugin.py # Contains the CaoPlugin subclass โโโ tests/ # Optional but strongly recommended โ โโโ test_plugin.py โโโ env.template # Optional; only if the plugin reads env vars โโโ README.md # Optional; install + config instructions for users
See `examples/plugins/cao-discord/` in this repo for a complete reference implementation.
A raising `setup()` disables that plugin for the lifetime of the server process (warning logged, other plugins continue to load). A raising `teardown()` is logged and does not stop other plugins from tearing down.
A hook method must:
Multiple hook methods on the same plugin may subscribe to the same event type โ each is dispatched independently. Execution order across hooks is not guaranteed.
Exceptions raised inside a hook are caught by the registry and logged as warnings. They do not affect CAO's primary operation and they do not stop other hooks for the same event from running.
Declare the plugin class under the `cao.plugins` entry-point group in `pyproject.toml`:
[project.entry-points."cao.plugins"] my_plugin = "my_cao_plugin.plugin:MyPlugin"
No CAO-side configuration is required to enable a plugin โ installation plus entry-point declaration is sufficient.
Minimal `pyproject.toml`:
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "my-cao-plugin"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
"cli-agent-orchestrator",
# ... your plugin's deps
]
[project.entry-points."cao.plugins"]
my_plugin = "my_cao_plugin.plugin:MyPlugin"CAO does not inject configuration into plugins in v1. Options:
CLI Agent Orchestrator (CAO) coordinates multiple AI coding CLIs so a supervisor can delegate work to specialist agents in parallel or sequence. ๐ Documentation โ guides, reference, and two interactive courses.
Create a new CLI agent provider for CAO (CLI Agent Orchestrator). Use this skill whenever the user wants to add support for a newโฆ
Find and select the best installed CAO agent profile for a task before
Find available CAO (CLI Agent Orchestrator) agent profiles, and talk to the
Supervisor-side orchestration patterns for assign, handoff, and idle inbox delivery in CAO
Worker-side callback and completion rules for assigned and handed-off tasks in CAO
Author live dashboard UI from an agent via the `emit_ui` MCP tool. Emit
Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also coversโฆ
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, fillingโฆ