Preflight Install
Automated Installation
The easist way to set everything up is to just use the installer. You can examine the source code of the installer here and you can watch a video of the installer in action here. Claude, Codex, and Gemini CLI each use OpenTelemetry (which is how this website works) but they each implement it in a slightly different way, which means enabling opentelemetry and enabling JTPCK is unique in each case. The installer solves for each unique case and installs everything in one shot.
$ brew tap jessewaites/jtpck && brew install jtpck && jtpck xxx-xxxxxx-xxx-xxxx
Log in and revist this page to replace placeholder values with your real private UUID
Manual Installation
Configure OpenTelemetry manually to send telemetry to JTPCK
Your Private UUID:
xxx-xxxxxx-xxx-xxxx
Log in and revist this page to replace placeholder values with your real private UUID
Option 1: Wrapper Script (Recommended)
Works from any context (IDE, launcher, terminal)
1. Create wrapper directory and script:
mkdir -p ~/.jtpck
2. Create ~/.jtpck/claude-wrapper:
#!/bin/bash
export CLAUDE_CODE_ENABLE_TELEMETRY="1"
export OTEL_SERVICE_NAME="claude-code"
export OTEL_RESOURCE_ATTRIBUTES="user.private_uuid=xxx-xxxxxx-xxx-xxxx"
export OTEL_EXPORTER_OTLP_PROTOCOL="http/json"
export OTEL_EXPORTER_OTLP_ENDPOINT="https://JTPCK.com/api/v1/telemetry"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer xxx-xxxxxx-xxx-xxxx"
export OTEL_TRACES_EXPORTER="otlp"
export OTEL_METRICS_EXPORTER="otlp"
export OTEL_LOGS_EXPORTER="otlp"
exec /usr/local/bin/claude "$@"
3. Make executable and add alias:
chmod +x ~/.jtpck/claude-wrapper
# Add to ~/.zshrc or ~/.bashrc:
alias claude='~/.jtpck/claude-wrapper'
source ~/.zshrc
Option 2: Shell Exports Only
Simpler but only works when launched from terminal
Add to ~/.zshrc:
# Claude Code Telemetry
export CLAUDE_CODE_ENABLE_TELEMETRY="1"
export OTEL_SERVICE_NAME="claude-code"
export OTEL_RESOURCE_ATTRIBUTES="user.private_uuid=xxx-xxxxxx-xxx-xxxx"
export OTEL_EXPORTER_OTLP_PROTOCOL="http/json"
export OTEL_EXPORTER_OTLP_ENDPOINT="https://JTPCK.com/api/v1/telemetry"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer xxx-xxxxxx-xxx-xxxx"
export OTEL_TRACES_EXPORTER="otlp"
export OTEL_METRICS_EXPORTER="otlp"
export OTEL_LOGS_EXPORTER="otlp"
Reload shell:
source ~/.zshrc
Step 1: Configure config.toml (Required)
Add to ~/.codex/config.toml:
[otel]
environment = "prod"
log_user_prompt = false
[otel.exporter.otlp-http]
endpoint = "https://JTPCK.com/api/v1/telemetry/v1/traces"
protocol = "binary"
[otel.exporter.otlp-http.headers]
Authorization = "Bearer xxx-xxxxxx-xxx-xxxx"
Step 2a: Wrapper Script (Recommended)
Works from any context (IDE, launcher, terminal)
1. Create ~/.jtpck/codex-wrapper:
#!/bin/bash
export CODEX_ENABLE_TELEMETRY="1"
export CODEX_OTEL_LOG_USER_PROMPT="false"
export CODEX_OTEL_EXPORT_USAGE_METRICS="true"
export CODEX_OTEL_INCLUDE_TOKEN_COUNTS="true"
export OTEL_SERVICE_NAME="codex"
export OTEL_RESOURCE_ATTRIBUTES="user.private_uuid=xxx-xxxxxx-xxx-xxxx"
export OTEL_EXPORTER_OTLP_PROTOCOL="http/json"
export OTEL_EXPORTER_OTLP_ENDPOINT="https://JTPCK.com/api/v1/telemetry/v1/traces"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer xxx-xxxxxx-xxx-xxxx"
export OTEL_TRACES_EXPORTER="otlp"
export OTEL_METRICS_EXPORTER="otlp"
export OTEL_LOGS_EXPORTER="otlp"
exec /opt/homebrew/bin/codex "$@"
Update the codex path with: which codex
2. Make executable and add alias:
chmod +x ~/.jtpck/codex-wrapper
# Add to ~/.zshrc or ~/.bashrc:
alias codex='~/.jtpck/codex-wrapper'
source ~/.zshrc
Step 2b: Shell Exports Only (Alternative)
Simpler but only works when launched from terminal
Add to ~/.zshrc:
# Codex Telemetry
export CODEX_ENABLE_TELEMETRY="1"
export CODEX_OTEL_LOG_USER_PROMPT="false"
export CODEX_OTEL_EXPORT_USAGE_METRICS="true"
export CODEX_OTEL_INCLUDE_TOKEN_COUNTS="true"
Reload shell:
source ~/.zshrc
Step 1: Configure settings.json (Required)
Create/edit ~/.gemini/settings.json:
{
"telemetry": {
"enabled": true,
"target": "local",
"otlpEndpoint": "https://JTPCK.com/api/v1/telemetry",
"otlpProtocol": "http",
"useCollector": true
}
}
Step 2a: Wrapper Script (Recommended)
Works from any context (IDE, launcher, terminal)
1. Create ~/.jtpck/gemini-wrapper:
#!/bin/bash
export GEMINI_TELEMETRY_ENABLED="true"
export GEMINI_TELEMETRY_TARGET="local"
export GEMINI_TELEMETRY_USE_COLLECTOR="true"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer xxx-xxxxxx-xxx-xxxx"
export OTEL_RESOURCE_ATTRIBUTES="user.private_uuid=xxx-xxxxxx-xxx-xxxx"
exec /usr/local/bin/gemini "$@"
Update the gemini path with: which gemini
2. Make executable and add alias:
chmod +x ~/.jtpck/gemini-wrapper
# Add to ~/.zshrc or ~/.bashrc:
alias gemini='~/.jtpck/gemini-wrapper'
source ~/.zshrc
Step 2b: Shell Exports Only (Alternative)
Simpler but only works when launched from terminal
Add to ~/.zshrc:
# Gemini CLI Telemetry
export GEMINI_TELEMETRY_ENABLED="true"
export GEMINI_TELEMETRY_TARGET="local"
export GEMINI_TELEMETRY_USE_COLLECTOR="true"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer xxx-xxxxxx-xxx-xxxx"
export OTEL_RESOURCE_ATTRIBUTES="user.private_uuid=xxx-xxxxxx-xxx-xxxx"
Reload shell:
source ~/.zshrc