{{ autoRefreshInterval ? `Auto (${autoRefreshInterval/1000}s)` : 'Refresh' }} {{ logsAutoRefreshInterval ? `Auto (${logsAutoRefreshInterval >= 60000 ? (logsAutoRefreshInterval/60000) + 'min' : (logsAutoRefreshInterval/1000) + 's'})` : 'Refresh' }} Refresh Refresh Refresh
{{ stats.requestCount || 0 }} Requests {{ stats.latestSessionId.substring(0, 8) }}
{{ usageSummary.formattedTotals.total || '0' }} Tokens
{{ stats.realtimeSummary.total_active_requests || 0 }} Active
{{ stats.configCount || 0 }} Configs
{{ stats.requestCount > 0 ? Math.round((1 - (stats.errorCount || 0) / stats.requestCount) * 100) + '%' : '—' }} Success Rate
{{ stats.errorCount || 0 }} Errors
C
Claude :{{ services.claude.port || 3210 }}
{{ services.claude.running ? 'Online' : 'Offline' }}
{{ services.claude.runtimeSnapshot?.runtime?.active_request_count || 0 }} Active
{{ formatMilliseconds(services.claude.runtimeSnapshot?.runtime?.average_duration_ms || 0) }} Avg Time
{{ formatBytes(services.claude.processSnapshot?.memory_rss_bytes || 0) }} Memory
X
Codex :{{ services.codex.port || 3211 }}
{{ services.codex.running ? 'Online' : 'Offline' }}
{{ services.codex.runtimeSnapshot?.runtime?.active_request_count || 0 }} Active
{{ formatMilliseconds(services.codex.runtimeSnapshot?.runtime?.average_duration_ms || 0) }} Avg Time
{{ formatBytes(services.codex.processSnapshot?.memory_rss_bytes || 0) }} Memory
G
Gemini :{{ services.gemini.port || 3212 }}
{{ services.gemini.running ? 'Online' : 'Offline' }}
{{ services.gemini.runtimeSnapshot?.runtime?.active_request_count || 0 }} Active
{{ formatMilliseconds(services.gemini.runtimeSnapshot?.runtime?.average_duration_ms || 0) }} Avg Time
{{ formatBytes(services.gemini.processSnapshot?.memory_rss_bytes || 0) }} Memory

Recent Clients

{{ clientStatsTotal }} total
Client Requests Errors Avg Latency
{{ item.client_ip }} {{ item.total_requests }} {{ item.error_count }} {{ formatMilliseconds(item.total_latency_avg_ms) }}
{{ currentSettingsService.label }} · {{ getServiceStatusText(currentSettingsService.id) }} · {{ getServiceActiveConfigCount(currentSettingsService.id) }}/{{ getServiceConfigCount(currentSettingsService.id) }} enabled {{ getServiceActionLabel(currentSettingsService.id) }}
Configuration Weight Health Plan Usage Recent Activity Actions
{{ config.name }} {{ config.id }}
{{ getAuthTypeLabel(config.authType) }} {{ config.active ? 'Enabled' : 'Disabled' }}
{{ getConfigSecondaryLabel(config, currentSettingsService.id) }}
{{ getConfigStats(currentSettingsService.id, config.name)?.weight || config.weight }} {{ calculateTrafficPercent(currentSettingsService.id, config.name) }}%
{{ getHealthPercent(getConfigStats(currentSettingsService.id, config.name)) }} OK {{ getConfigStats(currentSettingsService.id, config.name)?.total_success || 0 }}/{{ getConfigStats(currentSettingsService.id, config.name)?.total_requests || 0 }}
{{ getWindowSummary(currentSettingsService.id, config.name, '24h').total_requests }} req / 24h {{ getConfigStats(currentSettingsService.id, config.name)?.last_updated ? formatLastUpdated(getConfigStats(currentSettingsService.id, config.name)?.last_updated) : 'No activity' }}
Refresh: {{ extractOAuthTokenInfo(config.authJsonContent).lastRefreshAt }}  · Exp: {{ extractOAuthTokenInfo(config.authJsonContent).expiresIn }}
{{ getWindowSummary(currentSettingsService.id, config.name, '5m').total_requests }} req {{ formatSummarySuccessRate(getWindowSummary(currentSettingsService.id, config.name, '5m')) }}
No requests in the last 5m
{{ getWindowSummary(currentSettingsService.id, config.name, '5m').success || 0 }} ok {{ getWindowSummary(currentSettingsService.id, config.name, '5m').failure || 0 }} err
Diagnostics
Req {{ getWindowSummary(currentSettingsService.id, config.name, '24h').total_requests }}
OK Rate {{ formatSummarySuccessRate(getWindowSummary(currentSettingsService.id, config.name, '24h')) }}
Routed {{ getRoutingStats(currentSettingsService.id, config.name)?.count || 0 }}
Last {{ getLastResultLabel(currentSettingsService.id, config.name) }}

