From walkeros
Diagnoses walkerOS analytics events that aren't reaching destinations. Covers console logging, network inspection, vendor debug tools, and dry run mode.
How this skill is triggered — by the user, by Claude, or both
Slash command
/walkeros:walkeros-debuggingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
| Symptom | Likely Cause | Check |
| Symptom | Likely Cause | Check |
|---|---|---|
| No events at all | Source not initialized | Console for errors, verify startFlow() |
| Events fire but destination silent | Mapping mismatch | Event name matches mapping? |
| Partial data missing | Path doesn't exist | Log event structure, check nested paths |
| Consent blocking | Required consent not granted | Check consent config, grant consent |
| Destination error | Vendor API issue | Check network tab, vendor console |
Log all events at collector level:
import { startFlow } from '@walkeros/collector';
const { elb } = await startFlow({
destinations: {
debug: {
push: async (event, context) => {
console.log('[walkerOS Event]', {
name: event.name,
data: event.data,
context: event.context,
consent: event.consent,
timestamp: event.timestamp,
});
},
config: {},
},
// ... other destinations
},
});
For destinations that make HTTP calls:
google-analytics.com, facebook.com)What to look for:
| Vendor | Debug Tool |
|---|---|
| GA4 | GA4 DebugView |
| Meta | Facebook Pixel Helper |
| Plausible | Plausible Dashboard real-time |
Test mapping without sending to vendor:
const destination = {
...actualDestination,
config: {
...actualDestination.config,
dryRun: true, // Events processed but not sent
},
};
Problem: Event fires but destination doesn't receive it.
// Event pushed
elb('product view', { id: 'P123' });
// Mapping expects different name
mapping: {
Product: {
// Wrong: capital P
View: {
// Wrong: capital V
name: 'view_item';
}
}
}
Fix: Event names are case-sensitive. Use exact match:
mapping: {
product: {
view: {
name: 'view_item';
}
}
}
Problem: items array is empty in destination.
// Event structure
{
name: 'order complete',
data: { total: 100 },
nested: [
{ entity: 'product', data: { id: 'P1' } }
]
}
// Mapping tries wrong path
data: {
map: {
items: {
loop: [
'data.items', // Wrong: nested is at root, not in data
{ map: { id: 'data.id' } }
]
}
}
}
Fix: Use correct path to nested array:
items: {
loop: [
'nested', // Correct: root-level nested
{ map: { item_id: 'data.id' } },
];
}
Problem: Events not reaching destination.
Check 1: Does destination require consent?
// Destination config
config: {
consent: {
marketing: true;
} // Requires marketing consent
}
Check 2: Is consent granted?
// Check current consent state
console.log(event.consent);
// Grant consent
elb('walker consent', { marketing: true });
Problem: TypeError: env.window.gtag is not a function
Cause: Vendor script not loaded before push.
Fix: Ensure init() loads script:
init: async (config, env) => {
// Wait for script to load
await loadScript('https://vendor.com/sdk.js');
// Verify SDK available
if (!env.window.vendorSdk) {
throw new Error('Vendor SDK failed to load');
}
},
Problem: Cannot read property 'price' of undefined
// Mapping with unsafe access
data: {
map: {
value: {
fn: (e) => e.data.price * 100;
} // Fails if data.price undefined
}
}
Fix: Add null checks:
value: {
fn: (e) => (e.data?.price ?? 0) * 100;
}
When events aren't working:
Test destination push directly:
import { push } from '@walkeros/web-destination-gtag';
import { mockEnv } from '@walkeros/core';
// Create test event
const event = {
name: 'product view',
data: { id: 'P123', price: 99 },
// ... full event
};
// Mock env to capture calls
const calls = [];
const testEnv = mockEnv(baseEnv, (path, args) => {
calls.push({ path, args });
});
// Test push directly
await push(event, { config: testConfig, env: testEnv });
// Inspect what was called
console.log(calls);
When using walkerOS MCP tools, check _hints.warnings in tool responses for
diagnostic information:
flow_simulate warns when 0 destinations exist or none received the
event. step is required (e.g. "destination.gtag"). Source steps take a
{ content, trigger? } event where content is { name, data }; sources,
including @walkeros/source-demo, can be simulated this way.flow_bundle warns when the build produces no outputflow_examples warns when no examples are found in the configpackage_search returns the complete catalog and warns (via the
warnings array) when it falls back to a partial source or omits packages,
instead of silently returning a partial listhint field with recovery suggestionsWhen a request fails or behaves unexpectedly, call diagnostics (read-only,
no parameters, works logged out). It reports the MCP and CLI versions, the
resolved app URL and whether it came from WALKEROS_APP_URL or the default, app
/api/health reachability, the bundled OpenAPI contract version, and which
source served the last package lookup, so you can tell which backend and
versions you are on.
npx claudepluginhub elbwalker/walkerosBundles, tests, and deploys walkerOS tracking flows. Use for local event servers, simulated pushes, config validation, and flow.json setup.
Troubleshoots advanced Sentry issues including silent event drops, source map failures, distributed tracing gaps, SDK conflicts, and memory leaks using debug transports and CLI diagnostics.
Debugs failed Exarchos MCP tool calls by inspecting workflow state, topology, and telemetry via the MCP server's own self-service APIs. Diagnoses root causes and categorizes failures.