Monitoring Setup Skill
Enable or disable OpenTelemetry console monitoring. When enabled, Claude Code outputs usage metrics (cost, tokens, sessions, LOC, commits, PRs, active time) and events (tool results, API requests) to the terminal.
Natural Language Triggers
This skill activates when the user mentions any of:
- Korean: "모니터링", "텔레메트리", "사용량 추적", "메트릭", "모니터링 켜줘", "텔레메트리 활성화"
- English: "monitoring", "telemetry", "usage tracking", "metrics", "enable monitoring"
- Combined with actions: "켜", "끄", "활성화", "비활성화", "설정", "enable", "disable", "setup"
Commands
enable (default)
- Read
.claude/settings.local.json (create if not exists)
- Add or update
env field with:{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "console",
"OTEL_LOGS_EXPORTER": "console"
}
}
- Preserve all existing settings
- Report to user:
[Done] OpenTelemetry Console Monitoring enabled
Configured in: .claude/settings.local.json
Metrics: sessions, cost, tokens, LOC, commits, PRs, active time
Events: tool results, API requests, tool decisions
Note: Takes effect on next `claude` session restart.
To disable: /monitoring-setup disable
disable
- Read
.claude/settings.local.json
- Remove OTel-related keys from
env:
CLAUDE_CODE_ENABLE_TELEMETRY
OTEL_METRICS_EXPORTER
OTEL_LOGS_EXPORTER
- If
env object becomes empty, remove env field entirely
- Report:
[Done] OpenTelemetry Monitoring disabled
Removed from: .claude/settings.local.json
Takes effect on next session restart.
status
- Read
.claude/settings.local.json
- Check for OTel env vars
- Report current state:
[Monitoring Status]
├── Enabled: Yes/No
├── Metrics exporter: console / otlp / none
├── Logs exporter: console / otlp / none
└── Config: .claude/settings.local.json
Implementation Notes
settings.local.json is NOT git-tracked (local to user)
- Each user enables monitoring independently
- No infrastructure required for console mode
- Metrics appear in stderr during Claude Code execution
- Default export interval: 60s for metrics, 5s for events
Available Metrics
| Metric |
Description |
Unit |
claude_code.session.count |
CLI sessions started |
count |
claude_code.cost.usage |
Session cost |
USD |
claude_code.token.usage |
Tokens used (input/output/cache) |
tokens |
claude_code.lines_of_code.count |
Code lines modified (added/removed) |
count |
claude_code.commit.count |
Git commits created |
count |
claude_code.pull_request.count |
Pull requests created |
count |
claude_code.active_time.total |
Active usage time |
seconds |
Available Events
| Event |
Description |
claude_code.tool_result |
Tool execution results with duration |
claude_code.api_request |
API request details with cost/tokens |
claude_code.api_error |
API error details |
claude_code.tool_decision |
Tool accept/reject decisions |
claude_code.user_prompt |
User prompt metadata (content redacted by default) |
Upgrade Path
For production monitoring, upgrade from console to OTLP:
# In settings.local.json env:
OTEL_METRICS_EXPORTER=otlp
OTEL_LOGS_EXPORTER=otlp
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
Advanced OTel Configuration
Additional Metrics
| Metric |
Description |
Unit |
code_edit_tool.decision |
Edit tool accept/reject decisions |
count |
Exporter Configuration
{
"env": {
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4317",
"OTEL_RESOURCE_ATTRIBUTES": "service.name=claude-code,service.version=2.1.85"
}
}
Cardinality Controls
| Variable |
Description |
Default |
OTEL_LOG_TOOL_DETAILS |
Include tool input/output in logs |
false |
OTEL_METRICS_INCLUDE_TOOL_NAME |
Include tool name dimension |
true |
OTEL_METRICS_INCLUDE_MODEL |
Include model dimension |
true |
Multi-Exporter Syntax
# Send metrics to both console and OTLP
OTEL_METRICS_EXPORTER=console,otlp
OTEL_LOGS_EXPORTER=console,otlp
Prometheus Exporter
OTEL_METRICS_EXPORTER=prometheus
OTEL_EXPORTER_PROMETHEUS_PORT=9464
Data Privacy
Environment variables to control data collection and telemetry:
| Variable |
Description |
DISABLE_TELEMETRY |
Disable all telemetry collection |
DISABLE_ERROR_REPORTING |
Disable error reporting to Anthropic |
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC |
Disable non-essential network traffic |
CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY |
Disable feedback survey prompts |
DO_NOT_TRACK |
Standard DNT signal |
Enterprise Configuration
{
"env": {
"DISABLE_TELEMETRY": "1",
"DISABLE_ERROR_REPORTING": "1",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
}
}
HTTP-Level Inspection (Optional)
For deeper payload-level debugging beyond aggregated metrics, Claude Inspector provides MITM proxy inspection of Claude Code HTTP traffic.
| Aspect |
OTel Monitoring (this skill) |
Claude Inspector |
| Layer |
Application (hooks, stdout) |
HTTP (MITM proxy) |
| Metrics |
Aggregated (cost, tokens, duration) |
Per-request payload breakdown |
| Cache visibility |
Not available |
Prompt Cache hit/miss rates |
| Sub-agent view |
Summary via hooks |
Full parent vs sub-agent context comparison |
| Setup |
Built-in (hooks + statusline) |
External tool (Homebrew on macOS) |
When to Use
- OTel monitoring: Daily operations, cost tracking, performance trends
- Claude Inspector: Debugging specific payload issues, measuring CLAUDE.md token impact, verifying ecomode (R013) effectiveness, profiling sub-agent context inheritance
Setup
# macOS
brew install kangraemin/tap/claude-inspector
# Run proxy
claude-inspector
Claude Inspector is external to oh-my-customcode and does not require any project configuration changes.
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: omcustommonitoring-setup3description: Enable/disable OpenTelemetry console monitoring for Claude Code usage tracking Use when this capability is needed.4---56# Monitoring Setup Skill78Enable or disable OpenTelemetry console monitoring. When enabled, Claude Code outputs usage metrics (cost, tokens, sessions, LOC, commits, PRs, active time) and events (tool results, API requests) to the terminal.910## Natural Language Triggers1112This skill activates when the user mentions any of:13- Korean: "모니터링", "텔레메트리", "사용량 추적", "메트릭", "모니터링 켜줘", "텔레메트리 활성화"14- English: "monitoring", "telemetry", "usage tracking", "metrics", "enable monitoring"15- Combined with actions: "켜", "끄", "활성화", "비활성화", "설정", "enable", "disable", "setup"1617## Commands1819### enable (default)20211. Read `.claude/settings.local.json` (create if not exists)222. Add or update `env` field with:23 ```json24 {25 "env": {26 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",27 "OTEL_METRICS_EXPORTER": "console",28 "OTEL_LOGS_EXPORTER": "console"29 }30 }31 ```323. Preserve all existing settings334. Report to user:34 ```35 [Done] OpenTelemetry Console Monitoring enabled3637 Configured in: .claude/settings.local.json38 Metrics: sessions, cost, tokens, LOC, commits, PRs, active time39 Events: tool results, API requests, tool decisions4041 Note: Takes effect on next `claude` session restart.42 To disable: /monitoring-setup disable43 ```4445### disable46471. Read `.claude/settings.local.json`482. Remove OTel-related keys from `env`:49 - `CLAUDE_CODE_ENABLE_TELEMETRY`50 - `OTEL_METRICS_EXPORTER`51 - `OTEL_LOGS_EXPORTER`523. If `env` object becomes empty, remove `env` field entirely534. Report:54 ```55 [Done] OpenTelemetry Monitoring disabled5657 Removed from: .claude/settings.local.json58 Takes effect on next session restart.59 ```6061### status62631. Read `.claude/settings.local.json`642. Check for OTel env vars653. Report current state:66 ```67 [Monitoring Status]68 ├── Enabled: Yes/No69 ├── Metrics exporter: console / otlp / none70 ├── Logs exporter: console / otlp / none71 └── Config: .claude/settings.local.json72 ```7374## Implementation Notes7576- `settings.local.json` is NOT git-tracked (local to user)77- Each user enables monitoring independently78- No infrastructure required for console mode79- Metrics appear in stderr during Claude Code execution80- Default export interval: 60s for metrics, 5s for events8182## Available Metrics8384| Metric | Description | Unit |85|--------|-------------|------|86| `claude_code.session.count` | CLI sessions started | count |87| `claude_code.cost.usage` | Session cost | USD |88| `claude_code.token.usage` | Tokens used (input/output/cache) | tokens |89| `claude_code.lines_of_code.count` | Code lines modified (added/removed) | count |90| `claude_code.commit.count` | Git commits created | count |91| `claude_code.pull_request.count` | Pull requests created | count |92| `claude_code.active_time.total` | Active usage time | seconds |9394## Available Events9596| Event | Description |97|-------|-------------|98| `claude_code.tool_result` | Tool execution results with duration |99| `claude_code.api_request` | API request details with cost/tokens |100| `claude_code.api_error` | API error details |101| `claude_code.tool_decision` | Tool accept/reject decisions |102| `claude_code.user_prompt` | User prompt metadata (content redacted by default) |103104## Upgrade Path105106For production monitoring, upgrade from console to OTLP:107108```bash109# In settings.local.json env:110OTEL_METRICS_EXPORTER=otlp111OTEL_LOGS_EXPORTER=otlp112OTEL_EXPORTER_OTLP_PROTOCOL=grpc113OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317114```115116## Advanced OTel Configuration117118### Additional Metrics119120| Metric | Description | Unit |121|--------|-------------|------|122| `code_edit_tool.decision` | Edit tool accept/reject decisions | count |123124### Exporter Configuration125126```json127{128 "env": {129 "OTEL_METRICS_EXPORTER": "otlp",130 "OTEL_LOGS_EXPORTER": "otlp",131 "OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",132 "OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4317",133 "OTEL_RESOURCE_ATTRIBUTES": "service.name=claude-code,service.version=2.1.85"134 }135}136```137138### Cardinality Controls139140| Variable | Description | Default |141|----------|-------------|---------|142| `OTEL_LOG_TOOL_DETAILS` | Include tool input/output in logs | `false` |143| `OTEL_METRICS_INCLUDE_TOOL_NAME` | Include tool name dimension | `true` |144| `OTEL_METRICS_INCLUDE_MODEL` | Include model dimension | `true` |145146### Multi-Exporter Syntax147148```bash149# Send metrics to both console and OTLP150OTEL_METRICS_EXPORTER=console,otlp151OTEL_LOGS_EXPORTER=console,otlp152```153154### Prometheus Exporter155156```bash157OTEL_METRICS_EXPORTER=prometheus158OTEL_EXPORTER_PROMETHEUS_PORT=9464159```160161## Data Privacy162163Environment variables to control data collection and telemetry:164165| Variable | Description |166|----------|-------------|167| `DISABLE_TELEMETRY` | Disable all telemetry collection |168| `DISABLE_ERROR_REPORTING` | Disable error reporting to Anthropic |169| `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | Disable non-essential network traffic |170| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | Disable feedback survey prompts |171| `DO_NOT_TRACK` | Standard DNT signal |172173### Enterprise Configuration174175```json176{177 "env": {178 "DISABLE_TELEMETRY": "1",179 "DISABLE_ERROR_REPORTING": "1",180 "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"181 }182}183```184185## HTTP-Level Inspection (Optional)186187For deeper payload-level debugging beyond aggregated metrics, [Claude Inspector](https://github.com/kangraemin/claude-inspector) provides MITM proxy inspection of Claude Code HTTP traffic.188189| Aspect | OTel Monitoring (this skill) | Claude Inspector |190|--------|------------------------------|-----------------|191| Layer | Application (hooks, stdout) | HTTP (MITM proxy) |192| Metrics | Aggregated (cost, tokens, duration) | Per-request payload breakdown |193| Cache visibility | Not available | Prompt Cache hit/miss rates |194| Sub-agent view | Summary via hooks | Full parent vs sub-agent context comparison |195| Setup | Built-in (hooks + statusline) | External tool (Homebrew on macOS) |196197### When to Use198199- **OTel monitoring**: Daily operations, cost tracking, performance trends200- **Claude Inspector**: Debugging specific payload issues, measuring CLAUDE.md token impact, verifying ecomode (R013) effectiveness, profiling sub-agent context inheritance201202### Setup203204```bash205# macOS206brew install kangraemin/tap/claude-inspector207208# Run proxy209claude-inspector210```211212Claude Inspector is external to oh-my-customcode and does not require any project configuration changes.213214---215> Converted and distributed by [TomeVault](https://tomevault.io/claim/baekenough) — claim your Tome and manage your conversions.216<!-- tomevault:4.0:skill_md:2026-04-12 -->