/cao-learning
Report task outcomes and distill lessons so the team improves across
$ npx -y skills add awslabs/cli-agent-orchestrator --skill cao-learning --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/cao-learning
Context preview
The summary Claude sees to decide when to auto-load this skill.
Report task outcomes and distill lessons so the team improves across
SKILL.md
cao-learning.SKILL.mdname: cao-learning
description: Report task outcomes and distill lessons so the team improves across
runs — report_outcome after each unit of work, retrospector handoffs at natural
boundaries, and applying injected lessons. Use in workflows that run repeatedly
over similar work items. Requires memory.learning_enabled; degrade silently when
the tools report disabled.
CAO Self-Learning
CAO workflows can improve as they repeat: outcomes you report feed a retrospector agent that distills durable lessons into memory, and those lessons reach future sessions automatically. Your job depends on your role.
All of this is opt-in infrastructure. **If `report_outcome` or a memory tool returns `disabled: true`, skip it silently and continue your task** — learning is off for this run (often deliberately, e.g. a control run) and that is expected, not an error.
If you are a SUPERVISOR
Report an outcome after each meaningful unit of work
One `report_outcome` call per completed step, delegated task, or work item — after validation/review, not before:
report_outcome(
task_label="convert package CustomerETL (iteration 2)",
success=false,
workflow_name="ssis-migration",
agent_profile="transformer", # who did the work (defaults to you)
score=40, # optional 0-100 metric if you have one
friction_notes="Lookup with partial cache emitted an invalid join; "
"improver patched the cache-mode mapping."
)Rules for `friction_notes`:
- 1–3 sentences, **conclusions only** — the root cause, not the story.
- NEVER paste transcripts, logs, stack traces, file contents, or secrets.
- Empty string on a clean pass is fine; the success flag already carries signal.
Report failures faithfully — failed iterations are the most valuable learning signal. Do not skip reporting because a step went badly.
Dispatch the retrospector at natural boundaries
After each completed work item (a package, a feature, a review cycle) — not after every step — hand off to the `retrospector` agent:
"Retrospect on session <session_name>, workflow <workflow_name>,
item <item name>. Agents involved: <profiles>."
Wait for its one-line summary (outcomes read, lessons stored) and record it in your run log. If no retrospector profile is available, skip this step.
Pass lessons downstream
Your injected `<cao-memory>` block may contain lessons from previous runs. When a lesson's `Applies when:` clause matches the task you are delegating, include it in your handoff message — workers also receive their own agent-scope lessons, but your routing helps.
If you are a WORKER
1. **Apply injected lessons first.** Before working, scan your `<cao-memory>` block and any `## Learned Patterns` section of your own instructions for lessons whose `Applies when:` clause matches the current task. Apply them before falling back to first principles. 2. **Store new lessons immediately** when you discover something durable — a mapping that works, a trap that recurs, a tooling quirk:
memory_store(
content="Preserve a Lookup transform's cache mode instead of defaulting "
"to a full-table read. Applies when: translating a Lookup whose "
"CacheType is not full cache.",
scope="agent",
memory_type="feedback",
key="honor-lookup-cache-mode"
)Format contract: 1–2 sentence conclusion, then `Applies when: <trigger>`. The trigger clause is how future curators match your lesson to a task. 3. **Correct, don't accumulate.** If a stored lesson proves wrong, re-store the corrected text under the SAME key (or `memory_forget` it). Never store a contradicting lesson under a new key.
If you are the RETROSPECTOR
Follow your profile (`retrospector.md`). Read outcomes with the `list_outcomes` tool; store worker-craft lessons with `store_lesson(target_agent_profile=..., content=...)` — NOT `memory_store`, which files agent-scope lessons under YOUR profile, where the worker will never see them. The quality bar, in brief: 0–3 lessons per retrospection, each supported by a concrete outcome, actionable, general enough to recur, under 400 characters, ending with `Applies when:`. "No lessons" is a valid and often correct answer.
What happens to lessons afterwards
- Lessons are ordinary agent-scope memories: injected into future sessions,
recalled on demand (each recall reinforces them), lint-checked for contradictions, audited.
- An operator may promote reinforced lessons into your profile's
`## Learned Patterns` block with `cao memory promote` — that block is CAO-maintained; treat its contents as instructions, and don't edit it by hand.
Read more
name: cao-learning description: Report task outcomes and distill lessons so the team improves across runs — report_outcome after each unit of work, retrospector handoffs at natural boundaries, and applying injected lessons. Use in workflows that run repeatedly over similar work items. Requires memory.learning_enabled; degrade silently when the tools report disabled.
CAO Self-Learning
CAO workflows can improve as they repeat: outcomes you report feed a retrospector agent that distills durable lessons into memory, and those lessons reach future sessions automatically. Your job depends on your role.
All of this is opt-in infrastructure. **If `report_outcome` or a memory tool returns `disabled: true`, skip it silently and continue your task** — learning is off for this run (often deliberately, e.g. a control run) and that is expected, not an error.
If you are a SUPERVISOR
Report an outcome after each meaningful unit of work
One `report_outcome` call per completed step, delegated task, or work item — after validation/review, not before:
report_outcome(
task_label="convert package CustomerETL (iteration 2)",
success=false,
workflow_name="ssis-migration",
agent_profile="transformer", # who did the work (defaults to you)
score=40, # optional 0-100 metric if you have one
friction_notes="Lookup with partial cache emitted an invalid join; "
"improver patched the cache-mode mapping."
)Rules for `friction_notes`:
- 1–3 sentences, **conclusions only** — the root cause, not the story.
- NEVER paste transcripts, logs, stack traces, file contents, or secrets.
- Empty string on a clean pass is fine; the success flag already carries signal.
Report failures faithfully — failed iterations are the most valuable learning signal. Do not skip reporting because a step went badly.
Dispatch the retrospector at natural boundaries
After each completed work item (a package, a feature, a review cycle) — not after every step — hand off to the `retrospector` agent:
"Retrospect on session <session_name>, workflow <workflow_name>, item <item name>. Agents involved: <profiles>."
Wait for its one-line summary (outcomes read, lessons stored) and record it in your run log. If no retrospector profile is available, skip this step.
Pass lessons downstream
Your injected `<cao-memory>` block may contain lessons from previous runs. When a lesson's `Applies when:` clause matches the task you are delegating, include it in your handoff message — workers also receive their own agent-scope lessons, but your routing helps.
If you are a WORKER
1. **Apply injected lessons first.** Before working, scan your `<cao-memory>` block and any `## Learned Patterns` section of your own instructions for lessons whose `Applies when:` clause matches the current task. Apply them before falling back to first principles. 2. **Store new lessons immediately** when you discover something durable — a mapping that works, a trap that recurs, a tooling quirk:
memory_store(
content="Preserve a Lookup transform's cache mode instead of defaulting "
"to a full-table read. Applies when: translating a Lookup whose "
"CacheType is not full cache.",
scope="agent",
memory_type="feedback",
key="honor-lookup-cache-mode"
)Format contract: 1–2 sentence conclusion, then `Applies when: <trigger>`. The trigger clause is how future curators match your lesson to a task. 3. **Correct, don't accumulate.** If a stored lesson proves wrong, re-store the corrected text under the SAME key (or `memory_forget` it). Never store a contradicting lesson under a new key.
If you are the RETROSPECTOR
Follow your profile (`retrospector.md`). Read outcomes with the `list_outcomes` tool; store worker-craft lessons with `store_lesson(target_agent_profile=..., content=...)` — NOT `memory_store`, which files agent-scope lessons under YOUR profile, where the worker will never see them. The quality bar, in brief: 0–3 lessons per retrospection, each supported by a concrete outcome, actionable, general enough to recur, under 400 characters, ending with `Applies when:`. "No lessons" is a valid and often correct answer.
What happens to lessons afterwards
- Lessons are ordinary agent-scope memories: injected into future sessions,
recalled on demand (each recall reinforces them), lint-checked for contradictions, audited.
- An operator may promote reinforced lessons into your profile's
`## Learned Patterns` block with `cao memory promote` — that block is CAO-maintained; treat its contents as instructions, and don't edit it by hand.
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.
Other skills on cli-agent-orchestrator.
- /agui-author
Author live dashboard UI from an agent via the `emit_ui` MCP tool. Emit
Open skill - /cao-agent-routing
Find and select the best installed CAO agent profile for a task before
Open skill - /cao-mcp-apps
Enable, operate, and extend CAO's MCP Apps surface — the host-rendered fleet dashboard visible inside MCP App hosts (Claude Desktop, ChatGPT, VS Code Copilot, Goose, Postman). Use when the user says "enable MCP Apps in CAO", "the ui://cao views aren't rendering", "rebuild MCP
Open skill - /cao-memory
Store, recall, and forget durable facts with CAO memory — user preferences,
Open skill - /cao-plugin
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,
Open skill - /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 CLI-based AI agent (e.g., a new coding assistant CLI), integrate a new provider, or scaffold a provider implementation. Also use when the user asks
Open skill

