diff --git a/.agents/references/known-issues.md b/.agents/references/known-issues.md
index d55d916..cee9256 100644
--- a/.agents/references/known-issues.md
+++ b/.agents/references/known-issues.md
@@ -224,3 +224,8 @@
 - **ì›�ì�¸**: ot.pyì�˜ chat_snapshot_scannerì—�ì„œ íŒŒì�¼ì�„ ìˆœíšŒ íŒŒì‹±í•  ë•Œ ë‚´ë¶€ì�˜ .unlink() ê³¼ì •ì—�ì„œ ë°œìƒ�í•˜ëŠ” ì˜ˆì™¸ë‚˜ discord.Embed ìƒ�ì„± ì˜ˆì™¸ ë“±ì�„ ë£¨í”„ ì•ˆì—�ì„œ ìž¡ì•„ì£¼ì§€ ëª»í•¨. ì²« ì—�ëŸ¬ íŒŒì�¼(poison pill)ì�„ ë§Œë‚˜ëŠ” ìˆœê°„ ë£¨í”„ ì „ì²´ê°€ í�­íŒŒë�˜ì–´ ë’¤ìª½ì�˜ ì •ìƒ� íŒŒì�¼ë“¤ë�„ ì˜�ì›�ížˆ ì²˜ë¦¬ë�˜ì§€ ì•Šê³  ë‹¤ì�Œ í�´ ìŠ¤ì¼€ì¤„ì—�ì„œ ë‹¤ì‹œ ì²« íŒŒì�¼ì—� ë§‰íž˜.
 - **í•´ê²°**: ë£¨í”„ ë‚´ë¶€ì—� except Exceptionì�„ ì¶”ê°€í•˜ì—¬ ì „ì—­ ì˜ˆì™¸ë¥¼ ìž¡ì•„ ë°©ì–´. ì‹¤íŒ¨í•œ íŒŒì�¼ì�€ globì—�ì„œ ë°˜ë³µ ì‹œë�„ë�˜ì§€ ì•Šê²Œ .json.failedë¡œ ìš°íšŒ(rename)ì‹œì¼œ í��ë¥¼ ë¹„ì›Œì¤Œ.
 - **ì£¼ì�˜**: í�´ë§�/ìŠ¤ìº�ë„ˆ or ë£¨í”„ ë‚´ë¶€ì—�ì„œëŠ” ê°œë³„ ì•„ì�´í…œ íŒŒì‹± ë‹¨ê³„ì—�ì„œ ë°œìƒ� ê°€ëŠ¥í•œ ëª¨ë“  ì˜ˆì™¸ ìƒ�íƒœì—� ëŒ€í•œ Defensive Catch ë°� Continue(ìš°íšŒ) ë¡œì§�ì�´ í•„ìˆ˜ìž„.
+### [2026-04-10] [Extension] GetAllCascadeTrajectories 10-Item Hard Limit Bypass (Signal Drop)
+- **Áõ»ó**: ±âÁ¸¿¡ ÀÛ¼ºÇß´ø { limit: 30 } ÆÄ¶ó¹ÌÅÍ°¡ LS ¹é¿£µå¿¡¼­ ¹«½ÃµÇ¾î ÃÖ½Å ¼¼¼ÇÀÌ 10°³ Á¦ÇÑ¿¡ °É·Á Àß·Á³ª°¨. (Discord·Î ¸Þ½ÃÁö ´Ü ÇÑ ±ÛÀÚµµ ¾È ³Ñ¾î¿È).
+- **¿øÀÎ**: GetAllCascadeTrajectories´Â ±¸Á¶ÀûÀ¸·Î pagination ¿É¼ÇÀ» ¹«½ÃÇÏ°Å³ª °­Á¦ 10 Á¦ÇÑÀÌ °É¸².
+- **ÇØ°á**: step-probe.ts¿¡¼­ ±âº» GetAllCascadeTrajectories¿Í ´õºÒ¾î ¸ðµç Æ®·¡Á§Åä¸®¸¦ ´ýÇÁÇÏ´Â GetDiagnostics API¸¦ º´Çà È£ÃâÇÏ°í ¸ÓÁöÇÏ¿© ÃÖ½Å Session ID¸¦ ³õÄ¡Áö ¾Ê°í ÃßÃâÇÏ°Ô ÇÔ.
+- **ÁÖÀÇ**: LS Backend¿¡¼­ Á¤ÀÇÇÑ RPCÀÇ ÇÑ°è»ó Argument Á¶ÀÛÀ¸·Î Á¦ÇÑÀ» È¸ÇÇÇÒ ¼ö ¾øÀ¸¹Ç·Î, ÇâÈÄ GetDiagnostics µî ¹éµµ¾î µ¥ÀÌÅÍ¸¦ È°¿ëÇÒ °Í.
diff --git a/docs/devlog/2026-04-10.md b/docs/devlog/2026-04-10.md
index b39e4ff..e97dff9 100644
--- a/docs/devlog/2026-04-10.md
+++ b/docs/devlog/2026-04-10.md
@@ -8,3 +8,4 @@
 | 002 | 16:05 | Gravity Bridge ë¹ ë¥¸ ì�‘ë‹µ ëˆ„ë�½ ì˜¤ë¥˜ í•´ê²° (IDLE-to-IDLE íŒ¨ìŠ¤ ë¡œì§� ì™„í™”) | TBD | âœ… || 003 | 16:12 | [Bridge] DOM Observer ¿ÀÅ½Áö ¹èÁ¦ (PATS ºñÈ°¼ºÈ­)·Î ºó ²®µ¥±â µð½ºÄÚµå ¾Ë¸² ¼öÁ¤ | TBD | ? |
 
 | 004 | 16:31 | [Bot] chat_snapshot_scanner ë¯¸ì²˜ë¦¬ ì˜ˆì™¸ í�� ë§‰íž˜ í˜„ìƒ� í•´ê²° ë°� Hermes Gateway ìž¬ì‹œìž‘ | TBD | âœ… |
