refactor!: rebrand CCAM to AgentHub

Clean break, no compatibility alias. Renames the product name, the CLI
binary (`ccam` -> `agenthub`), the env var prefix (`CCAM_` ->
`AGENTHUB_`), the Prometheus metric namespace (`ccam_*` ->
`agenthub_*`), the tmux session prefix (`ccam-lane-<id>` ->
`agenthub-lane-<id>`), the per-repo runtime profile directory
(`.ccam/profile` -> `.agenthub/profile`), the lanes state root
(`~/.claude/ccam-lanes` -> `~/.claude/agenthub-lanes`), the bundled
plugins (`plugins/ccam*` -> `plugins/agenthub*`) and their slash
commands (`/ccam-doctor` -> `/agenthub-doctor`, `/ccam:*` ->
`/agenthub:*`).

Because there is no alias, an existing install has to be updated by
hand: rename its `.ccam/profile` directory and any `CCAM_*` variables,
and reinstall the plugin under its new name.

Two other name families are deliberately left alone here, since they are
not just strings: the `Claude-Code-Monitor` repository/marketplace name,
and the `agent-dashboard` npm package plus its `~/.claude/agent-dashboard`
runtime directory, which holds the live database and needs a migration
rather than a rename.

Verified: server 1406/1406, client 459/459, `grep -i ccam` clean across
tracked files, `openapi.yaml` regenerated (95 paths, unchanged count).
This commit is contained in:
2026-09-07 12:09:15 +07:00
parent ae9b3dbcd5
commit 17d56d0e01
345 changed files with 2705 additions and 2727 deletions
@@ -0,0 +1,55 @@
---
description: >
Trace error propagation through a multi-agent session by agent depth — where
failures originated, the depth at which they appeared, and how they cascaded
up to parent agents — using the Agent Monitor workflow intelligence API and
the session event stream. Use when a multi-agent run failed and you need to
find the origin and blast radius of the failure.
---
# Error Propagation
Trace where a multi-agent session's failures started and how far they spread.
## Input
The user provides: **$ARGUMENTS**
A session ID. If empty, fetch `GET /api/sessions?limit=1`, but prefer the most recent session whose `status` is `error` or `abandoned`; state which one you picked.
## Data Sources
| Endpoint | Returns |
|----------|---------|
| `GET /api/workflows/{sessionId}` | The `errorPropagation` dataset: failures grouped by agent depth, with originating depth and cascade paths to parents |
| `GET /api/events?session_id={sessionId}` | The event stream — corroborate with `APIError`, `SubagentStop`, and failing `PostToolUse` events (`event_type`, `tool_name`, `summary`, `timestamp`) |
## Report Sections
### 1. Failure Summary
From `errorPropagation`: total errors, the depth where the first error originated, and how many distinct agents were affected.
`Origin depth: d · Errors: N · Agents affected: M`
### 2. Errors by Depth
| Depth | Errors originated | Errors inherited from children | Net failing agents |
|-------|-------------------|--------------------------------|--------------------|
Show whether failures concentrate deep in the tree (leaf subagents) or shallow (orchestrator).
### 3. Cascade Paths
For each originating failure, the path it propagated along:
`debugger (depth 2, tool failure) → code-review (depth 1, marked error) → root (depth 0, aborted)`
Tie each step to a concrete event from `/api/events` (event_type + tool_name + timestamp) where available.
### 4. Error Taxonomy
Break errors down by type from the event stream: `APIError` vs failing tool calls vs `SubagentStop` with error status. Note the most frequent tool involved in failures.
### 5. Containment Assessment
Whether failures were contained at the depth where they originated or leaked to parents. Name any parent that aborted solely because a child failed — a candidate for better error handling / isolation.
## Output
- Markdown tables for the depth breakdown; a fenced list for cascade paths.
- Timestamps for the first and last error.
- Cite only errors present in `errorPropagation` and the event stream; never invent failures or causes.
- If the session has no errors, say so plainly and stop.
- If the dashboard is unreachable, tell the user to start it with `npm start` from the repo root.