by tobilg
Unified local observability for AI coding assistants
# Add to your Claude Code skills
git clone https://github.com/tobilg/ai-observerLast scanned: 5/30/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-30T15:31:19.266Z",
"npmAuditRan": true,
"pipAuditRan": true
}ai-observer is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by tobilg. Unified local observability for AI coding assistants. It has 250 GitHub stars.
Yes. ai-observer passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/tobilg/ai-observer" and add it to your Claude Code skills directory (see the Installation section above).
ai-observer is primarily written in Go. It is open-source under tobilg on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh ai-observer against similar tools.
No comments yet. Be the first to share your thoughts!
Unified local observability for AI coding assistants
AI Observer is a self-hosted, single-binary, OpenTelemetry-compatible observability backend designed specifically for monitoring local AI coding tools like Claude Code, Gemini CLI, OpenAI Codex CLI, GitHub Copilot, and OpenCode.
Track token usage, costs, API latency, error rates, and session activity across all your AI coding assistants in one unified dashboard—with real-time updates and zero external dependencies.
AI coding assistants are becoming essential development tools, but understanding their behavior and costs remains a challenge:
linux/amd64 and linux/arm64



docker run -d \
-p 8080:8080 \
-p 4318:4318 \
-v ai-observer-data:/app/data \
--name ai-observer \
tobilg/ai-observer:latest
Dashboard: http://localhost:8080
Using a local directory for data persistence:
# Create a local data directory
mkdir -p ./ai-observer-data
# Run with local volume mount
docker run -d \
-p 8080:8080 \
-p 4318:4318 \
-v $(pwd)/ai-observer-data:/app/data \
-e AI_OBSERVER_DATABASE_PATH=/app/data/ai-observer.duckdb \
--name ai-observer \
tobilg/ai-observer:latest
This stores the DuckDB database in your local ./ai-observer-data directory, making it easy to backup or inspect.
brew tap tobilg/ai-observer
brew install ai-observer
ai-observer
Download the latest release for your platform from Releases, then:
./ai-observer
git clone https://github.com/tobilg/ai-observer.git
cd ai-observer
make setup # Install dependencies
make all # Build single binary with embedded frontend
./bin/ai-observer
| Variable | Default | Description |
|---|---|---|
AI_OBSERVER_API_PORT |
8080 |
HTTP server port (dashboard + API) |
AI_OBSERVER_OTLP_PORT |
4318 |
OTLP ingestion port |
AI_OBSERVER_DATABASE_PATH |
./data/ai-observer.duckdb (binary) or /app/data/ai-observer.duckdb (Docker) |
DuckDB database file path |
AI_OBSERVER_FRONTEND_URL |
http://localhost:5173 |
Allowed CORS origin (dev mode) |
AI_OBSERVER_LOG_LEVEL |
INFO |
Log level: DEBUG, INFO, WARN, ERROR |
CORS and WebSocket origins allow AI_OBSERVER_FRONTEND_URL plus http://localhost:5173 and http://localhost:8080; set AI_OBSERVER_FRONTEND_URL when serving a custom UI origin.
ai-observer [command] [options]
Commands:
| Command | Description |
|---|---|
import |
Import local sessions from AI tool files |
export |
Export telemetry data to Parquet files |
delete |
Delete telemetry data from database |
setup |
Show setup instructions for AI tools |
watch |
Watch local session files and import incrementally |
serve |
Start the OTLP server (default if no command) |
Global Options:
| Option | Description |
|---|---|
-h, --help |
Show help message and exit |
-v, --version |
Show version information and exit |
Examples:
# Start the server (default, no command needed)
ai-observer
# Show version
ai-observer --version
# Show setup instructions for Claude Code
ai-observer setup claude-code
# Show setup instructions for GitHub Copilot
ai-observer setup github-copilot
# Show setup instructions for OpenCode
ai-observer setup opencode
# Import data from all file-backed AI tools
ai-observer import all
# Export data to Parquet files
ai-observer export all --output ./export
# Delete data in a date range
ai-observer delete all --from 2025-01-01 --to 2025-01-31
# Watch local session files for changes
ai-observer watch all
Import historical session data from local AI coding tool files into AI Observer.
ai-observer import [claude-code|codex|gemini|all] [options]
| Option | Description |
|---|---|
--from DATE |
Only import sessions from DATE (YYYY-MM-DD) |
--to DATE |
Only import sessions up to DATE (YYYY-MM-DD) |
--force |
Re-import already imported files |
--dry-run |
Show what would be imported without making changes |
--skip-confirm |
Skip confirmation prompt |
--purge |
Delete existing data in time range before importing |
--pricing-mode MODE |
Cost calculation mode for Claude: auto (default), calculate, display |
--verbose |
Show detailed progress |
File locations:
| Tool | Default Location |
|---|---|
| Claude Code | ~/.claude/projects/**/*.jsonl |
| Codex CLI | ~/.codex/sessions/*.jsonl |
| Gemini CLI | ~/.gemini/tmp/**/session-*.json |
Override with environment variables: AI_OBSERVER_CLAUDE_PATH, AI_OBSERVER_CODEX_PATH, AI_OBSERVER_GEMINI_PATH
Examples:
# Import from all file-backed tools
ai-observer import all
# Import Claude data from specific date range
ai-observer import claude-code --from 2025-01-01 --to 2025-12-31
# Dry run to see what would be imported
ai-observer import all --dry-run
# Force re-import and recalculate costs
ai-observer import claude-code --force --pricing-mode calculate
See docs/import.md for detailed documentation and docs/pricing.md for pricing calculation details.
Watch local session files in real-time and import new data incrementally as it's written. This is an alternative to configuring OTLP exporters for Claude Code, Codex CLI, and Gemini CLI — just start the watcher and it picks up data from those tools' native log files.
ai-observer watch [claude-code|codex|gemini|all] [options]
| Option | Description |
|---|---|
--backfill |
On first start, load all existing session data before watching |
How it works:
--backfill: Loads all existing session data, then watches for new changes.At startup, the watcher detects which tools are installed and reports their status:
File watcher starting...
[claude-code] Watching ~/.claude/projects/ (2 directories)
[codex] Watching ~/.codex/sessions/ (1 directory)
[gemini] ~/.gemini/tmp/ not found — will poll for directory creation
Directories that don't exist yet are polled every 30 seconds and automatically added when they appear.
File locations are the same as the import command — override with AI_OBSERVER_CLAUDE_PATH, AI_OBSERVER_CODEX_PATH, AI_OBSERVER_GEMINI_PATH.
Note: Watch mode and OTLP ingestion (
serve) are mutually exclusive. Running both simultaneously would produce duplicate data. Usewatchfor file-based ingestion orservefor OTLP — not both. GitHub Copilot and OpenCode are OTLP-only in AI Observer; useserveand the OTLP setup settings below.
Examples:
# Watch all file-backed tools for new data
ai-observer watch all
# Watch only Claude Code sessions
ai-observer watch claude-code
# First run: load all historical data, then watch
ai-observer watch all --backfill
# Watch Gemini CLI only
ai-observer watch gemini
Export telemetry data to portable Parquet files with an optional DuckDB views database.
ai-observer export [claude-code|codex|gemini|opencode|copilot-chat|github-copilot|all] --output <directory> [options]
| Option | Description |
|---|---|
--output DIR |
Output directory (required) |
--from DATE |
Start date |