+| 005 | 16:50 | [Extension] GetAllCascadeTrajectories 10-Item Limit ¿ìÈ¸¿ë GetDiagnostics º´ÇÕ Á¶È¸ ÆÐÄ¡ | TBD | ? |
diff --git a/docs/devlog/entries/20260410-005.md b/docs/devlog/entries/20260410-005.md
new file mode 100644
index 0000000..481a5ab
--- /dev/null
+++ b/docs/devlog/entries/20260410-005.md
@@ -0,0 +1,14 @@
+# GetAllCascadeTrajectories 10-Item Hard Limit Bypass
+
+- **ì‹œê°„**: 2026-04-10
+- **Commit**: TBD
+- **Vikunja**: TBD
+
+## ê²°ì • ì‚¬í•­
+- `GetAllCascadeTrajectories` LS APIì�˜ `limit` ë“± íŽ˜ì�´ì§€ë„¤ì�´ì…˜ íŒŒë�¼ë¯¸í„°ê°€ ë°±ì—”ë“œì—�ì„œ ë¬´ì‹œë�˜ì–´ ìµœì‹  ì„¸ì…˜ì�´ 10ê°œ ì œí•œì—� ìž˜ë ¤ë‚˜ê°€ëŠ” ë¬¸ì œë¥¼ í™•ì�¸.
+- `DOM observer`ê°€ ë�” ì�´ìƒ� ìž‘ë�™í•˜ì§€ ì•ŠëŠ” ìƒ�íƒœ(Empty ë³´ë”” ì�´ìŠˆë¡œ ë¹„í™œì„±í™”ë�¨)ì—�ì„œ, `step-probe.ts`ë§ˆì € ì�´ 10ê°œ í•œë�„ ë°–ìœ¼ë¡œ ë°€ë ¤ë‚œ í˜„ìž¬ ì„¸ì…˜(`activeSessionId`)ì�„ ë°œê²¬í•˜ì§€ ëª»í•´, ë°œìƒ�í•œ ëª¨ë“  ì±„íŒ… ì�´ë²¤íŠ¸ íŒŒì�¼ì�´ ìž‘ì„±ë�˜ì§€ ì•ŠëŠ” ë¬¸ì œ("ë‹¨ í•œê¸€ìž�ë�„ ì•ˆ ë‚ ì•„ì˜´")ì�˜ ê·¼ë³¸ ì›�ì�¸ì�„ íŠ¹ì •í•¨.
+- `GetDiagnostics` APIë¥¼ ì‚¬ìš©í•˜ì—¬ ë‚´ë¶€ì �ìœ¼ë¡œ ì €ìž¥ë�œ `recentTrajectories` ë�¤í”„ ì „ì²´ë¥¼ ë¶ˆëŸ¬ì™€, ê¸°ì¡´ `GetAllCascadeTrajectories`ì�˜ ê²°ê³¼ë¥¼ ë³‘í•©/ë³´ì™„í•˜ë�„ë¡� ë³€ê²½. 
+- ì�´ë¥¼ í†µí•´ ì•„ë¬´ë¦¬ ë§Žì�€ ìˆ˜ì�˜ ì„¸ì…˜ì�´ ì—´ë ¤ ìžˆì–´ë�„ í˜„ìž¬ ì‚¬ìš© ì¤‘ì�¸ ì„¸ì…˜ IDë¥¼ ì‹�ë³„ ê°€ëŠ¥.
+
+## ë¯¸ì™„ë£Œ
+- ì—†ì�Œ.
diff --git a/extension/src/http-bridge.ts b/extension/src/http-bridge.ts
index ee5e4f4..2f44aea 100644
--- a/extension/src/http-bridge.ts
+++ b/extension/src/http-bridge.ts
@@ -126,6 +126,22 @@ export function startHttpBridge(ctx: HttpBridgeContext, sdk: any): Promise<numbe
                     return;
                 }
 
