[{"data":1,"prerenderedAt":2031},["ShallowReactive",2],{"content-vision\u002Fdesktop-app":3,"surround-\u002Fvision\u002Fdesktop-app":2025},{"id":4,"title":5,"body":6,"description":2017,"extension":2018,"meta":2019,"navigation":2020,"path":2021,"seo":2022,"stem":2023,"__hash__":2024},"content\u002F5.vision\u002F6.desktop-app.md","Desktop App & Advanced Agents",{"type":7,"value":8,"toc":1983},"minimark",[9,13,23,28,33,43,129,137,141,151,155,161,167,177,187,191,194,220,238,242,245,256,259,263,266,270,276,283,320,336,340,565,569,572,639,652,656,663,667,670,765,768,775,1154,1158,1272,1276,1279,1285,1288,1292,1295,1299,1302,1306,1309,1417,1421,1424,1430,1436,1442,1451,1516,1520,1526,1578,1581,1585,1588,1592,1736,1740,1827,1830,1834,1837,1852,1856,1859,1862,1865,1871,1874,1973,1979],[10,11,5],"h1",{"id":12},"desktop-app-advanced-agents",[14,15,16,17,22],"p",{},"The final phase of the ",[18,19,21],"a",{"href":20},"\u002Fvision#the-roadmap","roadmap"," brings Owlat to the desktop as a native communication channel, adds specialized agents for visualization and coding, and introduces graduated autonomy where organizations fine-tune how much decision-making they delegate to AI.",[24,25,27],"h2",{"id":26},"desktop-app","Desktop App",[29,30,32],"h3",{"id":31},"why-tauri","Why Tauri",[14,34,35,36,42],{},"The desktop app is built with ",[18,37,41],{"href":38,"rel":39},"https:\u002F\u002Fv2.tauri.app\u002F",[40],"nofollow","Tauri v2",":",[44,45,46,60],"table",{},[47,48,49],"thead",{},[50,51,52,55,57],"tr",{},[53,54],"th",{},[53,56,41],{},[53,58,59],{},"Electron",[61,62,63,75,86,96,107,118],"tbody",{},[50,64,65,69,72],{},[66,67,68],"td",{},"Binary size",[66,70,71],{},"~5–10 MB",[66,73,74],{},"~150–200 MB",[50,76,77,80,83],{},[66,78,79],{},"Memory usage",[66,81,82],{},"Native webview",[66,84,85],{},"Bundled Chromium",[50,87,88,91,94],{},[66,89,90],{},"License",[66,92,93],{},"MIT",[66,95,93],{},[50,97,98,101,104],{},[66,99,100],{},"Backend",[66,102,103],{},"Rust",[66,105,106],{},"Node.js",[50,108,109,112,115],{},[66,110,111],{},"Auto-update",[66,113,114],{},"Built-in updater",[66,116,117],{},"electron-updater",[50,119,120,123,126],{},[66,121,122],{},"System tray",[66,124,125],{},"Native API",[66,127,128],{},"Tray API",[14,130,131,132,136],{},"Tauri uses the OS native webview (WebKit on macOS, WebView2 on Windows, WebKitGTK on Linux) — no bundled Chromium. The app shell wraps the existing Nuxt web application, reusing ~95% of the UI code through ",[133,134,135],"code",{},"packages\u002Fui",".",[29,138,140],{"id":139},"architecture","Architecture",[142,143,148],"pre",{"className":144,"code":146,"language":147},[145],"language-text","apps\u002Fdesktop\u002F\n  src-tauri\u002F                 # Rust backend\n    src\u002F\n      main.rs                # Tauri app setup, window management\n      tray.rs                # System tray with unread count badge\n      notifications.rs       # Native OS notifications\n      updater.rs             # Auto-update via Tauri updater plugin\n    Cargo.toml\n  src\u002F                       # Frontend (shares web app code)\n    main.ts                  # Tauri-specific entry, Convex client setup\n  tauri.conf.json            # Window config, permissions, deep links\n  package.json\n","text",[133,149,146],{"__ignoreMap":150},"",[29,152,154],{"id":153},"key-features","Key features",[14,156,157,160],{},[158,159,122],"strong",{}," — persistent tray icon showing unread count from the verification queue. Clicking opens the app to the inbox view.",[14,162,163,166],{},[158,164,165],{},"Native notifications"," — when a new item enters the verification queue or a colleague sends a chat message, the OS notification system triggers. Notifications are driven by Convex reactive queries — the desktop app subscribes to unread count changes.",[14,168,169,172,173,176],{},[158,170,171],{},"Deep links"," — ",[133,174,175],{},"owlat:\u002F\u002Fthread\u002F{threadId}"," opens a specific conversation. Deep links work from email notifications, browser bookmarks, and external tools.",[14,178,179,182,183,186],{},[158,180,181],{},"Owlat as a channel"," — the desktop app is a first-class channel adapter in the same architecture. Internal chat messages flow through the same ",[133,184,185],{},"unifiedMessages"," table and the same agent pipeline as email or SMS. The chat adapter is native to Convex — messages are Convex mutations, delivery is real-time subscriptions. No WebSocket server needed beyond what Convex already provides.",[29,188,190],{"id":189},"internal-chat","Internal chat",[14,192,193],{},"Team communication within the desktop app:",[195,196,197,204,210],"ul",{},[198,199,200,203],"li",{},[158,201,202],{},"Direct messages"," — one-to-one conversations between organization members",[198,205,206,209],{},[158,207,208],{},"Channels"," — topic-based group conversations (similar to Slack channels)",[198,211,212,215,216,219],{},[158,213,214],{},"Thread-linked"," — every conversation can reference a ",[133,217,218],{},"conversationThread",", linking internal discussion to customer communication",[14,221,222,223,225,226,229,230,233,234,237],{},"Internal chat messages are ",[133,224,185],{}," with ",[133,227,228],{},"channel: 'chat'"," and ",[133,231,232],{},"memberId"," instead of ",[133,235,236],{},"contactId",". The Knowledge Graph extracts knowledge from internal conversations the same way it does from customer emails.",[29,239,241],{"id":240},"quick-queries","Quick queries",[14,243,244],{},"Organization members can ask the system questions directly from the desktop app:",[195,246,247,250,253],{},[198,248,249],{},"\"What is our current MRR?\" → queries billing data",[198,251,252],{},"\"When did we last talk to Acme Corp?\" → queries conversation threads",[198,254,255],{},"\"Show me the contract we signed with them\" → semantic file search",[14,257,258],{},"Quick queries route through the Agent Pipeline with a specialized \"query\" classification. The agent retrieves context from the Knowledge Graph and file system, generates an answer with source citations, and renders it inline.",[24,260,262],{"id":261},"visualization-agent","Visualization Agent",[14,264,265],{},"A specialized agent that takes data and builds interactive visualizations. It operates within the same Agent Pipeline — its outputs are artifacts that can land in the verification queue, render in conversations, or be pinned to dashboards.",[29,267,269],{"id":268},"how-it-works","How it works",[142,271,274],{"className":272,"code":273,"language":147},[145],"User: \"Show me our email delivery rates for the last 30 days\"\n  → Agent Pipeline classifies as visualization request\n  → Visualization agent queries emailSends for the time range\n  → Generates self-contained HTML\u002FCSS\u002FJS\n  → Frontend renders in a sandboxed iframe\n  → User can interact: hover for details, filter, change time range\n",[133,275,273],{"__ignoreMap":150},[14,277,278,279,282],{},"The visualization agent generates ",[158,280,281],{},"raw HTML, CSS, and JavaScript"," — giving it full creative flexibility to produce any visual output. Unlike constrained charting libraries, this approach lets the agent build exactly what the data needs: charts, dashboards, data tables, animated progress trackers, interactive maps, or completely custom visualizations.",[195,284,285,291,297,303],{},[198,286,287,290],{},[158,288,289],{},"Full flexibility"," — the agent writes HTML\u002FCSS\u002FJS directly, not limited to a charting library's vocabulary",[198,292,293,296],{},[158,294,295],{},"Interactive"," — JavaScript enables hover tooltips, click filtering, animated transitions, real-time updates",[198,298,299,302],{},[158,300,301],{},"Portable"," — visualizations are self-contained HTML bundles that can be saved, shared, embedded in reports, or pinned to dashboards",[198,304,305,308,309,225,312,315,316,319],{},[158,306,307],{},"Sandboxed"," — rendered in a sandboxed ",[133,310,311],{},"\u003Ciframe>",[133,313,314],{},"sandbox=\"allow-scripts\""," — no access to the parent page, Convex client, cookies, or navigation. The iframe communicates only via ",[133,317,318],{},"postMessage"," for resize events",[321,322,325],"callout",{"title":323,"type":324},"Sandboxing is critical","warning",[14,326,327,328,331,332,335],{},"Agent-generated code runs in a sandboxed iframe with no access to the host application. The ",[133,329,330],{},"sandbox"," attribute blocks top-navigation, form submission, popups, and same-origin access. Only ",[133,333,334],{},"allow-scripts"," is enabled so the visualization's own JavaScript can execute. This prevents any injected code from accessing user sessions, Convex data, or the DOM of the parent application.",[29,337,339],{"id":338},"schema","Schema",[142,341,345],{"className":342,"code":343,"language":344,"meta":150,"style":150},"language-typescript shiki shiki-themes github-light github-dark-dimmed","visualizations: defineTable({\n  organizationId: v.string(),\n  title: v.string(),\n  description: v.optional(v.string()),\n  html: v.string(),                \u002F\u002F Self-contained HTML document (HTML + CSS + JS)\n  dataQuery: v.optional(v.string()), \u002F\u002F Convex query to refresh data\n  pinned: v.boolean(),             \u002F\u002F Pinned to dashboard\n  createdBy: v.string(),           \u002F\u002F User or agent ID\n  threadId: v.optional(v.id('conversationThreads')),\n  createdAt: v.number(),\n  updatedAt: v.number(),\n})\n  .index('by_organization', ['organizationId'])\n  .index('by_organization_pinned', ['organizationId', 'pinned'])\n","typescript",[133,346,347,367,379,389,406,421,439,454,468,491,502,512,518,541],{"__ignoreMap":150},[348,349,352,356,360,364],"span",{"class":350,"line":351},"line",1,[348,353,355],{"class":354},"sOLd2","visualizations",[348,357,359],{"class":358},"sYgZi",": ",[348,361,363],{"class":362},"sPO5f","defineTable",[348,365,366],{"class":358},"({\n",[348,368,370,373,376],{"class":350,"line":369},2,[348,371,372],{"class":358},"  organizationId: v.",[348,374,375],{"class":362},"string",[348,377,378],{"class":358},"(),\n",[348,380,382,385,387],{"class":350,"line":381},3,[348,383,384],{"class":358},"  title: v.",[348,386,375],{"class":362},[348,388,378],{"class":358},[348,390,392,395,398,401,403],{"class":350,"line":391},4,[348,393,394],{"class":358},"  description: v.",[348,396,397],{"class":362},"optional",[348,399,400],{"class":358},"(v.",[348,402,375],{"class":362},[348,404,405],{"class":358},"()),\n",[348,407,409,412,414,417],{"class":350,"line":408},5,[348,410,411],{"class":358},"  html: v.",[348,413,375],{"class":362},[348,415,416],{"class":358},"(),                ",[348,418,420],{"class":419},"sDN9O","\u002F\u002F Self-contained HTML document (HTML + CSS + JS)\n",[348,422,424,427,429,431,433,436],{"class":350,"line":423},6,[348,425,426],{"class":358},"  dataQuery: v.",[348,428,397],{"class":362},[348,430,400],{"class":358},[348,432,375],{"class":362},[348,434,435],{"class":358},"()), ",[348,437,438],{"class":419},"\u002F\u002F Convex query to refresh data\n",[348,440,442,445,448,451],{"class":350,"line":441},7,[348,443,444],{"class":358},"  pinned: v.",[348,446,447],{"class":362},"boolean",[348,449,450],{"class":358},"(),             ",[348,452,453],{"class":419},"\u002F\u002F Pinned to dashboard\n",[348,455,457,460,462,465],{"class":350,"line":456},8,[348,458,459],{"class":358},"  createdBy: v.",[348,461,375],{"class":362},[348,463,464],{"class":358},"(),           ",[348,466,467],{"class":419},"\u002F\u002F User or agent ID\n",[348,469,471,474,476,478,481,484,488],{"class":350,"line":470},9,[348,472,473],{"class":358},"  threadId: v.",[348,475,397],{"class":362},[348,477,400],{"class":358},[348,479,480],{"class":362},"id",[348,482,483],{"class":358},"(",[348,485,487],{"class":486},"s-HuK","'conversationThreads'",[348,489,490],{"class":358},")),\n",[348,492,494,497,500],{"class":350,"line":493},10,[348,495,496],{"class":358},"  createdAt: v.",[348,498,499],{"class":362},"number",[348,501,378],{"class":358},[348,503,505,508,510],{"class":350,"line":504},11,[348,506,507],{"class":358},"  updatedAt: v.",[348,509,499],{"class":362},[348,511,378],{"class":358},[348,513,515],{"class":350,"line":514},12,[348,516,517],{"class":358},"})\n",[348,519,521,524,527,529,532,535,538],{"class":350,"line":520},13,[348,522,523],{"class":358},"  .",[348,525,526],{"class":362},"index",[348,528,483],{"class":358},[348,530,531],{"class":486},"'by_organization'",[348,533,534],{"class":358},", [",[348,536,537],{"class":486},"'organizationId'",[348,539,540],{"class":358},"])\n",[348,542,544,546,548,550,553,555,557,560,563],{"class":350,"line":543},14,[348,545,523],{"class":358},[348,547,526],{"class":362},[348,549,483],{"class":358},[348,551,552],{"class":486},"'by_organization_pinned'",[348,554,534],{"class":358},[348,556,537],{"class":486},[348,558,559],{"class":358},", ",[348,561,562],{"class":486},"'pinned'",[348,564,540],{"class":358},[29,566,568],{"id":567},"rendering","Rendering",[14,570,571],{},"The frontend renders visualizations via a sandboxed iframe:",[142,573,577],{"className":574,"code":575,"language":576,"meta":150,"style":150},"language-html shiki shiki-themes github-light github-dark-dimmed","\u003Ciframe\n  :srcdoc=\"visualization.html\"\n  sandbox=\"allow-scripts\"\n  referrerpolicy=\"no-referrer\"\n  style=\"width: 100%; border: none;\"\n\u002F>\n","html",[133,578,579,588,600,610,620,630],{"__ignoreMap":150},[348,580,581,584],{"class":350,"line":351},[348,582,583],{"class":358},"\u003C",[348,585,587],{"class":586},"sIAta","iframe\n",[348,589,590,594,597],{"class":350,"line":369},[348,591,593],{"class":592},"sMOND","  :srcdoc",[348,595,596],{"class":358},"=",[348,598,599],{"class":486},"\"visualization.html\"\n",[348,601,602,605,607],{"class":350,"line":381},[348,603,604],{"class":592},"  sandbox",[348,606,596],{"class":358},[348,608,609],{"class":486},"\"allow-scripts\"\n",[348,611,612,615,617],{"class":350,"line":391},[348,613,614],{"class":592},"  referrerpolicy",[348,616,596],{"class":358},[348,618,619],{"class":486},"\"no-referrer\"\n",[348,621,622,625,627],{"class":350,"line":408},[348,623,624],{"class":592},"  style",[348,626,596],{"class":358},[348,628,629],{"class":486},"\"width: 100%; border: none;\"\n",[348,631,632,636],{"class":350,"line":423},[348,633,635],{"class":634},"sNWHW","\u002F",[348,637,638],{"class":358},">\n",[14,640,641,642,645,646,648,649,651],{},"The iframe uses ",[133,643,644],{},"srcdoc"," (no network fetch) and ",[133,647,314],{}," (JS executes, but no DOM access to the parent). A ",[133,650,318],{}," listener handles resize events so the iframe height adapts to content.",[24,653,655],{"id":654},"adaptive-dashboard","Adaptive Dashboard",[14,657,658,659,662],{},"The dashboard is not a static grid of widgets. It adapts to ",[158,660,661],{},"what the user needs right now"," — different in the morning than in the evening, different on Monday than on Friday, different for a support lead than for a marketing manager.",[29,664,666],{"id":665},"context-signals","Context signals",[14,668,669],{},"The dashboard assembles itself from context signals:",[44,671,672,685],{},[47,673,674],{},[50,675,676,679,682],{},[53,677,678],{},"Signal",[53,680,681],{},"What it tells us",[53,683,684],{},"Example effect",[61,686,687,700,713,726,739,752],{},[50,688,689,694,697],{},[66,690,691],{},[158,692,693],{},"Time of day",[66,695,696],{},"Morning = planning, evening = review",[66,698,699],{},"Morning: today's scheduled campaigns, overnight inbound queue. Evening: today's performance summary, pending items for tomorrow",[50,701,702,707,710],{},[66,703,704],{},[158,705,706],{},"Day of week",[66,708,709],{},"Monday = catch-up, Friday = wrap-up",[66,711,712],{},"Monday: weekend inbound backlog, week's campaign schedule. Friday: weekly metrics, unresolved threads",[50,714,715,720,723],{},[66,716,717],{},[158,718,719],{},"Role",[66,721,722],{},"What the user is responsible for",[66,724,725],{},"Support lead sees queue depth and SLA status. Marketing manager sees campaign performance and audience growth",[50,727,728,733,736],{},[66,729,730],{},[158,731,732],{},"Recent activity",[66,734,735],{},"What the user has been working on",[66,737,738],{},"If you spent the last hour on a campaign, the dashboard surfaces its real-time delivery stats",[50,740,741,746,749],{},[66,742,743],{},[158,744,745],{},"Pending items",[66,747,748],{},"What needs attention",[66,750,751],{},"Verification queue items, campaigns waiting for approval, threads assigned to you",[50,753,754,759,762],{},[66,755,756],{},[158,757,758],{},"Anomalies",[66,760,761],{},"What's unusual right now",[66,763,764],{},"Bounce rate spike, unusual inbound volume, delivery issues with a specific ISP",[29,766,269],{"id":767},"how-it-works-1",[14,769,770,771,774],{},"The dashboard is composed of ",[158,772,773],{},"cards"," — each card is a self-contained unit that fetches its own data via Convex reactive queries. The dashboard layout engine decides which cards to show, in what order, based on the context signals above.",[142,776,778],{"className":342,"code":777,"language":344,"meta":150,"style":150},"dashboardLayouts: defineTable({\n  organizationId: v.string(),\n  memberId: v.string(),           \u002F\u002F Per-user layout\n  \u002F\u002F Context-driven layout rules\n  rules: v.array(v.object({\n    condition: v.object({\n      timeRange: v.optional(v.object({    \u002F\u002F e.g., { start: '06:00', end: '12:00' }\n        start: v.string(),\n        end: v.string(),\n      })),\n      dayOfWeek: v.optional(v.array(v.number())),  \u002F\u002F 0=Sun, 1=Mon, etc.\n      role: v.optional(v.string()),\n    }),\n    cards: v.array(v.object({\n      type: v.string(),           \u002F\u002F 'verification_queue', 'campaign_performance', 'inbound_summary', etc.\n      size: v.union(v.literal('small'), v.literal('medium'), v.literal('large')),\n      config: v.optional(v.string()),  \u002F\u002F Card-specific config (JSON)\n    })),\n    priority: v.number(),         \u002F\u002F Higher priority rules override lower ones\n  })),\n  \u002F\u002F Pinned cards always show regardless of context\n  pinnedCards: v.optional(v.array(v.object({\n    type: v.string(),\n    size: v.union(v.literal('small'), v.literal('medium'), v.literal('large')),\n    config: v.optional(v.string()),\n  }))),\n  updatedAt: v.number(),\n})\n  .index('by_member', ['organizationId', 'memberId'])\n",[133,779,780,791,799,811,816,831,840,857,866,875,880,901,914,919,932,945,985,1003,1009,1023,1029,1035,1053,1063,1097,1111,1117,1126,1131],{"__ignoreMap":150},[348,781,782,785,787,789],{"class":350,"line":351},[348,783,784],{"class":354},"dashboardLayouts",[348,786,359],{"class":358},[348,788,363],{"class":362},[348,790,366],{"class":358},[348,792,793,795,797],{"class":350,"line":369},[348,794,372],{"class":358},[348,796,375],{"class":362},[348,798,378],{"class":358},[348,800,801,804,806,808],{"class":350,"line":381},[348,802,803],{"class":358},"  memberId: v.",[348,805,375],{"class":362},[348,807,464],{"class":358},[348,809,810],{"class":419},"\u002F\u002F Per-user layout\n",[348,812,813],{"class":350,"line":391},[348,814,815],{"class":419},"  \u002F\u002F Context-driven layout rules\n",[348,817,818,821,824,826,829],{"class":350,"line":408},[348,819,820],{"class":358},"  rules: v.",[348,822,823],{"class":362},"array",[348,825,400],{"class":358},[348,827,828],{"class":362},"object",[348,830,366],{"class":358},[348,832,833,836,838],{"class":350,"line":423},[348,834,835],{"class":358},"    condition: v.",[348,837,828],{"class":362},[348,839,366],{"class":358},[348,841,842,845,847,849,851,854],{"class":350,"line":441},[348,843,844],{"class":358},"      timeRange: v.",[348,846,397],{"class":362},[348,848,400],{"class":358},[348,850,828],{"class":362},[348,852,853],{"class":358},"({    ",[348,855,856],{"class":419},"\u002F\u002F e.g., { start: '06:00', end: '12:00' }\n",[348,858,859,862,864],{"class":350,"line":456},[348,860,861],{"class":358},"        start: v.",[348,863,375],{"class":362},[348,865,378],{"class":358},[348,867,868,871,873],{"class":350,"line":470},[348,869,870],{"class":358},"        end: v.",[348,872,375],{"class":362},[348,874,378],{"class":358},[348,876,877],{"class":350,"line":493},[348,878,879],{"class":358},"      })),\n",[348,881,882,885,887,889,891,893,895,898],{"class":350,"line":504},[348,883,884],{"class":358},"      dayOfWeek: v.",[348,886,397],{"class":362},[348,888,400],{"class":358},[348,890,823],{"class":362},[348,892,400],{"class":358},[348,894,499],{"class":362},[348,896,897],{"class":358},"())),  ",[348,899,900],{"class":419},"\u002F\u002F 0=Sun, 1=Mon, etc.\n",[348,902,903,906,908,910,912],{"class":350,"line":514},[348,904,905],{"class":358},"      role: v.",[348,907,397],{"class":362},[348,909,400],{"class":358},[348,911,375],{"class":362},[348,913,405],{"class":358},[348,915,916],{"class":350,"line":520},[348,917,918],{"class":358},"    }),\n",[348,920,921,924,926,928,930],{"class":350,"line":543},[348,922,923],{"class":358},"    cards: v.",[348,925,823],{"class":362},[348,927,400],{"class":358},[348,929,828],{"class":362},[348,931,366],{"class":358},[348,933,935,938,940,942],{"class":350,"line":934},15,[348,936,937],{"class":358},"      type: v.",[348,939,375],{"class":362},[348,941,464],{"class":358},[348,943,944],{"class":419},"\u002F\u002F 'verification_queue', 'campaign_performance', 'inbound_summary', etc.\n",[348,946,948,951,954,956,959,961,964,967,969,971,974,976,978,980,983],{"class":350,"line":947},16,[348,949,950],{"class":358},"      size: v.",[348,952,953],{"class":362},"union",[348,955,400],{"class":358},[348,957,958],{"class":362},"literal",[348,960,483],{"class":358},[348,962,963],{"class":486},"'small'",[348,965,966],{"class":358},"), v.",[348,968,958],{"class":362},[348,970,483],{"class":358},[348,972,973],{"class":486},"'medium'",[348,975,966],{"class":358},[348,977,958],{"class":362},[348,979,483],{"class":358},[348,981,982],{"class":486},"'large'",[348,984,490],{"class":358},[348,986,988,991,993,995,997,1000],{"class":350,"line":987},17,[348,989,990],{"class":358},"      config: v.",[348,992,397],{"class":362},[348,994,400],{"class":358},[348,996,375],{"class":362},[348,998,999],{"class":358},"()),  ",[348,1001,1002],{"class":419},"\u002F\u002F Card-specific config (JSON)\n",[348,1004,1006],{"class":350,"line":1005},18,[348,1007,1008],{"class":358},"    })),\n",[348,1010,1012,1015,1017,1020],{"class":350,"line":1011},19,[348,1013,1014],{"class":358},"    priority: v.",[348,1016,499],{"class":362},[348,1018,1019],{"class":358},"(),         ",[348,1021,1022],{"class":419},"\u002F\u002F Higher priority rules override lower ones\n",[348,1024,1026],{"class":350,"line":1025},20,[348,1027,1028],{"class":358},"  })),\n",[348,1030,1032],{"class":350,"line":1031},21,[348,1033,1034],{"class":419},"  \u002F\u002F Pinned cards always show regardless of context\n",[348,1036,1038,1041,1043,1045,1047,1049,1051],{"class":350,"line":1037},22,[348,1039,1040],{"class":358},"  pinnedCards: v.",[348,1042,397],{"class":362},[348,1044,400],{"class":358},[348,1046,823],{"class":362},[348,1048,400],{"class":358},[348,1050,828],{"class":362},[348,1052,366],{"class":358},[348,1054,1056,1059,1061],{"class":350,"line":1055},23,[348,1057,1058],{"class":358},"    type: v.",[348,1060,375],{"class":362},[348,1062,378],{"class":358},[348,1064,1066,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095],{"class":350,"line":1065},24,[348,1067,1068],{"class":358},"    size: v.",[348,1070,953],{"class":362},[348,1072,400],{"class":358},[348,1074,958],{"class":362},[348,1076,483],{"class":358},[348,1078,963],{"class":486},[348,1080,966],{"class":358},[348,1082,958],{"class":362},[348,1084,483],{"class":358},[348,1086,973],{"class":486},[348,1088,966],{"class":358},[348,1090,958],{"class":362},[348,1092,483],{"class":358},[348,1094,982],{"class":486},[348,1096,490],{"class":358},[348,1098,1100,1103,1105,1107,1109],{"class":350,"line":1099},25,[348,1101,1102],{"class":358},"    config: v.",[348,1104,397],{"class":362},[348,1106,400],{"class":358},[348,1108,375],{"class":362},[348,1110,405],{"class":358},[348,1112,1114],{"class":350,"line":1113},26,[348,1115,1116],{"class":358},"  }))),\n",[348,1118,1120,1122,1124],{"class":350,"line":1119},27,[348,1121,507],{"class":358},[348,1123,499],{"class":362},[348,1125,378],{"class":358},[348,1127,1129],{"class":350,"line":1128},28,[348,1130,517],{"class":358},[348,1132,1134,1136,1138,1140,1143,1145,1147,1149,1152],{"class":350,"line":1133},29,[348,1135,523],{"class":358},[348,1137,526],{"class":362},[348,1139,483],{"class":358},[348,1141,1142],{"class":486},"'by_member'",[348,1144,534],{"class":358},[348,1146,537],{"class":486},[348,1148,559],{"class":358},[348,1150,1151],{"class":486},"'memberId'",[348,1153,540],{"class":358},[29,1155,1157],{"id":1156},"card-types","Card types",[44,1159,1160,1170],{},[47,1161,1162],{},[50,1163,1164,1167],{},[53,1165,1166],{},"Card",[53,1168,1169],{},"What it shows",[61,1171,1172,1182,1192,1202,1212,1222,1232,1242,1252,1262],{},[50,1173,1174,1179],{},[66,1175,1176],{},[133,1177,1178],{},"verification_queue",[66,1180,1181],{},"Pending items count, oldest item age, category breakdown",[50,1183,1184,1189],{},[66,1185,1186],{},[133,1187,1188],{},"campaign_performance",[66,1190,1191],{},"Active\u002Frecent campaign metrics (opens, clicks, delivery rate)",[50,1193,1194,1199],{},[66,1195,1196],{},[133,1197,1198],{},"inbound_summary",[66,1200,1201],{},"Inbound volume, auto-resolved vs human-reviewed, avg response time",[50,1203,1204,1209],{},[66,1205,1206],{},[133,1207,1208],{},"audience_growth",[66,1210,1211],{},"Contact growth trend, topic subscription changes",[50,1213,1214,1219],{},[66,1215,1216],{},[133,1217,1218],{},"anomaly_alert",[66,1220,1221],{},"Bounce spikes, delivery issues, unusual patterns",[50,1223,1224,1229],{},[66,1225,1226],{},[133,1227,1228],{},"scheduled_campaigns",[66,1230,1231],{},"Upcoming sends with countdown timers",[50,1233,1234,1239],{},[66,1235,1236],{},[133,1237,1238],{},"thread_assignments",[66,1240,1241],{},"Open threads assigned to this user, by priority",[50,1243,1244,1249],{},[66,1245,1246],{},[133,1247,1248],{},"weekly_summary",[66,1250,1251],{},"Week-over-week comparison of key metrics",[50,1253,1254,1259],{},[66,1255,1256],{},[133,1257,1258],{},"knowledge_recent",[66,1260,1261],{},"Recently extracted knowledge entries (new facts, decisions)",[50,1263,1264,1269],{},[66,1265,1266],{},[133,1267,1268],{},"visualization",[66,1270,1271],{},"A pinned visualization (renders the sandboxed HTML\u002FCSS\u002FJS)",[29,1273,1275],{"id":1274},"smart-defaults","Smart defaults",[14,1277,1278],{},"New users get a sensible default layout generated from their role and the organization's active features. The agent can also suggest layout changes:",[1280,1281,1282],"blockquote",{},[14,1283,1284],{},"\"You check campaign performance every morning but it's at the bottom of your dashboard. Want me to move it to the top for your morning view?\"",[14,1286,1287],{},"Users can also manually drag, resize, pin, or remove cards — and create multiple named layouts they switch between. The adaptive engine learns from usage patterns: cards the user always expands get promoted, cards they always collapse get demoted or hidden.",[29,1289,1291],{"id":1290},"agent-generated-dashboard-cards","Agent-generated dashboard cards",[14,1293,1294],{},"The Visualization Agent can produce cards that appear on the dashboard. When a user asks \"Show me weekly churn by segment\" and pins the result, it becomes a live dashboard card — re-querying the data on each load and re-rendering in its sandboxed iframe.",[24,1296,1298],{"id":1297},"agent-health-monitoring","Agent Health & Monitoring",[14,1300,1301],{},"As the agent pipeline processes messages across multiple organizations concurrently, the system needs centralized monitoring — not just for debugging, but for safety. A misbehaving LLM provider, a spike in low-confidence classifications, or a surge in rejections are signals that require automated response.",[29,1303,1305],{"id":1304},"metrics","Metrics",[14,1307,1308],{},"The monitoring system tracks per-organization metrics via Convex scheduled functions:",[44,1310,1311,1324],{},[47,1312,1313],{},[50,1314,1315,1318,1321],{},[53,1316,1317],{},"Metric",[53,1319,1320],{},"What it measures",[53,1322,1323],{},"How it is used",[61,1325,1326,1339,1352,1365,1378,1391,1404],{},[50,1327,1328,1333,1336],{},[66,1329,1330],{},[158,1331,1332],{},"Queue depth",[66,1334,1335],{},"Unprocessed inbound messages",[66,1337,1338],{},"Alerts when backlog grows beyond threshold",[50,1340,1341,1346,1349],{},[66,1342,1343],{},[158,1344,1345],{},"Processing latency",[66,1347,1348],{},"Time from message receipt to draft ready",[66,1350,1351],{},"Detects LLM provider slowdowns",[50,1353,1354,1359,1362],{},[66,1355,1356],{},[158,1357,1358],{},"Classification accuracy",[66,1360,1361],{},"Human corrections vs auto-classifications",[66,1363,1364],{},"Tracks model quality over time",[50,1366,1367,1372,1375],{},[66,1368,1369],{},[158,1370,1371],{},"Auto-approve ratio",[66,1373,1374],{},"Auto-approved vs human-reviewed",[66,1376,1377],{},"Shows autonomy adoption",[50,1379,1380,1385,1388],{},[66,1381,1382],{},[158,1383,1384],{},"Rejection rate",[66,1386,1387],{},"Drafts rejected by humans, by category",[66,1389,1390],{},"Identifies categories needing improvement",[50,1392,1393,1398,1401],{},[66,1394,1395],{},[158,1396,1397],{},"LLM cost",[66,1399,1400],{},"Token usage per organization, per step",[66,1402,1403],{},"Budget tracking and alerting",[50,1405,1406,1411,1414],{},[66,1407,1408],{},[158,1409,1410],{},"Error rate",[66,1412,1413],{},"Failed pipeline runs, by step",[66,1415,1416],{},"Detects systemic issues",[29,1418,1420],{"id":1419},"circuit-breakers","Circuit breakers",[14,1422,1423],{},"Automated safety mechanisms that activate when metrics cross thresholds:",[14,1425,1426,1429],{},[158,1427,1428],{},"LLM provider failure"," — if the LLM error rate exceeds 20% over a 5-minute window, the pipeline pauses auto-responses and queues all messages for human review. The circuit breaker resets after 5 successful calls. This prevents cascading failures from sending garbled responses.",[14,1431,1432,1435],{},[158,1433,1434],{},"Confidence degradation"," — if the average classification confidence drops below 0.6 for an organization over the last 50 messages, the system alerts the admin. Common cause: the organization's communication patterns have shifted and the agent needs updated context or knowledge entries.",[14,1437,1438,1441],{},[158,1439,1440],{},"Rejection spike"," — if humans reject more than 40% of drafts in a category over the last 24 hours, the system automatically tightens the auto-approval threshold for that category and surfaces a recommendation: \"Agent drafts for billing questions are being rejected frequently — consider adding more billing context to the knowledge base.\"",[14,1443,1444,1447,1448,42],{},[158,1445,1446],{},"Rate limiting"," — per-organization caps on daily LLM calls prevent runaway costs. Configurable in ",[133,1449,1450],{},"agentConfig",[142,1452,1454],{"className":342,"code":1453,"language":344,"meta":150,"style":150},"rateLimits: v.optional(v.object({\n  maxDailyLLMCalls: v.number(),       \u002F\u002F e.g., 1000\n  maxConcurrentPipelines: v.number(), \u002F\u002F e.g., 5\n  alertThresholdPercent: v.number(),  \u002F\u002F e.g., 80 — alert at 80% of daily cap\n})),\n",[133,1455,1456,1472,1485,1498,1511],{"__ignoreMap":150},[348,1457,1458,1461,1464,1466,1468,1470],{"class":350,"line":351},[348,1459,1460],{"class":354},"rateLimits",[348,1462,1463],{"class":358},": v.",[348,1465,397],{"class":362},[348,1467,400],{"class":358},[348,1469,828],{"class":362},[348,1471,366],{"class":358},[348,1473,1474,1477,1479,1482],{"class":350,"line":369},[348,1475,1476],{"class":358},"  maxDailyLLMCalls: v.",[348,1478,499],{"class":362},[348,1480,1481],{"class":358},"(),       ",[348,1483,1484],{"class":419},"\u002F\u002F e.g., 1000\n",[348,1486,1487,1490,1492,1495],{"class":350,"line":381},[348,1488,1489],{"class":358},"  maxConcurrentPipelines: v.",[348,1491,499],{"class":362},[348,1493,1494],{"class":358},"(), ",[348,1496,1497],{"class":419},"\u002F\u002F e.g., 5\n",[348,1499,1500,1503,1505,1508],{"class":350,"line":391},[348,1501,1502],{"class":358},"  alertThresholdPercent: v.",[348,1504,499],{"class":362},[348,1506,1507],{"class":358},"(),  ",[348,1509,1510],{"class":419},"\u002F\u002F e.g., 80 — alert at 80% of daily cap\n",[348,1512,1513],{"class":350,"line":408},[348,1514,1515],{"class":358},"})),\n",[29,1517,1519],{"id":1518},"dashboard-integration","Dashboard integration",[14,1521,1522,1523,42],{},"Agent health surfaces as dashboard cards in the ",[18,1524,655],{"href":1525},"#adaptive-dashboard",[44,1527,1528,1536],{},[47,1529,1530],{},[50,1531,1532,1534],{},[53,1533,1166],{},[53,1535,1169],{},[61,1537,1538,1548,1558,1568],{},[50,1539,1540,1545],{},[66,1541,1542],{},[133,1543,1544],{},"agent_health",[66,1546,1547],{},"Pipeline status (healthy\u002Fdegraded\u002Fpaused), active circuit breakers, error rate",[50,1549,1550,1555],{},[66,1551,1552],{},[133,1553,1554],{},"processing_queue",[66,1556,1557],{},"Current queue depth, average processing time, oldest unprocessed message",[50,1559,1560,1565],{},[66,1561,1562],{},[133,1563,1564],{},"cost_breakdown",[66,1566,1567],{},"LLM token usage by step (classification, drafting, extraction), daily\u002Fweekly trend",[50,1569,1570,1575],{},[66,1571,1572],{},[133,1573,1574],{},"accuracy_trend",[66,1576,1577],{},"Classification accuracy over time, rejection rate by category, confidence distribution",[14,1579,1580],{},"These cards are available to all roles but prioritized for admin users by the adaptive layout engine.",[24,1582,1584],{"id":1583},"graduated-autonomy","Graduated Autonomy",[14,1586,1587],{},"Organizations control how much decision-making they delegate to agents. The system earns trust incrementally.",[29,1589,1591],{"id":1590},"per-category-rules","Per-category rules",[142,1593,1595],{"className":342,"code":1594,"language":344,"meta":150,"style":150},"autonomyRules: defineTable({\n  organizationId: v.string(),\n  category: v.string(),           \u002F\u002F \"support\", \"sales\", \"billing\", etc.\n  autoApproveThreshold: v.number(),  \u002F\u002F Confidence threshold (0–1)\n  maxDailyAutoActions: v.number(),   \u002F\u002F Safety cap\n  requiresHumanAbove: v.optional(v.number()),  \u002F\u002F e.g., dollar amount\n  enabled: v.boolean(),\n  createdAt: v.number(),\n  updatedAt: v.number(),\n})\n  .index('by_organization', ['organizationId'])\n  .index('by_organization_and_category', ['organizationId', 'category'])\n",[133,1596,1597,1608,1616,1628,1640,1653,1669,1678,1686,1694,1698,1714],{"__ignoreMap":150},[348,1598,1599,1602,1604,1606],{"class":350,"line":351},[348,1600,1601],{"class":354},"autonomyRules",[348,1603,359],{"class":358},[348,1605,363],{"class":362},[348,1607,366],{"class":358},[348,1609,1610,1612,1614],{"class":350,"line":369},[348,1611,372],{"class":358},[348,1613,375],{"class":362},[348,1615,378],{"class":358},[348,1617,1618,1621,1623,1625],{"class":350,"line":381},[348,1619,1620],{"class":358},"  category: v.",[348,1622,375],{"class":362},[348,1624,464],{"class":358},[348,1626,1627],{"class":419},"\u002F\u002F \"support\", \"sales\", \"billing\", etc.\n",[348,1629,1630,1633,1635,1637],{"class":350,"line":391},[348,1631,1632],{"class":358},"  autoApproveThreshold: v.",[348,1634,499],{"class":362},[348,1636,1507],{"class":358},[348,1638,1639],{"class":419},"\u002F\u002F Confidence threshold (0–1)\n",[348,1641,1642,1645,1647,1650],{"class":350,"line":408},[348,1643,1644],{"class":358},"  maxDailyAutoActions: v.",[348,1646,499],{"class":362},[348,1648,1649],{"class":358},"(),   ",[348,1651,1652],{"class":419},"\u002F\u002F Safety cap\n",[348,1654,1655,1658,1660,1662,1664,1666],{"class":350,"line":423},[348,1656,1657],{"class":358},"  requiresHumanAbove: v.",[348,1659,397],{"class":362},[348,1661,400],{"class":358},[348,1663,499],{"class":362},[348,1665,999],{"class":358},[348,1667,1668],{"class":419},"\u002F\u002F e.g., dollar amount\n",[348,1670,1671,1674,1676],{"class":350,"line":441},[348,1672,1673],{"class":358},"  enabled: v.",[348,1675,447],{"class":362},[348,1677,378],{"class":358},[348,1679,1680,1682,1684],{"class":350,"line":456},[348,1681,496],{"class":358},[348,1683,499],{"class":362},[348,1685,378],{"class":358},[348,1687,1688,1690,1692],{"class":350,"line":470},[348,1689,507],{"class":358},[348,1691,499],{"class":362},[348,1693,378],{"class":358},[348,1695,1696],{"class":350,"line":493},[348,1697,517],{"class":358},[348,1699,1700,1702,1704,1706,1708,1710,1712],{"class":350,"line":504},[348,1701,523],{"class":358},[348,1703,526],{"class":362},[348,1705,483],{"class":358},[348,1707,531],{"class":486},[348,1709,534],{"class":358},[348,1711,537],{"class":486},[348,1713,540],{"class":358},[348,1715,1716,1718,1720,1722,1725,1727,1729,1731,1734],{"class":350,"line":514},[348,1717,523],{"class":358},[348,1719,526],{"class":362},[348,1721,483],{"class":358},[348,1723,1724],{"class":486},"'by_organization_and_category'",[348,1726,534],{"class":358},[348,1728,537],{"class":486},[348,1730,559],{"class":358},[348,1732,1733],{"class":486},"'category'",[348,1735,540],{"class":358},[29,1737,1739],{"id":1738},"example-configuration","Example configuration",[44,1741,1742,1758],{},[47,1743,1744],{},[50,1745,1746,1749,1752,1755],{},[53,1747,1748],{},"Category",[53,1750,1751],{},"Threshold",[53,1753,1754],{},"Daily Cap",[53,1756,1757],{},"Notes",[61,1759,1760,1774,1788,1802,1815],{},[50,1761,1762,1765,1768,1771],{},[66,1763,1764],{},"Simple acknowledgments",[66,1766,1767],{},"0.95",[66,1769,1770],{},"50",[66,1772,1773],{},"\"Thanks, we'll look into it\"",[50,1775,1776,1779,1782,1785],{},[66,1777,1778],{},"Support FAQ",[66,1780,1781],{},"0.90",[66,1783,1784],{},"30",[66,1786,1787],{},"Standard answers with data lookup",[50,1789,1790,1793,1796,1799],{},[66,1791,1792],{},"Billing questions",[66,1794,1795],{},"0.85",[66,1797,1798],{},"20",[66,1800,1801],{},"Account-specific responses",[50,1803,1804,1807,1810,1812],{},[66,1805,1806],{},"Sales inquiries",[66,1808,1809],{},"—",[66,1811,1809],{},[66,1813,1814],{},"Always human review",[50,1816,1817,1820,1822,1824],{},[66,1818,1819],{},"Complaints",[66,1821,1809],{},[66,1823,1809],{},[66,1825,1826],{},"Always human review + escalation",[14,1828,1829],{},"The Agent Pipeline's routing step (Step 5) consults these rules instead of a single global threshold. As confidence in the system grows, organizations expand the boundaries — enabling auto-approval for more categories and lowering thresholds.",[29,1831,1833],{"id":1832},"feedback-loop","Feedback loop",[14,1835,1836],{},"When a human rejects an agent draft:",[1838,1839,1840,1843,1846,1849],"ol",{},[198,1841,1842],{},"The rejection reason is stored",[198,1844,1845],{},"The agent's confidence calibration adjusts for similar future messages",[198,1847,1848],{},"Recurring rejections for a category automatically tighten the threshold",[198,1850,1851],{},"The system surfaces patterns: \"Agent drafts for billing questions are rejected 30% of the time — consider adding more context to the billing knowledge base\"",[24,1853,1855],{"id":1854},"coding-agents","Coding Agents",[14,1857,1858],{},"The most experimental phase: agents that take feature requests and produce working code.",[29,1860,140],{"id":1861},"architecture-1",[14,1863,1864],{},"Coding agents run as a Docker sidecar — not within Convex — because they need file system access and git operations:",[142,1866,1869],{"className":1867,"code":1868,"language":147},[145],"Feature request classified by Agent Pipeline\n  → agentActions entry with type 'code_request'\n  → Code worker picks up the task:\n    1. Creates a branch\n    2. AI SDK generates code with tool calling (read files, write files, run tests)\n    3. Runs test suite\n    4. Creates a PR with full context\n  → PR link posted to verification queue\n  → Developer reviews, improves, merges\n",[133,1870,1868],{"__ignoreMap":150},[14,1872,1873],{},"The code worker communicates with Convex via the client SDK — reading task state, updating progress, posting results. It is an optional service in the Docker Compose:",[142,1875,1879],{"className":1876,"code":1877,"language":1878,"meta":150,"style":150},"language-yaml shiki shiki-themes github-light github-dark-dimmed","code-worker:\n  build: .\u002Fapps\u002Fcode-worker\n  volumes:\n    - workspace:\u002Fworkspace\n  environment:\n    - CONVEX_URL=http:\u002F\u002Fconvex:3210\n    - LLM_PROVIDER=${LLM_PROVIDER}\n    - LLM_BASE_URL=${LLM_BASE_URL}\n    - LLM_API_KEY=${LLM_API_KEY}\n    - LLM_MODEL=${LLM_MODEL}\n  profiles:\n    - dev  # Only enabled for development-focused deployments\n","yaml",[133,1880,1881,1889,1899,1906,1914,1921,1928,1935,1942,1949,1956,1963],{"__ignoreMap":150},[348,1882,1883,1886],{"class":350,"line":351},[348,1884,1885],{"class":586},"code-worker",[348,1887,1888],{"class":358},":\n",[348,1890,1891,1894,1896],{"class":350,"line":369},[348,1892,1893],{"class":586},"  build",[348,1895,359],{"class":358},[348,1897,1898],{"class":486},".\u002Fapps\u002Fcode-worker\n",[348,1900,1901,1904],{"class":350,"line":381},[348,1902,1903],{"class":586},"  volumes",[348,1905,1888],{"class":358},[348,1907,1908,1911],{"class":350,"line":391},[348,1909,1910],{"class":358},"    - ",[348,1912,1913],{"class":486},"workspace:\u002Fworkspace\n",[348,1915,1916,1919],{"class":350,"line":408},[348,1917,1918],{"class":586},"  environment",[348,1920,1888],{"class":358},[348,1922,1923,1925],{"class":350,"line":423},[348,1924,1910],{"class":358},[348,1926,1927],{"class":486},"CONVEX_URL=http:\u002F\u002Fconvex:3210\n",[348,1929,1930,1932],{"class":350,"line":441},[348,1931,1910],{"class":358},[348,1933,1934],{"class":486},"LLM_PROVIDER=${LLM_PROVIDER}\n",[348,1936,1937,1939],{"class":350,"line":456},[348,1938,1910],{"class":358},[348,1940,1941],{"class":486},"LLM_BASE_URL=${LLM_BASE_URL}\n",[348,1943,1944,1946],{"class":350,"line":470},[348,1945,1910],{"class":358},[348,1947,1948],{"class":486},"LLM_API_KEY=${LLM_API_KEY}\n",[348,1950,1951,1953],{"class":350,"line":493},[348,1952,1910],{"class":358},[348,1954,1955],{"class":486},"LLM_MODEL=${LLM_MODEL}\n",[348,1957,1958,1961],{"class":350,"line":504},[348,1959,1960],{"class":586},"  profiles",[348,1962,1888],{"class":358},[348,1964,1965,1967,1970],{"class":350,"line":514},[348,1966,1910],{"class":358},[348,1968,1969],{"class":486},"dev",[348,1971,1972],{"class":419},"  # Only enabled for development-focused deployments\n",[321,1974,1976],{"title":1975,"type":324},"Experimental",[14,1977,1978],{},"Coding agents are the furthest-out part of the vision. The architecture is designed to support them, but the implementation will evolve significantly based on advances in AI code generation capabilities.",[1980,1981,1982],"style",{},"html pre.shiki code .sOLd2, html code.shiki .sOLd2{--shiki-default:#6F42C1;--shiki-dark:#F69D50}html pre.shiki code .sYgZi, html code.shiki .sYgZi{--shiki-default:#24292E;--shiki-dark:#ADBAC7}html pre.shiki code .sPO5f, html code.shiki .sPO5f{--shiki-default:#6F42C1;--shiki-dark:#DCBDFB}html pre.shiki code .sDN9O, html code.shiki .sDN9O{--shiki-default:#6A737D;--shiki-dark:#768390}html pre.shiki code .s-HuK, html code.shiki .s-HuK{--shiki-default:#032F62;--shiki-dark:#96D0FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sIAta, html code.shiki .sIAta{--shiki-default:#22863A;--shiki-dark:#8DDB8C}html pre.shiki code .sMOND, html code.shiki .sMOND{--shiki-default:#6F42C1;--shiki-dark:#6CB6FF}html pre.shiki code .sNWHW, html code.shiki .sNWHW{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FF938A;--shiki-dark-font-style:italic}",{"title":150,"searchDepth":369,"depth":369,"links":1984},[1985,1992,1997,2004,2009,2014],{"id":26,"depth":369,"text":27,"children":1986},[1987,1988,1989,1990,1991],{"id":31,"depth":381,"text":32},{"id":139,"depth":381,"text":140},{"id":153,"depth":381,"text":154},{"id":189,"depth":381,"text":190},{"id":240,"depth":381,"text":241},{"id":261,"depth":369,"text":262,"children":1993},[1994,1995,1996],{"id":268,"depth":381,"text":269},{"id":338,"depth":381,"text":339},{"id":567,"depth":381,"text":568},{"id":654,"depth":369,"text":655,"children":1998},[1999,2000,2001,2002,2003],{"id":665,"depth":381,"text":666},{"id":767,"depth":381,"text":269},{"id":1156,"depth":381,"text":1157},{"id":1274,"depth":381,"text":1275},{"id":1290,"depth":381,"text":1291},{"id":1297,"depth":369,"text":1298,"children":2005},[2006,2007,2008],{"id":1304,"depth":381,"text":1305},{"id":1419,"depth":381,"text":1420},{"id":1518,"depth":381,"text":1519},{"id":1583,"depth":369,"text":1584,"children":2010},[2011,2012,2013],{"id":1590,"depth":381,"text":1591},{"id":1738,"depth":381,"text":1739},{"id":1832,"depth":381,"text":1833},{"id":1854,"depth":369,"text":1855,"children":2015},[2016],{"id":1861,"depth":381,"text":140},"Technical architecture for the Owlat desktop app, visualization agent, graduated autonomy, and coding agents.","md",{},true,"\u002Fvision\u002Fdesktop-app",{"title":5,"description":2017},"5.vision\u002F6.desktop-app","MK4u4HMfAKUs2EtWfP0FCBEscgbaW1zNcPBbk17HN-U",[2026,2030],{"title":2027,"path":2028,"stem":2029,"children":-1},"Semantic File System","\u002Fvision\u002Ffile-system","5.vision\u002F5.file-system",null,1774391045907]