원클릭으로
logs
Query the loxel Axiom dataset to investigate logs. Use the `axiom query` CLI with APL (Axiom Processing Language).
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Query the loxel Axiom dataset to investigate logs. Use the `axiom query` CLI with APL (Axiom Processing Language).
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Add a new language server to loxel with full integration across all layers (build/download, server manager, server routing, client connection, Monaco registration, highlighting/icons, editor URI scheme, packaging). Use when adding support for a new programming language or file type that needs LSP features like completions, hover, diagnostics, or go-to-definition.
Compact the current conversation into a handoff document for another agent to pick up. Use when ending a session, switching contexts, or preparing work for a fresh agent to continue.
Apply Convex implementation rules and review standards for backend work. Use when creating or modifying Convex queries, mutations, actions, HTTP endpoints, schema/indexes, validators, pagination, cron jobs, or TypeScript types in Convex codebases.
Create or improve a Claude Code skill (SKILL.md). Use when building a new skill, reviewing an existing skill for quality, or converting a repeated workflow into a reusable skill.
Generate architecture diagrams as .excalidraw files from codebase analysis. Use when the user asks to create architecture diagrams, system diagrams, visualize codebase structure, generate excalidraw files or describe flows visually.
Explore locally cloned open source package internals in ~/git/open-source/. Use when checking a dependency's internal API, types, behavior, feature availability, or docs — e.g. "how does convex handle pagination", "what args does excalidraw's convertToExcalidrawElements accept", "check if dockview supports custom tab renderers".
| name | logs |
| description | Query the loxel Axiom dataset to investigate logs. Use the `axiom query` CLI with APL (Axiom Processing Language). |
| allowed-tools | Bash |
Interpret the user's request: $ARGUMENTS
All loxel logs are in the loxel dataset. Always start queries with ['loxel'].
All logs use the same schema via Direct HTTP transport (@axiomhq/js).
Sources: ccm-daemon, ccm-mobile, channel-worker
Key fields:
message - log messagelevel - log level: "debug", "info", "warn", "error"fields.source - source identifier: "ccm-daemon", "ccm-mobile", "channel-worker"fields.* - structured context (e.g. fields.sessionId, fields.terminalId, fields.type, fields.channelId)fields.error.name - error class name (e.g. "ReferenceError", "StringError")fields.error.message - error message textfields.error.cause.* - recursive error cause chainfields.stack - stack tracefields.componentStack - React component stack (ccm-mobile)axiom query "<APL_QUERY>" --start-time="-<N>h" [-f table|json]
--start-time accepts relative hours: -1h, -24h, -168h (7 days). Does NOT accept -7d format.-f table for aggregations and human-readable output (default)-f json for raw log entries (one JSON object per line)axiom query "..." -f json | python3 -c "
import json, sys
for line in sys.stdin:
line = line.strip()
if not line: continue
try:
obj = json.loads(line)
filtered = {k: v for k, v in obj.items() if v is not None}
print(json.dumps(filtered, indent=2))
print('---')
except: pass
"
['loxel'] | where ['fields.source'] == 'ccm-daemon'
['loxel'] | where ['fields.source'] == 'channel-worker'
['loxel'] | where level == 'error'
['loxel'] | where message contains 'hook'
['loxel'] | where message startswith 'Daemon'
['loxel'] | where isnotnull(['fields.error.name'])
| project _time, message, level, ['fields.source']
| project _time, message, ['fields.error.name'], ['fields.error.message']
| sort by _time desc
| take 20
-f table)| summarize count() by ['fields.source']
| summarize count() by level
| summarize count() by message | sort by count_ desc | take 15
| summarize count() by bin_auto(_time)
| summarize count() by bin_auto(_time), ['fields.source']
Fields containing dots must be quoted: ['fields.source'], ['fields.sessionId'], ['service.name']
Simple fields without dots need no quoting: message, level, severity, body
The != operator does not work with string literals in APL. Use not() instead:
| where not(body == 'message')
| where not(['fields.source'] == 'ccm-daemon')
Use isnotnull():
| where isnotnull(['fields.error.name'])
axiom query "['loxel'] | where level == 'error' | project _time, message, ['fields.error.name'], ['fields.error.message'], ['fields.source'] | sort by _time desc | take 20" --start-time="-24h" -f table
axiom query "['loxel'] | where ['fields.source'] == 'ccm-daemon' | project _time, message, ['fields.type'], ['fields.sessionId'] | sort by _time desc | take 20" --start-time="-24h" -f table
axiom query "['loxel'] | where ['fields.source'] == 'ccm-mobile' | where level == 'error' | project _time, message, ['fields.error.name'], ['fields.error.message'], ['fields.componentStack'] | sort by _time desc | take 20" --start-time="-24h" -f table
axiom query "['loxel'] | where level == 'error' | summarize count() by bin_auto(_time)" --start-time="-168h" -f table
axiom query "['loxel'] | summarize count() by ['fields.source']" --start-time="-24h" -f table
axiom query "['loxel'] | summarize count() by message | sort by count_ desc | take 20" --start-time="-24h" -f table
axiom query "['loxel'] | where ['fields.source'] == 'channel-worker' | project _time, message, level, ['fields.channelId'] | sort by _time desc | take 20" --start-time="-24h" -f table
axiom query "['loxel'] | where ['fields.sessionId'] == 'SESSION_ID_HERE' | project _time, message, ['fields.type'] | sort by _time asc" --start-time="-168h" -f table
-24h) and narrow down as needed-f table for aggregations and overviews, -f json when you need full log detailsfields.type indicates the hook event type (e.g. PostToolUse)fields.channelId identifies the WebSocket channel