[
    {
        "data": 1,
        "prerenderedAt": 762
    },
    [
        "ShallowReactive",
        2
    ],
    {
        "blog-posts": 3
    },
    [
        4,
        169,
        404,
        620
    ],
    {
        "id": 5,
        "title": 6,
        "author": 7,
        "body": 8,
        "date": 159,
        "description": 160,
        "extension": 161,
        "meta": 162,
        "navigation": 163,
        "path": 164,
        "readingTime": 165,
        "seo": 166,
        "stem": 167,
        "__hash__": 168
    },
    "blog\u002Fblog\u002Fconnecting-browser-extension-to-vscode.md",
    "Connecting Signal Browser Extension to VS Code",
    "Signal Team",
    {
        "type": 9,
        "value": 10,
        "toc": 148
    },
    "minimark",
    [
        11,
        16,
        20,
        23,
        28,
        31,
        61,
        65,
        68,
        83,
        87,
        90,
        120,
        124,
        127,
        145
    ],
    [
        12,
        13,
        15
    ],
    "h2",
    {
        "id": 14
    },
    "streamlining-your-debugging-workflow",
    "Streamlining Your Debugging Workflow",
    [
        17,
        18,
        19
    ],
    "p",
    {},
    "Signal's VS Code integration allows you to bridge the gap between where a bug happens (the browser) and where you fix it (your editor). By mapping a domain to your local source code, Signal can automatically connect your browser session context directly to VS Code.",
    [
        17,
        21,
        22
    ],
    {},
    "Here is the step-by-step process to get everything connected.",
    [
        24,
        25,
        27
    ],
    "h3",
    {
        "id": 26
    },
    "_1-install-the-vs-code-extension",
    "1. Install the VS Code Extension",
    [
        17,
        29,
        30
    ],
    {},
    "Before connecting the browser to your editor, you need the Signal VS Code extension.",
    [
        32,
        33,
        34,
        38,
        50,
        58
    ],
    "ol",
    {},
    [
        35,
        36,
        37
    ],
    "li",
    {},
    "Open VS Code.",
    [
        35,
        39,
        40,
        41,
        45,
        46,
        49
    ],
    {},
    "Navigate to the Extensions view (",
    [
        42,
        43,
        44
    ],
    "code",
    {},
    "Ctrl+Shift+X",
    " or ",
    [
        42,
        47,
        48
    ],
    {},
    "Cmd+Shift+X",
    ").",
    [
        35,
        51,
        52,
        53,
        57
    ],
    {},
    "Search for \"Signal\" and click ",
    [
        54,
        55,
        56
    ],
    "strong",
    {},
    "Install",
    ".",
    [
        35,
        59,
        60
    ],
    {},
    "Once installed, the extension will start a local Model Context Protocol (MCP) server that communicates with the browser extension.",
    [
        24,
        62,
        64
    ],
    {
        "id": 63
    },
    "_2-create-a-workspace-in-signal",
    "2. Create a Workspace in Signal",
    [
        17,
        66,
        67
    ],
    {},
    "Workspaces in Signal allow you to group settings, domain mappings, and integrations for specific projects.",
    [
        32,
        69,
        70,
        73,
        80
    ],
    {},
    [
        35,
        71,
        72
    ],
    {},
    "Open the Signal Chrome Extension popup.",
    [
        35,
        74,
        75,
        76,
        79
    ],
    {},
    "Click on the ",
    [
        54,
        77,
        78
    ],
    {},
    "Workspace Builder",
    " (or settings\u002Fconfiguration).",
    [
        35,
        81,
        82
    ],
    {},
    "Create a new workspace for your project and give it a descriptive name.",
    [
        24,
        84,
        86
    ],
    {
        "id": 85
    },
    "_3-configure-domain-to-local-path-mapping",
    "3. Configure Domain to Local Path Mapping",
    [
        17,
        88,
        89
    ],
    {},
    "This is the crucial step. You need to tell Signal which local directory corresponds to the domain you are debugging.",
    [
        32,
        91,
        92,
        95,
        104,
        117
    ],
    {},
    [
        35,
        93,
        94
    ],
    {},
    "In your newly created workspace, navigate to the mapping configuration.",
    [
        35,
        96,
        97,
        98,
        45,
        101,
        49
    ],
    {},
    "Add the URL you are debugging (e.g., ",
    [
        42,
        99,
        100
    ],
    {},
    "localhost:3000",
    [
        42,
        102,
        103
    ],
    {},
    "staging.myapp.com",
    [
        35,
        105,
        106,
        107,
        110,
        111,
        45,
        114,
        49
    ],
    {},
    "Set the ",
    [
        54,
        108,
        109
    ],
    {},
    "Local Path",
    " to the absolute path of your source code on your machine (e.g., ",
    [
        42,
        112,
        113
    ],
    {},
    "\u002FUsers\u002Fdev\u002Fmy-web-app",
    [
        42,
        115,
        116
    ],
    {},
    "C:\\dev\\my-web-app",
    [
        35,
        118,
        119
    ],
    {},
    "Save the workspace configuration.",
    [
        24,
        121,
        123
    ],
    {
        "id": 122
    },
    "_4-experience-zero-friction-handoff",
    "4. Experience Zero-Friction Handoff",
    [
        17,
        125,
        126
    ],
    {},
    "With the connection established, you're ready to debug.",
    [
        32,
        128,
        129,
        132,
        135,
        142
    ],
    {},
    [
        35,
        130,
        131
    ],
    {},
    "Navigate to the mapped domain in your browser.",
    [
        35,
        133,
        134
    ],
    {},
    "Open the Signal extension popup or capture a bug session.",
    [
        35,
        136,
        137,
        138,
        141
    ],
    {},
    "You will now see an ",
    [
        54,
        139,
        140
    ],
    {},
    "Open in VS Code",
    " button appear.",
    [
        35,
        143,
        144
    ],
    {},
    "Click it to automatically push the captured bug context directly to your AI agent within VS Code-no copy-pasting required!",
    [
        17,
        146,
        147
    ],
    {},
    "By connecting your browser extension directly to your editor, you eliminate the tedious steps of manually moving logs, session state, and context, allowing you to focus immediately on fixing the issue.",
    {
        "title": 149,
        "searchDepth": 150,
        "depth": 150,
        "links": 151
    },
    "",
    2,
    [
        152
    ],
    {
        "id": 14,
        "depth": 150,
        "text": 15,
        "children": 153
    },
    [
        154,
        156,
        157,
        158
    ],
    {
        "id": 26,
        "depth": 155,
        "text": 27
    },
    3,
    {
        "id": 63,
        "depth": 155,
        "text": 64
    },
    {
        "id": 85,
        "depth": 155,
        "text": 86
    },
    {
        "id": 122,
        "depth": 155,
        "text": 123
    },
    "2026-05-15",
    "Learn how to map domains to your local source code to enable zero-friction debugging from browser to VS Code.",
    "md",
    {},
    true,
    "\u002Fblog\u002Fconnecting-browser-extension-to-vscode",
    "3 min read",
    {
        "title": 6,
        "description": 160
    },
    "blog\u002Fconnecting-browser-extension-to-vscode",
    "pMcu9SWqxhq5WgUMYM9Hrxe3CI8LFMddNed45tH1icc",
    {
        "id": 170,
        "title": 171,
        "author": 7,
        "body": 172,
        "date": 396,
        "description": 397,
        "extension": 161,
        "meta": 398,
        "navigation": 163,
        "path": 399,
        "readingTime": 400,
        "seo": 401,
        "stem": 402,
        "__hash__": 403
    },
    "blog\u002Fblog\u002Fworkspace-builder.md",
    "Connect Frontend Bugs to Backend Logs with Workspace Builder",
    {
        "type": 9,
        "value": 173,
        "toc": 387
    },
    [
        174,
        178,
        185,
        188,
        202,
        205,
        209,
        212,
        224,
        227,
        231,
        242,
        262,
        269,
        288,
        295,
        300,
        311,
        317,
        321,
        324,
        352,
        355,
        359,
        366,
        370,
        377,
        381,
        384
    ],
    [
        12,
        175,
        177
    ],
    {
        "id": 176
    },
    "the-gap-between-frontend-and-backend",
    "The Gap Between Frontend and Backend",
    [
        17,
        179,
        180,
        181,
        184
    ],
    {},
    "A frontend exception is only half the story. When ",
    [
        42,
        182,
        183
    ],
    {},
    "POST \u002Fapi\u002Fcheckout",
    " returns a 500, the meaningful error is deep in the backend stack trace - not in the browser's network tab.",
    [
        17,
        186,
        187
    ],
    {},
    "Historically, connecting the two required:",
    [
        32,
        189,
        190,
        193,
        196,
        199
    ],
    {},
    [
        35,
        191,
        192
    ],
    {},
    "Copy the failing request's trace ID from the browser",
    [
        35,
        194,
        195
    ],
    {},
    "Open Azure Monitor, Grafana, or Sentry in a separate tab",
    [
        35,
        197,
        198
    ],
    {},
    "Search for that trace ID",
    [
        35,
        200,
        201
    ],
    {},
    "Correlate timestamps manually across two systems",
    [
        17,
        203,
        204
    ],
    {},
    "Signal's Workspace Builder closes this gap automatically.",
    [
        12,
        206,
        208
    ],
    {
        "id": 207
    },
    "what-is-a-workspace",
    "What is a Workspace?",
    [
        17,
        210,
        211
    ],
    {},
    "A workspace is a structured definition of your app's architecture. You tell Signal:",
    [
        213,
        214,
        215,
        218,
        221
    ],
    "ul",
    {},
    [
        35,
        216,
        217
    ],
    {},
    "What domains belong to this application",
    [
        35,
        219,
        220
    ],
    {},
    "Where the backend services are located",
    [
        35,
        222,
        223
    ],
    {},
    "Which log provider each service is connected to",
    [
        17,
        225,
        226
    ],
    {},
    "Once configured, Signal correlates frontend network requests with backend log entries in real time inside the viewer, without leaving the browser.",
    [
        12,
        228,
        230
    ],
    {
        "id": 229
    },
    "setting-up-a-workspace",
    "Setting Up a Workspace",
    [
        17,
        232,
        233,
        234,
        237,
        238,
        241
    ],
    {},
    "In the Settings tab, go to ",
    [
        54,
        235,
        236
    ],
    {},
    "Workspaces",
    " and click ",
    [
        54,
        239,
        240
    ],
    {},
    "Builder",
    ". The form lets you:",
    [
        32,
        243,
        244,
        250,
        256
    ],
    {},
    [
        35,
        245,
        246,
        249
    ],
    {},
    [
        54,
        247,
        248
    ],
    {},
    "Name the workspace",
    " (e.g. \"Production\" or \"Staging\")",
    [
        35,
        251,
        252,
        255
    ],
    {},
    [
        54,
        253,
        254
    ],
    {},
    "Add web services",
    " - the recording domain is auto-detected and added automatically",
    [
        35,
        257,
        258,
        261
    ],
    {},
    [
        54,
        259,
        260
    ],
    {},
    "Add integrations",
    " - connect Azure Log Analytics, Sentry, or Grafana Loki to each service",
    [
        17,
        263,
        264,
        265,
        268
    ],
    {},
    "For ",
    [
        54,
        266,
        267
    ],
    {},
    "Azure Log Analytics",
    ", you need:",
    [
        213,
        270,
        271,
        274,
        277
    ],
    {},
    [
        35,
        272,
        273
    ],
    {},
    "Workspace ID",
    [
        35,
        275,
        276
    ],
    {},
    "Shared Key",
    [
        35,
        278,
        279,
        280,
        283,
        284,
        287
    ],
    {},
    "A KQL query template with ",
    [
        42,
        281,
        282
    ],
    {},
    "{START}",
    " and ",
    [
        42,
        285,
        286
    ],
    {},
    "{END}",
    " timestamp placeholders",
    [
        17,
        289,
        290,
        291,
        294
    ],
    {},
    "A default query targeting ",
    [
        42,
        292,
        293
    ],
    {},
    "AppExceptions",
    " is provided. You can customize it to target any table in your workspace.",
    [
        17,
        296,
        264,
        297,
        268
    ],
    {},
    [
        54,
        298,
        299
    ],
    {},
    "Sentry",
    [
        213,
        301,
        302,
        305,
        308
    ],
    {},
    [
        35,
        303,
        304
    ],
    {},
    "Organization slug",
    [
        35,
        306,
        307
    ],
    {},
    "Project slug",
    [
        35,
        309,
        310
    ],
    {},
    "Auth token",
    [
        17,
        312,
        264,
        313,
        316
    ],
    {},
    [
        54,
        314,
        315
    ],
    {},
    "Grafana Loki",
    ", you need the endpoint URL and any required headers.",
    [
        12,
        318,
        320
    ],
    {
        "id": 319
    },
    "the-correlation-engine",
    "The Correlation Engine",
    [
        17,
        322,
        323
    ],
    {},
    "When you open the Network tab in the viewer, each request now shows a badge indicating how many backend log entries were matched. Signal uses three correlation strategies in priority order:",
    [
        32,
        325,
        326,
        340,
        346
    ],
    {},
    [
        35,
        327,
        328,
        331,
        332,
        335,
        336,
        339
    ],
    {},
    [
        54,
        329,
        330
    ],
    {},
    "Distributed trace headers",
    " - ",
    [
        42,
        333,
        334
    ],
    {},
    "traceparent",
    ", ",
    [
        42,
        337,
        338
    ],
    {},
    "x-request-id",
    ", or any custom header you configure",
    [
        35,
        341,
        342,
        345
    ],
    {},
    [
        54,
        343,
        344
    ],
    {},
    "Time window fallback",
    " - logs within a short window around the request timestamp",
    [
        35,
        347,
        348,
        351
    ],
    {},
    [
        54,
        349,
        350
    ],
    {},
    "URL path matching",
    " - as a last resort for requests without trace headers",
    [
        17,
        353,
        354
    ],
    {},
    "Expanding any network request reveals the matched backend logs inline. JSON field values in log entries are automatically pretty-printed.",
    [
        12,
        356,
        358
    ],
    {
        "id": 357
    },
    "try-it-without-credentials",
    "Try It Without Credentials",
    [
        17,
        360,
        361,
        362,
        365
    ],
    {},
    "The Azure integration includes a ",
    [
        54,
        363,
        364
    ],
    {},
    "Use Demo Account",
    " toggle that queries Microsoft's public Azure Log Analytics demo workspace. No credentials are needed. This lets you explore correlated logs immediately before connecting your own workspace.",
    [
        12,
        367,
        369
    ],
    {
        "id": 368
    },
    "adding-domains-on-the-fly",
    "Adding Domains on the Fly",
    [
        17,
        371,
        372,
        373,
        376
    ],
    {},
    "When you are viewing a recording and see a request to a domain not yet in your workspace (a third-party API, a microservice, a CDN), you can hover over that request in the Network tab and click the ",
    [
        54,
        374,
        375
    ],
    {},
    "+ workspace",
    " button. The domain is added to your workspace as a new service entry immediately.",
    [
        12,
        378,
        380
    ],
    {
        "id": 379
    },
    "the-result",
    "The Result",
    [
        17,
        382,
        383
    ],
    {},
    "Instead of context-switching between browser DevTools and Azure Monitor, you get one view: the frontend exception, the network request that triggered it, and the backend log entries that explain why it failed.",
    [
        17,
        385,
        386
    ],
    {},
    "For teams running distributed systems, this single feature eliminates the most common category of debugging overhead: the time spent manually connecting dots across systems.",
    {
        "title": 149,
        "searchDepth": 150,
        "depth": 150,
        "links": 388
    },
    [
        389,
        390,
        391,
        392,
        393,
        394,
        395
    ],
    {
        "id": 176,
        "depth": 150,
        "text": 177
    },
    {
        "id": 207,
        "depth": 150,
        "text": 208
    },
    {
        "id": 229,
        "depth": 150,
        "text": 230
    },
    {
        "id": 319,
        "depth": 150,
        "text": 320
    },
    {
        "id": 357,
        "depth": 150,
        "text": 358
    },
    {
        "id": 368,
        "depth": 150,
        "text": 369
    },
    {
        "id": 379,
        "depth": 150,
        "text": 380
    },
    "2026-04-25",
    "How Signal Workspace Builder automatically links frontend network exceptions to Azure Log Analytics, Sentry, and Grafana traces in a single view.",
    {},
    "\u002Fblog\u002Fworkspace-builder",
    "6 min read",
    {
        "title": 171,
        "description": 397
    },
    "blog\u002Fworkspace-builder",
    "EmWGMvRFJfVgOc3H9Cd59I2dYLtE7gKczFUb_VNQEYE",
    {
        "id": 405,
        "title": 406,
        "author": 7,
        "body": 407,
        "date": 612,
        "description": 613,
        "extension": 161,
        "meta": 614,
        "navigation": 163,
        "path": 615,
        "readingTime": 616,
        "seo": 617,
        "stem": 618,
        "__hash__": 619
    },
    "blog\u002Fblog\u002Fdebugging-with-llm-context.md",
    "Debugging 10x Faster with Signal LLM Context Export",
    {
        "type": 9,
        "value": 408,
        "toc": 604
    },
    [
        409,
        413,
        416,
        430,
        433,
        437,
        444,
        458,
        461,
        484,
        488,
        491,
        494,
        508,
        511,
        515,
        518,
        538,
        554,
        558,
        575,
        580,
        584,
        587,
        601
    ],
    [
        12,
        410,
        412
    ],
    {
        "id": 411
    },
    "the-problem-with-pasting-bug-reports-into-chatgpt",
    "The Problem with Pasting Bug Reports into ChatGPT",
    [
        17,
        414,
        415
    ],
    {},
    "If you have tried passing a bug report to an AI model, you have probably run into two problems:",
    [
        32,
        417,
        418,
        424
    ],
    {},
    [
        35,
        419,
        420,
        423
    ],
    {},
    [
        54,
        421,
        422
    ],
    {},
    "Too much noise",
    " - Raw logs include third-party errors, internal framework noise, and megabytes of HAR data the model does not need.",
    [
        35,
        425,
        426,
        429
    ],
    {},
    [
        54,
        427,
        428
    ],
    {},
    "Wrong format",
    " - AI models work best with structured context, not copy-pasted DevTools output.",
    [
        17,
        431,
        432
    ],
    {},
    "Signal's LLM Context export solves both.",
    [
        12,
        434,
        436
    ],
    {
        "id": 435
    },
    "how-it-works",
    "How It Works",
    [
        17,
        438,
        439,
        440,
        443
    ],
    {},
    "After recording a session with a bug, open the viewer and click ",
    [
        54,
        441,
        442
    ],
    {},
    "LLM Context",
    " in the header. You will see a two-panel modal:",
    [
        213,
        445,
        446,
        452
    ],
    {},
    [
        35,
        447,
        448,
        451
    ],
    {},
    [
        54,
        449,
        450
    ],
    {},
    "Left panel",
    ": A live preview of the context that will be passed to the model",
    [
        35,
        453,
        454,
        457
    ],
    {},
    [
        54,
        455,
        456
    ],
    {},
    "Right panel",
    ": A config sidebar where you can toggle each section on or off",
    [
        17,
        459,
        460
    ],
    {},
    "The sections you can include:",
    [
        213,
        462,
        463,
        466,
        469,
        472,
        475,
        478,
        481
    ],
    {},
    [
        35,
        464,
        465
    ],
    {},
    "Environment (browser, OS, viewport, timezone)",
    [
        35,
        467,
        468
    ],
    {},
    "User events (steps to reproduce, written in imperative English)",
    [
        35,
        470,
        471
    ],
    {},
    "Reported issues (what the user flagged with the Report Issue tool)",
    [
        35,
        473,
        474
    ],
    {},
    "Console errors (first-party only, third-party noise filtered out)",
    [
        35,
        476,
        477
    ],
    {},
    "Failed network requests (filterable by domain)",
    [
        35,
        479,
        480
    ],
    {},
    "Request and response bodies (redacted through the redaction engine)",
    [
        35,
        482,
        483
    ],
    {},
    "Framework component state (React fiber, Vue instance, Svelte stores)",
    [
        12,
        485,
        487
    ],
    {
        "id": 486
    },
    "token-budget-awareness",
    "Token Budget Awareness",
    [
        17,
        489,
        490
    ],
    {},
    "The modal shows a circular arc indicator displaying how much of your chosen model's context window is used. The arc turns yellow at 70% and red at 90%.",
    [
        17,
        492,
        493
    ],
    {},
    "Supported models and their limits:",
    [
        213,
        495,
        496,
        499,
        502,
        505
    ],
    {},
    [
        35,
        497,
        498
    ],
    {},
    "Claude Sonnet\u002FOpus: 200K tokens",
    [
        35,
        500,
        501
    ],
    {},
    "GPT-4o: 128K tokens",
    [
        35,
        503,
        504
    ],
    {},
    "Gemini 1.5: 1M tokens",
    [
        35,
        506,
        507
    ],
    {},
    "Llama 3: 128K tokens",
    [
        17,
        509,
        510
    ],
    {},
    "If you are over budget, uncheck the large sections first. Response bodies are usually the culprit.",
    [
        12,
        512,
        514
    ],
    {
        "id": 513
    },
    "automatic-redaction",
    "Automatic Redaction",
    [
        17,
        516,
        517
    ],
    {},
    "Before the LLM sees any data, Signal's redaction engine runs over the entire context. It automatically strips:",
    [
        213,
        519,
        520,
        523,
        526,
        529,
        532,
        535
    ],
    {},
    [
        35,
        521,
        522
    ],
    {},
    "Authorization headers and Bearer tokens",
    [
        35,
        524,
        525
    ],
    {},
    "JWT tokens in cookies, headers, or query parameters",
    [
        35,
        527,
        528
    ],
    {},
    "AWS access key IDs",
    [
        35,
        530,
        531
    ],
    {},
    "Email addresses",
    [
        35,
        533,
        534
    ],
    {},
    "Credit card numbers",
    [
        35,
        536,
        537
    ],
    {},
    "Any fields matching common sensitive key names (password, token, secret, api_key, cvv, ssn)",
    [
        17,
        539,
        540,
        541,
        335,
        544,
        335,
        547,
        550,
        551,
        57
    ],
    {},
    "You can define custom redaction rules in Settings for project-specific sensitive fields. Four rule types are supported: ",
    [
        42,
        542,
        543
    ],
    {},
    "header-name",
    [
        42,
        545,
        546
    ],
    {},
    "query-param",
    [
        42,
        548,
        549
    ],
    {},
    "json-key",
    ", and ",
    [
        42,
        552,
        553
    ],
    {},
    "regex",
    [
        12,
        555,
        557
    ],
    {
        "id": 556
    },
    "the-workflow",
    "The Workflow",
    [
        32,
        559,
        560,
        563,
        566,
        569,
        572
    ],
    {},
    [
        35,
        561,
        562
    ],
    {},
    "Record a session where the bug occurs",
    [
        35,
        564,
        565
    ],
    {},
    "Open the viewer and click LLM Context",
    [
        35,
        567,
        568
    ],
    {},
    "Toggle sections to tune what is included",
    [
        35,
        570,
        571
    ],
    {},
    "Copy the context to clipboard",
    [
        35,
        573,
        574
    ],
    {},
    "Paste into your AI agent of choice",
    [
        17,
        576,
        577,
        578,
        57
    ],
    {},
    "With the VS Code extension and Signal MCP server, steps 3 to 5 are automatic. Signal pushes the context directly to your agent when you click ",
    [
        54,
        579,
        140
    ],
    {},
    [
        12,
        581,
        583
    ],
    {
        "id": 582
    },
    "what-you-get-back",
    "What You Get Back",
    [
        17,
        585,
        586
    ],
    {},
    "With a well-structured context, a modern LLM can typically:",
    [
        213,
        588,
        589,
        592,
        595,
        598
    ],
    {},
    [
        35,
        590,
        591
    ],
    {},
    "Identify the root cause from the call stack and HAR data",
    [
        35,
        593,
        594
    ],
    {},
    "Pinpoint the exact component that owns the failing element",
    [
        35,
        596,
        597
    ],
    {},
    "Suggest a specific fix with file and line reference",
    [
        35,
        599,
        600
    ],
    {},
    "Explain why the bug occurs in terms the team can act on",
    [
        17,
        602,
        603
    ],
    {},
    "The limiting factor is no longer the AI - it is the quality of the context you give it. Signal makes that context precise and complete.",
    {
        "title": 149,
        "searchDepth": 150,
        "depth": 150,
        "links": 605
    },
    [
        606,
        607,
        608,
        609,
        610,
        611
    ],
    {
        "id": 411,
        "depth": 150,
        "text": 412
    },
    {
        "id": 435,
        "depth": 150,
        "text": 436
    },
    {
        "id": 486,
        "depth": 150,
        "text": 487
    },
    {
        "id": 513,
        "depth": 150,
        "text": 514
    },
    {
        "id": 556,
        "depth": 150,
        "text": 557
    },
    {
        "id": 582,
        "depth": 150,
        "text": 583
    },
    "2026-04-15",
    "How to use Signal to generate structured debugging context for Claude, GPT-4o, and other AI agents - with automatic redaction and token budget awareness.",
    {},
    "\u002Fblog\u002Fdebugging-with-llm-context",
    "5 min read",
    {
        "title": 406,
        "description": 613
    },
    "blog\u002Fdebugging-with-llm-context",
    "2CdK2dpRm8B5f2DMzBen3NECErsyV7jKgR2N0gs98Ek",
    {
        "id": 621,
        "title": 622,
        "author": 7,
        "body": 623,
        "date": 754,
        "description": 755,
        "extension": 161,
        "meta": 756,
        "navigation": 163,
        "path": 757,
        "readingTime": 758,
        "seo": 759,
        "stem": 760,
        "__hash__": 761
    },
    "blog\u002Fblog\u002Fintroducing-signal.md",
    "Introducing Signal: Full Context Bug Reports That Stay Local",
    {
        "type": 9,
        "value": 624,
        "toc": 747
    },
    [
        625,
        629,
        632,
        635,
        638,
        642,
        645,
        683,
        686,
        690,
        693,
        700,
        703,
        717,
        721,
        724,
        727,
        732,
        736
    ],
    [
        12,
        626,
        628
    ],
    {
        "id": 627
    },
    "why-bug-reports-usually-fail",
    "Why Bug Reports Usually Fail",
    [
        17,
        630,
        631
    ],
    {},
    "Most bug reports look like this: \"it's broken.\" A screenshot. A vague description. And a reproduction rate of about 20% if you're lucky.",
    [
        17,
        633,
        634
    ],
    {},
    "The developer spends hours trying to reproduce it. The QA engineer files another ticket. The bug ships to production again.",
    [
        17,
        636,
        637
    ],
    {},
    "Signal was built to break this cycle.",
    [
        12,
        639,
        641
    ],
    {
        "id": 640
    },
    "what-signal-captures",
    "What Signal Captures",
    [
        17,
        643,
        644
    ],
    {},
    "When a bug occurs, Signal records:",
    [
        213,
        646,
        647,
        653,
        659,
        665,
        671,
        677
    ],
    {},
    [
        35,
        648,
        649,
        652
    ],
    {},
    [
        54,
        650,
        651
    ],
    {},
    "Session replay",
    " - frame-by-frame video of what the user saw",
    [
        35,
        654,
        655,
        658
    ],
    {},
    [
        54,
        656,
        657
    ],
    {},
    "Network HAR",
    " - every HTTP request and response, headers and bodies",
    [
        35,
        660,
        661,
        664
    ],
    {},
    [
        54,
        662,
        663
    ],
    {},
    "Console logs",
    " - errors, warnings, and custom log output",
    [
        35,
        666,
        667,
        670
    ],
    {},
    [
        54,
        668,
        669
    ],
    {},
    "DOM state",
    " - HTML snapshots at critical moments in the session",
    [
        35,
        672,
        673,
        676
    ],
    {},
    [
        54,
        674,
        675
    ],
    {},
    "User events",
    " - clicks, inputs, and navigation with precise timestamps",
    [
        35,
        678,
        679,
        682
    ],
    {},
    [
        54,
        680,
        681
    ],
    {},
    "Framework state",
    " - React, Vue, or Svelte component trees and props",
    [
        17,
        684,
        685
    ],
    {},
    "All of this is bundled into a single structured JSON report that any developer can open in the Signal viewer and explore in minutes - no account needed, no upload required.",
    [
        12,
        687,
        689
    ],
    {
        "id": 688
    },
    "local-first-by-design",
    "Local-First by Design",
    [
        17,
        691,
        692
    ],
    {},
    "Here is the part that matters: none of this leaves your machine unless you explicitly share it.",
    [
        17,
        694,
        695,
        696,
        699
    ],
    {},
    "Signal has no backend. There is no cloud database storing your session data. The extension writes to ",
    [
        42,
        697,
        698
    ],
    {},
    "chrome.storage.local",
    " and that is it. When you are done investigating, the data is gone.",
    [
        17,
        701,
        702
    ],
    {},
    "This means:",
    [
        213,
        704,
        705,
        708,
        711,
        714
    ],
    {},
    [
        35,
        706,
        707
    ],
    {},
    "No data retention policy to worry about",
    [
        35,
        709,
        710
    ],
    {},
    "No SaaS subscription required",
    [
        35,
        712,
        713
    ],
    {},
    "No sensitive production data sitting in someone else's database",
    [
        35,
        715,
        716
    ],
    {},
    "GDPR compliance is straightforward",
    [
        12,
        718,
        720
    ],
    {
        "id": 719
    },
    "the-ai-agent-handoff",
    "The AI Agent Handoff",
    [
        17,
        722,
        723
    ],
    {},
    "Signal's most powerful feature is the LLM Context export. In one click, it builds a structured prompt containing exactly the bug context an AI agent needs - filtered, redacted, and sized to fit within your model's context window.",
    [
        17,
        725,
        726
    ],
    {},
    "Paste it into Claude, GPT-4o, or any other LLM and get actionable fix suggestions immediately.",
    [
        17,
        728,
        729,
        730,
        57
    ],
    {},
    "With the Signal VS Code extension and local MCP server, you can skip the copy-paste entirely. Signal automatically pushes the context to your agent the moment you click ",
    [
        54,
        731,
        140
    ],
    {},
    [
        12,
        733,
        735
    ],
    {
        "id": 734
    },
    "get-started",
    "Get Started",
    [
        17,
        737,
        738,
        739,
        746
    ],
    {},
    "Install Signal from the ",
    [
        740,
        741,
        745
    ],
    "a",
    {
        "href": 742,
        "rel": 743
    },
    "https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Fsignal-report-bugs-feedba\u002Femhgdolnifabeijjkiooeocdomdbelia",
    [
        744
    ],
    "nofollow",
    "Chrome Web Store",
    ". It takes 30 seconds to install and nothing to configure.",
    {
        "title": 149,
        "searchDepth": 150,
        "depth": 150,
        "links": 748
    },
    [
        749,
        750,
        751,
        752,
        753
    ],
    {
        "id": 627,
        "depth": 150,
        "text": 628
    },
    {
        "id": 640,
        "depth": 150,
        "text": 641
    },
    {
        "id": 688,
        "depth": 150,
        "text": 689
    },
    {
        "id": 719,
        "depth": 150,
        "text": 720
    },
    {
        "id": 734,
        "depth": 150,
        "text": 735
    },
    "2026-04-08",
    "Signal captures everything developers need to reproduce and fix bugs, without sending a single byte to the cloud.",
    {},
    "\u002Fblog\u002Fintroducing-signal",
    "4 min read",
    {
        "title": 622,
        "description": 755
    },
    "blog\u002Fintroducing-signal",
    "bI_kdAkc0xTtFwdybaK8rDWv_ryStfnXOhgvgE7ByPk",
    1778935227573
]