Investigation guide for CS agents
File to diagnosis in 30 seconds.
Load the log. Drag the customer's log file onto the tool, or click to browse. Accepts .json .txt .log
Read the Overview. The triage row at the top has a severity-colored left border โ green = clean session, yellow = warnings, red = critical issues. Clickable stat badges (Issues, Accounts, Network, Quality) let you jump to any section. Below, the Diagnostic Priority Map shows every finding sized by importance โ the biggest, reddest block is where you start.
Click the relevant section in the sidebar โ Issues, Accounts, Timeline, or Advanced. Each is a single click.
For richer data, switch to Customer View using the top bar toggle and load the customer's app.json.
Start with the scenario that matches your customer's complaint.
Start here: Focus on the affected account โ use the Focus Investigation button on the Overview or Shift+click the account's tile in Accounts. This filters every section to that account. Check Accounts for the live on-chain balance and fiat value โ compare with what the customer reports.
Look for: Mismatches between live balance and what the customer sees. If the log has no sync data, accounts show an amber "no data" badge โ the live balance is your only reference. The sidebar also shows fiat values next to funded accounts for a quick scan.
For deeper investigation: Switch to Customer View โ load the customer's app.json for the balances their app was displaying. Compare app.json balances with the live balances shown in Diagnostic mode.
For Bitcoin, Litecoin, Dogecoin, Bitcoin Cash, or Zcash: Open the account in Accounts โ if it stores an xpub, the tool shows an Xpub Scanner. Click "Scan" to derive individual addresses and check on-chain balances. This shows exactly where funds are, even if the app's sync is wrong.
For Cardano, TON, or Stacks: The tool derives explorer-ready addresses from the raw data in the log. Look for the "Derived Address" block when you expand the account โ click the explorer link to verify the balance on-chain.
In Customer View: Load the customer's app.json and go to Agent Insights. The dashboard compares what the customer sees to live on-chain balances and flags discrepancies. Check the staking card โ if the customer has staked funds, the "missing" balance is likely frozen, not lost. Use the Earn tab to see their staking positions and validator details.
Start here: Switch to Customer View and load the customer's app.json. Go to Agent Insights. If accounts have been drained, a red DRAIN DETECTED or SEED COMPROMISE finding will appear at the top of the list automatically.
What you'll see: The drain finding shows total estimated loss, which accounts were emptied, and a fund flow diagram showing where the money went โ victim accounts on the left, attacker addresses on the right, with transaction links between them. When multiple chains converge on the same destination address, it's highlighted as the attacker's collection wallet.
"Funds sent to" section: Lists every destination address that received the stolen funds. Each address has a copy button and a direct explorer link โ click to verify on the blockchain. This is what law enforcement needs.
Copy the drain report: Click "Copy drain report for escalation" at the bottom of the drain detail panel. This produces a formatted report with: customer identity, each drained account with before/after balances, every drain transaction hash with explorer links, and all destination addresses. Paste it into your escalation ticket.
Escalation procedure: The tool provides specific guidance in the action box. For multi-chain drains (seed compromise): advise the customer to stop using the seed phrase immediately, set up a new device with a new seed, and file a police report.
Start here: Click Issues in the sidebar. Use the severity chips at the top to focus โ click Critical to filter to critical errors only. Click a category chip (Hardware / Software) to narrow further.
Look for: The error strip shows where errors occurred in the session โ red segments stand out against muted session context. Hover any bar for details. Click to select that error in the detail panel.
Dig deeper: In the error detail panel, expand "What happened before" to see the 5 log entries leading up to the error. This shows you what triggered it. Click "View in Timeline" to jump to that moment in the full session.
Next: Check Affected account on the error card. Check Advanced โ Network for failed API calls. If the error mentions device rejection, check Advanced โ APDU.
Start here: Look at the Overview. Check the Diagnostic Priority Map for a Connection or App & Updates block โ a red block there is your first lead. The device status line shows model, firmware, and sync state. If it says "Device โ", the device never identified itself. Check the Network stat badge โ 0 failures with 0 total requests means no API activity at all.
Look for: Device model and firmware version in the device card (the expandable panel on the Overview). Check if firmware is outdated โ the tool shows "FW 2.6.1 โฌ 2.7.0 avail." when an update is needed. The Diagnostic Priority Map will also show a firmware finding in App & Updates.
Next: Check Issues for hardware/USB errors. Check Advanced โ APDU for device communication. If there's zero APDU data, the device never established a connection at all.
Start here: Check the Overview. The severity and issue count in the triage row tell you how bad the session was. The Diagnostic Priority Map shows which category of problem dominates โ Connection, Sync, Activity, App & Updates, or Server.
Look for: Critical errors (red). In the Issues section, check for repeating pattern badges at the top โ "โป Unexpected error ร6" means the same error is looping. The error strip shows whether problems are clustered (cascade) or spread across the session.
Next: Check Advanced โ Network for server errors (5xx). Timeouts or connectivity failures point to a server-side issue, not the app. Check the Overview device card's Environment section for OS and platform โ some issues are platform-specific.
Start here: Switch to Customer View using the prominent toggle in the top bar.
Load app.json: Upload the customer's app.json via the banner. This populates all tabs with the customer's actual data โ balances, transactions, staking positions, device info, and app versions.
Walk the tabs: Portfolio shows their total value and asset allocation. Accounts shows every account with full transaction history. Earn shows staking positions. My Ledger shows device storage and installed apps. Agent Insights compares their data to live on-chain reality.
Key investigation flows:
Start here: Read the Overview for the overall picture โ triage row (severity, stat badges), and the Diagnostic Priority Map below it. The map shows every finding sized by severity and organized by category. Click any block to jump to the relevant section. Filter by category (Connection, Sync, Activity, App & Updates, Server) to focus on a specific area.
Recommended flow:
Overview โ device health + big picture
Issues โ what went wrong and when
Accounts โ what exists
Timeline โ what happened in sequence
Advanced โ deeper data if needed
Big picture first, problems second, context third.
Two modes, switchable from the top bar toggle. Diagnostic for technical investigation. Customer View to see the customer's wallet.
Sidebar on the left for navigation. Main area on the right for detail. The sidebar is always visible โ you never lose your place. Everything fits in one screen โ no page scrolling.
The Diagnostic Priority Map is the main content area of the Overview. It shows every finding from the current session as a treemap โ blocks sized by severity weight, colored red to amber to green. The biggest, reddest block is always your starting point.
Multi-source findings: The map aggregates from seven data sources โ log errors, firmware update status, desktop app version, device app status (missing/outdated), no-sync flag, network failures, and incomplete swaps โ into one unified view. Errors are the dominant input on most sessions, but system-level findings surface in the same map so nothing is missed.
Workflow categories: Every block is classified into one of five investigation categories:
๐ Connection โ device hardware errors, USB/Bluetooth issues
๐ Sync โ balance sync failures, price data, bridge issues
โก Activity โ failed transactions, user rejections, swap failures
๐ฑ App & Updates โ outdated firmware, missing/outdated device apps, app version
โ๏ธ Server โ Ledger server errors, API failures
Interacting with the map:
Click any block โ jumps to the relevant section (Issues for errors, Accounts for account findings)
Category chips above the map โ click to filter to one category. Click again to clear.
Focus Mode โ when an account is focused, blocks linked to other accounts dim. System-wide findings stay visible.
The Timeline header shows a stacked bar chart of the entire session. Bar height = event density. Bar color = event type, using the same colors as the type badges on every row. You read the session left to right: "gray startup, purple analytics, gold price fetching, orange sync burst, blue network calls, red errors at the end."
Legend chips below the strip show every event type with its color and count. Hover a chip to highlight matching segments โ everything else dims. Click to filter the row list. Click again to clear. The type dropdown and chips share state.
Error dots sit on a baseline below the bars โ click any dot to scroll to that error entry.
Smart grouping: Bursts of same-type events (40 bridge events during sync) collapse into expandable group headers. Toggle with the Grouped/Flat button. Errors never collapse.
Account filtering: When Focus Mode is active (Shift+click a tile, or use the Focus Investigation button), Timeline automatically filters to that account's events. A banner shows which account is focused with a "Show all" option to clear. You can also click the Timeline button on any account card for a quick filter.
Filter chips: Severity chips (Critical Warning Info) and category chips (Hardware, Software, Server) at the top of Issues. Click to filter. Hover to highlight matching errors on the strip. Combine them: Critical + Hardware = only critical hardware errors.
Error strip: Same color-coded session bars as the Timeline, but error segments are prominent (full opacity) while context is muted. Hover any bar for a tooltip showing what errors occurred at that moment. Click to select that error.
Pattern badges: "โป Price data unavailable ร4" โ click to filter to just that repeating pattern. Cascades become obvious.
Breadcrumbs: In the error detail panel, expand "What happened before" to see the 5 entries leading up to the error โ type badges, messages, and relative timestamps. Click "View in Timeline" to jump to that moment in the full session.
Diagnostic Pathways: Below the breadcrumbs, a Related Evidence section shows correlated events from the seconds before the error: network failures, APDU rejections, sync activity. Each link navigates directly to the relevant section (Network, APDU, or Timeline) so you can trace cause and effect without manual searching.
At the top of Accounts, colored tiles give you a quick visual map. Each tile = one account, colored by chain, showing a chain icon or 3-letter ticker label as fallback.
Corner dots: Red (top-right) = errors for this account. Purple (bottom-right) = xpub/scannable. ? = unsupported for live balance.
Hover any tile for a popover: chain name, address, live balance + fiat, status, error count, and xpub/explorer flags.
Click to filter the account list to that chain. Shift+click to activate Focus Mode โ every section filters to that account, non-focused elements dim, and a Context Ribbon appears at the top of the content area.
Portfolio โธ button opens a proportional overlay โ bigger tile = more value. Click any tile to filter and close.
EVM grouping: Accounts sharing the same 0x address (Ethereum + L2 chains) are grouped with a shared header, combined fiat, and a copy button.
Focus Mode is your primary investigation tool. Most tickets center on one account โ focus on it and every section becomes relevant to that account.
How to activate:
Shift+click any health tile in Accounts
Focus button in the tile hover popover
Affected account link on any error card in Issues
Focus Investigation dropdown button on the Overview
Diagnostic Priority Map block, when linked to an account
What happens: A purple indicator appears in the sidebar showing which account is focused. The content area gets a colored left border matching the account's chain. A Context Ribbon appears at the top of the content area showing your investigation thread โ click any segment to navigate (account โ Accounts, error title โ Issues, timestamp โ Timeline). Every section filters to that account: Issues shows only related errors, Timeline shows only that account's events, and the sidebar account list highlights the focused row.
Adaptive Dimming: Everything not related to your focused account dims โ tiles, account cards, sidebar rows, error strip segments. Blocks in the Diagnostic Priority Map that are linked to other accounts dim; system-wide findings (firmware, app version, etc.) stay fully visible. Your investigation path stays bright. The focused tile gently pulses so you always know which account you're looking at.
EVM precision: For EVM chains sharing the same address (Ethereum + L2s like Polygon, Arbitrum, Base), focus is chain-specific. Focusing Ethereum shows only Ethereum activity โ Polygon and Arbitrum stay dim even though they share the address.
How to clear: Click the โ on the sidebar focus indicator, press Escape, click โ on the Context Ribbon, or Shift+click the same tile again.
When you expand an account that stores an extended public key (xpub, ypub, or zpub), the tool shows a Scan button. Clicking it derives individual addresses from the key, queries the blockchain for each one, and shows the balance and transaction count per address.
This is your most powerful tool for "my balance is wrong" on UTXO chains. It shows exactly which addresses hold funds โ even addresses the app's sync may have missed.
The scanner walks the derivation path (receive and change chains), stopping when it hits a gap of unused addresses. Each address gets an explorer link so you can verify on-chain.
Derived addresses: Some chains store raw credentials in logs that aren't directly searchable on an explorer. The tool converts them automatically:
Cardano โ hex credential โ stake1... bech32 address
TON โ 32-byte hash โ UQ... user-friendly address
Stacks โ compressed pubkey โ SP... c32check address
Look for the blue "Derived Address" block when you expand one of these accounts. It includes a copy button and an explorer link. Always verify derived addresses with the customer โ they're computed from log data, not confirmed on-chain.
Token tiles with live balance: When you expand an EVM account, each ERC-20 token sub-account renders as a tile showing the ticker, live on-chain balance (one Multicall3 call per chain), and live USD value (DexScreener). Tiles are clickable and link to the token on the correct block explorer. Coverage is broad across 19 EVM chains; tokens on Lukso, Moonbeam, and Kaia render with "no live price" because those chains lack DexScreener coverage. If a customer reports "my tokens are missing," the tile shows the on-chain truth โ not what their cached app data says.
The Raw JSON viewer (under Advanced) has a search that works like Chrome DevTools. As you type, the tree automatically expands to reveal matching nodes and scrolls to the first one.
Navigation: The counter shows 1/47 โ your position in the results. Use the โฒโผ buttons or press Enter to jump to the next match. Shift+Enter goes backward. The current match is highlighted with a purple left border; other matches have a subtle tint.
The expand/collapse buttons (Collapse, Level 1/2/3, All) still work independently. Clearing the search collapses the tree back to its previous state.
The tool automatically fetches live blockchain balances for every account in the log โ no app.json needed. As soon as you load a file, balances start appearing on each account card in the Accounts section with a green dollar value.
Coverage: 40+ chains including all EVM chains (Ethereum, Polygon, BSC, Arbitrum, etc.), Bitcoin, Litecoin, Dogecoin, Bitcoin Cash, Zcash, Solana, Tezos, XRP, Cardano, NEAR, Tron, TON, Cosmos, and more.
Portfolio total: The sidebar shows fiat values next to funded accounts for a quick scan. The Accounts section header shows the total funded/empty split. For a full portfolio view, use the Portfolio โธ overlay on the Accounts health tiles.
Copy exports: All copy formats (Summary, Full, Customer) now include live balances and fiat values per account, plus a PORTFOLIO total line.
Balances are fetched from public blockchain APIs and priced via CoinGecko. No API keys required. Accounts that show "live ยทยทยท" are still loading. Xpub accounts (Bitcoin-family) use the existing Xpub Scanner for balance โ live fetch doesn't apply to those.
The tool supports logs from Ledger Wallet Mobile (iOS and Android). When a mobile log is loaded, a solid purple MOBILE badge appears next to the file name in the header โ bold and unmissable.
What's different about mobile logs: They don't include sync data (operation counts, log balances, or sync duration). All accounts show "no data" badges instead of operation counts. The tool compensates by showing live blockchain balances for every account.
What works the same: Error detection, device info (when available), timeline, network requests, copy exports. The Overview and Issues section work identically.
When a log has accounts but no sync data (common with mobile logs and some short sessions), the tool shows amber warnings everywhere so you don't mistake "no data" for "empty account."
What you'll see: An amber banner on the Overview, amber โ next to the Accounts count in the sidebar, amber borders on account cards, and "no data" badges instead of "empty." Live blockchain balances are fetched automatically โ the sidebar shows fiat values where available. Accounts that show a green fiat value are confirmed live-funded; use the live balance as your reference even without sync data.
Copy exports include a "โ NO SYNC DATA" warning at the top so recipients know the data source.
Small hint text appears below interactive elements to show available interactions:
Health tiles: "hover for details ยท click to filter ยท shift+click to focus"
Timeline legend: "click to filter ยท hover to highlight"
Issues chips: "click to filter ยท hover to preview on strip"
These hints are always visible but unobtrusive (9px, muted, 50% opacity). New agents learn the interactions; experienced agents stop noticing them.
Customer View replicates the Ledger Wallet interface so you can see exactly what the customer sees. Switch to it using the Customer View toggle in the top bar. Load the customer's app.json via the upload banner for full data.
Five tabs in the left sidebar, matching the real Ledger Wallet layout:
Agent Insights is a fixed-viewport dashboard at the bottom of the Customer View nav. It compares the customer's app.json data to live blockchain balances and flags discrepancies.
Layout: Stat cards across the top (Portfolio delta, Device, Data confidence, Customer settings), then a master-detail split below. Compact findings list on the left, full detail panel on the right.
How to use it:
Drain detection: When an account's balance has dropped more than 90% and was worth real money, Agent Insights classifies it as DRAINED instead of "Balance changed." If two or more accounts are drained, a SEED COMPROMISE alert appears at the top of the findings list with a fund flow diagram, attacker addresses, and a one-click drain report for escalation. See the playbook entry "My account was drained" for the investigation workflow.
Many customers have staked or frozen funds. The tool detects this automatically when balance โ spendableBalance in the app.json and adjusts the comparison accordingly.
What you'll see: A purple ๐ฅฉ staking card in the Agent Insights detail panel showing "Total: 276.34 SOL ยท Staked: 276.12 SOL ยท Available: 0.21 SOL." The comparison uses the available balance (not total) against the live balance โ preventing false alarms on staked funds.
Chain-specific labels:
Solana note: Solana staking uses separate stake accounts. The live balance only reflects the main account, not stake accounts. The tool notes this explicitly so you don't mistake staked SOL for missing SOL.
The Earn tab shows all staking positions from the customer's app.json. Use it for "my staking isn't working," "I can't unstake," or "my rewards are wrong" tickets.
"My rewards" sub-tab: Total deposited (fiat + allocation bar), total rewards earned, and a table of deposited assets with account name, invested amount, estimated APY, and rewards.
Click any staking position to expand: validator names (NEAR shows readable names like "ledgerbyfigment.poolv1.near"), balance breakdown, and a timeline of staking operations (delegated, undelegated, withdrawn, rewards claimed).
Liquid staking tokens section below the table shows stETH, JupSOL, LBTC, cbETH and other LSTs the customer holds, with the provider name and parent account.
"Earn opportunities" sub-tab: Lists the staking providers available in Ledger Wallet (Ledger by Figment, Kiln, Lido, Coinbase, Yield.xyz) with which chains each supports.
Quick Summary Quick ticket note. Device info, top accounts with live balances, top errors, portfolio total. Paste into your support ticket.
Full Export Complete data dump. All accounts with live balances and fiat values, all errors, device apps. For escalation to Tier 2 or engineering.
Copy Customer Summary Account-focused. Live balances, fiat values, and portfolio total. For describing what the wallet looks like. Available in the Overview action bar and as a button in Customer View.
Copy Errors All errors with severity, action items, and common causes. Available at the top of the Issues section. Great for tickets focused on error investigation.
All four formats are in the ๐ Copy report โพ dropdown in the Overview triage row. Copy Errors is also available as a standalone button in the Issues section header. Each format is color-coded: purple for Quick Summary/Full Export, orange for customer, red for errors.
On Mac, use โ instead of Ctrl.
Accepts .json, .txt, and .log files. Must be a Ledger Wallet log export. Large log files show a "Parsing log file..." indicator โ give it a moment.
Some logs don't include account data. Switch to Customer View and load the customer's app.json for full account information. The Accounts section will show a hint pointing you there.
The error isn't in the tool's knowledge base (82 known patterns). Expand the error card's "Details" section for the raw data. Use Raw JSON search to find the error in the full log โ the progressive search will take you right to it.
Make sure you've switched modes using the top bar toggle. If no accounts appear, load the customer's app.json. Agent Insights and the Earn tab require app.json data โ they'll show empty states with guidance until it's loaded.
The file is encrypted by Ledger Sync. The tool extracts what it can (settings, paired devices, token preferences) but can't read balances or transaction history.
The tool only sees what's in the log. If the issue happened outside this session, it won't be captured. Ask the customer to reproduce and export logs immediately after.
Click โ on the green banner to remove it, then upload the correct file.
This was a known issue that has been fixed. If you're seeing false "Balance changed" alerts on accounts with staked funds (SOL, TRX, NEAR, etc.), make sure you're on the latest version. The tool now compares the available balance (excluding staked) to the live balance.
The scanner queries live blockchain APIs for each derived address. Bitcoin is fastest (~200ms per address). Litecoin, Dogecoin, and Zcash are slower (~650ms) and may hit rate limits โ the tool retries automatically up to 5 times. You can stop a running scan at any time.
A red chip marked โ AppName on the Overview means the app is required by the customer's accounts but wasn't found on their device. It may have been removed after a firmware update. Ask the customer to open Ledger Wallet โ My Ledger to reinstall. Amber chips marked โ mean the app is installed but outdated.
Multiple errors within 1-2 seconds usually mean one problem triggered a chain reaction. Click the first error, then expand "What happened before" to see what triggered it. Use the Critical chip to isolate the root cause โ the rest are typically consequences.
"Unsupported" means the chain doesn't have a public API the tool can query โ this affects a few uncommon chains. If balances stay on "live ยทยทยท" for more than 10 seconds, the blockchain API may be rate-limited or down. This doesn't affect the rest of the tool. Xpub accounts (Bitcoin-family) don't use live fetch โ use the Xpub Scanner instead.
The log didn't capture sync information. This is normal for mobile logs and very short desktop sessions. The accounts are real โ they just have no operation history in this log. Live blockchain balances are your primary reference. See the No-Sync Visibility section for details.