Request Volume

Last 24 hours by configuration

Latency

Recent and hourly distribution

Custom Prompts

Auto-inject a system prompt into all requests for each service. Claude uses the top-level system field; Codex uses the instructions field; other services use a system message in the messages array.

{{ svc[0].toUpperCase() }}

{{ svc }}

Active Not set
Save Clear
Key Status Requests Traffic Last Used
{{ keyEntry.name }} ID {{ (keyEntry.id || '').slice(0, 8) || '—' }} {{ keyEntry.active ? 'Active' : 'Disabled' }} {{ formatNumber(keyEntry.requestCount || 0) }} In {{ formatTokensK(keyEntry.inputTokens || 0) }} Out {{ formatTokensK(keyEntry.outputTokens || 0) }} Total {{ formatTokensK((keyEntry.inputTokens || 0) + (keyEntry.outputTokens || 0)) }} {{ keyEntry.lastUsedAt ? formatRelativeTime(keyEntry.lastUsedAt) : 'Never' }} Copy Edit

No Access Keys

Create your first access key to enable client authentication.

Create Key
All Sites Select Sites
A friendly name to identify this key
All Sites (default) Select specific sites
No sites configured yet

Key Created Successfully

Make sure to copy this key now. You won't be able to see it again!
{{ newlyCreatedKey.key }} Copy

Request History

{{ historyPagination.total }} logs
Success {{ historySummary.success }} Error {{ historySummary.failure }}
Request Log {{ systemConfig.requestLogEnabled ? 'Recording all' : 'Errors only' }}
Clear Logs
Service Model Config
{{ allLogsLoading ? 'Loading...' : 'No logs found' }}
{{ log.status_code || '—' }} {{ getLogServiceType(log) }} {{ log.model || '—' }} {{ log.channel || '—' }}
{{ formatRequestBodySize(log.original_body_length) }}
{{ log.duration_ms ? (log.duration_ms >= 1000 ? (log.duration_ms / 1000).toFixed(1) + 's' : log.duration_ms + 'ms') : '—' }} {{ timeAgo(log.timestamp) }}
{{ insightsError }}
Composition
Trend
Models

Model Section Composition

See how each model is split across prompt, system, tools, and other
{{ insightsOverallModels.length }} models
Context

Token Profile

How tokens are composed in this window
{{ formatTokensK(insightsOverview?.totals?.totalTokens || 0) }}
Total {{ formatTokensK(insightsOverview?.totals?.totalTokens || 0) }}
Input {{ formatTokensK(insightsOverview?.totals?.inputTokens || 0) }}
Output {{ formatTokensK(insightsOverview?.totals?.outputTokens || 0) }}
Avg {{ formatTokensK(insightsOverview?.totals?.avgTotalTokens || 0) }} per request

Client Agents

Who is sending the traffic
{{ insightsOverallAgents.length }} agents
{{ item.value }} {{ item.requestCount }} req
{{ item.requestShare.toFixed(1) }}% requests {{ item.bodyShare.toFixed(1) }}% body {{ formatTokensK(item.totalTokens) }}
No request insight data for this window.
{{ insightsError }}
Composition
Trend
Request Shape

Token Profile

