[{"data":1,"prerenderedAt":387},["ShallowReactive",2],{"$fl7rc7q1sj1uvRS4okhybtrrL7dB-oBWTT2f4NMoiZ-8":3},{"newThing":4,"project":5,"cycle":9,"sections":22,"threads":333,"otherDocs":334,"documents":335,"images":336,"archiveItems":384,"links":385},"AI-agent visual language — session graphs, infra map, capability surface, inventory",{"id":6,"label":7,"liveBase":8},"qflow","Qflow",null,{"id":10,"num":11,"dir":12,"name":13,"title":14,"focus":15,"status":16,"statusNote":8,"created":17,"completed":8,"mode":8,"report":8,"recordless":18,"thumbnail":19,"imageCount":11,"artifactCount":20,"lastActivity":21,"hasPickup":18,"hasInitialPrompt":18},"c11",11,"c11.ai-ecosystem","ai-ecosystem","AI Ecosystem","PixiJS experiments expressing the AI agent monitoring dataset for security teams","archived","2026-04-03",false,"\u002Fcycles\u002Fqflow\u002Fc11-ai-ecosystem.png",0,"2026-08-15",[23,37,105,323],{"key":24,"title":25,"empty":18,"ast":26},"why","Why",{"type":27,"children":28},"root",[29],{"type":30,"tag":31,"props":32,"children":33},"element","p",{},[34],{"type":35,"value":36},"text","Driven by design cycle c33 (ai-ecosystem-visualizations). The AI monitoring dataset Qpoint captures — sessions, users, agents, endpoints, models, API keys, tools, files, secondary network calls — was expressed only as tables and list views. qflow's spatial, animated idiom was a candidate medium for making that data legible to security teams. This cycle is the qflow half of that exploration: a set of canvas experiments, each answering a distinct security question spatially, without committing to production-bound designs.",{"key":38,"title":39,"empty":18,"ast":40},"objective","Objective",{"type":27,"children":41},[42,64],{"type":30,"tag":31,"props":43,"children":44},{},[45,47,54,56,62],{"type":35,"value":46},"Build visual experiments over the AI session\u002Finventory data as a test fixture, versioned as ",{"type":30,"tag":48,"props":49,"children":51},"code",{"className":50},[],[52],{"type":35,"value":53},"Exp{Name}.r{N}.vue",{"type":35,"value":55}," and switchable from a shared nav shell (",{"type":30,"tag":48,"props":57,"children":59},{"className":58},[],[60],{"type":35,"value":61},"App.vue",{"type":35,"value":63},"):",{"type":30,"tag":65,"props":66,"children":67},"ul",{},[68,80,90,100],{"type":30,"tag":69,"props":70,"children":71},"li",{},[72,74],{"type":35,"value":73},"Session Graph — ",{"type":30,"tag":75,"props":76,"children":77},"em",{},[78],{"type":35,"value":79},"\"What did this agent touch?\"",{"type":30,"tag":69,"props":81,"children":82},{},[83,85],{"type":35,"value":84},"Infrastructure Map — ",{"type":30,"tag":75,"props":86,"children":87},{},[88],{"type":35,"value":89},"\"Who is connected to what, org-wide?\"",{"type":30,"tag":69,"props":91,"children":92},{},[93,95],{"type":35,"value":94},"Capability Surface — ",{"type":30,"tag":75,"props":96,"children":97},{},[98],{"type":35,"value":99},"\"What tools are exposed across the org?\"",{"type":30,"tag":69,"props":101,"children":102},{},[103],{"type":35,"value":104},"Inventory View — browse the ecosystem entity-by-entity",{"key":106,"title":107,"empty":18,"ast":108},"key-changes","Key Changes",{"type":27,"children":109},[110,115],{"type":30,"tag":31,"props":111,"children":112},{},[113],{"type":35,"value":114},"The experiment directory was never committed, so there are no git landings; dates below come from file timestamps. All work landed on 2026-04-03.",{"type":30,"tag":65,"props":116,"children":117},{},[118,181,198,214,238,261,284,308],{"type":30,"tag":69,"props":119,"children":120},{},[121,126,128,134,136,142,143,149,150,156,157,163,165,171,173,179],{"type":30,"tag":122,"props":123,"children":124},"strong",{},[125],{"type":35,"value":17},{"type":35,"value":127}," — Baseline copied from c10.real-data (",{"type":30,"tag":48,"props":129,"children":131},{"className":130},[],[132],{"type":35,"value":133},"main.js",{"type":35,"value":135},", ",{"type":30,"tag":48,"props":137,"children":139},{"className":138},[],[140],{"type":35,"value":141},"NodeRegistry.js",{"type":35,"value":135},{"type":30,"tag":48,"props":144,"children":146},{"className":145},[],[147],{"type":35,"value":148},"LiveFeed.js",{"type":35,"value":135},{"type":30,"tag":48,"props":151,"children":153},{"className":152},[],[154],{"type":35,"value":155},"TrailPulse.js",{"type":35,"value":135},{"type":30,"tag":48,"props":158,"children":160},{"className":159},[],[161],{"type":35,"value":162},"trail-texture.js",{"type":35,"value":164},"); ",{"type":30,"tag":48,"props":166,"children":168},{"className":167},[],[169],{"type":35,"value":170},"cycle-creation.md",{"type":35,"value":172}," and ",{"type":30,"tag":48,"props":174,"children":176},{"className":175},[],[177],{"type":35,"value":178},"data\u002Fai-session.js",{"type":35,"value":180}," added — a single mock session extracted from bob-wire dashboard-v1 wireframes, extended with an unexpected secondary call (paste.ee) as a risk-signal demo",{"type":30,"tag":69,"props":182,"children":183},{},[184,188,190,196],{"type":30,"tag":122,"props":185,"children":186},{},[187],{"type":35,"value":17},{"type":35,"value":189}," — ",{"type":30,"tag":48,"props":191,"children":193},{"className":192},[],[194],{"type":35,"value":195},"ExpSessionGraph.r1.vue",{"type":35,"value":197}," — zone layout: linear left-to-right Actors → Infrastructure → Files → External Hosts, directed edges weighted by access count, risk signals (sensitive files red, unexpected hosts orange, pulse rings)",{"type":30,"tag":69,"props":199,"children":200},{},[201,205,206,212],{"type":30,"tag":122,"props":202,"children":203},{},[204],{"type":35,"value":17},{"type":35,"value":189},{"type":30,"tag":48,"props":207,"children":209},{"className":208},[],[210],{"type":35,"value":211},"ExpSessionGraph.r2.vue",{"type":35,"value":213}," — radial layout: agent at center, four arc sectors (User, Infrastructure, Files, External Hosts) with donut-slice backgrounds, spoke weight by access count",{"type":30,"tag":69,"props":215,"children":216},{},[217,221,222,228,230,236],{"type":30,"tag":122,"props":218,"children":219},{},[220],{"type":35,"value":17},{"type":35,"value":189},{"type":30,"tag":48,"props":223,"children":225},{"className":224},[],[226],{"type":35,"value":227},"ExpInfraMap.r1.vue",{"type":35,"value":229}," + ",{"type":30,"tag":48,"props":231,"children":233},{"className":232},[],[234],{"type":35,"value":235},"data\u002Forg-wide.js",{"type":35,"value":237}," — org-wide map: endpoints (grouped dev\u002FCI\u002Fcloud) connect to models via animated traveling dots, edge color = API key used; concentration risk and credential outliers emerge spatially",{"type":30,"tag":69,"props":239,"children":240},{},[241,245,246,252,253,259],{"type":30,"tag":122,"props":242,"children":243},{},[244],{"type":35,"value":17},{"type":35,"value":189},{"type":30,"tag":48,"props":247,"children":249},{"className":248},[],[250],{"type":35,"value":251},"ExpCapSurface.r1.vue",{"type":35,"value":229},{"type":30,"tag":48,"props":254,"children":256},{"className":255},[],[257],{"type":35,"value":258},"data\u002Fcapabilities.js",{"type":35,"value":260}," — capability surface: four MCP server clusters with tool nodes sized by call volume and colored by error rate; never-called tools dimmed as latent capability",{"type":30,"tag":69,"props":262,"children":263},{},[264,268,269,275,276,282],{"type":30,"tag":122,"props":265,"children":266},{},[267],{"type":35,"value":17},{"type":35,"value":189},{"type":30,"tag":48,"props":270,"children":272},{"className":271},[],[273],{"type":35,"value":274},"ExpSessionGraph.r3.vue",{"type":35,"value":229},{"type":30,"tag":48,"props":277,"children":279},{"className":278},[],[280],{"type":35,"value":281},"data\u002Fai-session-timeline.js",{"type":35,"value":283}," — playback iteration: session replayed over a timeline with a session-info overlay",{"type":30,"tag":69,"props":285,"children":286},{},[287,291,292,298,300,306],{"type":30,"tag":122,"props":288,"children":289},{},[290],{"type":35,"value":17},{"type":35,"value":189},{"type":30,"tag":48,"props":293,"children":295},{"className":294},[],[296],{"type":35,"value":297},"ExpInventoryView.r1.vue",{"type":35,"value":299}," \u002F ",{"type":30,"tag":48,"props":301,"children":303},{"className":302},[],[304],{"type":35,"value":305},".r2.vue",{"type":35,"value":307}," — inventory views: grouped entity sidebar with per-item graph view (r1) and profile view (r2)",{"type":30,"tag":69,"props":309,"children":310},{},[311,315,316,321],{"type":30,"tag":122,"props":312,"children":313},{},[314],{"type":35,"value":17},{"type":35,"value":189},{"type":30,"tag":48,"props":317,"children":319},{"className":318},[],[320],{"type":35,"value":61},{"type":35,"value":322}," shell finalized with seven switchable tabs",{"key":324,"title":325,"empty":18,"ast":326},"outcome","Outcome",{"type":27,"children":327},[328],{"type":30,"tag":31,"props":329,"children":330},{},[331],{"type":35,"value":332},"Seven working views in one shell: Session Graph in zone, radial, and playback forms, an org-wide Infra Map, a Capability Surface, and Inventory graph and profile views. The design-side account lives in design c33, which documented qflow's visual output, data model, and limitations in the CLAUDE.md files as part of the same effort. The visual language carried forward: qmap c21 (ai-session-map) was built as the 3D companion to these 2D session graphs, and design c33's record names c41 (signal column flow) and c43 (inventory map) as the follow-ons that continued its threads.",[],[],[],[337,344,348,352,356,360,364,368,372,376,379],{"src":338,"kind":339,"order":340,"caption":341,"capturedAt":342,"route":343},"\u002Fcycles\u002Fqflow\u002Fc11-session-zone.png","hero",81,"Session graph, zone layout — Actors → Infra → Files → External","2026-08-15T23:47:41.285Z","\u002Fexperiments\u002Fc11.ai-ecosystem\u002F",{"src":345,"kind":339,"order":346,"caption":347,"capturedAt":342,"route":343},"\u002Fcycles\u002Fqflow\u002Fc11-session-radial.png",82,"Session graph, radial — agent at center, arc sectors",{"src":349,"kind":339,"order":350,"caption":351,"capturedAt":342,"route":343},"\u002Fcycles\u002Fqflow\u002Fc11-playback-mid.png",83,"Session playback mid-story — turn ~12 of 31",{"src":353,"kind":339,"order":354,"caption":355,"capturedAt":342,"route":343},"\u002Fcycles\u002Fqflow\u002Fc11-infra-map.png",85,"Org-wide infra map — endpoints → models, keyed edges",{"src":357,"kind":339,"order":358,"caption":359,"capturedAt":342,"route":343},"\u002Fcycles\u002Fqflow\u002Fc11-capability-surface.png",86,"Capability surface — tools sized by calls, colored by error rate",{"src":361,"kind":339,"order":362,"caption":363,"capturedAt":342,"route":343},"\u002Fcycles\u002Fqflow\u002Fc11-inventory-alice.png",87,"Inventory graph focused on a user (alice)",{"src":365,"kind":339,"order":366,"caption":367,"capturedAt":342,"route":343},"\u002Fcycles\u002Fqflow\u002Fc11-inventory-ci.png",88,"Inventory graph on ci-system — automation's footprint",{"src":369,"kind":339,"order":370,"caption":371,"capturedAt":342,"route":343},"\u002Fcycles\u002Fqflow\u002Fc11-inventory-risk-key.png",89,"The unattributed API key — risk highlighted",{"src":373,"kind":339,"order":374,"caption":375,"capturedAt":342,"route":343},"\u002Fcycles\u002Fqflow\u002Fc11-profile.png",90,"Inventory profile panel — the entity dossier view",{"src":19,"kind":339,"order":377,"capturedAt":378,"route":343},4999,"2026-08-15T19:12:38.820Z",{"src":380,"kind":381,"order":382,"caption":383,"capturedAt":342,"route":343},"\u002Fcycles\u002Fqflow\u002Fc11-playback-full.png","full",9000,"Playback at turn 31 — the whole session lit",[],[386],{"route":343,"href":8},1794599431028]