CATLX — Telemetry & Observability
This skill owns the observability of an autonomous system. Every action must be traceable to debug,
optimize, and audit it. All telemetry is stored locally and only sent externally with explicit opt-in.
Canonical detail: ../knowledge/references/telemetry.md. Load on demand.
Purpose
Give CATLX full, local, queryable visibility into what it did and why — distributed tracing, structured
metrics, causal lineage, and profiling.
When to activate
- User asks how to trace CATLX activity, view metrics, profile, or see the observability dashboard.
- Debugging "what did CATLX do in response to X" or "why did CATLX decide Y".
- Configuring sampling rate, storage, or the CLI report.
What this skill handles
- Distributed tracing & correlation — every voice command/workflow/background task gets a root
Trace ID (UUID v4); each sub-operation creates a Span with a parent Span ID. A Span records start
time, end time, module name, operation type, input-parameters hash, output hash, and status
(OK/ERROR/TIMEOUT). The Correlation Engine links traces across subsystems so the whole chain
(Workflow → Memory Broker → Vector Store → AI Provider) shares one root Trace ID.
- Causal lineage — for every AI-generated output, record which prompt was sent, which provider responded,
which memory context was injected, and which user command initiated the chain; stored as a directed graph.
- Metrics — at configurable sample rates (5% T0; 100% T2+): voice pipeline stage latencies, workflow step
durations/retries, memory op latency, AI provider latency/tokens/cost, system resource usage (CPU/RAM/GPU)
per module, error rates by module and workflow type.
- DuckDB storage — columnar, zero-dependency, time-series-capable at
/data/telemetry/telemetry.duckdb;
writes in append batches of 100; partitioned by month.
- Profiling — instrument hot paths with microsecond timing (Node.js Performance Hooks + V8 sampling
profiler); auto-profile the slowest 1% of operations; store reports in
/data/telemetry/profiles/.
- Observability dashboard — Electron shell view (Ctrl+Shift+T or tray): trace waterfall (last 10 ops),
metrics time-series, causal lineage graph viewer (Sigma.js), structured log viewer with full-text search.
On T0, replaced by CLI:
catlx telemetry report.
Requirements / constraints
- R13 (telemetry stays local): never sent to a remote endpoint without explicit opt-in.
- Sampling rate and dashboard mode come from the CapabilityMap (
telemetry_sample_rate, gui_mode).
- All tracing goes through correlation IDs shared across the PAL and Workflow Engine.
Canonical knowledge it reads
../knowledge/references/telemetry.md · ../knowledge/references/data-registries.md ·
../knowledge/references/hardware-adaptation.md · ../knowledge/rules/architectural-rules.md.
Delegation
- Dashboard / GUI rendering → delegate to
catlx-electron-shell
(skill({ name: "catlx-electron-shell" })).
- Failover correlation → delegate to
catlx-ai-provider
(skill({ name: "catlx-ai-provider" })).
- Workflow run tracing → delegate to
catlx-workflow-engine
(skill({ name: "catlx-workflow-engine" })).
- Profiling/sampling tier → delegate to
catlx-hardware-adaptation
(skill({ name: "catlx-hardware-adaptation" })).
Edge cases & warnings
- T0: dashboard unavailable → use the
catlx telemetry report CLI.
- Write amplification: batch telemetry writes (100 records) to minimize amplification.
- Corruption: DuckDB/vector stores must be recoverable (see recovery); never silently drop traces.
- Privacy: respect opt-in; a metric that could leak sensitive state should be flagged.
Component lifecycle policy (reuse → install → adapt → create)
NEVER create a new component as the default. Before building/creating anything (a sub-skill, dependency,
reference, workflow, helper, adapter, or template), check, in order:
- Reuse an existing local component (resolve aliases/equivalent capabilities first) — reuse, don't rebuild.
- Use an already-registered component from the registry.
- Install a suitable existing, trusted, supported component → validate → register → connect to the graph → use.
- Adapt an existing compatible component via a small persistent adapter/wrapper instead of re-creating it.
- Create only as last resort — then make it permanent immediately: stable id, canonical location, register,
add to the capability index + dependency graph, add provenance, use, and allow future reuse.
- Never reorganise/recreate already-generated components (no
Skill X 2 / new / temp variants); extend the
existing one. Never create a second competing knowledge source; connect back to the canonical knowledge/ layer.
Promote any reusable artifact out of /tmp/scratch into the permanent ecosystem.
Full policy: ../knowledge/rules/component-lifecycle.md.
Source / provenance
- Source: PART XI §11.1–11.7 (philosophy, tracing & correlation, causal lineage, metrics, DuckDB storage,
profiling, observability dashboard).
- Inferred: none; endpooints/paths mapped to Windows-relative paths.
1---2name: catlx-telemetry3description: CATLX — Telemetry & Observability4---56# CATLX — Telemetry & Observability78This skill owns the **observability** of an autonomous system. Every action must be traceable to debug,9optimize, and audit it. All telemetry is stored **locally** and only sent externally with explicit opt-in.1011> Canonical detail: `../knowledge/references/telemetry.md`. Load on demand.1213---1415## Purpose1617Give CATLX full, local, queryable visibility into what it did and why — distributed tracing, structured18metrics, causal lineage, and profiling.1920## When to activate2122- User asks how to trace CATLX activity, view metrics, profile, or see the observability dashboard.23- Debugging "what did CATLX do in response to X" or "why did CATLX decide Y".24- Configuring sampling rate, storage, or the CLI report.2526## What this skill handles27281. **Distributed tracing & correlation** — every voice command/workflow/background task gets a root29 **Trace ID (UUID v4)**; each sub-operation creates a **Span** with a parent Span ID. A Span records start30 time, end time, module name, operation type, input-parameters hash, output hash, and status31 (OK/ERROR/TIMEOUT). The **Correlation Engine** links traces across subsystems so the whole chain32 (Workflow → Memory Broker → Vector Store → AI Provider) shares one root Trace ID.332. **Causal lineage** — for every AI-generated output, record which prompt was sent, which provider responded,34 which memory context was injected, and which user command initiated the chain; stored as a directed graph.353. **Metrics** — at configurable sample rates (5% T0; 100% T2+): voice pipeline stage latencies, workflow step36 durations/retries, memory op latency, AI provider latency/tokens/cost, system resource usage (CPU/RAM/GPU)37 per module, error rates by module and workflow type.384. **DuckDB storage** — columnar, zero-dependency, time-series-capable at `/data/telemetry/telemetry.duckdb`;39 writes in append batches of 100; partitioned by month.405. **Profiling** — instrument hot paths with microsecond timing (Node.js Performance Hooks + V8 sampling41 profiler); auto-profile the slowest 1% of operations; store reports in `/data/telemetry/profiles/`.426. **Observability dashboard** — Electron shell view (Ctrl+Shift+T or tray): trace waterfall (last 10 ops),43 metrics time-series, causal lineage graph viewer (Sigma.js), structured log viewer with full-text search.44 On T0, replaced by CLI: `catlx telemetry report`.4546## Requirements / constraints4748- **R13 (telemetry stays local):** never sent to a remote endpoint without explicit opt-in.49- Sampling rate and dashboard mode come from the CapabilityMap (`telemetry_sample_rate`, `gui_mode`).50- All tracing goes through correlation IDs shared across the PAL and Workflow Engine.5152## Canonical knowledge it reads5354`../knowledge/references/telemetry.md` · `../knowledge/references/data-registries.md` ·55`../knowledge/references/hardware-adaptation.md` · `../knowledge/rules/architectural-rules.md`.5657## Delegation5859- **Dashboard / GUI rendering** → delegate to `catlx-electron-shell`60 (`skill({ name: "catlx-electron-shell" })`).61- **Failover correlation** → delegate to `catlx-ai-provider`62 (`skill({ name: "catlx-ai-provider" })`).63- **Workflow run tracing** → delegate to `catlx-workflow-engine`64 (`skill({ name: "catlx-workflow-engine" })`).65- **Profiling/sampling tier** → delegate to `catlx-hardware-adaptation`66 (`skill({ name: "catlx-hardware-adaptation" })`).6768## Edge cases & warnings6970- **T0:** dashboard unavailable → use the `catlx telemetry report` CLI.71- **Write amplification:** batch telemetry writes (100 records) to minimize amplification.72- **Corruption:** DuckDB/vector stores must be recoverable (see recovery); never silently drop traces.73- **Privacy:** respect opt-in; a metric that could leak sensitive state should be flagged.7475## Component lifecycle policy (reuse → install → adapt → create)7677**NEVER create a new component as the default.** Before building/creating anything (a sub-skill, dependency,78reference, workflow, helper, adapter, or template), check, in order:791. **Reuse** an existing local component (resolve aliases/equivalent capabilities first) — reuse, don't rebuild.802. **Use** an already-registered component from the registry.813. **Install** a suitable existing, trusted, supported component → validate → register → connect to the graph → use.824. **Adapt** an existing compatible component via a small persistent adapter/wrapper instead of re-creating it.835. **Create only as last resort** — then make it permanent immediately: stable id, canonical location, register,84 add to the capability index + dependency graph, add provenance, use, and allow future reuse.856. Never reorganise/recreate already-generated components (no `Skill X 2` / `new` / `temp` variants); extend the86 existing one. Never create a second competing knowledge source; connect back to the canonical `knowledge/` layer.87 Promote any reusable artifact out of `/tmp`/scratch into the permanent ecosystem.8889> Full policy: `../knowledge/rules/component-lifecycle.md`.9091## Source / provenance9293- **Source:** PART XI §11.1–11.7 (philosophy, tracing & correlation, causal lineage, metrics, DuckDB storage,94 profiling, observability dashboard).95- **Inferred:** none; endpooints/paths mapped to Windows-relative paths.