Token shape for this model
{{ formatTokensK(insightsModelSummary?.totals?.totalTokens || 0) }}
Total {{ formatTokensK(insightsModelSummary?.totals?.totalTokens || 0) }}
Input {{ formatTokensK(insightsModelSummary?.totals?.inputTokens || 0) }}
Output {{ formatTokensK(insightsModelSummary?.totals?.outputTokens || 0) }}
Avg {{ formatTokensK(insightsModelSummary?.totals?.avgTotalTokens || 0) }} per request
User {{ insightsModelSummary?.totals?.userTurnCount || 0 }}
Tools {{ insightsModelSummary?.totals?.toolCount || 0 }}
Media {{ insightsModelSummary?.totals?.mediaCount || 0 }}
Traffic Sources

Client Agents

Who is driving this model
{{ insightsModelAgents.length }} agents
{{ item.value }} {{ item.requestCount }} req
{{ item.requestShare.toFixed(1) }}% requests {{ item.bodyShare.toFixed(1) }}% body {{ formatTokensK(item.totalTokens) }}
Routing

Top Configs

Routing footprint
{{ insightsModelConfigs.length }} configs
{{ item.value }} {{ item.requestCount }} req
{{ item.requestShare.toFixed(1) }}% requests {{ formatTokensK(item.totalTokens) }} {{ formatBytes(item.bodyBytes) }}
No request insight data for this model and window.
Add rules

Instructions for use:

• One rule per line, executed sequentially

• When selecting "Replace", replace source with target

• When "Delete" is selected, the content matching the source will be deleted

• Supports regular expressions

Save filter rules reload
{{ selectedLog.status_code || '---' }}
{{ selectedLog.service }} · {{ formatChannelName(selectedLog.channel) }} · {{ selectedLog.model }} · {{ selectedLog.duration_ms }}ms · {{ selectedLog.timestamp }}
{{ shareUrl ? 'Copied!' : '🔗 Share' }}
💬 User Message
{{ userMessageText }}
Client → Proxy {{ selectedLog.status_code }}
Host: 127.0.0.1:3211
Path: {{ selectedLog.path }}
Proxy → Upstream {{ selectedLog.status_code }} N/A
Host: {{ getUpstreamHost(selectedLog.target_url) }}
Path: {{ getUpstreamPath(selectedLog.target_url) }}
Not forwarded
Request
{{ selectedLog.method }} {{ selectedLog.path }} Copy
Client: {{ selectedLog.client_ip }} ID: {{ selectedLog.request_id }}
Headers ({{ Object.keys(selectedLog.original_headers || {}).length }}) Copy
No headers
{{ key }} {{ formatHeaderDisplayValue(key, selectedLog.original_headers[key]) }}
Body ({{ formatBytes(selectedLog.original_body_length) }}) Truncated Copy Format
No body
Response {{ selectedLog.status_code }}
Status: {{ selectedLog.status_code }} {{ getStatusText(selectedLog.status_code) }} Size: {{ formatBytes(selectedLog.response_bytes) }} Duration: {{ selectedLog.duration_ms }}ms
Headers ({{ Object.keys(selectedLog.response_headers || {}).length }}) Copy
No headers
{{ key }} {{ formatHeaderDisplayValue(key, selectedLog.response_headers[key]) }}
Body ({{ formatBytes(selectedLog.response_content_length) }}) Truncated Copy {{ isResponseContentParsed ? 'Raw' : 'Parse' }} Format
No response
Request was not forwarded to upstream

Realtime requests

Claude is connected Claude is not connected Codex is connected Codex not connected
connect disconnect
No real-time request yet
Serve path state time consuming operate
{{ request.service }}{{ request.channel ? ` [${request.channel}]` : '' }} {{ request.path }} {{ getStatusDisplay(request.status).text }} {{ request.displayDuration }}ms Details

Request history