+                if (req.method === 'POST' && url.pathname === '/test-rpc') {
+                    let rpcBody = '';
+                    req.on('data', (c: string) => rpcBody += c);
+                    req.on('end', async () => {
+                        try {
+                            const params = JSON.parse(rpcBody);
+                            const result = await sdk.ls.rawRPC(params.method, params.args || {});
+                            res.writeHead(200, {'Content-Type': 'application/json'});
+                            res.end(typeof result === 'string' ? result : JSON.stringify(result));
+                        } catch(e: any) {
+                            res.writeHead(500); res.end(e.message);
+                        }
+                    });
+                    return;
+                }
+
                 // GET /ping â€” health check
                 if (url.pathname === '/ping') {
                     res.writeHead(200); res.end('pong');
diff --git a/extension/src/step-probe.ts b/extension/src/step-probe.ts
index 65ce960..5050f51 100644
--- a/extension/src/step-probe.ts
+++ b/extension/src/step-probe.ts
@@ -208,10 +208,44 @@ function setupMonitor() {
             ctx.logToFile(`[POLL#${pollCount}] alive`);
         }
         try {
-            // Fix (v0.5.14): Reverted 100-limit DoS but restored descending: true with a safe limit of 30
-            const allTraj = await ctx.sdk.ls.rawRPC('GetAllCascadeTrajectories', { limit: 30, descending: true });
-            if (!allTraj?.trajectorySummaries) {
-                if (pollCount <= 3) ctx.logToFile('[POLL] no trajectorySummaries');
+            // Fix (v0.5.15): Bypass 10-Item Hard Limit of GetAllCascadeTrajectories.
+            // We fetch GetDiagnostics to discover ALL recent sessions regardless of pagination.
+            let allTraj: any = { trajectorySummaries: {} };
+            try {
+                // Primary: Try fetching 100 trajectories (backend might ignore this and give 10)
+                const apiResult = await ctx.sdk.ls.rawRPC('GetAllCascadeTrajectories', { limit: 100, maxResults: 100, pageSize: 100, page_size: 100, descending: true });
+                if (apiResult?.trajectorySummaries) {
+                    allTraj.trajectorySummaries = { ...apiResult.trajectorySummaries };
+                }
+            } catch (e: any) {
+                if (pollCount <= 3) ctx.logToFile(`[POLL] GetAllCascadeTrajectories failed: ${e.message}`);
+            }
+
+            try {
+                // Fallback / Augment: GetDiagnostics provides ALL recent sessions bypassing the hard limit
+                const diagRaw = await ctx.sdk.ls.rawRPC('GetDiagnostics', {});
+                const diag = typeof diagRaw === 'string' ? JSON.parse(diagRaw) : diagRaw;
+                const recent = diag.recentTrajectories || [];
+                for (const entry of recent) {
+                    const sid = entry.googleAgentId;
+                    if (sid && !allTraj.trajectorySummaries[sid]) {
+                        allTraj.trajectorySummaries[sid] = {
+                            status: entry.status || '', 
+                            stepCount: entry.lastStepIndex || 0,
+                            lastModifiedTime: entry.lastModifiedTime || '',
+                            summary: entry.summary || 'Untitled',
+                            trajectoryMetadata: entry.trajectoryMetadata || {
+                                workspaces: [{ workspaceFolderAbsoluteUri: entry.workspaceUri || '' }]
+                            }
+                        };
+                    }
+                }
+            } catch (e: any) {
+                if (pollCount <= 3) ctx.logToFile(`[POLL] GetDiagnostics fallback failed: ${e.message}`);
+            }
+
+            if (!allTraj?.trajectorySummaries || Object.keys(allTraj.trajectorySummaries).length === 0) {
+                if (pollCount <= 3) ctx.logToFile('[POLL] no trajectorySummaries found from any source');
                 return;
             }
 
