{"id":29806258,"url":"https://github.com/disler/claude-code-hooks-multi-agent-observability","last_synced_at":"2026-10-19T12:39:26.710Z","repository":{"id":304526279,"uuid":"1019046491","full_name":"disler/claude-code-hooks-multi-agent-observability","owner":"disler","description":"Real-time monitoring for Claude Code agents through simple hook event tracking.","archived":false,"fork":false,"pushed_at":"2026-02-08T23:59:13.000Z","size":5274,"stargazers_count":1547,"open_issues_count":31,"forks_count":384,"subscribers_count":20,"default_branch":"main","last_synced_at":"2026-10-14T07:58:07.979Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/disler.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-07-13T16:11:17.000Z","updated_at":"2026-10-13T22:58:17.000Z","dependencies_parsed_at":"2025-07-13T18:26:39.801Z","dependency_job_id":"3091f7ca-d22a-4444-a262-b0bfeecf5be8","html_url":"https://github.com/disler/claude-code-hooks-multi-agent-observability","commit_stats":null,"previous_names":["disler/claude-code-hooks-multi-agent-observability"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/disler/claude-code-hooks-multi-agent-observability","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disler%2Fclaude-code-hooks-multi-agent-observability","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disler%2Fclaude-code-hooks-multi-agent-observability/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disler%2Fclaude-code-hooks-multi-agent-observability/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disler%2Fclaude-code-hooks-multi-agent-observability/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/disler","download_url":"https://codeload.github.com/disler/claude-code-hooks-multi-agent-observability/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/disler%2Fclaude-code-hooks-multi-agent-observability/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38356471,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-28T14:05:55.165Z","updated_at":"2026-10-19T12:39:26.700Z","avatar_url":"https://github.com/disler.png","language":"Python","funding_links":[],"categories":["Python","Observability \u0026 Monitoring","Tools \u0026 Utilities","🪝 Hooks and Guardrails","HarmonyOS","Productivity Tools","Monitoring \u0026 Analytics","Monitoring and Observability","LLM and Agent Observability","Observability \u0026 Logging Hooks"],"sub_categories":["Observability","Anthropic Engineering \u0026 Blog","Windows Manager","Monitoring \u0026 Observability"],"readme":"# Multi-Agent Observability System\n\nReal-time monitoring and visualization for Claude Code agents through comprehensive hook event tracking. Watch the [latest deep dive on multi-agent orchestration with Opus 4.6 here](https://youtu.be/RpUTF_U4kiw). With Claude Opus 4.6 and multi-agent orchestration, you can now spin up teams of specialized agents that work in parallel, and this observability system lets you trace every tool call, task handoff, and agent lifecycle event across the entire swarm.\n\n## 🎯 Overview\n\nThis system provides complete observability into Claude Code agent behavior by capturing, storing, and visualizing Claude Code [Hook events](https://docs.anthropic.com/en/docs/claude-code/hooks) in real-time. It enables monitoring of multiple concurrent agents with session tracking, event filtering, and live updates. \n\n\u003cimg src=\"images/app.png\" alt=\"Multi-Agent Observability Dashboard\" style=\"max-width: 800px; width: 100%;\"\u003e\n\n## 🏗️ Architecture\n\n```\nClaude Agents → Hook Scripts → HTTP POST → Bun Server → SQLite → WebSocket → Vue Client\n```\n\n![Agent Data Flow Animation](images/AgentDataFlowV2.gif)\n\n## 📋 Setup Requirements\n\nBefore getting started, ensure you have the following installed:\n\n- **[Claude Code](https://docs.anthropic.com/en/docs/claude-code)** - Anthropic's official CLI for Claude\n- **[Astral uv](https://docs.astral.sh/uv/)** - Fast Python package manager (required for hook scripts)\n- **[Bun](https://bun.sh/)**, **npm**, or **yarn** - For running the server and client\n- **[just](https://github.com/casey/just)** (optional) - Command runner for project recipes\n- **Anthropic API Key** - Set as `ANTHROPIC_API_KEY` environment variable\n- **OpenAI API Key** (optional) - For multi-model support with just-prompt MCP tool\n- **ElevenLabs API Key** (optional) - For audio features\n- **Firecrawl API Key** (optional) - For web scraping features\n\n### Configure .claude Directory\n\nTo setup observability in your repo,we need to copy the .claude directory to your project root.\n\nTo integrate the observability hooks into your projects:\n\n1. **Copy the entire `.claude` directory to your project root:**\n   ```bash\n   cp -R .claude /path/to/your/project/\n   ```\n\n2. **Update the `settings.json` configuration:**\n   \n   Open `.claude/settings.json` in your project and modify the `source-app` parameter to identify your project:\n   \n   ```json\n   {\n     \"hooks\": {\n       \"PreToolUse\": [{\n         \"matcher\": \"\",\n         \"hooks\": [\n           {\n             \"type\": \"command\",\n             \"command\": \"uv run .claude/hooks/pre_tool_use.py\"\n           },\n           {\n             \"type\": \"command\",\n             \"command\": \"uv run .claude/hooks/send_event.py --source-app YOUR_PROJECT_NAME --event-type PreToolUse --summarize\"\n           }\n         ]\n       }],\n       \"PostToolUse\": [{\n         \"matcher\": \"\",\n         \"hooks\": [\n           {\n             \"type\": \"command\",\n             \"command\": \"uv run .claude/hooks/post_tool_use.py\"\n           },\n           {\n             \"type\": \"command\",\n             \"command\": \"uv run .claude/hooks/send_event.py --source-app YOUR_PROJECT_NAME --event-type PostToolUse --summarize\"\n           }\n         ]\n       }],\n       \"UserPromptSubmit\": [{\n         \"hooks\": [\n           {\n             \"type\": \"command\",\n             \"command\": \"uv run .claude/hooks/user_prompt_submit.py --log-only\"\n           },\n           {\n             \"type\": \"command\",\n             \"command\": \"uv run .claude/hooks/send_event.py --source-app YOUR_PROJECT_NAME --event-type UserPromptSubmit --summarize\"\n           }\n         ]\n       }]\n       // ... (similar patterns for all 12 hook events: Notification, Stop, SubagentStop,\n      //      SubagentStart, PreCompact, SessionStart, SessionEnd, PermissionRequest, PostToolUseFailure)\n     }\n   }\n   ```\n   \n   Replace `YOUR_PROJECT_NAME` with a unique identifier for your project (e.g., `my-api-server`, `react-app`, etc.).\n\n3. **Ensure the observability server is running:**\n   ```bash\n   # From the observability project directory (this codebase)\n   ./scripts/start-system.sh\n   ```\n\nNow your project will send events to the observability system whenever Claude Code performs actions.\n\n## 🚀 Quick Start\n\nYou can quickly view how this works by running this repository's `.claude` setup.\n\n```bash\n# 1. Start both server and client\njust start          # or: ./scripts/start-system.sh\n\n# 2. Open http://localhost:5173 in your browser\n\n# 3. Open Claude Code and run the following command:\nRun git ls-files to understand the codebase.\n\n# 4. Watch events stream in the client\n\n# 5. Copy the .claude folder to other projects you want to emit events from.\ncp -R .claude \u003cdirectory of your codebase you want to emit events from\u003e\n```\n\n### Using `just` (Recommended)\n\nA `justfile` provides convenient recipes for common operations:\n\n```bash\njust              # List all available recipes\njust start        # Start server + client\njust stop         # Stop all processes\njust restart      # Stop then start\njust server       # Start server only (dev mode)\njust client       # Start client only\njust install      # Install all dependencies\njust health       # Check server/client status\njust test-event   # Send a test event\njust db-reset     # Reset the database\njust hooks        # List all hook scripts\njust open         # Open dashboard in browser\n```\n\n## 📁 Project Structure\n\n```\nclaude-code-hooks-multi-agent-observability/\n│\n├── apps/                    # Application components\n│   ├── server/             # Bun TypeScript server\n│   │   ├── src/\n│   │   │   ├── index.ts    # Main server with HTTP/WebSocket endpoints\n│   │   │   ├── db.ts       # SQLite database management \u0026 migrations\n│   │   │   └── types.ts    # TypeScript interfaces\n│   │   ├── package.json\n│   │   └── events.db       # SQLite database (gitignored)\n│   │\n│   └── client/             # Vue 3 TypeScript client\n│       ├── src/\n│       │   ├── App.vue     # Main app with theme \u0026 WebSocket management\n│       │   ├── components/\n│       │   │   ├── EventTimeline.vue      # Event list with auto-scroll\n│       │   │   ├── EventRow.vue           # Individual event display\n│       │   │   ├── FilterPanel.vue        # Multi-select filters\n│       │   │   ├── ChatTranscriptModal.vue # Chat history viewer\n│       │   │   ├── StickScrollButton.vue  # Scroll control\n│       │   │   └── LivePulseChart.vue     # Real-time activity chart\n│       │   ├── composables/\n│       │   │   ├── useWebSocket.ts        # WebSocket connection logic\n│       │   │   ├── useEventColors.ts      # Color assignment system\n│       │   │   ├── useChartData.ts        # Chart data aggregation\n│       │   │   └── useEventEmojis.ts      # Event type emoji mapping\n│       │   ├── utils/\n│       │   │   └── chartRenderer.ts       # Canvas chart rendering\n│       │   └── types.ts    # TypeScript interfaces\n│       ├── .env.sample     # Environment configuration template\n│       └── package.json\n│\n├── .claude/                # Claude Code integration\n│   ├── hooks/             # Hook scripts (Python with uv)\n│   │   ├── send_event.py          # Universal event sender (all 12 event types)\n│   │   ├── pre_tool_use.py        # Tool validation, blocking \u0026 summarization\n│   │   ├── post_tool_use.py       # Result logging with MCP tool detection\n│   │   ├── post_tool_use_failure.py # Tool failure logging\n│   │   ├── permission_request.py  # Permission request logging\n│   │   ├── notification.py        # User interaction events (type-aware TTS)\n│   │   ├── user_prompt_submit.py  # User prompt logging \u0026 validation\n│   │   ├── stop.py               # Session completion (stop_hook_active guard)\n│   │   ├── subagent_stop.py      # Subagent completion with transcript path\n│   │   ├── subagent_start.py     # Subagent lifecycle start tracking\n│   │   ├── pre_compact.py        # Context compaction with custom instructions\n│   │   ├── session_start.py      # Session start with agent type \u0026 model\n│   │   ├── session_end.py        # Session end with reason tracking\n│   │   └── validators/           # Stop hook validators\n│   │       ├── validate_new_file.py     # Validate file creation\n│   │       └── validate_file_contains.py # Validate file content sections\n│   │\n│   ├── agents/team/       # Agent team definitions\n│   │   ├── builder.md     # Engineering agent with linting hooks\n│   │   └── validator.md   # Read-only validation agent\n│   │\n│   ├── commands/          # Custom slash commands\n│   │   └── plan_w_team.md # Team-based planning command\n│   │\n│   ├── status_lines/      # Status line scripts\n│   │   └── status_line_v6.py # Context window usage display\n│   │\n│   └── settings.json      # Hook configuration (all 12 events)\n│\n├── justfile               # Task runner recipes (just start, just stop, etc.)\n│\n├── scripts/               # Utility scripts\n│   ├── start-system.sh   # Launch server \u0026 client\n│   ├── reset-system.sh   # Stop all processes\n│   └── test-system.sh    # System validation\n│\n└── logs/                 # Application logs (gitignored)\n```\n\n## 🔧 Component Details\n\n### 1. Hook System (`.claude/hooks/`)\n\n\u003e If you want to master claude code hooks watch [this video](https://github.com/disler/claude-code-hooks-mastery)\n\nThe hook system intercepts Claude Code lifecycle events:\n\n- **`send_event.py`**: Core script that sends event data to the observability server\n  - Supports all 12 hook event types with event-specific field forwarding\n  - Supports `--add-chat` flag for including conversation history\n  - Forwards event-specific fields (`tool_name`, `tool_use_id`, `agent_id`, `notification_type`, etc.) as top-level properties for easier querying\n  - Validates server connectivity before sending\n\n- **Event-specific hooks** (12 total): Each implements validation and data extraction\n  - `pre_tool_use.py`: Blocks dangerous commands, validates tool usage, summarizes tool inputs per tool type\n  - `post_tool_use.py`: Captures execution results with MCP tool detection (`mcp_server`, `mcp_tool_name`)\n  - `post_tool_use_failure.py`: Logs tool execution failures\n  - `permission_request.py`: Logs permission request events\n  - `notification.py`: Tracks user interactions with `notification_type`-aware TTS (permission_prompt, idle_prompt, etc.)\n  - `user_prompt_submit.py`: Logs user prompts, supports validation with JSON `{\"decision\": \"block\"}` pattern\n  - `stop.py`: Records session completion with `stop_hook_active` guard to prevent infinite loops\n  - `subagent_stop.py`: Monitors subagent task completion with transcript path tracking\n  - `subagent_start.py`: Tracks subagent lifecycle start events\n  - `pre_compact.py`: Tracks context compaction with custom instructions in backup filenames\n  - `session_start.py`: Logs session start with `agent_type`, `model`, and `source` fields\n  - `session_end.py`: Logs session end with reason tracking (including `bypass_permissions_disabled`)\n\n### 2. Server (`apps/server/`)\n\nBun-powered TypeScript server with real-time capabilities:\n\n- **Database**: SQLite with WAL mode for concurrent access\n- **Endpoints**:\n  - `POST /events` - Receive events from agents\n  - `GET /events/recent` - Paginated event retrieval with filtering\n  - `GET /events/filter-options` - Available filter values\n  - `WS /stream` - Real-time event broadcasting\n- **Features**:\n  - Automatic schema migrations\n  - Event validation\n  - WebSocket broadcast to all clients\n  - Chat transcript storage\n\n### 3. Client (`apps/client/`)\n\nVue 3 application with real-time visualization:\n\n- **Visual Design**:\n  - Dual-color system: App colors (left border) + Session colors (second border)\n  - Gradient indicators for visual distinction\n  - Dark/light theme support\n  - Responsive layout with smooth animations\n\n- **Features**:\n  - Real-time WebSocket updates\n  - Multi-criteria filtering (app, session, event type)\n  - Live pulse chart with session-colored bars and event type indicators\n  - Time range selection (1m, 3m, 5m) with appropriate data aggregation\n  - Chat transcript viewer with syntax highlighting\n  - Auto-scroll with manual override\n  - Event limiting (configurable via `VITE_MAX_EVENTS_TO_DISPLAY`)\n\n- **Tool Emoji System**:\n  - Each tool type has a dedicated emoji (Bash: 💻, Read: 📖, Write: ✍️, Edit: ✏️, Task: 🤖, etc.)\n  - Tool events show combo emojis: event emoji + tool emoji (e.g., 🔧💻 for PreToolUse:Bash)\n  - MCP tools display with 🔌 prefix\n  - Tool name badge displayed alongside event type in the timeline\n\n- **Live Pulse Chart**:\n  - Canvas-based real-time visualization\n  - Session-specific colors for each bar\n  - Event type + tool combo emojis displayed on bars\n  - Smooth animations and glow effects\n  - Responsive to filter changes\n\n## 🔄 Data Flow\n\n1. **Event Generation**: Claude Code executes an action (tool use, notification, etc.)\n2. **Hook Activation**: Corresponding hook script runs based on `settings.json` configuration\n3. **Data Collection**: Hook script gathers context (tool name, inputs, outputs, session ID)\n4. **Transmission**: `send_event.py` sends JSON payload to server via HTTP POST\n5. **Server Processing**:\n   - Validates event structure\n   - Stores in SQLite with timestamp\n   - Broadcasts to WebSocket clients\n6. **Client Update**: Vue app receives event and updates timeline in real-time\n\n## 🎨 Event Types \u0026 Visualization\n\n| Event Type         | Emoji | Purpose                | Color Coding  | Special Display                      |\n| ------------------ | ----- | ---------------------- | ------------- | ------------------------------------ |\n| PreToolUse         | 🔧     | Before tool execution  | Session-based | Tool name + tool emoji \u0026 details     |\n| PostToolUse        | ✅     | After tool completion  | Session-based | Tool name + tool emoji \u0026 results     |\n| PostToolUseFailure | ❌     | Tool execution failed  | Session-based | Error details \u0026 interrupt status     |\n| PermissionRequest  | 🔐     | Permission requested   | Session-based | Tool name \u0026 permission suggestions   |\n| Notification       | 🔔     | User interactions      | Session-based | Notification message \u0026 type          |\n| Stop               | 🛑     | Response completion    | Session-based | Summary \u0026 chat transcript            |\n| SubagentStart      | 🟢     | Subagent started       | Session-based | Agent ID \u0026 type                      |\n| SubagentStop       | 👥     | Subagent finished      | Session-based | Agent details \u0026 transcript path      |\n| PreCompact         | 📦     | Context compaction     | Session-based | Trigger \u0026 custom instructions        |\n| UserPromptSubmit   | 💬     | User prompt submission | Session-based | Prompt: _\"user message\"_ (italic)    |\n| SessionStart       | 🚀     | Session started        | Session-based | Source, model \u0026 agent type           |\n| SessionEnd         | 🏁     | Session ended          | Session-based | End reason (clear/logout/exit/other) |\n\n### UserPromptSubmit Event (v1.0.54+)\n\nThe `UserPromptSubmit` hook captures every user prompt before Claude processes it. In the UI:\n- Displays as `Prompt: \"user's message\"` in italic text\n- Shows the actual prompt content inline (truncated to 100 chars)\n- Summary appears on the right side when AI summarization is enabled\n- Useful for tracking user intentions and conversation flow\n\n## 🔌 Integration\n\n### For New Projects\n\n1. Copy the event sender:\n   ```bash\n   cp .claude/hooks/send_event.py YOUR_PROJECT/.claude/hooks/\n   ```\n\n2. Add to your `.claude/settings.json`:\n   ```json\n   {\n     \"hooks\": {\n       \"PreToolUse\": [{\n         \"matcher\": \".*\",\n         \"hooks\": [{\n           \"type\": \"command\",\n           \"command\": \"uv run .claude/hooks/send_event.py --source-app YOUR_APP --event-type PreToolUse\"\n         }]\n       }]\n     }\n   }\n   ```\n\n### For This Project\n\nAlready integrated! Hooks run both validation and observability:\n```json\n{\n  \"type\": \"command\",\n  \"command\": \"uv run .claude/hooks/pre_tool_use.py\"\n},\n{\n  \"type\": \"command\",\n  \"command\": \"uv run .claude/hooks/send_event.py --source-app cc-hook-multi-agent-obvs --event-type PreToolUse\"\n}\n```\n\n## 🧪 Testing\n\n```bash\n# System validation\n./scripts/test-system.sh\n\n# Quick test event via just\njust test-event\n\n# Check server/client health\njust health\n\n# Manual event test\ncurl -X POST http://localhost:4000/events \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"source_app\": \"test\",\n    \"session_id\": \"test-123\",\n    \"hook_event_type\": \"PreToolUse\",\n    \"payload\": {\"tool_name\": \"Bash\", \"tool_input\": {\"command\": \"ls\"}}\n  }'\n\n# Test a hook script directly\njust hook-test pre_tool_use\n```\n\n## ⚙️ Configuration\n\n### Environment Variables\n\nCopy `.env.sample` to `.env` in the project root and fill in your API keys:\n\n**Application Root** (`.env` file):\n- `ANTHROPIC_API_KEY` – Anthropic Claude API key (required)\n- `ENGINEER_NAME` – Your name (for logging/identification)\n- `OPENAI_API_KEY` – OpenAI API key (optional)\n- `ELEVENLABS_API_KEY` – ElevenLabs API key (optional, for TTS)\n- `FIRECRAWL_API_KEY` – Firecrawl API key (optional, for web scraping)\n\n**Client** (`.env` file in `apps/client/.env`):\n- `VITE_MAX_EVENTS_TO_DISPLAY=100` – Maximum events to show (removes oldest when exceeded)\n\n### Server Ports\n\n- Server: `4000` (HTTP/WebSocket)\n- Client: `5173` (Vite dev server)\n\n## 🤖 Agent Teams\n\nThis project supports Claude Code Agent Teams for orchestrating multi-agent workflows. Teams are enabled via the `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` environment variable in `.claude/settings.json`.\n\n### Team Agents\n\n- **Builder** (`.claude/agents/team/builder.md`): Engineering agent that executes one task at a time. Includes PostToolUse hooks for `ruff` and `ty` validation on Write/Edit operations.\n- **Validator** (`.claude/agents/team/validator.md`): Read-only validation agent that inspects work without modifying files. Cannot use Write, Edit, or NotebookEdit tools.\n\n### Planning with Teams\n\nUse the `/plan_w_team` slash command to create team-based implementation plans:\n\n```bash\n/plan_w_team \"Add a new feature for X\"\n```\n\nThis generates a spec document in `specs/` with task breakdowns, team member assignments, dependencies, and acceptance criteria. Plans are validated by Stop hook validators that ensure required sections are present.\n\nExecute a plan with:\n```bash\n/build specs/\u003cplan-name\u003e.md\n```\n\n## 🔭 Multi-Agent Orchestration \u0026 Observability\n\n[![Multi-Agent Orchestration with Claude Code](images/claude-code-multi-agent-orchestration.png)](https://youtu.be/RpUTF_U4kiw)\n\nThe true constraint of agentic engineering is no longer what the models can do — it's our ability to prompt engineer and context engineer the outcomes we need, and build them into reusable systems. Multi-agent orchestration changes the game by letting you spin up teams of specialized agents that each focus on one task extraordinarily well, work in parallel, and shut down when done. See the official [Claude Code Agent Teams documentation](https://code.claude.com/docs/en/agent-teams) for the full reference.\n\n### The Orchestration Workflow\n\nThe full multi-agent orchestration lifecycle follows this pattern:\n\n1. **Create a team** — `TeamCreate` sets up the coordination layer\n2. **Create tasks** — `TaskCreate` builds the centralized task list that drives all work\n3. **Spawn agents** — `Task` deploys specialized agents (builder, validator, etc.) into their own Tmux panes with independent context windows\n4. **Work in parallel** — Agents execute their assigned tasks simultaneously, communicating via `SendMessage`\n5. **Shut down agents** — Completed agents are gracefully terminated\n6. **Delete the team** — `TeamDelete` cleans up all coordination state\n\n### Why Observability Matters\n\nWhen you have multiple agents running in parallel — each with their own context window, session ID, and task assignments — you need visibility into what's happening across the swarm. Without observability, you're vibe coding at scale. With it, you can:\n\n- **Trace every tool call** across all agents in real-time via the dashboard\n- **Filter by agent swim lane** to inspect individual agent behavior\n- **Track task lifecycle** — see TaskCreate, TaskUpdate, and SendMessage events flow between agents\n- **Spot failures early** — PostToolUseFailure and PermissionRequest events surface issues before they cascade\n- **Measure throughput** — the live pulse chart shows activity density across your agent fleet\n\nThis is what separates engineers from vibe coders: understanding what's happening underneath the hood so you can scale compute to scale impact with confidence.\n\n## 🛡️ Security Features\n\n- Blocks dangerous `rm -rf` commands via `deny_tool()` JSON pattern (allowed only in specific directories)\n- Prevents access to sensitive files (`.env`, private keys)\n- `stop_hook_active` guard in `stop.py` and `subagent_stop.py` prevents infinite hook loops\n- Stop hook validators ensure plan files contain required sections before completion\n- Validates all inputs before execution\n\n## 📊 Technical Stack\n\n- **Server**: Bun, TypeScript, SQLite\n- **Client**: Vue 3, TypeScript, Vite, Tailwind CSS\n- **Hooks**: Python 3.11+, Astral uv, TTS (ElevenLabs or OpenAI), LLMs (Claude or OpenAI)\n- **Communication**: HTTP REST, WebSocket\n\n## Master AI **Agentic Coding**\n\u003e And prepare for the future of software engineering\n\nLearn tactical agentic coding patterns with [Tactical Agentic Coding](https://agenticengineer.com/tactical-agentic-coding?y=opsorch)\n\nFollow the [IndyDevDan YouTube channel](https://www.youtube.com/@indydevdan) to improve your agentic coding advantage.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdisler%2Fclaude-code-hooks-multi-agent-observability","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdisler%2Fclaude-code-hooks-multi-agent-observability","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdisler%2Fclaude-code-hooks-multi-agent-observability/lists"}