Total {{ (historyPagination && historyPagination.total) || 0 }} logs (current page {{ filteredLogs.length }} logs, total {{ (historyPagination && historyPagination.overallTotal) || 0 }} logs, keep the most recent {{ systemConfig.logLimit }} logs)
Success {{ historySummary.success }} Error {{ historySummary.failure }}
refresh Clear logs
Request log {{ systemConfig.requestLogEnabled ? 'Recording all requests' : 'Only failures are recorded' }}
time Serve URL state time consuming Usage operate
{{ allLogsLoading ? 'Loading log data...' : ((allLogs.items && allLogs.items.length === 0) ? 'No log data' : 'No matching log') }}
{{ formatTimestamp(log.timestamp) }} {{ formatServiceWithChannel(log.service, log.channel) }} {{ formatMethodWithURL(log.method, log.path) }} {{ log.status_code || '-' }} FO {{ log.duration_ms ? `${log.duration_ms}ms` : '-' }} {{ formatUsageSummary(log.usage, log.service) }} Details

Overall summary

{{ usageMetricLabels[key] }}: {{ getUsageFormattedValue(usageDetails.totals, key) }}

{{ serviceName }} CLI

Total {{ getUsageFormattedValue(serviceData.overall, 'total') }}
{{ usageMetricLabels[key] }}: {{ getUsageFormattedValue(serviceData.overall, key) }}
target site {{ usageMetricLabels[key] }}
{{ formatChannelName(channelName) }} {{ getUsageFormattedValue(channelData, key) }}
No channel data yet
refresh Clear Token closure
{{ selectedRealtimeRequest.request_id }} {{ selectedRealtimeRequest.service }} {{ selectedRealtimeRequest.channel }} {{ getStatusDisplay(selectedRealtimeRequest.status).text }} {{ selectedRealtimeRequest.method }} {{ selectedRealtimeRequest.path }} {{ selectedRealtimeRequest.displayDuration }}ms {{ selectedRealtimeRequest.status_code }} {{ formatRealtimeTime(selectedRealtimeRequest.start_time) }} {{ selectedRealtimeRequest.target_url }}

real-time response streaming

{{ selectedRealtimeRequest.responseText }}
No response data yet...

Request header

{{ stringifyHeadersForDisplay(selectedRealtimeRequest.request_headers) }}

Claude model mapping rules

Add mapping
delete

There is no mapping rule yet, click the "Add Mapping" button to create the first rule

Codex model mapping rules

Add mapping
delete

There is no mapping rule yet, click the "Add Mapping" button to create the first rule

Claude model configuration mapping rules

Add mapping
delete

There is no mapping rule yet, click the "Add Mapping" button to create the first rule

Codex model configuration mapping rules

Add mapping
delete

There is no mapping rule yet, click the "Add Mapping" button to create the first rule

Cost & Pricing

Take Snapshot Compare Selected ({{ selectedSnapshots.length }}/2) Delete Selected ({{ selectedSnapshots.length }})

{{ snapshotDetail.timestamp }}

Model Details

Kiro Accounts

No Kiro accounts configured

OpenAI Cost

${{ (snapshotDetail.data.openai_cost_usd || 0).toFixed(4) }}

{{ costsComparison.snapshot2.timestamp }} → {{ costsComparison.snapshot1.timestamp }}

Claude Credits Delta
{{ costsComparison.claude.credits_delta.toFixed(2) }}
Kiro Cost (@ $0.04/credit)
${{ costsComparison.claude.kiro_cost_usd.toFixed(4) }}
Claude Credits/1M Tokens
{{ (costsComparison.claude.credits_per_1m_tokens || 0).toFixed(2) }}
Claude $/1M Tokens
${{ (costsComparison.claude.cost_per_1m_usd || 0).toFixed(4) }}
OpenAI Cost Delta
${{ costsComparison.openai.cost_delta_usd.toFixed(4) }}
OpenAI $/1M Tokens
${{ (costsComparison.openai.cost_per_1m_usd || 0).toFixed(4) }}

Model Token Delta

Kiro Credit Delta

No snapshots yet. Click "Take Snapshot" to capture current usage.

Playground

Stream
Send Clear {{ pgDuration }}ms
{{ pgError }}
{{ pgResponse }}

Server Log ({{ serverLogsTotal }} total, showing last {{ serverLogs.length }})

Refresh Clear
No server logs found.
{{ line }}